| // 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 | |
| } |