Skip to content

Commit ef0cea6

Browse files
authored
Rename new sign-extending instructions (WebAssembly#38)
The new names are: - `i32.extend8_s` - `i32.extend16_s` - `i64.extend8_s` - `i64.extend16_s` `i64.extend32_s` has also been added for consistency. See issue WebAssembly#34.
1 parent c572454 commit ef0cea6

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

proposals/threads/Overview.md

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,23 @@ See [Globals.md](Globals.md).
5757

5858
## New Sign-extending Operators
5959

60-
All atomic RMW operators are zero-extending. To support sign-extending, four
60+
All atomic RMW operators are zero-extending. To support sign-extending, five
6161
new sign-extension operators are added:
6262

63-
* `i32.extend_s/i8`: extend a signed 8-bit integer to a 32-bit integer
64-
* `i32.extend_s/i16`: extend a signed 16-bit integer to a 32-bit integer
65-
* `i64.extend_s/i8`: extend a signed 8-bit integer to a 64-bit integer
66-
* `i64.extend_s/i16`: extend a signed 16-bit integer to a 64-bit integer
63+
* `i32.extend8_s`: extend a signed 8-bit integer to a 32-bit integer
64+
* `i32.extend16_s`: extend a signed 16-bit integer to a 32-bit integer
65+
* `i64.extend8_s`: extend a signed 8-bit integer to a 64-bit integer
66+
* `i64.extend16_s`: extend a signed 16-bit integer to a 64-bit integer
67+
* `i64.extend32_s`: extend a signed 32-bit integer to a 64-bit integer
68+
69+
Note that `i64.extend32_s` was not originally included when this proposal was
70+
discussed in the May 2017 CG meeting. The reason given was that
71+
the behavior matches `i64.extend_s/i32`. It was later discovered that this is
72+
not correct, as `i64.extend_s/i32` sign-extends an `i32` value to `i64`,
73+
whereas `i64.extend32_s` sign-extends an `i64` value to `i64`. The behavior
74+
of `i64.extend32_s` can be emulated with `i32.wrap/i64` followed by
75+
`i64.extend_s/i32`, but the same can be said of the sign-extending load
76+
operations. Therefore, `i64.extend32_s` has been added for consistency.
6777

6878
## Atomic Memory Accesses
6979

@@ -381,10 +391,11 @@ memarg32 ::= 0x02 o: offset => {align 2, offset: o}
381391
memarg64 ::= 0x03 o: offset => {align 3, offset: o}
382392
383393
instr ::= ...
384-
| 0xC0 => i32.extend_s/i8
385-
| 0xC1 => i32.extend_s/i16
386-
| 0xC2 => i64.extend_s/i8
387-
| 0xC3 => i64.extend_s/i16
394+
| 0xC0 => i32.extend8_s
395+
| 0xC1 => i32.extend16_s
396+
| 0xC2 => i64.extend8_s
397+
| 0xC3 => i64.extend16_s
398+
| 0xC4 => i64.extend32_s
388399
389400
| 0xFE 0x00 m:memarg32 => wake m
390401
| 0xFE 0x01 m:memarg32 => i32.wait m

0 commit comments

Comments
 (0)