luaur_code_gen/functions/
substitute_with_truncated_uint.rs1use crate::enums::ir_cmd::IrCmd;
2use crate::functions::produces_dirty_high_register_bits::produces_dirty_high_register_bits;
3use crate::functions::replace_ir_utils_alt_b::replace_ir_function_ir_block_u32_ir_inst;
4use crate::functions::substitute::substitute;
5use crate::records::ir_block::IrBlock;
6use crate::records::ir_function::IrFunction;
7use crate::records::ir_inst::IrInst;
8use crate::records::ir_op::IrOp;
9use crate::type_aliases::ir_ops::IrOps;
10
11pub fn substitute_with_truncated_uint(
12 function: &mut IrFunction,
13 block: &mut IrBlock,
14 inst: &mut IrInst,
15 op: IrOp,
16) {
17 let src_of_src: *mut IrInst = function.as_inst_op(op);
18 if !src_of_src.is_null() && produces_dirty_high_register_bits(unsafe { (*src_of_src).cmd }) {
19 let inst_index = function.get_inst_index(inst);
20 let mut ops = IrOps::new();
21 ops.push(op);
22 let replacement = IrInst {
23 cmd: IrCmd::TRUNCATE_UINT,
24 ops,
25 ..Default::default()
26 };
27 replace_ir_function_ir_block_u32_ir_inst(function, block, inst_index, replacement);
28 } else {
29 substitute(function, inst, op);
30 }
31}