diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-27 00:03:21 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-27 00:03:21 +0000 |
| commit | 4e9724ce88569a70f21ecf83470cb13961bb29d3 (patch) | |
| tree | 7e657561ba1ae51ee446e1b253858c4c02423bb0 /src/main/java | |
| parent | 2dde0a4a0e2828975080b900f5149bb4c3fd5c72 (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.java | 13 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/wasm/WasmTarget.java | 4 |
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() { |
