|
From: <sv...@va...> - 2010-01-02 13:24:08
|
Author: sewardj
Date: 2010-01-02 13:23:54 +0000 (Sat, 02 Jan 2010)
New Revision: 1952
Log:
gen{Spill,Reload}_PPC: track recent change in genSpill/Reload
signature.
Modified:
trunk/priv/host_ppc_defs.c
trunk/priv/host_ppc_defs.h
Modified: trunk/priv/host_ppc_defs.c
===================================================================
--- trunk/priv/host_ppc_defs.c 2010-01-01 19:19:08 UTC (rev 1951)
+++ trunk/priv/host_ppc_defs.c 2010-01-02 13:23:54 UTC (rev 1952)
@@ -2148,51 +2148,63 @@
/* Generate ppc spill/reload instructions under the direction of the
register allocator. Note it's critical these don't write the
condition codes. */
-PPCInstr* genSpill_PPC ( HReg rreg, UShort offsetB, Bool mode64 )
+
+void genSpill_PPC ( /*OUT*/HInstr** i1, /*OUT*/HInstr** i2,
+ HReg rreg, Int offsetB, Bool mode64 )
{
PPCAMode* am;
vassert(!hregIsVirtual(rreg));
+ *i1 = *i2 = NULL;
am = PPCAMode_IR( offsetB, GuestStatePtr(mode64) );
-
switch (hregClass(rreg)) {
- case HRcInt64:
- vassert(mode64);
- return PPCInstr_Store( 8, am, rreg, mode64 );
- case HRcInt32:
- vassert(!mode64);
- return PPCInstr_Store( 4, am, rreg, mode64 );
- case HRcFlt64:
- return PPCInstr_FpLdSt ( False/*store*/, 8, rreg, am );
- case HRcVec128:
- // XXX: GPR30 used as spill register to kludge AltiVec AMode_IR
- return PPCInstr_AvLdSt ( False/*store*/, 16, rreg, am );
- default:
- ppHRegClass(hregClass(rreg));
- vpanic("genSpill_PPC: unimplemented regclass");
+ case HRcInt64:
+ vassert(mode64);
+ *i1 = PPCInstr_Store( 8, am, rreg, mode64 );
+ return;
+ case HRcInt32:
+ vassert(!mode64);
+ *i1 = PPCInstr_Store( 4, am, rreg, mode64 );
+ return;
+ case HRcFlt64:
+ *i1 = PPCInstr_FpLdSt ( False/*store*/, 8, rreg, am );
+ return;
+ case HRcVec128:
+ // XXX: GPR30 used as spill register to kludge AltiVec
+ // AMode_IR
+ *i1 = PPCInstr_AvLdSt ( False/*store*/, 16, rreg, am );
+ return;
+ default:
+ ppHRegClass(hregClass(rreg));
+ vpanic("genSpill_PPC: unimplemented regclass");
}
}
-PPCInstr* genReload_PPC ( HReg rreg, UShort offsetB, Bool mode64 )
+void genReload_PPC ( /*OUT*/HInstr** i1, /*OUT*/HInstr** i2,
+ HReg rreg, Int offsetB, Bool mode64 )
{
PPCAMode* am;
vassert(!hregIsVirtual(rreg));
+ *i1 = *i2 = NULL;
am = PPCAMode_IR( offsetB, GuestStatePtr(mode64) );
-
switch (hregClass(rreg)) {
- case HRcInt64:
- vassert(mode64);
- return PPCInstr_Load( 8, rreg, am, mode64 );
- case HRcInt32:
- vassert(!mode64);
- return PPCInstr_Load( 4, rreg, am, mode64 );
- case HRcFlt64:
- return PPCInstr_FpLdSt ( True/*load*/, 8, rreg, am );
- case HRcVec128:
- // XXX: GPR30 used as spill register to kludge AltiVec AMode_IR
- return PPCInstr_AvLdSt ( True/*load*/, 16, rreg, am );
- default:
- ppHRegClass(hregClass(rreg));
- vpanic("genReload_PPC: unimplemented regclass");
+ case HRcInt64:
+ vassert(mode64);
+ *i1 = PPCInstr_Load( 8, rreg, am, mode64 );
+ return;
+ case HRcInt32:
+ vassert(!mode64);
+ *i1 = PPCInstr_Load( 4, rreg, am, mode64 );
+ return;
+ case HRcFlt64:
+ *i1 = PPCInstr_FpLdSt ( True/*load*/, 8, rreg, am );
+ return;
+ case HRcVec128:
+ // XXX: GPR30 used as spill register to kludge AltiVec AMode_IR
+ *i1 = PPCInstr_AvLdSt ( True/*load*/, 16, rreg, am );
+ return;
+ default:
+ ppHRegClass(hregClass(rreg));
+ vpanic("genReload_PPC: unimplemented regclass");
}
}
Modified: trunk/priv/host_ppc_defs.h
===================================================================
--- trunk/priv/host_ppc_defs.h 2010-01-01 19:19:08 UTC (rev 1951)
+++ trunk/priv/host_ppc_defs.h 2010-01-02 13:23:54 UTC (rev 1952)
@@ -854,8 +854,12 @@
extern Bool isMove_PPCInstr ( PPCInstr*, HReg*, HReg* );
extern Int emit_PPCInstr ( UChar* buf, Int nbuf, PPCInstr*,
Bool mode64, void* dispatch );
-extern PPCInstr* genSpill_PPC ( HReg rreg, UShort offsetB, Bool mode64 );
-extern PPCInstr* genReload_PPC ( HReg rreg, UShort offsetB, Bool mode64 );
+
+extern void genSpill_PPC ( /*OUT*/HInstr** i1, /*OUT*/HInstr** i2,
+ HReg rreg, Int offsetB, Bool mode64 );
+extern void genReload_PPC ( /*OUT*/HInstr** i1, /*OUT*/HInstr** i2,
+ HReg rreg, Int offsetB, Bool mode64 );
+
extern void getAllocableRegs_PPC ( Int*, HReg**, Bool mode64 );
extern HInstrArray* iselSB_PPC ( IRSB*, VexArch,
VexArchInfo*,
|