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 stfs(void *frS, void *ea) 115cd27208SKumar Gala { 125cd27208SKumar Gala FP_DECL_D(A); 135cd27208SKumar Gala FP_DECL_S(R); 145cd27208SKumar Gala float f; 155cd27208SKumar Gala int err; 165cd27208SKumar Gala 175cd27208SKumar Gala #ifdef DEBUG 18*e48b1b45SHarvey Harrison printk("%s: S %p, ea %p\n", __func__, frS, ea); 195cd27208SKumar Gala #endif 205cd27208SKumar Gala 215cd27208SKumar Gala __FP_UNPACK_D(A, frS); 225cd27208SKumar Gala 235cd27208SKumar Gala #ifdef DEBUG 245cd27208SKumar Gala printk("A: %ld %lu %lu %ld (%ld)\n", A_s, A_f1, A_f0, A_e, A_c); 255cd27208SKumar Gala #endif 265cd27208SKumar Gala 275cd27208SKumar Gala FP_CONV(S, D, 1, 2, R, A); 285cd27208SKumar Gala 295cd27208SKumar Gala #ifdef DEBUG 305cd27208SKumar Gala printk("R: %ld %lu %ld (%ld)\n", R_s, R_f, R_e, R_c); 315cd27208SKumar Gala #endif 325cd27208SKumar Gala 335cd27208SKumar Gala err = _FP_PACK_CANONICAL(S, 1, R); 345cd27208SKumar Gala if (!err || !__FPU_TRAP_P(err)) { 355cd27208SKumar Gala __FP_PACK_RAW_1(S, &f, R); 365cd27208SKumar Gala if (copy_to_user(ea, &f, sizeof(float))) 375cd27208SKumar Gala return -EFAULT; 385cd27208SKumar Gala } 395cd27208SKumar Gala 405cd27208SKumar Gala return err; 415cd27208SKumar Gala } 42