/*
* mpvecadd(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *sum)
*
* sum[0:alen] = a[0:alen-1] + b[0:blen-1]
*
* prereq: alen >= blen, sum has room for alen+1 digits
*
* R3 == a (first arg passed in R3)
* R4 == alen
* R5 == b
* R6 == blen
* R7 == sum
* R8 == temporary
* R9 == temporary
*/
TEXT mpvecadd(SB),$-4
MOVW alen+4(FP), R4
MOVW b+8(FP), R5
MOVW blen+12(FP), R6
MOVW sum+16(FP), R7
SUB R6, R4 /* calculate counter for second loop (alen > blen) */
SUB $4, R3 /* pre decrement for MOVWU's */
SUB $4, R5 /* pre decrement for MOVWU's */
SUB $4, R7 /* pre decrement for MOVWU's */
MOVW R0, XER /* zero carry going in */
/* if blen == 0, don't need to add it in */
CMP R0, R6
BEQ _add1