//.. DIP("mov%c %s, %s0x%x\n", nameISize(sz), nameIReg(sz,R_EAX),
//.. sorbTxt(sorb), d32);
//.. break;
-//..
+
+/* XXXX be careful here with moves to AH/BH/CH/DH */
//.. case 0xB0: /* MOV imm,AL */
//.. case 0xB1: /* MOV imm,CL */
-//.. case 0xB2: /* MOV imm,DL */
+ case 0xB2: /* MOV imm,DL */
//.. case 0xB3: /* MOV imm,BL */
//.. case 0xB4: /* MOV imm,AH */
//.. case 0xB5: /* MOV imm,CH */
//.. case 0xB6: /* MOV imm,DH */
//.. case 0xB7: /* MOV imm,BH */
-//.. d32 = getUChar(delta); delta += 1;
-//.. putIReg(1, opc-0xB0, mkU8(d32));
-//.. DIP("movb $0x%x,%s\n", d32, nameIReg(1,opc-0xB0));
-//.. break;
+ d64 = getUChar(delta);
+ delta += 1;
+ putIRegB(pfx, 1, opc-0xB0, mkU8(d64));
+ DIP("movb $%lld,%s\n", d64, nameIRegB(pfx,1,opc-0xB0));
+ break;
case 0xB8: /* MOV imm,eAX */
case 0xB9: /* MOV imm,eCX */
delta = dis_op2_E_G ( pfx, False, Iop_Xor8, True, sz, delta, "xor" );
break;
-//.. case 0x3A: /* CMP Eb,Gb */
-//.. delta = dis_op2_E_G ( sorb, False, Iop_Sub8, False, 1, delta, "cmp" );
-//.. break;
+ case 0x3A: /* CMP Eb,Gb */
+ if (haveF2orF3(pfx)) goto decode_failure;
+ delta = dis_op2_E_G ( pfx, False, Iop_Sub8, False, 1, delta, "cmp" );
+ break;
case 0x3B: /* CMP Ev,Gv */
if (haveF2orF3(pfx)) goto decode_failure;
delta = dis_op2_E_G ( pfx, False, Iop_Sub8, False, sz, delta, "cmp" );
delta = dis_op2_G_E ( pfx, False, Iop_Sub8, True, sz, delta, "sub" );
break;
-//.. case 0x30: /* XOR Gb,Eb */
-//.. delta = dis_op2_G_E ( sorb, False, Iop_Xor8, True, 1, delta, "xor" );
-//.. break;
+ case 0x30: /* XOR Gb,Eb */
+ if (haveF2orF3(pfx)) goto decode_failure;
+ delta = dis_op2_G_E ( pfx, False, Iop_Xor8, True, 1, delta, "xor" );
+ break;
case 0x31: /* XOR Gv,Ev */
if (haveF2orF3(pfx)) goto decode_failure;
delta = dis_op2_G_E ( pfx, False, Iop_Xor8, True, sz, delta, "xor" );
switch (e->Iex.Binop.op) {
case Iop_Shr64: case Iop_Shl64: case Iop_Sar64:
break;
+ case Iop_Shl32:
+ break;
//.. case Iop_Shr8:
//.. addInstr(env, X86Instr_Alu32R(
//.. Xalu_AND, X86RMI_Imm(0xFF), dst));
//.. addInstr(env, X86Instr_Alu32R(
//.. Xalu_AND, X86RMI_Imm(0xFFFF), dst));
//.. break;
+ case Iop_Shr32:
+ addInstr(env, AMD64Instr_Alu64R(
+ Aalu_AND, AMD64RMI_Imm(0xFFFFFFFF), dst));
+ break;
//.. case Iop_Sar8:
//.. addInstr(env, X86Instr_Sh32(Xsh_SHL, 24, X86RM_Reg(dst)));
//.. addInstr(env, X86Instr_Sh32(Xsh_SAR, 24, X86RM_Reg(dst)));