2005-04-17 02:20:36 +04:00
/ *
* arch/ s p a r c64 / l i b / x o r . S
*
* High s p e e d x o r _ b l o c k o p e r a t i o n f o r R A I D 4 / 5 u t i l i z i n g t h e
2006-02-26 04:16:29 +03:00
* UltraSparc V i s u a l I n s t r u c t i o n S e t a n d N i a g a r a s t o r e - i n i t / t w i n - l o a d .
2005-04-17 02:20:36 +04:00
*
* Copyright ( C ) 1 9 9 7 , 1 9 9 9 J a k u b J e l i n e k ( j j @ultra.linux.cz)
2006-02-26 04:16:29 +03:00
* Copyright ( C ) 2 0 0 6 D a v i d S . M i l l e r < d a v e m @davemloft.net>
2005-04-17 02:20:36 +04:00
* /
# include < a s m / v i s a s m . h >
# include < a s m / a s i . h >
# include < a s m / d c u . h >
# include < a s m / s p i t f i r e . h >
/ *
* Requirements :
* ! ( ( ( long) d e s t | ( l o n g ) s o u r c e N ) & ( 6 4 - 1 ) ) & &
* ! ( len & 1 2 7 ) & & l e n > = 2 5 6
* /
.text
.align 32
2006-02-26 04:16:29 +03:00
/* VIS versions. */
2005-04-17 02:20:36 +04:00
.globl xor_vis_2
.type xor_ v i s _ 2 ,#f u n c t i o n
xor_vis_2 :
rd % f p r s , % o 5
andcc % o 5 , F P R S _ F E F | F P R S _ D U , % g 0
be,p t % i c c , 0 f
sethi % h i ( V I S e n t e r ) , % g 1
jmpl % g 1 + % l o ( V I S e n t e r ) , % g 7
add % g 7 , 8 , % g 7
0 : wr % g 0 , F P R S _ F E F , % f p r s
rd % a s i , % g 1
wr % g 0 , A S I _ B L K _ P , % a s i
membar #L o a d S t o r e | # S t o r e L o a d | # S t o r e S t o r e
sub % o 0 , 1 2 8 , % o 0
ldda [ % o 1 ] % a s i , % f0
ldda [ % o 2 ] % a s i , % f16
2 : ldda [ % o 1 + 6 4 ] % a s i , % f32
fxor % f0 , % f16 , % f16
fxor % f2 , % f18 , % f18
fxor % f4 , % f20 , % f20
fxor % f6 , % f22 , % f22
fxor % f8 , % f24 , % f24
fxor % f10 , % f26 , % f26
fxor % f12 , % f28 , % f28
fxor % f14 , % f30 , % f30
stda % f16 , [ % o 1 ] % a s i
ldda [ % o 2 + 6 4 ] % a s i , % f48
ldda [ % o 1 + 1 2 8 ] % a s i , % f0
fxor % f32 , % f48 , % f48
fxor % f34 , % f50 , % f50
add % o 1 , 1 2 8 , % o 1
fxor % f36 , % f52 , % f52
add % o 2 , 1 2 8 , % o 2
fxor % f38 , % f54 , % f54
subcc % o 0 , 1 2 8 , % o 0
fxor % f40 , % f56 , % f56
fxor % f42 , % f58 , % f58
fxor % f44 , % f60 , % f60
fxor % f46 , % f62 , % f62
stda % f48 , [ % o 1 - 6 4 ] % a s i
bne,p t % x c c , 2 b
ldda [ % o 2 ] % a s i , % f16
ldda [ % o 1 + 6 4 ] % a s i , % f32
fxor % f0 , % f16 , % f16
fxor % f2 , % f18 , % f18
fxor % f4 , % f20 , % f20
fxor % f6 , % f22 , % f22
fxor % f8 , % f24 , % f24
fxor % f10 , % f26 , % f26
fxor % f12 , % f28 , % f28
fxor % f14 , % f30 , % f30
stda % f16 , [ % o 1 ] % a s i
ldda [ % o 2 + 6 4 ] % a s i , % f48
membar #S y n c
fxor % f32 , % f48 , % f48
fxor % f34 , % f50 , % f50
fxor % f36 , % f52 , % f52
fxor % f38 , % f54 , % f54
fxor % f40 , % f56 , % f56
fxor % f42 , % f58 , % f58
fxor % f44 , % f60 , % f60
fxor % f46 , % f62 , % f62
stda % f48 , [ % o 1 + 6 4 ] % a s i
membar #S y n c | # S t o r e S t o r e | # S t o r e L o a d
wr % g 1 , % g 0 , % a s i
retl
wr % g 0 , 0 , % f p r s
.size xor_ v i s _ 2 , . - x o r _ v i s _ 2
.globl xor_vis_3
.type xor_ v i s _ 3 ,#f u n c t i o n
xor_vis_3 :
rd % f p r s , % o 5
andcc % o 5 , F P R S _ F E F | F P R S _ D U , % g 0
be,p t % i c c , 0 f
sethi % h i ( V I S e n t e r ) , % g 1
jmpl % g 1 + % l o ( V I S e n t e r ) , % g 7
add % g 7 , 8 , % g 7
0 : wr % g 0 , F P R S _ F E F , % f p r s
rd % a s i , % g 1
wr % g 0 , A S I _ B L K _ P , % a s i
membar #L o a d S t o r e | # S t o r e L o a d | # S t o r e S t o r e
sub % o 0 , 6 4 , % o 0
ldda [ % o 1 ] % a s i , % f0
ldda [ % o 2 ] % a s i , % f16
3 : ldda [ % o 3 ] % a s i , % f32
fxor % f0 , % f16 , % f48
fxor % f2 , % f18 , % f50
add % o 1 , 6 4 , % o 1
fxor % f4 , % f20 , % f52
fxor % f6 , % f22 , % f54
add % o 2 , 6 4 , % o 2
fxor % f8 , % f24 , % f56
fxor % f10 , % f26 , % f58
fxor % f12 , % f28 , % f60
fxor % f14 , % f30 , % f62
ldda [ % o 1 ] % a s i , % f0
fxor % f48 , % f32 , % f48
fxor % f50 , % f34 , % f50
fxor % f52 , % f36 , % f52
fxor % f54 , % f38 , % f54
add % o 3 , 6 4 , % o 3
fxor % f56 , % f40 , % f56
fxor % f58 , % f42 , % f58
subcc % o 0 , 6 4 , % o 0
fxor % f60 , % f44 , % f60
fxor % f62 , % f46 , % f62
stda % f48 , [ % o 1 - 6 4 ] % a s i
bne,p t % x c c , 3 b
ldda [ % o 2 ] % a s i , % f16
ldda [ % o 3 ] % a s i , % f32
fxor % f0 , % f16 , % f48
fxor % f2 , % f18 , % f50
fxor % f4 , % f20 , % f52
fxor % f6 , % f22 , % f54
fxor % f8 , % f24 , % f56
fxor % f10 , % f26 , % f58
fxor % f12 , % f28 , % f60
fxor % f14 , % f30 , % f62
membar #S y n c
fxor % f48 , % f32 , % f48
fxor % f50 , % f34 , % f50
fxor % f52 , % f36 , % f52
fxor % f54 , % f38 , % f54
fxor % f56 , % f40 , % f56
fxor % f58 , % f42 , % f58
fxor % f60 , % f44 , % f60
fxor % f62 , % f46 , % f62
stda % f48 , [ % o 1 ] % a s i
membar #S y n c | # S t o r e S t o r e | # S t o r e L o a d
wr % g 1 , % g 0 , % a s i
retl
wr % g 0 , 0 , % f p r s
.size xor_ v i s _ 3 , . - x o r _ v i s _ 3
.globl xor_vis_4
.type xor_ v i s _ 4 ,#f u n c t i o n
xor_vis_4 :
rd % f p r s , % o 5
andcc % o 5 , F P R S _ F E F | F P R S _ D U , % g 0
be,p t % i c c , 0 f
sethi % h i ( V I S e n t e r ) , % g 1
jmpl % g 1 + % l o ( V I S e n t e r ) , % g 7
add % g 7 , 8 , % g 7
0 : wr % g 0 , F P R S _ F E F , % f p r s
rd % a s i , % g 1
wr % g 0 , A S I _ B L K _ P , % a s i
membar #L o a d S t o r e | # S t o r e L o a d | # S t o r e S t o r e
sub % o 0 , 6 4 , % o 0
ldda [ % o 1 ] % a s i , % f0
ldda [ % o 2 ] % a s i , % f16
4 : ldda [ % o 3 ] % a s i , % f32
fxor % f0 , % f16 , % f16
fxor % f2 , % f18 , % f18
add % o 1 , 6 4 , % o 1
fxor % f4 , % f20 , % f20
fxor % f6 , % f22 , % f22
add % o 2 , 6 4 , % o 2
fxor % f8 , % f24 , % f24
fxor % f10 , % f26 , % f26
fxor % f12 , % f28 , % f28
fxor % f14 , % f30 , % f30
ldda [ % o 4 ] % a s i , % f48
fxor % f16 , % f32 , % f32
fxor % f18 , % f34 , % f34
fxor % f20 , % f36 , % f36
fxor % f22 , % f38 , % f38
add % o 3 , 6 4 , % o 3
fxor % f24 , % f40 , % f40
fxor % f26 , % f42 , % f42
fxor % f28 , % f44 , % f44
fxor % f30 , % f46 , % f46
ldda [ % o 1 ] % a s i , % f0
fxor % f32 , % f48 , % f48
fxor % f34 , % f50 , % f50
fxor % f36 , % f52 , % f52
add % o 4 , 6 4 , % o 4
fxor % f38 , % f54 , % f54
fxor % f40 , % f56 , % f56
fxor % f42 , % f58 , % f58
subcc % o 0 , 6 4 , % o 0
fxor % f44 , % f60 , % f60
fxor % f46 , % f62 , % f62
stda % f48 , [ % o 1 - 6 4 ] % a s i
bne,p t % x c c , 4 b
ldda [ % o 2 ] % a s i , % f16
ldda [ % o 3 ] % a s i , % f32
fxor % f0 , % f16 , % f16
fxor % f2 , % f18 , % f18
fxor % f4 , % f20 , % f20
fxor % f6 , % f22 , % f22
fxor % f8 , % f24 , % f24
fxor % f10 , % f26 , % f26
fxor % f12 , % f28 , % f28
fxor % f14 , % f30 , % f30
ldda [ % o 4 ] % a s i , % f48
fxor % f16 , % f32 , % f32
fxor % f18 , % f34 , % f34
fxor % f20 , % f36 , % f36
fxor % f22 , % f38 , % f38
fxor % f24 , % f40 , % f40
fxor % f26 , % f42 , % f42
fxor % f28 , % f44 , % f44
fxor % f30 , % f46 , % f46
membar #S y n c
fxor % f32 , % f48 , % f48
fxor % f34 , % f50 , % f50
fxor % f36 , % f52 , % f52
fxor % f38 , % f54 , % f54
fxor % f40 , % f56 , % f56
fxor % f42 , % f58 , % f58
fxor % f44 , % f60 , % f60
fxor % f46 , % f62 , % f62
stda % f48 , [ % o 1 ] % a s i
membar #S y n c | # S t o r e S t o r e | # S t o r e L o a d
wr % g 1 , % g 0 , % a s i
retl
wr % g 0 , 0 , % f p r s
.size xor_ v i s _ 4 , . - x o r _ v i s _ 4
.globl xor_vis_5
.type xor_ v i s _ 5 ,#f u n c t i o n
xor_vis_5 :
save % s p , - 1 9 2 , % s p
rd % f p r s , % o 5
andcc % o 5 , F P R S _ F E F | F P R S _ D U , % g 0
be,p t % i c c , 0 f
sethi % h i ( V I S e n t e r ) , % g 1
jmpl % g 1 + % l o ( V I S e n t e r ) , % g 7
add % g 7 , 8 , % g 7
0 : wr % g 0 , F P R S _ F E F , % f p r s
rd % a s i , % g 1
wr % g 0 , A S I _ B L K _ P , % a s i
membar #L o a d S t o r e | # S t o r e L o a d | # S t o r e S t o r e
sub % i 0 , 6 4 , % i 0
ldda [ % i 1 ] % a s i , % f0
ldda [ % i 2 ] % a s i , % f16
5 : ldda [ % i 3 ] % a s i , % f32
fxor % f0 , % f16 , % f48
fxor % f2 , % f18 , % f50
add % i 1 , 6 4 , % i 1
fxor % f4 , % f20 , % f52
fxor % f6 , % f22 , % f54
add % i 2 , 6 4 , % i 2
fxor % f8 , % f24 , % f56
fxor % f10 , % f26 , % f58
fxor % f12 , % f28 , % f60
fxor % f14 , % f30 , % f62
ldda [ % i 4 ] % a s i , % f16
fxor % f48 , % f32 , % f48
fxor % f50 , % f34 , % f50
fxor % f52 , % f36 , % f52
fxor % f54 , % f38 , % f54
add % i 3 , 6 4 , % i 3
fxor % f56 , % f40 , % f56
fxor % f58 , % f42 , % f58
fxor % f60 , % f44 , % f60
fxor % f62 , % f46 , % f62
ldda [ % i 5 ] % a s i , % f32
fxor % f48 , % f16 , % f48
fxor % f50 , % f18 , % f50
add % i 4 , 6 4 , % i 4
fxor % f52 , % f20 , % f52
fxor % f54 , % f22 , % f54
add % i 5 , 6 4 , % i 5
fxor % f56 , % f24 , % f56
fxor % f58 , % f26 , % f58
fxor % f60 , % f28 , % f60
fxor % f62 , % f30 , % f62
ldda [ % i 1 ] % a s i , % f0
fxor % f48 , % f32 , % f48
fxor % f50 , % f34 , % f50
fxor % f52 , % f36 , % f52
fxor % f54 , % f38 , % f54
fxor % f56 , % f40 , % f56
fxor % f58 , % f42 , % f58
subcc % i 0 , 6 4 , % i 0
fxor % f60 , % f44 , % f60
fxor % f62 , % f46 , % f62
stda % f48 , [ % i 1 - 6 4 ] % a s i
bne,p t % x c c , 5 b
ldda [ % i 2 ] % a s i , % f16
ldda [ % i 3 ] % a s i , % f32
fxor % f0 , % f16 , % f48
fxor % f2 , % f18 , % f50
fxor % f4 , % f20 , % f52
fxor % f6 , % f22 , % f54
fxor % f8 , % f24 , % f56
fxor % f10 , % f26 , % f58
fxor % f12 , % f28 , % f60
fxor % f14 , % f30 , % f62
ldda [ % i 4 ] % a s i , % f16
fxor % f48 , % f32 , % f48
fxor % f50 , % f34 , % f50
fxor % f52 , % f36 , % f52
fxor % f54 , % f38 , % f54
fxor % f56 , % f40 , % f56
fxor % f58 , % f42 , % f58
fxor % f60 , % f44 , % f60
fxor % f62 , % f46 , % f62
ldda [ % i 5 ] % a s i , % f32
fxor % f48 , % f16 , % f48
fxor % f50 , % f18 , % f50
fxor % f52 , % f20 , % f52
fxor % f54 , % f22 , % f54
fxor % f56 , % f24 , % f56
fxor % f58 , % f26 , % f58
fxor % f60 , % f28 , % f60
fxor % f62 , % f30 , % f62
membar #S y n c
fxor % f48 , % f32 , % f48
fxor % f50 , % f34 , % f50
fxor % f52 , % f36 , % f52
fxor % f54 , % f38 , % f54
fxor % f56 , % f40 , % f56
fxor % f58 , % f42 , % f58
fxor % f60 , % f44 , % f60
fxor % f62 , % f46 , % f62
stda % f48 , [ % i 1 ] % a s i
membar #S y n c | # S t o r e S t o r e | # S t o r e L o a d
wr % g 1 , % g 0 , % a s i
wr % g 0 , 0 , % f p r s
ret
restore
.size xor_ v i s _ 5 , . - x o r _ v i s _ 5
2006-02-26 04:16:29 +03:00
/* Niagara versions. */
.globl xor_niagara_2
.type xor_ n i a g a r a _ 2 ,#f u n c t i o n
xor_niagara_2 : /* %o0=bytes, %o1=dest, %o2=src */
save % s p , - 1 9 2 , % s p
prefetch [ % i 1 ] , #n _ w r i t e s
prefetch [ % i 2 ] , #o n e _ r e a d
rd % a s i , % g 7
wr % g 0 , A S I _ B L K _ I N I T _ Q U A D _ L D D _ P , % a s i
srlx % i 0 , 6 , % g 1
mov % i 1 , % i 0
mov % i 2 , % i 1
1 : ldda [ % i 1 + 0 x00 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c + 0 x00 * /
ldda [ % i 1 + 0 x10 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c + 0 x10 * /
ldda [ % i 1 + 0 x20 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c + 0 x20 * /
ldda [ % i 1 + 0 x30 ] % a s i , % l 0 / * % l 0 / % l 1 = s r c + 0 x30 * /
prefetch [ % i 1 + 0 x40 ] , #o n e _ r e a d
ldda [ % i 0 + 0 x00 ] % a s i , % o 0 / * % o 0 / % o 1 = d e s t + 0 x00 * /
ldda [ % i 0 + 0 x10 ] % a s i , % o 2 / * % o 2 / % o 3 = d e s t + 0 x10 * /
ldda [ % i 0 + 0 x20 ] % a s i , % o 4 / * % o 4 / % o 5 = d e s t + 0 x20 * /
ldda [ % i 0 + 0 x30 ] % a s i , % l 2 / * % l 2 / % l 3 = d e s t + 0 x30 * /
prefetch [ % i 0 + 0 x40 ] , #n _ w r i t e s
xor % o 0 , % i 2 , % o 0
xor % o 1 , % i 3 , % o 1
stxa % o 0 , [ % i 0 + 0 x00 ] % a s i
stxa % o 1 , [ % i 0 + 0 x08 ] % a s i
xor % o 2 , % i 4 , % o 2
xor % o 3 , % i 5 , % o 3
stxa % o 2 , [ % i 0 + 0 x10 ] % a s i
stxa % o 3 , [ % i 0 + 0 x18 ] % a s i
xor % o 4 , % g 2 , % o 4
xor % o 5 , % g 3 , % o 5
stxa % o 4 , [ % i 0 + 0 x20 ] % a s i
stxa % o 5 , [ % i 0 + 0 x28 ] % a s i
xor % l 2 , % l 0 , % l 2
xor % l 3 , % l 1 , % l 3
stxa % l 2 , [ % i 0 + 0 x30 ] % a s i
stxa % l 3 , [ % i 0 + 0 x38 ] % a s i
add % i 0 , 0 x40 , % i 0
subcc % g 1 , 1 , % g 1
bne,p t % x c c , 1 b
add % i 1 , 0 x40 , % i 1
membar #S y n c
wr % g 7 , 0 x0 , % a s i
ret
restore
.size xor_ n i a g a r a _ 2 , . - x o r _ n i a g a r a _ 2
.globl xor_niagara_3
.type xor_ n i a g a r a _ 3 ,#f u n c t i o n
xor_niagara_3 : /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2 */
save % s p , - 1 9 2 , % s p
prefetch [ % i 1 ] , #n _ w r i t e s
prefetch [ % i 2 ] , #o n e _ r e a d
prefetch [ % i 3 ] , #o n e _ r e a d
rd % a s i , % g 7
wr % g 0 , A S I _ B L K _ I N I T _ Q U A D _ L D D _ P , % a s i
srlx % i 0 , 6 , % g 1
mov % i 1 , % i 0
mov % i 2 , % i 1
mov % i 3 , % l 7
1 : ldda [ % i 1 + 0 x00 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x00 * /
ldda [ % i 1 + 0 x10 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c1 + 0 x10 * /
ldda [ % l 7 + 0 x00 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c2 + 0 x00 * /
ldda [ % l 7 + 0 x10 ] % a s i , % l 0 / * % l 0 / % l 1 = s r c2 + 0 x10 * /
ldda [ % i 0 + 0 x00 ] % a s i , % o 0 / * % o 0 / % o 1 = d e s t + 0 x00 * /
ldda [ % i 0 + 0 x10 ] % a s i , % o 2 / * % o 2 / % o 3 = d e s t + 0 x10 * /
xor % g 2 , % i 2 , % g 2
xor % g 3 , % i 3 , % g 3
xor % o 0 , % g 2 , % o 0
xor % o 1 , % g 3 , % o 1
stxa % o 0 , [ % i 0 + 0 x00 ] % a s i
stxa % o 1 , [ % i 0 + 0 x08 ] % a s i
ldda [ % i 1 + 0 x20 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x20 * /
ldda [ % l 7 + 0 x20 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c2 + 0 x20 * /
ldda [ % i 0 + 0 x20 ] % a s i , % o 0 / * % o 0 / % o 1 = d e s t + 0 x20 * /
xor % l 0 , % i 4 , % l 0
xor % l 1 , % i 5 , % l 1
xor % o 2 , % l 0 , % o 2
xor % o 3 , % l 1 , % o 3
stxa % o 2 , [ % i 0 + 0 x10 ] % a s i
stxa % o 3 , [ % i 0 + 0 x18 ] % a s i
ldda [ % i 1 + 0 x30 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c1 + 0 x30 * /
ldda [ % l 7 + 0 x30 ] % a s i , % l 0 / * % l 0 / % l 1 = s r c2 + 0 x30 * /
ldda [ % i 0 + 0 x30 ] % a s i , % o 2 / * % o 2 / % o 3 = d e s t + 0 x30 * /
prefetch [ % i 1 + 0 x40 ] , #o n e _ r e a d
prefetch [ % l 7 + 0 x40 ] , #o n e _ r e a d
prefetch [ % i 0 + 0 x40 ] , #n _ w r i t e s
xor % g 2 , % i 2 , % g 2
xor % g 3 , % i 3 , % g 3
xor % o 0 , % g 2 , % o 0
xor % o 1 , % g 3 , % o 1
stxa % o 0 , [ % i 0 + 0 x20 ] % a s i
stxa % o 1 , [ % i 0 + 0 x28 ] % a s i
xor % l 0 , % i 4 , % l 0
xor % l 1 , % i 5 , % l 1
xor % o 2 , % l 0 , % o 2
xor % o 3 , % l 1 , % o 3
stxa % o 2 , [ % i 0 + 0 x30 ] % a s i
stxa % o 3 , [ % i 0 + 0 x38 ] % a s i
add % i 0 , 0 x40 , % i 0
add % i 1 , 0 x40 , % i 1
subcc % g 1 , 1 , % g 1
bne,p t % x c c , 1 b
add % l 7 , 0 x40 , % l 7
membar #S y n c
wr % g 7 , 0 x0 , % a s i
ret
restore
.size xor_ n i a g a r a _ 3 , . - x o r _ n i a g a r a _ 3
.globl xor_niagara_4
.type xor_ n i a g a r a _ 4 ,#f u n c t i o n
xor_niagara_4 : /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3 */
save % s p , - 1 9 2 , % s p
prefetch [ % i 1 ] , #n _ w r i t e s
prefetch [ % i 2 ] , #o n e _ r e a d
prefetch [ % i 3 ] , #o n e _ r e a d
prefetch [ % i 4 ] , #o n e _ r e a d
rd % a s i , % g 7
wr % g 0 , A S I _ B L K _ I N I T _ Q U A D _ L D D _ P , % a s i
srlx % i 0 , 6 , % g 1
mov % i 1 , % i 0
mov % i 2 , % i 1
mov % i 3 , % l 7
mov % i 4 , % l 6
1 : ldda [ % i 1 + 0 x00 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x00 * /
ldda [ % l 7 + 0 x00 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c2 + 0 x00 * /
ldda [ % l 6 + 0 x00 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c3 + 0 x00 * /
ldda [ % i 0 + 0 x00 ] % a s i , % l 0 / * % l 0 / % l 1 = d e s t + 0 x00 * /
xor % i 4 , % i 2 , % i 4
xor % i 5 , % i 3 , % i 5
ldda [ % i 1 + 0 x10 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x10 * /
xor % g 2 , % i 4 , % g 2
xor % g 3 , % i 5 , % g 3
ldda [ % i 7 + 0 x10 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c2 + 0 x10 * /
xor % l 0 , % g 2 , % l 0
xor % l 1 , % g 3 , % l 1
stxa % l 0 , [ % i 0 + 0 x00 ] % a s i
stxa % l 1 , [ % i 0 + 0 x08 ] % a s i
ldda [ % i 6 + 0 x10 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c3 + 0 x10 * /
ldda [ % i 0 + 0 x10 ] % a s i , % l 0 / * % l 0 / % l 1 = d e s t + 0 x10 * /
xor % i 4 , % i 2 , % i 4
xor % i 5 , % i 3 , % i 5
ldda [ % i 1 + 0 x20 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x20 * /
xor % g 2 , % i 4 , % g 2
xor % g 3 , % i 5 , % g 3
ldda [ % i 7 + 0 x20 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c2 + 0 x20 * /
xor % l 0 , % g 2 , % l 0
xor % l 1 , % g 3 , % l 1
stxa % l 0 , [ % i 0 + 0 x10 ] % a s i
stxa % l 1 , [ % i 0 + 0 x18 ] % a s i
ldda [ % i 6 + 0 x20 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c3 + 0 x20 * /
ldda [ % i 0 + 0 x20 ] % a s i , % l 0 / * % l 0 / % l 1 = d e s t + 0 x20 * /
xor % i 4 , % i 2 , % i 4
xor % i 5 , % i 3 , % i 5
ldda [ % i 1 + 0 x30 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x30 * /
xor % g 2 , % i 4 , % g 2
xor % g 3 , % i 5 , % g 3
ldda [ % i 7 + 0 x30 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c2 + 0 x30 * /
xor % l 0 , % g 2 , % l 0
xor % l 1 , % g 3 , % l 1
stxa % l 0 , [ % i 0 + 0 x20 ] % a s i
stxa % l 1 , [ % i 0 + 0 x28 ] % a s i
ldda [ % i 6 + 0 x30 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c3 + 0 x30 * /
ldda [ % i 0 + 0 x30 ] % a s i , % l 0 / * % l 0 / % l 1 = d e s t + 0 x30 * /
prefetch [ % i 1 + 0 x40 ] , #o n e _ r e a d
prefetch [ % l 7 + 0 x40 ] , #o n e _ r e a d
prefetch [ % l 6 + 0 x40 ] , #o n e _ r e a d
prefetch [ % i 0 + 0 x40 ] , #n _ w r i t e s
xor % i 4 , % i 2 , % i 4
xor % i 5 , % i 3 , % i 5
xor % g 2 , % i 4 , % g 2
xor % g 3 , % i 5 , % g 3
xor % l 0 , % g 2 , % l 0
xor % l 1 , % g 3 , % l 1
stxa % l 0 , [ % i 0 + 0 x30 ] % a s i
stxa % l 1 , [ % i 0 + 0 x38 ] % a s i
add % i 0 , 0 x40 , % i 0
add % i 1 , 0 x40 , % i 1
add % l 7 , 0 x40 , % l 7
subcc % g 1 , 1 , % g 1
bne,p t % x c c , 1 b
add % l 6 , 0 x40 , % l 6
membar #S y n c
wr % g 7 , 0 x0 , % a s i
ret
restore
.size xor_ n i a g a r a _ 4 , . - x o r _ n i a g a r a _ 4
.globl xor_niagara_5
.type xor_ n i a g a r a _ 5 ,#f u n c t i o n
xor_niagara_5 : /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3, %o5=src4 */
save % s p , - 1 9 2 , % s p
prefetch [ % i 1 ] , #n _ w r i t e s
prefetch [ % i 2 ] , #o n e _ r e a d
prefetch [ % i 3 ] , #o n e _ r e a d
prefetch [ % i 4 ] , #o n e _ r e a d
prefetch [ % i 5 ] , #o n e _ r e a d
rd % a s i , % g 7
wr % g 0 , A S I _ B L K _ I N I T _ Q U A D _ L D D _ P , % a s i
srlx % i 0 , 6 , % g 1
mov % i 1 , % i 0
mov % i 2 , % i 1
mov % i 3 , % l 7
mov % i 4 , % l 6
mov % i 5 , % l 5
1 : ldda [ % i 1 + 0 x00 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x00 * /
ldda [ % l 7 + 0 x00 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c2 + 0 x00 * /
ldda [ % l 6 + 0 x00 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c3 + 0 x00 * /
ldda [ % l 5 + 0 x00 ] % a s i , % l 0 / * % l 0 / % l 1 = s r c4 + 0 x00 * /
ldda [ % i 0 + 0 x00 ] % a s i , % l 2 / * % l 2 / % l 3 = d e s t + 0 x00 * /
xor % i 4 , % i 2 , % i 4
xor % i 5 , % i 3 , % i 5
ldda [ % i 1 + 0 x10 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x10 * /
xor % g 2 , % i 4 , % g 2
xor % g 3 , % i 5 , % g 3
ldda [ % l 7 + 0 x10 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c2 + 0 x10 * /
xor % l 0 , % g 2 , % l 0
xor % l 1 , % g 3 , % l 1
ldda [ % l 6 + 0 x10 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c3 + 0 x10 * /
xor % l 2 , % l 0 , % l 2
xor % l 3 , % l 1 , % l 3
stxa % l 2 , [ % i 0 + 0 x00 ] % a s i
stxa % l 3 , [ % i 0 + 0 x08 ] % a s i
ldda [ % l 5 + 0 x10 ] % a s i , % l 0 / * % l 0 / % l 1 = s r c4 + 0 x10 * /
ldda [ % i 0 + 0 x10 ] % a s i , % l 2 / * % l 2 / % l 3 = d e s t + 0 x10 * /
xor % i 4 , % i 2 , % i 4
xor % i 5 , % i 3 , % i 5
ldda [ % i 1 + 0 x20 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x20 * /
xor % g 2 , % i 4 , % g 2
xor % g 3 , % i 5 , % g 3
ldda [ % l 7 + 0 x20 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c2 + 0 x20 * /
xor % l 0 , % g 2 , % l 0
xor % l 1 , % g 3 , % l 1
ldda [ % l 6 + 0 x20 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c3 + 0 x20 * /
xor % l 2 , % l 0 , % l 2
xor % l 3 , % l 1 , % l 3
stxa % l 2 , [ % i 0 + 0 x10 ] % a s i
stxa % l 3 , [ % i 0 + 0 x18 ] % a s i
ldda [ % l 5 + 0 x20 ] % a s i , % l 0 / * % l 0 / % l 1 = s r c4 + 0 x20 * /
ldda [ % i 0 + 0 x20 ] % a s i , % l 2 / * % l 2 / % l 3 = d e s t + 0 x20 * /
xor % i 4 , % i 2 , % i 4
xor % i 5 , % i 3 , % i 5
ldda [ % i 1 + 0 x30 ] % a s i , % i 2 / * % i 2 / % i 3 = s r c1 + 0 x30 * /
xor % g 2 , % i 4 , % g 2
xor % g 3 , % i 5 , % g 3
ldda [ % l 7 + 0 x30 ] % a s i , % i 4 / * % i 4 / % i 5 = s r c2 + 0 x30 * /
xor % l 0 , % g 2 , % l 0
xor % l 1 , % g 3 , % l 1
ldda [ % l 6 + 0 x30 ] % a s i , % g 2 / * % g 2 / % g 3 = s r c3 + 0 x30 * /
xor % l 2 , % l 0 , % l 2
xor % l 3 , % l 1 , % l 3
stxa % l 2 , [ % i 0 + 0 x20 ] % a s i
stxa % l 3 , [ % i 0 + 0 x28 ] % a s i
ldda [ % l 5 + 0 x30 ] % a s i , % l 0 / * % l 0 / % l 1 = s r c4 + 0 x30 * /
ldda [ % i 0 + 0 x30 ] % a s i , % l 2 / * % l 2 / % l 3 = d e s t + 0 x30 * /
prefetch [ % i 1 + 0 x40 ] , #o n e _ r e a d
prefetch [ % l 7 + 0 x40 ] , #o n e _ r e a d
prefetch [ % l 6 + 0 x40 ] , #o n e _ r e a d
prefetch [ % l 5 + 0 x40 ] , #o n e _ r e a d
prefetch [ % i 0 + 0 x40 ] , #n _ w r i t e s
xor % i 4 , % i 2 , % i 4
xor % i 5 , % i 3 , % i 5
xor % g 2 , % i 4 , % g 2
xor % g 3 , % i 5 , % g 3
xor % l 0 , % g 2 , % l 0
xor % l 1 , % g 3 , % l 1
xor % l 2 , % l 0 , % l 2
xor % l 3 , % l 1 , % l 3
stxa % l 2 , [ % i 0 + 0 x30 ] % a s i
stxa % l 3 , [ % i 0 + 0 x38 ] % a s i
add % i 0 , 0 x40 , % i 0
add % i 1 , 0 x40 , % i 1
add % l 7 , 0 x40 , % l 7
add % l 6 , 0 x40 , % l 6
subcc % g 1 , 1 , % g 1
bne,p t % x c c , 1 b
add % l 5 , 0 x40 , % l 5
membar #S y n c
wr % g 7 , 0 x0 , % a s i
ret
restore
.size xor_ n i a g a r a _ 5 , . - x o r _ n i a g a r a _ 5