Skip to content

Commit 55dee0d

Browse files
committed
predecode memory instruction memarg
1 parent 248658b commit 55dee0d

File tree

63 files changed

+211
-95
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+211
-95
lines changed

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/F32LoadInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.load.F32LoadExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.f32LoadRuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -53,7 +53,7 @@ class F32LoadInstructionBenchmark {
5353

5454
private val instruction = f32LoadRuntimeInstruction(
5555
memory = memoryInstance,
56-
memArg = memArg(0u, 0u),
56+
memArg = runtimeMemArg(0, 0),
5757
)
5858

5959
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/F32StoreInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.store.F32StoreExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.f32StoreRuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -54,7 +54,7 @@ class F32StoreInstructionBenchmark {
5454

5555
private val instruction = f32StoreRuntimeInstruction(
5656
memory = memoryInstance,
57-
memArg = memArg(0u, 0u),
57+
memArg = runtimeMemArg(0, 0),
5858
)
5959

6060
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/F64LoadInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.load.F64LoadExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.f64LoadRuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -53,7 +53,7 @@ class F64LoadInstructionBenchmark {
5353

5454
private val instruction = f64LoadRuntimeInstruction(
5555
memory = memoryInstance,
56-
memArg = memArg(0u, 0u),
56+
memArg = runtimeMemArg(0, 0),
5757
)
5858

5959
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/F64StoreInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.store.F64StoreExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.f64StoreRuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -54,7 +54,7 @@ class F64StoreInstructionBenchmark {
5454

5555
private val instruction = f64StoreRuntimeInstruction(
5656
memory = memoryInstance,
57-
memArg = memArg(0u, 0u),
57+
memArg = runtimeMemArg(0, 0),
5858
)
5959

6060
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/I32Load8SInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.load.I32Load8SExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.i32Load8SRuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -53,7 +53,7 @@ class I32Load8SInstructionBenchmark {
5353

5454
private val instruction = i32Load8SRuntimeInstruction(
5555
memory = memoryInstance,
56-
memArg = memArg(0u, 0u),
56+
memArg = runtimeMemArg(0, 0),
5757
)
5858

5959
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/I32Load8UInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.load.I32Load8UExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.i32Load8URuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -53,7 +53,7 @@ class I32Load8UInstructionBenchmark {
5353

5454
private val instruction = i32Load8URuntimeInstruction(
5555
memory = memoryInstance,
56-
memArg = memArg(0u, 0u),
56+
memArg = runtimeMemArg(0, 0),
5757
)
5858

5959
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/I32LoadInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.load.I32LoadExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.i32LoadRuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -53,7 +53,7 @@ class I32LoadInstructionBenchmark {
5353

5454
private val instruction = i32LoadRuntimeInstruction(
5555
memory = memoryInstance,
56-
memArg = memArg(0u, 0u),
56+
memArg = runtimeMemArg(0, 0),
5757
)
5858

5959
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/I32Store8InstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.store.I32Store8Executor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.i32Store8RuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -53,7 +53,7 @@ class I32Store8InstructionBenchmark {
5353

5454
private val instruction = i32Store8RuntimeInstruction(
5555
memory = memoryInstance,
56-
memArg = memArg(0u, 0u),
56+
memArg = runtimeMemArg(0, 0),
5757
)
5858

5959
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/I32StoreInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.store.I32StoreExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.i32StoreRuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -53,7 +53,7 @@ class I32StoreInstructionBenchmark {
5353

5454
private val instruction = i32StoreRuntimeInstruction(
5555
memory = memoryInstance,
56-
memArg = memArg(0u, 0u),
56+
memArg = runtimeMemArg(0, 0),
5757
)
5858

5959
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/I64LoadInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.load.I64LoadExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.i64LoadRuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -53,7 +53,7 @@ class I64LoadInstructionBenchmark {
5353

5454
private val instruction = i64LoadRuntimeInstruction(
5555
memory = memoryInstance,
56-
memArg = memArg(0u, 0u),
56+
memArg = runtimeMemArg(0, 0),
5757
)
5858

5959
private val frame = frame(

benchmark/src/commonMain/kotlin/io/github/charlietap/chasm/benchmark/instruction/memory/I64StoreInstructionBenchmark.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import io.github.charlietap.chasm.benchmark.BenchmarkConfig
44
import io.github.charlietap.chasm.executor.invoker.instruction.memory.store.I64StoreExecutor
55
import io.github.charlietap.chasm.executor.memory.factory.LinearMemoryFactory
66
import io.github.charlietap.chasm.executor.runtime.memory.LinearMemory
7-
import io.github.charlietap.chasm.fixture.ast.instruction.memArg
87
import io.github.charlietap.chasm.fixture.ast.type.limits
98
import io.github.charlietap.chasm.fixture.ast.type.memoryType
109
import io.github.charlietap.chasm.fixture.ast.type.unsharedStatus
@@ -13,6 +12,7 @@ import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryAddres
1312
import io.github.charlietap.chasm.fixture.executor.runtime.instance.memoryInstance
1413
import io.github.charlietap.chasm.fixture.executor.runtime.instance.moduleInstance
1514
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.i64StoreRuntimeInstruction
15+
import io.github.charlietap.chasm.fixture.executor.runtime.instruction.runtimeMemArg
1616
import io.github.charlietap.chasm.fixture.executor.runtime.stack
1717
import io.github.charlietap.chasm.fixture.executor.runtime.stack.frame
1818
import io.github.charlietap.chasm.fixture.executor.runtime.store
@@ -54,7 +54,7 @@ class I64StoreInstructionBenchmark {
5454

5555
private val instruction = i64StoreRuntimeInstruction(
5656
memory = memoryInstance,
57-
memArg = memArg(0u, 0u),
57+
memArg = runtimeMemArg(0, 0),
5858
)
5959

6060
private val frame = frame(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.github.charlietap.chasm.executor.instantiator.predecoding.instruction
2+
3+
import io.github.charlietap.chasm.ast.instruction.MemArg
4+
import io.github.charlietap.chasm.executor.runtime.instruction.MemArg as RuntimeMemArg
5+
6+
internal typealias MemArgPredecoder = (MemArg) -> RuntimeMemArg
7+
8+
internal inline fun MemArgPredecoder(
9+
arg: MemArg,
10+
) = RuntimeMemArg(
11+
align = arg.align.toInt(),
12+
offset = arg.offset.toInt(),
13+
)

executor/instantiator/src/commonMain/kotlin/io/github/charlietap/chasm/executor/instantiator/predecoding/instruction/memory/load/F32LoadInstructionPredecoder.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.github.michaelbull.result.Result
55
import com.github.michaelbull.result.binding
66
import io.github.charlietap.chasm.ast.instruction.MemoryInstruction
77
import io.github.charlietap.chasm.executor.instantiator.context.InstantiationContext
8+
import io.github.charlietap.chasm.executor.instantiator.predecoding.instruction.MemArgPredecoder
89
import io.github.charlietap.chasm.executor.invoker.dispatch.Dispatcher
910
import io.github.charlietap.chasm.executor.invoker.dispatch.memory.F32LoadDispatcher
1011
import io.github.charlietap.chasm.executor.runtime.dispatch.DispatchableInstruction
@@ -22,16 +23,19 @@ internal fun F32LoadInstructionPredecoder(
2223
context = context,
2324
instruction = instruction,
2425
dispatcher = ::F32LoadDispatcher,
26+
memArgPredecoder = ::MemArgPredecoder,
2527
)
2628

2729
internal inline fun F32LoadInstructionPredecoder(
2830
context: InstantiationContext,
2931
instruction: MemoryInstruction.F32Load,
3032
crossinline dispatcher: Dispatcher<F32Load>,
33+
crossinline memArgPredecoder: MemArgPredecoder,
3134
): Result<DispatchableInstruction, ModuleTrapError> = binding {
3235
val memoryAddress = context.instance?.memoryAddress(instruction.memoryIndex)?.bind()
3336
?: Err(InstantiationError.PredecodingError).bind()
3437
val memory = context.store.memory(memoryAddress)
38+
val memArg = memArgPredecoder(instruction.memArg)
3539

36-
dispatcher(F32Load(memory, instruction.memArg))
40+
dispatcher(F32Load(memory, memArg))
3741
}

executor/instantiator/src/commonMain/kotlin/io/github/charlietap/chasm/executor/instantiator/predecoding/instruction/memory/load/F64LoadInstructionPredecoder.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.github.michaelbull.result.Result
55
import com.github.michaelbull.result.binding
66
import io.github.charlietap.chasm.ast.instruction.MemoryInstruction
77
import io.github.charlietap.chasm.executor.instantiator.context.InstantiationContext
8+
import io.github.charlietap.chasm.executor.instantiator.predecoding.instruction.MemArgPredecoder
89
import io.github.charlietap.chasm.executor.invoker.dispatch.Dispatcher
910
import io.github.charlietap.chasm.executor.invoker.dispatch.memory.F64LoadDispatcher
1011
import io.github.charlietap.chasm.executor.runtime.dispatch.DispatchableInstruction
@@ -22,16 +23,19 @@ internal fun F64LoadInstructionPredecoder(
2223
context = context,
2324
instruction = instruction,
2425
dispatcher = ::F64LoadDispatcher,
26+
memArgPredecoder = ::MemArgPredecoder,
2527
)
2628

2729
internal inline fun F64LoadInstructionPredecoder(
2830
context: InstantiationContext,
2931
instruction: MemoryInstruction.F64Load,
3032
crossinline dispatcher: Dispatcher<F64Load>,
33+
crossinline memArgPredecoder: MemArgPredecoder,
3134
): Result<DispatchableInstruction, ModuleTrapError> = binding {
3235
val memoryAddress = context.instance?.memoryAddress(instruction.memoryIndex)?.bind()
3336
?: Err(InstantiationError.PredecodingError).bind()
3437
val memory = context.store.memory(memoryAddress)
38+
val memArg = memArgPredecoder(instruction.memArg)
3539

36-
dispatcher(F64Load(memory, instruction.memArg))
40+
dispatcher(F64Load(memory, memArg))
3741
}

0 commit comments

Comments
 (0)