From bbd0ad7fad36761f55555347b01a32887fc4a5f9 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 7 Jul 2023 18:22:49 +0100 Subject: Add int-sub instruction --- .../org/shedlang/compiler/stackir/InstructionSerializer.java | 3 +++ .../shedlang/compiler/stackir/instructions/Instruction.java | 2 +- .../compiler/stackir/instructions/IntSubInstruction.java | 11 +++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/stackir/instructions/IntSubInstruction.java (limited to 'src/main/java/org/shedlang/compiler/stackir') diff --git a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java index e98c4e02..c6544550 100644 --- a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java +++ b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java @@ -90,6 +90,9 @@ public class InstructionSerializer { case IntNotEqualInstruction intNotEqual -> treeList(treeIdentifier("int-ne")); + + case IntSubInstruction intSub -> + treeList(treeIdentifier("int-sub")); case LocalLoadInstruction localLoadInstruction -> treeList( diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java index 6be42213..6d361ddb 100644 --- a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java +++ b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java @@ -3,7 +3,7 @@ package org.shedlang.compiler.stackir.instructions; import org.shedlang.compiler.sources.Source; public sealed interface Instruction - permits CallInstruction, DefineFunctionInstruction, DiscardInstruction, FieldLoadInstruction, IntAddInstruction, IntEqualsInstruction, IntNotEqualInstruction, LocalLoadInstruction, LocalStoreInstruction, NamespaceFieldStoreInstruction, NamespaceImportInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction, ReturnInstruction { + permits CallInstruction, DefineFunctionInstruction, DiscardInstruction, FieldLoadInstruction, IntAddInstruction, IntEqualsInstruction, IntNotEqualInstruction, IntSubInstruction, LocalLoadInstruction, LocalStoreInstruction, NamespaceFieldStoreInstruction, NamespaceImportInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction, ReturnInstruction { Source source(); } diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/IntSubInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/IntSubInstruction.java new file mode 100644 index 00000000..4d105695 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/stackir/instructions/IntSubInstruction.java @@ -0,0 +1,11 @@ +package org.shedlang.compiler.stackir.instructions; + +import org.shedlang.compiler.sources.Source; + +/** + * Pop the right operand from the stack, then the left operand from the stack, + * calculate the left operand minus the right operand, then push the result onto + * the stack. + */ +public record IntSubInstruction(Source source) implements Instruction { +} -- cgit v1.2.3