--- /dev/null
+/**\r
+University of Illinois/NCSA\r
+Open Source License\r
+\r
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT\r
+\r
+All rights reserved.\r
+\r
+Developed by:\r
+\r
+ LLVM Team\r
+\r
+ University of Illinois at Urbana-Champaign\r
+\r
+ http://llvm.org\r
+\r
+Permission is hereby granted, free of charge, to any person obtaining a copy of\r
+this software and associated documentation files (the "Software"), to deal with\r
+the Software without restriction, including without limitation the rights to\r
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\r
+of the Software, and to permit persons to whom the Software is furnished to do\r
+so, subject to the following conditions:\r
+\r
+ * Redistributions of source code must retain the above copyright notice,\r
+ this list of conditions and the following disclaimers.\r
+\r
+ * Redistributions in binary form must reproduce the above copyright notice,\r
+ this list of conditions and the following disclaimers in the\r
+ documentation and/or other materials provided with the distribution.\r
+\r
+ * Neither the names of the LLVM Team, University of Illinois at\r
+ Urbana-Champaign, nor the names of its contributors may be used to\r
+ endorse or promote products derived from this Software without specific\r
+ prior written permission.\r
+\r
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE\r
+SOFTWARE.\r
+**/\r
+\r
+#include "int_lib.h"\r
+\r
+/* Returns: convert a to a unsigned int, rounding toward zero.\r
+ * Negative values all become zero.\r
+ */\r
+\r
+/* Assumption: double is a IEEE 64 bit floating point type\r
+ * su_int is a 32 bit integral type\r
+ * value in double is representable in su_int or is negative\r
+ * (no range checking performed)\r
+ */\r
+\r
+/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm */\r
+\r
+ARM_EABI_FNALIAS(d2uiz, fixunsdfsi)\r
+\r
+COMPILER_RT_ABI su_int\r
+__fixunsdfsi(double a)\r
+{\r
+ double_bits fb;\r
+ fb.f = a;\r
+ int e = ((fb.u.s.high & 0x7FF00000) >> 20) - 1023;\r
+ if (e < 0 || (fb.u.s.high & 0x80000000))\r
+ return 0;\r
+ return (\r
+ 0x80000000u |\r
+ ((fb.u.s.high & 0x000FFFFF) << 11) |\r
+ (fb.u.s.low >> 21)\r
+ ) >> (31 - e);\r
+}\r