aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
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() {