aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-27 00:03:21 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-27 00:03:21 +0000
commit4e9724ce88569a70f21ecf83470cb13961bb29d3 (patch)
tree7e657561ba1ae51ee446e1b253858c4c02423bb0 /src/main/java
parent2dde0a4a0e2828975080b900f5149bb4c3fd5c72 (diff)
Handle function pointer size being i32 on wasm64
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java13
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java4
2 files changed, 15 insertions, 2 deletions
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 96217cc5..bc327aea 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -230,6 +230,10 @@ public class PatioToWasm {
context = generateOperand(patioCallPointer.functionPointer(), context);
+ if (context.platformTarget == WasmTarget.WASM64) {
+ context = context.addInstruction(new WasmI32WrapI64());
+ }
+
var wasmFuncType = new WasmFuncType(
patioOperandsToWasmValueTypes(patioCallPointer.args(), context),
List.of(patioOperandToWasmValueType(patioCallPointer.target(), context))
@@ -557,7 +561,14 @@ public class PatioToWasm {
case PatioFunctionPtr patioFunctionPtr -> {
var wasmFuncName = new WasmFuncName(patioFunctionPtr.name());
- yield context.addInstruction(new WasmTableElementIndexConst(wasmFuncName));
+ context = context
+ .addInstruction(new WasmTableElementIndexConst(wasmFuncName));
+
+ if (context.platformTarget == WasmTarget.WASM64) {
+ context = context.addInstruction(new WasmI64ExtendI32Unsigned());
+ }
+
+ yield context;
}
case PatioInt patioInt ->
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java
index 6c3dec78..986cf6cd 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java
@@ -70,7 +70,9 @@ public enum WasmTarget {
// it to a void* on use, or
// * Change the Wasm backend to treat Patio function pointers as 64-bit,
// and convert from 32-bit to 64-bit when referencing table indices.
- return WasmValueType.I32;
+ // We currently do the latter, but may want to consider the former (or
+ // some other alternative).
+ return sizeT;
}
public WasmValueType patioIntType() {