aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-28 17:47:06 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-28 17:47:06 +0000
commitf1251be8fb464674ef0b5ffeb645a9aab872da88 (patch)
tree28d659bd9ce18886a31504cd34272b52ec31b12f /src/main/java
parent60cf1b347241855b2741949443fc7008554a482c (diff)
Add memory-fill instruction to Patio
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioSerializer.java8
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioMemoryFill.java20
5 files changed, 37 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
index c3cc1a60..d11f1279 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
@@ -543,6 +543,10 @@ public class PatioToLlvm {
case PatioLoopContinue patioLoopContinue ->
context.addTerminatorInstruction(new LlvmBrUnconditional(context.loopStartLabel()));
+ case PatioMemoryFill patioMemoryFill -> {
+ throw new UnsupportedOperationException("TODO");
+ }
+
case PatioMemoryLoad patioMemoryLoad -> {
var destinationResult = context.addPatioLocalToLlvmLocal(patioMemoryLoad.destination());
var destination = destinationResult.value();
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
index 70319ff3..b6d4f7ef 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -324,6 +324,10 @@ public class PatioToWasm {
yield context;
}
+ case PatioMemoryFill patioMemoryFill -> {
+ throw new UnsupportedOperationException("TODO");
+ }
+
case PatioMemoryLoad patioMemoryLoad -> {
context = generateOperand(patioMemoryLoad.pointer(), context);
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
index 06185778..1dd4de1a 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
@@ -268,6 +268,14 @@ public class PatioSerializer {
treeIdentifier("continue")
);
+ case PatioMemoryFill memoryFill ->
+ treeListIndented(
+ treeIdentifier("memory-fill"),
+ operandToTree(memoryFill.pointer()),
+ operandToTree(memoryFill.value()),
+ operandToTree(memoryFill.length())
+ );
+
case PatioMemoryLoad memoryLoad ->
treeListIndented(
treeIdentifier("memory-load"),
diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java
index 92119bfb..be12070d 100644
--- a/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java
+++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.patio.instructions;
import org.shedlang.compiler.sources.Source;
-public sealed interface PatioInstruction permits PatioAllocStack, PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, PatioReturnVoid, PatioSwitch, PatioThrow, PatioTry, PatioUnreachable, PatioVarLoad, PatioVarStore {
+public sealed interface PatioInstruction permits PatioAllocStack, PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryFill, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, PatioReturnVoid, PatioSwitch, PatioThrow, PatioTry, PatioUnreachable, PatioVarLoad, PatioVarStore {
boolean isBlockTerminator();
Source source();
}
diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioMemoryFill.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioMemoryFill.java
new file mode 100644
index 00000000..3acd9dd7
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioMemoryFill.java
@@ -0,0 +1,20 @@
+package org.shedlang.compiler.patio.instructions;
+
+import org.shedlang.compiler.patio.operands.PatioOperand;
+import org.shedlang.compiler.sources.Source;
+
+/**
+ * Fill the {@code length} bytes starting at the address pointed to by
+ * {@code pointer} with the byte {@code value}.
+ */
+public record PatioMemoryFill(
+ PatioOperand pointer,
+ PatioOperand value,
+ PatioOperand length,
+ Source source
+) implements PatioInstruction {
+ @Override
+ public boolean isBlockTerminator() {
+ return false;
+ }
+}