/*[
c_stack.h
LOCAL CHAR SccsID[]="@(#)c_stack.h 1.11 03/03/95";
Stack (and related SP/BP access) Support.
-----------------------------------------
]*/
/*
SP/BP indicator for stack checking operations.
*/
#define USE_SP FALSE
#define USE_BP TRUE
/*
Useful defines for tpop(),validate_stack_exists(),
validate_stack_space() and change_SP() parameters.
*/
#define NR_ITEMS_1 1
#define NR_ITEMS_2 2
#define NR_ITEMS_3 3
#define NR_ITEMS_4 4
#define NR_ITEMS_5 5
#define NR_ITEMS_6 6
#define NR_ITEMS_8 8
#define NR_ITEMS_9 9
#define STACK_ITEM_1 (IUM32)0
#define STACK_ITEM_2 (IUM32)1
#define STACK_ITEM_3 (IUM32)2
#define STACK_ITEM_4 (IUM32)3
#define STACK_ITEM_5 (IUM32)4
#define STACK_ITEM_6 (IUM32)5
#define STACK_ITEM_7 (IUM32)6
#define STACK_ITEM_8 (IUM32)7
#define STACK_ITEM_9 (IUM32)8
#define NULL_BYTE_OFFSET (IUM32)0
IMPORT VOID byte_change_SP
IPT1(
IS32, delta
);
IMPORT VOID change_SP
IPT1(
IS32, items
);
IMPORT IU32 get_current_BP IPT0();
IMPORT IU32 GetStackPointer IPT0();
IMPORT VOID set_current_BP
IPT1(
IU32, new_bp
);
IMPORT VOID set_current_SP
IPT1(
IU32, new_sp
);
IMPORT IU32 spop IPT0();
IMPORT VOID spush
IPT1(
IU32, data
);
#ifdef PIG
IMPORT VOID spush_flags
IPT1(
IU32, data
);
#endif /* PIG */
IMPORT VOID spush16
IPT1(
IU32, data
);
#ifdef PIG
IMPORT VOID spush16_flags
IPT1(
IU32, data
);
#endif /* PIG */
IMPORT IU32 tpop
IPT2(
LIN_ADDR, item_offset,
LIN_ADDR, byte_offset
);
IMPORT VOID validate_new_stack_space
IPT4(
LIN_ADDR, bytes,
LIN_ADDR, stack_top,
CPU_DESCR *, entry,
IU16, stack_sel
);
IMPORT VOID validate_stack_exists
IPT2(
BOOL, use_bp,
LIN_ADDR, nr_items
);
IMPORT VOID validate_stack_space
IPT2(
BOOL, use_bp,
LIN_ADDR, nr_items
);
IMPORT void touch_flags_memory IPT0();
IMPORT void init_flags_esp_list IPT0();
IMPORT void record_flags_addr IPT1(LIN_ADDR, addr);