]> Cypherpunks repositories - gostls13.git/commit
liblink: generate correct code for MOVD $-n(Rm), x on ppc64
authorAustin Clements <austin@google.com>
Thu, 18 Dec 2014 06:08:09 +0000 (01:08 -0500)
committerAustin Clements <austin@google.com>
Thu, 18 Dec 2014 15:31:47 +0000 (15:31 +0000)
commitb21e936f3e88377a41f9a4216453665eed1fe9ca
tree773c26a7f5c19c1c0e5c04dbd944cdc4bc5f801f
parente0e1cee8e96176b7c3ee9804e326469edd22c33f
liblink: generate correct code for MOVD $-n(Rm), x on ppc64

On ppc64, liblink rewrites MOVD's of >32-bit constants by putting the
constant in memory and rewriting the MOVD to load from that memory
address.  However, there were two bugs in the condition:

a) owing to an incorrect sign extension, it triggered for all negative
   constants, and

b) it could trigger for constant offsets from registers (addresses of
   the form $n(Rm) in assembly)

Together, these meant instructions of the form MOVD $-n(Rm), x were
compiled by putting -n in memory and rewriting the MOVD to load this
constant from memory (completely dropping Rm).

Change-Id: I1f6cc980efa3e3d6f164b46c985b2c3b55971cca
Reviewed-on: https://go-review.googlesource.com/1752
Reviewed-by: Minux Ma <minux@golang.org>
src/cmd/9l/9.out.h
src/liblink/obj9.c