mirror of
https://github.com/kanjitalk755/macemu.git
synced 2024-12-24 10:32:32 +00:00
Add gen_spcflags_{init,set,clear} + load/store of GPRs to T2.
This commit is contained in:
parent
6a4463b8fb
commit
48d844a40a
@ -36,6 +36,7 @@ register struct powerpc_cpu *CPU asm(REG_CPU);
|
||||
register uint32 A0 asm(REG_A0);
|
||||
register uint32 T0 asm(REG_T0);
|
||||
register uint32 T1 asm(REG_T1);
|
||||
register uint32 T2 asm(REG_T2);
|
||||
|
||||
// Semantic action templates
|
||||
#define DYNGEN_OPS
|
||||
@ -61,6 +62,7 @@ struct powerpc_dyngen_helper {
|
||||
static inline void record(int crf, int32 v) { CPU->record_cr(crf, v); }
|
||||
static inline powerpc_cr_register & cr() { return CPU->cr(); }
|
||||
static inline powerpc_xer_register & xer() { return CPU->xer(); }
|
||||
static inline powerpc_spcflags & spcflags() { return CPU->spcflags(); }
|
||||
};
|
||||
|
||||
|
||||
@ -80,7 +82,8 @@ void OPPROTO op_store_##REG##_GPR##N(void) \
|
||||
#define DEFINE_REG(N) \
|
||||
DEFINE_OP(A0,N); \
|
||||
DEFINE_OP(T0,N); \
|
||||
DEFINE_OP(T1,N);
|
||||
DEFINE_OP(T1,N); \
|
||||
DEFINE_OP(T2,N);
|
||||
|
||||
DEFINE_REG(0);
|
||||
DEFINE_REG(1);
|
||||
@ -298,6 +301,21 @@ void OPPROTO op_load_A0_LR(void)
|
||||
A0 = powerpc_dyngen_helper::get_lr() & -4;
|
||||
}
|
||||
|
||||
void OPPROTO op_spcflags_init(void)
|
||||
{
|
||||
powerpc_dyngen_helper::spcflags().set(PARAM1);
|
||||
}
|
||||
|
||||
void OPPROTO op_spcflags_set(void)
|
||||
{
|
||||
powerpc_dyngen_helper::spcflags().set(PARAM1);
|
||||
}
|
||||
|
||||
void OPPROTO op_spcflags_clear(void)
|
||||
{
|
||||
powerpc_dyngen_helper::spcflags().clear(PARAM1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Branch instructions
|
||||
|
@ -113,9 +113,11 @@ void powerpc_dyngen::gen_##OP##_##REG##_##REGT(int i) \
|
||||
DEFINE_INSN(load, A0, GPR);
|
||||
DEFINE_INSN(load, T0, GPR);
|
||||
DEFINE_INSN(load, T1, GPR);
|
||||
DEFINE_INSN(load, T2, GPR);
|
||||
DEFINE_INSN(store, A0, GPR);
|
||||
DEFINE_INSN(store, T0, GPR);
|
||||
DEFINE_INSN(store, T1, GPR);
|
||||
DEFINE_INSN(store, T2, GPR);
|
||||
|
||||
// Condition register bitfield
|
||||
DEFINE_INSN(load, T0, crb);
|
||||
|
@ -51,9 +51,11 @@ public:
|
||||
void gen_load_A0_GPR(int i);
|
||||
void gen_load_T0_GPR(int i);
|
||||
void gen_load_T1_GPR(int i);
|
||||
void gen_load_T2_GPR(int i);
|
||||
void gen_store_A0_GPR(int i);
|
||||
void gen_store_T0_GPR(int i);
|
||||
void gen_store_T1_GPR(int i);
|
||||
void gen_store_T2_GPR(int i);
|
||||
|
||||
// Raw aliases
|
||||
#define DEFINE_ALIAS_RAW(NAME, PRE, POST, ARGLIST, ARGS) \
|
||||
@ -102,6 +104,10 @@ public:
|
||||
DEFINE_ALIAS(load_A0_LR,0);
|
||||
DEFINE_ALIAS(store_im_LR,1);
|
||||
|
||||
DEFINE_ALIAS(spcflags_init,1);
|
||||
DEFINE_ALIAS(spcflags_set,1);
|
||||
DEFINE_ALIAS(spcflags_clear,1);
|
||||
|
||||
// Control Flow
|
||||
DEFINE_ALIAS(decrement_ctr_T0,0);
|
||||
DEFINE_ALIAS(branch_A0_if_T0,1);
|
||||
|
Loading…
Reference in New Issue
Block a user