]> Cypherpunks repositories - gostls13.git/commit
runtime/cgo: save correct floating point registers on s390x
authorMichael Munday <munday@ca.ibm.com>
Wed, 23 Nov 2016 19:54:12 +0000 (14:54 -0500)
committerMichael Munday <munday@ca.ibm.com>
Wed, 23 Nov 2016 22:06:06 +0000 (22:06 +0000)
commit06fcc32d1460dce6436e675a978eb269d4a5db26
treef6fed159cb9c08349e134b93eaed67e1b05930ac
parentc2bb52b8304a814b8e2b447953c3341ac31bbee8
runtime/cgo: save correct floating point registers on s390x

When transitioning from C code to Go code we must respect the C
calling convention. On s390x this means that r6-r13, r15 and f8-f15
must be saved and restored by functions that use them.

On s390x we were saving the wrong set of floating point registers
(f0, f2, f4 and f6) rather than f8-f15 which means that Go code
could clobber registers that C code expects to be restored. This
CL modifies the crosscall functions on s390x to save/restore the
correct floating point registers.

Fixes #18035.

Change-Id: I5cc6f552c893a4e677669c8891521bf735492e97
Reviewed-on: https://go-review.googlesource.com/33571
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/asm_s390x.s
src/runtime/cgo/asm_s390x.s
src/runtime/cgo/gcc_s390x.S