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