1
0
mirror of https://github.com/golang/go synced 2024-11-08 05:56:12 -07:00

cmd/compile/internal-abi: use x87 mode, not MMX mode

Florian Weimer pointed out that my justification for using MMX mode
was nonsense and that staying in x87 mode simplifies transitions to
and from C. Hence, switch the spec to say we're always in x87 mode.

For #40724.

Change-Id: Iad916b2c376db41f95614aa6897f6b1184576bb7
Reviewed-on: https://go-review.googlesource.com/c/go/+/295789
Trust: Austin Clements <austin@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
This commit is contained in:
Austin Clements 2021-02-23 22:03:29 -05:00
parent bf48163e8f
commit 478277f812

View File

@ -455,13 +455,12 @@ The arithmetic status flags are treated like scratch registers and not
preserved across calls. preserved across calls.
All other bits in RFLAGS are system flags. All other bits in RFLAGS are system flags.
The CPU is always in MMX technology state (not x87 mode). At function calls and returns, the CPU is in x87 mode (not MMX
technology mode).
*Rationale*: Go on amd64 uses the XMM registers and never uses the x87 *Rationale*: Go on amd64 does not use either the x87 registers or MMX
registers, so it makes sense to assume the CPU is in MMX mode. registers. Hence, we follow the SysV platform conventions in order to
Otherwise, any function that used the XMM registers would have to simplify transitions to and from the C ABI.
execute an EMMS instruction before calling another function or
returning (this is the case in the SysV ABI).
At calls, the MXCSR control bits are always set as follows: At calls, the MXCSR control bits are always set as follows: