Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/cranelift/assembler-x64/meta/src/instructions/pack.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
// Convert packed signed integers into smaller signed integers using
8
// saturation to handle overflow (e.g., `0x7F` or `0x80` when converting
9
// from word to byte).
10
inst("packsswb", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x63]), (_64b | compat) & sse2).alt(avx, "vpacksswb_b"),
11
inst("packssdw", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x6B]), (_64b | compat) & sse2).alt(avx, "vpackssdw_b"),
12
inst("vpacksswb", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x63), (_64b | compat) & avx),
13
inst("vpackssdw", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x6B), (_64b | compat) & avx),
14
// Convert packed signed integers into smaller unsigned integers using
15
// unsigned saturation to handle overflow (e.g., `0xFF` or `0x00` when
16
// converting from word to byte).
17
inst("packuswb", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x67]), (_64b | compat) & sse2).alt(avx, "vpackuswb_b"),
18
inst("packusdw", fmt("A", [rw(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x38, 0x2B]), (_64b | compat) & sse41).alt(avx, "vpackusdw_b"),
19
inst("vpackuswb", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f().op(0x67), (_64b | compat) & avx),
20
inst("vpackusdw", fmt("B", [w(xmm1), r(xmm2), r(xmm_m128)]), vex(L128)._66()._0f38().op(0x2B), (_64b | compat) & avx),
21
]
22
}
23
24