Home | History | Annotate | Download | only in Arm
      1 #------------------------------------------------------------------------------
      2 #
      3 # Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
      4 #
      5 # This program and the accompanying materials
      6 # are licensed and made available under the terms and conditions of the BSD License
      7 # which accompanies this distribution.  The full text of the license may be found at
      8 # http://opensource.org/licenses/bsd-license.php
      9 #
     10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 #
     13 #------------------------------------------------------------------------------
     14 
     15   .text
     16   .syntax unified
     17   .align 2
     18   GCC_ASM_EXPORT(__udivmoddi4)
     19 
     20 ASM_PFX(__udivmoddi4):
     21   stmfd  sp!, {r4, r5, r6, r7, lr}
     22   add  r7, sp, #12
     23   stmfd  sp!, {r10, r11}
     24   sub  sp, sp, #20
     25   stmia  sp, {r2-r3}
     26   ldr  r6, [sp, #48]
     27   orrs  r2, r2, r3
     28   mov  r10, r0
     29   mov  r11, r1
     30   beq  L2
     31   subs  ip, r1, #0
     32   bne  L4
     33   cmp  r3, #0
     34   bne  L6
     35   cmp  r6, #0
     36   beq  L8
     37   mov  r1, r2
     38   bl  ASM_PFX(__umodsi3)
     39   mov  r1, #0
     40   stmia  r6, {r0-r1}
     41 L8:
     42   ldr  r1, [sp, #0]
     43   mov  r0, r10
     44   b  L45
     45 L6:
     46   cmp  r6, #0
     47   movne  r1, #0
     48   stmiane  r6, {r0-r1}
     49   b  L2
     50 L4:
     51   ldr  r1, [sp, #0]
     52   cmp  r1, #0
     53   bne  L12
     54   ldr  r2, [sp, #4]
     55   cmp  r2, #0
     56   bne  L14
     57   cmp  r6, #0
     58   beq  L16
     59   mov  r1, r2
     60   mov  r0, r11
     61   bl  ASM_PFX(__umodsi3)
     62   mov  r1, #0
     63   stmia  r6, {r0-r1}
     64 L16:
     65   ldr  r1, [sp, #4]
     66   mov  r0, r11
     67 L45:
     68   bl  ASM_PFX(__udivsi3)
     69 L46:
     70   mov  r10, r0
     71   mov  r11, #0
     72   b  L10
     73 L14:
     74   subs  r1, r0, #0
     75   bne  L18
     76   cmp  r6, #0
     77   beq  L16
     78   ldr  r1, [sp, #4]
     79   mov  r0, r11
     80   bl  ASM_PFX(__umodsi3)
     81   mov  r4, r10
     82   mov  r5, r0
     83   stmia  r6, {r4-r5}
     84   b  L16
     85 L18:
     86   sub  r3, r2, #1
     87   tst  r2, r3
     88   bne  L22
     89   cmp  r6, #0
     90   movne  r4, r0
     91   andne  r5, ip, r3
     92   stmiane  r6, {r4-r5}
     93 L24:
     94   rsb  r3, r2, #0
     95   and  r3, r2, r3
     96   clz  r3, r3
     97   rsb  r3, r3, #31
     98   mov  r0, ip, lsr r3
     99   b  L46
    100 L22:
    101   clz  r2, r2
    102   clz  r3, ip
    103   rsb  r3, r3, r2
    104   cmp  r3, #30
    105   bhi  L48
    106   rsb  r2, r3, #31
    107   add  lr, r3, #1
    108   mov  r3, r1, asl r2
    109   str  r3, [sp, #12]
    110   mov  r3, r1, lsr lr
    111   ldr  r0, [sp, #0]
    112   mov  r5, ip, lsr lr
    113   orr  r4, r3, ip, asl r2
    114   str  r0, [sp, #8]
    115   b  L29
    116 L12:
    117   ldr  r3, [sp, #4]
    118   cmp  r3, #0
    119   bne  L30
    120   sub  r3, r1, #1
    121   tst  r1, r3
    122   bne  L32
    123   cmp  r6, #0
    124   andne  r3, r3, r0
    125   movne  r2, r3
    126   movne  r3, #0
    127   stmiane  r6, {r2-r3}
    128 L34:
    129   cmp  r1, #1
    130   beq  L10
    131   rsb  r3, r1, #0
    132   and  r3, r1, r3
    133   clz  r3, r3
    134   rsb  r0, r3, #31
    135   mov  r1, ip, lsr r0
    136   rsb  r3, r0, #32
    137   mov  r0, r10, lsr r0
    138   orr  ip, r0, ip, asl r3
    139   str  r1, [sp, #12]
    140   str  ip, [sp, #8]
    141   ldrd  r10, [sp, #8]
    142   b  L10
    143 L32:
    144   clz  r2, r1
    145   clz  r3, ip
    146   rsb  r3, r3, r2
    147   rsb  r4, r3, #31
    148   mov  r2, r0, asl r4
    149   mvn  r1, r3
    150   and  r2, r2, r1, asr #31
    151   add  lr, r3, #33
    152   str  r2, [sp, #8]
    153   add  r2, r3, #1
    154   mov  r3, r3, asr #31
    155   and  r0, r3, r0, asl r1
    156   mov  r3, r10, lsr r2
    157   orr  r3, r3, ip, asl r4
    158   and  r3, r3, r1, asr #31
    159   orr  r0, r0, r3
    160   mov  r3, ip, lsr lr
    161   str  r0, [sp, #12]
    162   mov  r0, r10, lsr lr
    163   and  r5, r3, r2, asr #31
    164   rsb  r3, lr, #31
    165   mov  r3, r3, asr #31
    166   orr  r0, r0, ip, asl r1
    167   and  r3, r3, ip, lsr r2
    168   and  r0, r0, r2, asr #31
    169   orr  r4, r3, r0
    170   b  L29
    171 L30:
    172   clz  r2, r3
    173   clz  r3, ip
    174   rsb  r3, r3, r2
    175   cmp  r3, #31
    176   bls  L37
    177 L48:
    178   cmp  r6, #0
    179   stmiane  r6, {r10-r11}
    180   b  L2
    181 L37:
    182   rsb  r1, r3, #31
    183   mov  r0, r0, asl r1
    184   add  lr, r3, #1
    185   mov  r2, #0
    186   str  r0, [sp, #12]
    187   mov  r0, r10, lsr lr
    188   str  r2, [sp, #8]
    189   sub  r2, r3, #31
    190   and  r0, r0, r2, asr #31
    191   mov  r3, ip, lsr lr
    192   orr  r4, r0, ip, asl r1
    193   and  r5, r3, r2, asr #31
    194 L29:
    195   mov  ip, #0
    196   mov  r10, ip
    197   b  L40
    198 L41:
    199   ldr  r1, [sp, #12]
    200   ldr  r2, [sp, #8]
    201   mov  r3, r4, lsr #31
    202   orr  r5, r3, r5, asl #1
    203   mov  r3, r1, lsr #31
    204   orr  r4, r3, r4, asl #1
    205   mov  r3, r2, lsr #31
    206   orr  r0, r3, r1, asl #1
    207   orr  r1, ip, r2, asl #1
    208   ldmia  sp, {r2-r3}
    209   str  r0, [sp, #12]
    210   subs  r2, r2, r4
    211   sbc  r3, r3, r5
    212   str  r1, [sp, #8]
    213   subs  r0, r2, #1
    214   sbc  r1, r3, #0
    215   mov  r2, r1, asr #31
    216   ldmia  sp, {r0-r1}
    217   mov  r3, r2
    218   and  ip, r2, #1
    219   and  r3, r3, r1
    220   and  r2, r2, r0
    221   subs  r4, r4, r2
    222   sbc  r5, r5, r3
    223   add  r10, r10, #1
    224 L40:
    225   cmp  r10, lr
    226   bne  L41
    227   ldrd  r0, [sp, #8]
    228   adds  r0, r0, r0
    229   adc  r1, r1, r1
    230   cmp  r6, #0
    231   orr  r10, r0, ip
    232   mov  r11, r1
    233   stmiane  r6, {r4-r5}
    234   b  L10
    235 L2:
    236   mov  r10, #0
    237   mov  r11, #0
    238 L10:
    239   mov  r0, r10
    240   mov  r1, r11
    241   sub  sp, r7, #20
    242   ldmfd  sp!, {r10, r11}
    243   ldmfd  sp!, {r4, r5, r6, r7, pc}
    244