return emit_VRR_VVV(p, 0xE7000000006aULL, v1, v2, v3);
}
+static UChar *
+s390_emit_VOC(UChar *p, UChar v1, UChar v2, UChar v3)
+{
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
+ s390_disasm(ENC4(MNM, VR, VR, VR), "voc", v1, v2, v3);
+
+ return emit_VRR_VVV(p, 0xE7000000006fULL, v1, v2, v3);
+}
+
static UChar *
s390_emit_VX(UChar *p, UChar v1, UChar v2, UChar v3)
{
case S390_VEC_PACK_SATURU: op = "v-vpacksaturu"; break;
case S390_VEC_COMPARE_EQUAL: op = "v-vcmpeq"; break;
case S390_VEC_OR: op = "v-vor"; break;
+ case S390_VEC_ORC: op = "v-vorc"; break;
case S390_VEC_XOR: op = "v-vxor"; break;
case S390_VEC_AND: op = "v-vand"; break;
case S390_VEC_MERGEL: op = "v-vmergel"; break;
return s390_emit_VCEQ(buf, v1, v2, v3, s390_getM_from_size(size));
case S390_VEC_OR:
return s390_emit_VO(buf, v1, v2, v3);
+ case S390_VEC_ORC:
+ return s390_emit_VOC(buf, v1, v2, v3);
case S390_VEC_XOR:
return s390_emit_VX(buf, v1, v2, v3);
case S390_VEC_AND:
case Iop_OrV128:
size = 16;
vec_binop = S390_VEC_OR;
+ if (arg1->tag == Iex_Unop && arg1->Iex.Unop.op == Iop_NotV128) {
+ IRExpr* orig_arg1 = arg1;
+ arg1 = arg2;
+ arg2 = orig_arg1->Iex.Unop.arg;
+ vec_binop = S390_VEC_ORC;
+ } else if (arg2->tag == Iex_Unop && arg2->Iex.Unop.op == Iop_NotV128) {
+ arg2 = arg2->Iex.Unop.arg;
+ vec_binop = S390_VEC_ORC;
+ }
goto Iop_VV_wrk;
case Iop_XorV128: