Path: blob/main/cranelift/assembler-x64/meta/src/instructions/cvt.rs
1693 views
use crate::dsl::{Customization::*, Feature::*, Inst, Length::*, Location::*, TupleType::*};1use crate::dsl::{align, evex, fmt, inst, r, rex, rw, vex, w};23#[rustfmt::skip] // Keeps instructions on a single line.4pub fn list() -> Vec<Inst> {5vec![6// From 32-bit floating point.7inst("cvtps2pd", fmt("A", [w(xmm1), r(xmm_m64)]), rex([0x0F, 0x5A]).r(), (_64b | compat) & sse2),8inst("cvttps2dq", fmt("A", [w(xmm1), r(align(xmm_m128))]), rex([0xF3, 0x0F, 0x5B]).r(), (_64b | compat) & sse2),9inst("cvtss2sd", fmt("A", [rw(xmm1), r(xmm_m32)]), rex([0xF3, 0x0F, 0x5A]).r(), (_64b | compat) & sse2),10inst("cvtss2si", fmt("A", [w(r32), r(xmm_m32)]), rex([0xF3, 0x0F, 0x2D]).r(), (_64b | compat) & sse),11inst("cvtss2si", fmt("AQ", [w(r64), r(xmm_m32)]), rex([0xF3, 0x0F, 0x2D]).w().r(), _64b & sse),12inst("cvttss2si", fmt("A", [w(r32), r(xmm_m32)]), rex([0xF3, 0x0F, 0x2C]).r(), (_64b | compat) & sse),13inst("cvttss2si", fmt("AQ", [w(r64), r(xmm_m32)]), rex([0xF3, 0x0F, 0x2C]).w().r(), _64b & sse),1415inst("vcvtps2pd", fmt("A", [w(xmm1), r(xmm_m64)]), vex(L128)._0f().op(0x5A).r(), (_64b | compat) & avx),16inst("vcvttps2dq", fmt("A", [w(xmm1), r(xmm_m128)]), vex(L128)._f3()._0f().op(0x5B).r(), (_64b | compat) & avx),17inst("vcvtss2sd", fmt("B", [w(xmm1), r(xmm2), r(xmm_m32)]), vex(LIG)._f3()._0f().op(0x5A).r(), (_64b | compat) & avx),18inst("vcvtss2si", fmt("A", [w(r32), r(xmm_m32)]), vex(LIG)._f3()._0f().w0().op(0x2D).r(), (_64b | compat) & avx),19inst("vcvtss2si", fmt("AQ", [w(r64), r(xmm_m32)]), vex(LIG)._f3()._0f().w1().op(0x2D).r(), _64b & avx),20inst("vcvttss2si", fmt("A", [w(r32), r(xmm_m32)]), vex(LIG)._f3()._0f().w0().op(0x2C).r(), (_64b | compat) & avx),21inst("vcvttss2si", fmt("AQ", [w(r64), r(xmm_m32)]), vex(LIG)._f3()._0f().w1().op(0x2C).r(), _64b & avx),2223// From 64-bit floating point.24inst("cvtpd2ps", fmt("A", [w(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0x5A]).r(), (_64b | compat) & sse2),25inst("cvttpd2dq", fmt("A", [w(xmm1), r(align(xmm_m128))]), rex([0x66, 0x0F, 0xE6]).r(), (_64b | compat) & sse2),26inst("cvtsd2ss", fmt("A", [rw(xmm1), r(xmm_m64)]), rex([0xF2, 0x0F, 0x5A]).r(), (_64b | compat) & sse2),27inst("cvtsd2si", fmt("A", [w(r32), r(xmm_m64)]), rex([0xF2, 0x0F, 0x2D]).r(), (_64b | compat) & sse2),28inst("cvtsd2si", fmt("AQ", [w(r64), r(xmm_m64)]), rex([0xF2, 0x0F, 0x2D]).w().r(), _64b & sse2),29inst("cvttsd2si", fmt("A", [w(r32), r(xmm_m64)]), rex([0xF2, 0x0F, 0x2C]).r(), (_64b | compat) & sse2),30inst("cvttsd2si", fmt("AQ", [w(r64), r(xmm_m64)]), rex([0xF2, 0x0F, 0x2C]).w().r(), _64b & sse2),3132inst("vcvtpd2ps", fmt("A", [w(xmm1), r(xmm_m128)]), vex(L128)._66()._0f().op(0x5A).r(), (_64b | compat) & avx).custom(Mnemonic),33inst("vcvttpd2dq", fmt("A", [w(xmm1), r(xmm_m128)]), vex(L128)._66()._0f().op(0xE6).r(), (_64b | compat) & avx).custom(Mnemonic),34inst("vcvtsd2ss", fmt("B", [w(xmm1), r(xmm2), r(xmm_m64)]), vex(LIG)._f2()._0f().op(0x5A).r(), (_64b | compat) & avx),35inst("vcvtsd2si", fmt("A", [w(r32), r(xmm_m64)]), vex(LIG)._f2()._0f().w0().op(0x2D).r(), (_64b | compat) & avx),36inst("vcvtsd2si", fmt("AQ", [w(r64), r(xmm_m64)]), vex(LIG)._f2()._0f().w1().op(0x2D).r(), _64b & avx),37inst("vcvttsd2si", fmt("A", [w(r32), r(xmm_m64)]), vex(LIG)._f2()._0f().w0().op(0x2C).r(), (_64b | compat) & avx),38inst("vcvttsd2si", fmt("AQ", [w(r64), r(xmm_m64)]), vex(LIG)._f2()._0f().w1().op(0x2C).r(), _64b & avx),3940// From signed 32-bit integer.41inst("cvtdq2ps", fmt("A", [w(xmm1), r(align(xmm_m128))]), rex([0x0F, 0x5B]).r(), (_64b | compat) & sse2),42inst("cvtdq2pd", fmt("A", [w(xmm1), r(xmm_m64)]), rex([0xF3, 0x0F, 0xE6]).r(), (_64b | compat) & sse2),43inst("cvtsi2ssl", fmt("A", [rw(xmm1), r(rm32)]), rex([0xF3, 0x0F, 0x2A]).r(), (_64b | compat) & sse),44inst("cvtsi2ssq", fmt("A", [rw(xmm1), r(rm64)]), rex([0xF3, 0x0F, 0x2A]).w().r(), _64b & sse),45inst("cvtsi2sdl", fmt("A", [rw(xmm1), r(rm32)]), rex([0xF2, 0x0F, 0x2A]).r(), (_64b | compat) & sse2),46inst("cvtsi2sdq", fmt("A", [rw(xmm1), r(rm64)]), rex([0xF2, 0x0F, 0x2A]).w().r(), _64b & sse2),4748inst("vcvtdq2pd", fmt("A", [w(xmm1), r(xmm_m64)]), vex(L128)._f3()._0f().op(0xE6).r(), (_64b | compat) & avx),49inst("vcvtdq2ps", fmt("A", [w(xmm1), r(xmm_m128)]), vex(L128)._0f().op(0x5B).r(), (_64b | compat) & avx),50inst("vcvtsi2sdl", fmt("B", [w(xmm1), r(xmm2), r(rm32)]), vex(LIG)._f2()._0f().w0().op(0x2A).r(), (_64b | compat) & avx),51inst("vcvtsi2sdq", fmt("B", [w(xmm1), r(xmm2), r(rm64)]), vex(LIG)._f2()._0f().w1().op(0x2A).r(), _64b & avx),52inst("vcvtsi2ssl", fmt("B", [w(xmm1), r(xmm2), r(rm32)]), vex(LIG)._f3()._0f().w0().op(0x2A).r(), (_64b | compat) & avx),53inst("vcvtsi2ssq", fmt("B", [w(xmm1), r(xmm2), r(rm64)]), vex(LIG)._f3()._0f().w1().op(0x2A).r(), _64b & avx),5455// Currently omitted as Cranelift doesn't need them but could be added56// in the future:57//58// * cvtpd2dq59// * cvtpd2pi60// * cvtpi2pd61// * cvtpi2ps62// * cvtps2dq63// * cvtps2pi64// * cvttpd2pi65// * cvttps2pi6667inst("vcvtudq2ps", fmt("A", [w(xmm1), r(xmm_m128)]), evex(L128, Full)._f2()._0f().w0().op(0x7A).r(), _64b | avx512vl | avx512f),68]69}707172