aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-26 18:48:56 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-26 18:48:56 +0000
commite4b51902a72b08a9feddbcd527550ddde08ecc9b (patch)
tree936d7c5eb764fe713a11bf2af7849d182f2b1721 /src
parent4783c64f709160b82a9e24d68b82d98288a17716 (diff)
Add Patio int32-const
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java6
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java7
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioSerializer.java3
-rw-r--r--src/main/java/org/shedlang/compiler/patio/operands/PatioInt32Const.java10
-rw-r--r--src/main/java/org/shedlang/compiler/patio/operands/PatioOperand.java2
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java9
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java4
7 files changed, 40 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 5325a156..01b9ca18 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
@@ -1109,6 +1109,9 @@ public class PatioToLlvm {
case PatioIntConst patioIntConst ->
context.target().patioIntType();
+ case PatioInt32Const patioInt32Const ->
+ LlvmTypes.INT_32;
+
case PatioLocalRef patioLocalRef ->
context.patioLocalToType(patioLocalRef);
};
@@ -1131,6 +1134,9 @@ public class PatioToLlvm {
case PatioIntConst patioIntConst ->
patioIntValueToLlvmOperand(patioIntConst.value(), context.target());
+ case PatioInt32Const patioInt32Const ->
+ patioIntValueToLlvmOperand(patioInt32Const.value(), context.target());
+
case PatioLocalRef patioLocalRef ->
context.patioLocalToOperand(patioLocalRef);
};
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 f6b9d5c7..e15cdc23 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -556,6 +556,11 @@ public class PatioToWasm {
generateIntValue(patioIntConst.value(), context.target)
));
+ case PatioInt32Const patioInt32Const ->
+ context.addInstruction(new WasmI32Const(
+ generateIntValue(patioInt32Const.value(), context.target)
+ ));
+
case PatioLocalRef patioLocalRef -> {
var wasmLocalIndex = context.wasmLocalIndex(patioLocalRef);
yield context.addInstruction(new WasmLocalGet(wasmLocalIndex));
@@ -754,6 +759,8 @@ public class PatioToWasm {
patioTypeToWasmValueType(PatioTypes.FUNCTION_POINTER, context.target);
case PatioIntConst patioIntConst ->
patioTypeToWasmValueType(PatioTypes.INT, context.target);
+ case PatioInt32Const patioInt32Const ->
+ patioTypeToWasmValueType(PatioTypes.INT32, context.target);
case PatioLocalRef patioLocalRef ->
context.wasmLocalType(patioLocalRef);
};
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
index 75425069..9e208b2c 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
@@ -427,6 +427,9 @@ public class PatioSerializer {
case PatioIntConst int_ ->
treeList(treeIdentifier("int-const"), intValueToTree(int_.value()));
+ case PatioInt32Const int32 ->
+ treeList(treeIdentifier("int32-const"), intValueToTree(int32.value()));
+
case PatioLocalRef localRef ->
treeList(treeIdentifier("local"), treeString(localRef.name()));
};
diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioInt32Const.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioInt32Const.java
new file mode 100644
index 00000000..ffc2e94f
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioInt32Const.java
@@ -0,0 +1,10 @@
+package org.shedlang.compiler.patio.operands;
+
+import org.shedlang.compiler.patio.values.PatioIntValue;
+import org.shedlang.compiler.patio.values.PatioIntValueLiteral;
+
+public record PatioInt32Const(PatioIntValue value) implements PatioOperand {
+ public static PatioInt32Const of(int value) {
+ return new PatioInt32Const(new PatioIntValueLiteral(value));
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioOperand.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioOperand.java
index 17ffb0e4..cc7db6c5 100644
--- a/src/main/java/org/shedlang/compiler/patio/operands/PatioOperand.java
+++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioOperand.java
@@ -1,5 +1,5 @@
package org.shedlang.compiler.patio.operands;
-public sealed interface PatioOperand permits PatioBoolConst, PatioDataPtrConst, PatioFunctionPtrConst, PatioIntConst, PatioLocalRef {
+public sealed interface PatioOperand permits PatioBoolConst, PatioDataPtrConst, PatioFunctionPtrConst, PatioIntConst, PatioInt32Const, PatioLocalRef {
}
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
index fe2de985..f5bb33f6 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
@@ -749,6 +749,15 @@ public class PatioSerializerTests {
}
@Test
+ public void canSerializeInt32Const() {
+ var operand = Patio.int32Const(42);
+
+ var string = PatioTesting.serializeOperand(operand);
+
+ assertThat(string, equalTo("(int32-const 42)"));
+ }
+
+ @Test
public void canSerializeLocalRef() {
var operand = Patio.localRef("x");
diff --git a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
index 532f2d2a..b2d6502d 100644
--- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
+++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
@@ -138,6 +138,10 @@ public class Patio {
return new PatioIntConst(value);
}
+ public static PatioOperand int32Const(int value) {
+ return PatioInt32Const.of(value);
+ }
+
public static PatioInstruction intAdd(
PatioLocalRef destination,
PatioOperand left,