Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * sincos.c
- *
- * Demo für sincos direkt auf einer x86 FPU,
- *
- * gcc sincos.c
- *
- * $ ./a.out
- * .4
- * sincos(0.40000000000000002) -> sin: 0.38941834230865052 cos: 0.92106099400288510
- *
- */
- #include <stdio.h>
- void static inline X86FpuSincos(double *a, double *y, double *x){
- asm ("fldl %[a] \n\t" // Winkel auf den Register-Stack der FPU
- "fsincos \n\t" // sin und cos mit einem Befehl in der FPU erzeugen
- "fstpl %[x] \n\t" // Kosinus aus der FPU in die Variable schreiben
- "fstpl %[y]" // Sinus aus der FPU in die Variable schreiben
- :[x] "=m" (*x) , [y] "=m" (*y) // x und y im Assembler als Ausgabe definieren
- :[a] "m" (*a) // a im Assembler als Eingabe definieren
- );
- }
- int main(){
- double y; // Sinus
- double x; // Kosinus
- double a; // Winkel
- scanf ("%lf", &a); // Winkel einlesen
- X86FpuSincos (&a, &y, &x);
- printf ("sincos(%.17lf) -> sin: %.17lf cos: %.17lf\n", a, y, x); // alles ausgeben
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement