Lines Matching refs:rD
7831 void mk_neon_elem_load_to_one_lane( UInt rD, UInt inc, UInt index, in mk_neon_elem_load_to_one_lane() argument
7837 putDRegI64(rD, triop(Iop_SetElem8x8, getDRegI64(rD), mkU8(index), in mk_neon_elem_load_to_one_lane()
7841 putDRegI64(rD, triop(Iop_SetElem16x4, getDRegI64(rD), mkU8(index), in mk_neon_elem_load_to_one_lane()
7845 putDRegI64(rD, triop(Iop_SetElem32x2, getDRegI64(rD), mkU8(index), in mk_neon_elem_load_to_one_lane()
7854 putDRegI64(rD + i * inc, in mk_neon_elem_load_to_one_lane()
7856 getDRegI64(rD + i * inc), in mk_neon_elem_load_to_one_lane()
7864 putDRegI64(rD + i * inc, in mk_neon_elem_load_to_one_lane()
7866 getDRegI64(rD + i * inc), in mk_neon_elem_load_to_one_lane()
7874 putDRegI64(rD + i * inc, in mk_neon_elem_load_to_one_lane()
7876 getDRegI64(rD + i * inc), in mk_neon_elem_load_to_one_lane()
7892 void mk_neon_elem_store_from_one_lane( UInt rD, UInt inc, UInt index, in mk_neon_elem_store_from_one_lane() argument
7899 binop(Iop_GetElem8x8, getDRegI64(rD), mkU8(index))); in mk_neon_elem_store_from_one_lane()
7903 binop(Iop_GetElem16x4, getDRegI64(rD), mkU8(index))); in mk_neon_elem_store_from_one_lane()
7907 binop(Iop_GetElem32x2, getDRegI64(rD), mkU8(index))); in mk_neon_elem_store_from_one_lane()
7916 binop(Iop_GetElem8x8, getDRegI64(rD + i * inc), in mk_neon_elem_store_from_one_lane()
7921 binop(Iop_GetElem16x4, getDRegI64(rD + i * inc), in mk_neon_elem_store_from_one_lane()
7926 binop(Iop_GetElem32x2, getDRegI64(rD + i * inc), in mk_neon_elem_store_from_one_lane()
8333 UInt rD = (INSN(22,22) << 4) | INSN(15,12); in dis_neon_load_or_store() local
8387 mk_neon_elem_load_to_one_lane(rD, inc, i, N, size, addr); in dis_neon_load_or_store()
8389 mk_neon_elem_store_from_one_lane(rD, inc, i, N, size, addr); in dis_neon_load_or_store()
8394 DIP("d%u[%u]", rD + j * inc, i); in dis_neon_load_or_store()
8437 putDRegI64(rD + r, unop(Iop_Dup8x8, in dis_neon_load_or_store()
8442 putDRegI64(rD + r, unop(Iop_Dup16x4, in dis_neon_load_or_store()
8447 putDRegI64(rD + r, unop(Iop_Dup32x2, in dis_neon_load_or_store()
8457 putDRegI64(rD + r + i * inc, in dis_neon_load_or_store()
8465 putDRegI64(rD + r + i * inc, in dis_neon_load_or_store()
8473 putDRegI64(rD + r + i * inc, in dis_neon_load_or_store()
8490 DIP("d%u[]", rD + r + i * inc); in dis_neon_load_or_store()
8533 if (rD + regs > 32) return False; in dis_neon_load_or_store()
8540 if (regs == 1 && inc == 1 && rD + 1 >= 32) return False; in dis_neon_load_or_store()
8541 if (regs == 1 && inc == 2 && rD + 2 >= 32) return False; in dis_neon_load_or_store()
8542 if (regs == 2 && inc == 2 && rD + 3 >= 32) return False; in dis_neon_load_or_store()
8545 if (inc == 1 && rD + 2 >= 32) return False; in dis_neon_load_or_store()
8546 if (inc == 2 && rD + 4 >= 32) return False; in dis_neon_load_or_store()
8549 if (inc == 1 && rD + 3 >= 32) return False; in dis_neon_load_or_store()
8550 if (inc == 2 && rD + 6 >= 32) return False; in dis_neon_load_or_store()
8587 putDRegI64(rD+r, loadLE(Ity_I64, mkexpr(addr)), IRTemp_INVALID); in dis_neon_load_or_store()
8589 storeLE(mkexpr(addr), getDRegI64(rD+r)); in dis_neon_load_or_store()
8629 putDRegI64(rD + 0 * regstep, mkexpr(du0), IRTemp_INVALID); in dis_neon_load_or_store()
8630 putDRegI64(rD + 1 * regstep, mkexpr(du1), IRTemp_INVALID); in dis_neon_load_or_store()
8632 assign(du0, getDRegI64(rD + 0 * regstep)); in dis_neon_load_or_store()
8633 assign(du1, getDRegI64(rD + 1 * regstep)); in dis_neon_load_or_store()
8664 putDRegI64(rD + 0 * regstep, mkexpr(du0), IRTemp_INVALID); in dis_neon_load_or_store()
8665 putDRegI64(rD + 1 * regstep, mkexpr(du1), IRTemp_INVALID); in dis_neon_load_or_store()
8666 putDRegI64(rD + 2 * regstep, mkexpr(du2), IRTemp_INVALID); in dis_neon_load_or_store()
8667 putDRegI64(rD + 3 * regstep, mkexpr(du3), IRTemp_INVALID); in dis_neon_load_or_store()
8669 assign(du0, getDRegI64(rD + 0 * regstep)); in dis_neon_load_or_store()
8670 assign(du1, getDRegI64(rD + 1 * regstep)); in dis_neon_load_or_store()
8671 assign(du2, getDRegI64(rD + 2 * regstep)); in dis_neon_load_or_store()
8672 assign(du3, getDRegI64(rD + 3 * regstep)); in dis_neon_load_or_store()
8706 putDRegI64(rD + 0 * inc, mkexpr(du0), IRTemp_INVALID); in dis_neon_load_or_store()
8707 putDRegI64(rD + 1 * inc, mkexpr(du1), IRTemp_INVALID); in dis_neon_load_or_store()
8708 putDRegI64(rD + 2 * inc, mkexpr(du2), IRTemp_INVALID); in dis_neon_load_or_store()
8710 assign(du0, getDRegI64(rD + 0 * inc)); in dis_neon_load_or_store()
8711 assign(du1, getDRegI64(rD + 1 * inc)); in dis_neon_load_or_store()
8712 assign(du2, getDRegI64(rD + 2 * inc)); in dis_neon_load_or_store()
8746 putDRegI64(rD + 0 * inc, mkexpr(du0), IRTemp_INVALID); in dis_neon_load_or_store()
8747 putDRegI64(rD + 1 * inc, mkexpr(du1), IRTemp_INVALID); in dis_neon_load_or_store()
8748 putDRegI64(rD + 2 * inc, mkexpr(du2), IRTemp_INVALID); in dis_neon_load_or_store()
8749 putDRegI64(rD + 3 * inc, mkexpr(du3), IRTemp_INVALID); in dis_neon_load_or_store()
8751 assign(du0, getDRegI64(rD + 0 * inc)); in dis_neon_load_or_store()
8752 assign(du1, getDRegI64(rD + 1 * inc)); in dis_neon_load_or_store()
8753 assign(du2, getDRegI64(rD + 2 * inc)); in dis_neon_load_or_store()
8754 assign(du3, getDRegI64(rD + 3 * inc)); in dis_neon_load_or_store()
8789 DIP("d%u-d%u", rD, rD + regs * (N + 1) - 1); in dis_neon_load_or_store()
8796 DIP("d%u", rD + r + i * inc); in dis_neon_load_or_store()
10921 UInt rD = 99, rN = 99, rM = 99, rA = 99; in decode_V6MEDIA_instruction() local
10928 rD = INSNT1(11,8); in decode_V6MEDIA_instruction()
10930 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM) && rA != 13) in decode_V6MEDIA_instruction()
10936 rD = INSNA(19,16); in decode_V6MEDIA_instruction()
10940 if (rD != 15 && rN != 15 && rM != 15 /* but rA can be 15 */) in decode_V6MEDIA_instruction()
10955 putIRegT( rD, res, condT ); in decode_V6MEDIA_instruction()
10957 putIRegA( rD, res, condT, Ijk_Boring ); in decode_V6MEDIA_instruction()
10961 nCC(conq), rD, rN, rM ); in decode_V6MEDIA_instruction()
10964 nCC(conq), rD, rN, rM, rA ); in decode_V6MEDIA_instruction()
12336 UInt rD = 99, rN = 99, rM = 99, rA = 99; in decode_V6MEDIA_instruction() local
12346 rD = INSNT1(11,8); in decode_V6MEDIA_instruction()
12349 if (!isBadRegT(rD) in decode_V6MEDIA_instruction()
12358 rD = INSNA(19,16); in decode_V6MEDIA_instruction()
12362 if (rD != 15 && rM != 15 && rN != 15) in decode_V6MEDIA_instruction()
12381 putIRegT( rD, res, condT ); in decode_V6MEDIA_instruction()
12383 putIRegA(rD, res, condT, Ijk_Boring); in decode_V6MEDIA_instruction()
12385 round ? "r" : "", nCC(conq), rD, rN, rM, rA); in decode_V6MEDIA_instruction()
13106 UInt rD = INSN(15,12); in decode_CP10_CP11_instruction() local
13109 if (rD == 15) { in decode_CP10_CP11_instruction()
13123 putIRegT(rD, e, condT); in decode_CP10_CP11_instruction()
13125 putIRegA(rD, e, condT, Ijk_Boring); in decode_CP10_CP11_instruction()
13126 DIP("fmrx%s r%u, fpscr\n", nCC(conq), rD); in decode_CP10_CP11_instruction()
13136 UInt rD = INSN(15,12); in decode_CP10_CP11_instruction() local
13140 isT ? getIRegT(rD) : getIRegA(rD), condT); in decode_CP10_CP11_instruction()
13141 DIP("fmxr%s fpscr, r%u\n", nCC(conq), rD); in decode_CP10_CP11_instruction()
13151 UInt rD = INSN(15,12); /* lo32 */ in decode_CP10_CP11_instruction() local
13153 if (rD == 15 || rN == 15 || (isT && (rD == 13 || rN == 13))) { in decode_CP10_CP11_instruction()
13160 isT ? getIRegT(rD) : getIRegA(rD))), in decode_CP10_CP11_instruction()
13162 DIP("vmov%s d%u, r%u, r%u\n", nCC(conq), dM, rD, rN); in decode_CP10_CP11_instruction()
13171 UInt rD = INSN(15,12); /* lo32 */ in decode_CP10_CP11_instruction() local
13173 if (rD == 15 || rN == 15 || (isT && (rD == 13 || rN == 13)) in decode_CP10_CP11_instruction()
13174 || rD == rN) { in decode_CP10_CP11_instruction()
13183 putIRegT(rD, lo32, condT); in decode_CP10_CP11_instruction()
13186 putIRegA(rD, lo32, condT, Ijk_Boring); in decode_CP10_CP11_instruction()
13188 DIP("vmov%s r%u, r%u, d%u\n", nCC(conq), rD, rN, dM); in decode_CP10_CP11_instruction()
13241 UInt rD = (INSN(7,7) << 4) | INSN(19,16); in decode_CP10_CP11_instruction() local
13250 putDRegI64(rD, triop(Iop_SetElem8x8, in decode_CP10_CP11_instruction()
13251 getDRegI64(rD), in decode_CP10_CP11_instruction()
13256 DIP("vmov%s.8 d%u[%u], r%u\n", nCC(conq), rD, index, rT); in decode_CP10_CP11_instruction()
13261 putDRegI64(rD, triop(Iop_SetElem16x4, in decode_CP10_CP11_instruction()
13262 getDRegI64(rD), in decode_CP10_CP11_instruction()
13267 DIP("vmov%s.16 d%u[%u], r%u\n", nCC(conq), rD, index, rT); in decode_CP10_CP11_instruction()
13272 putDRegI64(rD, triop(Iop_SetElem32x2, in decode_CP10_CP11_instruction()
13273 getDRegI64(rD), in decode_CP10_CP11_instruction()
13277 DIP("vmov%s.32 d%u[%u], r%u\n", nCC(conq), rD, index, rT); in decode_CP10_CP11_instruction()
13343 UInt rD = (INSN(15,12) << 1) | INSN(22,22); in decode_CP10_CP11_instruction() local
13350 putFReg(rD, unop(Iop_ReinterpI32asF32, mkU32(imm)), condT); in decode_CP10_CP11_instruction()
13351 DIP("fconsts%s s%u #%u", nCC(conq), rD, imm8); in decode_CP10_CP11_instruction()
13359 UInt rD = INSN(15,12) | (INSN(22,22) << 4); in decode_CP10_CP11_instruction() local
13366 putDReg(rD, unop(Iop_ReinterpI64asF64, mkU64(imm)), condT); in decode_CP10_CP11_instruction()
13367 DIP("fconstd%s d%u #%u", nCC(conq), rD, imm8); in decode_CP10_CP11_instruction()
13376 UInt rD = (INSN(7,7) << 4) | INSN(19,16); in decode_CP10_CP11_instruction() local
13380 if (rT == 15 || (isT && rT == 13) || size == 3 || (Q && (rD & 1))) { in decode_CP10_CP11_instruction()
13385 rD >>= 1; in decode_CP10_CP11_instruction()
13388 putQReg(rD, unop(Iop_Dup32x4, e), condT); in decode_CP10_CP11_instruction()
13391 putQReg(rD, unop(Iop_Dup16x8, unop(Iop_32to16, e)), in decode_CP10_CP11_instruction()
13395 putQReg(rD, unop(Iop_Dup8x16, unop(Iop_32to8, e)), in decode_CP10_CP11_instruction()
13401 DIP("vdup.%u q%u, r%u\n", 32 / (1<<size), rD, rT); in decode_CP10_CP11_instruction()
13405 putDRegI64(rD, unop(Iop_Dup32x2, e), condT); in decode_CP10_CP11_instruction()
13408 putDRegI64(rD, unop(Iop_Dup16x4, unop(Iop_32to16, e)), in decode_CP10_CP11_instruction()
13412 putDRegI64(rD, unop(Iop_Dup8x8, unop(Iop_32to8, e)), in decode_CP10_CP11_instruction()
13418 DIP("vdup.%u d%u, r%u\n", 32 / (1<<size), rD, rT); in decode_CP10_CP11_instruction()
13899 UInt rD = INSN(15,12); in decode_CP10_CP11_instruction() local
13903 if (rD == 15) { in decode_CP10_CP11_instruction()
13913 putIRegT(rD, res, condT); in decode_CP10_CP11_instruction()
13915 putIRegA(rD, res, condT, Ijk_Boring); in decode_CP10_CP11_instruction()
13916 DIP("fmrs%s r%u, s%u\n", nCC(conq), rD, fN); in decode_CP10_CP11_instruction()
13919 isT ? getIRegT(rD) : getIRegA(rD)), in decode_CP10_CP11_instruction()
13921 DIP("fmsr%s s%u, r%u\n", nCC(conq), fN, rD); in decode_CP10_CP11_instruction()
14756 UInt rD = (insn >> 12) & 0xF; /* 15:12 */ in disInstr_ARM_WRK() local
14827 putIRegA( rD, mkexpr(res), condT, Ijk_Boring ); in disInstr_ARM_WRK()
14858 name, nCC(INSN_COND), bitS ? "s" : "", rD, rN, dis_buf ); in disInstr_ARM_WRK()
14891 putIRegA( rD, mkexpr(res), condT, jk ); in disInstr_ARM_WRK()
14899 nCC(INSN_COND), bitS ? "s" : "", rD, dis_buf ); in disInstr_ARM_WRK()
14907 if (rD != 0) in disInstr_ARM_WRK()
14933 if (rD != 0) in disInstr_ARM_WRK()
15006 putIRegA( rD, mkexpr(res), condT, Ijk_Boring ); in disInstr_ARM_WRK()
15032 name, nCC(INSN_COND), bitS ? "s" : "", rD, rN, dis_buf ); in disInstr_ARM_WRK()
15090 UInt rD = (insn >> 12) & 0xF; /* 15:12 */ in disInstr_ARM_WRK() local
15110 if (bL == 1 && rN == rD) goto after_load_store_ubyte_or_word; in disInstr_ARM_WRK()
15116 if (bL == 1 && rN == rD) goto after_load_store_ubyte_or_word; in disInstr_ARM_WRK()
15162 assign(rDt, getIRegA(rD)); in disInstr_ARM_WRK()
15197 mkexpr(taT), llGetIReg(rD), condT ); in disInstr_ARM_WRK()
15207 putIRegA( rD, mkexpr(tD), in disInstr_ARM_WRK()
15208 rD == 15 ? condT : IRTemp_INVALID, jk ); in disInstr_ARM_WRK()
15212 loadGuardedLE( tD, ILGop_8Uto32, mkexpr(taT), llGetIReg(rD), condT ); in disInstr_ARM_WRK()
15215 putIRegA( rD, mkexpr(tD), IRTemp_INVALID, Ijk_Boring ); in disInstr_ARM_WRK()
15223 vassert(rD != rN); /* since we just wrote rD */ in disInstr_ARM_WRK()
15232 bB == 0 ? "" : "b", nCC(INSN_COND), rD, dis_buf); in disInstr_ARM_WRK()
15236 bB == 0 ? "" : "b", nCC(INSN_COND), rD, dis_buf); in disInstr_ARM_WRK()
15240 bB == 0 ? "" : "b", nCC(INSN_COND), rD, dis_buf); in disInstr_ARM_WRK()
15318 UInt rD = (insn >> 12) & 0xF; /* 15:12 */ in disInstr_ARM_WRK() local
15349 if (bL == 1 && rN == rD) goto after_load_store_sbyte_or_hword; in disInstr_ARM_WRK()
15355 if (bL == 1 && rN == rD) goto after_load_store_sbyte_or_hword; in disInstr_ARM_WRK()
15366 if (bL == 1 && rD == 15 && condT != IRTemp_INVALID) { in disInstr_ARM_WRK()
15402 assign(llOldRd, llGetIReg(rD)); in disInstr_ARM_WRK()
15413 unop(Iop_32to16, getIRegA(rD)), condT ); in disInstr_ARM_WRK()
15420 putIRegA( rD, mkexpr(newRd), IRTemp_INVALID, Ijk_Boring ); in disInstr_ARM_WRK()
15427 putIRegA( rD, mkexpr(newRd), IRTemp_INVALID, Ijk_Boring ); in disInstr_ARM_WRK()
15434 putIRegA( rD, mkexpr(newRd), IRTemp_INVALID, Ijk_Boring ); in disInstr_ARM_WRK()
15445 vassert(rD != rN); /* since we just wrote rD */ in disInstr_ARM_WRK()
15451 case 1: DIP("%s%s r%u, %s\n", name, nCC(INSN_COND), rD, dis_buf); in disInstr_ARM_WRK()
15454 name, nCC(INSN_COND), rD, dis_buf); in disInstr_ARM_WRK()
15457 name, nCC(INSN_COND), rD, dis_buf); in disInstr_ARM_WRK()
15672 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
15682 putIRegA(rD, mkexpr(res), condT, Ijk_Boring); in disInstr_ARM_WRK()
15683 DIP("clz%s r%u, r%u\n", nCC(INSN_COND), rD, rM); in disInstr_ARM_WRK()
15693 UInt rD = INSN(19,16); in disInstr_ARM_WRK() local
15696 if (rD == 15 || rM == 15 || rS == 15) { in disInstr_ARM_WRK()
15714 putIRegA( rD, mkexpr(res), condT, Ijk_Boring ); in disInstr_ARM_WRK()
15723 bitS ? 's' : ' ', nCC(INSN_COND), rD, rM, rS); in disInstr_ARM_WRK()
15734 UInt rD = INSN(19,16); in disInstr_ARM_WRK() local
15737 if (rD == 15 || rM == 15 || rN == 15) { in disInstr_ARM_WRK()
15746 putIRegA(rD, mkexpr(res), condT, Ijk_Boring); in disInstr_ARM_WRK()
15747 DIP("sdiv r%u, r%u, r%u\n", rD, rN, rM); in disInstr_ARM_WRK()
15756 UInt rD = INSN(19,16); in disInstr_ARM_WRK() local
15759 if (rD == 15 || rM == 15 || rN == 15) { in disInstr_ARM_WRK()
15768 putIRegA(rD, mkexpr(res), condT, Ijk_Boring); in disInstr_ARM_WRK()
15769 DIP("udiv r%u, r%u, r%u\n", rD, rN, rM); in disInstr_ARM_WRK()
15779 UInt rD = INSN(19,16); in disInstr_ARM_WRK() local
15788 if (rD == 15 || rM == 15 || rS == 15 || rN == 15) { in disInstr_ARM_WRK()
15811 putIRegA( rD, mkexpr(res), condT, Ijk_Boring ); in disInstr_ARM_WRK()
15821 nCC(INSN_COND), rD, rM, rS, rN); in disInstr_ARM_WRK()
16009 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16010 if (rD != 15) { in disInstr_ARM_WRK()
16012 putIRegA( rD, mkexpr(apsr), condT, Ijk_Boring ); in disInstr_ARM_WRK()
16013 DIP("mrs%s r%u, cpsr\n", nCC(INSN_COND), rD); in disInstr_ARM_WRK()
16044 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16052 if (rD == 15 || rN == 15 || rM == 15 || rN == rM || rN == rD) { in disInstr_ARM_WRK()
16082 putIRegA(rD, isB ? unop(Iop_8Uto32, mkexpr(tOld)) : mkexpr(tOld), in disInstr_ARM_WRK()
16085 isB ? "b" : "", nCC(INSN_COND), rD, rM, rN); in disInstr_ARM_WRK()
16155 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16168 if (rD == 15 || rN == 15 || rT == 15 in disInstr_ARM_WRK()
16169 || rD == rN || rD == rT) in disInstr_ARM_WRK()
16173 if (rD == 15 || (rT & 1) == 1 || rT == 14 || rN == 15 in disInstr_ARM_WRK()
16174 || rD == rN || rD == rT || rD == rT+1) in disInstr_ARM_WRK()
16203 putIRegA(rD, mkexpr(resSC32), in disInstr_ARM_WRK()
16207 nm, nCC(INSN_COND), rD, rT, rT+1, rN); in disInstr_ARM_WRK()
16210 nm, nCC(INSN_COND), rD, rT, rN); in disInstr_ARM_WRK()
16220 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16223 if (rD == 15) { in disInstr_ARM_WRK()
16227 putIRegA(rD, in disInstr_ARM_WRK()
16229 binop(Iop_And32, getIRegA(rD), mkU32(0xFFFF)), in disInstr_ARM_WRK()
16232 DIP("movt%s r%u, #0x%04x\n", nCC(INSN_COND), rD, imm16); in disInstr_ARM_WRK()
16235 putIRegA(rD, mkU32(imm16), condT, Ijk_Boring); in disInstr_ARM_WRK()
16236 DIP("movw%s r%u, #0x%04x\n", nCC(INSN_COND), rD, imm16); in disInstr_ARM_WRK()
16254 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16305 putIRegA(rD, mkexpr(dstT), condT, Ijk_Boring); in disInstr_ARM_WRK()
16306 DIP("%s%s r%u, r%u, ROR #%u\n", nm, nCC(INSN_COND), rD, rM, rot); in disInstr_ARM_WRK()
16315 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16319 if (rD == 15 || msb < lsb) { in disInstr_ARM_WRK()
16331 assign(olddst, getIRegA(rD)); in disInstr_ARM_WRK()
16342 putIRegA(rD, mkexpr(newdst), condT, Ijk_Boring); in disInstr_ARM_WRK()
16346 nCC(INSN_COND), rD, lsb, msb-lsb+1); in disInstr_ARM_WRK()
16349 nCC(INSN_COND), rD, rN, lsb, msb-lsb+1); in disInstr_ARM_WRK()
16359 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16365 if (rD == 15 || rN == 15 || msb >= 32) { in disInstr_ARM_WRK()
16383 putIRegA(rD, mkexpr(res), condT, Ijk_Boring); in disInstr_ARM_WRK()
16387 nCC(INSN_COND), rD, rN, lsb, wm1 + 1); in disInstr_ARM_WRK()
16443 UInt rD = (insn >> 12) & 0xF; /* 15:12 */ in disInstr_ARM_WRK() local
16450 if ((rD & 1) != 0) in disInstr_ARM_WRK()
16468 if (bS == 0 && (rN == rD || rN == rD+1)) in disInstr_ARM_WRK()
16475 if (bS == 0 && (rN == rD || rN == rD+1)) in disInstr_ARM_WRK()
16485 vassert((rD & 1) == 0); /* from tests above */ in disInstr_ARM_WRK()
16486 if (bS == 0 && rD+1 == 15 && condT != IRTemp_INVALID) { in disInstr_ARM_WRK()
16532 && rN == 13 && rN != rD && rN != rD+1 in disInstr_ARM_WRK()
16545 getIRegA(rD+0), condT ); in disInstr_ARM_WRK()
16547 getIRegA(rD+1), condT ); in disInstr_ARM_WRK()
16552 assign(oldRd0, llGetIReg(rD+0)); in disInstr_ARM_WRK()
16553 assign(oldRd1, llGetIReg(rD+1)); in disInstr_ARM_WRK()
16559 putIRegA( rD+0, mkexpr(newRd0), IRTemp_INVALID, Ijk_Boring ); in disInstr_ARM_WRK()
16563 putIRegA( rD+1, mkexpr(newRd1), IRTemp_INVALID, Ijk_Boring ); in disInstr_ARM_WRK()
16573 vassert(rD+0 != rN); /* since we just wrote rD+0 */ in disInstr_ARM_WRK()
16574 vassert(rD+1 != rN); /* since we just wrote rD+1 */ in disInstr_ARM_WRK()
16582 case 1: DIP("%s%s r%u, %s\n", name, nCC(INSN_COND), rD, dis_buf); in disInstr_ARM_WRK()
16585 name, nCC(INSN_COND), rD, dis_buf); in disInstr_ARM_WRK()
16588 name, nCC(INSN_COND), rD, dis_buf); in disInstr_ARM_WRK()
16603 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16607 if (rN == 15/*it's {S,U}XTB*/ || rD == 15 || rM == 15) { in disInstr_ARM_WRK()
16620 putIRegA(rD, mkexpr(res), condT, Ijk_Boring); in disInstr_ARM_WRK()
16622 isU ? 'u' : 's', nCC(INSN_COND), rD, rN, rM, rot); in disInstr_ARM_WRK()
16633 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16637 if (rN == 15/*it's {S,U}XTH*/ || rD == 15 || rM == 15) { in disInstr_ARM_WRK()
16650 putIRegA(rD, mkexpr(res), condT, Ijk_Boring); in disInstr_ARM_WRK()
16653 isU ? 'u' : 's', nCC(INSN_COND), rD, rN, rM, rot); in disInstr_ARM_WRK()
16664 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16665 if (rM != 15 && rD != 15) { in disInstr_ARM_WRK()
16669 putIRegA(rD, mkexpr(res), condT, Ijk_Boring); in disInstr_ARM_WRK()
16671 nCC(INSN_COND), rD, rM); in disInstr_ARM_WRK()
16679 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16680 if (rM != 15 && rD != 15) { in disInstr_ARM_WRK()
16701 putIRegA(rD, mkexpr(irt_res), condT, Ijk_Boring); in disInstr_ARM_WRK()
16702 DIP("revsh%s r%u, r%u\n", nCC(INSN_COND), rD, rM); in disInstr_ARM_WRK()
16709 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
16711 if (rD != 15 && rM != 15) { in disInstr_ARM_WRK()
16715 putIRegA(rD, mkexpr(res), condT, Ijk_Boring); in disInstr_ARM_WRK()
16716 DIP("rbit r%u, r%u\n", rD, rM); in disInstr_ARM_WRK()
16726 UInt rD = INSN(19,16); in disInstr_ARM_WRK() local
16729 if (rD != 15 && rM != 15 && rN != 15) { in disInstr_ARM_WRK()
16735 putIRegA(rD, res, condT, Ijk_Boring); in disInstr_ARM_WRK()
16737 nCC(INSN_COND), bitR ? "r" : "", rD, rN, rM); in disInstr_ARM_WRK()
16747 UInt rD = INSN(19,16); in disInstr_ARM_WRK() local
16751 if (rD != 15 && rM != 15 && rN != 15) { in disInstr_ARM_WRK()
16759 putIRegA(rD, res, condT, Ijk_Boring); in disInstr_ARM_WRK()
16761 nCC(INSN_COND), bitR ? "r" : "", rD, rN, rM, rA); in disInstr_ARM_WRK()
17215 UInt rD = INSN(15,12); in disInstr_ARM_WRK() local
17216 if (rD <= 14) { in disInstr_ARM_WRK()
17218 putIRegA(rD, IRExpr_Get(OFFB_TPIDRURO, Ity_I32), in disInstr_ARM_WRK()
17220 DIP("mrc%s p15,0, r%u, c13, c0, 3\n", nCC(INSN_COND), rD); in disInstr_ARM_WRK()
17910 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
17916 putIRegT(rD, binop(Iop_Sub32, mkexpr(zero), mkexpr(arg)), condT); in disInstr_THUMB_WRK()
17918 DIP("negs r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
17926 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
17934 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
17937 DIP("mvns r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
17956 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
17962 assign( res, binop(anOp, getIRegT(rD), getIRegT(rM) )); in disInstr_THUMB_WRK()
17965 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
17968 DIP("%s r%u, r%u\n", anOpNm, rD, rM); in disInstr_THUMB_WRK()
17976 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
17982 assign( res, binop(Iop_And32, getIRegT(rD), in disInstr_THUMB_WRK()
17986 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
17989 DIP("bics r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
17997 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18002 assign(argL, getIRegT(rD)); in disInstr_THUMB_WRK()
18009 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
18012 DIP("adcs r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
18020 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18025 assign(argL, getIRegT(rD)); in disInstr_THUMB_WRK()
18032 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
18035 DIP("sbcs r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
18043 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18044 putIRegT(rD, binop(Iop_And32, getIRegT(rM), mkU32(0xFF)), in disInstr_THUMB_WRK()
18046 DIP("uxtb r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
18054 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18055 putIRegT(rD, binop(Iop_Sar32, in disInstr_THUMB_WRK()
18059 DIP("sxtb r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
18067 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18068 putIRegT(rD, binop(Iop_And32, getIRegT(rM), mkU32(0xFFFF)), in disInstr_THUMB_WRK()
18070 DIP("uxth r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
18078 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18079 putIRegT(rD, binop(Iop_Sar32, in disInstr_THUMB_WRK()
18083 DIP("sxth r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
18097 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18105 assign(rDt, getIRegT(rD)); in disInstr_THUMB_WRK()
18111 dis_buf, &res, &resC, rDt, rSt, rD, rS in disInstr_THUMB_WRK()
18117 dis_buf, &res, &resC, rDt, rSt, rD, rS in disInstr_THUMB_WRK()
18123 dis_buf, &res, &resC, rDt, rSt, rD, rS in disInstr_THUMB_WRK()
18129 dis_buf, &res, &resC, rDt, rSt, rD, rS in disInstr_THUMB_WRK()
18137 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
18140 DIP("%ss r%u, r%u\n", wot, rS, rD); in disInstr_THUMB_WRK()
18149 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18154 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
18155 DIP("rev%s r%u, r%u\n", isREV ? "" : "16", rD, rM); in disInstr_THUMB_WRK()
18162 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18183 putIRegT(rD, mkexpr(irt_res), condT); in disInstr_THUMB_WRK()
18184 DIP("revsh r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
18306 UInt rD = (h1 << 3) | INSN0(2,0); in disInstr_THUMB_WRK() local
18308 if (rD == 15 && rM == 15) { in disInstr_THUMB_WRK()
18312 assign( res, binop(Iop_Add32, getIRegT(rD), getIRegT(rM) )); in disInstr_THUMB_WRK()
18313 if (rD != 15) { in disInstr_THUMB_WRK()
18314 putIRegT( rD, mkexpr(res), condT ); in disInstr_THUMB_WRK()
18327 DIP("add(hi) r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
18357 UInt rD = (h1 << 3) | INSN0(2,0); in disInstr_THUMB_WRK() local
18363 if (rD != 15) { in disInstr_THUMB_WRK()
18364 putIRegT( rD, mkexpr(val), condT ); in disInstr_THUMB_WRK()
18377 DIP("mov r%u, r%u\n", rD, rM); in disInstr_THUMB_WRK()
18596 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18602 putIRegT(rD, binop(isSub ? Iop_Sub32 : Iop_Add32, in disInstr_THUMB_WRK()
18607 DIP("%s r%u, r%u, #%u\n", isSub ? "subs" : "adds", rD, rN, uimm3); in disInstr_THUMB_WRK()
18617 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18623 putIRegT( rD, binop(isSub ? Iop_Sub32 : Iop_Add32, in disInstr_THUMB_WRK()
18628 DIP("%s r%u, r%u, r%u\n", isSub ? "subs" : "adds", rD, rN, rM); in disInstr_THUMB_WRK()
18637 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18646 loadGuardedLE( tD, ILGop_Ident32, ea, llGetIReg(rD), condT ); in disInstr_THUMB_WRK()
18647 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18649 storeGuardedLE(ea, getIRegT(rD), condT); in disInstr_THUMB_WRK()
18653 DIP("%s r%u, [r%u, r%u]\n", isLD ? "ldr" : "str", rD, rN, rM); in disInstr_THUMB_WRK()
18662 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18671 loadGuardedLE(tD, ILGop_16Uto32, ea, llGetIReg(rD), condT); in disInstr_THUMB_WRK()
18672 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18674 storeGuardedLE( ea, unop(Iop_32to16, getIRegT(rD)), condT ); in disInstr_THUMB_WRK()
18678 DIP("%sh r%u, [r%u, r%u]\n", isLD ? "ldr" : "str", rD, rN, rM); in disInstr_THUMB_WRK()
18685 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18692 loadGuardedLE(tD, ILGop_16Sto32, ea, llGetIReg(rD), condT); in disInstr_THUMB_WRK()
18693 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18696 DIP("ldrsh r%u, [r%u, r%u]\n", rD, rN, rM); in disInstr_THUMB_WRK()
18703 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18710 loadGuardedLE(tD, ILGop_8Sto32, ea, llGetIReg(rD), condT); in disInstr_THUMB_WRK()
18711 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18714 DIP("ldrsb r%u, [r%u, r%u]\n", rD, rN, rM); in disInstr_THUMB_WRK()
18723 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18732 loadGuardedLE(tD, ILGop_8Uto32, ea, llGetIReg(rD), condT); in disInstr_THUMB_WRK()
18733 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18735 storeGuardedLE( ea, unop(Iop_32to8, getIRegT(rD)), condT ); in disInstr_THUMB_WRK()
18739 DIP("%sb r%u, [r%u, r%u]\n", isLD ? "ldr" : "str", rD, rN, rM); in disInstr_THUMB_WRK()
18776 UInt rD = INSN0(10,8); in disInstr_THUMB_WRK() local
18778 putIRegT(rD, binop(Iop_Add32, in disInstr_THUMB_WRK()
18782 DIP("add r%u, pc, #%u\n", rD, imm8 * 4); in disInstr_THUMB_WRK()
18788 UInt rD = INSN0(10,8); in disInstr_THUMB_WRK() local
18790 putIRegT(rD, binop(Iop_Add32, getIRegT(13), mkU32(imm8 * 4)), in disInstr_THUMB_WRK()
18792 DIP("add r%u, r13, #%u\n", rD, imm8 * 4); in disInstr_THUMB_WRK()
18812 UInt rD = INSN0(10,8); in disInstr_THUMB_WRK() local
18820 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
18823 DIP("movs r%u, #%u\n", rD, uimm8); in disInstr_THUMB_WRK()
18830 UInt rD = INSN0(10,8); in disInstr_THUMB_WRK() local
18839 loadGuardedLE( tD, ILGop_Ident32, mkexpr(ea), llGetIReg(rD), condT ); in disInstr_THUMB_WRK()
18840 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18843 DIP("ldr r%u, [pc, #%u]\n", rD, imm8 * 4); in disInstr_THUMB_WRK()
18852 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18861 loadGuardedLE( tD, ILGop_Ident32, ea, llGetIReg(rD), condT ); in disInstr_THUMB_WRK()
18862 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18864 storeGuardedLE( ea, getIRegT(rD), condT ); in disInstr_THUMB_WRK()
18868 DIP("%s r%u, [r%u, #%u]\n", isLD ? "ldr" : "str", rD, rN, imm5 * 4); in disInstr_THUMB_WRK()
18877 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18886 loadGuardedLE( tD, ILGop_16Uto32, ea, llGetIReg(rD), condT ); in disInstr_THUMB_WRK()
18887 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18889 storeGuardedLE( ea, unop(Iop_32to16, getIRegT(rD)), condT ); in disInstr_THUMB_WRK()
18893 DIP("%sh r%u, [r%u, #%u]\n", isLD ? "ldr" : "str", rD, rN, imm5 * 2); in disInstr_THUMB_WRK()
18902 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
18911 loadGuardedLE( tD, ILGop_8Uto32, ea, llGetIReg(rD), condT ); in disInstr_THUMB_WRK()
18912 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18914 storeGuardedLE( ea, unop(Iop_32to8, getIRegT(rD)), condT ); in disInstr_THUMB_WRK()
18918 DIP("%sb r%u, [r%u, #%u]\n", isLD ? "ldr" : "str", rD, rN, imm5); in disInstr_THUMB_WRK()
18927 UInt rD = INSN0(10,8); in disInstr_THUMB_WRK() local
18935 loadGuardedLE( tD, ILGop_Ident32, ea, llGetIReg(rD), condT ); in disInstr_THUMB_WRK()
18936 putIRegT(rD, mkexpr(tD), IRTemp_INVALID); in disInstr_THUMB_WRK()
18938 storeGuardedLE(ea, getIRegT(rD), condT); in disInstr_THUMB_WRK()
18942 DIP("%s r%u, [sp, #%u]\n", isLD ? "ldr" : "str", rD, imm8 * 4); in disInstr_THUMB_WRK()
19044 UInt rD = INSN0(2,0); in disInstr_THUMB_WRK() local
19079 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19083 DIP("%ss r%u, r%u, #%u\n", wot, rD, rM, imm5); in disInstr_THUMB_WRK()
19327 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19328 Bool valid = !isBadRegT(rN) && !isBadRegT(rD); in disInstr_THUMB_WRK()
19330 if (!valid && rD <= 14 && rN == 13) in disInstr_THUMB_WRK()
19340 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19344 bS == 1 ? "s" : "", rD, rN, imm32); in disInstr_THUMB_WRK()
19354 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19355 Bool valid = !isBadRegT(rN) && !isBadRegT(rD); in disInstr_THUMB_WRK()
19357 if (!valid && rD <= 14 && rN == 13) in disInstr_THUMB_WRK()
19367 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19368 DIP("addw r%u, r%u, #%u\n", rD, rN, imm12); in disInstr_THUMB_WRK()
19435 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19436 Bool valid = !isBadRegT(rN) && !isBadRegT(rD); in disInstr_THUMB_WRK()
19439 if (!valid && !isRSB && rN == 13 && rD != 15) in disInstr_THUMB_WRK()
19451 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19459 isRSB ? "rsb" : "sub", bS == 1 ? "s" : "", rD, rN, imm32); in disInstr_THUMB_WRK()
19469 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19470 Bool valid = !isBadRegT(rN) && !isBadRegT(rD); in disInstr_THUMB_WRK()
19472 if (!valid && rD == 13 && rN == 13) in disInstr_THUMB_WRK()
19482 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19483 DIP("subw r%u, r%u, #%u\n", rD, rN, imm12); in disInstr_THUMB_WRK()
19498 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19499 if (!isBadRegT(rN) && !isBadRegT(rD)) { in disInstr_THUMB_WRK()
19516 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19527 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19536 nm, bS == 1 ? "s" : "", rD, rN, imm32); in disInstr_THUMB_WRK()
19554 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19555 if (!isBadRegT(rN) && !isBadRegT(rD)) { in disInstr_THUMB_WRK()
19577 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19589 nm, bS == 1 ? "s" : "", rD, rN, imm32); in disInstr_THUMB_WRK()
19603 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19609 Bool valid = !isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM); in disInstr_THUMB_WRK()
19613 && rD != 15 && rN == 13 && imm5 <= 3 && how == 0) { in disInstr_THUMB_WRK()
19619 && rD != 15 && rN == 13 && imm5 == 0 && how == 0) { in disInstr_THUMB_WRK()
19650 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19668 nm, bS ? "s" : "", rD, rN, dis_buf); in disInstr_THUMB_WRK()
19682 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19684 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM)) { in disInstr_THUMB_WRK()
19712 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19723 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19733 nm, bS ? "s" : "", rD, rN, dis_buf); in disInstr_THUMB_WRK()
19751 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19753 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM)) { in disInstr_THUMB_WRK()
19793 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19802 nm, bS ? "s" : "", rD, rN, dis_buf); in disInstr_THUMB_WRK()
19816 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19819 Bool valid = !isBadRegT(rN) && !isBadRegT(rM) && !isBadRegT(rD); in disInstr_THUMB_WRK()
19836 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19842 nm, bS ? "s" : "", rD, rN, rM); in disInstr_THUMB_WRK()
19851 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19853 if (!isBadRegT(rD) && !isBadRegT(rN)) { in disInstr_THUMB_WRK()
19872 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19879 isMVN ? "mvn" : "mov", bS ? "s" : "", rD, dis_buf); in disInstr_THUMB_WRK()
19965 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19966 if (!isBadRegT(rD)) { in disInstr_THUMB_WRK()
19973 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
19985 isMVN ? "mvn" : "mov", bS ? "s" : "", rD, imm32); in disInstr_THUMB_WRK()
19994 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
19995 if (!isBadRegT(rD)) { in disInstr_THUMB_WRK()
19998 putIRegT(rD, mkU32(imm16), condT); in disInstr_THUMB_WRK()
19999 DIP("movw r%u, #%u\n", rD, imm16); in disInstr_THUMB_WRK()
20008 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
20009 if (!isBadRegT(rD)) { in disInstr_THUMB_WRK()
20015 binop(Iop_And32, getIRegT(rD), mkU32(0xFFFF)), in disInstr_THUMB_WRK()
20017 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
20018 DIP("movt r%u, #%u\n", rD, imm16); in disInstr_THUMB_WRK()
20754 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
20758 if (!isBadRegT(rD) && !isBadRegT(rN) && msb <= 31) { in disInstr_THUMB_WRK()
20775 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
20778 isU ? "ubfx" : "sbfx", rD, rN, lsb, wm1 + 1); in disInstr_THUMB_WRK()
20799 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
20802 if (!isBadRegT(rD) && !isBadRegT(rM)) { in disInstr_THUMB_WRK()
20858 putIRegT(rD, mkexpr(dstT), condT); in disInstr_THUMB_WRK()
20859 DIP("%s r%u, r%u, ror #%u\n", nm, rD, rM, 8 * rot); in disInstr_THUMB_WRK()
20868 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
20870 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM)) { in disInstr_THUMB_WRK()
20873 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
20874 DIP("mul.w r%u, r%u, r%u\n", rD, rN, rM); in disInstr_THUMB_WRK()
20883 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
20885 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM)) { in disInstr_THUMB_WRK()
20892 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
20893 DIP("sdiv.w r%u, r%u, r%u\n", rD, rN, rM); in disInstr_THUMB_WRK()
20902 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
20904 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM)) { in disInstr_THUMB_WRK()
20911 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
20912 DIP("udiv.w r%u, r%u, r%u\n", rD, rN, rM); in disInstr_THUMB_WRK()
20944 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
20946 if (!isBadRegT(rD) && !isBadRegT(rN) in disInstr_THUMB_WRK()
20954 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
20956 isMLA ? "mla" : "mls", rD, rN, rM, rA); in disInstr_THUMB_WRK()
20965 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
20966 if (!isBadRegT(rD)) { in disInstr_THUMB_WRK()
20969 putIRegT(rD, binop(Iop_Add32, in disInstr_THUMB_WRK()
20973 DIP("add r%u, pc, #%u\n", rD, imm32); in disInstr_THUMB_WRK()
21053 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21056 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM)) { in disInstr_THUMB_WRK()
21062 putIRegT(rD, res, condT); in disInstr_THUMB_WRK()
21064 bitR ? "r" : "", rD, rN, rM); in disInstr_THUMB_WRK()
21075 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21078 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM) && (rA != 13)) { in disInstr_THUMB_WRK()
21086 putIRegT(rD, res, condT); in disInstr_THUMB_WRK()
21088 bitR ? "r" : "", rD, rN, rM, rA); in disInstr_THUMB_WRK()
21097 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21098 if (!isBadRegT(rD)) { in disInstr_THUMB_WRK()
21101 putIRegT(rD, binop(Iop_Sub32, in disInstr_THUMB_WRK()
21105 DIP("sub r%u, pc, #%u\n", rD, imm32); in disInstr_THUMB_WRK()
21113 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21117 if (isBadRegT(rD) || rN == 13 || msb < lsb) { in disInstr_THUMB_WRK()
21129 assign(olddst, getIRegT(rD)); in disInstr_THUMB_WRK()
21140 putIRegT(rD, mkexpr(newdst), condT); in disInstr_THUMB_WRK()
21144 rD, lsb, msb-lsb+1); in disInstr_THUMB_WRK()
21147 rD, rN, lsb, msb-lsb+1); in disInstr_THUMB_WRK()
21161 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21164 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM)) { in disInstr_THUMB_WRK()
21175 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
21177 isU ? 'u' : 's', rD, rN, rM, rot); in disInstr_THUMB_WRK()
21190 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21193 if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM)) { in disInstr_THUMB_WRK()
21204 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
21206 isU ? 'u' : 's', rD, rN, rM, rot); in disInstr_THUMB_WRK()
21216 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21218 if (!isBadRegT(rD) && !isBadRegT(rM1) && rM1 == rM2) { in disInstr_THUMB_WRK()
21227 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
21228 DIP("clz r%u, r%u\n", rD, rM1); in disInstr_THUMB_WRK()
21238 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21240 if (!isBadRegT(rD) && !isBadRegT(rM1) && rM1 == rM2) { in disInstr_THUMB_WRK()
21244 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
21245 DIP("rbit r%u, r%u\n", rD, rM1); in disInstr_THUMB_WRK()
21257 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21260 if (!isBadRegT(rD) && !isBadRegT(rM1) && rM1 == rM2) { in disInstr_THUMB_WRK()
21264 putIRegT(rD, mkexpr(res), condT); in disInstr_THUMB_WRK()
21265 DIP("rev%s r%u, r%u\n", isREV ? "" : "16", rD, rM1); in disInstr_THUMB_WRK()
21276 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21277 if (!isBadRegT(rD) && !isBadRegT(rM1) && rM1 == rM2) { in disInstr_THUMB_WRK()
21298 putIRegT(rD, mkexpr(irt_res), condT); in disInstr_THUMB_WRK()
21299 DIP("revsh r%u, r%u\n", rD, rM1); in disInstr_THUMB_WRK()
21323 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21324 if (!isBadRegT(rD)) { in disInstr_THUMB_WRK()
21326 putIRegT( rD, mkexpr(apsr), condT ); in disInstr_THUMB_WRK()
21327 DIP("mrs r%u, cpsr\n", rD); in disInstr_THUMB_WRK()
21400 UInt rD = INSN1(11,8); in disInstr_THUMB_WRK() local
21402 if (!isBadRegT(rD) && !isBadRegT(rT) && rN != 15 in disInstr_THUMB_WRK()
21403 && rD != rN && rD != rT) { in disInstr_THUMB_WRK()
21419 putIRegT(rD, mkexpr(resSC32), IRTemp_INVALID); in disInstr_THUMB_WRK()
21420 DIP("strex r%u, r%u, [r%u, #+%u]\n", rD, rT, rN, imm8 * 4); in disInstr_THUMB_WRK()
21430 UInt rD = INSN1(3,0); in disInstr_THUMB_WRK() local
21432 if (!isBadRegT(rD) && !isBadRegT(rT) && rN != 15 in disInstr_THUMB_WRK()
21433 && rD != rN && rD != rT) { in disInstr_THUMB_WRK()
21448 putIRegT(rD, mkexpr(resSC32), IRTemp_INVALID); in disInstr_THUMB_WRK()
21449 DIP("strex%c r%u, r%u, [r%u]\n", isH ? 'h' : 'b', rD, rT, rN); in disInstr_THUMB_WRK()
21459 UInt rD = INSN1(3,0); in disInstr_THUMB_WRK() local
21460 if (!isBadRegT(rD) && !isBadRegT(rT) && !isBadRegT(rT2) in disInstr_THUMB_WRK()
21461 && rN != 15 && rD != rN && rD != rT && rD != rT) { in disInstr_THUMB_WRK()
21478 putIRegT(rD, mkexpr(resSC32), IRTemp_INVALID); in disInstr_THUMB_WRK()
21479 DIP("strexd r%u, r%u, r%u, [r%u]\n", rD, rT, rT2, rN); in disInstr_THUMB_WRK()
21567 UInt rD = INSN1(15,12); in disInstr_THUMB_WRK() local
21568 if (!isBadRegT(rD)) { in disInstr_THUMB_WRK()
21569 putIRegT(rD, IRExpr_Get(OFFB_TPIDRURO, Ity_I32), IRTemp_INVALID); in disInstr_THUMB_WRK()
21570 DIP("mrc p15,0, r%u, c13, c0, 3\n", rD); in disInstr_THUMB_WRK()