if n.Left.Op == ONAME && n.Left.Sym.Name == "Sqrt" && n.Left.Sym.Pkg.Path == "math" {
switch Thearch.Thechar {
- case '5', '6', '7':
+ case '5', '6', '7', '9':
n.Op = OSQRT
n.Left = n.List.First()
n.List.Set(nil)
OCMP_ = uint32(gc.OCMP) << 16
OAS_ = uint32(gc.OAS) << 16
OHMUL_ = uint32(gc.OHMUL) << 16
+ OSQRT_ = uint32(gc.OSQRT) << 16
)
a := obj.AXXX
case ODIV_ | gc.TFLOAT64:
a = ppc64.AFDIV
+
+ case OSQRT_ | gc.TFLOAT64:
+ a = ppc64.AFSQRT
}
return a
ppc64.AFMOVD,
ppc64.AFRSP,
ppc64.AFNEG,
- ppc64.AFNEGCC:
+ ppc64.AFNEGCC,
+ ppc64.AFSQRT:
if s != nil {
if copysub(&p.From, v, s, true) {
return 1
ppc64.AFCFID & obj.AMask: {Flags: gc.SizeF | gc.LeftRead | gc.RegRead | gc.RightWrite},
ppc64.AFCMPU & obj.AMask: {Flags: gc.SizeD | gc.LeftRead | gc.RightRead},
ppc64.AFRSP & obj.AMask: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite | gc.Conv},
+ ppc64.AFSQRT & obj.AMask: {Flags: gc.SizeD | gc.LeftRead | gc.RightWrite},
// Moves
ppc64.AMOVB & obj.AMask: {Flags: gc.SizeB | gc.LeftRead | gc.RightWrite | gc.Move | gc.Conv},
--- /dev/null
+// 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.
+
+// +build ppc64 ppc64le
+
+#include "textflag.h"
+
+// func Sqrt(x float64) float64
+TEXT ·Sqrt(SB),NOSPLIT,$0
+ FMOVD x+0(FP), F0
+ FSQRT F0, F0
+ FMOVD F0, ret+8(FP)
+ RET
TEXT ·Cos(SB),NOSPLIT,$0
BR ·cos(SB)
-TEXT ·Sqrt(SB),NOSPLIT,$0
- BR ·sqrt(SB)
-
TEXT ·Tan(SB),NOSPLIT,$0
BR ·tan(SB)