Skip to content

Commit 3311275

Browse files
labogermundaym
authored andcommitted
math, cmd/internal/obj/ppc64: improve floor, ceil, trunc with asm
This adds the instructions frim, frip, and friz to the ppc64x assembler for use in implementing the math.Floor, math.Ceil, and math.Trunc functions to improve performance. Fixes #17185 BenchmarkCeil-128 21.4 6.99 -67.34% BenchmarkFloor-128 13.9 6.37 -54.17% BenchmarkTrunc-128 12.7 6.33 -50.16% Change-Id: I96131bd4e8c9c8dbafb25bfeb544cf9d2dbb4282 Reviewed-on: https://go-review.googlesource.com/29654 Run-TryBot: Lynn Boger <[email protected]> Reviewed-by: Michael Munday <[email protected]>
1 parent ed915ad commit 3311275

File tree

5 files changed

+55
-9
lines changed

5 files changed

+55
-9
lines changed

src/cmd/internal/obj/ppc64/a.out.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,12 @@ const (
496496
/* optional on 32-bit */
497497
AFRES
498498
AFRESCC
499+
AFRIM
500+
AFRIMCC
501+
AFRIP
502+
AFRIPCC
503+
AFRIZ
504+
AFRIZCC
499505
AFRSQRTE
500506
AFRSQRTECC
501507
AFSEL

src/cmd/internal/obj/ppc64/anames.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,12 @@ var Anames = []string{
229229
"RFCI",
230230
"FRES",
231231
"FRESCC",
232+
"FRIM",
233+
"FRIMCC",
234+
"FRIP",
235+
"FRIPCC",
236+
"FRIZ",
237+
"FRIZCC",
232238
"FRSQRTE",
233239
"FRSQRTECC",
234240
"FSEL",

src/cmd/internal/obj/ppc64/asm9.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,6 +1371,12 @@ func buildop(ctxt *obj.Link) {
13711371
opset(AFCFIDUCC, r0)
13721372
opset(AFRES, r0)
13731373
opset(AFRESCC, r0)
1374+
opset(AFRIM, r0)
1375+
opset(AFRIMCC, r0)
1376+
opset(AFRIP, r0)
1377+
opset(AFRIPCC, r0)
1378+
opset(AFRIZ, r0)
1379+
opset(AFRIZCC, r0)
13741380
opset(AFRSQRTE, r0)
13751381
opset(AFRSQRTECC, r0)
13761382
opset(AFSQRT, r0)
@@ -3173,6 +3179,18 @@ func oprrr(ctxt *obj.Link, a obj.As) uint32 {
31733179
return OPVCC(59, 24, 0, 0)
31743180
case AFRESCC:
31753181
return OPVCC(59, 24, 0, 1)
3182+
case AFRIM:
3183+
return OPVCC(63, 488, 0, 0)
3184+
case AFRIMCC:
3185+
return OPVCC(63, 488, 0, 1)
3186+
case AFRIP:
3187+
return OPVCC(63, 456, 0, 0)
3188+
case AFRIPCC:
3189+
return OPVCC(63, 456, 0, 1)
3190+
case AFRIZ:
3191+
return OPVCC(63, 424, 0, 0)
3192+
case AFRIZCC:
3193+
return OPVCC(63, 424, 0, 1)
31763194
case AFRSP:
31773195
return OPVCC(63, 12, 0, 0)
31783196
case AFRSPCC:

src/math/floor_ppc64x.s

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright 2016 The Go Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
// +build ppc64 ppc64le
6+
7+
#include "textflag.h"
8+
9+
TEXT ·Floor(SB),NOSPLIT,$0
10+
FMOVD x+0(FP), F0
11+
FRIM F0, F0
12+
FMOVD F0, ret+8(FP)
13+
RET
14+
15+
TEXT ·Ceil(SB),NOSPLIT,$0
16+
FMOVD x+0(FP), F0
17+
FRIP F0, F0
18+
FMOVD F0, ret+8(FP)
19+
RET
20+
21+
TEXT ·Trunc(SB),NOSPLIT,$0
22+
FMOVD x+0(FP), F0
23+
FRIZ F0, F0
24+
FMOVD F0, ret+8(FP)
25+
RET

src/math/stubs_ppc64x.s

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,6 @@ TEXT ·Expm1(SB),NOSPLIT,$0
3636
TEXT ·Exp(SB),NOSPLIT,$0
3737
BR ·exp(SB)
3838

39-
TEXT ·Floor(SB),NOSPLIT,$0
40-
BR ·floor(SB)
41-
42-
TEXT ·Ceil(SB),NOSPLIT,$0
43-
BR ·ceil(SB)
44-
45-
TEXT ·Trunc(SB),NOSPLIT,$0
46-
BR ·trunc(SB)
47-
4839
TEXT ·Frexp(SB),NOSPLIT,$0
4940
BR ·frexp(SB)
5041

0 commit comments

Comments
 (0)