aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-13 23:05:11 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-13 23:05:11 +0100
commit855a6dbfa164b737fc752831b19fef468255aab5 (patch)
treed86f0f533c846a4d59f9554a7c546c77e74f2620 /src/main/java
parent90258c88930b3330b5ad7b3f3540cd0e288536f9 (diff)
Add LLVM store instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java10
-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/LlvmStore.java11
3 files changed, 22 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 11569f74..bc23c195 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
@@ -52,6 +52,16 @@ public class LlvmIrSerializer {
serializeTypedOperand(index, builder);
}
}
+ case LlvmStore store -> {
+ builder.append("store ");
+ serializeType(store.type(), builder);
+ builder.append(" ");
+ serializeOperand(store.value(), builder);
+ builder.append(", ");
+ serializeType(LlvmTypes.pointer(store.type()), builder);
+ builder.append(" ");
+ serializeOperand(store.pointer(), builder);
+ }
}
}
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 48d90ed4..caccc38f 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 {
+public sealed interface LlvmInstruction permits LlvmAdd, LlvmCall, LlvmGetElementPtr, LlvmStore {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmStore.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmStore.java
new file mode 100644
index 00000000..93b6a6ec
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/instructions/LlvmStore.java
@@ -0,0 +1,11 @@
+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.types.LlvmType;
+
+public record LlvmStore(
+ LlvmType type,
+ LlvmOperand value,
+ LlvmOperand pointer
+) implements LlvmInstruction {
+}