aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Munday <munday@ca.ibm.com>2016-08-26 11:39:47 -0400
committerMichael Munday <munday@ca.ibm.com>2016-08-26 17:27:13 +0000
commit9f7ea616742f8d58ecc140afcb0fa53bcb84fe9b (patch)
treef9392e941446d4fed75eb4dbf25a601f5bbc9813 /src
parentd2dd0dfda813deb27415962656e7a6496170cef3 (diff)
downloadgo-9f7ea616742f8d58ecc140afcb0fa53bcb84fe9b.tar.xz
math: optimize Ceil, Floor and Trunc on s390x
Use the FIDBR instruction to round floating-point numbers to integers. name old time/op new time/op delta Ceil 14.1ns ± 0% 3.0ns ± 0% -78.89% (p=0.000 n=10+10) Floor 6.42ns ± 0% 3.03ns ± 0% -52.80% (p=0.000 n=10+10) Trunc 6.67ns ± 0% 3.03ns ± 0% -54.57% (p=0.000 n=10+9) Change-Id: I3b416f6d0bccaaa9b547de86356471365862399c Reviewed-on: https://go-review.googlesource.com/27827 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/math/floor_s390x.s26
-rw-r--r--src/math/stubs_s390x.s9
2 files changed, 26 insertions, 9 deletions
diff --git a/src/math/floor_s390x.s b/src/math/floor_s390x.s
new file mode 100644
index 0000000000..896e79b807
--- /dev/null
+++ b/src/math/floor_s390x.s
@@ -0,0 +1,26 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#include "textflag.h"
+
+// func Floor(x float64) float64
+TEXT ·Floor(SB),NOSPLIT,$0
+ FMOVD x+0(FP), F0
+ FIDBR $7, F0, F0
+ FMOVD F0, ret+8(FP)
+ RET
+
+// func Ceil(x float64) float64
+TEXT ·Ceil(SB),NOSPLIT,$0
+ FMOVD x+0(FP), F0
+ FIDBR $6, F0, F0
+ FMOVD F0, ret+8(FP)
+ RET
+
+// func Trunc(x float64) float64
+TEXT ·Trunc(SB),NOSPLIT,$0
+ FMOVD x+0(FP), F0
+ FIDBR $5, F0, F0
+ FMOVD F0, ret+8(FP)
+ RET
diff --git a/src/math/stubs_s390x.s b/src/math/stubs_s390x.s
index 76868447cd..c3aed13e87 100644
--- a/src/math/stubs_s390x.s
+++ b/src/math/stubs_s390x.s
@@ -25,15 +25,6 @@ TEXT ·Expm1(SB),NOSPLIT,$0
TEXT ·Exp(SB),NOSPLIT,$0
BR ·exp(SB)
-TEXT ·Floor(SB),NOSPLIT,$0
- BR ·floor(SB)
-
-TEXT ·Ceil(SB),NOSPLIT,$0
- BR ·ceil(SB)
-
-TEXT ·Trunc(SB),NOSPLIT,$0
- BR ·trunc(SB)
-
TEXT ·Frexp(SB),NOSPLIT,$0
BR ·frexp(SB)