Skip to content

Commit c449287

Browse files
committed
Fix br_table_i32 branch profile counter offset.
1 parent c4f22c3 commit c449287

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

wasm/src/org.graalvm.wasm/src/org/graalvm/wasm/nodes/WasmFunctionNode.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ public Object executeBodyFromOffset(WasmContext context, WasmInstance instance,
435435
stackPointer--;
436436
int index = popInt(frame, stackPointer);
437437
final int size = rawPeekU8(bytecode, offset);
438+
final int counterOffset = offset + 1;
438439
if (index < 0 || index >= size) {
439440
// If unsigned index is larger or equal to the table size use the
440441
// default (last) index.
@@ -443,7 +444,7 @@ public Object executeBodyFromOffset(WasmContext context, WasmInstance instance,
443444

444445
if (CompilerDirectives.inInterpreter()) {
445446
final int indexOffset = offset + 3 + index * 6;
446-
updateBranchTableProfile(bytecode, offset + 1, indexOffset + 4);
447+
updateBranchTableProfile(bytecode, counterOffset, indexOffset + 4);
447448
final int offsetDelta = rawPeekI32(bytecode, indexOffset);
448449
offset = indexOffset + offsetDelta;
449450
break;
@@ -453,7 +454,7 @@ public Object executeBodyFromOffset(WasmContext context, WasmInstance instance,
453454
// time constants, since the loop is unrolled.
454455
for (int i = 0; i < size; i++) {
455456
final int indexOffset = offset + 3 + i * 6;
456-
if (profileBranchTable(bytecode, offset + 1, indexOffset + 4, i == index)) {
457+
if (profileBranchTable(bytecode, counterOffset, indexOffset + 4, i == index)) {
457458
final int offsetDelta = rawPeekI32(bytecode, indexOffset);
458459
offset = indexOffset + offsetDelta;
459460
continue loop;
@@ -467,6 +468,7 @@ public Object executeBodyFromOffset(WasmContext context, WasmInstance instance,
467468
stackPointer--;
468469
int index = popInt(frame, stackPointer);
469470
final int size = rawPeekI32(bytecode, offset);
471+
final int counterOffset = offset + 4;
470472
if (index < 0 || index >= size) {
471473
// If unsigned index is larger or equal to the table size use the
472474
// default (last) index.
@@ -475,7 +477,7 @@ public Object executeBodyFromOffset(WasmContext context, WasmInstance instance,
475477

476478
if (CompilerDirectives.inInterpreter()) {
477479
final int indexOffset = offset + 6 + index * 6;
478-
updateBranchTableProfile(bytecode, offset + 4, indexOffset + 4);
480+
updateBranchTableProfile(bytecode, counterOffset, indexOffset + 4);
479481
final int offsetDelta = rawPeekI32(bytecode, indexOffset);
480482
offset = indexOffset + offsetDelta;
481483
break;
@@ -485,7 +487,7 @@ public Object executeBodyFromOffset(WasmContext context, WasmInstance instance,
485487
// time constants, since the loop is unrolled.
486488
for (int i = 0; i < size; i++) {
487489
final int indexOffset = offset + 6 + i * 6;
488-
if (profileBranchTable(bytecode, offset + 1, indexOffset + 4, i == index)) {
490+
if (profileBranchTable(bytecode, counterOffset, indexOffset + 4, i == index)) {
489491
final int offsetDelta = rawPeekI32(bytecode, indexOffset);
490492
offset = indexOffset + offsetDelta;
491493
continue loop;

0 commit comments

Comments
 (0)