mod3_update_VS_64.S
// void __update_VS_64x64 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x64
.type __update_VS_64x64, %function
__update_VS_64x64:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #516
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x64
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x64
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x64
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x64
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #128
add_loop_vs_64:
ldr.w r2, [r10, #128]
ldr.w r3, [r10, #132]
ldr.w r4, [r10, #136]
ldr.w r5, [r10, #140]
ldr.w r6, [r10, #384]
ldr.w r7, [r10, #388]
ldr.w r8, [r10, #392]
ldr.w r9, [r10, #396]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #256]
ldr.w r7, [r10, #260]
ldr.w r8, [r10, #264]
ldr.w r9, [r10, #268]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_64
add.w sp, #516
pop.w {r3-r12,pc}
// void __update_VS_64x128 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x128
.type __update_VS_64x128, %function
__update_VS_64x128:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #772
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x128
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x128
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x128
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x128
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #192
add_loop_vs_128:
ldr.w r2, [r10, #192]
ldr.w r3, [r10, #196]
ldr.w r4, [r10, #200]
ldr.w r5, [r10, #204]
ldr.w r6, [r10, #576]
ldr.w r7, [r10, #580]
ldr.w r8, [r10, #584]
ldr.w r9, [r10, #588]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #384]
ldr.w r7, [r10, #388]
ldr.w r8, [r10, #392]
ldr.w r9, [r10, #396]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_128
add.w sp, #772
pop.w {r3-r12,pc}
// void __update_VS_64x192 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x192
.type __update_VS_64x192, %function
__update_VS_64x192:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #1028
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x192
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x192
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x192
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x192
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #256
add_loop_vs_192:
ldr.w r2, [r10, #256]
ldr.w r3, [r10, #260]
ldr.w r4, [r10, #264]
ldr.w r5, [r10, #268]
ldr.w r6, [r10, #768]
ldr.w r7, [r10, #772]
ldr.w r8, [r10, #776]
ldr.w r9, [r10, #780]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #512]
ldr.w r7, [r10, #516]
ldr.w r8, [r10, #520]
ldr.w r9, [r10, #524]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_192
add.w sp, #1028
pop.w {r3-r12,pc}
// void __update_VS_64x256 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x256
.type __update_VS_64x256, %function
__update_VS_64x256:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #1284
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x256
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x256
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x256
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x256
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #320
add_loop_vs_256:
ldr.w r2, [r10, #320]
ldr.w r3, [r10, #324]
ldr.w r4, [r10, #328]
ldr.w r5, [r10, #332]
ldr.w r6, [r10, #960]
ldr.w r7, [r10, #964]
ldr.w r8, [r10, #968]
ldr.w r9, [r10, #972]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #640]
ldr.w r7, [r10, #644]
ldr.w r8, [r10, #648]
ldr.w r9, [r10, #652]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_256
add.w sp, #1284
pop.w {r3-r12,pc}
// void __update_VS_64x320 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x320
.type __update_VS_64x320, %function
__update_VS_64x320:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #1540
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x320
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x320
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x320
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x320
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #384
add_loop_vs_320:
ldr.w r2, [r10, #384]
ldr.w r3, [r10, #388]
ldr.w r4, [r10, #392]
ldr.w r5, [r10, #396]
ldr.w r6, [r10, #1152]
ldr.w r7, [r10, #1156]
ldr.w r8, [r10, #1160]
ldr.w r9, [r10, #1164]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #768]
ldr.w r7, [r10, #772]
ldr.w r8, [r10, #776]
ldr.w r9, [r10, #780]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_320
add.w sp, #1540
pop.w {r3-r12,pc}
// void __update_VS_64x384 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x384
.type __update_VS_64x384, %function
__update_VS_64x384:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #1796
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x384
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x384
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x384
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x384
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #448
add_loop_vs_384:
ldr.w r2, [r10, #448]
ldr.w r3, [r10, #452]
ldr.w r4, [r10, #456]
ldr.w r5, [r10, #460]
ldr.w r6, [r10, #1344]
ldr.w r7, [r10, #1348]
ldr.w r8, [r10, #1352]
ldr.w r9, [r10, #1356]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #896]
ldr.w r7, [r10, #900]
ldr.w r8, [r10, #904]
ldr.w r9, [r10, #908]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_384
add.w sp, #1796
pop.w {r3-r12,pc}
// void __update_VS_64x448 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x448
.type __update_VS_64x448, %function
__update_VS_64x448:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #2052
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x448
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x448
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x448
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x448
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #512
add_loop_vs_448:
ldr.w r2, [r10, #512]
ldr.w r3, [r10, #516]
ldr.w r4, [r10, #520]
ldr.w r5, [r10, #524]
ldr.w r6, [r10, #1536]
ldr.w r7, [r10, #1540]
ldr.w r8, [r10, #1544]
ldr.w r9, [r10, #1548]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #1024]
ldr.w r7, [r10, #1028]
ldr.w r8, [r10, #1032]
ldr.w r9, [r10, #1036]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_448
add.w sp, #2052
pop.w {r3-r12,pc}
// void __update_VS_64x512 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x512
.type __update_VS_64x512, %function
__update_VS_64x512:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #2308
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x512
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x512
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x512
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x512
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #576
add_loop_vs_512:
ldr.w r2, [r10, #576]
ldr.w r3, [r10, #580]
ldr.w r4, [r10, #584]
ldr.w r5, [r10, #588]
ldr.w r6, [r10, #1728]
ldr.w r7, [r10, #1732]
ldr.w r8, [r10, #1736]
ldr.w r9, [r10, #1740]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #1152]
ldr.w r7, [r10, #1156]
ldr.w r8, [r10, #1160]
ldr.w r9, [r10, #1164]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_512
add.w sp, #2308
pop.w {r3-r12,pc}
// void __update_VS_64x576 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x576
.type __update_VS_64x576, %function
__update_VS_64x576:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #2564
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x576
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x576
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x576
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x576
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #640
add_loop_vs_576:
ldr.w r2, [r10, #640]
ldr.w r3, [r10, #644]
ldr.w r4, [r10, #648]
ldr.w r5, [r10, #652]
ldr.w r6, [r10, #1920]
ldr.w r7, [r10, #1924]
ldr.w r8, [r10, #1928]
ldr.w r9, [r10, #1932]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #1280]
ldr.w r7, [r10, #1284]
ldr.w r8, [r10, #1288]
ldr.w r9, [r10, #1292]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_576
add.w sp, #2564
pop.w {r3-r12,pc}
// void __update_VS_64x640 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x640
.type __update_VS_64x640, %function
__update_VS_64x640:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #2820
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x640
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x640
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x640
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x640
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #704
add_loop_vs_640:
ldr.w r2, [r10, #704]
ldr.w r3, [r10, #708]
ldr.w r4, [r10, #712]
ldr.w r5, [r10, #716]
ldr.w r6, [r10, #2112]
ldr.w r7, [r10, #2116]
ldr.w r8, [r10, #2120]
ldr.w r9, [r10, #2124]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #1408]
ldr.w r7, [r10, #1412]
ldr.w r8, [r10, #1416]
ldr.w r9, [r10, #1420]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_640
add.w sp, #2820
pop.w {r3-r12,pc}
// void __update_VS_64x704 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x704
.type __update_VS_64x704, %function
__update_VS_64x704:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #2820
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x704
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x704
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x704
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x704
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #704
add_loop_vs_704:
ldr.w r2, [r10, #704]
ldr.w r3, [r10, #708]
ldr.w r4, [r10, #712]
ldr.w r5, [r10, #716]
ldr.w r6, [r10, #2112]
ldr.w r7, [r10, #2116]
ldr.w r8, [r10, #2120]
ldr.w r9, [r10, #2124]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #1408]
ldr.w r7, [r10, #1412]
ldr.w r8, [r10, #1416]
ldr.w r9, [r10, #1420]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_704
add.w sp, #2820
pop.w {r3-r12,pc}
// void __update_VS_64x720 (int *V, int *S, int *M1);
.p2align 2,,3
.syntax unified
.text
.global __update_VS_64x720
.type __update_VS_64x720, %function
__update_VS_64x720:
push.w {r3-r12,lr}
ldr r11, =0x03030303
vmov.w s0, s1, r0, r1
vmov.w s2, r2
sub.w sp, #3140
mov.w r0, sp
movw.w lr, #0
str.w lr, [r0], #1
vmov.w r1, s2
vmov.w r2, s0
bl __polymul_64x720
vmov.w r1, s2
vmov.w r2, s0
add.w r1, #128
bl __polymul_64x720
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #64
sub.w r0, #1
bl __polymul_64x720
vmov.w r1, s2
vmov.w r2, s1
add.w r1, #192
bl __polymul_64x720
mov.w r10, sp
vmov.w r0, r1, s0, s1
add.w lr, r0, #720
add_loop_vs_720:
ldr.w r2, [r10, #784]
ldr.w r3, [r10, #788]
ldr.w r4, [r10, #792]
ldr.w r5, [r10, #796]
ldr.w r6, [r10, #2352]
ldr.w r7, [r10, #2356]
ldr.w r8, [r10, #2360]
ldr.w r9, [r10, #2364]
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r1, #4]
str.w r4, [r1, #8]
str.w r5, [r1, #12]
str.w r2, [r1], #16
ldr.w r6, [r10, #1568]
ldr.w r7, [r10, #1572]
ldr.w r8, [r10, #1576]
ldr.w r9, [r10, #1580]
ldr.w r3, [r10, #4]
ldr.w r4, [r10, #8]
ldr.w r5, [r10, #12]
ldr.w r2, [r10], #16
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
add.w r2, r6
add.w r3, r7
add.w r4, r8
add.w r5, r9
and.w r12, r2, #0xF0F0F0F0 // top 4b < 16
and.w r2, r2, #0x0F0F0F0F // bot 4b < 16
add.w r2, r2, r12, LSR #4 // range < 31
bic.w r12, r2, r11 // top 3b < 8
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=10
bic.w r12, r2, r11 // top 3b < 3
and.w r2, r2, r11 // bot 2b < 4
add.w r2, r2, r12, LSR #2 // range <=5
usub8.w r12, r2, r11 // >= 3 ?
sel.w r2, r12, r2 // select
and.w r12, r3, #0xF0F0F0F0 // top 4b < 16
and.w r3, r3, #0x0F0F0F0F // bot 4b < 16
add.w r3, r3, r12, LSR #4 // range < 31
bic.w r12, r3, r11 // top 3b < 8
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=10
bic.w r12, r3, r11 // top 3b < 3
and.w r3, r3, r11 // bot 2b < 4
add.w r3, r3, r12, LSR #2 // range <=5
usub8.w r12, r3, r11 // >= 3 ?
sel.w r3, r12, r3 // select
and.w r12, r4, #0xF0F0F0F0 // top 4b < 16
and.w r4, r4, #0x0F0F0F0F // bot 4b < 16
add.w r4, r4, r12, LSR #4 // range < 31
bic.w r12, r4, r11 // top 3b < 8
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=10
bic.w r12, r4, r11 // top 3b < 3
and.w r4, r4, r11 // bot 2b < 4
add.w r4, r4, r12, LSR #2 // range <=5
usub8.w r12, r4, r11 // >= 3 ?
sel.w r4, r12, r4 // select
and.w r12, r5, #0xF0F0F0F0 // top 4b < 16
and.w r5, r5, #0x0F0F0F0F // bot 4b < 16
add.w r5, r5, r12, LSR #4 // range < 31
bic.w r12, r5, r11 // top 3b < 8
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=10
bic.w r12, r5, r11 // top 3b < 3
and.w r5, r5, r11 // bot 2b < 4
add.w r5, r5, r12, LSR #2 // range <=5
usub8.w r12, r5, r11 // >= 3 ?
sel.w r5, r12, r5 // select
str.w r3, [r0, #4]
str.w r4, [r0, #8]
str.w r5, [r0, #12]
str.w r2, [r0], #16
cmp.w r0, lr
bne.w add_loop_vs_720
add.w sp, #3140
pop.w {r3-r12,pc}