Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/cranelift/assembler-x64/meta/src/instructions/unpack.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
// Unpack floating-point.
8
inst("unpcklps", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x0F, 0x14]).r(), (_64b | compat) & sse).alt(avx, "vunpcklps_b"),
9
inst("unpcklpd", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x14]).r(), (_64b | compat) & sse2).alt(avx, "vunpcklpd_b"),
10
inst("unpckhps", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x0F, 0x15]).r(), (_64b | compat) & sse).alt(avx, "vunpckhps_b"),
11
inst("vunpcklps", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._0f().op(0x14).r(), (_64b | compat) & avx),
12
inst("vunpcklpd", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x14).r(), (_64b | compat) & avx),
13
inst("vunpckhps", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._0f().op(0x15).r(), (_64b | compat) & avx),
14
// Unpack packed integers.
15
inst("punpckhbw", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x68]).r(), (_64b | compat) & sse2).alt(avx, "vpunpckhbw_b"),
16
inst("punpckhwd", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x69]).r(), (_64b | compat) & sse2).alt(avx, "vpunpckhwd_b"),
17
inst("punpckhdq", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x6A]).r(), (_64b | compat) & sse2).alt(avx, "vpunpckhdq_b"),
18
inst("punpckhqdq", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x6D]).r(), (_64b | compat) & sse2).alt(avx, "vpunpckhqdq_b"),
19
inst("punpcklwd", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x61]).r(), (_64b | compat) & sse2).alt(avx, "vpunpcklwd_b"),
20
inst("punpcklbw", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x60]).r(), (_64b | compat) & sse2).alt(avx, "vpunpcklbw_b"),
21
inst("punpckldq", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x62]).r(), (_64b | compat) & sse2).alt(avx, "vpunpckldq_b"),
22
inst("punpcklqdq", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x6C]).r(), (_64b | compat) & sse2).alt(avx, "vpunpcklqdq_b"),
23
inst("vpunpckhbw", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x68).r(), (_64b | compat) & avx),
24
inst("vpunpckhwd", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x69).r(), (_64b | compat) & avx),
25
inst("vpunpckhdq", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x6A).r(), (_64b | compat) & avx),
26
inst("vpunpckhqdq", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x6D).r(), (_64b | compat) & avx),
27
inst("vpunpcklwd", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x61).r(), (_64b | compat) & avx),
28
inst("vpunpcklbw", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x60).r(), (_64b | compat) & avx),
29
inst("vpunpckldq", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x62).r(), (_64b | compat) & avx),
30
inst("vpunpcklqdq", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x6C).r(), (_64b | compat) & avx),
31
]
32
}
33
34