• Michael Munday's avatar
    cmd/{asm,internal/obj/s390x}, math: remove emulated float instructions · a5246168
    Michael Munday authored
    The s390x port was based on the ppc64 port and, because of the way the
    port was done, inherited some instructions from it. ppc64 supports
    3-operand (4-operand for FMADD etc.) floating point instructions
    but s390x doesn't (the destination register is always an input) and
    so these were emulated.
    
    There is a bug in the emulation of FMADD whereby if the destination
    register is also a source for the multiplication it will be
    clobbered. This doesn't break any assembly code in the std lib but
    could affect future work.
    
    To fix this I have gone through the floating point instructions and
    removed all unnecessary 3-/4-operand emulation. The compiler doesn't
    need it and assembly writers don't need it, it's just a source of
    bugs.
    
    I've also deleted the FNMADD family of emulated instructions. They
    aren't used anywhere.
    
    Change-Id: Ic07cedcf141a6a3b43a0c84895460f6cfbf56c04
    Reviewed-on: https://go-review.googlesource.com/33350
    Run-TryBot: Michael Munday <munday@ca.ibm.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    a5246168
s390x.go 2.61 KB