summaryrefslogtreecommitdiff
path: root/ArmPkg/Library/CompilerIntrinsicsLib/Arm/divdi3.S
blob: c6a889a8b45187083f9c101e2d69f0ffb5842557 (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
50
#------------------------------------------------------------------------------ 
#
# 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
	.globl ASM_PFX(__divdi3)
  INTERWORK_FUNC(__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}