129c788c4Smickey /* 229c788c4Smickey * Written by Michael Shalayeff. Public Domain 329c788c4Smickey */ 429c788c4Smickey 529c788c4Smickey #include <sys/types.h> 629c788c4Smickey #include <machine/ieeefp.h> 729c788c4Smickey #include "math.h" 829c788c4Smickey 929c788c4Smickey float 10b11582bcSmickey ceilf(float x) 1129c788c4Smickey { 120c764565Smickey u_int64_t ofpsr, fpsr; 1329c788c4Smickey 14*b5aa3b33Sguenther __asm__ volatile("fstds %%fr0,0(%0)" :: "r" (&ofpsr) : "memory"); 150c764565Smickey fpsr = (ofpsr & ~((u_int64_t)FP_RM << (9 + 32))) | 160c764565Smickey ((u_int64_t)FP_RP << (9 + 32)); 17*b5aa3b33Sguenther __asm__ volatile("fldds 0(%0), %%fr0" :: "r" (&fpsr) : "memory"); 1829c788c4Smickey 19*b5aa3b33Sguenther __asm__ volatile("frnd,sgl %0,%0" : "+f" (x)); 2029c788c4Smickey 21*b5aa3b33Sguenther __asm__ volatile("fldds 0(%0), %%fr0" :: "r" (&ofpsr) : "memory"); 2229c788c4Smickey return (x); 2329c788c4Smickey } 24