#include "regcache.h"
#define MACHINE_CPROC_SP_OFFSET 20
#define MACHINE_CPROC_PC_OFFSET 16
#define MACHINE_CPROC_FP_OFFSET 12
#define PSW_SS 0x10000000
#define TRACE_FLAVOR HP800_THREAD_STATE
#define TRACE_FLAVOR_SIZE HP800_THREAD_STATE_COUNT
#define TRACE_SET(x,state) \
((struct hp800_thread_state *)state)->cr22 |= PSW_SS
#define TRACE_CLEAR(x,state) \
((((struct hp800_thread_state *)state)->cr22 &= ~PSW_SS), 1)
#define FRAME_SAVED_PC_IN_SIGTRAMP(FRAME, TMP) \
{ \
*(TMP) = read_memory_integer ((FRAME)->frame + 0x4, 4); \
*(TMP) = read_memory_integer (*(TMP) + 0x18, 4); \
}
#define FRAME_BASE_BEFORE_SIGTRAMP(FRAME, TMP) \
{ \
*(TMP) = read_memory_integer ((FRAME)->frame + 0x4, 4); \
*(TMP) = read_memory_integer (*(TMP) + 0x8, 4); \
}
#define FRAME_FIND_SAVED_REGS_IN_SIGTRAMP(FRAME, FSR) \
{ \
int i; \
CORE_ADDR TMP; \
TMP = read_memory_integer ((FRAME)->frame + 0x4, 4); \
TMP = read_memory_integer (TMP + 0x10, 4); \
for (i = 0; i < NUM_REGS; i++) \
{ \
if (i == SP_REGNUM) \
(FSR)->regs[SP_REGNUM] = read_memory_integer (TMP + SP_REGNUM * 4, 4); \
else \
(FSR)->regs[i] = TMP + i * 4; \
} \
}
#define NO_PC_SPACE_QUEUE_RESTORE
#define INSTRUCTION_NULLIFIED \
(({ \
int ipsw = (int)read_register(IPSW_REGNUM); \
if (ipsw & PSW_N) \
{ \
int pcoqt = (int)read_register(PCOQ_TAIL_REGNUM); \
write_register(PCOQ_HEAD_REGNUM, pcoqt); \
write_register(PCOQ_TAIL_REGNUM, pcoqt + 0x4); \
write_register(IPSW_REGNUM, ipsw & ~(PSW_N | PSW_B | PSW_X)); \
stop_pc = pcoqt; \
} \
}), 0)
#include "pa/tm-hppa.h"