From 60cf1b347241855b2741949443fc7008554a482c Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 28 Jan 2024 17:44:37 +0000 Subject: Add Patio byte-const --- .../shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java | 3 +++ .../java/org/shedlang/compiler/backends/wasm/PatioToWasm.java | 3 +++ .../java/org/shedlang/compiler/patio/PatioSerializer.java | 3 +++ .../org/shedlang/compiler/patio/operands/PatioByteConst.java | 11 +++++++++++ .../shedlang/compiler/patio/operands/PatioOperandConst.java | 2 +- 5 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/patio/operands/PatioByteConst.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 ee9e36f8..c3cc1a60 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 @@ -1083,6 +1083,9 @@ public class PatioToLlvm { case PatioBoolConst patioBoolConst -> new LlvmOperandInt(patioBoolConst.value() ? 1 : 0); + case PatioByteConst patioByteConst -> + new LlvmOperandInt(patioByteConst.value()); + case PatioDataPtrConst patioDataPtrConst -> new LlvmVariableGlobal(patioDataPtrConst.name()); 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 c9d862ac..70319ff3 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java @@ -530,6 +530,9 @@ public class PatioToWasm { case PatioBoolConst patioBoolConst -> context.addInstruction(new WasmI32Const(patioBoolConst.value() ? 1 : 0)); + case PatioByteConst patioByteConst -> + context.addInstruction(new WasmI32Const(Byte.toUnsignedInt(patioByteConst.value()))); + case PatioDataPtrConst patioDataPtrConst -> { var wasmMemoryAddress = new WasmMemoryAddress(patioDataPtrConst.name()); yield context.addInstruction(new WasmMemoryAddressConst( diff --git a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java index dc7f7c20..06185778 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java @@ -418,6 +418,9 @@ public class PatioSerializer { case PatioBoolConst bool -> treeList(treeIdentifier("bool-const"), treeBool(bool.value())); + case PatioByteConst byte_ -> + treeList(treeIdentifier("byte-const"), treeInt(byte_.value())); + case PatioDataPtrConst dataPtr -> treeList(treeIdentifier("data-ptr-const"), treeString(dataPtr.name())); diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioByteConst.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioByteConst.java new file mode 100644 index 00000000..460e2bff --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioByteConst.java @@ -0,0 +1,11 @@ +package org.shedlang.compiler.patio.operands; + +import org.shedlang.compiler.patio.types.PatioType; +import org.shedlang.compiler.patio.types.PatioTypes; + +public record PatioByteConst(byte value) implements PatioOperandConst { + @Override + public PatioType type() { + return PatioTypes.BYTE; + } +} diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java index 0a31824f..cb702ddb 100644 --- a/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java +++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java @@ -2,6 +2,6 @@ package org.shedlang.compiler.patio.operands; import org.shedlang.compiler.patio.types.PatioType; -public sealed interface PatioOperandConst extends PatioOperand permits PatioBoolConst, PatioDataPtrConst, PatioFunctionPtrConst, PatioIntConst, PatioInt32Const { +public sealed interface PatioOperandConst extends PatioOperand permits PatioBoolConst, PatioByteConst, PatioDataPtrConst, PatioFunctionPtrConst, PatioInt32Const, PatioIntConst { PatioType type(); } -- cgit v1.2.3