mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: add saturating conversions on wasm
This change adds the GOWASM option "satconv" to enable the generation of experimental saturating (non-trapping) float-to-int conversions. It improves the performance of the conversion by 42%. Previously the conversions had already been augmented with helper functions to have saturating behavior. Now Wasm.rules is always using the new operation names and wasm/ssa.go is falling back to the helpers if the feature is not enabled. The feature is in phase 4 of the WebAssembly proposal process: https://github.com/WebAssembly/meetings/blob/master/process/phases.md More information on the feature can be found at: https://github.com/WebAssembly/nontrapping-float-to-int-conversions/blob/master/proposals/nontrapping-float-to-int-conversion/Overview.md Change-Id: Ic6c3688017054ede804b02b6b0ffd4a02ef33ad7 Reviewed-on: https://go-review.googlesource.com/c/go/+/170119 Reviewed-by: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
1abf3aa55b
commit
cf8cc7f63c
12 changed files with 80 additions and 42 deletions
|
|
@ -886,7 +886,7 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
}
|
||||
|
||||
switch {
|
||||
case p.As < AUnreachable || p.As >= ALast:
|
||||
case p.As < AUnreachable:
|
||||
panic(fmt.Sprintf("unexpected assembler op: %s", p.As))
|
||||
case p.As < AEnd:
|
||||
w.WriteByte(byte(p.As - AUnreachable + 0x00))
|
||||
|
|
@ -894,8 +894,13 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) {
|
|||
w.WriteByte(byte(p.As - AEnd + 0x0B))
|
||||
case p.As < AI32Load:
|
||||
w.WriteByte(byte(p.As - ADrop + 0x1A))
|
||||
default:
|
||||
case p.As < AI32TruncSatF32S:
|
||||
w.WriteByte(byte(p.As - AI32Load + 0x28))
|
||||
case p.As < ALast:
|
||||
w.WriteByte(0xFC)
|
||||
w.WriteByte(byte(p.As - AI32TruncSatF32S + 0x00))
|
||||
default:
|
||||
panic(fmt.Sprintf("unexpected assembler op: %s", p.As))
|
||||
}
|
||||
|
||||
switch p.As {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue