static DisResult disInstr ( /*IN*/ Bool resteerOK,
/*IN*/ Bool (*resteerOkFn) ( Addr64 ),
/*IN*/ UInt delta,
- /*OUT*/ UInt* size,
+ /*OUT*/ Int* size,
/*OUT*/ Addr64* whereNext );
vassert(n_instrs < vex_control.guest_max_insns);
guest_next = 0;
- resteerOK = n_instrs < vex_control.guest_chase_thresh;
+ resteerOK = toBool(n_instrs < vex_control.guest_chase_thresh);
first_stmt_idx = irbb->stmts_used;
guest_cia_curr_instr = guest_pc_bbstart + delta;
if (0 && (n_resteers & 0xFF) == 0)
vex_printf("resteer[%d,%d] to %p (delta = %d)\n",
n_resteers, d_resteers,
- ULong_to_Ptr(guest_next), delta);
+ ULong_to_Ptr(guest_next), (Int)delta);
break;
}
}
static IRExpr* mkU1 ( UInt i )
{
vassert(i < 2);
- return IRExpr_Const(IRConst_U1(i));
+ return IRExpr_Const(IRConst_U1( toBool(i) ));
}
-static IRExpr* mkU8 ( UInt i )
+static IRExpr* mkU8 ( UChar i )
{
vassert(i < 256);
return IRExpr_Const(IRConst_U8(i));
}
-static IRExpr* mkU16 ( UInt i )
+static IRExpr* mkU16 ( UShort i )
{
vassert(i < 65536);
return IRExpr_Const(IRConst_U16(i));
} else {
// Assign lowest nibble of src to given field_idx of CR
assign( src_mskd, binop(Iop_And32, src, mkU32(0xF)) );
- assign( tmp, binop(Iop_Shl32, mkexpr(src_mskd), mkU8(bit_idx)) );
+ assign( tmp, binop(Iop_Shl32, mkexpr(src_mskd),
+ mkU8(toUChar(bit_idx))) );
if (field_idx == 7) {
setFlags_CR0_Imm( mkexpr(tmp) );
*/
static Bool dis_int_arith ( UInt theInstr )
{
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar Rd_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar Rd_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
- UInt SIMM_16 = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
+ UInt SIMM_16 = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UChar flag_OE = (theInstr >> 10) & 1; /* theInstr[10] */
- UInt opc2 = (theInstr >> 1) & 0x1FF; /* theInstr[1:9] */
- UChar flag_Rc = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UChar flag_OE = toUChar((theInstr >> 10) & 1); /* theInstr[10] */
+ UInt opc2 = (theInstr >> 1) & 0x1FF; /* theInstr[1:9] */
+ UChar flag_Rc = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
UInt EXTS_SIMM = 0;
static Bool dis_int_cmp ( UInt theInstr )
{
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar crfD = (theInstr >> 23) & 0x7; /* theInstr[23:25] */
- UChar b9 = (theInstr >> 22) & 0x1; /* theInstr[22] */
- UChar flag_L = (theInstr >> 21) & 0x1; /* theInstr[21] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar crfD = toUChar((theInstr >> 23) & 0x7); /* theInstr[23:25] */
+ UChar b9 = toUChar((theInstr >> 22) & 0x1); /* theInstr[22] */
+ UChar flag_L = toUChar((theInstr >> 21) & 0x1); /* theInstr[21] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
/* D-Form */
- UInt SIMM_16 = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
- UInt UIMM_16 = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
+ UInt SIMM_16 = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
+ UInt UIMM_16 = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
/* X-Form */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar b0 = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar b0 = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
UInt EXTS_SIMM = 0;
IRTemp Ra = newTemp(Ity_I32);
switch (opc1) {
case 0x0B: // cmpi (Compare Immediate, p398)
- DIP("cmpi %d,%d,%d,%d\n", crfD, flag_L, Ra_addr, SIMM_16);
+ DIP("cmpi %d,%d,%d,%u\n", crfD, flag_L, Ra_addr, SIMM_16);
EXTS_SIMM = extend_s_16to32(SIMM_16);
assign( tst1, binop(Iop_CmpEQ32, mkU32(EXTS_SIMM), mkexpr(Ra)) );
assign( tst2, binop(Iop_CmpLT32S, mkU32(EXTS_SIMM), mkexpr(Ra)) );
break;
case 0x0A: // cmpli (Compare Logical Immediate, p400)
- DIP("cmpli %d,%d,%d,%d\n", crfD, flag_L, Ra_addr, UIMM_16);
+ DIP("cmpli %d,%d,%d,%u\n", crfD, flag_L, Ra_addr, UIMM_16);
assign( tst1, binop(Iop_CmpEQ32, mkU32(UIMM_16), mkexpr(Ra)) );
assign( tst2, binop(Iop_CmpLT32U, mkU32(UIMM_16), mkexpr(Ra)) );
break;
static Bool dis_int_logic ( UInt theInstr )
{
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar Rs_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar Rs_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
/* D-Form */
- UInt UIMM_16 = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
+ UInt UIMM_16 = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
/* X-Form */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar flag_Rc = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar flag_Rc = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
IRTemp Rs = newTemp(Ity_I32);
IRTemp Ra = newTemp(Ity_I32);
switch (opc1) {
case 0x1C: // andi. (AND Immediate, p388)
- DIP("andi %d,%d,%d\n", Ra_addr, Rs_addr, UIMM_16);
+ DIP("andi %d,%d,%u\n", Ra_addr, Rs_addr, UIMM_16);
assign( Ra, binop(Iop_And32, mkexpr(Rs), mkU32(UIMM_16)) );
putIReg( Ra_addr, mkexpr(Ra) );
setFlags_CR0_Result( mkexpr(Ra) );
break;
case 0x1D: // andis. (AND Immediate Shifted, p389)
- DIP("andis %d,%d,%d\n", Ra_addr, Rs_addr, UIMM_16);
+ DIP("andis %d,%d,%u\n", Ra_addr, Rs_addr, UIMM_16);
assign( Ra, binop(Iop_And32, mkexpr(Rs), mkU32(UIMM_16 << 16)) );
putIReg( Ra_addr, mkexpr(Ra) );
setFlags_CR0_Result( mkexpr(Ra) );
break;
case 0x18: // ori (OR Immediate, p551)
- DIP("ori %d,%d,%d\n", Ra_addr, Rs_addr, UIMM_16);
+ DIP("ori %d,%d,%u\n", Ra_addr, Rs_addr, UIMM_16);
putIReg( Ra_addr, binop(Iop_Or32, mkexpr(Rs), mkU32(UIMM_16)) );
break;
case 0x19: // oris (OR Immediate Shifted, p552)
- DIP("oris %d,%d,%d\n", Ra_addr, Rs_addr, UIMM_16);
+ DIP("oris %d,%d,%u\n", Ra_addr, Rs_addr, UIMM_16);
putIReg( Ra_addr, binop(Iop_Or32, mkexpr(Rs), mkU32(UIMM_16 << 16)) );
break;
case 0x1A: // xori (XOR Immediate, p625)
- DIP("xori %d,%d,%d\n", Ra_addr, Rs_addr, UIMM_16);
+ DIP("xori %d,%d,%u\n", Ra_addr, Rs_addr, UIMM_16);
putIReg( Ra_addr, binop(Iop_Xor32, mkexpr(Rs), mkU32(UIMM_16)) );
break;
case 0x1B: // xoris (XOR Immediate Shifted, p626)
- DIP("xoris %d,%d,%d\n", Ra_addr, Rs_addr, UIMM_16);
+ DIP("xoris %d,%d,%u\n", Ra_addr, Rs_addr, UIMM_16);
putIReg( Ra_addr, binop(Iop_Xor32, mkexpr(Rs), mkU32(UIMM_16 << 16)) );
break;
static Bool dis_int_rot ( UInt theInstr )
{
/* M-Form */
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar Rs_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UChar Shift_Imm = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UChar MaskBegin = (theInstr >> 6) & 0x1F; /* theInstr[6:10] */
- UChar MaskEnd = (theInstr >> 1) & 0x1F; /* theInstr[1:5] */
- UChar flag_Rc = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar Rs_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UChar Shift_Imm = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UChar MaskBegin = toUChar((theInstr >> 6) & 0x1F); /* theInstr[6:10] */
+ UChar MaskEnd = toUChar((theInstr >> 1) & 0x1F); /* theInstr[1:5] */
+ UChar flag_Rc = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
UInt mask = CreateMask(MaskBegin, MaskEnd);
IRTemp rot_amt = newTemp(Ity_I8);
static Bool dis_int_load ( UInt theInstr )
{
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar Rd_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar Rd_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
/* D-Form */
- UInt d_imm = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
+ UInt d_imm = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
/* X-Form */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar b0 = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar b0 = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
UInt exts_d_imm = extend_s_16to32(d_imm);
IRTemp Ra_or_0 = newTemp(Ity_I32);
- IRTemp EA_imm = newTemp(Ity_I32);
- IRTemp EA_reg = newTemp(Ity_I32);
- IRTemp Ra = newTemp(Ity_I32);
- IRTemp Rb = newTemp(Ity_I32);
+ IRTemp EA_imm = newTemp(Ity_I32);
+ IRTemp EA_reg = newTemp(Ity_I32);
+ IRTemp Ra = newTemp(Ity_I32);
+ IRTemp Rb = newTemp(Ity_I32);
assign( Ra, getIReg(Ra_addr) );
assign( Rb, getIReg(Rb_addr) );
switch (opc1) {
case 0x22: // lbz (Load B & Zero, p468)
- DIP("lbz %d,%d(%d)\n", Rd_addr, d_imm, Ra_addr);
+ DIP("lbz %d,%u(%d)\n", Rd_addr, d_imm, Ra_addr);
putIReg( Rd_addr, unop(Iop_8Uto32,
loadBE(Ity_I8, mkexpr(EA_imm))) );
break;
vex_printf("dis_int_load(PPC32)(lbzu,Ra_addr|Rd_addr)\n");
return False;
}
- DIP("lbzu %d,%d(%d)\n", Rd_addr, d_imm, Ra_addr);
+ DIP("lbzu %d,%u(%d)\n", Rd_addr, d_imm, Ra_addr);
putIReg( Rd_addr, unop(Iop_8Uto32,
loadBE(Ity_I8, mkexpr(EA_imm))) );
putIReg( Ra_addr, mkexpr(EA_imm) );
break;
case 0x2A: // lha (Load HW Algebraic, p485)
- DIP("lha %d,%d(%d)\n", Rd_addr, d_imm, Ra_addr);
+ DIP("lha %d,%u(%d)\n", Rd_addr, d_imm, Ra_addr);
putIReg( Rd_addr, unop(Iop_16Sto32,
loadBE(Ity_I16, mkexpr(EA_imm))) );
break;
vex_printf("dis_int_load(PPC32)(lhau,Ra_addr|Rd_addr)\n");
return False;
}
- DIP("lhau %d,%d(%d)\n", Rd_addr, d_imm, Ra_addr);
+ DIP("lhau %d,%u(%d)\n", Rd_addr, d_imm, Ra_addr);
putIReg( Rd_addr, unop(Iop_16Sto32,
loadBE(Ity_I16, mkexpr(EA_imm))) );
putIReg( Ra_addr, mkexpr(EA_imm) );
break;
case 0x28: // lhz (Load HW & Zero, p490)
- DIP("lhz %d,%d(%d)\n", Rd_addr, d_imm, Ra_addr);
+ DIP("lhz %d,%u(%d)\n", Rd_addr, d_imm, Ra_addr);
putIReg( Rd_addr, unop(Iop_16Sto32,
loadBE(Ity_I16, mkexpr(EA_imm))) );
break;
vex_printf("dis_int_load(PPC32)(lhzu,Ra_addr|Rd_addr)\n");
return False;
}
- DIP("lhzu %d,%d(%d)\n", Rd_addr, d_imm, Ra_addr);
+ DIP("lhzu %d,%u(%d)\n", Rd_addr, d_imm, Ra_addr);
putIReg( Rd_addr, loadBE(Ity_I16, mkexpr(EA_imm)) );
putIReg( Ra_addr, mkexpr(EA_imm) );
break;
case 0x20: // lwz (Load W & Zero, p504)
- DIP("lwz %d,%d(%d)\n", Rd_addr, d_imm, Ra_addr);
+ DIP("lwz %d,%u(%d)\n", Rd_addr, d_imm, Ra_addr);
putIReg( Rd_addr, loadBE(Ity_I32, mkexpr(EA_imm)) );
break;
vex_printf("dis_int_load(PPC32)(lwzu,Ra_addr|Rd_addr)\n");
return False;
}
- DIP("lwzu %d,%d(%d)\n", Rd_addr, d_imm, Ra_addr);
+ DIP("lwzu %d,%u(%d)\n", Rd_addr, d_imm, Ra_addr);
putIReg( Rd_addr, loadBE(Ity_I32, mkexpr(EA_imm)) );
putIReg( Ra_addr, mkexpr(EA_imm) );
break;
static Bool dis_int_store ( UInt theInstr )
{
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar Rs_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar Rs_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
/* D-Form */
- UInt d_imm = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
+ UInt d_imm = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
/* X-Form */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar b0 = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar b0 = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
UInt exts_d_imm = extend_s_16to32(d_imm);
- IRTemp Ra = newTemp(Ity_I32);
+ IRTemp Ra = newTemp(Ity_I32);
IRTemp Ra_or_0 = newTemp(Ity_I32);
- IRTemp Rb = newTemp(Ity_I32);
- IRTemp Rs = newTemp(Ity_I32);
- IRTemp Rs_8 = newTemp(Ity_I8);
- IRTemp Rs_16 = newTemp(Ity_I16);
- IRTemp EA_imm = newTemp(Ity_I32);
- IRTemp EA_reg = newTemp(Ity_I32);
+ IRTemp Rb = newTemp(Ity_I32);
+ IRTemp Rs = newTemp(Ity_I32);
+ IRTemp Rs_8 = newTemp(Ity_I8);
+ IRTemp Rs_16 = newTemp(Ity_I16);
+ IRTemp EA_imm = newTemp(Ity_I32);
+ IRTemp EA_reg = newTemp(Ity_I32);
assign( Ra, getIReg(Ra_addr) );
assign( Rb, getIReg(Rb_addr) );
switch (opc1) {
case 0x26: // stb (Store B, p576)
- DIP("stb %d,%d(%d)\n", Rs_addr, d_imm, Ra_addr);
+ DIP("stb %d,%u(%d)\n", Rs_addr, d_imm, Ra_addr);
storeBE( mkexpr(EA_imm), mkexpr(Rs_8) );
break;
vex_printf("dis_int_store(PPC32)(stbu,Ra_addr)\n");
return False;
}
- DIP("stbu %d,%d(%d)\n", Rs_addr, d_imm, Ra_addr);
+ DIP("stbu %d,%u(%d)\n", Rs_addr, d_imm, Ra_addr);
storeBE( mkexpr(EA_imm), mkexpr(Rs_8) );
putIReg( Ra_addr, mkexpr(EA_imm) );
break;
case 0x2C: // sth (Store HW, p595)
- DIP("sth %d,%d(%d)\n", Rs_addr, d_imm, Ra_addr);
+ DIP("sth %d,%u(%d)\n", Rs_addr, d_imm, Ra_addr);
storeBE( mkexpr(EA_imm), mkexpr(Rs_16) );
break;
vex_printf("dis_int_store(PPC32)(sthu,Ra_addr)\n");
return False;
}
- DIP("sthu %d,%d(%d)\n", Rs_addr, d_imm, Ra_addr);
+ DIP("sthu %d,%u(%d)\n", Rs_addr, d_imm, Ra_addr);
assign( Rs_16, binop(Iop_And16, mkexpr(Rs), mkU16(0xFFFF)) );
storeBE( mkexpr(EA_imm), mkexpr(Rs_16) );
putIReg( Ra_addr, mkexpr(EA_imm) );
break;
case 0x24: // stw (Store W, p603)
- DIP("stw %d,%d(%d)\n", Rs_addr, d_imm, Ra_addr);
+ DIP("stw %d,%u(%d)\n", Rs_addr, d_imm, Ra_addr);
storeBE( mkexpr(EA_imm), mkexpr(Rs) );
break;
vex_printf("dis_int_store(PPC32)(stwu,Ra_addr)\n");
return False;
}
- DIP("stwu %d,%d(%d)\n", Rs_addr, d_imm, Ra_addr);
+ DIP("stwu %d,%u(%d)\n", Rs_addr, d_imm, Ra_addr);
storeBE( mkexpr(EA_imm), mkexpr(Rs) );
putIReg( Ra_addr, mkexpr(EA_imm) );
break;
static Bool dis_int_ldst_mult ( UInt theInstr )
{
/* D-Form */
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar Rd_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Rs_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
- UInt d_imm = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar Rd_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Rs_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
+ UInt d_imm = (theInstr >> 0) & 0xFFFF; /* theInstr[0:15] */
UInt exts_d_imm = extend_s_16to32(d_imm);
UInt reg_idx = 0;
vex_printf("dis_int_ldst_mult(PPC32)(lmw,Ra_addr)\n");
return False;
}
- DIP("lmw %d,%d(%d)\n", Rd_addr, d_imm, Ra_addr);
+ DIP("lmw %d,%u(%d)\n", Rd_addr, d_imm, Ra_addr);
for (reg_idx = Rd_addr; reg_idx<=31; reg_idx++) {
putIReg( reg_idx,
loadBE(Ity_I32, binop(Iop_Add32, mkexpr(EA),
break;
case 0x2F: // stmw (Store Multiple Word, p600)
- DIP("stmw %d,%d(%d)\n", Rs_addr, d_imm, Ra_addr);
+ DIP("stmw %d,%u(%d)\n", Rs_addr, d_imm, Ra_addr);
for (reg_idx = Rs_addr; reg_idx<=31; reg_idx++) {
storeBE( binop(Iop_Add32, mkexpr(EA), mkU32(offset)),
getIReg(reg_idx) );
static Bool dis_int_ldst_str ( UInt theInstr )
{
/* X-Form */
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar Rd_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Rs_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
- UChar NumBytes = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar b0 = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar Rd_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Rs_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
+ UChar NumBytes = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar b0 = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
UInt reg_idx, bit_idx, n_byte;
UInt EA_offset = 0;
irx_byte = loadBE(Ity_I8, binop(Iop_Add32,
mkexpr(EA),
mkU32(EA_offset)));
- irx_shl = binop(Iop_Shl32, irx_byte, mkU8(24 - bit_idx));
+ irx_shl = binop(Iop_Shl32, irx_byte,
+ mkU8(toUChar(24 - bit_idx)));
putIReg( reg_idx, binop(Iop_Or32, getIReg(reg_idx), irx_shl) );
bit_idx += 8;
if (bit_idx == 32) { bit_idx = 0; }
}
irx_byte = unop(Iop_32to8,
binop(Iop_Shr32,
- getIReg(reg_idx), mkU8(24 - bit_idx)));
+ getIReg(reg_idx),
+ mkU8(toUChar(24 - bit_idx))));
storeBE( binop(Iop_Add32, mkexpr(EA), mkU32(EA_offset)),
irx_byte );
static Bool dis_branch ( UInt theInstr, DisResult *whatNext )
{
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar BO = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar BI = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
- UInt BD = (theInstr >> 2) & 0x3FFF; /* theInstr[2:15] */
- UChar b11to15 = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UInt LI_24 = (theInstr >> 2) & 0xFFFFFF; /* theInstr[2:25] */
- UChar flag_AA = (theInstr >> 1) & 1; /* theInstr[1] */
- UChar flag_LK = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar BO = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar BI = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
+ UInt BD = (theInstr >> 2) & 0x3FFF; /* theInstr[2:15] */
+ UChar b11to15 = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UInt LI_24 = (theInstr >> 2) & 0xFFFFFF; /* theInstr[2:25] */
+ UChar flag_AA = toUChar((theInstr >> 1) & 1); /* theInstr[1] */
+ UChar flag_LK = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
UInt exts_BD = extend_s_24to32(BD << 2);
UInt exts_LI = extend_s_24to32(LI_24 << 2);
static Bool dis_memsync ( UInt theInstr )
{
/* X-Form, XL-Form */
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar b11to25 = (theInstr >> 11) & 0x7FFF; /* theInstr[11:25] */
- UChar Rd_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Rs_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar b0 = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar b11to25 = toUChar((theInstr >> 11) & 0x7FFF); /* theInstr[11:25] */
+ UChar Rd_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Rs_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar b0 = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
IRTemp EA = newTemp(Ity_I32);
IRTemp Ra = newTemp(Ity_I32);
static Bool dis_int_shift ( UInt theInstr )
{
/* X-Form */
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar Rs_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UChar Shift_Imm = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar flag_Rc = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar Rs_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UChar Shift_Imm = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar flag_Rc = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
IRTemp shft_amt = newTemp(Ity_I8);
- IRTemp sign = newTemp(Ity_I32);
- IRTemp sign_rb = newTemp(Ity_I32);
- IRTemp sext = newTemp(Ity_I32);
- IRTemp Rs = newTemp(Ity_I32);
- IRTemp Rs_shft = newTemp(Ity_I32);
- IRTemp Rs_out = newTemp(Ity_I32);
- IRTemp Ra = newTemp(Ity_I32);
- IRTemp Rb = newTemp(Ity_I32);
- IRTemp tmp = newTemp(Ity_I32);
+ IRTemp sign = newTemp(Ity_I32);
+ IRTemp sign_rb = newTemp(Ity_I32);
+ IRTemp sext = newTemp(Ity_I32);
+ IRTemp Rs = newTemp(Ity_I32);
+ IRTemp Rs_shft = newTemp(Ity_I32);
+ IRTemp Rs_out = newTemp(Ity_I32);
+ IRTemp Ra = newTemp(Ity_I32);
+ IRTemp Rb = newTemp(Ity_I32);
+ IRTemp tmp = newTemp(Ity_I32);
assign( Rs, getIReg(Rs_addr) );
assign( Rb, getIReg(Rb_addr) );
static Bool dis_int_ldst_rev ( UInt theInstr )
{
/* X-Form */
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar Rd_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Rs_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar b0 = (theInstr >> 0) & 1; /* theInstr[0] */
-
- IRTemp EA = newTemp(Ity_I32);
- IRTemp Rd = newTemp(Ity_I32);
- IRTemp Rs = newTemp(Ity_I32);
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar Rd_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Rs_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar b0 = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
+
+ IRTemp EA = newTemp(Ity_I32);
+ IRTemp Rd = newTemp(Ity_I32);
+ IRTemp Rs = newTemp(Ity_I32);
IRTemp byte0 = newTemp(Ity_I32);
IRTemp byte1 = newTemp(Ity_I32);
IRTemp byte2 = newTemp(Ity_I32);
static Bool dis_proc_ctl ( UInt theInstr )
{
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
/* X-Form */
- UChar crfD = (theInstr >> 23) & 0x7; /* theInstr[23:25] */
- UChar b21to22 = (theInstr >> 21) & 0x3; /* theInstr[21:22] */
- UChar Rd_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UInt b11to20 = (theInstr >> 11) & 0x3FF; /* theInstr[11:20] */
+ UChar crfD = toUChar((theInstr >> 23) & 0x7); /* theInstr[23:25] */
+ UChar b21to22 = toUChar((theInstr >> 21) & 0x3); /* theInstr[21:22] */
+ UChar Rd_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UInt b11to20 = (theInstr >> 11) & 0x3FF; /* theInstr[11:20] */
/* XFX-Form */
- UChar Rs_addr = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UInt SPR = (theInstr >> 11) & 0x3FF; /* theInstr[11:20] */
- UInt TBR = (theInstr >> 11) & 0x3FF; /* theInstr[11:20] */
- UChar b20 = (theInstr >> 11) & 0x1; /* theInstr[11] */
- UInt CRM = (theInstr >> 12) & 0xFF; /* theInstr[12:19] */
- UChar b11 = (theInstr >> 11) & 0x1; /* theInstr[20] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar b0 = (theInstr >> 0) & 1; /* theInstr[0] */
-
- UInt SPR_flipped = ((SPR & 0x1F) << 5) | ((SPR >> 5) & 0x1F);
- UInt mask;
+ UChar Rs_addr = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UInt SPR = (theInstr >> 11) & 0x3FF; /* theInstr[11:20] */
+ UInt TBR = (theInstr >> 11) & 0x3FF; /* theInstr[11:20] */
+ UChar b20 = toUChar((theInstr >> 11) & 0x1); /* theInstr[11] */
+ UInt CRM = (theInstr >> 12) & 0xFF; /* theInstr[12:19] */
+ UChar b11 = toUChar((theInstr >> 11) & 0x1); /* theInstr[20] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar b0 = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
+
+ UInt SPR_flipped = ((SPR & 0x1F) << 5) | ((SPR >> 5) & 0x1F);
+ UInt mask;
UChar i;
IRTemp Rs = newTemp(Ity_I32);
/* XFX-Form */
case 0x153: // mfspr (Move from Special-Purpose Register, p514)
- DIP("mfspr %d,%d\n", Rd_addr, SPR_flipped);
+ DIP("mfspr %d,%u\n", Rd_addr, SPR_flipped);
switch (SPR_flipped) { // Choose a register...
case 0x1: // XER
break;
case 0x173: // mftb (Move from Time Base, p521)
- DIP("mftb %d,%d\n", Rd_addr, TBR);
+ DIP("mftb %d,%u\n", Rd_addr, TBR);
return False;
case 0x090: // mtcrf (Move to Condition Register Fields, p523)
vex_printf("dis_proc_ctl(PPC32)(mtcrf,b11|b20)\n");
return False;
}
- DIP("mtcrf %d,%d\n", CRM, Rs_addr);
+ DIP("mtcrf %u,%d\n", CRM, Rs_addr);
mask=0;
for (i=0; i<8; i++) {
if (CRM & (1<<i)) {
break;
case 0x1D3: // mtspr (Move to Special-Purpose Register, p530)
- DIP("mtspr %d,%d\n", SPR_flipped, Rs_addr);
+ DIP("mtspr %u,%d\n", SPR_flipped, Rs_addr);
switch (SPR_flipped) { // Choose a register...
case 0x1: // XER
static Bool dis_cache_manage ( UInt theInstr )
{
/* X-Form */
- UChar opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- UChar b21to25 = (theInstr >> 21) & 0x1F; /* theInstr[21:25] */
- UChar Ra_addr = (theInstr >> 16) & 0x1F; /* theInstr[16:20] */
- UChar Rb_addr = (theInstr >> 11) & 0x1F; /* theInstr[11:15] */
- UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
- UChar b0 = (theInstr >> 0) & 1; /* theInstr[0] */
+ UChar opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ UChar b21to25 = toUChar((theInstr >> 21) & 0x1F); /* theInstr[21:25] */
+ UChar Ra_addr = toUChar((theInstr >> 16) & 0x1F); /* theInstr[16:20] */
+ UChar Rb_addr = toUChar((theInstr >> 11) & 0x1F); /* theInstr[11:15] */
+ UInt opc2 = (theInstr >> 1) & 0x3FF; /* theInstr[1:10] */
+ UChar b0 = toUChar((theInstr >> 0) & 1); /* theInstr[0] */
if (opc1 != 0x1F || b21to25 != 0 || b0 != 0) {
vex_printf("dis_cache_manage(PPC32)(opc1|b21to25|b0)\n");
static DisResult disInstr ( /*IN*/ Bool resteerOK,
/*IN*/ Bool (*resteerOkFn) ( Addr64 ),
/*IN*/ UInt delta,
- /*OUT*/ UInt* size,
+ /*OUT*/ Int* size,
/*OUT*/ Addr64* whereNext )
{
UChar opc1;
}
- opc1 = (theInstr >> 26) & 0x3F; /* theInstr[26:31] */
- opc2 = (theInstr >> 1 ) & 0x3FF; /* theInstr[1:10] */
+ opc1 = toUChar((theInstr >> 26) & 0x3F); /* theInstr[26:31] */
+ opc2 = (theInstr >> 1 ) & 0x3FF; /* theInstr[1:10] */
#if 0
vex_printf("\ndisInstr(ppc32): instr: 0x%x\n", theInstr);