Hex Artifact Content
Not logged in

Artifact 3a2ba8c0dc459fa4963aaaf3d196bdcab299b285:


0000: 2f 2f 3d 3d 3d 2d 2d 20 61 65 61 62 69 5f 63 64  //===-- aeabi_cd
0010: 63 6d 70 2e 53 20 2d 20 45 41 42 49 20 63 64 63  cmp.S - EABI cdc
0020: 6d 70 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  mp* implementati
0030: 6f 6e 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  on -------------
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 23  ./assembly.h"..#
0180: 69 66 20 5f 5f 42 59 54 45 5f 4f 52 44 45 52 5f  if __BYTE_ORDER_
0190: 5f 20 21 3d 20 5f 5f 4f 52 44 45 52 5f 4c 49 54  _ != __ORDER_LIT
01a0: 54 4c 45 5f 45 4e 44 49 41 4e 5f 5f 0a 23 65 72  TLE_ENDIAN__.#er
01b0: 72 6f 72 20 62 69 67 20 65 6e 64 69 61 6e 20 73  ror big endian s
01c0: 75 70 70 6f 72 74 20 6e 6f 74 20 69 6d 70 6c 65  upport not imple
01d0: 6d 65 6e 74 65 64 0a 23 65 6e 64 69 66 0a 0a 23  mented.#endif..#
01e0: 64 65 66 69 6e 65 20 41 50 53 52 5f 5a 20 28 31  define APSR_Z (1
01f0: 20 3c 3c 20 33 30 29 0a 23 64 65 66 69 6e 65 20   << 30).#define 
0200: 41 50 53 52 5f 43 20 28 31 20 3c 3c 20 32 39 29  APSR_C (1 << 29)
0210: 0a 0a 2f 2f 20 76 6f 69 64 20 5f 5f 61 65 61 62  ..// void __aeab
0220: 69 5f 63 64 63 6d 70 65 71 28 64 6f 75 62 6c 65  i_cdcmpeq(double
0230: 20 61 2c 20 64 6f 75 62 6c 65 20 62 29 20 7b 0a   a, double b) {.
0240: 2f 2f 20 20 20 69 66 20 28 69 73 6e 61 6e 28 61  //   if (isnan(a
0250: 29 20 7c 7c 20 69 73 6e 61 6e 28 62 29 29 20 7b  ) || isnan(b)) {
0260: 0a 2f 2f 20 20 20 20 20 5a 20 3d 20 30 3b 20 43  .//     Z = 0; C
0270: 20 3d 20 31 3b 0a 2f 2f 20 20 20 7d 20 65 6c 73   = 1;.//   } els
0280: 65 20 7b 0a 2f 2f 20 20 20 20 20 5f 5f 61 65 61  e {.//     __aea
0290: 62 69 5f 63 64 63 6d 70 6c 65 28 61 2c 20 62 29  bi_cdcmple(a, b)
02a0: 3b 0a 2f 2f 20 20 20 7d 0a 2f 2f 20 7d 0a 0a 20  ;.//   }.// }.. 
02b0: 20 20 20 20 20 20 20 2e 73 79 6e 74 61 78 20 75         .syntax u
02c0: 6e 69 66 69 65 64 0a 20 20 20 20 20 20 20 20 2e  nified.        .
02d0: 70 32 61 6c 69 67 6e 20 32 0a 44 45 46 49 4e 45  p2align 2.DEFINE
02e0: 5f 43 4f 4d 50 49 4c 45 52 52 54 5f 46 55 4e 43  _COMPILERRT_FUNC
02f0: 54 49 4f 4e 28 5f 5f 61 65 61 62 69 5f 63 64 63  TION(__aeabi_cdc
0300: 6d 70 65 71 29 0a 20 20 20 20 20 20 20 20 70 75  mpeq).        pu
0310: 73 68 20 7b 72 30 2d 72 33 2c 20 6c 72 7d 0a 20  sh {r0-r3, lr}. 
0320: 20 20 20 20 20 20 20 62 6c 20 5f 5f 61 65 61 62         bl __aeab
0330: 69 5f 63 64 63 6d 70 65 71 5f 63 68 65 63 6b 5f  i_cdcmpeq_check_
0340: 6e 61 6e 0a 20 20 20 20 20 20 20 20 63 6d 70 20  nan.        cmp 
0350: 72 30 2c 20 23 31 0a 20 20 20 20 20 20 20 20 70  r0, #1.        p
0360: 6f 70 20 7b 72 30 2d 72 33 2c 20 6c 72 7d 0a 0a  op {r0-r3, lr}..
0370: 20 20 20 20 20 20 20 20 2f 2f 20 4e 61 4e 20 68          // NaN h
0380: 61 73 20 62 65 65 6e 20 72 75 6c 65 64 20 6f 75  as been ruled ou
0390: 74 2c 20 73 6f 20 5f 5f 61 65 61 62 69 5f 63 64  t, so __aeabi_cd
03a0: 63 6d 70 6c 65 20 63 61 6e 27 74 20 74 72 61 70  cmple can't trap
03b0: 0a 20 20 20 20 20 20 20 20 62 6e 65 20 5f 5f 61  .        bne __a
03c0: 65 61 62 69 5f 63 64 63 6d 70 6c 65 0a 0a 20 20  eabi_cdcmple..  
03d0: 20 20 20 20 20 20 6d 73 72 20 43 50 53 52 5f 66        msr CPSR_f
03e0: 2c 20 23 41 50 53 52 5f 43 0a 20 20 20 20 20 20  , #APSR_C.      
03f0: 20 20 4a 4d 50 28 6c 72 29 0a 45 4e 44 5f 43 4f    JMP(lr).END_CO
0400: 4d 50 49 4c 45 52 52 54 5f 46 55 4e 43 54 49 4f  MPILERRT_FUNCTIO
0410: 4e 28 5f 5f 61 65 61 62 69 5f 63 64 63 6d 70 65  N(__aeabi_cdcmpe
0420: 71 29 0a 0a 0a 2f 2f 20 76 6f 69 64 20 5f 5f 61  q)...// void __a
0430: 65 61 62 69 5f 63 64 63 6d 70 6c 65 28 64 6f 75  eabi_cdcmple(dou
0440: 62 6c 65 20 61 2c 20 64 6f 75 62 6c 65 20 62 29  ble a, double b)
0450: 20 7b 0a 2f 2f 20 20 20 69 66 20 28 5f 5f 61 65   {.//   if (__ae
0460: 61 62 69 5f 64 63 6d 70 6c 74 28 61 2c 20 62 29  abi_dcmplt(a, b)
0470: 29 20 7b 0a 2f 2f 20 20 20 20 20 5a 20 3d 20 30  ) {.//     Z = 0
0480: 3b 20 43 20 3d 20 30 3b 0a 2f 2f 20 20 20 7d 20  ; C = 0;.//   } 
0490: 65 6c 73 65 20 69 66 20 28 5f 5f 61 65 61 62 69  else if (__aeabi
04a0: 5f 64 63 6d 70 65 71 28 61 2c 20 62 29 29 20 7b  _dcmpeq(a, b)) {
04b0: 0a 2f 2f 20 20 20 20 20 5a 20 3d 20 31 3b 20 43  .//     Z = 1; C
04c0: 20 3d 20 31 3b 0a 2f 2f 20 20 20 7d 20 65 6c 73   = 1;.//   } els
04d0: 65 20 7b 0a 2f 2f 20 20 20 20 20 5a 20 3d 20 30  e {.//     Z = 0
04e0: 3b 20 43 20 3d 20 31 3b 0a 2f 2f 20 20 20 7d 0a  ; C = 1;.//   }.
04f0: 2f 2f 20 7d 0a 0a 20 20 20 20 20 20 20 20 2e 73  // }..        .s
0500: 79 6e 74 61 78 20 75 6e 69 66 69 65 64 0a 20 20  yntax unified.  
0510: 20 20 20 20 20 20 2e 70 32 61 6c 69 67 6e 20 32        .p2align 2
0520: 0a 44 45 46 49 4e 45 5f 43 4f 4d 50 49 4c 45 52  .DEFINE_COMPILER
0530: 52 54 5f 46 55 4e 43 54 49 4f 4e 28 5f 5f 61 65  RT_FUNCTION(__ae
0540: 61 62 69 5f 63 64 63 6d 70 6c 65 29 0a 20 20 20  abi_cdcmple).   
0550: 20 20 20 20 20 2f 2f 20 50 65 72 20 74 68 65 20       // Per the 
0560: 52 54 41 42 49 2c 20 74 68 69 73 20 66 75 6e 63  RTABI, this func
0570: 74 69 6f 6e 20 6d 75 73 74 20 70 72 65 73 65 72  tion must preser
0580: 76 65 20 72 30 2d 72 31 31 2e 0a 20 20 20 20 20  ve r0-r11..     
0590: 20 20 20 2f 2f 20 53 61 76 65 20 6c 72 20 69 6e     // Save lr in
05a0: 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75   the same instru
05b0: 63 74 69 6f 6e 20 66 6f 72 20 63 6f 6d 70 61 63  ction for compac
05c0: 74 6e 65 73 73 0a 20 20 20 20 20 20 20 20 70 75  tness.        pu
05d0: 73 68 20 7b 72 30 2d 72 33 2c 20 6c 72 7d 0a 0a  sh {r0-r3, lr}..
05e0: 20 20 20 20 20 20 20 20 62 6c 20 5f 5f 61 65 61          bl __aea
05f0: 62 69 5f 64 63 6d 70 6c 74 0a 20 20 20 20 20 20  bi_dcmplt.      
0600: 20 20 63 6d 70 20 72 30 2c 20 23 31 0a 20 20 20    cmp r0, #1.   
0610: 20 20 20 20 20 6d 6f 76 65 71 20 69 70 2c 20 23       moveq ip, #
0620: 30 0a 20 20 20 20 20 20 20 20 62 65 71 20 31 66  0.        beq 1f
0630: 0a 0a 20 20 20 20 20 20 20 20 6c 64 6d 20 73 70  ..        ldm sp
0640: 2c 20 7b 72 30 2d 72 33 7d 0a 20 20 20 20 20 20  , {r0-r3}.      
0650: 20 20 62 6c 20 5f 5f 61 65 61 62 69 5f 64 63 6d    bl __aeabi_dcm
0660: 70 65 71 0a 20 20 20 20 20 20 20 20 63 6d 70 20  peq.        cmp 
0670: 72 30 2c 20 23 31 0a 20 20 20 20 20 20 20 20 6d  r0, #1.        m
0680: 6f 76 65 71 20 69 70 2c 20 23 28 41 50 53 52 5f  oveq ip, #(APSR_
0690: 43 20 7c 20 41 50 53 52 5f 5a 29 0a 20 20 20 20  C | APSR_Z).    
06a0: 20 20 20 20 6d 6f 76 6e 65 20 69 70 2c 20 23 28      movne ip, #(
06b0: 41 50 53 52 5f 43 29 0a 0a 31 3a 0a 20 20 20 20  APSR_C)..1:.    
06c0: 20 20 20 20 6d 73 72 20 43 50 53 52 5f 66 2c 20      msr CPSR_f, 
06d0: 69 70 0a 20 20 20 20 20 20 20 20 70 6f 70 20 7b  ip.        pop {
06e0: 72 30 2d 72 33 7d 0a 20 20 20 20 20 20 20 20 50  r0-r3}.        P
06f0: 4f 50 5f 50 43 28 29 0a 45 4e 44 5f 43 4f 4d 50  OP_PC().END_COMP
0700: 49 4c 45 52 52 54 5f 46 55 4e 43 54 49 4f 4e 28  ILERRT_FUNCTION(
0710: 5f 5f 61 65 61 62 69 5f 63 64 63 6d 70 6c 65 29  __aeabi_cdcmple)
0720: 0a 0a 2f 2f 20 69 6e 74 20 5f 5f 61 65 61 62 69  ..// int __aeabi
0730: 5f 63 64 72 63 6d 70 6c 65 28 64 6f 75 62 6c 65  _cdrcmple(double
0740: 20 61 2c 20 64 6f 75 62 6c 65 20 62 29 20 7b 0a   a, double b) {.
0750: 2f 2f 20 20 20 72 65 74 75 72 6e 20 5f 5f 61 65  //   return __ae
0760: 61 62 69 5f 63 64 63 6d 70 6c 65 28 62 2c 20 61  abi_cdcmple(b, a
0770: 29 3b 0a 2f 2f 20 7d 0a 0a 20 20 20 20 20 20 20  );.// }..       
0780: 20 2e 73 79 6e 74 61 78 20 75 6e 69 66 69 65 64   .syntax unified
0790: 0a 20 20 20 20 20 20 20 20 2e 70 32 61 6c 69 67  .        .p2alig
07a0: 6e 20 32 0a 44 45 46 49 4e 45 5f 43 4f 4d 50 49  n 2.DEFINE_COMPI
07b0: 4c 45 52 52 54 5f 46 55 4e 43 54 49 4f 4e 28 5f  LERRT_FUNCTION(_
07c0: 5f 61 65 61 62 69 5f 63 64 72 63 6d 70 6c 65 29  _aeabi_cdrcmple)
07d0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 53 77 61 70  .        // Swap
07e0: 20 72 30 20 61 6e 64 20 72 32 0a 20 20 20 20 20   r0 and r2.     
07f0: 20 20 20 6d 6f 76 20 69 70 2c 20 72 30 0a 20 20     mov ip, r0.  
0800: 20 20 20 20 20 20 6d 6f 76 20 72 30 2c 20 72 32        mov r0, r2
0810: 0a 20 20 20 20 20 20 20 20 6d 6f 76 20 72 32 2c  .        mov r2,
0820: 20 69 70 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20   ip..        // 
0830: 53 77 61 70 20 72 31 20 61 6e 64 20 72 33 0a 20  Swap r1 and r3. 
0840: 20 20 20 20 20 20 20 6d 6f 76 20 69 70 2c 20 72         mov ip, r
0850: 31 0a 20 20 20 20 20 20 20 20 6d 6f 76 20 72 31  1.        mov r1
0860: 2c 20 72 33 0a 20 20 20 20 20 20 20 20 6d 6f 76  , r3.        mov
0870: 20 72 33 2c 20 69 70 0a 0a 20 20 20 20 20 20 20   r3, ip..       
0880: 20 62 20 5f 5f 61 65 61 62 69 5f 63 64 63 6d 70   b __aeabi_cdcmp
0890: 6c 65 0a 45 4e 44 5f 43 4f 4d 50 49 4c 45 52 52  le.END_COMPILERR
08a0: 54 5f 46 55 4e 43 54 49 4f 4e 28 5f 5f 61 65 61  T_FUNCTION(__aea
08b0: 62 69 5f 63 64 72 63 6d 70 6c 65 29 0a 0a 4e 4f  bi_cdrcmple)..NO
08c0: 5f 45 58 45 43 5f 53 54 41 43 4b 5f 44 49 52 45  _EXEC_STACK_DIRE
08d0: 43 54 49 56 45 0a 0a                             CTIVE..