luaur_code_gen/methods/
assembly_builder_a_64_fcsel.rs1use crate::enums::condition_a_64::ConditionA64;
2use crate::enums::kind_a_64::KindA64;
3use crate::macros::codegen_assert::CODEGEN_ASSERT;
4use crate::records::assembly_builder_a_64::AssemblyBuilderA64;
5use crate::records::register_a_64::RegisterA64;
6
7impl AssemblyBuilderA64 {
8 pub fn fcsel(
9 &mut self,
10 dst: RegisterA64,
11 src1: RegisterA64,
12 src2: RegisterA64,
13 cond: ConditionA64,
14 ) {
15 CODEGEN_ASSERT!(dst.kind() == src1.kind() && src1.kind() == src2.kind());
16 CODEGEN_ASSERT!(dst.kind() == KindA64::d || dst.kind() == KindA64::s);
17
18 if src1.kind() == KindA64::d {
19 self.place_cs(
20 b"fcsel\0".as_ptr() as *const core::ffi::c_char,
21 dst,
22 src1,
23 src2,
24 cond,
25 0b11110_01_1,
26 0b11,
27 0,
28 );
29 } else {
30 self.place_cs(
31 b"fcsel\0".as_ptr() as *const core::ffi::c_char,
32 dst,
33 src1,
34 src2,
35 cond,
36 0b11110_00_1,
37 0b11,
38 0,
39 );
40 }
41 }
42}