Skip to main content

luaur_code_gen/methods/
assembly_builder_x_64_vcvtsd_2_ss.rs

1use crate::enums::category_x_64::CategoryX64;
2use crate::enums::size_x_64::SizeX64;
3use crate::macros::codegen_assert::CODEGEN_ASSERT;
4use crate::records::assembly_builder_x_64::AssemblyBuilderX64;
5use crate::records::operand_x_64::OperandX64;
6
7impl AssemblyBuilderX64 {
8    pub fn vcvtsd2ss(&mut self, dst: OperandX64, src1: OperandX64, src2: OperandX64) {
9        if src2.cat == CategoryX64::reg {
10            if !(src2.base.size() == SizeX64::xmmword) {
11                luaur_common::LUAU_DEBUGBREAK!();
12            }
13        } else {
14            if !(src2.memSize == SizeX64::qword) {
15                luaur_common::LUAU_DEBUGBREAK!();
16            }
17        }
18
19        let set_w = (if src2.cat == CategoryX64::reg {
20            src2.base.size()
21        } else {
22            src2.memSize
23        }) == SizeX64::qword;
24
25        self.place_avx_c_char_operand_x_64_operand_x_64_operand_x_64_u8_bool_u8_u8(
26            c"vcvtsd2ss".as_ptr(),
27            dst,
28            src1,
29            src2,
30            0x5a,
31            set_w,
32            0b0001,
33            0b11,
34        );
35    }
36}