From 37dbaffd4d32d343b772ef14cb0ec8ff039f674f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 26 Jan 2024 18:32:23 +0000 Subject: Add int32 to Patio --- .../compiler/backends/llvm/codegen/PatioToLlvm.java | 16 ++++++++++++++++ .../org/shedlang/compiler/backends/wasm/PatioToWasm.java | 8 ++++++++ 2 files changed, 24 insertions(+) (limited to 'src/main/java/org/shedlang/compiler/backends') 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 b2b06215..5325a156 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 @@ -1016,6 +1016,9 @@ public class PatioToLlvm { case PatioDataLayoutInt patioDataLayoutInt -> throw new RuntimeException("offset not allowed for ints"); + case PatioDataLayoutInt32 patioDataLayoutInt32 -> + throw new RuntimeException("offset not allowed for int32s"); + case PatioDataLayoutStruct patioDataLayoutStruct -> patioDataOffsetsToLlvmOffsets( patioDataLayoutStruct.elements().get(patioOffset), @@ -1067,6 +1070,9 @@ public class PatioToLlvm { case PatioDataLayoutInt patioDataLayoutInt -> target.patioIntType(); + case PatioDataLayoutInt32 patioDataLayoutInt32 -> + LlvmTypes.INT_32; + case PatioDataLayoutStruct patioDataLayoutStruct -> patioDataOffsetToLlvmType( patioDataLayoutStruct.elements().get(patioOffsets.get(0)), @@ -1173,6 +1179,9 @@ public class PatioToLlvm { case PatioIntType patioIntType -> target.patioIntType(); + case PatioInt32Type patioInt32Type -> + LlvmTypes.INT_32; + case PatioVoidType patioVoidType -> LlvmTypes.VOID; }; @@ -1207,6 +1216,10 @@ public class PatioToLlvm { case PatioDataLayoutInt patioDataLayoutInt -> target.patioIntType(); + case PatioDataLayoutInt32 patioDataLayoutInt32 -> + LlvmTypes.INT_32; + + case PatioDataLayoutStruct patioDataLayoutStruct -> LlvmTypes.structure( patioDataLayoutStruct.elements().stream() @@ -1251,6 +1264,9 @@ public class PatioToLlvm { case PatioDataLayoutInt patioDataLayoutInt -> new LlvmOperandInt(0); + case PatioDataLayoutInt32 patioDataLayoutInt32 -> + new LlvmOperandInt(0); + case PatioDataLayoutStruct patioDataLayoutStruct -> new LlvmOperandStructure( patioDataLayoutStruct.elements().stream() 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 81a71340..f6b9d5c7 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java @@ -603,6 +603,9 @@ public class PatioToWasm { case PatioDataLayoutInt patioDataLayoutInt -> target.patioIntType().sizeBytes(); + case PatioDataLayoutInt32 patioDataLayoutInt32 -> + WasmValueType.I32.sizeBytes(); + case PatioDataLayoutStruct patioDataLayoutStruct -> patioDataLayoutStruct.elements().stream() .map(element -> sizeOf(element, target)) @@ -639,6 +642,9 @@ public class PatioToWasm { case PatioDataLayoutInt patioDataLayoutInt -> { throw new RuntimeException("offset not allowed for ints"); } + case PatioDataLayoutInt32 patioDataLayoutInt32 -> { + throw new RuntimeException("offset not allowed for int32s"); + } case PatioDataLayoutStruct patioDataLayoutStruct -> { for (var i = 0; i < patioOffset; i++) { var element = patioDataLayoutStruct.elements().get(i); @@ -768,6 +774,8 @@ public class PatioToWasm { target.functionPointerType(); case PatioIntType patioIntType -> target.patioIntType(); + case PatioInt32Type patioInt32Type -> + WasmValueType.I32; case PatioVoidType patioVoidType -> throw new IllegalArgumentException("Cannot have void values"); }; -- cgit v1.2.3