Made square asm better.

This commit is contained in:
Ken MacKay
2014-03-04 21:15:34 -08:00
parent 412ace6b61
commit 86a33b4334
2 changed files with 80 additions and 175 deletions
+66 -165
View File
@@ -2414,13 +2414,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r2, r5 \n\t" "mul r2, r5 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r3, r4 \n\t" "mul r3, r4 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -2433,13 +2430,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r2, r6 \n\t" "mul r2, r6 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r3, r5 \n\t" "mul r3, r5 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -2456,13 +2450,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r2, r7 \n\t" "mul r2, r7 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r3, r6 \n\t" "mul r3, r6 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -2479,13 +2470,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r2, r8 \n\t" "mul r2, r8 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r3, r7 \n\t" "mul r3, r7 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -2506,13 +2494,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r2, r9 \n\t" "mul r2, r9 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r3, r8 \n\t" "mul r3, r8 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -2533,13 +2518,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r2, r10 \n\t" "mul r2, r10 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r3, r9 \n\t" "mul r3, r9 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -2564,13 +2546,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r2, r11 \n\t" "mul r2, r11 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r3, r10 \n\t" "mul r3, r10 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -2595,13 +2574,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r2, r12 \n\t" "mul r2, r12 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r3, r11 \n\t" "mul r3, r11 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -2630,13 +2606,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r2, r13 \n\t" "mul r2, r13 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r3, r12 \n\t" "mul r3, r12 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -2665,13 +2638,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r2, r14 \n\t" "mul r2, r14 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r3, r13 \n\t" "mul r3, r13 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -2704,13 +2674,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r2, r15 \n\t" "mul r2, r15 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r3, r14 \n\t" "mul r3, r14 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -2743,13 +2710,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r2, r16 \n\t" "mul r2, r16 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r3, r15 \n\t" "mul r3, r15 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -2786,13 +2750,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r2, r17 \n\t" "mul r2, r17 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r3, r16 \n\t" "mul r3, r16 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -2829,13 +2790,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r2, r18 \n\t" "mul r2, r18 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r3, r17 \n\t" "mul r3, r17 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -2876,13 +2834,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r2, r19 \n\t" "mul r2, r19 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r3, r18 \n\t" "mul r3, r18 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -2923,13 +2878,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r2, r20 \n\t" "mul r2, r20 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r3, r19 \n\t" "mul r3, r19 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -2974,13 +2926,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r2, r21 \n\t" "mul r2, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r3, r20 \n\t" "mul r3, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -3025,13 +2974,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r3, r21 \n\t" "mul r3, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r4, r20 \n\t" "mul r4, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -3076,13 +3022,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r4, r21 \n\t" "mul r4, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r5, r20 \n\t" "mul r5, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -3123,13 +3066,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r5, r21 \n\t" "mul r5, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r6, r20 \n\t" "mul r6, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -3170,13 +3110,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r6, r21 \n\t" "mul r6, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r7, r20 \n\t" "mul r7, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -3213,13 +3150,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r7, r21 \n\t" "mul r7, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r8, r20 \n\t" "mul r8, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -3256,13 +3190,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r8, r21 \n\t" "mul r8, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r9, r20 \n\t" "mul r9, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -3295,13 +3226,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r9, r21 \n\t" "mul r9, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r10, r20 \n\t" "mul r10, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -3334,13 +3262,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r10, r21 \n\t" "mul r10, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r11, r20 \n\t" "mul r11, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -3369,13 +3294,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r11, r21 \n\t" "mul r11, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r12, r20 \n\t" "mul r12, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -3404,13 +3326,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r12, r21 \n\t" "mul r12, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r13, r20 \n\t" "mul r13, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -3435,13 +3354,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r13, r21 \n\t" "mul r13, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r14, r20 \n\t" "mul r14, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -3466,13 +3382,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r14, r21 \n\t" "mul r14, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r15, r20 \n\t" "mul r15, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -3493,13 +3406,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r15, r21 \n\t" "mul r15, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r16, r20 \n\t" "mul r16, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -3520,13 +3430,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r16, r21 \n\t" "mul r16, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r17, r20 \n\t" "mul r17, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
@@ -3543,13 +3450,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r26, r27 \n\t" "adc r26, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r24, 0 \n\t"
"ldi r22, 0 \n\t" "ldi r22, 0 \n\t"
"mul r17, r21 \n\t" "mul r17, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r24, r1 \n\t" "mov r24, r1 \n\t"
"adc r22, r27 \n\t"
"mul r18, r20 \n\t" "mul r18, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r24, r1 \n\t" "adc r24, r1 \n\t"
@@ -3566,13 +3470,10 @@ static void vli_square(uint8_t *p_result, uint8_t *p_left)
"adc r22, r27 \n\t" "adc r22, r27 \n\t"
"st z+, r23 \n\t" "st z+, r23 \n\t"
"ldi r23, 0 \n\t"
"ldi r25, 0 \n\t"
"ldi r26, 0 \n\t" "ldi r26, 0 \n\t"
"mul r18, r21 \n\t" "mul r18, r21 \n\t"
"add r23, r0 \n\t" "mov r23, r0 \n\t"
"adc r25, r1 \n\t" "mov r25, r1 \n\t"
"adc r26, r27 \n\t"
"mul r19, r20 \n\t" "mul r19, r20 \n\t"
"add r23, r0 \n\t" "add r23, r0 \n\t"
"adc r25, r1 \n\t" "adc r25, r1 \n\t"
+14 -10
View File
@@ -48,8 +48,6 @@ print ""
acc = [23, 24, 22] acc = [23, 24, 22]
old_acc = [25, 26] old_acc = [25, 26]
for i in xrange(3, 20): for i in xrange(3, 20):
emit("ldi r%s, 0", acc[0])
emit("ldi r%s, 0", old_acc[0])
emit("ldi r%s, 0", old_acc[1]) emit("ldi r%s, 0", old_acc[1])
tmp = [acc[1], acc[2]] tmp = [acc[1], acc[2]]
acc = [acc[0], old_acc[0], old_acc[1]] acc = [acc[0], old_acc[0], old_acc[1]]
@@ -58,9 +56,13 @@ for i in xrange(3, 20):
# gather non-equal words # gather non-equal words
for j in xrange(0, (i+1)//2): for j in xrange(0, (i+1)//2):
emit("mul r%s, r%s", r(j), r(i-j)) emit("mul r%s, r%s", r(j), r(i-j))
emit("add r%s, r0", acc[0]) if j == 0:
emit("adc r%s, r1", acc[1]) emit("mov r%s, r0", acc[0])
emit("adc r%s, r27", acc[2]) emit("mov r%s, r1", acc[1])
else:
emit("add r%s, r0", acc[0])
emit("adc r%s, r1", acc[1])
emit("adc r%s, r27", acc[2])
# multiply by 2 # multiply by 2
emit("lsl r%s", acc[0]) emit("lsl r%s", acc[0])
emit("rol r%s", acc[1]) emit("rol r%s", acc[1])
@@ -83,8 +85,6 @@ for i in xrange(3, 20):
print "" print ""
for i in xrange(1, 17): for i in xrange(1, 17):
emit("ldi r%s, 0", acc[0])
emit("ldi r%s, 0", old_acc[0])
emit("ldi r%s, 0", old_acc[1]) emit("ldi r%s, 0", old_acc[1])
tmp = [acc[1], acc[2]] tmp = [acc[1], acc[2]]
acc = [acc[0], old_acc[0], old_acc[1]] acc = [acc[0], old_acc[0], old_acc[1]]
@@ -93,9 +93,13 @@ for i in xrange(1, 17):
# gather non-equal words # gather non-equal words
for j in xrange(0, (20-i)//2): for j in xrange(0, (20-i)//2):
emit("mul r%s, r%s", r(i+j), r(19-j)) emit("mul r%s, r%s", r(i+j), r(19-j))
emit("add r%s, r0", acc[0]) if j == 0:
emit("adc r%s, r1", acc[1]) emit("mov r%s, r0", acc[0])
emit("adc r%s, r27", acc[2]) emit("mov r%s, r1", acc[1])
else:
emit("add r%s, r0", acc[0])
emit("adc r%s, r1", acc[1])
emit("adc r%s, r27", acc[2])
# multiply by 2 # multiply by 2
emit("lsl r%s", acc[0]) emit("lsl r%s", acc[0])
emit("rol r%s", acc[1]) emit("rol r%s", acc[1])