diff options
author | Paul Mackerras <paulus@samba.org> | 2006-03-28 17:03:19 +1100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-03-28 17:03:19 +1100 |
commit | cf66c897d7fa07f57452b1a369aec37d97b11e31 (patch) | |
tree | eb74b71c2ff288f4d77423bb7e54c3c55ef08bf9 /arch/powerpc/math-emu/types.c | |
parent | facee873de8da5fe709c194f98eb0f2cc642a38c (diff) | |
parent | 78af90629ce98c8383ea16928e110eb97b889be6 (diff) |
Merge branch '85xx' of git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc
Diffstat (limited to 'arch/powerpc/math-emu/types.c')
-rw-r--r-- | arch/powerpc/math-emu/types.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/arch/powerpc/math-emu/types.c b/arch/powerpc/math-emu/types.c new file mode 100644 index 00000000000..e1ed15d829d --- /dev/null +++ b/arch/powerpc/math-emu/types.c @@ -0,0 +1,51 @@ +#include "soft-fp.h" +#include "double.h" +#include "single.h" + +void +fp_unpack_d(long *_s, unsigned long *_f1, unsigned long *_f0, + long *_e, long *_c, void *val) +{ + FP_DECL_D(X); + + __FP_UNPACK_RAW_2(D, X, val); + + _FP_UNPACK_CANONICAL(D, 2, X); + + *_s = X_s; + *_f1 = X_f1; + *_f0 = X_f0; + *_e = X_e; + *_c = X_c; +} + +int +fp_pack_d(void *val, long X_s, unsigned long X_f1, + unsigned long X_f0, long X_e, long X_c) +{ + int exc; + + exc = _FP_PACK_CANONICAL(D, 2, X); + if (!exc || !__FPU_TRAP_P(exc)) + __FP_PACK_RAW_2(D, val, X); + return exc; +} + +int +fp_pack_ds(void *val, long X_s, unsigned long X_f1, + unsigned long X_f0, long X_e, long X_c) +{ + FP_DECL_S(__X); + int exc; + + FP_CONV(S, D, 1, 2, __X, X); + exc = _FP_PACK_CANONICAL(S, 1, __X); + if (!exc || !__FPU_TRAP_P(exc)) { + _FP_UNPACK_CANONICAL(S, 1, __X); + FP_CONV(D, S, 2, 1, X, __X); + exc |= _FP_PACK_CANONICAL(D, 2, X); + if (!exc || !__FPU_TRAP_P(exc)) + __FP_PACK_RAW_2(D, val, X); + } + return exc; +} |