Provide spec-compliant legalization for SIMD floating point min/max
This commit is contained in:
@@ -1596,8 +1596,6 @@ fn define_simd(
|
||||
let fdiv = shared.by_name("fdiv");
|
||||
let fill = shared.by_name("fill");
|
||||
let fill_nop = shared.by_name("fill_nop");
|
||||
let fmax = shared.by_name("fmax");
|
||||
let fmin = shared.by_name("fmin");
|
||||
let fmul = shared.by_name("fmul");
|
||||
let fsub = shared.by_name("fsub");
|
||||
let iadd = shared.by_name("iadd");
|
||||
@@ -1637,6 +1635,8 @@ fn define_simd(
|
||||
let vselect = shared.by_name("vselect");
|
||||
let x86_cvtt2si = x86.by_name("x86_cvtt2si");
|
||||
let x86_insertps = x86.by_name("x86_insertps");
|
||||
let x86_fmax = x86.by_name("x86_fmax");
|
||||
let x86_fmin = x86.by_name("x86_fmin");
|
||||
let x86_movlhps = x86.by_name("x86_movlhps");
|
||||
let x86_movsd = x86.by_name("x86_movsd");
|
||||
let x86_packss = x86.by_name("x86_packss");
|
||||
@@ -2276,10 +2276,10 @@ fn define_simd(
|
||||
(F64, fmul, &MULPD[..]),
|
||||
(F32, fdiv, &DIVPS[..]),
|
||||
(F64, fdiv, &DIVPD[..]),
|
||||
(F32, fmin, &MINPS[..]),
|
||||
(F64, fmin, &MINPD[..]),
|
||||
(F32, fmax, &MAXPS[..]),
|
||||
(F64, fmax, &MAXPD[..]),
|
||||
(F32, x86_fmin, &MINPS[..]),
|
||||
(F64, x86_fmin, &MINPD[..]),
|
||||
(F32, x86_fmax, &MAXPS[..]),
|
||||
(F64, x86_fmax, &MAXPD[..]),
|
||||
] {
|
||||
let inst = inst.bind(vector(*ty, sse_vector_size));
|
||||
e.enc_both_inferred(inst, rec_fa.opcodes(opcodes));
|
||||
|
||||
@@ -379,10 +379,12 @@ fn define_simd(
|
||||
let bnot = insts.by_name("bnot");
|
||||
let bxor = insts.by_name("bxor");
|
||||
let extractlane = insts.by_name("extractlane");
|
||||
let fabs = insts.by_name("fabs");
|
||||
let fcmp = insts.by_name("fcmp");
|
||||
let fcvt_from_uint = insts.by_name("fcvt_from_uint");
|
||||
let fcvt_to_sint_sat = insts.by_name("fcvt_to_sint_sat");
|
||||
let fabs = insts.by_name("fabs");
|
||||
let fmax = insts.by_name("fmax");
|
||||
let fmin = insts.by_name("fmin");
|
||||
let fneg = insts.by_name("fneg");
|
||||
let iadd_imm = insts.by_name("iadd_imm");
|
||||
let icmp = insts.by_name("icmp");
|
||||
@@ -790,6 +792,8 @@ fn define_simd(
|
||||
narrow.custom_legalize(ushr, "convert_ushr");
|
||||
narrow.custom_legalize(ishl, "convert_ishl");
|
||||
narrow.custom_legalize(fcvt_to_sint_sat, "expand_fcvt_to_sint_sat_vector");
|
||||
narrow.custom_legalize(fmin, "expand_minmax_vector");
|
||||
narrow.custom_legalize(fmax, "expand_minmax_vector");
|
||||
|
||||
narrow_avx.custom_legalize(imul, "convert_i64x2_imul");
|
||||
narrow_avx.custom_legalize(fcvt_from_uint, "expand_fcvt_from_uint_vector");
|
||||
|
||||
Reference in New Issue
Block a user