/* Round argument toward 0. SH4 version. * According to ISO/IEC 9899:1999. This version doesn't handle range error. * If arg is not finite or if the result cannot be represented into a long, * return an unspecified value. No exception raised. * * Copyright (C) 2010 STMicroelectronics Ltd. * * Author: Christian Bruel * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */ #include ENTRY(lroundf) mov #0,r0 sts fpscr,r3 lds r0,fpscr flds fr5,fpul mov.l LOCAL(mask),r1 sts fpul,r2 and r2,r1 mov.l LOCAL(midway),r2 or r1,r2 lds r2,fpul fsts fpul,fr2 fadd fr2,fr5 ftrc fr5,fpul sts fpul,r0 rts lds r3,fpscr .align 2 LOCAL(mask): .long 0x80000000 LOCAL(midway): .long 1056964608 END(lroundf)