aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-31 17:12:45 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-31 17:13:38 +0000
commit996b383373711e6b3bbbbd6b965e019d60ddfe19 (patch)
tree586e24265e26707a8815266ac1a9d25976aa4145 /src/main/java/org
parentca64b2bb8026fb4510696736d2d887e21ac2bfa3 (diff)
Remove Patio memory-fill
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmMemset.java61
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java14
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java8
-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
6 files changed, 2 insertions, 111 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmMemset.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmMemset.java
deleted file mode 100644
index 24739116..00000000
--- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmMemset.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.shedlang.compiler.backends.llvm.codegen;
-
-import org.shedlang.compiler.backends.llvm.LlvmTarget;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDeclaration;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmParam;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmInstruction;
-import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand;
-import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperandInt;
-import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes;
-
-import java.util.List;
-import java.util.Optional;
-
-public class LlvmMemset {
- private LlvmMemset() {
- }
-
- private static final LlvmFunctionDeclaration MEMSET_32 = new LlvmFunctionDeclaration(
- "llvm.memset.p0.i32",
- LlvmTypes.VOID,
- List.of(
- new LlvmParam(LlvmTypes.pointer(LlvmTypes.VOID), "dest"),
- new LlvmParam(LlvmTypes.INT_8, "val"),
- new LlvmParam(LlvmTypes.INT_32, "len"),
- new LlvmParam(LlvmTypes.INT_1, "isvolatile")
- )
- );
-
- private static final LlvmFunctionDeclaration MEMSET_64 = new LlvmFunctionDeclaration(
- "llvm.memset.p0.i64",
- LlvmTypes.VOID,
- List.of(
- new LlvmParam(LlvmTypes.pointer(LlvmTypes.VOID), "dest"),
- new LlvmParam(LlvmTypes.INT_8, "val"),
- new LlvmParam(LlvmTypes.INT_64, "len"),
- new LlvmParam(LlvmTypes.INT_1, "isvolatile")
- )
- );
-
- public static LlvmFunctionDeclaration declaration(LlvmTarget target) {
- return switch (target) {
- case AMD64 ->
- MEMSET_64;
-
- case I686 ->
- MEMSET_32;
- };
- }
-
- public static LlvmInstruction instruction(
- LlvmTarget target,
- LlvmOperand dest,
- LlvmOperand val,
- LlvmOperand len
- ) {
- return declaration(target).call(
- Optional.empty(),
- List.of(dest, val, len, new LlvmOperandInt(0))
- );
- }
-}
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 b77701e1..104080be 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
@@ -110,8 +110,7 @@ public class PatioToLlvm {
.addTopLevelEntity(EXCEPTION_HANDLER_DECLARATION)
.addTopLevelEntity(exceptionValueDeclaration(globalContext.target()))
.addTopLevelEntity(throwDeclaration(globalContext.target()))
- .addTopLevelEntity(RETHROW_DECLARATION)
- .addTopLevelEntity(LlvmMemset.declaration(globalContext.target()));
+ .addTopLevelEntity(RETHROW_DECLARATION);
for (var patioCompilationUnitElement : patioCompilationUnit.elements()) {
switch (patioCompilationUnitElement) {
@@ -541,17 +540,6 @@ public class PatioToLlvm {
case PatioLoopContinue patioLoopContinue ->
context.addTerminatorInstruction(new LlvmBrUnconditional(context.loopStartLabel()));
- case PatioMemoryFill patioMemoryFill -> {
- context = context.addInstruction(LlvmMemset.instruction(
- context.target(),
- patioOperandToLlvmOperand(patioMemoryFill.pointer(), context),
- patioOperandToLlvmOperand(patioMemoryFill.value(), context),
- patioOperandToLlvmOperand(patioMemoryFill.length(), context)
- ));
-
- yield context;
- }
-
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 05dd71df..6c5f96da 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -321,14 +321,6 @@ public class PatioToWasm {
yield context;
}
- case PatioMemoryFill patioMemoryFill -> {
- context = generateOperand(patioMemoryFill.pointer(), context);
- context = generateOperand(patioMemoryFill.value(), context);
- context = generateOperand(patioMemoryFill.length(), context);
- context = context.addInstruction(new WasmMemoryFill());
- yield context;
- }
-
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 eb5e2b0f..d6db62c6 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
@@ -273,14 +273,6 @@ 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 be12070d..92119bfb 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, PatioMemoryFill, 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, 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
deleted file mode 100644
index 3acd9dd7..00000000
--- a/src/main/java/org/shedlang/compiler/patio/instructions/PatioMemoryFill.java
+++ /dev/null
@@ -1,20 +0,0 @@
-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;
- }
-}