make IMM a function
This commit is contained in:
parent
a0553b9798
commit
9b279dd6c7
@ -277,7 +277,16 @@ typedef unsigned short RegM;
|
|||||||
|
|
||||||
#define ASM(INS, O, I) ASM_RAW(bin, INS(O, I))
|
#define ASM(INS, O, I) ASM_RAW(bin, INS(O, I))
|
||||||
#define ASM3(INS, O, A, B) ASM_RAW(bin, INS(O, A, B))
|
#define ASM3(INS, O, A, B) ASM_RAW(bin, INS(O, A, B))
|
||||||
#define IMM(O,I) { u64 v=(u64)(I); if(v==0) ASM(XOR,O,O); else if(v>=0 & v<(1ULL<<32)) ASM(MOV4_RI,O,v); else ASM(MOV_RI,O,v); }
|
|
||||||
#define ADDI(O, I) { i32 v=(i32)(I); if(v) { if(v==(i8)v) ASM(ADDI1,O,v); else ASM(ADDI4,O,v); } } // I must fit in i32
|
#define ADDI(O, I) { i32 v=(i32)(I); if(v) { if(v==(i8)v) ASM(ADDI1,O,v); else ASM(ADDI4,O,v); } } // I must fit in i32
|
||||||
#define SUBI(O, I) { i32 v=(i32)(I); if(v) { if(v==(i8)v) ASM(SUBI1,O,v); else ASM(SUBI4,O,v); } } // I must fit in i32
|
#define SUBI(O, I) { i32 v=(i32)(I); if(v) { if(v==(i8)v) ASM(SUBI1,O,v); else ASM(SUBI4,O,v); } } // I must fit in i32
|
||||||
|
#define IMM(O, I) b_o=imm_impl(b_o, O, (u64)(I));
|
||||||
|
static NOINLINE TStack* imm_impl(TStack* b_o, Reg o, u64 i) {
|
||||||
|
if(i==0) {
|
||||||
|
ASM(XOR,o,o);
|
||||||
|
} else if(i>=0 & i<(1ULL<<32)) {
|
||||||
|
ASM(MOV4_RI,o,i);
|
||||||
|
} else {
|
||||||
|
ASM(MOV_RI,o,i);
|
||||||
|
}
|
||||||
|
return b_o;
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user