Swap source and target operands for unary TAC operators

This commit is contained in:
2026-04-10 06:02:14 +02:00
parent f26a8b639a
commit 5bff8c38a4

View File

@@ -1123,11 +1123,11 @@ var
instruction: ^ElnaRtlInstruction; instruction: ^ElnaRtlInstruction;
rtl_operand: ElnaRtlOperand; rtl_operand: ElnaRtlOperand;
begin begin
elna_rtl_operand_value(instructions, @tac_instruction^.operands[2], variable_map, @rtl_operand); elna_rtl_operand_value(instructions, @tac_instruction^.operands[1], variable_map, @rtl_operand);
instruction := elna_rtl_instruction_create(rtl_operator); instruction := elna_rtl_instruction_create(rtl_operator);
elna_rtl_instruction_set_operand(instruction, 1, ElnaRtlKind.pseudo, elna_rtl_instruction_set_operand(instruction, 1, ElnaRtlKind.pseudo,
tac_instruction^.operands[1].value, tac_instruction^.operands[1].length, 0); tac_instruction^.operands[2].value, tac_instruction^.operands[2].length, 0);
elna_rtl_instruction_set_operand(instruction, 2, rtl_operand.kind, rtl_operand.value, rtl_operand.length, 0); elna_rtl_instruction_set_operand(instruction, 2, rtl_operand.kind, rtl_operand.value, rtl_operand.length, 0);
elna_list_append(instructions, instruction) elna_list_append(instructions, instruction)
@@ -2331,15 +2331,15 @@ begin
elna_tac_make_variable(@operand^.kind, @operand^.value, @operand^.length, symbol_table); elna_tac_make_variable(@operand^.kind, @operand^.value, @operand^.length, symbol_table);
instruction := elna_tac_instruction_create(ElnaTacOperator.negate); instruction := elna_tac_instruction_create(ElnaTacOperator.negate);
elna_tac_instruction_set_operand(instruction, 1, operand^.kind, operand^.value, operand^.length); elna_tac_instruction_set_operand(instruction, 1, base.kind, base.value, base.length);
elna_tac_instruction_set_operand(instruction, 2, base.kind, base.value, base.length); elna_tac_instruction_set_operand(instruction, 2, operand^.kind, operand^.value, operand^.length);
elna_list_append(instructions, instruction) elna_list_append(instructions, instruction)
elsif operator = '~' then elsif operator = '~' then
elna_tac_make_variable(@operand^.kind, @operand^.value, @operand^.length, symbol_table); elna_tac_make_variable(@operand^.kind, @operand^.value, @operand^.length, symbol_table);
instruction := elna_tac_instruction_create(ElnaTacOperator.complement); instruction := elna_tac_instruction_create(ElnaTacOperator.complement);
elna_tac_instruction_set_operand(instruction, 1, operand^.kind, operand^.value, operand^.length); elna_tac_instruction_set_operand(instruction, 1, base.kind, base.value, base.length);
elna_tac_instruction_set_operand(instruction, 2, base.kind, base.value, base.length); elna_tac_instruction_set_operand(instruction, 2, operand^.kind, operand^.value, operand^.length);
elna_list_append(instructions, instruction) elna_list_append(instructions, instruction)
elsif operand_result.kind = ElnaTacOperandType.dereferenced_pointer then elsif operand_result.kind = ElnaTacOperandType.dereferenced_pointer then
elna_tac_make_variable(@operand^.kind, @operand^.value, @operand^.length, symbol_table); elna_tac_make_variable(@operand^.kind, @operand^.value, @operand^.length, symbol_table);