}
static const HChar *
-s390_irgen_VME(UChar v1, UChar v2, UChar v3, UChar m4)
+s390_irgen_VMO(UChar v1, UChar v2, UChar v3, UChar m4)
{
- s390_insn_assert("vme", m4 <= 2);
+ s390_insn_assert("vmo", m4 <= 2);
const IROp ops[] = { Iop_MullEven8Sx16, Iop_MullEven16Sx8, Iop_MullEven32Sx4 };
put_vr_qw(v1, binop(ops[m4], get_vr_qw(v2), get_vr_qw(v3)));
- return "vme";
+ return "vmo";
}
static const HChar *
-s390_irgen_VMLE(UChar v1, UChar v2, UChar v3, UChar m4)
+s390_irgen_VMLO(UChar v1, UChar v2, UChar v3, UChar m4)
{
- s390_insn_assert("vmle", m4 <= 2);
+ s390_insn_assert("vmlo", m4 <= 2);
const IROp ops[] = { Iop_MullEven8Ux16, Iop_MullEven16Ux8, Iop_MullEven32Ux4 };
put_vr_qw(v1, binop(ops[m4], get_vr_qw(v2), get_vr_qw(v3)));
- return "vmle";
+ return "vmlo";
}
static const HChar *
}
static const HChar *
-s390_irgen_VMO(UChar v1, UChar v2, UChar v3, UChar m4)
+s390_irgen_VME(UChar v1, UChar v2, UChar v3, UChar m4)
{
- s390_insn_assert("vmo", m4 <= 2);
+ s390_insn_assert("vme", m4 <= 2);
const IROp ops[] = { Iop_MullEven8Sx16, Iop_MullEven16Sx8,
Iop_MullEven32Sx4 };
UChar shifts[] = { 8, 16, 32 };
IRExpr* result = binop(ops[m4],
- binop(Iop_ShlV128, get_vr_qw(v2), mkU8(shifts[m4])),
- binop(Iop_ShlV128, get_vr_qw(v3), mkU8(shifts[m4]))
+ binop(Iop_ShrV128, get_vr_qw(v2), mkU8(shifts[m4])),
+ binop(Iop_ShrV128, get_vr_qw(v3), mkU8(shifts[m4]))
);
put_vr_qw(v1, result);
- return "vmo";
+ return "vme";
}
static const HChar *
-s390_irgen_VMLO(UChar v1, UChar v2, UChar v3, UChar m4)
+s390_irgen_VMLE(UChar v1, UChar v2, UChar v3, UChar m4)
{
- s390_insn_assert("vmlo", m4 <= 2);
+ s390_insn_assert("vmle", m4 <= 2);
const IROp ops[] = { Iop_MullEven8Ux16, Iop_MullEven16Ux8,
Iop_MullEven32Ux4 };
UChar shifts[] = { 8, 16, 32 };
IRExpr* result = binop(ops[m4],
- binop(Iop_ShlV128, get_vr_qw(v2), mkU8(shifts[m4])),
- binop(Iop_ShlV128, get_vr_qw(v3), mkU8(shifts[m4]))
+ binop(Iop_ShrV128, get_vr_qw(v2), mkU8(shifts[m4])),
+ binop(Iop_ShrV128, get_vr_qw(v3), mkU8(shifts[m4]))
);
put_vr_qw(v1, result);
- return "vmlo";
+ return "vmle";
}
static const HChar *
-s390_irgen_VMAE(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
+s390_irgen_VMAO(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
{
- s390_insn_assert("vmae", m5 <= 2);
+ s390_insn_assert("vmao", m5 <= 2);
const IROp mul_ops[] = { Iop_MullEven8Sx16, Iop_MullEven16Sx8,
Iop_MullEven32Sx4 };
IRExpr* result = binop(add_ops[m5], mul_result, get_vr_qw(v4));
put_vr_qw(v1, result);
- return "vmae";
+ return "vmao";
}
static const HChar *
-s390_irgen_VMALE(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
+s390_irgen_VMALO(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
{
- s390_insn_assert("vmale", m5 <= 2);
+ s390_insn_assert("vmalo", m5 <= 2);
const IROp mul_ops[] = { Iop_MullEven8Ux16, Iop_MullEven16Ux8,
Iop_MullEven32Ux4 };
IRExpr* result = binop(add_ops[m5], mul_result, get_vr_qw(v4));
put_vr_qw(v1, result);
- return "vmale";
+ return "vmalo";
}
static const HChar *
-s390_irgen_VMAO(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
+s390_irgen_VMAE(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
{
- s390_insn_assert("vmao", m5 <= 2);
+ s390_insn_assert("vmae", m5 <= 2);
const IROp mul_ops[] = { Iop_MullEven8Sx16, Iop_MullEven16Sx8,
Iop_MullEven32Sx4 };
IRExpr* mul_result =
binop(mul_ops[m5],
- binop(Iop_ShlV128, get_vr_qw(v2), mkU8(shifts[m5])),
- binop(Iop_ShlV128, get_vr_qw(v3), mkU8(shifts[m5])));
+ binop(Iop_ShrV128, get_vr_qw(v2), mkU8(shifts[m5])),
+ binop(Iop_ShrV128, get_vr_qw(v3), mkU8(shifts[m5])));
IRExpr* result = binop(add_ops[m5], mul_result, get_vr_qw(v4));
put_vr_qw(v1, result);
- return "vmao";
+ return "vmae";
}
static const HChar *
-s390_irgen_VMALO(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
+s390_irgen_VMALE(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
{
- s390_insn_assert("vmalo", m5 <= 2);
+ s390_insn_assert("vmale", m5 <= 2);
const IROp mul_ops[] = { Iop_MullEven8Ux16, Iop_MullEven16Ux8,
Iop_MullEven32Ux4 };
UChar shifts[] = { 8, 16, 32 };
IRExpr* mul_result = binop(mul_ops[m5],
- binop(Iop_ShlV128,
+ binop(Iop_ShrV128,
get_vr_qw(v2), mkU8(shifts[m5])),
- binop(Iop_ShlV128,
+ binop(Iop_ShrV128,
get_vr_qw(v3), mkU8(shifts[m5]))
);
IRExpr* result = binop(add_ops[m5], mul_result, get_vr_qw(v4));
put_vr_qw(v1, result);
- return "vmalo";
+ return "vmale";
}
static const HChar *
}
static UChar *
-s390_emit_VME(UChar *p, UChar v1, UChar v2, UChar v3, UChar m4)
+s390_emit_VMO(UChar *p, UChar v1, UChar v2, UChar v3, UChar m4)
{
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(XMNM("vme", va_like_disasm), VR(v1), VR(v2), VR(v3), MASK(m4));
+ S390_DISASM(XMNM("vmo", va_like_disasm), VR(v1), VR(v2), VR(v3), MASK(m4));
- return emit_VRR_VVVM(p, 0xE700000000a6ULL, v1, v2, v3, m4);
+ return emit_VRR_VVVM(p, 0xE700000000a7ULL, v1, v2, v3, m4);
}
static UChar *
-s390_emit_VMLE(UChar *p, UChar v1, UChar v2, UChar v3, UChar m4)
+s390_emit_VMLO(UChar *p, UChar v1, UChar v2, UChar v3, UChar m4)
{
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
- S390_DISASM(XMNM("vmle", va_like_disasm), VR(v1), VR(v2), VR(v3), MASK(m4));
+ S390_DISASM(XMNM("vmlo", va_like_disasm), VR(v1), VR(v2), VR(v3), MASK(m4));
- return emit_VRR_VVVM(p, 0xE700000000a4ULL, v1, v2, v3, m4);
+ return emit_VRR_VVVM(p, 0xE700000000a5ULL, v1, v2, v3, m4);
}
static UChar *
case S390_VEC_INT_MUL_HIGHS: op = "v-vintmulhis"; break;
case S390_VEC_INT_MUL_HIGHU: op = "v-vintmulhiu"; break;
case S390_VEC_INT_MUL_LOW: op = "v-vintmullo"; break;
- case S390_VEC_INT_MUL_EVENS: op = "v-vintmulevens"; break;
- case S390_VEC_INT_MUL_EVENU: op = "v-vintmulevenu"; break;
+ case S390_VEC_INT_MUL_ODDS: op = "v-vintmulodds"; break;
+ case S390_VEC_INT_MUL_ODDU: op = "v-vintmuloddu"; break;
case S390_VEC_ELEM_SHL_V: op = "v-velemshl"; break;
case S390_VEC_ELEM_SHRA_V: op = "v-vshrav"; break;
case S390_VEC_ELEM_SHRL_V: op = "v-vshrlv"; break;
return s390_emit_VMLH(buf, v1, v2, v3, s390_getM_from_size(size));
case S390_VEC_INT_MUL_LOW:
return s390_emit_VML(buf, v1, v2, v3, s390_getM_from_size(size));
- case S390_VEC_INT_MUL_EVENS:
- return s390_emit_VME(buf, v1, v2, v3, s390_getM_from_size(size));
- case S390_VEC_INT_MUL_EVENU:
- return s390_emit_VMLE(buf, v1, v2, v3, s390_getM_from_size(size));
+ case S390_VEC_INT_MUL_ODDS:
+ return s390_emit_VMO(buf, v1, v2, v3, s390_getM_from_size(size));
+ case S390_VEC_INT_MUL_ODDU:
+ return s390_emit_VMLO(buf, v1, v2, v3, s390_getM_from_size(size));
case S390_VEC_ELEM_SHL_V:
return s390_emit_VESLV(buf, v1, v2, v3, s390_getM_from_size(size));
case S390_VEC_ELEM_SHRA_V: