Lines Matching defs:dreg
2859 UInt dreg = get_neon_d_regno(theInstr);
2867 putQReg(dreg, triop(Iop_SliceV128, /*hiV128*/getQReg(mreg),
2870 putDRegI64(dreg, triop(Iop_Slice64, /*hiI64*/getDRegI64(mreg),
2873 DIP("vext.8 %c%u, %c%u, %c%u, #%u\n", reg_t, dreg, reg_t, nreg,
2908 UInt dreg = get_neon_d_regno(theInstr & ~(1 << 6));
2920 if (dreg >= 0x100 || mreg >= 0x100 || nreg >= 0x100)
2966 getDRegI64(dreg),
2972 putDRegI64(dreg, mkexpr(old_res), condT);
2973 DIP("vtb%c.8 d%u, {", op ? 'x' : 'l', dreg);
2988 UInt dreg = ((theInstr >> 18) & 0x10) | ((theInstr >> 12) & 0xF);
2999 if ((Q == 1) && ((dreg & 1) == 1))
3002 dreg >>= 1;
3029 putQReg(dreg, mkexpr(res), condT);
3031 putDRegI64(dreg, mkexpr(res), condT);
3033 DIP("vdup.%u %c%u, d%u[%u]\n", size, Q ? 'q' : 'd', dreg, mreg, index);
3042 UInt dreg = get_neon_d_regno(theInstr);
3142 dreg, regType, nreg, regType, mreg);
3201 8 << size, reg_t, dreg, reg_t, nreg, reg_t, mreg);
3312 8 << size, reg_t, dreg, reg_t, nreg, reg_t, mreg);
3327 reg_t, dreg, reg_t, nreg, reg_t, mreg);
3341 reg_t, dreg, reg_t, nreg, reg_t, mreg);
3356 reg_t, dreg, reg_t, nreg, reg_t, mreg);
3361 DIP("vmov %c%u, %c%u\n", reg_t, dreg, reg_t, mreg);
3375 reg_t, dreg, reg_t, nreg, reg_t, mreg);
3390 DIP("veor %c%u, %c%u, %c%u\n", Q ? 'q' : 'd', dreg,
3397 assign(reg_d, getQReg(dreg));
3408 assign(reg_d, getDRegI64(dreg));
3418 Q ? 'q' : 'd', dreg,
3425 assign(reg_d, getQReg(dreg));
3435 assign(reg_d, getDRegI64(dreg));
3445 Q ? 'q' : 'd', dreg,
3452 assign(reg_d, getQReg(dreg));
3462 assign(reg_d, getDRegI64(dreg));
3472 Q ? 'q' : 'd', dreg,
3553 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
3611 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
3639 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
3652 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
3714 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, Q ? 'q' : 'd',
3838 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, Q ? 'q' : 'd',
3978 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, Q ? 'q' : 'd',
4135 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, Q ? 'q' : 'd',
4164 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
4189 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
4258 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
4316 assign(acc, getQReg(dreg));
4321 assign(acc, getDRegI64(dreg));
4337 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
4355 dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
4367 dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
4386 dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
4396 dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
4445 Q ? getQReg(dreg) : getDRegI64(dreg),
4449 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
4475 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd',
4505 8 << size, Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg,
4544 dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
4578 dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
4596 dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
4609 Q ? 'q' : 'd', dreg,
4615 Q ? 'q' : 'd', dreg,
4624 DIP("vpadd.f32 d%u, d%u, d%u\n", dreg, nreg, mreg);
4640 Q ? 'q' : 'd', dreg,
4672 Q ? getQReg(dreg) : getDRegI64(dreg),
4678 dreg, Q ? 'q' : 'd', nreg, Q ? 'q' : 'd', mreg);
4687 Q ? 'q' : 'd', dreg,
4703 Q ? 'q' : 'd', dreg,
4717 Q ? 'q' : 'd', dreg,
4727 Q ? 'q' : 'd', dreg,
4749 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg,
4763 DIP("vmin.f32 %c%u, %c%u, %c%u\n", Q ? 'q' : 'd', dreg,
4767 DIP("vmax.f32 %c%u, %c%u, %c%u\n", Q ? 'q' : 'd', dreg,
4780 DIP("vpmin.f32 d%u, d%u, d%u\n", dreg, nreg, mreg);
4783 DIP("vpmax.f32 d%u, d%u, d%u\n", dreg, nreg, mreg);
4797 DIP("vrecps.f32 %c%u, %c%u, %c%u\n", Q ? 'q' : 'd', dreg,
4807 DIP("vrsqrts.f32 %c%u, %c%u, %c%u\n", Q ? 'q' : 'd', dreg,
4816 putQReg(dreg, mkexpr(res), condT);
4818 putDRegI64(dreg, mkexpr(res), condT);
4834 UInt dreg = get_neon_d_regno(theInstr);
4842 if (dreg & 1)
4844 dreg >>= 1;
4875 putQReg(dreg, binop(op, mkexpr(arg_n), mkexpr(arg_m)),
4878 (A & 1) ? 'w' : 'l', U ? 'u' : 's', 8 << size, dreg,
4927 putDRegI64(dreg, unop(cvt, binop(sh, mkexpr(res), mkU8(8 << size))),
4929 DIP("v%saddhn.i%d d%u, q%u, q%u\n", U ? "r" : "", 16 << size, dreg,
4937 if (dreg & 1)
4939 dreg >>= 1;
4983 getQReg(dreg)));
4984 putQReg(dreg, mkexpr(res), condT);
4985 DIP("vabal.%c%d q%u, d%u, d%u\n", U ? 'u' : 's', 8 << size, dreg,
5037 putDRegI64(dreg, unop(cvt, binop(sh, mkexpr(res), mkU8(8 << size))),
5039 DIP("v%ssubhn.i%d d%u, q%u, q%u\n", U ? "r" : "", 16 << size, dreg,
5047 if (dreg & 1)
5049 dreg >>= 1;
5089 putQReg(dreg, mkexpr(res), condT);
5090 DIP("vabdl.%c%d q%u, d%u, d%u\n", U ? 'u' : 's', 8 << size, dreg,
5096 if (dreg & 1)
5098 dreg >>= 1;
5120 putQReg(dreg, binop(op2, getQReg(dreg), mkexpr(res)), condT);
5122 8 << size, dreg, nreg, mreg);
5129 if (dreg & 1)
5131 dreg >>= 1;
5159 assign(tmp, binop(op2, getQReg(dreg), mkexpr(res)));
5160 setFlag_QC(mkexpr(tmp), binop(add, getQReg(dreg), mkexpr(res)),
5167 putQReg(dreg, binop(add, getQReg(dreg), mkexpr(res)), condT);
5168 DIP("vqdml%cl.s%d q%u, d%u, d%u\n", P ? 's' : 'a', 8 << size, dreg,
5174 if (dreg & 1)
5176 dreg >>= 1;
5193 putQReg(dreg, binop(op, getDRegI64(nreg),
5196 8 << size, dreg, nreg, mreg);
5202 if (dreg & 1)
5204 dreg >>= 1;
5226 putQReg(dreg, binop(op, getDRegI64(nreg), getDRegI64(mreg)),
5233 DIP("vqdmull.s%d q%u, d%u, d%u\n", 8 << size, dreg, nreg, mreg);
5247 UInt dreg = get_neon_d_regno(theInstr & ~(1 << 6));
5263 if ((dreg & 1) || (nreg & 1))
5265 dreg >>= 1;
5353 putQReg(dreg, binop_w_fake_RM(op2, getQReg(dreg), mkexpr(res)),
5356 putDRegI64(dreg, binop(op2, getDRegI64(dreg), mkexpr(res)),
5360 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', nreg, mreg, index);
5368 if (dreg & 1)
5370 dreg >>= 1;
5414 putQReg(dreg, binop(op2, getQReg(dreg), mkexpr(res)), condT);
5417 8 << size, dreg, nreg, mreg, index);
5427 if (dreg & 1)
5429 dreg >>= 1;
5481 assign(tmp, binop(op2, getQReg(dreg), mkexpr(res)));
5487 setFlag_QC(mkexpr(tmp), binop(add, getQReg(dreg), mkexpr(res)),
5489 putQReg(dreg, binop(add, getQReg(dreg), mkexpr(res)), condT);
5491 dreg, nreg, mreg, index);
5500 if ((dreg & 1) || (nreg & 1))
5502 dreg >>= 1;
5583 putQReg(dreg, mkexpr(res), condT);
5585 putDRegI64(dreg, mkexpr(res), condT);
5587 8 << size, Q ? 'q' : 'd', dreg,
5596 if (dreg & 1)
5598 dreg >>= 1;
5630 putQReg(dreg, mkexpr(res), condT);
5631 DIP("vmull.%c%d q%u, d%u, d%u[%u]\n", U ? 'u' : 's', 8 << size, dreg,
5641 if (dreg & 1)
5643 dreg >>= 1;
5687 putQReg(dreg, binop(op, mkexpr(arg_n), mkexpr(arg_m)),
5694 DIP("vqdmull.s%d q%u, d%u, d%u[%u]\n", 8 << size, dreg, nreg, mreg,
5705 if ((dreg & 1) || (nreg & 1))
5707 dreg >>= 1;
5788 putQReg(dreg, mkexpr(res), condT);
5790 putDRegI64(dreg, mkexpr(res), condT);
5792 8 << size, Q ? 'q' : 'd', dreg,
5803 if ((dreg & 1) || (nreg & 1))
5805 dreg >>= 1;
5886 putQReg(dreg, mkexpr(res), condT);
5888 putDRegI64(dreg, mkexpr(res), condT);
5890 8 << size, Q ? 'q' : 'd', dreg,
5913 UInt dreg = get_neon_d_regno(theInstr);
6033 putQReg(dreg, binop(add, mkexpr(res), getQReg(dreg)),
6036 putDRegI64(dreg, binop(add, mkexpr(res), getDRegI64(dreg)),
6041 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
6044 putQReg(dreg, mkexpr(res), condT);
6046 putDRegI64(dreg, mkexpr(res), condT);
6049 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
6110 putQReg(dreg, binop(add, mkexpr(res), getQReg(dreg)),
6113 putDRegI64(dreg, binop(add, mkexpr(res), getDRegI64(dreg)),
6117 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
6120 putQReg(dreg, mkexpr(res), condT);
6122 putDRegI64(dreg, mkexpr(res), condT);
6125 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
6153 getQReg(dreg),
6159 putQReg(dreg, mkexpr(res), condT);
6165 getDRegI64(dreg),
6171 putDRegI64(dreg, mkexpr(res), condT);
6174 8 << size, Q ? 'q' : 'd', dreg,
6202 getQReg(dreg),
6208 putQReg(dreg, mkexpr(res), condT);
6214 getDRegI64(dreg),
6220 putDRegI64(dreg, mkexpr(res), condT);
6223 8 << size, Q ? 'q' : 'd', dreg,
6244 putQReg(dreg, mkexpr(res), condT);
6246 putDRegI64(dreg, mkexpr(res), condT);
6249 8 << size, Q ? 'q' : 'd', dreg,
6282 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
6306 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
6333 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg, shift_imm);
6350 putQReg(dreg, mkexpr(res), condT);
6352 putDRegI64(dreg, mkexpr(res), condT);
6359 dreg = ((theInstr >> 18) & 0x10) | ((theInstr >> 12) & 0xF);
6390 putDRegI64(dreg, mkexpr(res), condT);
6391 DIP("vshrn.i%d d%u, q%u, #%u\n", 8 << size, dreg, mreg,
6439 putDRegI64(dreg, mkexpr(res), condT);
6441 DIP("vmov%d d%u, q%u, #%u\n", 8 << size, dreg, mreg,
6444 DIP("vrshrn.i%d d%u, q%u, #%u\n", 8 << size, dreg, mreg,
6453 dreg = ((theInstr >> 18) & 0x10) | ((theInstr >> 12) & 0xF);
6480 U ? 'u' : 's', 8 << size, dreg, mreg, shift_imm);
6503 8 << size, dreg, mreg, shift_imm);
6540 putDRegI64(dreg, unop(cvt, mkexpr(res)), condT);
6547 if (dreg & 1)
6549 dreg >>= 1;
6571 putQReg(dreg, mkexpr(res), condT);
6574 dreg, mreg);
6577 dreg, mreg, shift_imm);
6590 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg,
6599 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg,
6605 putQReg(dreg, binop(op, getQReg(mreg),
6608 putDRegI64(dreg, binop(op, getDRegI64(mreg),
6628 UInt dreg = get_neon_d_regno(theInstr);
6666 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
6687 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
6706 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
6735 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
6752 DIP("vcls.s%d %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
6767 DIP("vclz.i%d %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
6774 DIP("vcnt.8 %c%u, %c%u\n", Q ? 'q' : 'd', dreg, Q ? 'q' : 'd',
6783 DIP("vmvn %c%u, %c%u\n", Q ? 'q' : 'd', dreg, Q ? 'q' : 'd',
6832 assign(arg_d, getQReg(dreg));
6835 assign(arg_d, getDRegI64(dreg));
6840 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
6901 DIP("vqabs.s%d %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
6935 DIP("vqneg.s%d %c%u, %c%u\n", 8 << size, Q ? 'q' : 'd', dreg,
6943 putQReg(dreg, mkexpr(res), condT);
6945 putDRegI64(dreg, mkexpr(res), condT);
6985 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7016 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7047 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7078 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7108 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7130 F ? 'f' : 's', 8 << size, Q ? 'q' : 'd', dreg,
7161 F ? 'f' : 's', 8 << size, Q ? 'q' : 'd', dreg,
7169 putQReg(dreg, mkexpr(res), condT);
7171 putDRegI64(dreg, mkexpr(res), condT);
7180 putQReg(mreg, getQReg(dreg), condT);
7181 putQReg(dreg, mkexpr(arg_m), condT);
7185 putDRegI64(mreg, getDRegI64(dreg), condT);
7186 putDRegI64(dreg, mkexpr(arg_m), condT);
7189 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7201 assign(old_d, getQReg(dreg));
7208 assign(old_d, getDRegI64(dreg));
7252 putQReg(dreg, mkexpr(new_d), condT);
7255 putDRegI64(dreg, mkexpr(new_d), condT);
7259 8 << size, Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7273 assign(old_d, getQReg(dreg));
7280 assign(old_d, getDRegI64(dreg));
7303 putQReg(dreg, mkexpr(new_d), condT);
7306 putDRegI64(dreg, mkexpr(new_d), condT);
7310 8 << size, Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7324 assign(old_d, getQReg(dreg));
7331 assign(old_d, getDRegI64(dreg));
7354 putQReg(dreg, mkexpr(new_d), condT);
7357 putDRegI64(dreg, mkexpr(new_d), condT);
7361 8 << size, Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7374 putDRegI64(dreg, unop(op, getQReg(mreg)), condT);
7375 DIP("vmovn.i%d d%u, q%u\n", 16 << size, dreg, mreg);
7381 dreg = ((theInstr >> 18) & 0x10) | ((theInstr >> 12) & 0xF);
7404 DIP("vqmovun.s%d d%u, q%u\n", 16 << size, dreg, mreg);
7414 DIP("vqmovn.s%d d%u, q%u\n", 16 << size, dreg, mreg);
7424 DIP("vqmovn.u%d d%u, q%u\n", 16 << size, dreg, mreg);
7434 putDRegI64(dreg, mkexpr(res), condT);
7442 if (dreg & 1)
7444 dreg >>= 1;
7456 putQReg(dreg, mkexpr(res), condT);
7457 DIP("vshll.i%d q%u, d%u, #%d\n", 8 << size, dreg, mreg, 8 << size);
7466 if (dreg & 1)
7468 dreg >>= 1;
7469 putQReg(dreg, unop(Iop_F16toF32x4, getDRegI64(mreg)),
7471 DIP("vcvt.f32.f16 q%u, d%u\n", dreg, mreg);
7476 putDRegI64(dreg, unop(Iop_F32toF16x4, getQReg(mreg)),
7478 DIP("vcvt.f16.f32 d%u, q%u\n", dreg, mreg);
7495 putQReg(dreg, unop(op, getQReg(mreg)), condT);
7496 DIP("vrecpe.%c32 q%u, q%u\n", F ? 'f' : 'u', dreg, mreg);
7499 putDRegI64(dreg, unop(op, getDRegI64(mreg)), condT);
7500 DIP("vrecpe.%c32 d%u, d%u\n", F ? 'f' : 'u', dreg, mreg);
7517 putQReg(dreg, unop(op, getQReg(mreg)), condT);
7518 DIP("vrsqrte.%c32 q%u, q%u\n", F ? 'f' : 'u', dreg, mreg);
7520 putDRegI64(dreg, unop(op, getDRegI64(mreg)), condT);
7521 DIP("vrsqrte.%c32 d%u, d%u\n", F ? 'f' : 'u', dreg, mreg);
7533 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7538 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7543 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7548 Q ? 'q' : 'd', dreg, Q ? 'q' : 'd', mreg);
7554 putQReg(dreg, unop(op, getQReg(mreg)), condT);
7556 putDRegI64(dreg, unop(op, getDRegI64(mreg)), condT);
7635 const char *instr, UInt Q, UInt dreg)
7639 ppNeonImmType(cmode, op), Q ? 'q' : 'd', dreg);
7648 UInt dreg = get_neon_d_regno(theInstr);
7725 putQReg(dreg, imm_val, condT);
7727 putDRegI64(dreg, imm_val, condT);
7729 DIPimm(imm_raw_pp, cmode, op_bit, "vmov", Q, dreg);
7736 putQReg(dreg, unop(Iop_NotV128, imm_val), condT);
7738 putDRegI64(dreg, unop(Iop_Not64, imm_val), condT);
7740 DIPimm(imm_raw_pp, cmode, op_bit, "vmvn", Q, dreg);
7745 assign(tmp_var, getQReg(dreg));
7748 assign(tmp_var, getDRegI64(dreg));
7756 DIPimm(imm_raw_pp, cmode, op_bit, "vorr", Q, dreg);
7764 DIPimm(imm_raw_pp, cmode, op_bit, "vbic", Q, dreg);
7769 putQReg(dreg, expr, condT);
7771 putDRegI64(dreg, expr, condT);