Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1906 | serge | 1 | #include |
2 | #include |
||
3 | |||
4 | float |
||
5 | truncf (float _x) |
||
6 | { |
||
7 | float retval; |
||
8 | unsigned short saved_cw; |
||
9 | unsigned short tmp_cw; |
||
10 | __asm__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */ |
||
11 | tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO)) |
||
12 | | FE_TOWARDZERO; |
||
13 | __asm__ ("fldcw %0;" : : "m" (tmp_cw)); |
||
14 | __asm__ ("frndint;" : "=t" (retval) : "0" (_x)); /* round towards zero */ |
||
15 | __asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */ |
||
16 | return retval; |
||
17 | } |