aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-07 18:17:39 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-07 18:17:39 +0100
commit4123de472e0442cccd8fd01767e399dc05cc6b11 (patch)
treee3cb94d2b0e233d88b859c3bb2bc4356a84393e0 /src/main/java
parent6f462f32793ae1329259e5613940a50a7c2dd5e7 (diff)
Add LLVM sub instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java9
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmSub.java13
3 files changed, 23 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
index 9985d244..6e2577b6 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
@@ -120,6 +120,15 @@ public class LlvmIrSerializer {
writer.append(", ptr ");
serializeOperand(store.pointer(), writer);
}
+ case LlvmSub sub -> {
+ serializeVariable(sub.target(), writer);
+ writer.append(" = sub ");
+ serializeType(sub.type(), writer);
+ writer.append(" ");
+ serializeOperand(sub.left(), writer);
+ writer.append(", ");
+ serializeOperand(sub.right(), writer);
+ }
case LlvmZext zext -> {
serializeVariable(zext.target(), writer);
writer.append(" = zext ");
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java
index a9073029..89614e8a 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmInstruction.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.backends.llvm.ir.ast.instructions;
-public sealed interface LlvmInstruction permits LlvmAdd, LlvmCall, LlvmGetElementPtr, LlvmIcmp, LlvmIntToPtr, LlvmLoad, LlvmPtrToInt, LlvmStore, LlvmZext {
+public sealed interface LlvmInstruction permits LlvmAdd, LlvmCall, LlvmGetElementPtr, LlvmIcmp, LlvmIntToPtr, LlvmLoad, LlvmPtrToInt, LlvmStore, LlvmSub, LlvmZext {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmSub.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmSub.java
new file mode 100644
index 00000000..b5ae1a2a
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmSub.java
@@ -0,0 +1,13 @@
+package org.shedlang.compiler.backends.llvm.ir.ast.instructions;
+
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand;
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariable;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
+
+public record LlvmSub(
+ LlvmVariable target,
+ LlvmType type,
+ LlvmOperand left,
+ LlvmOperand right
+) implements LlvmInstruction {
+}