| /* |
| * ==================================================== |
| * Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved. |
| * |
| * Permission to use, copy, modify, and distribute this |
| * software is freely granted, provided that this notice |
| * is preserved. |
| * ==================================================== |
| */ |
| |
| #if !defined(_SOFT_FLOAT) |
| |
| /* |
| Fast version of frexpf using Intel float instructions. |
| |
| float _f_frexpf (float x, int *exp); |
| |
| Function splits x into y * 2 ** z. It then |
| returns the value of y and updates *exp with z. |
| There is no error checking or setting of errno. |
| */ |
| |
| #include "i386mach.h" |
| |
| .global SYM (_f_frexpf) |
| SOTYPE_FUNCTION(_f_frexpf) |
| |
| SYM (_f_frexpf): |
| pushl ebp |
| movl esp,ebp |
| flds 8(ebp) |
| movl 12(ebp),eax |
| |
| fxtract |
| fld1 |
| fchs |
| fxch |
| fscale |
| fstp st1 |
| fxch |
| fld1 |
| faddp |
| fistpl 0(eax) |
| |
| leave |
| ret |
| |
| #endif |