golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
123.82k stars 17.65k forks source link

cmd/asm: change canonical spelling of CMOVLEQ to CMOVL.EQ etc #20173

Open dlespiau opened 7 years ago

dlespiau commented 7 years ago

This proposal is originally from @rsc in issue #14069 and is about CMOVLEQ being ambiguous. I Extracted it as I believe it deserves its own issue.

Recounting this to @aclements I figured out what is going on with CMOVLEQ. The GNU form is CMOV[cond][size] but the form added for Go is CMOV[size][cond]. So GNU's cmovleq is cmov-le-q while Go's CMOVLEQ is CMOV-L-EQ. The Intel syntax has no size suffix and is CMOVEQ/CMOVLE, but it seems clear that Go should not be inserting a size suffix in the middle of the defined opcode name. While in general I feel that we need to put up with past mistakes in our assembly definitions to avoid breaking existing assembly programs, this one seems so egregious and error-prone that I think we have no choice but to change these names for Go 1.7 to match the Intel and GNU syntax.

Unfortunately it seems too late for such a breaking change so the proposal evolved into introducing new aliases like CMOVL.EQ (CMOV%size.%cond) to lift the ambiguity and then, later on, remove the old versions. Maybe.

gopherbot commented 7 years ago

CL https://golang.org/cl/42092 mentions this issue.

rsc commented 7 years ago

At this point I don't think we can rename instructions like this - it will silently change the meaning of existing (one assumes debugged) code. If we need to do something at all, I would suggest adding CMOVL.EQ as an alias for current Go CMOVLEQ, and so on, and then in a later release removing the dot-free variants.

rsc commented 7 years ago

No one replied to previous comment (but two thumbs up) so I'm repurposing for that "clearer new spelling" instead of "change existing meaning" fix.

dlespiau commented 7 years ago

Yes, thank you for renaming the issue. Updated the proposal text accordingly as well.

gopherbot commented 7 years ago

Change https://golang.org/cl/66451 mentions this issue: cmd/asm: add CMOVL.EQ->CMOVLEQ alias

quasilyte commented 6 years ago

Should this be done for 1.11?

Suffixes are used for AVX-512 things, should we reconsider CMOVL.EQ or add additional suffixes for these? (see #22779)

gopherbot commented 5 years ago

Change https://golang.org/cl/171732 mentions this issue: cmd/internal/obj/x86: permit new CMOVL syntax with suffix

ghost commented 5 years ago

Unfortunately it seems too late for such a breaking change so the proposal evolved into introducing new aliases like CMOVL.EQ (CMOV%size.%cond) to lift the ambiguity and then, later on, remove the old versions.

Added an alias CMOVL.EQ for CMOVLEQ. Should probably remove old version in the future.