mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
cmd/compile: add BVC/BVS to branch ops in ppc64/prog.go
Includes test case shown to fail with unpatched compiler. Fixes #17005. Change-Id: I49b7b1a3f02736d85846a2588018b73f68d50320 Reviewed-on: https://go-review.googlesource.com/28573 Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Minux Ma <minux@golang.org>
This commit is contained in:
parent
8737dac1f2
commit
a6edffb286
|
@ -112,6 +112,8 @@ var progtable = [ppc64.ALAST & obj.AMask]obj.ProgInfo{
|
|||
// Jumps
|
||||
ppc64.ABR & obj.AMask: {Flags: gc.Jump | gc.Break},
|
||||
ppc64.ABL & obj.AMask: {Flags: gc.Call},
|
||||
ppc64.ABVS & obj.AMask: {Flags: gc.Cjmp},
|
||||
ppc64.ABVC & obj.AMask: {Flags: gc.Cjmp},
|
||||
ppc64.ABEQ & obj.AMask: {Flags: gc.Cjmp},
|
||||
ppc64.ABNE & obj.AMask: {Flags: gc.Cjmp},
|
||||
ppc64.ABGE & obj.AMask: {Flags: gc.Cjmp},
|
||||
|
|
46
test/fixedbugs/issue17005.go
Normal file
46
test/fixedbugs/issue17005.go
Normal file
|
@ -0,0 +1,46 @@
|
|||
// compile
|
||||
|
||||
// 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.
|
||||
|
||||
// This tickles (a version of) the PPC64 back end to
|
||||
// emit a BVS instruction.
|
||||
|
||||
package foo
|
||||
|
||||
type Flag int
|
||||
|
||||
const (
|
||||
Identity Flag = iota - 2 // H is the identity matrix; no rotation is needed.
|
||||
Rescaling // H specifies rescaling.
|
||||
)
|
||||
|
||||
type DrotmParams struct {
|
||||
Flag
|
||||
}
|
||||
|
||||
func Drotmg(d1, d2, x1, y1 float64) (p DrotmParams, rd1, rd2, rx1 float64) {
|
||||
|
||||
const (
|
||||
gam = 4.0
|
||||
gamsq = 16.0
|
||||
rgamsq = 5e-8
|
||||
)
|
||||
|
||||
if d1 < 0 {
|
||||
p.Flag = Rescaling
|
||||
return
|
||||
}
|
||||
|
||||
for rd1 <= rgamsq || rd1 >= gamsq {
|
||||
if rd1 <= rgamsq {
|
||||
rd1 *= gam * gam
|
||||
rx1 /= gam
|
||||
} else {
|
||||
rd1 /= gam * gam
|
||||
rx1 *= gam
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
Loading…
Reference in a new issue