Success! Thanks to everyone who helped me out. This was a great
little project to learn about inline assembly in GCC. For those of
you who are interested, here's the final product:
inline double DiffAngle(double theta1, double theta2)
{
double TWO_PI __attribute__ ((aligned (16)))(2 * M_PI),
NEG_TWO_PI __attribute__ ((aligned (16)))(-TWO_PI);
double delta(theta1 - theta2);
asm("cmpnlesd %0, %1\n\t"
"cmpltsd %0, %2\n\t"
"andpd %3, %1\n\t"
"andpd %4, %2\n\t"
"addsd %1, %0\n\t"
"addsd %2, %0\n\t"
: "+x" (delta)
: "x" (M_PI),
"x" (-M_PI),
"m" (TWO_PI),
"m" (NEG_TWO_PI)
:
);
return delta;
}
One final question - is it possible to declare TWO_PI and NEG_TWO_PI
as const? And, if so, what constraint would I use? Right now, if I
declare them const, I get the error "memory input 3 is not directly
addressable".
Thanks,
Bill
_______________________________________________
help-gplusplus mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-gplusplus