• Matthew Dempsky's avatar
    cmd/internal/obj: stop using as+ALAST as an opcode · e8531316
    Matthew Dempsky authored
    Currently, package obj reserves a range of 1<<12 opcodes for each
    target architecture.  E.g., mips64 has [6<<12, 7<<12).
    
    However, because mips.ABEQ and mips.ALAST are both within that range,
    the expression mips.ABEQ+mips.ALAST in turn falls (far) outside that
    range around 12<<12, meaning it could theoretically collide with
    another arch's opcodes.
    
    More practically, it's a problem because 12<<12 overflows an int16,
    which hampers fixing #14692.  (We could also just switch to uint16 to
    avoid the overflow, but that still leaves the first problem.)
    
    As a workaround, use Michael Hudson-Doyle's solution from
    https://golang.org/cl/20182 and use negative values for these variant
    instructions.
    
    Passes toolstash -cmp for GOARCH=arm and GOARCH=mips64.
    
    Updates #14692.
    
    Change-Id: Iad797d10652360109fa4db19d4d1edb6529fc2c0
    Reviewed-on: https://go-review.googlesource.com/20345
    Run-TryBot: Matthew Dempsky <mdempsky@google.com>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    e8531316
Name
Last commit
Last update
..
a.out.go Loading commit data...
anames.go Loading commit data...
anames0.go Loading commit data...
asm0.go Loading commit data...
list0.go Loading commit data...
obj0.go Loading commit data...