summaryrefslogtreecommitdiff
path: root/ArmPkg/Library/CompilerIntrinsicsLib/Arm/divdi3.S
blob: 23c8e8ffbf68080979850717849d0f15f04e8cd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#------------------------------------------------------------------------------
#
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution.  The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#------------------------------------------------------------------------------

  .text
  .align 2
  GCC_ASM_EXPORT(__divdi3)

ASM_PFX(__divdi3):
  @ args = 0, pretend = 0, frame = 0
  @ frame_needed = 1, uses_anonymous_args = 0
  stmfd  sp!, {r4, r5, r7, lr}
  mov  r4, r3, asr #31
  add  r7, sp, #8
  stmfd  sp!, {r10, r11}
  mov  r10, r1, asr #31
  sub  sp, sp, #8
  mov  r11, r10
  mov  r5, r4
  eor  r0, r0, r10
  eor  r1, r1, r10
  eor  r2, r2, r4
  eor  r3, r3, r4
  subs  r2, r2, r4
  sbc  r3, r3, r5
  mov  ip, #0
  subs  r0, r0, r10
  sbc  r1, r1, r11
  str  ip, [sp, #0]
  bl  ASM_PFX(__udivmoddi4)
  eor  r2, r10, r4
  eor  r3, r10, r4
  eor  r0, r0, r2
  eor  r1, r1, r3
  subs  r0, r0, r2
  sbc  r1, r1, r3
  sub  sp, r7, #16
  ldmfd  sp!, {r10, r11}
  ldmfd  sp!, {r4, r5, r7, pc}