241 lines
3.8 KiB
ArmAsm
241 lines
3.8 KiB
ArmAsm
|
.text
|
||
|
|
||
|
.globl RC4
|
||
|
.type RC4,@function
|
||
|
.align 64
|
||
|
RC4:
|
||
|
stmg %r6,%r11,6*8(%r15)
|
||
|
llgc %r6,0(%r2)
|
||
|
llgc %r10,1(%r2)
|
||
|
la %r6,1(%r6)
|
||
|
nill %r6,0xff
|
||
|
srlg %r1,%r3,3
|
||
|
ltgr %r1,%r1
|
||
|
llgc %r8,2(%r6,%r2)
|
||
|
jz .Lshort
|
||
|
j .Loop8
|
||
|
|
||
|
.align 64
|
||
|
.Loop8:
|
||
|
la %r10,0(%r10,%r8) # 0
|
||
|
nill %r10,255
|
||
|
la %r7,1(%r6)
|
||
|
nill %r7,255
|
||
|
llgc %r11,2(%r10,%r2)
|
||
|
stc %r8,2(%r10,%r2)
|
||
|
llgc %r9,2(%r7,%r2)
|
||
|
stc %r11,2(%r6,%r2)
|
||
|
cr %r7,%r10
|
||
|
jne .Lcmov0
|
||
|
la %r9,0(%r8)
|
||
|
.Lcmov0:
|
||
|
la %r11,0(%r11,%r8)
|
||
|
nill %r11,255
|
||
|
la %r10,0(%r10,%r9) # 1
|
||
|
nill %r10,255
|
||
|
la %r6,1(%r7)
|
||
|
nill %r6,255
|
||
|
llgc %r0,2(%r11,%r2)
|
||
|
llgc %r11,2(%r10,%r2)
|
||
|
stc %r9,2(%r10,%r2)
|
||
|
llgc %r8,2(%r6,%r2)
|
||
|
stc %r11,2(%r7,%r2)
|
||
|
cr %r6,%r10
|
||
|
jne .Lcmov1
|
||
|
la %r8,0(%r9)
|
||
|
.Lcmov1:
|
||
|
la %r11,0(%r11,%r9)
|
||
|
nill %r11,255
|
||
|
la %r10,0(%r10,%r8) # 2
|
||
|
nill %r10,255
|
||
|
la %r7,1(%r6)
|
||
|
nill %r7,255
|
||
|
sllg %r0,%r0,8
|
||
|
ic %r0,2(%r11,%r2)
|
||
|
llgc %r11,2(%r10,%r2)
|
||
|
stc %r8,2(%r10,%r2)
|
||
|
llgc %r9,2(%r7,%r2)
|
||
|
stc %r11,2(%r6,%r2)
|
||
|
cr %r7,%r10
|
||
|
jne .Lcmov2
|
||
|
la %r9,0(%r8)
|
||
|
.Lcmov2:
|
||
|
la %r11,0(%r11,%r8)
|
||
|
nill %r11,255
|
||
|
la %r10,0(%r10,%r9) # 3
|
||
|
nill %r10,255
|
||
|
la %r6,1(%r7)
|
||
|
nill %r6,255
|
||
|
sllg %r0,%r0,8
|
||
|
ic %r0,2(%r11,%r2)
|
||
|
llgc %r11,2(%r10,%r2)
|
||
|
stc %r9,2(%r10,%r2)
|
||
|
llgc %r8,2(%r6,%r2)
|
||
|
stc %r11,2(%r7,%r2)
|
||
|
cr %r6,%r10
|
||
|
jne .Lcmov3
|
||
|
la %r8,0(%r9)
|
||
|
.Lcmov3:
|
||
|
la %r11,0(%r11,%r9)
|
||
|
nill %r11,255
|
||
|
la %r10,0(%r10,%r8) # 4
|
||
|
nill %r10,255
|
||
|
la %r7,1(%r6)
|
||
|
nill %r7,255
|
||
|
sllg %r0,%r0,8
|
||
|
ic %r0,2(%r11,%r2)
|
||
|
llgc %r11,2(%r10,%r2)
|
||
|
stc %r8,2(%r10,%r2)
|
||
|
llgc %r9,2(%r7,%r2)
|
||
|
stc %r11,2(%r6,%r2)
|
||
|
cr %r7,%r10
|
||
|
jne .Lcmov4
|
||
|
la %r9,0(%r8)
|
||
|
.Lcmov4:
|
||
|
la %r11,0(%r11,%r8)
|
||
|
nill %r11,255
|
||
|
la %r10,0(%r10,%r9) # 5
|
||
|
nill %r10,255
|
||
|
la %r6,1(%r7)
|
||
|
nill %r6,255
|
||
|
sllg %r0,%r0,8
|
||
|
ic %r0,2(%r11,%r2)
|
||
|
llgc %r11,2(%r10,%r2)
|
||
|
stc %r9,2(%r10,%r2)
|
||
|
llgc %r8,2(%r6,%r2)
|
||
|
stc %r11,2(%r7,%r2)
|
||
|
cr %r6,%r10
|
||
|
jne .Lcmov5
|
||
|
la %r8,0(%r9)
|
||
|
.Lcmov5:
|
||
|
la %r11,0(%r11,%r9)
|
||
|
nill %r11,255
|
||
|
la %r10,0(%r10,%r8) # 6
|
||
|
nill %r10,255
|
||
|
la %r7,1(%r6)
|
||
|
nill %r7,255
|
||
|
sllg %r0,%r0,8
|
||
|
ic %r0,2(%r11,%r2)
|
||
|
llgc %r11,2(%r10,%r2)
|
||
|
stc %r8,2(%r10,%r2)
|
||
|
llgc %r9,2(%r7,%r2)
|
||
|
stc %r11,2(%r6,%r2)
|
||
|
cr %r7,%r10
|
||
|
jne .Lcmov6
|
||
|
la %r9,0(%r8)
|
||
|
.Lcmov6:
|
||
|
la %r11,0(%r11,%r8)
|
||
|
nill %r11,255
|
||
|
la %r10,0(%r10,%r9) # 7
|
||
|
nill %r10,255
|
||
|
la %r6,1(%r7)
|
||
|
nill %r6,255
|
||
|
sllg %r0,%r0,8
|
||
|
ic %r0,2(%r11,%r2)
|
||
|
llgc %r11,2(%r10,%r2)
|
||
|
stc %r9,2(%r10,%r2)
|
||
|
llgc %r8,2(%r6,%r2)
|
||
|
stc %r11,2(%r7,%r2)
|
||
|
cr %r6,%r10
|
||
|
jne .Lcmov7
|
||
|
la %r8,0(%r9)
|
||
|
.Lcmov7:
|
||
|
la %r11,0(%r11,%r9)
|
||
|
nill %r11,255
|
||
|
lg %r9,0(%r4)
|
||
|
sllg %r0,%r0,8
|
||
|
la %r4,8(%r4)
|
||
|
ic %r0,2(%r11,%r2)
|
||
|
xgr %r0,%r9
|
||
|
stg %r0,0(%r5)
|
||
|
la %r5,8(%r5)
|
||
|
brctg %r1,.Loop8
|
||
|
|
||
|
.Lshort:
|
||
|
lghi %r0,7
|
||
|
ngr %r3,%r0
|
||
|
jz .Lexit
|
||
|
j .Loop1
|
||
|
|
||
|
.align 16
|
||
|
.Loop1:
|
||
|
la %r10,0(%r10,%r8)
|
||
|
nill %r10,255
|
||
|
llgc %r11,2(%r10,%r2)
|
||
|
stc %r8,2(%r10,%r2)
|
||
|
stc %r11,2(%r6,%r2)
|
||
|
ar %r11,%r8
|
||
|
ahi %r6,1
|
||
|
nill %r11,255
|
||
|
nill %r6,255
|
||
|
llgc %r0,0(%r4)
|
||
|
la %r4,1(%r4)
|
||
|
llgc %r11,2(%r11,%r2)
|
||
|
llgc %r8,2(%r6,%r2)
|
||
|
xr %r0,%r11
|
||
|
stc %r0,0(%r5)
|
||
|
la %r5,1(%r5)
|
||
|
brct %r3,.Loop1
|
||
|
|
||
|
.Lexit:
|
||
|
ahi %r6,-1
|
||
|
stc %r6,0(%r2)
|
||
|
stc %r10,1(%r2)
|
||
|
lmg %r6,%r11,6*8(%r15)
|
||
|
br %r14
|
||
|
.size RC4,.-RC4
|
||
|
.string "RC4 for s390x, CRYPTOGAMS by <appro@openssl.org>"
|
||
|
|
||
|
.globl RC4_set_key
|
||
|
.type RC4_set_key,@function
|
||
|
.align 64
|
||
|
RC4_set_key:
|
||
|
stmg %r6,%r8,6*8(%r15)
|
||
|
lhi %r0,256
|
||
|
la %r1,0
|
||
|
sth %r1,0(%r2)
|
||
|
.align 4
|
||
|
.L1stloop:
|
||
|
stc %r1,2(%r1,%r2)
|
||
|
la %r1,1(%r1)
|
||
|
brct %r0,.L1stloop
|
||
|
|
||
|
lghi %r7,-256
|
||
|
lr %r0,%r3
|
||
|
la %r8,0
|
||
|
la %r1,0
|
||
|
.align 16
|
||
|
.L2ndloop:
|
||
|
llgc %r5,2+256(%r7,%r2)
|
||
|
llgc %r6,0(%r8,%r4)
|
||
|
la %r1,0(%r1,%r5)
|
||
|
la %r7,1(%r7)
|
||
|
la %r1,0(%r1,%r6)
|
||
|
nill %r1,255
|
||
|
la %r8,1(%r8)
|
||
|
tml %r7,255
|
||
|
llgc %r6,2(%r1,%r2)
|
||
|
stc %r6,2+256-1(%r7,%r2)
|
||
|
stc %r5,2(%r1,%r2)
|
||
|
jz .Ldone
|
||
|
brct %r0,.L2ndloop
|
||
|
lr %r0,%r3
|
||
|
la %r8,0
|
||
|
j .L2ndloop
|
||
|
.Ldone:
|
||
|
lmg %r6,%r8,6*8(%r15)
|
||
|
br %r14
|
||
|
.size RC4_set_key,.-RC4_set_key
|
||
|
|
||
|
.globl RC4_options
|
||
|
.type RC4_options,@function
|
||
|
.align 16
|
||
|
RC4_options:
|
||
|
larl %r2,.Loptions
|
||
|
br %r14
|
||
|
.size RC4_options,.-RC4_options
|
||
|
.section .rodata
|
||
|
.Loptions:
|
||
|
.align 8
|
||
|
.string "rc4(8x,char)"
|