aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
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;
+ }
+}