15cd27208SKumar Gala #include <linux/types.h> 25cd27208SKumar Gala #include <linux/errno.h> 35cd27208SKumar Gala #include <asm/uaccess.h> 45cd27208SKumar Gala 55cd27208SKumar Gala #include "soft-fp.h" 65cd27208SKumar Gala #include "double.h" 75cd27208SKumar Gala #include "single.h" 85cd27208SKumar Gala 95cd27208SKumar Gala int 105cd27208SKumar Gala lfs(void *frD, void *ea) 115cd27208SKumar Gala { 125cd27208SKumar Gala FP_DECL_D(R); 135cd27208SKumar Gala FP_DECL_S(A); 145cd27208SKumar Gala float f; 155cd27208SKumar Gala 165cd27208SKumar Gala #ifdef DEBUG 17e48b1b45SHarvey Harrison printk("%s: D %p, ea %p\n", __func__, frD, ea); 185cd27208SKumar Gala #endif 195cd27208SKumar Gala 205cd27208SKumar Gala if (copy_from_user(&f, ea, sizeof(float))) 215cd27208SKumar Gala return -EFAULT; 225cd27208SKumar Gala 235cd27208SKumar Gala __FP_UNPACK_S(A, &f); 245cd27208SKumar Gala 255cd27208SKumar Gala #ifdef DEBUG 265cd27208SKumar Gala printk("A: %ld %lu %ld (%ld) [%08lx]\n", A_s, A_f, A_e, A_c, 275cd27208SKumar Gala *(unsigned long *)&f); 285cd27208SKumar Gala #endif 295cd27208SKumar Gala 305cd27208SKumar Gala FP_CONV(D, S, 2, 1, R, A); 315cd27208SKumar Gala 325cd27208SKumar Gala #ifdef DEBUG 335cd27208SKumar Gala printk("R: %ld %lu %lu %ld (%ld)\n", R_s, R_f1, R_f0, R_e, R_c); 345cd27208SKumar Gala #endif 355cd27208SKumar Gala 365cd27208SKumar Gala return __FP_PACK_D(frD, R); 375cd27208SKumar Gala } 38