-#ifndef DEBUG_EXTRA
-#define ARGTAG_MAX 16 /* probably arbitrary */
-#define ARG_TAG(n) (n)
-#define ARG_SIZE(n) stgCast(StgWord,n)
-
-typedef enum {
- REALWORLD_TAG = 0,
- INT_TAG = sizeofW(StgInt),
- INT64_TAG = sizeofW(StgInt64),
- WORD_TAG = sizeofW(StgWord),
- ADDR_TAG = sizeofW(StgAddr),
- CHAR_TAG = sizeofW(StgChar),
- FLOAT_TAG = sizeofW(StgFloat),
- DOUBLE_TAG = sizeofW(StgDouble),
- STABLE_TAG = sizeofW(StgWord),
-} StackTag;
-
-#else /* DEBUG_EXTRA */
-
-typedef enum {
- ILLEGAL_TAG,
- REALWORLD_TAG,
- INT_TAG ,
- INT64_TAG ,
- WORD_TAG ,
- ADDR_TAG ,
- CHAR_TAG ,
- FLOAT_TAG ,
- DOUBLE_TAG ,
- STABLE_TAG ,
- ARGTAG_MAX = DOUBLE_TAG
-} StackTag;
-
-/* putting this in a .h file generates many copies - but its only a
- * debugging build.
- */
-static StgWord stg_arg_size[] = {
- [REALWORLD_TAG] = 0,
- [INT_TAG ] = sizeofW(StgInt),
- [INT64_TAG ] = sizeofW(StgInt64),
- [WORD_TAG ] = sizeofW(StgWord),
- [ADDR_TAG ] = sizeofW(StgAddr),
- [CHAR_TAG ] = sizeofW(StgChar),
- [FLOAT_TAG ] = sizeofW(StgFloat),
- [DOUBLE_TAG] = sizeofW(StgDouble),
- [STABLE_TAG] = sizeofW(StgWord)
-};
-
-#define ARG_SIZE(tag) stg_arg_size[stgCast(StgWord,tag)]
-
-#endif /* DEBUG_EXTRA */
-
-static inline int IS_ARG_TAG( StgWord p );
-static inline int IS_ARG_TAG( StgWord p ) { return p <= ARGTAG_MAX; }
-
-/* -----------------------------------------------------------------------------
- Argument checks.
-
- If (Sp + <n_args>) > Su { JMP_(stg_update_PAP); }
-
- Sp points to the topmost used word on the stack, and Su points to
- the most recently pushed update frame.
-
- Remember that <n_args> must include any tagging of unboxed values.
-
- ARGS_CHK_LOAD_NODE is for top-level functions, whose entry
- convention doesn't require that Node is loaded with a pointer to
- the closure. Thus we must load node before calling stg_updatePAP if
- the argument check fails.
- -------------------------------------------------------------------------- */
-
-#define ARGS_CHK(n) \
- if ((P_)(Sp + (n)) > (P_)Su) { \
- JMP_(stg_update_PAP); \
- }
-
-#define ARGS_CHK_LOAD_NODE(n,closure) \
- if ((P_)(Sp + (n)) > (P_)Su) { \
- R1.p = (P_)closure; \
- JMP_(stg_update_PAP); \
- }