parent
b17cc37918
commit
d8b928b7f8
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,136 @@
|
|||||||
|
|
||||||
|
.text
|
||||||
|
.align 5
|
||||||
|
.global WinogradTransLeftFp16
|
||||||
|
#ifndef __APPLE__
|
||||||
|
.type WinogradTransLeftFp16, %function
|
||||||
|
#endif
|
||||||
|
|
||||||
|
WinogradTransLeftFp16:
|
||||||
|
|
||||||
|
sub sp, sp, #32
|
||||||
|
stp x19, x20, [sp], #32
|
||||||
|
|
||||||
|
mov x8, #8 // 4 * sizeof(float16)
|
||||||
|
mul x8, x6, x8
|
||||||
|
mul x9, x3, x8
|
||||||
|
sub x9, x9, x8
|
||||||
|
add x7, x9, x8 // step for S
|
||||||
|
mov x10, #2
|
||||||
|
mul x10, x4, x10 // step for B
|
||||||
|
|
||||||
|
LoopH:
|
||||||
|
mov x13, x0
|
||||||
|
mov x15, x3
|
||||||
|
LoopW:
|
||||||
|
mov x14, x13
|
||||||
|
mov x17, x1
|
||||||
|
dup v30.4h, wzr
|
||||||
|
mov x11, x6
|
||||||
|
InitZero:
|
||||||
|
st1 {v30.4h}, [x2], #8
|
||||||
|
subs x11, x11, #1
|
||||||
|
bne InitZero
|
||||||
|
|
||||||
|
sub x2, x2, x8
|
||||||
|
mov x12, x5
|
||||||
|
LoopKStart4:
|
||||||
|
cmp x12, #4
|
||||||
|
blt LoopKStart3
|
||||||
|
mov x16, x15
|
||||||
|
mov x19, x4
|
||||||
|
LoopK4:
|
||||||
|
ld1 {v0.h}[0], [x17], x10
|
||||||
|
ld1 {v0.h}[1], [x17], x10
|
||||||
|
ld1 {v0.h}[2], [x17], x10
|
||||||
|
ld1 {v0.h}[3], [x17], x10
|
||||||
|
mov x11, x6
|
||||||
|
mov x18, x17
|
||||||
|
add x18, x14, x7
|
||||||
|
add x16, x18, x7
|
||||||
|
add x19, x16, x7
|
||||||
|
|
||||||
|
LoopLength4:
|
||||||
|
ld1 {v16.4h}, [x2]
|
||||||
|
ld1 {v20.4h}, [x14], #8
|
||||||
|
fmla v16.4h, v20.4h, v0.h[0]
|
||||||
|
ld1 {v21.4h}, [x18], #8
|
||||||
|
fmul v17.4h, v21.4h, v0.h[1]
|
||||||
|
ld1 {v20.4h}, [x16], #8
|
||||||
|
fmla v16.4h, v20.4h, v0.h[2]
|
||||||
|
ld1 {v21.4h}, [x19], #8
|
||||||
|
fmla v17.4h, v21.4h, v0.h[3]
|
||||||
|
fadd v17.4h, v16.4h, v17.4h
|
||||||
|
st1 {v17.4h}, [x2], #8
|
||||||
|
subs x11, x11, #1
|
||||||
|
bne LoopLength4
|
||||||
|
|
||||||
|
sub x2, x2, x8
|
||||||
|
sub x12, x12, #4
|
||||||
|
add x14, x19, x9
|
||||||
|
cmp x12, #4
|
||||||
|
bge LoopK4
|
||||||
|
|
||||||
|
LoopKStart3:
|
||||||
|
cmp x12, #3
|
||||||
|
blt LoopKStart
|
||||||
|
mov x16, x15
|
||||||
|
LoopK3:
|
||||||
|
ld1 {v0.h}[0], [x17], x10
|
||||||
|
ld1 {v0.h}[1], [x17], x10
|
||||||
|
ld1 {v0.h}[2], [x17], x10
|
||||||
|
mov x11, x6
|
||||||
|
mov x18, x17
|
||||||
|
add x18, x14, x7
|
||||||
|
add x16, x18, x7
|
||||||
|
LoopLength3:
|
||||||
|
ld1 {v16.4h}, [x2]
|
||||||
|
ld1 {v20.4h}, [x14], #8
|
||||||
|
fmla v16.4h, v20.4h, v0.h[0]
|
||||||
|
ld1 {v21.4h}, [x18], #8
|
||||||
|
fmul v17.4h, v21.4h, v0.h[1]
|
||||||
|
ld1 {v20.4h}, [x16], #8
|
||||||
|
fmla v16.4h, v20.4h, v0.h[2]
|
||||||
|
fadd v17.4h, v16.4h, v17.4h
|
||||||
|
st1 {v17.4h}, [x2], #8
|
||||||
|
subs x11, x11, #1
|
||||||
|
bne LoopLength3
|
||||||
|
|
||||||
|
sub x2, x2, x8
|
||||||
|
sub x12, x12, #3
|
||||||
|
add x14, x16, x9
|
||||||
|
cmp x12, #3
|
||||||
|
bge LoopK3
|
||||||
|
|
||||||
|
LoopKStart:
|
||||||
|
cmp x12, #0
|
||||||
|
beq LKEnd
|
||||||
|
LoopK:
|
||||||
|
ld1r {v31.4h}, [x17], x10
|
||||||
|
mov x11, x6
|
||||||
|
LoopLength:
|
||||||
|
ld1 {v0.4h}, [x2]
|
||||||
|
ld1 {v1.4h}, [x14], #8
|
||||||
|
fmla v0.4h, v1.4h, v31.4h
|
||||||
|
st1 {v0.4h}, [x2], #8
|
||||||
|
subs x11, x11, #1
|
||||||
|
bne LoopLength
|
||||||
|
|
||||||
|
subs x12, x12, #1
|
||||||
|
sub x2, x2, x8
|
||||||
|
add x14, x14, x9
|
||||||
|
bne LoopK
|
||||||
|
|
||||||
|
LKEnd:
|
||||||
|
subs x15, x15, #1
|
||||||
|
add x13, x13, x8
|
||||||
|
add x2, x2, x8
|
||||||
|
bne LoopW
|
||||||
|
|
||||||
|
add x1, x1, #2 //sizeof(float)
|
||||||
|
subs x4, x4, #1
|
||||||
|
bne LoopH
|
||||||
|
|
||||||
|
sub sp, sp, #32
|
||||||
|
ldp x19, x20, [sp], #32
|
||||||
|
ret
|
@ -0,0 +1,134 @@
|
|||||||
|
|
||||||
|
.text
|
||||||
|
.align 5
|
||||||
|
.global WinogradTransRightFp16
|
||||||
|
#ifndef __APPLE__
|
||||||
|
.type WinogradTransRightFp16, %function
|
||||||
|
#endif
|
||||||
|
|
||||||
|
WinogradTransRightFp16:
|
||||||
|
|
||||||
|
mov x8, #8 // 4 * sizeof(float16)
|
||||||
|
mul x8, x6, x8
|
||||||
|
mul x9, x5, x8 // step for S
|
||||||
|
mov x10, #2
|
||||||
|
mul x10, x4, x10 // step for B
|
||||||
|
|
||||||
|
LoopH:
|
||||||
|
mov x7, x1
|
||||||
|
mov x15, x3
|
||||||
|
LoopW:
|
||||||
|
mov x17, x0
|
||||||
|
mov x13, x7
|
||||||
|
dup v30.4h, wzr
|
||||||
|
mov x11, x6
|
||||||
|
InitZero:
|
||||||
|
st1 {v30.4h}, [x2], #8
|
||||||
|
subs x11, x11, #1
|
||||||
|
bne InitZero
|
||||||
|
sub x2, x2, x8
|
||||||
|
mov x12, x5
|
||||||
|
|
||||||
|
LoopKStart4:
|
||||||
|
cmp x12, #4
|
||||||
|
blt LoopKStart3
|
||||||
|
mov x16, x15
|
||||||
|
mov x18, x4
|
||||||
|
LoopK4:
|
||||||
|
ld1 {v0.h}[0], [x13], x10
|
||||||
|
ld1 {v0.h}[1], [x13], x10
|
||||||
|
ld1 {v0.h}[2], [x13], x10
|
||||||
|
ld1 {v0.h}[3], [x13], x10
|
||||||
|
mov x11, x6
|
||||||
|
mov x14, x13
|
||||||
|
|
||||||
|
add x14, x17, x8
|
||||||
|
add x16, x14, x8
|
||||||
|
add x18, x16, x8
|
||||||
|
|
||||||
|
LoopLength4:
|
||||||
|
ld1 {v16.4h}, [x2]
|
||||||
|
ld1 {v20.4h}, [x17], #8
|
||||||
|
fmla v16.4h, v20.4h, v0.h[0]
|
||||||
|
ld1 {v21.4h}, [x14], #8
|
||||||
|
fmul v17.4h, v21.4h, v0.h[1]
|
||||||
|
ld1 {v20.4h}, [x16], #8
|
||||||
|
fmla v16.4h, v20.4h, v0.h[2]
|
||||||
|
ld1 {v21.4h}, [x18], #8
|
||||||
|
fmla v17.4h, v21.4h, v0.h[3]
|
||||||
|
|
||||||
|
fadd v17.4h, v16.4h, v17.4h
|
||||||
|
st1 {v17.4h}, [x2], #8
|
||||||
|
subs x11, x11, #1
|
||||||
|
bne LoopLength4
|
||||||
|
sub x2, x2, x8
|
||||||
|
sub x12, x12, #4
|
||||||
|
mov x17, x18
|
||||||
|
|
||||||
|
cmp x12, #4
|
||||||
|
bge LoopK4
|
||||||
|
|
||||||
|
LoopKStart3:
|
||||||
|
cmp x12, #3
|
||||||
|
blt LoopKStart
|
||||||
|
mov x16, x15
|
||||||
|
LoopK3:
|
||||||
|
ld1 {v0.h}[0], [x13], x10
|
||||||
|
ld1 {v0.h}[1], [x13], x10
|
||||||
|
ld1 {v0.h}[2], [x13], x10
|
||||||
|
mov x11, x6
|
||||||
|
mov x14, x13
|
||||||
|
|
||||||
|
add x14, x17, x8
|
||||||
|
add x16, x14, x8
|
||||||
|
|
||||||
|
LoopLength3:
|
||||||
|
ld1 {v16.4h}, [x2]
|
||||||
|
ld1 {v20.4h}, [x17], #8
|
||||||
|
fmla v16.4h, v20.4h, v0.h[0]
|
||||||
|
ld1 {v21.4h}, [x14], #8
|
||||||
|
fmul v17.4h, v21.4h, v0.h[1]
|
||||||
|
ld1 {v20.4h}, [x16], #8
|
||||||
|
fmla v16.4h, v20.4h, v0.h[2]
|
||||||
|
|
||||||
|
fadd v17.4h, v16.4h, v17.4h
|
||||||
|
st1 {v17.4h}, [x2], #8
|
||||||
|
subs x11, x11, #1
|
||||||
|
bne LoopLength3
|
||||||
|
sub x2, x2, x8
|
||||||
|
sub x12, x12, #3
|
||||||
|
mov x17, x18
|
||||||
|
cmp x12, #3
|
||||||
|
bge LoopK3
|
||||||
|
|
||||||
|
LoopKStart:
|
||||||
|
cmp x12, #0
|
||||||
|
beq LoopKEnd
|
||||||
|
|
||||||
|
LoopK:
|
||||||
|
ld1r {v31.4h}, [x13], x10
|
||||||
|
|
||||||
|
mov x11, x6
|
||||||
|
LoopLength:
|
||||||
|
ld1 {v0.4h}, [x2]
|
||||||
|
ld1 {v1.4h}, [x17], #8
|
||||||
|
fmla v0.4h, v1.4h, v31.4h
|
||||||
|
|
||||||
|
st1 {v0.4h}, [x2], #8
|
||||||
|
subs x11, x11, #1
|
||||||
|
bne LoopLength
|
||||||
|
subs x12, x12, #1
|
||||||
|
|
||||||
|
sub x2, x2, x8
|
||||||
|
bne LoopK
|
||||||
|
LoopKEnd:
|
||||||
|
subs x15, x15, #1
|
||||||
|
add x2, x2, x8
|
||||||
|
add x7, x7, #2
|
||||||
|
bne LoopW
|
||||||
|
|
||||||
|
add x0, x0, x9
|
||||||
|
subs x4, x4, #1
|
||||||
|
bne LoopH
|
||||||
|
|
||||||
|
ret
|
Loading…
Reference in new issue