static UChar extend_s_5to8 ( UChar x )
{
- return (UChar)((((Int)x) << 27) >> 27);
+ return toUChar((((Int)x) << 27) >> 27);
}
#if 0
fld = getReg_masked( reg, (0xF << (field_idx*4)) );
if (field_idx != 0) {
- fld = binop(Iop_Shr32, fld, mkU8(field_idx * 4));
+ fld = binop(Iop_Shr32, fld, mkU8(toUChar(field_idx * 4)));
}
return fld;
}
static IRExpr* getReg_bit ( PPC32SPR reg, UInt bit_idx )
{
IRExpr* val;
- vassert( bit_idx <= 32 );
+ vassert( bit_idx < 32 );
vassert( reg < PPC32_SPR_MAX );
val = getReg_masked( reg, 1<<bit_idx );
if (bit_idx != 0) {
- val = binop(Iop_Shr32, val, mkU8(bit_idx));
+ val = binop(Iop_Shr32, val, mkU8(toUChar(bit_idx)));
}
return val;
}
vassert( reg < PPC32_SPR_MAX );
if (field_idx != 0) {
- src = binop(Iop_Shl32, src, mkU8(field_idx * 4));
+ src = binop(Iop_Shl32, src, mkU8(toUChar(field_idx * 4)));
}
putReg_masked( reg, src, (0xF << (field_idx*4)) );
}
vassert( reg < PPC32_SPR_MAX );
if (bit_idx != 0) {
- src = binop(Iop_Shl32, src, mkU8(bit_idx));
+ src = binop(Iop_Shl32, src, mkU8(toUChar(bit_idx)));
}
putReg_masked( reg, src, (1<<bit_idx) );
}
-
-
-
-
-
-
/*------------------------------------------------------------*/
/*--- Integer Instruction Translation --- */
/*------------------------------------------------------------*/
switch (opc1) {
case 0x0B: // cmpi (Compare Immediate, PPC32 p368)
EXTS_SIMM = extend_s_16to32(SIMM_16);
- DIP("cmpi crf%d,%u,r%d,0x%x\n", crfD, flag_L, Ra_addr, EXTS_SIMM);
+ DIP("cmpi crf%d,%d,r%d,0x%x\n", crfD, flag_L, Ra_addr, EXTS_SIMM);
irx_cmp_lt = binop(Iop_CmpLT32S, mkexpr(Ra), mkU32(EXTS_SIMM));
irx_cmp_eq = binop(Iop_CmpEQ32, mkexpr(Ra), mkU32(EXTS_SIMM));
break;
case 0x0A: // cmpli (Compare Logical Immediate, PPC32 p370)
- DIP("cmpli crf%d,%u,r%d,0x%x\n", crfD, flag_L, Ra_addr, UIMM_16);
+ DIP("cmpli crf%d,%d,r%d,0x%x\n", crfD, flag_L, Ra_addr, UIMM_16);
irx_cmp_lt = binop(Iop_CmpLT32U, mkexpr(Ra), mkU32(UIMM_16));
irx_cmp_eq = binop(Iop_CmpEQ32, mkexpr(Ra), mkU32(UIMM_16));
break;
switch (opc2) {
case 0x000: // cmp (Compare, PPC32 p367)
- DIP("cmp crf%d,%u,r%d,r%d\n", crfD, flag_L,
+ DIP("cmp crf%d,%d,r%d,r%d\n", crfD, flag_L,
Ra_addr, Rb_addr);
irx_cmp_lt = binop(Iop_CmpLT32S, mkexpr(Ra), mkexpr(Rb));
break;
case 0x020: // cmpl (Compare Logical, PPC32 p369)
- DIP("cmpl crf%d,%u,r%d,r%d\n", crfD, flag_L,
+ DIP("cmpl crf%d,%d,r%d,r%d\n", crfD, flag_L,
Ra_addr, Rb_addr);
irx_cmp_lt = binop(Iop_CmpLT32U, mkexpr(Ra), mkexpr(Rb));
break;
switch (opc1) {
case 0x14: // rlwimi (Rotate Left Word Immediate then Mask Insert, PPC32 p500)
- DIP("rlwimi%s r%d,r%d,%d,%u,%u\n", flag_Rc ? "." : "",
+ DIP("rlwimi%s r%d,r%d,%d,%d,%d\n", flag_Rc ? "." : "",
Ra_addr, Rs_addr, sh_imm, MaskBegin, MaskEnd);
// Ra = (ROTL(Rs, Imm) & mask) | (Ra & ~mask);
assign( Ra, binop(Iop_Or32,
break;
case 0x15: // rlwinm (Rotate Left Word Immediate then AND with Mask, PPC32 p501)
- DIP("rlwinm%s r%d,r%d,%d,%u,%u\n", flag_Rc ? "." : "",
+ DIP("rlwinm%s r%d,r%d,%d,%d,%d\n", flag_Rc ? "." : "",
Ra_addr, Rs_addr, sh_imm, MaskBegin, MaskEnd);
// Ra = ROTL(Rs, Imm) & mask
assign( Ra, binop(Iop_And32, ROTL32(mkexpr(Rs),
break;
case 0x17: // rlwnm (Rotate Left Word then AND with Mask, PPC32 p503
- DIP("rlwnm%s r%d,r%d,r%d,%u,%u\n", flag_Rc ? "." : "",
+ DIP("rlwnm%s r%d,r%d,r%d,%d,%d\n", flag_Rc ? "." : "",
Ra_addr, Rs_addr, Rb_addr, MaskBegin, MaskEnd);
// Ra = ROTL(Rs, Rb[0-4]) & mask
assign( rot_amt,
return False;
}
}
- DIP("lswi r%d,r%d,%u\n", Rd_addr, Ra_addr, NumBytes);
+ DIP("lswi r%d,r%d,%d\n", Rd_addr, Ra_addr, NumBytes);
assign( EA, mkexpr(b_EA) );
case 0x2D5: // stswi (Store String Word Immediate, PPC32 p528)
vassert(0);
- DIP("stswi r%d,r%d,%u\n", Rs_addr, Ra_addr, NumBytes);
+ DIP("stswi r%d,r%d,%d\n", Rs_addr, Ra_addr, NumBytes);
if (Ra_addr == 0) {
assign( EA, mkU32(0) );
} else {
/* D-Form */
UInt d_imm = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
- UInt exts_d_imm = extend_s_16to32(d_imm);
+ Int exts_d_imm = extend_s_16to32(d_imm);
IRTemp EA = newTemp(Ity_I32);
IRTemp rA = newTemp(Ity_I32);
switch(opc1) {
case 0x30: // lfs (Load Float Single, PPC32 p441)
- DIP("lfs fr%d,%d(r%d)\n", frD_addr, d_imm, rA_addr);
+ DIP("lfs fr%d,%d(r%d)\n", frD_addr, exts_d_imm, rA_addr);
assign( EA, binop(Iop_Add32, mkU32(exts_d_imm), mkexpr(rA_or_0)) );
putFReg( frD_addr, unop(Iop_F32toF64, loadBE(Ity_F32, mkexpr(EA))) );
break;
vex_printf("dis_fp_load(PPC32)(instr,lfsu)\n");
return False;
}
- DIP("lfsu fr%d,%d(r%d)\n", frD_addr, d_imm, rA_addr);
+ DIP("lfsu fr%d,%d(r%d)\n", frD_addr, exts_d_imm, rA_addr);
assign( EA, binop(Iop_Add32, mkU32(exts_d_imm), mkexpr(rA)) );
putFReg( frD_addr, unop(Iop_F32toF64, loadBE(Ity_F32, mkexpr(EA))) );
putIReg( rA_addr, mkexpr(EA) );
break;
case 0x32: // lfd (Load Float Double, PPC32 p437)
- DIP("lfd fr%d,%d(r%d)\n", frD_addr, d_imm, rA_addr);
+ DIP("lfd fr%d,%d(r%d)\n", frD_addr, exts_d_imm, rA_addr);
assign( EA, binop(Iop_Add32, mkU32(exts_d_imm), mkexpr(rA_or_0)) );
putFReg( frD_addr, loadBE(Ity_F64, mkexpr(EA)) );
break;
vex_printf("dis_fp_load(PPC32)(instr,lfdu)\n");
return False;
}
- DIP("lfdu fr%d,%d(r%d)\n", frD_addr, d_imm, rA_addr);
+ DIP("lfdu fr%d,%d(r%d)\n", frD_addr, exts_d_imm, rA_addr);
assign( EA, binop(Iop_Add32, mkU32(exts_d_imm), mkexpr(rA)) );
putFReg( frD_addr, loadBE(Ity_F64, mkexpr(EA)) );
putIReg( rA_addr, mkexpr(EA) );
/* D-Form */
UInt d_imm = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
- UInt exts_d_imm = extend_s_16to32(d_imm);
+ Int exts_d_imm = extend_s_16to32(d_imm);
IRTemp EA = newTemp(Ity_I32);
IRTemp frS = newTemp(Ity_F64);
switch(opc1) {
case 0x34: // stfs (Store Float Single, PPC32 p518)
- DIP("stfs fr%d,%d(r%d)\n", frS_addr, d_imm, rA_addr);
+ DIP("stfs fr%d,%d(r%d)\n", frS_addr, exts_d_imm, rA_addr);
assign( EA, binop(Iop_Add32, mkU32(exts_d_imm), mkexpr(rA_or_0)) );
storeBE( mkexpr(EA),
binop(Iop_F64toF32, get_roundingmode(), mkexpr(frS)) );
vex_printf("dis_fp_store(PPC32)(instr,stfsu)\n");
return False;
}
- DIP("stfsu fr%d,%d(r%d)\n", frS_addr, d_imm, rA_addr);
+ DIP("stfsu fr%d,%d(r%d)\n", frS_addr, exts_d_imm, rA_addr);
assign( EA, binop(Iop_Add32, mkU32(exts_d_imm), mkexpr(rA)) );
storeBE( mkexpr(EA),
binop(Iop_F64toF32, get_roundingmode(), mkexpr(frS)) );
break;
case 0x36: // stfd (Store Float Double, PPC32 p513)
- DIP("stfd fr%d,%d(r%d)\n", frS_addr, d_imm, rA_addr);
+ DIP("stfd fr%d,%d(r%d)\n", frS_addr, exts_d_imm, rA_addr);
assign( EA, binop(Iop_Add32, mkU32(exts_d_imm), mkexpr(rA_or_0)) );
storeBE( mkexpr(EA), mkexpr(frS) );
break;
vex_printf("dis_fp_store(PPC32)(instr,stfdu)\n");
return False;
}
- DIP("stfdu fr%d,%d(r%d)\n", frS_addr, d_imm, rA_addr);
+ DIP("stfdu fr%d,%d(r%d)\n", frS_addr, exts_d_imm, rA_addr);
assign( EA, binop(Iop_Add32, mkU32(exts_d_imm), mkexpr(rA)) );
storeBE( mkexpr(EA), mkexpr(frS) );
putIReg( rA_addr, mkexpr(EA) );
vex_printf("dis_av_permute(PPC32)(vsldoi)\n");
return False;
}
- DIP("vsldoi v%d,v%d,v%d,%u\n", vD_addr, vA_addr, vB_addr, SHB_uimm4);
+ DIP("vsldoi v%d,v%d,v%d,%d\n", vD_addr, vA_addr, vB_addr, SHB_uimm4);
DIP(" => not implemented\n");
return False;
/* Splat */
case 0x20C: // vspltb (Splat Byte, AV p245)
- DIP("vspltb v%d,v%d,%u\n", vD_addr, vB_addr, UIMM_5);
+ DIP("vspltb v%d,v%d,%d\n", vD_addr, vB_addr, UIMM_5);
DIP(" => not implemented\n");
return False;
case 0x24C: // vsplth (Splat Half Word, AV p246)
- DIP("vsplth v%d,v%d,%u\n", vD_addr, vB_addr, UIMM_5);
+ DIP("vsplth v%d,v%d,%d\n", vD_addr, vB_addr, UIMM_5);
DIP(" => not implemented\n");
return False;
case 0x28C: // vspltw (Splat Word, AV p250)
- DIP("vspltw v%d,v%d,%u\n", vD_addr, vB_addr, UIMM_5);
+ DIP("vspltw v%d,v%d,%d\n", vD_addr, vB_addr, UIMM_5);
DIP(" => not implemented\n");
return False;
switch (opc2) {
case 0x30A: // vcfux (Convert from Unsigned Fixed-Point W, AV p156)
- DIP("vcfux v%d,v%d,%u\n", vD_addr, vB_addr, UIMM_5);
+ DIP("vcfux v%d,v%d,%d\n", vD_addr, vB_addr, UIMM_5);
DIP(" => not implemented\n");
return False;
case 0x34A: // vcfsx (Convert from Signed Fixed-Point W, AV p155)
- DIP("vcfsx v%d,v%d,%u\n", vD_addr, vB_addr, UIMM_5);
+ DIP("vcfsx v%d,v%d,%d\n", vD_addr, vB_addr, UIMM_5);
DIP(" => not implemented\n");
return False;
case 0x38A: // vctuxs (Convert to Unsigned Fixed-Point W Saturate, AV p172)
- DIP("vctuxs v%d,v%d,%u\n", vD_addr, vB_addr, UIMM_5);
+ DIP("vctuxs v%d,v%d,%d\n", vD_addr, vB_addr, UIMM_5);
DIP(" => not implemented\n");
return False;
case 0x3CA: // vctsxs (Convert to Signed Fixed-Point W Saturate, AV p171)
- DIP("vctsxs v%d,v%d,%u\n", vD_addr, vB_addr, UIMM_5);
+ DIP("vctsxs v%d,v%d,%d\n", vD_addr, vB_addr, UIMM_5);
DIP(" => not implemented\n");
return False;
/* Finally, the call itself. */
addInstr(env, PPC32Instr_Call( cc,
- Ptr_to_ULong(cee->addr),
+ (Addr32)toUInt(Ptr_to_ULong(cee->addr)),
n_args + (passBBP ? 1 : 0) ));
}
if (e->Iex.Load.end != Iend_BE)
goto irreducible;
if (ty == Ity_I8 || ty == Ity_I16 || ty == Ity_I32) {
- addInstr(env, PPC32Instr_Load(
- sizeofIRType(ty), False, r_dst, am_addr ));
+ addInstr(env, PPC32Instr_Load( toUChar(sizeofIRType(ty)),
+ False, r_dst, am_addr ));
return r_dst;
}
break;
if (ty == Ity_I8 || ty == Ity_I16 || ty == Ity_I32) {
HReg r_dst = newVRegI(env);
PPC32AMode* am_addr = PPC32AMode_IR(e->Iex.Get.offset, GuestStatePtr );
- addInstr(env, PPC32Instr_Load( sizeofIRType(ty), False, r_dst, am_addr ));
+ addInstr(env, PPC32Instr_Load( toUChar(sizeofIRType(ty)),
+ False, r_dst, am_addr ));
return r_dst;
}
break;
Int i = u & 0xFFFF;
i <<= 16;
i >>= 16;
- return u == (UInt)i;
+ return toBool(u == (UInt)i);
}
static Bool sane_AMode ( PPC32AMode* am )
{
switch (am->tag) {
case Pam_IR:
- return (hregClass(am->Pam.IR.base) == HRcInt32
- && hregIsVirtual(am->Pam.IR.base)
- && fits16bits(am->Pam.IR.index));
+ return toBool(
+ hregClass(am->Pam.IR.base) == HRcInt32
+ && hregIsVirtual(am->Pam.IR.base)
+ && fits16bits(am->Pam.IR.index)
+ );
case Pam_RR:
- return (hregClass(am->Pam.RR.base) == HRcInt32
- && hregIsVirtual(am->Pam.IR.base)
- && hregClass(am->Pam.RR.base) == HRcInt32
- && hregIsVirtual(am->Pam.IR.base));
+ return toBool(
+ hregClass(am->Pam.RR.base) == HRcInt32
+ && hregIsVirtual(am->Pam.IR.base)
+ && hregClass(am->Pam.RR.base) == HRcInt32
+ && hregIsVirtual(am->Pam.IR.base)
+ );
default:
vpanic("sane_AMode: unknown ppc32 amode tag");
}
which. */
HReg tLo = newVRegI(env);
HReg tHi = newVRegI(env);
- Bool syned = e->Iex.Binop.op == Iop_MullS32;
+ Bool syned = toBool(e->Iex.Binop.op == Iop_MullS32);
HReg r_srcL = iselIntExpr_R(env, e->Iex.Binop.arg1);
// CAB: could do better than this...
//.. return;
//.. }
- vex_printf("iselInt64Expr(ppc32): No such tag(%d)\n", e->tag);
+ vex_printf("iselInt64Expr(ppc32): No such tag(%u)\n", e->tag);
ppIRExpr(e);
vpanic("iselInt64Expr(ppc32)");
}
//.. return dst;
//.. }
- vex_printf("iselFltExpr(ppc32): No such tag(%d)\n", e->tag);
+ vex_printf("iselFltExpr(ppc32): No such tag(%u)\n", e->tag);
ppIRExpr(e);
vpanic("iselFltExpr_wrk(ppc32)");
}
}
}
- vex_printf("iselDblExpr(ppc32): No such tag(%d)\n", e->tag);
+ vex_printf("iselDblExpr(ppc32): No such tag(%u)\n", e->tag);
ppIRExpr(e);
vpanic("iselDblExpr_wrk(ppc32)");
}
am_addr = iselIntExpr_AMode(env, stmt->Ist.Store.addr);
if (tyd == Ity_I8 || tyd == Ity_I16 || tyd == Ity_I32) {
HReg r_src = iselIntExpr_R(env, stmt->Ist.Store.data);
- addInstr(env, PPC32Instr_Store(sizeofIRType(tyd), am_addr, r_src));
+ addInstr(env, PPC32Instr_Store( toUChar(sizeofIRType(tyd)),
+ am_addr, r_src));
return;
}
if (tyd == Ity_F64) {
if (ty == Ity_I8 || ty == Ity_I16 || ty == Ity_I32) {
HReg r_src = iselIntExpr_R(env, stmt->Ist.Put.data);
PPC32AMode* am_addr = PPC32AMode_IR(stmt->Ist.Put.offset, GuestStatePtr);
- addInstr(env, PPC32Instr_Store( sizeofIRType(ty), am_addr, r_src ));
+ addInstr(env, PPC32Instr_Store( toUChar(sizeofIRType(ty)),
+ am_addr, r_src ));
return;
}
if (ty == Ity_I64) {
if (d->nFxState == 0)
vassert(!d->needsBBP);
- passBBP = d->nFxState > 0 && d->needsBBP;
+ passBBP = toBool(d->nFxState > 0 && d->needsBBP);
/* Marshal args, do the call, clear stack. */
doHelperCall( env, passBBP, d->guard, d->cee, d->args );