1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Marginally test fprem/fprem1/fsincos; these are hard to check 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown otherwise since compilers hardly ever generate them. */ 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browndouble do_fprem ( void ) 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double res; 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__( 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "ffree %%st(0)\n\t" 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "ffree %%st(1)\n\t" 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fldpi\n\t" 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fldln2\n\t" 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fprem\n\t" 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fstpl 0(%0)" 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&res) 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return res; 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browndouble do_fprem1 ( void ) 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double res; 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__( 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "ffree %%st(0)\n\t" 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "ffree %%st(1)\n\t" 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fldpi\n\t" 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fldln2\n\t" 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fprem1\n\t" 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fstpl 0(%0)" 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&res) 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return res; 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browndouble do_fsincos ( void ) 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown double res; 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__( 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fldln2\n\t" 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fsincos\n\t" 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fsub %%st(1)\n\t" 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "fstpl 0(%0)" 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&res) 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return res; 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void ) 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__("finit"); 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("fprem %f\n", do_fprem()); 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("fprem1 %f\n", do_fprem1()); 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("fsincos %f\n", do_fsincos()); 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 58