Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/cranelift/assembler-x64/meta/src/instructions/min.rs
1693 views
1
use crate::dsl::{Feature::*, Inst, Length::*, Location::*};
2
use crate::dsl::{align, fmt, inst, r, rex, rw, vex, w};
3
4
#[rustfmt::skip] // Keeps instructions on a single line.
5
pub fn list() -> Vec<Inst> {
6
vec![
7
// Floating-point minimum. Note, this has some tricky NaN and sign bit
8
// behavior; see `max.rs`.
9
inst("minss", fmt("A", [rw(xmm1), r(xmm_m32)]), rex([0xF3, 0x0F, 0x5D]).r(), (_64b | compat) & sse).alt(avx, "vminss_b"),
10
inst("minsd", fmt("A", [rw(xmm1), r(xmm_m64)]), rex([0xF2, 0x0F, 0x5D]).r(), (_64b | compat) & sse2).alt(avx, "vminsd_b"),
11
inst("minps", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x0F, 0x5D]).r(), (_64b | compat) & sse).alt(avx, "vminps_b"),
12
inst("minpd", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x5D]).r(), (_64b | compat) & sse2).alt(avx, "vminpd_b"),
13
inst("vminss", fmt("B", [w(xmm1), r(xmm2), r(xmm_m32)]), vex(LIG)._f3()._0f().op(0x5D).r(), (_64b | compat) & avx),
14
inst("vminsd", fmt("B", [w(xmm1), r(xmm2), r(xmm_m64)]), vex(LIG)._f2()._0f().op(0x5D).r(), (_64b | compat) & avx),
15
inst("vminps", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._0f().op(0x5D).r(), (_64b | compat) & avx),
16
inst("vminpd", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x5D).r(), (_64b | compat) & avx),
17
// Packed integer minimum.
18
inst("pminsb", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x38, 0x38]).r(), (_64b | compat) & sse41).alt(avx, "vpminsb_b"),
19
inst("pminsw", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0xEA]).r(), (_64b | compat) & sse2).alt(avx, "vpminsw_b"),
20
inst("pminsd", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x38, 0x39]).r(), (_64b | compat) & sse41).alt(avx, "vpminsd_b"),
21
inst("pminub", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0xDA]).r(), (_64b | compat) & sse2).alt(avx, "vpminub_b"),
22
inst("pminuw", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x38, 0x3A]).r(), (_64b | compat) & sse41).alt(avx, "vpminuw_b"),
23
inst("pminud", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x38, 0x3B]).r(), (_64b | compat) & sse41).alt(avx, "vpminud_b"),
24
inst("vpminsb", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f38().op(0x38).r(), (_64b | compat) & avx),
25
inst("vpminsw", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0xEA).r(), (_64b | compat) & avx),
26
inst("vpminsd", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f38().op(0x39).r(), (_64b | compat) & avx),
27
inst("vpminub", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0xDA).r(), (_64b | compat) & avx),
28
inst("vpminuw", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f38().op(0x3A).r(), (_64b | compat) & avx),
29
inst("vpminud", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f38().op(0x3B).r(), (_64b | compat) & avx),
30
]
31
}
32
33