Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bigint.h"
- #include "bigintprivate.h"
- .global BigInt_add
- .code 32
- BigInt_larger:
- cmp r4, r3 @if (iLength1 > iLength2)
- movlt r4, r3 @iLarger = iLength1;
- b BigInt_for1
- BigInt_add:
- @program initials
- push {r3, r4, r5, r6, r7, lr}
- ldr r4, [r0]
- ldr r3, [r1]
- b BigInt_larger
- cmp r4, #0
- mov lr, r4
- ble exit1 @exit the program
- mov r6, #0
- mov r7, r2
- mov r3, r6
- BigInt_for1:
- cmp r4, #0 @for (i = 0; i < iSumLength; i++)
- mov lr, r4
- ble exit1 @exit the loop
- movs r6, #0
- mov r7, r2
- mov r3, r6
- BigInt_for2:
- adds r6, r6, #1 @i++
- ldr r5, [r0, #4]! @oAddend1->auiDigits[i]
- ldr r4, [r1, #4]! @oAddend2->auiDigits[i];
- add r3, r3, r5 @uiSum += oAddend1->auiDigits[i];
- cmp r5, r3 @if (uiSum < oAddend1->auiDigits[i]
- movls r5, #0 @uiCarry = 0;
- movhi r5, #1 @uiCarry = 1;
- adds r4, r3, r4 @uiSum += oAddend2->auiDigits[i];
- str r4, [r7, #4]!
- movcc r3, r5 @oSum->auiDigits[i] = uiSum;
- movcs r3, #1
- cmp r6, lr @i < iSumLength
- bne BigInt_for2 @new for loop iterration
- cmp r3, #1 @if (uiCarry == 1)
- beq if1
- exit1:
- str lr, [r2]
- movs r0, #1 @return True
- pop {r3, r4, r5, r6, r7, pc} @exit
- if1:
- cmp lr, #32768 @if (iSumLength == MAX_DIGITS)
- beq return_f @return FALSE;
- add r1, r2, lr, lsl #2 @auiDigits[iSumLength]
- add lr, lr, #1 @iSumLength++;
- str r3, [r1, #4] @oSum->auiDigits[iSumLength] = 1;
- str lr, [r2]
- movs r0, #1
- pop {r3, r4, r5, r6, r7, pc}
- return_f:
- movs r0, #0 @return FALSE;
- pop {r3, r4, r5, r6, r7, pc}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement