From: Julian Seward Date: Thu, 19 Aug 2004 17:15:49 +0000 (+0000) Subject: iselExpr64: Handle 64-bit literals X-Git-Tag: svn/VALGRIND_3_0_1^2~1153 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2202666ea8e938b9fad1afda57caa07d96f37f12;p=thirdparty%2Fvalgrind.git iselExpr64: Handle 64-bit literals git-svn-id: svn://svn.valgrind.org/vex/trunk@181 --- diff --git a/VEX/priv/host-x86/isel.c b/VEX/priv/host-x86/isel.c index f97248db45..5902f73bc6 100644 --- a/VEX/priv/host-x86/isel.c +++ b/VEX/priv/host-x86/isel.c @@ -810,6 +810,20 @@ static void iselIntExpr64 ( HReg* rHi, HReg* rLo, ISelEnv* env, IRExpr* e ) vassert(e); vassert(typeOfIRExpr(env->type_env,e) == Ity_I64); + if (e->tag == Iex_Const) { + ULong w64 = e->Iex.Const.con->Ico.U64; + UInt wHi = ((UInt)(w64 >> 32)) & 0xFFFFFFFF; + UInt wLo = ((UInt)w64) & 0xFFFFFFFF; + HReg tLo = newVRegI(env); + HReg tHi = newVRegI(env); + vassert(e->Iex.Const.con->tag == Ico_U64); + addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(wHi), tHi)); + addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(wLo), tLo)); + *rHi = tHi; + *rLo = tLo; + return; + } + /* read 64-bit IRTemp */ if (e->tag == Iex_Tmp) { lookupIRTemp64( rHi, rLo, env, e->Iex.Tmp.tmp);