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