]> Cypherpunks repositories - gostls13.git/commit
cmd/{asm,internal/obj/s390x}, math: remove emulated float instructions
authorMichael Munday <munday@ca.ibm.com>
Thu, 17 Nov 2016 16:53:21 +0000 (11:53 -0500)
committerMichael Munday <munday@ca.ibm.com>
Fri, 10 Feb 2017 16:11:25 +0000 (16:11 +0000)
commita52461686013767d9f3e43d1de6eebf6f92fb62c
tree5d7ad12501eecfe7f663fc4e380936295b45edc4
parentf44e58703115af61e7b03416273031d788c076f1
cmd/{asm,internal/obj/s390x}, math: remove emulated float instructions

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: Cherry Zhang <cherryyz@google.com>
src/cmd/asm/internal/arch/s390x.go
src/cmd/asm/internal/asm/testdata/s390x.s
src/cmd/internal/obj/s390x/a.out.go
src/cmd/internal/obj/s390x/anames.go
src/cmd/internal/obj/s390x/asmz.go
src/cmd/internal/obj/s390x/objz.go
src/math/cosh_s390x.s
src/math/log10_s390x.s
src/math/sin_s390x.s
src/math/sinh_s390x.s
src/math/tanh_s390x.s