Skip to content

Fix i32x4.relaxed_dot_i8x16_i7x16_add_s - #2312

Open
brendandahl wants to merge 1 commit into
WebAssembly:mainfrom
brendandahl:relaxed-dot-add
Open

brendandahl wants to merge 1 commit into
WebAssembly:mainfrom
brendandahl:relaxed-dot-add

Conversation

@brendandahl

Copy link
Copy Markdown
Contributor

The spec previously computed the first pairwise dot product only in 16-bit arithmetic (via i16x8.relaxed_dot), allowing just signed operands with a wrapping 16-bit sum or unsigned operands with a saturating 16-bit sum. This did not permit hardware that accumulates directly in 32 bits (ARM64 sdot, x86-64 vpdpbssd/vpdpbusd).

Add a relaxed parameter R_idot_add that selects a 16-bit or 32-bit intermediate pairwise sum, independently of the operand signedness selected by R_idot.

Also fix the reference interpreter, which used signed operands with a saturating 16-bit sum, a combination allowed by neither the old nor the new semantics. It is now defined in terms of i16x8.relaxed_dot and extadd_pairwise_s.

The spec previously computed the first pairwise dot product only in
16-bit arithmetic (via i16x8.relaxed_dot), allowing just signed
operands with a wrapping 16-bit sum or unsigned operands with a
saturating 16-bit sum. This did not permit hardware that accumulates
directly in 32 bits (ARM64 sdot, x86-64 vpdpbssd/vpdpbusd).

Add a relaxed parameter R_idot_add that selects a 16-bit or 32-bit
intermediate pairwise sum, independently of the operand signedness
selected by R_idot.

Also fix the reference interpreter, which used signed operands with a
saturating 16-bit sum, a combination allowed by neither the old nor
the new semantics. It is now defined in terms of i16x8.relaxed_dot and
extadd_pairwise_s.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant