Annotate functions with ASM_FUNC() so that they are emitted into separate sections. Note that in some cases, various entry points refer to different parts of the same routine, so in those cases, the files have been left untouched. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
		
			
				
	
	
		
			243 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			243 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #------------------------------------------------------------------------------
 | |
| #
 | |
| # 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.
 | |
| #
 | |
| #------------------------------------------------------------------------------
 | |
| 
 | |
| #include <AsmMacroIoLib.h>
 | |
| 
 | |
|   .syntax unified
 | |
| 
 | |
| ASM_FUNC(__udivmoddi4)
 | |
|   stmfd  sp!, {r4, r5, r6, r7, lr}
 | |
|   add  r7, sp, #12
 | |
|   stmfd  sp!, {r10, r11}
 | |
|   sub  sp, sp, #20
 | |
|   stmia  sp, {r2-r3}
 | |
|   ldr  r6, [sp, #48]
 | |
|   orrs  r2, r2, r3
 | |
|   mov  r10, r0
 | |
|   mov  r11, r1
 | |
|   beq  L2
 | |
|   subs  ip, r1, #0
 | |
|   bne  L4
 | |
|   cmp  r3, #0
 | |
|   bne  L6
 | |
|   cmp  r6, #0
 | |
|   beq  L8
 | |
|   mov  r1, r2
 | |
|   bl  ASM_PFX(__umodsi3)
 | |
|   mov  r1, #0
 | |
|   stmia  r6, {r0-r1}
 | |
| L8:
 | |
|   ldr  r1, [sp, #0]
 | |
|   mov  r0, r10
 | |
|   b  L45
 | |
| L6:
 | |
|   cmp  r6, #0
 | |
|   movne  r1, #0
 | |
|   stmiane  r6, {r0-r1}
 | |
|   b  L2
 | |
| L4:
 | |
|   ldr  r1, [sp, #0]
 | |
|   cmp  r1, #0
 | |
|   bne  L12
 | |
|   ldr  r2, [sp, #4]
 | |
|   cmp  r2, #0
 | |
|   bne  L14
 | |
|   cmp  r6, #0
 | |
|   beq  L16
 | |
|   mov  r1, r2
 | |
|   mov  r0, r11
 | |
|   bl  ASM_PFX(__umodsi3)
 | |
|   mov  r1, #0
 | |
|   stmia  r6, {r0-r1}
 | |
| L16:
 | |
|   ldr  r1, [sp, #4]
 | |
|   mov  r0, r11
 | |
| L45:
 | |
|   bl  ASM_PFX(__udivsi3)
 | |
| L46:
 | |
|   mov  r10, r0
 | |
|   mov  r11, #0
 | |
|   b  L10
 | |
| L14:
 | |
|   subs  r1, r0, #0
 | |
|   bne  L18
 | |
|   cmp  r6, #0
 | |
|   beq  L16
 | |
|   ldr  r1, [sp, #4]
 | |
|   mov  r0, r11
 | |
|   bl  ASM_PFX(__umodsi3)
 | |
|   mov  r4, r10
 | |
|   mov  r5, r0
 | |
|   stmia  r6, {r4-r5}
 | |
|   b  L16
 | |
| L18:
 | |
|   sub  r3, r2, #1
 | |
|   tst  r2, r3
 | |
|   bne  L22
 | |
|   cmp  r6, #0
 | |
|   movne  r4, r0
 | |
|   andne  r5, ip, r3
 | |
|   stmiane  r6, {r4-r5}
 | |
| L24:
 | |
|   rsb  r3, r2, #0
 | |
|   and  r3, r2, r3
 | |
|   clz  r3, r3
 | |
|   rsb  r3, r3, #31
 | |
|   mov  r0, ip, lsr r3
 | |
|   b  L46
 | |
| L22:
 | |
|   clz  r2, r2
 | |
|   clz  r3, ip
 | |
|   rsb  r3, r3, r2
 | |
|   cmp  r3, #30
 | |
|   bhi  L48
 | |
|   rsb  r2, r3, #31
 | |
|   add  lr, r3, #1
 | |
|   mov  r3, r1, asl r2
 | |
|   str  r3, [sp, #12]
 | |
|   mov  r3, r1, lsr lr
 | |
|   ldr  r0, [sp, #0]
 | |
|   mov  r5, ip, lsr lr
 | |
|   orr  r4, r3, ip, asl r2
 | |
|   str  r0, [sp, #8]
 | |
|   b  L29
 | |
| L12:
 | |
|   ldr  r3, [sp, #4]
 | |
|   cmp  r3, #0
 | |
|   bne  L30
 | |
|   sub  r3, r1, #1
 | |
|   tst  r1, r3
 | |
|   bne  L32
 | |
|   cmp  r6, #0
 | |
|   andne  r3, r3, r0
 | |
|   movne  r2, r3
 | |
|   movne  r3, #0
 | |
|   stmiane  r6, {r2-r3}
 | |
| L34:
 | |
|   cmp  r1, #1
 | |
|   beq  L10
 | |
|   rsb  r3, r1, #0
 | |
|   and  r3, r1, r3
 | |
|   clz  r3, r3
 | |
|   rsb  r0, r3, #31
 | |
|   mov  r1, ip, lsr r0
 | |
|   rsb  r3, r0, #32
 | |
|   mov  r0, r10, lsr r0
 | |
|   orr  ip, r0, ip, asl r3
 | |
|   str  r1, [sp, #12]
 | |
|   str  ip, [sp, #8]
 | |
|   ldrd  r10, [sp, #8]
 | |
|   b  L10
 | |
| L32:
 | |
|   clz  r2, r1
 | |
|   clz  r3, ip
 | |
|   rsb  r3, r3, r2
 | |
|   rsb  r4, r3, #31
 | |
|   mov  r2, r0, asl r4
 | |
|   mvn  r1, r3
 | |
|   and  r2, r2, r1, asr #31
 | |
|   add  lr, r3, #33
 | |
|   str  r2, [sp, #8]
 | |
|   add  r2, r3, #1
 | |
|   mov  r3, r3, asr #31
 | |
|   and  r0, r3, r0, asl r1
 | |
|   mov  r3, r10, lsr r2
 | |
|   orr  r3, r3, ip, asl r4
 | |
|   and  r3, r3, r1, asr #31
 | |
|   orr  r0, r0, r3
 | |
|   mov  r3, ip, lsr lr
 | |
|   str  r0, [sp, #12]
 | |
|   mov  r0, r10, lsr lr
 | |
|   and  r5, r3, r2, asr #31
 | |
|   rsb  r3, lr, #31
 | |
|   mov  r3, r3, asr #31
 | |
|   orr  r0, r0, ip, asl r1
 | |
|   and  r3, r3, ip, lsr r2
 | |
|   and  r0, r0, r2, asr #31
 | |
|   orr  r4, r3, r0
 | |
|   b  L29
 | |
| L30:
 | |
|   clz  r2, r3
 | |
|   clz  r3, ip
 | |
|   rsb  r3, r3, r2
 | |
|   cmp  r3, #31
 | |
|   bls  L37
 | |
| L48:
 | |
|   cmp  r6, #0
 | |
|   stmiane  r6, {r10-r11}
 | |
|   b  L2
 | |
| L37:
 | |
|   rsb  r1, r3, #31
 | |
|   mov  r0, r0, asl r1
 | |
|   add  lr, r3, #1
 | |
|   mov  r2, #0
 | |
|   str  r0, [sp, #12]
 | |
|   mov  r0, r10, lsr lr
 | |
|   str  r2, [sp, #8]
 | |
|   sub  r2, r3, #31
 | |
|   and  r0, r0, r2, asr #31
 | |
|   mov  r3, ip, lsr lr
 | |
|   orr  r4, r0, ip, asl r1
 | |
|   and  r5, r3, r2, asr #31
 | |
| L29:
 | |
|   mov  ip, #0
 | |
|   mov  r10, ip
 | |
|   b  L40
 | |
| L41:
 | |
|   ldr  r1, [sp, #12]
 | |
|   ldr  r2, [sp, #8]
 | |
|   mov  r3, r4, lsr #31
 | |
|   orr  r5, r3, r5, asl #1
 | |
|   mov  r3, r1, lsr #31
 | |
|   orr  r4, r3, r4, asl #1
 | |
|   mov  r3, r2, lsr #31
 | |
|   orr  r0, r3, r1, asl #1
 | |
|   orr  r1, ip, r2, asl #1
 | |
|   ldmia  sp, {r2-r3}
 | |
|   str  r0, [sp, #12]
 | |
|   subs  r2, r2, r4
 | |
|   sbc  r3, r3, r5
 | |
|   str  r1, [sp, #8]
 | |
|   subs  r0, r2, #1
 | |
|   sbc  r1, r3, #0
 | |
|   mov  r2, r1, asr #31
 | |
|   ldmia  sp, {r0-r1}
 | |
|   mov  r3, r2
 | |
|   and  ip, r2, #1
 | |
|   and  r3, r3, r1
 | |
|   and  r2, r2, r0
 | |
|   subs  r4, r4, r2
 | |
|   sbc  r5, r5, r3
 | |
|   add  r10, r10, #1
 | |
| L40:
 | |
|   cmp  r10, lr
 | |
|   bne  L41
 | |
|   ldrd  r0, [sp, #8]
 | |
|   adds  r0, r0, r0
 | |
|   adc  r1, r1, r1
 | |
|   cmp  r6, #0
 | |
|   orr  r10, r0, ip
 | |
|   mov  r11, r1
 | |
|   stmiane  r6, {r4-r5}
 | |
|   b  L10
 | |
| L2:
 | |
|   mov  r10, #0
 | |
|   mov  r11, #0
 | |
| L10:
 | |
|   mov  r0, r10
 | |
|   mov  r1, r11
 | |
|   sub  sp, r7, #20
 | |
|   ldmfd  sp!, {r10, r11}
 | |
|   ldmfd  sp!, {r4, r5, r6, r7, pc}
 |