https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
		
			
				
	
	
		
			262 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			262 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| //
 | |
| // Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
 | |
| //
 | |
| // SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| //
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| 
 | |
| 
 | |
|   .text
 | |
|   .align 2
 | |
|   GCC_ASM_EXPORT(__aeabi_uldivmod)
 | |
| 
 | |
| //
 | |
| //UINT64
 | |
| //EFIAPI
 | |
| //__aeabi_uldivmod (
 | |
| //  IN  UINT64   Dividend
 | |
| //  IN  UINT64   Divisor
 | |
| //  )
 | |
| //
 | |
| ASM_PFX(__aeabi_uldivmod):
 | |
|   stmdb   sp!, {r4, r5, r6, lr}
 | |
|   mov     r4, r1
 | |
|   mov     r5, r0
 | |
|   mov     r6, #0  // 0x0
 | |
|   orrs    ip, r3, r2, lsr #31
 | |
|   bne     ASM_PFX(__aeabi_uldivmod_label1)
 | |
|   tst     r2, r2
 | |
|   beq     ASM_PFX(_ll_div0)
 | |
|   movs    ip, r2, lsr #15
 | |
|   addeq   r6, r6, #16     // 0x10
 | |
|   mov     ip, r2, lsl r6
 | |
|   movs    lr, ip, lsr #23
 | |
|   moveq   ip, ip, lsl #8
 | |
|   addeq   r6, r6, #8      // 0x8
 | |
|   movs    lr, ip, lsr #27
 | |
|   moveq   ip, ip, lsl #4
 | |
|   addeq   r6, r6, #4      // 0x4
 | |
|   movs    lr, ip, lsr #29
 | |
|   moveq   ip, ip, lsl #2
 | |
|   addeq   r6, r6, #2      // 0x2
 | |
|   movs    lr, ip, lsr #30
 | |
|   moveq   ip, ip, lsl #1
 | |
|   addeq   r6, r6, #1      // 0x1
 | |
|   b       ASM_PFX(_ll_udiv_small)
 | |
| ASM_PFX(__aeabi_uldivmod_label1):
 | |
|   tst     r3, #-2147483648        // 0x80000000
 | |
|   bne     ASM_PFX(__aeabi_uldivmod_label2)
 | |
|   movs    ip, r3, lsr #15
 | |
|   addeq   r6, r6, #16     // 0x10
 | |
|   mov     ip, r3, lsl r6
 | |
|   movs    lr, ip, lsr #23
 | |
|   moveq   ip, ip, lsl #8
 | |
|   addeq   r6, r6, #8      // 0x8
 | |
|   movs    lr, ip, lsr #27
 | |
|   moveq   ip, ip, lsl #4
 | |
|   addeq   r6, r6, #4      // 0x4
 | |
|   movs    lr, ip, lsr #29
 | |
|   moveq   ip, ip, lsl #2
 | |
|   addeq   r6, r6, #2      // 0x2
 | |
|   movs    lr, ip, lsr #30
 | |
|   addeq   r6, r6, #1      // 0x1
 | |
|   rsb     r3, r6, #32     // 0x20
 | |
|   moveq   ip, ip, lsl #1
 | |
|   orr     ip, ip, r2, lsr r3
 | |
|   mov     lr, r2, lsl r6
 | |
|   b       ASM_PFX(_ll_udiv_big)
 | |
| ASM_PFX(__aeabi_uldivmod_label2):
 | |
|   mov     ip, r3
 | |
|   mov     lr, r2
 | |
|   b       ASM_PFX(_ll_udiv_ginormous)
 | |
| 
 | |
| ASM_PFX(_ll_udiv_small):
 | |
|   cmp     r4, ip, lsl #1
 | |
|   mov     r3, #0  // 0x0
 | |
|   subcs   r4, r4, ip, lsl #1
 | |
|   addcs   r3, r3, #2      // 0x2
 | |
|   cmp     r4, ip
 | |
|   subcs   r4, r4, ip
 | |
|   adcs    r3, r3, #0      // 0x0
 | |
|   add     r2, r6, #32     // 0x20
 | |
|   cmp     r2, #32 // 0x20
 | |
|   rsb     ip, ip, #0      // 0x0
 | |
|   bcc     ASM_PFX(_ll_udiv_small_label1)
 | |
|   orrs    r0, r4, r5, lsr #30
 | |
|   moveq   r4, r5
 | |
|   moveq   r5, #0  // 0x0
 | |
|   subeq   r2, r2, #32     // 0x20
 | |
| ASM_PFX(_ll_udiv_small_label1):
 | |
|   mov     r1, #0  // 0x0
 | |
|   cmp     r2, #16 // 0x10
 | |
|   bcc     ASM_PFX(_ll_udiv_small_label2)
 | |
|   movs    r0, r4, lsr #14
 | |
|   moveq   r4, r4, lsl #16
 | |
|   addeq   r1, r1, #16     // 0x10
 | |
| ASM_PFX(_ll_udiv_small_label2):
 | |
|   sub     lr, r2, r1
 | |
|   cmp     lr, #8  // 0x8
 | |
|   bcc     ASM_PFX(_ll_udiv_small_label3)
 | |
|   movs    r0, r4, lsr #22
 | |
|   moveq   r4, r4, lsl #8
 | |
|   addeq   r1, r1, #8      // 0x8
 | |
| ASM_PFX(_ll_udiv_small_label3):
 | |
|   rsb     r0, r1, #32     // 0x20
 | |
|   sub     r2, r2, r1
 | |
|   orr     r4, r4, r5, lsr r0
 | |
|   mov     r5, r5, lsl r1
 | |
|   cmp     r2, #1  // 0x1
 | |
|   bcc     ASM_PFX(_ll_udiv_small_label5)
 | |
|   sub     r2, r2, #1      // 0x1
 | |
|   and     r0, r2, #7      // 0x7
 | |
|   eor     r0, r0, #7      // 0x7
 | |
|   adds    r0, r0, r0, lsl #1
 | |
|   add     pc, pc, r0, lsl #2
 | |
|   nop                     // (mov r0,r0)
 | |
| ASM_PFX(_ll_udiv_small_label4):
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, ip, r4, lsl #1
 | |
|   rsbcc   r4, ip, r4
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, ip, r4, lsl #1
 | |
|   rsbcc   r4, ip, r4
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, ip, r4, lsl #1
 | |
|   rsbcc   r4, ip, r4
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, ip, r4, lsl #1
 | |
|   rsbcc   r4, ip, r4
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, ip, r4, lsl #1
 | |
|   rsbcc   r4, ip, r4
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, ip, r4, lsl #1
 | |
|   rsbcc   r4, ip, r4
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, ip, r4, lsl #1
 | |
|   rsbcc   r4, ip, r4
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, ip, r4, lsl #1
 | |
|   sub     r2, r2, #8      // 0x8
 | |
|   tst     r2, r2
 | |
|   rsbcc   r4, ip, r4
 | |
|   bpl     ASM_PFX(_ll_udiv_small_label4)
 | |
| ASM_PFX(_ll_udiv_small_label5):
 | |
|   mov     r2, r4, lsr r6
 | |
|   bic     r4, r4, r2, lsl r6
 | |
|   adcs    r0, r5, r5
 | |
|   adc     r1, r4, r4
 | |
|   add     r1, r1, r3, lsl r6
 | |
|   mov     r3, #0  // 0x0
 | |
|   ldmia   sp!, {r4, r5, r6, pc}
 | |
| 
 | |
| ASM_PFX(_ll_udiv_big):
 | |
|   subs    r0, r5, lr
 | |
|   mov     r3, #0  // 0x0
 | |
|   sbcs    r1, r4, ip
 | |
|   movcs   r5, r0
 | |
|   movcs   r4, r1
 | |
|   adcs    r3, r3, #0      // 0x0
 | |
|   subs    r0, r5, lr
 | |
|   sbcs    r1, r4, ip
 | |
|   movcs   r5, r0
 | |
|   movcs   r4, r1
 | |
|   adcs    r3, r3, #0      // 0x0
 | |
|   subs    r0, r5, lr
 | |
|   sbcs    r1, r4, ip
 | |
|   movcs   r5, r0
 | |
|   movcs   r4, r1
 | |
|   adcs    r3, r3, #0      // 0x0
 | |
|   mov     r1, #0  // 0x0
 | |
|   rsbs    lr, lr, #0      // 0x0
 | |
|   rsc     ip, ip, #0      // 0x0
 | |
|   cmp     r6, #16 // 0x10
 | |
|   bcc     ASM_PFX(_ll_udiv_big_label1)
 | |
|   movs    r0, r4, lsr #14
 | |
|   moveq   r4, r4, lsl #16
 | |
|   addeq   r1, r1, #16     // 0x10
 | |
| ASM_PFX(_ll_udiv_big_label1):
 | |
|   sub     r2, r6, r1
 | |
|   cmp     r2, #8  // 0x8
 | |
|   bcc     ASM_PFX(_ll_udiv_big_label2)
 | |
|   movs    r0, r4, lsr #22
 | |
|   moveq   r4, r4, lsl #8
 | |
|   addeq   r1, r1, #8      // 0x8
 | |
| ASM_PFX(_ll_udiv_big_label2):
 | |
|   rsb     r0, r1, #32     // 0x20
 | |
|   sub     r2, r6, r1
 | |
|   orr     r4, r4, r5, lsr r0
 | |
|   mov     r5, r5, lsl r1
 | |
|   cmp     r2, #1  // 0x1
 | |
|   bcc     ASM_PFX(_ll_udiv_big_label4)
 | |
|   sub     r2, r2, #1      // 0x1
 | |
|   and     r0, r2, #3      // 0x3
 | |
|   rsb     r0, r0, #3      // 0x3
 | |
|   adds    r0, r0, r0, lsl #1
 | |
|   add     pc, pc, r0, lsl #3
 | |
|   nop                     // (mov r0,r0)
 | |
| ASM_PFX(_ll_udiv_big_label3):
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, r4, r4
 | |
|   adcs    r0, lr, r5
 | |
|   adcs    r1, ip, r4
 | |
|   movcs   r5, r0
 | |
|   movcs   r4, r1
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, r4, r4
 | |
|   adcs    r0, lr, r5
 | |
|   adcs    r1, ip, r4
 | |
|   movcs   r5, r0
 | |
|   movcs   r4, r1
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, r4, r4
 | |
|   adcs    r0, lr, r5
 | |
|   adcs    r1, ip, r4
 | |
|   movcs   r5, r0
 | |
|   movcs   r4, r1
 | |
|   sub     r2, r2, #4      // 0x4
 | |
|   adcs    r5, r5, r5
 | |
|   adcs    r4, r4, r4
 | |
|   adcs    r0, lr, r5
 | |
|   adcs    r1, ip, r4
 | |
|   tst     r2, r2
 | |
|   movcs   r5, r0
 | |
|   movcs   r4, r1
 | |
|   bpl     ASM_PFX(_ll_udiv_big_label3)
 | |
| ASM_PFX(_ll_udiv_big_label4):
 | |
|   mov     r1, #0  // 0x0
 | |
|   mov     r2, r5, lsr r6
 | |
|   bic     r5, r5, r2, lsl r6
 | |
|   adcs    r0, r5, r5
 | |
|   adc     r1, r1, #0      // 0x0
 | |
|   movs    lr, r3, lsl r6
 | |
|   mov     r3, r4, lsr r6
 | |
|   bic     r4, r4, r3, lsl r6
 | |
|   adc     r1, r1, #0      // 0x0
 | |
|   adds    r0, r0, lr
 | |
|   orr     r2, r2, r4, ror r6
 | |
|   adc     r1, r1, #0      // 0x0
 | |
|   ldmia   sp!, {r4, r5, r6, pc}
 | |
| 
 | |
| ASM_PFX(_ll_udiv_ginormous):
 | |
|   subs    r2, r5, lr
 | |
|   mov     r1, #0  // 0x0
 | |
|   sbcs    r3, r4, ip
 | |
|   adc     r0, r1, r1
 | |
|   movcc   r2, r5
 | |
|   movcc   r3, r4
 | |
|   ldmia   sp!, {r4, r5, r6, pc}
 | |
| 
 | |
| ASM_PFX(_ll_div0):
 | |
|   ldmia   sp!, {r4, r5, r6, lr}
 | |
|   mov     r0, #0  // 0x0
 | |
|   mov     r1, #0  // 0x0
 | |
|   b       ASM_PFX(__aeabi_ldiv0)
 | |
| 
 | |
| ASM_PFX(__aeabi_ldiv0):
 | |
|   bx      r14
 | |
| 
 | |
| 
 |