2012-08-28 23:05:54 +04:00
# include < l i n u x / l i n k a g e . h >
# include < a s m / v i s a s m . h >
2012-08-31 23:11:51 +04:00
# include " o p c o d e s . h "
2012-08-28 23:05:54 +04:00
# define C A M E L L I A _ 6 R O U N D S ( K E Y _ B A S E , I 0 , I 1 ) \
CAMELLIA_ F ( K E Y _ B A S E + 0 , I 1 , I 0 , I 1 ) \
CAMELLIA_ F ( K E Y _ B A S E + 2 , I 0 , I 1 , I 0 ) \
CAMELLIA_ F ( K E Y _ B A S E + 4 , I 1 , I 0 , I 1 ) \
CAMELLIA_ F ( K E Y _ B A S E + 6 , I 0 , I 1 , I 0 ) \
CAMELLIA_ F ( K E Y _ B A S E + 8 , I 1 , I 0 , I 1 ) \
CAMELLIA_ F ( K E Y _ B A S E + 1 0 , I 0 , I 1 , I 0 )
# define C A M E L L I A _ 6 R O U N D S _ F L _ F L I ( K E Y _ B A S E , I 0 , I 1 ) \
CAMELLIA_ 6 R O U N D S ( K E Y _ B A S E , I 0 , I 1 ) \
CAMELLIA_ F L ( K E Y _ B A S E + 1 2 , I 0 , I 0 ) \
CAMELLIA_ F L I ( K E Y _ B A S E + 1 4 , I 1 , I 1 )
.data
.align 8
SIGMA : .xword 0xA09E667F 3 BCC9 0 8 B
.xword 0xB67AE8584CAA73B2
.xword 0xC6EF372FE94F82BE
.xword 0x54FF53A5F1D36F1C
.xword 0x10E527FADE682D1D
.xword 0xB05688C2B3E6C1FD
.text
.align 32
ENTRY( c a m e l l i a _ s p a r c64 _ k e y _ e x p a n d )
2012-09-21 23:04:51 +04:00
/* %o0=in_key, %o1=encrypt_key, %o2=key_len, %o3=decrypt_key */
2012-08-28 23:05:54 +04:00
VISEntry
ld [ % o 0 + 0 x00 ] , % f0 ! i 0 , k [ 0 ]
ld [ % o 0 + 0 x04 ] , % f1 ! i 1 , k [ 1 ]
ld [ % o 0 + 0 x08 ] , % f2 ! i 2 , k [ 2 ]
ld [ % o 0 + 0 x0 c ] , % f3 ! i 3 , k [ 3 ]
std % f0 , [ % o 1 + 0 x00 ] ! k [ 0 , 1 ]
fsrc2 % f0 , % f28
std % f2 , [ % o 1 + 0 x08 ] ! k [ 2 , 3 ]
cmp % o 2 , 1 6
be 1 0 f
fsrc2 % f2 , % f30
ld [ % o 0 + 0 x10 ] , % f0
ld [ % o 0 + 0 x14 ] , % f1
std % f0 , [ % o 1 + 0 x20 ] ! k [ 8 , 9 ]
cmp % o 2 , 2 4
fone % f10
be,a 1 f
fxor % f10 , % f0 , % f2
ld [ % o 0 + 0 x18 ] , % f2
ld [ % o 0 + 0 x1 c ] , % f3
1 :
std % f2 , [ % o 1 + 0 x28 ] ! k [ 1 0 , 1 1 ]
fxor % f28 , % f0 , % f0
fxor % f30 , % f2 , % f2
10 :
sethi % h i ( S I G M A ) , % g 3
or % g 3 , % l o ( S I G M A ) , % g 3
ldd [ % g 3 + 0 x00 ] , % f16
ldd [ % g 3 + 0 x08 ] , % f18
ldd [ % g 3 + 0 x10 ] , % f20
ldd [ % g 3 + 0 x18 ] , % f22
ldd [ % g 3 + 0 x20 ] , % f24
ldd [ % g 3 + 0 x28 ] , % f26
CAMELLIA_ F ( 1 6 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 8 , 0 , 2 , 0 )
fxor % f28 , % f0 , % f0
fxor % f30 , % f2 , % f2
CAMELLIA_ F ( 2 0 , 2 , 0 , 2 )
CAMELLIA_ F ( 2 2 , 0 , 2 , 0 )
# define R O T L 1 2 8 ( S 0 1 , S 2 3 , T M P 1 , T M P 2 , N ) \
srlx S 0 1 , ( 6 4 - N ) , T M P 1 ; \
sllx S 0 1 , N , S 0 1 ; \
srlx S 2 3 , ( 6 4 - N ) , T M P 2 ; \
sllx S 2 3 , N , S 2 3 ; \
or S 0 1 , T M P 2 , S 0 1 ; \
or S 2 3 , T M P 1 , S 2 3
cmp % o 2 , 1 6
bne 1 f
nop
/* 128-bit key */
std % f0 , [ % o 1 + 0 x10 ] ! k [ 4 , 5 ]
std % f2 , [ % o 1 + 0 x18 ] ! k [ 6 , 7 ]
MOVDTOX_ F 0 _ O 4
MOVDTOX_ F 2 _ O 5
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 4 , [ % o 1 + 0 x30 ] ! k [ 1 2 , 1 3 ]
stx % o 5 , [ % o 1 + 0 x38 ] ! k [ 1 4 , 1 5 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 4 , [ % o 1 + 0 x40 ] ! k [ 1 6 , 1 7 ]
stx % o 5 , [ % o 1 + 0 x48 ] ! k [ 1 8 , 1 9 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 4 , [ % o 1 + 0 x60 ] ! k [ 2 4 , 2 5 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 4 , [ % o 1 + 0 x70 ] ! k [ 2 8 , 2 9 ]
stx % o 5 , [ % o 1 + 0 x78 ] ! k [ 3 0 , 3 1 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 3 4 )
stx % o 4 , [ % o 1 + 0 x a0 ] ! k [ 4 0 , 4 1 ]
stx % o 5 , [ % o 1 + 0 x a8 ] ! k [ 4 2 , 4 3 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 7 )
stx % o 4 , [ % o 1 + 0 x c0 ] ! k [ 4 8 , 4 9 ]
stx % o 5 , [ % o 1 + 0 x c8 ] ! k [ 5 0 , 5 1 ]
ldx [ % o 1 + 0 x00 ] , % o 4 ! k [ 0 , 1 ]
ldx [ % o 1 + 0 x08 ] , % o 5 ! k [ 2 , 3 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 4 , [ % o 1 + 0 x20 ] ! k [ 8 , 9 ]
stx % o 5 , [ % o 1 + 0 x28 ] ! k [ 1 0 , 1 1 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 3 0 )
stx % o 4 , [ % o 1 + 0 x50 ] ! k [ 2 0 , 2 1 ]
stx % o 5 , [ % o 1 + 0 x58 ] ! k [ 2 2 , 2 3 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 5 , [ % o 1 + 0 x68 ] ! k [ 2 6 , 2 7 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 7 )
stx % o 4 , [ % o 1 + 0 x80 ] ! k [ 3 2 , 3 3 ]
stx % o 5 , [ % o 1 + 0 x88 ] ! k [ 3 4 , 3 5 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 7 )
stx % o 4 , [ % o 1 + 0 x90 ] ! k [ 3 6 , 3 7 ]
stx % o 5 , [ % o 1 + 0 x98 ] ! k [ 3 8 , 3 9 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 7 )
stx % o 4 , [ % o 1 + 0 x b0 ] ! k [ 4 4 , 4 5 ]
stx % o 5 , [ % o 1 + 0 x b8 ] ! k [ 4 6 , 4 7 ]
ba,p t % x c c , 2 f
mov ( 3 * 1 6 * 4 ) , % o 0
1 :
/* 192-bit or 256-bit key */
std % f0 , [ % o 1 + 0 x30 ] ! k [ 1 2 , 1 3 ]
std % f2 , [ % o 1 + 0 x38 ] ! k [ 1 4 , 1 5 ]
ldd [ % o 1 + 0 x20 ] , % f4 ! k [ 8 , 9 ]
ldd [ % o 1 + 0 x28 ] , % f6 ! k [ 1 0 , 1 1 ]
fxor % f0 , % f4 , % f0
fxor % f2 , % f6 , % f2
CAMELLIA_ F ( 2 4 , 2 , 0 , 2 )
CAMELLIA_ F ( 2 6 , 0 , 2 , 0 )
std % f0 , [ % o 1 + 0 x10 ] ! k [ 4 , 5 ]
std % f2 , [ % o 1 + 0 x18 ] ! k [ 6 , 7 ]
MOVDTOX_ F 0 _ O 4
MOVDTOX_ F 2 _ O 5
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 3 0 )
stx % o 4 , [ % o 1 + 0 x50 ] ! k [ 2 0 , 2 1 ]
stx % o 5 , [ % o 1 + 0 x58 ] ! k [ 2 2 , 2 3 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 3 0 )
stx % o 4 , [ % o 1 + 0 x a0 ] ! k [ 4 0 , 4 1 ]
stx % o 5 , [ % o 1 + 0 x a8 ] ! k [ 4 2 , 4 3 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 5 1 )
stx % o 4 , [ % o 1 + 0 x10 0 ] ! k [ 6 4 , 6 5 ]
stx % o 5 , [ % o 1 + 0 x10 8 ] ! k [ 6 6 , 6 7 ]
ldx [ % o 1 + 0 x20 ] , % o 4 ! k [ 8 , 9 ]
ldx [ % o 1 + 0 x28 ] , % o 5 ! k [ 1 0 , 1 1 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 4 , [ % o 1 + 0 x20 ] ! k [ 8 , 9 ]
stx % o 5 , [ % o 1 + 0 x28 ] ! k [ 1 0 , 1 1 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 4 , [ % o 1 + 0 x40 ] ! k [ 1 6 , 1 7 ]
stx % o 5 , [ % o 1 + 0 x48 ] ! k [ 1 8 , 1 9 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 3 0 )
stx % o 4 , [ % o 1 + 0 x90 ] ! k [ 3 6 , 3 7 ]
stx % o 5 , [ % o 1 + 0 x98 ] ! k [ 3 8 , 3 9 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 3 4 )
stx % o 4 , [ % o 1 + 0 x d0 ] ! k [ 5 2 , 5 3 ]
stx % o 5 , [ % o 1 + 0 x d8 ] ! k [ 5 4 , 5 5 ]
ldx [ % o 1 + 0 x30 ] , % o 4 ! k [ 1 2 , 1 3 ]
ldx [ % o 1 + 0 x38 ] , % o 5 ! k [ 1 4 , 1 5 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 4 , [ % o 1 + 0 x30 ] ! k [ 1 2 , 1 3 ]
stx % o 5 , [ % o 1 + 0 x38 ] ! k [ 1 4 , 1 5 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 3 0 )
stx % o 4 , [ % o 1 + 0 x70 ] ! k [ 2 8 , 2 9 ]
stx % o 5 , [ % o 1 + 0 x78 ] ! k [ 3 0 , 3 1 ]
srlx % o 4 , 3 2 , % g 2
srlx % o 5 , 3 2 , % g 3
stw % o 4 , [ % o 1 + 0 x c0 ] ! k [ 4 8 ]
stw % g 3 , [ % o 1 + 0 x c4 ] ! k [ 4 9 ]
stw % o 5 , [ % o 1 + 0 x c8 ] ! k [ 5 0 ]
stw % g 2 , [ % o 1 + 0 x c c ] ! k [ 5 1 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 4 9 )
stx % o 4 , [ % o 1 + 0 x e 0 ] ! k [ 5 6 , 5 7 ]
stx % o 5 , [ % o 1 + 0 x e 8 ] ! k [ 5 8 , 5 9 ]
ldx [ % o 1 + 0 x00 ] , % o 4 ! k [ 0 , 1 ]
ldx [ % o 1 + 0 x08 ] , % o 5 ! k [ 2 , 3 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 4 5 )
stx % o 4 , [ % o 1 + 0 x60 ] ! k [ 2 4 , 2 5 ]
stx % o 5 , [ % o 1 + 0 x68 ] ! k [ 2 6 , 2 7 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 5 )
stx % o 4 , [ % o 1 + 0 x80 ] ! k [ 3 2 , 3 3 ]
stx % o 5 , [ % o 1 + 0 x88 ] ! k [ 3 4 , 3 5 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 1 7 )
stx % o 4 , [ % o 1 + 0 x b0 ] ! k [ 4 4 , 4 5 ]
stx % o 5 , [ % o 1 + 0 x b8 ] ! k [ 4 6 , 4 7 ]
ROTL1 2 8 ( % o 4 , % o 5 , % g 2 , % g 3 , 3 4 )
stx % o 4 , [ % o 1 + 0 x f0 ] ! k [ 6 0 , 6 1 ]
stx % o 5 , [ % o 1 + 0 x f8 ] ! k [ 6 2 , 6 3 ]
mov ( 4 * 1 6 * 4 ) , % o 0
2 :
add % o 1 , % o 0 , % o 1
ldd [ % o 1 + 0 x00 ] , % f0
ldd [ % o 1 + 0 x08 ] , % f2
std % f0 , [ % o 3 + 0 x00 ]
std % f2 , [ % o 3 + 0 x08 ]
add % o 3 , 0 x10 , % o 3
1 :
sub % o 1 , ( 1 6 * 4 ) , % o 1
ldd [ % o 1 + 0 x38 ] , % f0
ldd [ % o 1 + 0 x30 ] , % f2
ldd [ % o 1 + 0 x28 ] , % f4
ldd [ % o 1 + 0 x20 ] , % f6
ldd [ % o 1 + 0 x18 ] , % f8
ldd [ % o 1 + 0 x10 ] , % f10
std % f0 , [ % o 3 + 0 x00 ]
std % f2 , [ % o 3 + 0 x08 ]
std % f4 , [ % o 3 + 0 x10 ]
std % f6 , [ % o 3 + 0 x18 ]
std % f8 , [ % o 3 + 0 x20 ]
std % f10 , [ % o 3 + 0 x28 ]
ldd [ % o 1 + 0 x08 ] , % f0
ldd [ % o 1 + 0 x00 ] , % f2
std % f0 , [ % o 3 + 0 x30 ]
std % f2 , [ % o 3 + 0 x38 ]
subcc % o 0 , ( 1 6 * 4 ) , % o 0
bne,p t % i c c , 1 b
add % o 3 , ( 1 6 * 4 ) , % o 3
std % f2 , [ % o 3 - 0 x10 ]
std % f0 , [ % o 3 - 0 x08 ]
retl
VISExit
ENDPROC( c a m e l l i a _ s p a r c64 _ k e y _ e x p a n d )
.align 32
ENTRY( c a m e l l i a _ s p a r c64 _ c r y p t )
/* %o0=key, %o1=input, %o2=output, %o3=key_len */
VISEntry
ld [ % o 1 + 0 x00 ] , % f0
ld [ % o 1 + 0 x04 ] , % f1
ld [ % o 1 + 0 x08 ] , % f2
ld [ % o 1 + 0 x0 c ] , % f3
ldd [ % o 0 + 0 x00 ] , % f4
ldd [ % o 0 + 0 x08 ] , % f6
cmp % o 3 , 1 6
fxor % f4 , % f0 , % f0
be 1 f
fxor % f6 , % f2 , % f2
ldd [ % o 0 + 0 x10 ] , % f8
ldd [ % o 0 + 0 x18 ] , % f10
ldd [ % o 0 + 0 x20 ] , % f12
ldd [ % o 0 + 0 x28 ] , % f14
ldd [ % o 0 + 0 x30 ] , % f16
ldd [ % o 0 + 0 x38 ] , % f18
ldd [ % o 0 + 0 x40 ] , % f20
ldd [ % o 0 + 0 x48 ] , % f22
add % o 0 , 0 x40 , % o 0
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 8 , 0 , 2 )
1 :
ldd [ % o 0 + 0 x10 ] , % f8
ldd [ % o 0 + 0 x18 ] , % f10
ldd [ % o 0 + 0 x20 ] , % f12
ldd [ % o 0 + 0 x28 ] , % f14
ldd [ % o 0 + 0 x30 ] , % f16
ldd [ % o 0 + 0 x38 ] , % f18
ldd [ % o 0 + 0 x40 ] , % f20
ldd [ % o 0 + 0 x48 ] , % f22
ldd [ % o 0 + 0 x50 ] , % f24
ldd [ % o 0 + 0 x58 ] , % f26
ldd [ % o 0 + 0 x60 ] , % f28
ldd [ % o 0 + 0 x68 ] , % f30
ldd [ % o 0 + 0 x70 ] , % f32
ldd [ % o 0 + 0 x78 ] , % f34
ldd [ % o 0 + 0 x80 ] , % f36
ldd [ % o 0 + 0 x88 ] , % f38
ldd [ % o 0 + 0 x90 ] , % f40
ldd [ % o 0 + 0 x98 ] , % f42
ldd [ % o 0 + 0 x a0 ] , % f44
ldd [ % o 0 + 0 x a8 ] , % f46
ldd [ % o 0 + 0 x b0 ] , % f48
ldd [ % o 0 + 0 x b8 ] , % f50
ldd [ % o 0 + 0 x c0 ] , % f52
ldd [ % o 0 + 0 x c8 ] , % f54
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 8 , 0 , 2 )
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 2 4 , 0 , 2 )
CAMELLIA_ 6 R O U N D S ( 4 0 , 0 , 2 )
fxor % f52 , % f2 , % f2
fxor % f54 , % f0 , % f0
st % f2 , [ % o 2 + 0 x00 ]
st % f3 , [ % o 2 + 0 x04 ]
st % f0 , [ % o 2 + 0 x08 ]
st % f1 , [ % o 2 + 0 x0 c ]
retl
VISExit
ENDPROC( c a m e l l i a _ s p a r c64 _ c r y p t )
.align 32
ENTRY( c a m e l l i a _ s p a r c64 _ l o a d _ k e y s )
/* %o0=key, %o1=key_len */
VISEntry
ldd [ % o 0 + 0 x00 ] , % f4
ldd [ % o 0 + 0 x08 ] , % f6
ldd [ % o 0 + 0 x10 ] , % f8
ldd [ % o 0 + 0 x18 ] , % f10
ldd [ % o 0 + 0 x20 ] , % f12
ldd [ % o 0 + 0 x28 ] , % f14
ldd [ % o 0 + 0 x30 ] , % f16
ldd [ % o 0 + 0 x38 ] , % f18
ldd [ % o 0 + 0 x40 ] , % f20
ldd [ % o 0 + 0 x48 ] , % f22
ldd [ % o 0 + 0 x50 ] , % f24
ldd [ % o 0 + 0 x58 ] , % f26
ldd [ % o 0 + 0 x60 ] , % f28
ldd [ % o 0 + 0 x68 ] , % f30
ldd [ % o 0 + 0 x70 ] , % f32
ldd [ % o 0 + 0 x78 ] , % f34
ldd [ % o 0 + 0 x80 ] , % f36
ldd [ % o 0 + 0 x88 ] , % f38
ldd [ % o 0 + 0 x90 ] , % f40
ldd [ % o 0 + 0 x98 ] , % f42
ldd [ % o 0 + 0 x a0 ] , % f44
ldd [ % o 0 + 0 x a8 ] , % f46
ldd [ % o 0 + 0 x b0 ] , % f48
ldd [ % o 0 + 0 x b8 ] , % f50
ldd [ % o 0 + 0 x c0 ] , % f52
retl
ldd [ % o 0 + 0 x c8 ] , % f54
ENDPROC( c a m e l l i a _ s p a r c64 _ l o a d _ k e y s )
.align 32
ENTRY( c a m e l l i a _ s p a r c64 _ e c b _ c r y p t _ 3 _ g r a n d _ r o u n d s )
/* %o0=input, %o1=output, %o2=len, %o3=key */
1 : ldd [ % o 0 + 0 x00 ] , % f0
ldd [ % o 0 + 0 x08 ] , % f2
add % o 0 , 0 x10 , % o 0
fxor % f4 , % f0 , % f0
fxor % f6 , % f2 , % f2
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 8 , 0 , 2 )
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 2 4 , 0 , 2 )
CAMELLIA_ 6 R O U N D S ( 4 0 , 0 , 2 )
fxor % f52 , % f2 , % f2
fxor % f54 , % f0 , % f0
std % f2 , [ % o 1 + 0 x00 ]
std % f0 , [ % o 1 + 0 x08 ]
subcc % o 2 , 0 x10 , % o 2
bne,p t % i c c , 1 b
add % o 1 , 0 x10 , % o 1
retl
nop
ENDPROC( c a m e l l i a _ s p a r c64 _ e c b _ c r y p t _ 3 _ g r a n d _ r o u n d s )
.align 32
ENTRY( c a m e l l i a _ s p a r c64 _ e c b _ c r y p t _ 4 _ g r a n d _ r o u n d s )
/* %o0=input, %o1=output, %o2=len, %o3=key */
1 : ldd [ % o 0 + 0 x00 ] , % f0
ldd [ % o 0 + 0 x08 ] , % f2
add % o 0 , 0 x10 , % o 0
fxor % f4 , % f0 , % f0
fxor % f6 , % f2 , % f2
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 8 , 0 , 2 )
ldd [ % o 3 + 0 x d0 ] , % f8
ldd [ % o 3 + 0 x d8 ] , % f10
ldd [ % o 3 + 0 x e 0 ] , % f12
ldd [ % o 3 + 0 x e 8 ] , % f14
ldd [ % o 3 + 0 x f0 ] , % f16
ldd [ % o 3 + 0 x f8 ] , % f18
ldd [ % o 3 + 0 x10 0 ] , % f20
ldd [ % o 3 + 0 x10 8 ] , % f22
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 2 4 , 0 , 2 )
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 4 0 , 0 , 2 )
CAMELLIA_ F ( 8 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 0 , 0 , 2 , 0 )
ldd [ % o 3 + 0 x10 ] , % f8
ldd [ % o 3 + 0 x18 ] , % f10
CAMELLIA_ F ( 1 2 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 4 , 0 , 2 , 0 )
ldd [ % o 3 + 0 x20 ] , % f12
ldd [ % o 3 + 0 x28 ] , % f14
CAMELLIA_ F ( 1 6 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 8 , 0 , 2 , 0 )
ldd [ % o 3 + 0 x30 ] , % f16
ldd [ % o 3 + 0 x38 ] , % f18
fxor % f20 , % f2 , % f2
fxor % f22 , % f0 , % f0
ldd [ % o 3 + 0 x40 ] , % f20
ldd [ % o 3 + 0 x48 ] , % f22
std % f2 , [ % o 1 + 0 x00 ]
std % f0 , [ % o 1 + 0 x08 ]
subcc % o 2 , 0 x10 , % o 2
bne,p t % i c c , 1 b
add % o 1 , 0 x10 , % o 1
retl
nop
ENDPROC( c a m e l l i a _ s p a r c64 _ e c b _ c r y p t _ 4 _ g r a n d _ r o u n d s )
.align 32
ENTRY( c a m e l l i a _ s p a r c64 _ c b c _ e n c r y p t _ 3 _ g r a n d _ r o u n d s )
/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
ldd [ % o 4 + 0 x00 ] , % f60
ldd [ % o 4 + 0 x08 ] , % f62
1 : ldd [ % o 0 + 0 x00 ] , % f0
ldd [ % o 0 + 0 x08 ] , % f2
add % o 0 , 0 x10 , % o 0
fxor % f60 , % f0 , % f0
fxor % f62 , % f2 , % f2
fxor % f4 , % f0 , % f0
fxor % f6 , % f2 , % f2
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 8 , 0 , 2 )
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 2 4 , 0 , 2 )
CAMELLIA_ 6 R O U N D S ( 4 0 , 0 , 2 )
fxor % f52 , % f2 , % f60
fxor % f54 , % f0 , % f62
std % f60 , [ % o 1 + 0 x00 ]
std % f62 , [ % o 1 + 0 x08 ]
subcc % o 2 , 0 x10 , % o 2
bne,p t % i c c , 1 b
add % o 1 , 0 x10 , % o 1
std % f60 , [ % o 4 + 0 x00 ]
retl
std % f62 , [ % o 4 + 0 x08 ]
ENDPROC( c a m e l l i a _ s p a r c64 _ c b c _ e n c r y p t _ 3 _ g r a n d _ r o u n d s )
.align 32
ENTRY( c a m e l l i a _ s p a r c64 _ c b c _ e n c r y p t _ 4 _ g r a n d _ r o u n d s )
/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
ldd [ % o 4 + 0 x00 ] , % f60
ldd [ % o 4 + 0 x08 ] , % f62
1 : ldd [ % o 0 + 0 x00 ] , % f0
ldd [ % o 0 + 0 x08 ] , % f2
add % o 0 , 0 x10 , % o 0
fxor % f60 , % f0 , % f0
fxor % f62 , % f2 , % f2
fxor % f4 , % f0 , % f0
fxor % f6 , % f2 , % f2
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 8 , 0 , 2 )
ldd [ % o 3 + 0 x d0 ] , % f8
ldd [ % o 3 + 0 x d8 ] , % f10
ldd [ % o 3 + 0 x e 0 ] , % f12
ldd [ % o 3 + 0 x e 8 ] , % f14
ldd [ % o 3 + 0 x f0 ] , % f16
ldd [ % o 3 + 0 x f8 ] , % f18
ldd [ % o 3 + 0 x10 0 ] , % f20
ldd [ % o 3 + 0 x10 8 ] , % f22
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 2 4 , 0 , 2 )
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 4 0 , 0 , 2 )
CAMELLIA_ F ( 8 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 0 , 0 , 2 , 0 )
ldd [ % o 3 + 0 x10 ] , % f8
ldd [ % o 3 + 0 x18 ] , % f10
CAMELLIA_ F ( 1 2 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 4 , 0 , 2 , 0 )
ldd [ % o 3 + 0 x20 ] , % f12
ldd [ % o 3 + 0 x28 ] , % f14
CAMELLIA_ F ( 1 6 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 8 , 0 , 2 , 0 )
ldd [ % o 3 + 0 x30 ] , % f16
ldd [ % o 3 + 0 x38 ] , % f18
fxor % f20 , % f2 , % f60
fxor % f22 , % f0 , % f62
ldd [ % o 3 + 0 x40 ] , % f20
ldd [ % o 3 + 0 x48 ] , % f22
std % f60 , [ % o 1 + 0 x00 ]
std % f62 , [ % o 1 + 0 x08 ]
subcc % o 2 , 0 x10 , % o 2
bne,p t % i c c , 1 b
add % o 1 , 0 x10 , % o 1
std % f60 , [ % o 4 + 0 x00 ]
retl
std % f62 , [ % o 4 + 0 x08 ]
ENDPROC( c a m e l l i a _ s p a r c64 _ c b c _ e n c r y p t _ 4 _ g r a n d _ r o u n d s )
.align 32
ENTRY( c a m e l l i a _ s p a r c64 _ c b c _ d e c r y p t _ 3 _ g r a n d _ r o u n d s )
/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
ldd [ % o 4 + 0 x00 ] , % f60
ldd [ % o 4 + 0 x08 ] , % f62
1 : ldd [ % o 0 + 0 x00 ] , % f56
ldd [ % o 0 + 0 x08 ] , % f58
add % o 0 , 0 x10 , % o 0
fxor % f4 , % f56 , % f0
fxor % f6 , % f58 , % f2
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 8 , 0 , 2 )
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 2 4 , 0 , 2 )
CAMELLIA_ 6 R O U N D S ( 4 0 , 0 , 2 )
fxor % f52 , % f2 , % f2
fxor % f54 , % f0 , % f0
fxor % f60 , % f2 , % f2
fxor % f62 , % f0 , % f0
fsrc2 % f56 , % f60
fsrc2 % f58 , % f62
std % f2 , [ % o 1 + 0 x00 ]
std % f0 , [ % o 1 + 0 x08 ]
subcc % o 2 , 0 x10 , % o 2
bne,p t % i c c , 1 b
add % o 1 , 0 x10 , % o 1
std % f60 , [ % o 4 + 0 x00 ]
retl
std % f62 , [ % o 4 + 0 x08 ]
ENDPROC( c a m e l l i a _ s p a r c64 _ c b c _ d e c r y p t _ 3 _ g r a n d _ r o u n d s )
.align 32
ENTRY( c a m e l l i a _ s p a r c64 _ c b c _ d e c r y p t _ 4 _ g r a n d _ r o u n d s )
/* %o0=input, %o1=output, %o2=len, %o3=key, %o4=IV */
ldd [ % o 4 + 0 x00 ] , % f60
ldd [ % o 4 + 0 x08 ] , % f62
1 : ldd [ % o 0 + 0 x00 ] , % f56
ldd [ % o 0 + 0 x08 ] , % f58
add % o 0 , 0 x10 , % o 0
fxor % f4 , % f56 , % f0
fxor % f6 , % f58 , % f2
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 8 , 0 , 2 )
ldd [ % o 3 + 0 x d0 ] , % f8
ldd [ % o 3 + 0 x d8 ] , % f10
ldd [ % o 3 + 0 x e 0 ] , % f12
ldd [ % o 3 + 0 x e 8 ] , % f14
ldd [ % o 3 + 0 x f0 ] , % f16
ldd [ % o 3 + 0 x f8 ] , % f18
ldd [ % o 3 + 0 x10 0 ] , % f20
ldd [ % o 3 + 0 x10 8 ] , % f22
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 2 4 , 0 , 2 )
CAMELLIA_ 6 R O U N D S _ F L _ F L I ( 4 0 , 0 , 2 )
CAMELLIA_ F ( 8 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 0 , 0 , 2 , 0 )
ldd [ % o 3 + 0 x10 ] , % f8
ldd [ % o 3 + 0 x18 ] , % f10
CAMELLIA_ F ( 1 2 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 4 , 0 , 2 , 0 )
ldd [ % o 3 + 0 x20 ] , % f12
ldd [ % o 3 + 0 x28 ] , % f14
CAMELLIA_ F ( 1 6 , 2 , 0 , 2 )
CAMELLIA_ F ( 1 8 , 0 , 2 , 0 )
ldd [ % o 3 + 0 x30 ] , % f16
ldd [ % o 3 + 0 x38 ] , % f18
fxor % f20 , % f2 , % f2
fxor % f22 , % f0 , % f0
ldd [ % o 3 + 0 x40 ] , % f20
ldd [ % o 3 + 0 x48 ] , % f22
fxor % f60 , % f2 , % f2
fxor % f62 , % f0 , % f0
fsrc2 % f56 , % f60
fsrc2 % f58 , % f62
std % f2 , [ % o 1 + 0 x00 ]
std % f0 , [ % o 1 + 0 x08 ]
subcc % o 2 , 0 x10 , % o 2
bne,p t % i c c , 1 b
add % o 1 , 0 x10 , % o 1
std % f60 , [ % o 4 + 0 x00 ]
retl
std % f62 , [ % o 4 + 0 x08 ]
ENDPROC( c a m e l l i a _ s p a r c64 _ c b c _ d e c r y p t _ 4 _ g r a n d _ r o u n d s )