const HChar *mnm = irgen(m3, m4, r1, r2);
if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
- S390_DISASM(MNM(mnm), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM(mnm, fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
}
static void
const HChar *mnm = irgen(m3, m4, r1, r2);
if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
- S390_DISASM(MNM(mnm), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM(mnm, fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
}
}
static const HChar *
-s390_irgen_CEFBR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CEFBRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
if (! s390_host_has_fpext && m3 != S390_BFP_ROUND_PER_FPC) {
emulation_warning(EmWarn_S390X_fpext_rounding);
put_fpr_w0(r1, binop(Iop_I32StoF32, mkexpr(encode_bfp_rounding_mode(m3)),
mkexpr(op2)));
- return "cefbr";
+ return "cefbra";
}
static const HChar *
-s390_irgen_CDFBR(UChar m3 __attribute__((unused)),
- UChar m4 __attribute__((unused)), UChar r1, UChar r2)
+s390_irgen_CDFBRA(UChar m3 __attribute__((unused)),
+ UChar m4 __attribute__((unused)), UChar r1, UChar r2)
{
IRTemp op2 = newTemp(Ity_I32);
assign(op2, get_gpr_w1(r2));
put_fpr_dw0(r1, unop(Iop_I32StoF64, mkexpr(op2)));
- return "cdfbr";
+ return "cdfbra";
}
static const HChar *
-s390_irgen_CEGBR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CEGBRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
if (! s390_host_has_fpext && m3 != S390_BFP_ROUND_PER_FPC) {
emulation_warning(EmWarn_S390X_fpext_rounding);
put_fpr_w0(r1, binop(Iop_I64StoF32, mkexpr(encode_bfp_rounding_mode(m3)),
mkexpr(op2)));
- return "cegbr";
+ return "cegbra";
}
static const HChar *
-s390_irgen_CDGBR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CDGBRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
if (! s390_host_has_fpext && m3 != S390_BFP_ROUND_PER_FPC) {
emulation_warning(EmWarn_S390X_fpext_rounding);
put_fpr_dw0(r1, binop(Iop_I64StoF64, mkexpr(encode_bfp_rounding_mode(m3)),
mkexpr(op2)));
- return "cdgbr";
+ return "cdgbra";
}
static const HChar *
}
static const HChar *
-s390_irgen_CFEBR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CFEBRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
IRTemp op = newTemp(Ity_F32);
IRTemp result = newTemp(Ity_I32);
put_gpr_w1(r1, mkexpr(result));
s390_cc_thunk_putFZ(S390_CC_OP_BFP_32_TO_INT_32, op, rounding_mode);
- return "cfebr";
+ return "cfebra";
}
static const HChar *
-s390_irgen_CFDBR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CFDBRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
IRTemp op = newTemp(Ity_F64);
IRTemp result = newTemp(Ity_I32);
put_gpr_w1(r1, mkexpr(result));
s390_cc_thunk_putFZ(S390_CC_OP_BFP_64_TO_INT_32, op, rounding_mode);
- return "cfdbr";
+ return "cfdbra";
}
static const HChar *
-s390_irgen_CGEBR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CGEBRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
IRTemp op = newTemp(Ity_F32);
IRTemp result = newTemp(Ity_I64);
put_gpr_dw0(r1, mkexpr(result));
s390_cc_thunk_putFZ(S390_CC_OP_BFP_32_TO_INT_64, op, rounding_mode);
- return "cgebr";
+ return "cgebra";
}
static const HChar *
-s390_irgen_CGDBR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CGDBRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
IRTemp op = newTemp(Ity_F64);
IRTemp result = newTemp(Ity_I64);
put_gpr_dw0(r1, mkexpr(result));
s390_cc_thunk_putFZ(S390_CC_OP_BFP_64_TO_INT_64, op, rounding_mode);
- return "cgdbr";
+ return "cgdbra";
}
static const HChar *
put_dpr_dw0(r1, binop(Iop_I64StoD64, mkexpr(encode_dfp_rounding_mode(m3)),
mkexpr(op2)));
}
- return (m3 == 0) ? "cdgtr" : "cdgtra";
+ return "cdgtra";
}
static const HChar *
-s390_irgen_CXGTR(UChar m3 __attribute__((unused)),
- UChar m4 __attribute__((unused)), UChar r1, UChar r2)
+s390_irgen_CXGTRA(UChar m3 __attribute__((unused)),
+ UChar m4 __attribute__((unused)), UChar r1, UChar r2)
{
if (! s390_host_has_dfp) {
emulation_failure(EmFail_S390X_DFP_insn);
assign(op2, get_gpr_dw0(r2));
put_dpr_pair(r1, unop(Iop_I64StoD128, mkexpr(op2)));
}
- return "cxgtr";
+ return "cxgtra";
}
static const HChar *
static const HChar *
s390_irgen_CFXTR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+ UChar r1, UChar r2)
{
if (! s390_host_has_dfp) {
emulation_failure(EmFail_S390X_DFP_insn);
}
static const HChar *
-s390_irgen_CGDTR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CGDTRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
if (! s390_host_has_dfp) {
emulation_failure(EmFail_S390X_DFP_insn);
put_gpr_dw0(r1, binop(Iop_D64toI64S, mkexpr(rounding_mode), mkexpr(op)));
s390_cc_thunk_putFZ(S390_CC_OP_DFP_64_TO_INT_64, op, rounding_mode);
}
- return "cgdtr";
+ return "cgdtra";
}
static const HChar *
-s390_irgen_CGXTR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CGXTRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
if (! s390_host_has_dfp) {
emulation_failure(EmFail_S390X_DFP_insn);
put_gpr_dw0(r1, binop(Iop_D128toI64S, mkexpr(rounding_mode), mkexpr(op)));
s390_cc_thunk_put1d128Z(S390_CC_OP_DFP_128_TO_INT_64, op, rounding_mode);
}
- return "cgxtr";
+ return "cgxtra";
}
static const HChar *
}
static const HChar *
-s390_irgen_CXFBR(UChar m3 __attribute__((unused)),
- UChar m4 __attribute__((unused)), UChar r1, UChar r2)
+s390_irgen_CXFBRA(UChar m3 __attribute__((unused)),
+ UChar m4 __attribute__((unused)), UChar r1, UChar r2)
{
IRTemp op2 = newTemp(Ity_I32);
assign(op2, get_gpr_w1(r2));
put_fpr_pair(r1, unop(Iop_I32StoF128, mkexpr(op2)));
- return "cxfbr";
+ return "cxfbra";
}
static const HChar *
static const HChar *
-s390_irgen_CXGBR(UChar m3 __attribute__((unused)),
- UChar m4 __attribute__((unused)), UChar r1, UChar r2)
+s390_irgen_CXGBRA(UChar m3 __attribute__((unused)),
+ UChar m4 __attribute__((unused)), UChar r1, UChar r2)
{
IRTemp op2 = newTemp(Ity_I64);
assign(op2, get_gpr_dw0(r2));
put_fpr_pair(r1, unop(Iop_I64StoF128, mkexpr(op2)));
- return "cxgbr";
+ return "cxgbra";
}
static const HChar *
}
static const HChar *
-s390_irgen_CFXBR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CFXBRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
IRTemp op = newTemp(Ity_F128);
IRTemp result = newTemp(Ity_I32);
put_gpr_w1(r1, mkexpr(result));
s390_cc_thunk_put1f128Z(S390_CC_OP_BFP_128_TO_INT_32, op, rounding_mode);
- return "cfxbr";
+ return "cfxbra";
}
static const HChar *
static const HChar *
-s390_irgen_CGXBR(UChar m3, UChar m4 __attribute__((unused)),
- UChar r1, UChar r2)
+s390_irgen_CGXBRA(UChar m3, UChar m4 __attribute__((unused)),
+ UChar r1, UChar r2)
{
IRTemp op = newTemp(Ity_F128);
IRTemp result = newTemp(Ity_I64);
put_gpr_dw0(r1, mkexpr(result));
s390_cc_thunk_put1f128Z(S390_CC_OP_BFP_128_TO_INT_64, op, rounding_mode);
- return "cgxbr";
+ return "cgxbra";
}
static const HChar *
case 0xb392: s390_format_RRF_UUFR(s390_irgen_CXLFBR, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb394: s390_format_RRF_UUFR(s390_irgen_CEFBR, RRF2_m3(ovl),
+ case 0xb394: s390_format_RRF_UUFR(s390_irgen_CEFBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb395: s390_format_RRF_UUFR(s390_irgen_CDFBR, RRF2_m3(ovl),
+ case 0xb395: s390_format_RRF_UUFR(s390_irgen_CDFBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb396: s390_format_RRF_UUFR(s390_irgen_CXFBR, RRF2_m3(ovl),
+ case 0xb396: s390_format_RRF_UUFR(s390_irgen_CXFBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb398: s390_format_RRF_UURF(s390_irgen_CFEBR, RRF2_m3(ovl),
+ case 0xb398: s390_format_RRF_UURF(s390_irgen_CFEBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb399: s390_format_RRF_UURF(s390_irgen_CFDBR, RRF2_m3(ovl),
+ case 0xb399: s390_format_RRF_UURF(s390_irgen_CFDBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb39a: s390_format_RRF_UURF(s390_irgen_CFXBR, RRF2_m3(ovl),
+ case 0xb39a: s390_format_RRF_UURF(s390_irgen_CFXBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
case 0xb39c: s390_format_RRF_UURF(s390_irgen_CLFEBR, RRF2_m3(ovl),
case 0xb3a2: s390_format_RRF_UUFR(s390_irgen_CXLGBR, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb3a4: s390_format_RRF_UUFR(s390_irgen_CEGBR, RRF2_m3(ovl),
+ case 0xb3a4: s390_format_RRF_UUFR(s390_irgen_CEGBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb3a5: s390_format_RRF_UUFR(s390_irgen_CDGBR, RRF2_m3(ovl),
+ case 0xb3a5: s390_format_RRF_UUFR(s390_irgen_CDGBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb3a6: s390_format_RRF_UUFR(s390_irgen_CXGBR, RRF2_m3(ovl),
+ case 0xb3a6: s390_format_RRF_UUFR(s390_irgen_CXGBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb3a8: s390_format_RRF_UURF(s390_irgen_CGEBR, RRF2_m3(ovl),
+ case 0xb3a8: s390_format_RRF_UURF(s390_irgen_CGEBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb3a9: s390_format_RRF_UURF(s390_irgen_CGDBR, RRF2_m3(ovl),
+ case 0xb3a9: s390_format_RRF_UURF(s390_irgen_CGDBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
- case 0xb3aa: s390_format_RRF_UURF(s390_irgen_CGXBR, RRF2_m3(ovl),
+ case 0xb3aa: s390_format_RRF_UURF(s390_irgen_CGXBRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
case 0xb3ac: s390_format_RRF_UURF(s390_irgen_CLGEBR, RRF2_m3(ovl),
RRE_r2(ovl)); goto ok;
case 0xb3df: /* FIXTR */ goto unimplemented;
case 0xb3e0: /* KDTR */ goto unimplemented;
- case 0xb3e1: s390_format_RRF_UURF(s390_irgen_CGDTR, RRF2_m3(ovl),
+ case 0xb3e1: s390_format_RRF_UURF(s390_irgen_CGDTRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
case 0xb3e2: /* CUDTR */ goto unimplemented;
case 0xb3e7: s390_format_RRE_RF(s390_irgen_ESDTR, RRE_r1(ovl),
RRE_r2(ovl)); goto ok;
case 0xb3e8: /* KXTR */ goto unimplemented;
- case 0xb3e9: s390_format_RRF_UURF(s390_irgen_CGXTR, RRF2_m3(ovl),
+ case 0xb3e9: s390_format_RRF_UURF(s390_irgen_CGXTRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
case 0xb3ea: /* CUXTR */ goto unimplemented;
case 0xb3f7: s390_format_RRF_FFRU(s390_irgen_RRDTR, RRF4_r3(ovl),
RRF4_m4(ovl), RRF4_r1(ovl),
RRF4_r2(ovl)); goto ok;
- case 0xb3f9: s390_format_RRF_UUFR(s390_irgen_CXGTR, RRF2_m3(ovl),
+ case 0xb3f9: s390_format_RRF_UUFR(s390_irgen_CXGTRA, RRF2_m3(ovl),
RRF2_m4(ovl), RRF2_r1(ovl),
RRF2_r2(ovl)); goto ok;
case 0xb3fa: /* CXUTR */ goto unimplemented;
vassert(m4 == 0);
vassert(m3 == 0 || s390_host_has_fpext);
- if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
- if (m3 == 0)
- S390_DISASM(MNM("cefbr"), FPR(r1), GPR(r2));
- else
- S390_DISASM(MNM("cefbra"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
- }
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ S390_DISASM(XMNM("cefbra", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3940000, m3, m4, r1, r2);
}
vassert(m4 == 0);
vassert(m3 == 0 || s390_host_has_fpext);
- if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
- if (m3 == 0)
- S390_DISASM(MNM("cdfbr"), FPR(r1), GPR(r2));
- else
- S390_DISASM(MNM("cdfbra"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
- }
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ S390_DISASM(XMNM("cdfbra", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3950000, m3, m4, r1, r2);
}
vassert(m4 == 0);
vassert(m3 == 0 || s390_host_has_fpext);
- if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
- if (m3 == 0)
- S390_DISASM(MNM("cxfbr"), FPR(r1), GPR(r2));
- else
- S390_DISASM(MNM("cxfbra"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
- }
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ S390_DISASM(XMNM("cxfbra", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3960000, m3, m4, r1, r2);
}
vassert(m4 == 0);
vassert(m3 == 0 || s390_host_has_fpext);
- if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
- if (m3 == 0)
- S390_DISASM(MNM("cegbr"), FPR(r1), GPR(r2));
- else
- S390_DISASM(MNM("cegbra"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
- }
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ S390_DISASM(XMNM("cegbra", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3a40000, m3, m4, r1, r2);
}
vassert(m4 == 0);
vassert(m3 == 0 || s390_host_has_fpext);
- if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
- if (m3 == 0)
- S390_DISASM(MNM("cdgbr"), FPR(r1), GPR(r2));
- else
- S390_DISASM(MNM("cdgbra"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
- }
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ S390_DISASM(XMNM("cdgbra", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3a50000, m3, m4, r1, r2);
}
vassert(m4 == 0);
vassert(m3 == 0 || s390_host_has_fpext);
- if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
- if (m3 == 0)
- S390_DISASM(MNM("cxgbr"), FPR(r1), GPR(r2));
- else
- S390_DISASM(MNM("cxgbra"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
- }
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ S390_DISASM(XMNM("cxgbra", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3a60000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("celfbr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("celfbr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3900000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cdlfbr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cdlfbr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3910000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cxlfbr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cxlfbr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3920000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("celgbr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("celgbr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3a00000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cdlgbr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cdlgbr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3a10000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cxlgbr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cxlgbr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3a20000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clfebr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clfebr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb39c0000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clfdbr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clfdbr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb39d0000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clfxbr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clfxbr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb39e0000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clgebr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clgebr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3ac0000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clgdbr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clgdbr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3ad0000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clgxbr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clgxbr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3ae0000, m3, m4, r1, r2);
}
static UChar *
-s390_emit_CFEBR(UChar *p, UChar m3, UChar r1, UChar r2)
+s390_emit_CFEBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
{
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cfebr"), GPR(r1), UINT(m3), FPR(r2));
+ S390_DISASM(XMNM("cfebra", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF3(p, 0xb3980000, m3, r1, r2);
}
static UChar *
-s390_emit_CFDBR(UChar *p, UChar m3, UChar r1, UChar r2)
+s390_emit_CFDBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
{
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cfdbr"), GPR(r1), UINT(m3), FPR(r2));
+ S390_DISASM(XMNM("cfdbra", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF3(p, 0xb3990000, m3, r1, r2);
}
static UChar *
-s390_emit_CFXBR(UChar *p, UChar m3, UChar r1, UChar r2)
+s390_emit_CFXBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
{
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cfxbr"), GPR(r1), UINT(m3), FPR(r2));
+ S390_DISASM(XMNM("cfxbra", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF3(p, 0xb39a0000, m3, r1, r2);
}
static UChar *
-s390_emit_CGEBR(UChar *p, UChar m3, UChar r1, UChar r2)
+s390_emit_CGEBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
{
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cgebr"), GPR(r1), UINT(m3), FPR(r2));
+ S390_DISASM(XMNM("cgebra", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF3(p, 0xb3a80000, m3, r1, r2);
}
static UChar *
-s390_emit_CGDBR(UChar *p, UChar m3, UChar r1, UChar r2)
+s390_emit_CGDBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
{
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cgdbr"), GPR(r1), UINT(m3), FPR(r2));
+ S390_DISASM(XMNM("cgdbra", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF3(p, 0xb3a90000, m3, r1, r2);
}
static UChar *
-s390_emit_CGXBR(UChar *p, UChar m3, UChar r1, UChar r2)
+s390_emit_CGXBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
{
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cgxbr"), GPR(r1), UINT(m3), FPR(r2));
+ S390_DISASM(XMNM("cgxbra", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF3(p, 0xb3aa0000, m3, r1, r2);
}
vassert(m4 == 0);
vassert(m3 == 0 || s390_host_has_fpext);
- if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
- if (m3 == 0)
- S390_DISASM(MNM("cdgtr"), FPR(r1), GPR(r2));
- else
- S390_DISASM(MNM("cdgtra"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
- }
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ S390_DISASM(XMNM("cdgtra", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3f10000, m3, m4, r1, r2);
}
static UChar *
-s390_emit_CXGTR(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
+s390_emit_CXGTRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
{
vassert(s390_host_has_dfp);
vassert(m4 == 0);
vassert(m3 == 0);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cxgtr"), FPR(r1), GPR(r2));
+ S390_DISASM(XMNM("cxgtra", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3f90000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cdftr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cdftr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb9510000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cxftr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cxftr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb9590000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cdlftr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cdlftr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb9530000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cxlftr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cxlftr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb95b0000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cdlgtr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cdlgtr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb9520000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cxlgtr"), FPR(r1), UINT(m3), GPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cxlgtr", fp_convf_disasm), FPR(r1), MASK(m3), GPR(r2), MASK(m4));
return emit_RRF2(p, 0xb95a0000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cfdtr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cfdtr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb9410000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cfxtr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("cfxtr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb9490000, m3, m4, r1, r2);
}
static UChar *
-s390_emit_CGDTR(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
+s390_emit_CGDTRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
{
vassert(s390_host_has_dfp);
vassert(m4 == 0);
vassert(s390_host_has_fpext || m3 < 1 || m3 > 7);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cgdtr"), GPR(r1), UINT(m3), FPR(r2));
+ S390_DISASM(XMNM("cgdtra", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3e10000, m3, m4, r1, r2);
}
static UChar *
-s390_emit_CGXTR(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
+s390_emit_CGXTRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2)
{
vassert(s390_host_has_dfp);
vassert(m4 == 0);
vassert(s390_host_has_fpext || m3 < 1 || m3 > 7);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("cgxtr"), GPR(r1), UINT(m3), FPR(r2));
+ S390_DISASM(XMNM("cgxtra", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb3e90000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clfdtr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clfdtr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb9430000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clfxtr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clfxtr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb94b0000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clgdtr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clgdtr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb9420000, m3, m4, r1, r2);
}
vassert(s390_host_has_fpext);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(MNM("clgxtr"), GPR(r1), UINT(m3), FPR(r2), UINT(m4));
+ S390_DISASM(XMNM("clgxtr", fp_convt_disasm), GPR(r1), MASK(m3), FPR(r2), MASK(m4));
return emit_RRF2(p, 0xb94a0000, m3, m4, r1, r2);
}
switch (insn->variant.bfp_convert.tag) {
/* Convert to fixed */
- case S390_BFP_F32_TO_I32: return s390_emit_CFEBR(buf, m3, r1, r2);
- case S390_BFP_F64_TO_I32: return s390_emit_CFDBR(buf, m3, r1, r2);
- case S390_BFP_F128_TO_I32: return s390_emit_CFXBR(buf, m3, r1, r2);
- case S390_BFP_F32_TO_I64: return s390_emit_CGEBR(buf, m3, r1, r2);
- case S390_BFP_F64_TO_I64: return s390_emit_CGDBR(buf, m3, r1, r2);
- case S390_BFP_F128_TO_I64: return s390_emit_CGXBR(buf, m3, r1, r2);
+ case S390_BFP_F32_TO_I32: return s390_emit_CFEBRA(buf, m3, m4, r1, r2);
+ case S390_BFP_F64_TO_I32: return s390_emit_CFDBRA(buf, m3, m4, r1, r2);
+ case S390_BFP_F128_TO_I32: return s390_emit_CFXBRA(buf, m3, m4, r1, r2);
+ case S390_BFP_F32_TO_I64: return s390_emit_CGEBRA(buf, m3, m4, r1, r2);
+ case S390_BFP_F64_TO_I64: return s390_emit_CGDBRA(buf, m3, m4, r1, r2);
+ case S390_BFP_F128_TO_I64: return s390_emit_CGXBRA(buf, m3, m4, r1, r2);
/* Convert to logical */
case S390_BFP_F32_TO_U32: return s390_emit_CLFEBR(buf, m3, m4, r1, r2);
/* Convert to fixed */
case S390_DFP_D64_TO_I32: return s390_emit_CFDTR(buf, m3, m4, r1, r2);
case S390_DFP_D128_TO_I32: return s390_emit_CFXTR(buf, m3, m4, r1, r2);
- case S390_DFP_D64_TO_I64: return s390_emit_CGDTR(buf, m3, m4, r1, r2);
- case S390_DFP_D128_TO_I64: return s390_emit_CGXTR(buf, m3, m4, r1, r2);
+ case S390_DFP_D64_TO_I64: return s390_emit_CGDTRA(buf, m3, m4, r1, r2);
+ case S390_DFP_D128_TO_I64: return s390_emit_CGXTRA(buf, m3, m4, r1, r2);
/* Convert to logical */
case S390_DFP_D64_TO_U32: return s390_emit_CLFDTR(buf, m3, m4, r1, r2);
case S390_DFP_I32_TO_D64: return s390_emit_CDFTR(buf, 0, m4, r1, r2);
case S390_DFP_I32_TO_D128: return s390_emit_CXFTR(buf, 0, m4, r1, r2);
case S390_DFP_I64_TO_D64: return s390_emit_CDGTRA(buf, m3, m4, r1, r2);
- case S390_DFP_I64_TO_D128: return s390_emit_CXGTR(buf, 0, m4, r1, r2);
+ case S390_DFP_I64_TO_D128: return s390_emit_CXGTRA(buf, 0, m4, r1, r2);
/* Convert from logical */
case S390_DFP_U32_TO_D64: return s390_emit_CDLFTR(buf, m3, m4, r1, r2);