Hex Artifact Content
Not logged in

Artifact 65fc7724a6d21adb31328e695dc2ac3aae8b825f:


0000: 2f 2f 3d 3d 3d 2d 2d 20 75 6e 6f 72 64 73 66 32  //===-- unordsf2
0010: 76 66 70 2e 53 20 2d 20 49 6d 70 6c 65 6d 65 6e  vfp.S - Implemen
0020: 74 20 75 6e 6f 72 64 73 66 32 76 66 70 20 2d 2d  t unordsf2vfp --
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 3d 3d 3d 2f 2f  -----------===//
0050: 0a 2f 2f 0a 2f 2f 20 20 20 20 20 20 20 20 20 20  .//.//          
0060: 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20 4c             The L
0070: 4c 56 4d 20 43 6f 6d 70 69 6c 65 72 20 49 6e 66  LVM Compiler Inf
0080: 72 61 73 74 72 75 63 74 75 72 65 0a 2f 2f 0a 2f  rastructure.//./
0090: 2f 20 54 68 69 73 20 66 69 6c 65 20 69 73 20 64  / This file is d
00a0: 75 61 6c 20 6c 69 63 65 6e 73 65 64 20 75 6e 64  ual licensed und
00b0: 65 72 20 74 68 65 20 4d 49 54 20 61 6e 64 20 74  er the MIT and t
00c0: 68 65 20 55 6e 69 76 65 72 73 69 74 79 20 6f 66  he University of
00d0: 20 49 6c 6c 69 6e 6f 69 73 20 4f 70 65 6e 0a 2f   Illinois Open./
00e0: 2f 20 53 6f 75 72 63 65 20 4c 69 63 65 6e 73 65  / Source License
00f0: 73 2e 20 53 65 65 20 4c 49 43 45 4e 53 45 2e 54  s. See LICENSE.T
0100: 58 54 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  XT for details..
0110: 2f 2f 0a 2f 2f 3d 3d 3d 2d 2d 2d 2d 2d 2d 2d 2d  //.//===--------
0120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 3d 3d  --------------==
0160: 3d 2f 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 22 2e  =//..#include ".
0170: 2e 2f 61 73 73 65 6d 62 6c 79 2e 68 22 0a 0a 2f  ./assembly.h"../
0180: 2f 0a 2f 2f 20 65 78 74 65 72 6e 20 69 6e 74 20  /.// extern int 
0190: 5f 5f 75 6e 6f 72 64 73 66 32 76 66 70 28 66 6c  __unordsf2vfp(fl
01a0: 6f 61 74 20 61 2c 20 66 6c 6f 61 74 20 62 29 3b  oat a, float b);
01b0: 0a 2f 2f 0a 2f 2f 20 52 65 74 75 72 6e 73 20 6f  .//.// Returns o
01c0: 6e 65 20 69 66 66 20 61 20 6f 72 20 62 20 69 73  ne iff a or b is
01d0: 20 4e 61 4e 0a 2f 2f 20 55 73 65 73 20 44 61 72   NaN.// Uses Dar
01e0: 77 69 6e 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76  win calling conv
01f0: 65 6e 74 69 6f 6e 20 77 68 65 72 65 20 73 69 6e  ention where sin
0200: 67 6c 65 20 70 72 65 63 69 73 69 6f 6e 20 61 72  gle precision ar
0210: 67 75 6d 65 6e 74 73 20 61 72 65 20 70 61 73 73  guments are pass
0220: 73 65 64 20 0a 2f 2f 20 6c 69 6b 65 20 33 32 2d  sed .// like 32-
0230: 62 69 74 20 69 6e 74 73 0a 2f 2f 0a 09 2e 73 79  bit ints.//...sy
0240: 6e 74 61 78 20 75 6e 69 66 69 65 64 0a 09 2e 70  ntax unified...p
0250: 32 61 6c 69 67 6e 20 32 0a 44 45 46 49 4e 45 5f  2align 2.DEFINE_
0260: 43 4f 4d 50 49 4c 45 52 52 54 5f 46 55 4e 43 54  COMPILERRT_FUNCT
0270: 49 4f 4e 28 5f 5f 75 6e 6f 72 64 73 66 32 76 66  ION(__unordsf2vf
0280: 70 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28 43  p).#if defined(C
0290: 4f 4d 50 49 4c 45 52 5f 52 54 5f 41 52 4d 48 46  OMPILER_RT_ARMHF
02a0: 5f 54 41 52 47 45 54 29 0a 09 76 63 6d 70 2e 66  _TARGET)..vcmp.f
02b0: 33 32 20 73 30 2c 20 73 31 0a 23 65 6c 73 65 0a  32 s0, s1.#else.
02c0: 09 76 6d 6f 76 09 73 31 34 2c 20 72 30 20 20 20  .vmov.s14, r0   
02d0: 20 20 2f 2f 20 6d 6f 76 65 20 66 72 6f 6d 20 47    // move from G
02e0: 50 52 20 30 20 74 6f 20 66 6c 6f 61 74 20 72 65  PR 0 to float re
02f0: 67 69 73 74 65 72 0a 09 76 6d 6f 76 09 73 31 35  gister..vmov.s15
0300: 2c 20 72 31 09 20 20 20 20 2f 2f 20 6d 6f 76 65  , r1.    // move
0310: 20 66 72 6f 6d 20 47 50 52 20 31 20 74 6f 20 66   from GPR 1 to f
0320: 6c 6f 61 74 20 72 65 67 69 73 74 65 72 0a 09 76  loat register..v
0330: 63 6d 70 2e 66 33 32 20 73 31 34 2c 20 73 31 35  cmp.f32 s14, s15
0340: 0a 23 65 6e 64 69 66 0a 09 76 6d 72 73 09 61 70  .#endif..vmrs.ap
0350: 73 72 5f 6e 7a 63 76 2c 20 66 70 73 63 72 0a 09  sr_nzcv, fpscr..
0360: 6d 6f 76 76 73 09 72 30 2c 20 23 31 20 20 20 20  movvs.r0, #1    
0370: 20 20 2f 2f 20 73 65 74 20 72 65 73 75 6c 74 20    // set result 
0380: 72 65 67 69 73 74 65 72 20 74 6f 20 31 20 69 66  register to 1 if
0390: 20 22 6f 76 65 72 66 6c 6f 77 22 20 28 61 6e 79   "overflow" (any
03a0: 20 4e 61 4e 73 29 0a 09 6d 6f 76 76 63 09 72 30   NaNs)..movvc.r0
03b0: 2c 20 23 30 0a 09 62 78 09 6c 72 0a 45 4e 44 5f  , #0..bx.lr.END_
03c0: 43 4f 4d 50 49 4c 45 52 52 54 5f 46 55 4e 43 54  COMPILERRT_FUNCT
03d0: 49 4f 4e 28 5f 5f 75 6e 6f 72 64 73 66 32 76 66  ION(__unordsf2vf
03e0: 70 29 0a 0a 4e 4f 5f 45 58 45 43 5f 53 54 41 43  p)..NO_EXEC_STAC
03f0: 4b 5f 44 49 52 45 43 54 49 56 45 0a 0a           K_DIRECTIVE..