12 for (i
= 0; i
< NUM
; i
++)
14 src
[i
] = (i
+ 1)* f
* M_PI
* sign
;
20 else if (i
== (NUM
/ 2))
22 else if ((i
% 6) == 0)
23 f
= 1 / (f
* (i
+ 1) * src
[i
] * M_PI
*sign
);
29 do_round (FP_T f
, int type
)
31 short saved_cw
, new_cw
, clr_mask
;
41 type
= 0x003F | ((type
& 3) << 10);
45 __asm__ ("fld" ASM_SUFFIX
" %0" : : "m" (*&f
));
47 __asm__ ("fstcw %0" : "=m" (*&saved_cw
));
48 new_cw
= saved_cw
& clr_mask
;
50 __asm__ ("fldcw %0" : : "m" (*&new_cw
));
53 "fstp" ASM_SUFFIX
" %0\n" : "=m" (*&ret
));
54 __asm__ ("fldcw %0" : : "m" (*&saved_cw
));
65 VEC_T x
[NUM
/ LOOP_INCREMENT
];
71 for (i
= 0; i
< NUM
/ LOOP_INCREMENT
; i
++)
72 dst
.x
[i
] = ROUND_INTRIN (src
.x
[i
], ROUND_MODE
);
74 for (i
= 0; i
< NUM
; i
+= CHECK_LOOP_INCREMENT
)
76 f
= do_round (src
.f
[i
], CHECK_ROUND_MODE
);
81 if (_MM_FROUND_TO_NEAREST_INT
!= 0x00
82 || _MM_FROUND_TO_NEG_INF
!= 0x01
83 || _MM_FROUND_TO_POS_INF
!= 0x02
84 || _MM_FROUND_TO_ZERO
!= 0x03
85 || _MM_FROUND_CUR_DIRECTION
!= 0x04
86 || _MM_FROUND_RAISE_EXC
!= 0x00
87 || _MM_FROUND_NO_EXC
!= 0x08
88 || _MM_FROUND_NINT
!= 0x00
89 || _MM_FROUND_FLOOR
!= 0x01
90 || _MM_FROUND_CEIL
!= 0x02
91 || _MM_FROUND_TRUNC
!= 0x03
92 || _MM_FROUND_RINT
!= 0x04
93 || _MM_FROUND_NEARBYINT
!= 0x0C)