• Austin Clements's avatar
    liblink: generate correct code for MOVD $-n(Rm), x on ppc64 · b21e936f
    Austin Clements authored
    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/1752Reviewed-by: default avatarMinux Ma <minux@golang.org>
    b21e936f
obj9.c 21 KB