| Index: src/checks.h
|
| diff --git a/src/checks.h b/src/checks.h
|
| index f7b145fc8a8ceb052a573c05b590d3057ac8ddaa..3829b4ac39b80973a9b7300d3531260cad4c9fc9 100644
|
| --- a/src/checks.h
|
| +++ b/src/checks.h
|
| @@ -34,6 +34,9 @@
|
|
|
| extern "C" void V8_Fatal(const char* file, int line, const char* format, ...);
|
|
|
| +// Define custom A64 preprocessor helpers to facilitate development.
|
| +#ifndef V8_TARGET_ARCH_A64
|
| +
|
| // The FATAL, UNREACHABLE and UNIMPLEMENTED macros are useful during
|
| // development, but they should not be relied on in the final product.
|
| #ifdef DEBUG
|
| @@ -51,6 +54,71 @@ extern "C" void V8_Fatal(const char* file, int line, const char* format, ...);
|
| #define UNREACHABLE() ((void) 0)
|
| #endif
|
|
|
| +#else
|
| +
|
| + #ifdef DEBUG
|
| + #define FATAL(msg) \
|
| + V8_Fatal(__FILE__, __LINE__, "%s", (msg))
|
| + #define UNREACHABLE() \
|
| + V8_Fatal(__FILE__, __LINE__, "unreachable code")
|
| + #else
|
| + #define FATAL(msg) \
|
| + V8_Fatal("", 0, "%s", (msg))
|
| + #define UNREACHABLE() ((void) 0)
|
| + #endif
|
| +
|
| + #define ABORT() printf("in %s, line %i, %s", __FILE__, __LINE__, __func__); \
|
| + abort()
|
| +
|
| + #define ALIGNMENT_EXCEPTION() printf("ALIGNMENT EXCEPTION\t"); ABORT()
|
| +
|
| + // Helpers for unimplemented sections.
|
| + #define UNIMPLEMENTED() \
|
| + do { \
|
| + printf("UNIMPLEMENTED: %s, line %d, %s\n", \
|
| + __FILE__, __LINE__, __func__); \
|
| + V8_Fatal(__FILE__, __LINE__, "unimplemented code"); \
|
| + } while (0)
|
| + #define UNIMPLEMENTED_M(message) \
|
| + do { \
|
| + printf("UNIMPLEMENTED: %s, line %d, %s : %s\n", \
|
| + __FILE__, __LINE__, __func__, message); \
|
| + V8_Fatal(__FILE__, __LINE__, "unimplemented code"); \
|
| + } while (0)
|
| + // Like UNIMPLEMENTED, but does not abort.
|
| + #define TODO_UNIMPLEMENTED(message) \
|
| + do { \
|
| + static const unsigned int kLimit = 1; \
|
| + static unsigned int printed = 0; \
|
| + if (printed < UINT_MAX) { \
|
| + printed++; \
|
| + } \
|
| + if (printed <= kLimit) { \
|
| + printf("UNIMPLEMENTED: %s, line %d, %s: %s\n", \
|
| + __FILE__, __LINE__, __func__, message); \
|
| + } \
|
| + } while (0)
|
| +
|
| + // Simulator specific helpers.
|
| + #ifdef USE_SIMULATOR
|
| + // Helpers for unimplemented sections.
|
| + // TODO(all): If possible automatically prepend an indicator like
|
| + // UNIMPLEMENTED or LOCATION.
|
| + #define ASM_UNIMPLEMENTED(message) \
|
| + __ Debug(message, __LINE__, NO_PARAM)
|
| + #define ASM_UNIMPLEMENTED_BREAK(message) \
|
| + __ Debug(message, __LINE__, \
|
| + FLAG_ignore_asm_unimplemented_break ? NO_PARAM : BREAK)
|
| + #define ASM_LOCATION(message) \
|
| + __ Debug("LOCATION: " message, __LINE__, NO_PARAM)
|
| + #else
|
| + #define ASM_UNIMPLEMENTED(message)
|
| + #define ASM_UNIMPLEMENTED_BREAK(message)
|
| + #define ASM_LOCATION(message)
|
| + #endif
|
| +
|
| +#endif
|
| +
|
|
|
| // The CHECK macro checks that the given condition is true; if not, it
|
| // prints a message to stderr and aborts.
|
|
|