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 unsigned short saved_cw
, new_cw
, clr_mask
;
41 type
= 0x003F | ((type
& 3) << 10);
45 __asm__ ("fnstcw %0" : "=m" (saved_cw
));
47 new_cw
= saved_cw
& clr_mask
;
50 __asm__ ("fldcw %2\n\t"
52 "fldcw %3" : "=t" (ret
)
53 : "0" (f
), "m" (new_cw
), "m" (saved_cw
));
64 VEC_T x
[NUM
/ LOOP_INCREMENT
];
70 for (i
= 0; i
< NUM
/ LOOP_INCREMENT
; i
++)
71 dst
.x
[i
] = ROUND_INTRIN (src
.x
[i
], ROUND_MODE
);
73 for (i
= 0; i
< NUM
; i
+= CHECK_LOOP_INCREMENT
)
75 f
= do_round (src
.f
[i
], CHECK_ROUND_MODE
);
80 if (_MM_FROUND_TO_NEAREST_INT
!= 0x00
81 || _MM_FROUND_TO_NEG_INF
!= 0x01
82 || _MM_FROUND_TO_POS_INF
!= 0x02
83 || _MM_FROUND_TO_ZERO
!= 0x03
84 || _MM_FROUND_CUR_DIRECTION
!= 0x04
85 || _MM_FROUND_RAISE_EXC
!= 0x00
86 || _MM_FROUND_NO_EXC
!= 0x08
87 || _MM_FROUND_NINT
!= 0x00
88 || _MM_FROUND_FLOOR
!= 0x01
89 || _MM_FROUND_CEIL
!= 0x02
90 || _MM_FROUND_TRUNC
!= 0x03
91 || _MM_FROUND_RINT
!= 0x04
92 || _MM_FROUND_NEARBYINT
!= 0x0C)