aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
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/main/java
parent4783c64f709160b82a9e24d68b82d98288a17716 (diff)
Add Patio int32-const
Diffstat (limited to 'src/main/java')
-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
5 files changed, 27 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 {
}