}
static const HChar *
-s390_irgen_RISBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5)
+s390_irgen_RISBGx(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5,
+ Bool set_cc)
{
UChar from;
UChar to;
put_gpr_dw0(r1, binop(Iop_And64, mkexpr(op2), mkU64(mask)));
}
assign(result, get_gpr_dw0(r1));
- s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, result);
+ if (set_cc) {
+ s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, result);
+ return "risbg";
+ }
+
+ return "risbgn";
+}
+
+static const HChar *
+s390_irgen_RISBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5)
+{
+ return s390_irgen_RISBGx(r1, r2, i3, i4, i5, True);
+}
- return "risbg";
+static const HChar *
+s390_irgen_RISBGN(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5)
+{
+ return s390_irgen_RISBGx(r1, r2, i3, i4, i5, False);
}
static const HChar *
ovl.fmt.RIE_RRUUU.i4,
ovl.fmt.RIE_RRUUU.i5);
goto ok;
- case 0xec0000000059ULL: /* RISBGN */ goto unimplemented;
+ case 0xec0000000059ULL: s390_format_RIE_RRUUU(s390_irgen_RISBGN,
+ ovl.fmt.RIE_RRUUU.r1,
+ ovl.fmt.RIE_RRUUU.r2,
+ ovl.fmt.RIE_RRUUU.i3,
+ ovl.fmt.RIE_RRUUU.i4,
+ ovl.fmt.RIE_RRUUU.i5);
+ goto ok;
case 0xec000000005dULL: /* RISBHG */ goto unimplemented;
case 0xec0000000064ULL: s390_format_RIE_RRPU(s390_irgen_CGRJ,
ovl.fmt.RIE_RRPU.r1,