diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-01-26 18:32:23 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-01-26 18:32:23 +0000 |
| commit | 37dbaffd4d32d343b772ef14cb0ec8ff039f674f (patch) | |
| tree | 1c0fbfe149e83cd3d2935dff6a564a91b96a5332 /src/main/java | |
| parent | f0a14f101190944ee04dd458c12025c71939b31f (diff) | |
Add int32 to Patio
Diffstat (limited to 'src/main/java')
9 files changed, 47 insertions, 2 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 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"); }; diff --git a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java index 5dc0c1ae..75425069 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java @@ -449,6 +449,9 @@ public class PatioSerializer { case PatioIntType intType -> treeIdentifier("int"); + case PatioInt32Type int32Type -> + treeIdentifier("int32"); + case PatioVoidType voidType -> treeIdentifier("void"); }; @@ -478,6 +481,9 @@ public class PatioSerializer { case PatioDataLayoutInt int_ -> treeIdentifier("int"); + case PatioDataLayoutInt32 int32 -> + treeIdentifier("int32"); + case PatioDataLayoutStruct struct -> treeList( treeIdentifier("struct"), diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java index 9649cecf..31798fd2 100644 --- a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java +++ b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java @@ -1,4 +1,4 @@ package org.shedlang.compiler.patio.types; -public sealed interface PatioDataLayout permits PatioDataLayoutArray, PatioDataLayoutBool, PatioDataLayoutByte, PatioDataLayoutDataPointer, PatioDataLayoutFunctionPointer, PatioDataLayoutInt, PatioDataLayoutStruct { +public sealed interface PatioDataLayout permits PatioDataLayoutArray, PatioDataLayoutBool, PatioDataLayoutByte, PatioDataLayoutDataPointer, PatioDataLayoutFunctionPointer, PatioDataLayoutInt, PatioDataLayoutInt32, PatioDataLayoutStruct { } diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayoutInt32.java b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayoutInt32.java new file mode 100644 index 00000000..ecf3e073 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayoutInt32.java @@ -0,0 +1,5 @@ +package org.shedlang.compiler.patio.types; + +public record PatioDataLayoutInt32() implements PatioDataLayout { + public static final PatioDataLayoutInt32 INSTANCE = new PatioDataLayoutInt32(); +} diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java index c28124aa..19263be4 100644 --- a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java +++ b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java @@ -11,6 +11,7 @@ public class PatioDataLayouts { public static final PatioDataLayout DATA_POINTER = PatioDataLayoutDataPointer.INSTANCE; public static final PatioDataLayout FUNCTION_POINTER = PatioDataLayoutFunctionPointer.INSTANCE; public static final PatioDataLayout INT = PatioDataLayoutInt.INSTANCE; + public static final PatioDataLayout INT32 = PatioDataLayoutInt32.INSTANCE; public static PatioDataLayout array(PatioDataLayout element, int size) { return new PatioDataLayoutArray(element, size); @@ -37,6 +38,9 @@ public class PatioDataLayouts { case PatioIntType patioIntType -> INT; + case PatioInt32Type patioInt32Type -> + INT32; + case PatioVoidType patioVoidType -> throw new UnsupportedOperationException("TODO"); }; diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioInt32Type.java b/src/main/java/org/shedlang/compiler/patio/types/PatioInt32Type.java new file mode 100644 index 00000000..f7a694f7 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/types/PatioInt32Type.java @@ -0,0 +1,5 @@ +package org.shedlang.compiler.patio.types; + +public record PatioInt32Type() implements PatioType { + static final PatioInt32Type INSTANCE = new PatioInt32Type(); +} diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioType.java b/src/main/java/org/shedlang/compiler/patio/types/PatioType.java index 13caa01d..8fb115fd 100644 --- a/src/main/java/org/shedlang/compiler/patio/types/PatioType.java +++ b/src/main/java/org/shedlang/compiler/patio/types/PatioType.java @@ -1,4 +1,4 @@ package org.shedlang.compiler.patio.types; -public sealed interface PatioType permits PatioBoolType, PatioByteType, PatioDataPointerType, PatioFunctionPointerType, PatioIntType, PatioVoidType { +public sealed interface PatioType permits PatioBoolType, PatioByteType, PatioDataPointerType, PatioFunctionPointerType, PatioInt32Type, PatioIntType, PatioVoidType { } diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java b/src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java index dcfbd08e..8601cc77 100644 --- a/src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java +++ b/src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java @@ -9,5 +9,6 @@ public class PatioTypes { public static final PatioDataPointerType DATA_POINTER = PatioDataPointerType.INSTANCE; public static final PatioFunctionPointerType FUNCTION_POINTER = PatioFunctionPointerType.INSTANCE; public static final PatioIntType INT = PatioIntType.INSTANCE; + public static final PatioInt32Type INT32 = PatioInt32Type.INSTANCE; public static final PatioVoidType VOID = PatioVoidType.INSTANCE; } |
