mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 512366 - insert some missing assembler bits, r=dvander.
This commit is contained in:
parent
a3ca948c53
commit
8c36a6157c
@ -270,6 +270,7 @@ namespace nanojit
|
|||||||
void asm_spill(Register rr, int d, bool pop, bool quad);
|
void asm_spill(Register rr, int d, bool pop, bool quad);
|
||||||
void asm_load64(LInsp i);
|
void asm_load64(LInsp i);
|
||||||
void asm_pusharg(LInsp p);
|
void asm_pusharg(LInsp p);
|
||||||
|
void asm_ret(LInsp p);
|
||||||
void asm_quad(LInsp i);
|
void asm_quad(LInsp i);
|
||||||
void asm_loop(LInsp i, NInsList& loopJumps);
|
void asm_loop(LInsp i, NInsList& loopJumps);
|
||||||
void asm_fcond(LInsp i);
|
void asm_fcond(LInsp i);
|
||||||
@ -287,6 +288,7 @@ namespace nanojit
|
|||||||
void asm_fop(LInsp ins);
|
void asm_fop(LInsp ins);
|
||||||
void asm_i2f(LInsp ins);
|
void asm_i2f(LInsp ins);
|
||||||
void asm_u2f(LInsp ins);
|
void asm_u2f(LInsp ins);
|
||||||
|
void asm_promote(LIns *ins);
|
||||||
Register asm_prep_fcall(Reservation *rR, LInsp ins);
|
Register asm_prep_fcall(Reservation *rR, LInsp ins);
|
||||||
void asm_nongp_copy(Register r, Register s);
|
void asm_nongp_copy(Register r, Register s);
|
||||||
void asm_call(LInsp);
|
void asm_call(LInsp);
|
||||||
|
@ -2387,6 +2387,40 @@ Assembler::asm_int(LInsp ins)
|
|||||||
asm_ld_imm(rr, ins->imm32());
|
asm_ld_imm(rr, ins->imm32());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Assembler::asm_ret(LIns *ins)
|
||||||
|
{
|
||||||
|
if (_nIns != _epilogue) {
|
||||||
|
B(_epilogue);
|
||||||
|
}
|
||||||
|
assignSavedRegs();
|
||||||
|
LIns *value = ins->oprnd1();
|
||||||
|
if (ins->isop(LIR_ret)) {
|
||||||
|
findSpecificRegFor(value, R0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NanoAssert(ins->isop(LIR_fret));
|
||||||
|
#ifdef NJ_ARM_VFP
|
||||||
|
Register reg = findRegFor(value, FpRegs);
|
||||||
|
FMRRD(R0, R1, reg);
|
||||||
|
#else
|
||||||
|
NanoAssert(value->isop(LIR_qjoin));
|
||||||
|
findSpecificRegFor(value->oprnd1(), R0); // lo
|
||||||
|
findSpecificRegFor(value->oprnd2(), R1); // hi
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Assembler::asm_promote(LIns *ins)
|
||||||
|
{
|
||||||
|
/* The LIR opcodes that result in a call to asm_promote are only generated
|
||||||
|
* if NANOJIT_64BIT is #define'd, which it never is for ARM.
|
||||||
|
*/
|
||||||
|
(void)ins;
|
||||||
|
NanoAssert(0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* FEATURE_NANOJIT */
|
#endif /* FEATURE_NANOJIT */
|
||||||
|
@ -68,6 +68,7 @@ namespace nanojit
|
|||||||
static const int kcalleeAreaSize = 80; // The max size.
|
static const int kcalleeAreaSize = 80; // The max size.
|
||||||
static const int NJ_PAGE_SIZE_SPARC = 8192; // Use sparc page size here.
|
static const int NJ_PAGE_SIZE_SPARC = 8192; // Use sparc page size here.
|
||||||
|
|
||||||
|
#define TODO(x) do{ verbose_only(outputf(#x);) NanoAssertMsgf(false, "%s", #x); } while(0)
|
||||||
#define BIT_ROUND_UP(v,q) ( (((uintptr_t)v)+(q)-1) & ~((q)-1) )
|
#define BIT_ROUND_UP(v,q) ( (((uintptr_t)v)+(q)-1) & ~((q)-1) )
|
||||||
|
|
||||||
void Assembler::nInit(AvmCore* core)
|
void Assembler::nInit(AvmCore* core)
|
||||||
@ -1071,7 +1072,6 @@ namespace nanojit
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
void Assembler::asm_ret(LInsp ins)
|
void Assembler::asm_ret(LInsp ins)
|
||||||
{
|
{
|
||||||
if (_nIns != _epilogue) {
|
if (_nIns != _epilogue) {
|
||||||
@ -1085,7 +1085,11 @@ namespace nanojit
|
|||||||
findSpecificRegFor(val, F0);
|
findSpecificRegFor(val, F0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
void Assembler::asm_promote(LIns *) {
|
||||||
|
// i2q or u2q
|
||||||
|
TODO(asm_promote);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* FEATURE_NANOJIT */
|
#endif /* FEATURE_NANOJIT */
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,8 @@ namespace nanojit
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define TODO(x) do{ verbose_only(outputf(#x);) NanoAssertMsgf(false, "%s", #x); } while(0)
|
||||||
|
|
||||||
const Register Assembler::argRegs[] = { ECX, EDX };
|
const Register Assembler::argRegs[] = { ECX, EDX };
|
||||||
const Register Assembler::retRegs[] = { EAX, EDX };
|
const Register Assembler::retRegs[] = { EAX, EDX };
|
||||||
const Register Assembler::savedRegs[] = { EBX, ESI, EDI };
|
const Register Assembler::savedRegs[] = { EBX, ESI, EDI };
|
||||||
@ -1697,5 +1699,27 @@ namespace nanojit
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Assembler::asm_ret(LInsp ins)
|
||||||
|
{
|
||||||
|
if (_nIns != _epilogue) {
|
||||||
|
JMP(_epilogue);
|
||||||
|
}
|
||||||
|
assignSavedRegs();
|
||||||
|
LIns *val = ins->oprnd1();
|
||||||
|
if (ins->isop(LIR_ret)) {
|
||||||
|
findSpecificRegFor(val, retRegs[0]);
|
||||||
|
} else {
|
||||||
|
findSpecificRegFor(val, FST0);
|
||||||
|
fpu_pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Assembler::asm_promote(LIns *) {
|
||||||
|
// i2q or u2q
|
||||||
|
TODO(asm_promote);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* FEATURE_NANOJIT */
|
#endif /* FEATURE_NANOJIT */
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user