aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-26 18:32:23 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-26 18:32:23 +0000
commit37dbaffd4d32d343b772ef14cb0ec8ff039f674f (patch)
tree1c0fbfe149e83cd3d2935dff6a564a91b96a5332 /src/main/java
parentf0a14f101190944ee04dd458c12025c71939b31f (diff)
Add int32 to Patio
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java16
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java8
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioSerializer.java6
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioDataLayoutInt32.java5
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioInt32Type.java5
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioType.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java1
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;
}