diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-25 15:59:22 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-25 15:59:22 +0100 |
| commit | b8ef288f0d552272b2086deb03b1d56fb25c7275 (patch) | |
| tree | cb9720a3c21a1fb79fb9d830a392c13540480fdf /src/main/java | |
| parent | 6aa1d4c0dd57790b65f90b2c69b484ad64ce74bc (diff) | |
Add WASM code gen for discard instruction
Diffstat (limited to 'src/main/java')
4 files changed, 15 insertions, 4 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java index b572f77e..482d308e 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java @@ -1,5 +1,6 @@ package org.shedlang.compiler.backends.wasm; +import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmDrop; import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmI32Const; import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmReturn; import org.shedlang.compiler.stackir.instructions.*; @@ -16,9 +17,9 @@ public class WasmCodeGen { case DefineFunctionInstruction defineFunctionInstruction -> { throw new UnsupportedOperationException("TODO"); } - case DiscardInstruction discardInstruction -> { - throw new UnsupportedOperationException("TODO"); - } + case DiscardInstruction discard -> + context.addInstruction(new WasmDrop()); + case LocalLoadInstruction localLoadInstruction -> { throw new UnsupportedOperationException("TODO"); } diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmDrop.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmDrop.java new file mode 100644 index 00000000..fceeccdc --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmDrop.java @@ -0,0 +1,4 @@ +package org.shedlang.compiler.backends.wasm.structure.ast.instructions; + +public record WasmDrop() implements WasmInstruction { +} diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmInstruction.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmInstruction.java index b9cbd672..5cdd7a23 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmInstruction.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmInstruction.java @@ -1,4 +1,4 @@ package org.shedlang.compiler.backends.wasm.structure.ast.instructions; -public sealed interface WasmInstruction permits WasmI32Const, WasmI64Const, WasmReturn { +public sealed interface WasmInstruction permits WasmDrop, WasmI32Const, WasmI64Const, WasmReturn { } diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatInstructions.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatInstructions.java index 4bd9bb9a..988d8c9e 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatInstructions.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatInstructions.java @@ -20,6 +20,12 @@ public class WasmBinaryFormatInstructions { writer.writeByte(0x0f); } + // == Parametric Instructions == + + case WasmDrop ignored -> { + writer.writeByte(0x1a); + } + // == Numeric Instructions == case WasmI32Const i32Const -> { |
