File: /usr/src/linux/arch/ppc/math-emu/lfs.c

1     /*
2      * BK Id: SCCS/s.lfs.c 1.6 05/17/01 18:14:23 cort
3      */
4     #include <linux/types.h>
5     #include <linux/errno.h>
6     #include <asm/uaccess.h>
7     
8     #include "soft-fp.h"
9     #include "double.h"
10     #include "single.h"
11     
12     int
13     lfs(void *frD, void *ea)
14     {
15     	FP_DECL_D(R);
16     	FP_DECL_S(A);
17     	float f;
18     
19     #ifdef DEBUG
20     	printk("%s: D %p, ea %p\n", __FUNCTION__, frD, ea);
21     #endif
22     
23     	if (copy_from_user(&f, ea, sizeof(float)))
24     		return -EFAULT;
25     
26     	__FP_UNPACK_S(A, &f);
27     
28     #ifdef DEBUG
29     	printk("A: %ld %lu %ld (%ld) [%08lx]\n", A_s, A_f, A_e, A_c,
30     	       *(unsigned long *)&f);
31     #endif
32     
33     	FP_CONV(D, S, 2, 1, R, A);
34     
35     #ifdef DEBUG
36     	printk("R: %ld %lu %lu %ld (%ld)\n", R_s, R_f1, R_f0, R_e, R_c);
37     #endif
38     
39     	return __FP_PACK_D(frD, R);
40     }
41