mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 576247 - asm_stkarg not implemented for x86_64. r=edwsmith
--HG-- extra : convert_revision : 6176f4f11b273ddde0de661a2c2de0d2219515b2
This commit is contained in:
parent
998c7234fe
commit
a365c30cae
@ -57,7 +57,6 @@ better code
|
||||
- disp64 branch/call
|
||||
- spill gp values to xmm registers?
|
||||
- prefer xmm registers for copies since gprs are in higher demand?
|
||||
- stack arg doubles
|
||||
- stack based LIR_paramp
|
||||
|
||||
tracing
|
||||
@ -629,6 +628,7 @@ namespace nanojit
|
||||
void Assembler::MOVBMI(R r, I d, I32 imm) { emitrm_imm8(X64_movbmi,r,d,imm); asm_output("movb %d(%s), %d",d,RQ(r),imm); }
|
||||
|
||||
void Assembler::MOVQSPR(I d, R r) { emit(X64_movqspr | U64(d) << 56 | U64((REGNUM(r)&7)<<3) << 40 | U64((REGNUM(r)&8)>>1) << 24); asm_output("movq %d(rsp), %s", d, RQ(r)); } // insert r into mod/rm and rex bytes
|
||||
void Assembler::MOVQSPX(I d, R r) { emit(rexprb(X64_movqspx,RSP,r) | U64(d) << 56 | U64((REGNUM(r)&7)<<3) << 40); asm_output("movq %d(rsp), %s", d, RQ(r)); }
|
||||
|
||||
void Assembler::XORPSA(R r, I32 i32) { emitxm_abs(X64_xorpsa, r, i32); asm_output("xorps %s, (0x%x)",RQ(r), i32); }
|
||||
void Assembler::XORPSM(R r, NIns* a64) { emitxm_rel(X64_xorpsm, r, a64); asm_output("xorps %s, (%p)", RQ(r), a64); }
|
||||
@ -1077,6 +1077,10 @@ namespace nanojit
|
||||
NanoAssert(ty == ARGTYPE_Q);
|
||||
// Do nothing.
|
||||
}
|
||||
} else if (ty == ARGTYPE_D) {
|
||||
NanoAssert(p->isD());
|
||||
Register r = findRegFor(p, FpRegs);
|
||||
MOVQSPX(stk_off, r); // movsd [rsp+d8], xmm
|
||||
} else {
|
||||
TODO(asm_stkarg_non_int);
|
||||
}
|
||||
|
@ -248,7 +248,8 @@ namespace nanojit
|
||||
X64_movlmr = 0x0000000080894007LL, // 32bit store r -> [b+d32]
|
||||
X64_movlrm = 0x00000000808B4007LL, // 32bit load r <- [b+d32]
|
||||
X64_movqmr = 0x0000000080894807LL, // 64bit store gpr -> [b+d32]
|
||||
X64_movqspr = 0x0024448948000005LL, // 64bit store gpr -> [rsp+d32] (sib required)
|
||||
X64_movqspr = 0x0024448948000005LL, // 64bit store gpr -> [rsp+d8] (sib required)
|
||||
X64_movqspx = 0x002444110F40F207LL, // 64bit store xmm -> [rsp+d8] (sib required)
|
||||
X64_movqr = 0xC08B480000000003LL, // 64bit mov r <- b
|
||||
X64_movqi = 0xB848000000000002LL, // 64bit mov r <- imm64
|
||||
X64_movi = 0xB840000000000002LL, // 32bit mov r <- immI
|
||||
@ -608,6 +609,7 @@ namespace nanojit
|
||||
void CALLRAX();\
|
||||
void RET();\
|
||||
void MOVQSPR(int d, Register r);\
|
||||
void MOVQSPX(int d, Register r);\
|
||||
void XORPSA(Register r, int32_t i32);\
|
||||
void XORPSM(Register r, NIns* a64);\
|
||||
void X86_AND8R(Register r);\
|
||||
|
Loading…
Reference in New Issue
Block a user