From e4b51902a72b08a9feddbcd527550ddde08ecc9b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 26 Jan 2024 18:48:56 +0000 Subject: Add Patio int32-const --- .../shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java | 6 ++++++ .../java/org/shedlang/compiler/backends/wasm/PatioToWasm.java | 7 +++++++ src/main/java/org/shedlang/compiler/patio/PatioSerializer.java | 3 +++ .../org/shedlang/compiler/patio/operands/PatioInt32Const.java | 10 ++++++++++ .../org/shedlang/compiler/patio/operands/PatioOperand.java | 2 +- 5 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/patio/operands/PatioInt32Const.java (limited to 'src/main/java') 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 { } -- cgit v1.2.3