1/*
2 * BK Id: SCCS/s.types.c 1.5 05/17/01 18:14:23 cort
3 */
4
5#include "soft-fp.h"
6#include "double.h"
7#include "single.h"
8
9void
10fp_unpack_d(long *_s, unsigned long *_f1, unsigned long *_f0,
11	    long *_e, long *_c, void *val)
12{
13	FP_DECL_D(X);
14
15	__FP_UNPACK_RAW_2(D, X, val);
16
17	_FP_UNPACK_CANONICAL(D, 2, X);
18
19	*_s = X_s;
20	*_f1 = X_f1;
21	*_f0 = X_f0;
22	*_e = X_e;
23	*_c = X_c;
24}
25
26int
27fp_pack_d(void *val, long X_s, unsigned long X_f1,
28	  unsigned long X_f0, long X_e, long X_c)
29{
30	int exc;
31
32	exc = _FP_PACK_CANONICAL(D, 2, X);
33	if (!exc || !__FPU_TRAP_P(exc))
34		__FP_PACK_RAW_2(D, val, X);
35	return exc;
36}
37
38int
39fp_pack_ds(void *val, long X_s, unsigned long X_f1,
40	   unsigned long X_f0, long X_e, long X_c)
41{
42	FP_DECL_S(__X);
43	int exc;
44
45	FP_CONV(S, D, 1, 2, __X, X);
46	exc = _FP_PACK_CANONICAL(S, 1, __X);
47	if (!exc || !__FPU_TRAP_P(exc)) {
48		_FP_UNPACK_CANONICAL(S, 1, __X);
49		FP_CONV(D, S, 2, 1, X, __X);
50		exc |= _FP_PACK_CANONICAL(D, 2, X);
51		if (!exc || !__FPU_TRAP_P(exc))
52			__FP_PACK_RAW_2(D, val, X);
53	}
54	return exc;
55}
56