From: Julian Seward Date: Mon, 4 Oct 2004 09:14:05 +0000 (+0000) Subject: x86 host: do spill/reload of floating point registers. X-Git-Tag: svn/VALGRIND_3_0_1^2~1038 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d9ee14168ac8ea483331e0b966734d390724eaff;p=thirdparty%2Fvalgrind.git x86 host: do spill/reload of floating point registers. git-svn-id: svn://svn.valgrind.org/vex/trunk@296 --- diff --git a/VEX/priv/host-x86/hdefs.c b/VEX/priv/host-x86/hdefs.c index 73db178a2a..2ea601662a 100644 --- a/VEX/priv/host-x86/hdefs.c +++ b/VEX/priv/host-x86/hdefs.c @@ -1071,16 +1071,18 @@ Bool isMove_X86Instr ( X86Instr* i, HReg* src, HReg* dst ) X86Instr* genSpill_X86 ( HReg rreg, Int offset ) { + X86AMode* am; Int base = 4 * 55; vassert(offset >= 0); vassert(offset <= 4*(100-1)); vassert(!hregIsVirtual(rreg)); + am = X86AMode_IR(offset + base, hregX86_EBP()); + switch (hregClass(rreg)) { case HRcInt: - return - X86Instr_Alu32M ( Xalu_MOV, X86RI_Reg(rreg), - X86AMode_IR(offset + base, - hregX86_EBP())); + return X86Instr_Alu32M ( Xalu_MOV, X86RI_Reg(rreg), am ); + case HRcFloat: + return X86Instr_FpLdSt ( False/*store*/, 8, rreg, am ); default: ppHRegClass(hregClass(rreg)); vpanic("genSpill_X86: unimplemented regclass"); @@ -1089,17 +1091,17 @@ X86Instr* genSpill_X86 ( HReg rreg, Int offset ) X86Instr* genReload_X86 ( HReg rreg, Int offset ) { + X86AMode* am; Int base = 4 * 55; vassert(offset >= 0); vassert(offset <= 4*(100-1)); vassert(!hregIsVirtual(rreg)); + am = X86AMode_IR(offset + base, hregX86_EBP()); switch (hregClass(rreg)) { case HRcInt: - return - X86Instr_Alu32R ( Xalu_MOV, - X86RMI_Mem(X86AMode_IR(offset + base, - hregX86_EBP())), - rreg ); + return X86Instr_Alu32R ( Xalu_MOV, X86RMI_Mem(am), rreg ); + case HRcFloat: + return X86Instr_FpLdSt ( True/*load*/, 8, rreg, am ); default: ppHRegClass(hregClass(rreg)); vpanic("genReload_X86: unimplemented regclass");