minix/crypto/external/bsd/openssl/lib/libcrypto/arch/sparc/md5-sparcv9.S
2018-11-11 15:29:04 +00:00

963 lines
20 KiB
ArmAsm

#include "sparc_arch.h"
#ifdef __arch64__
.register %g2,#scratch
.register %g3,#scratch
#endif
.section ".text",#alloc,#execinstr
#ifdef __PIC__
SPARC_PIC_THUNK(%g1)
#endif
.globl md5_block_asm_data_order
.align 32
md5_block_asm_data_order:
SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
ld [%g1+4],%g1 ! OPENSSL_sparcv9cap_P[1]
andcc %g1, CFR_MD5, %g0
be .Lsoftware
nop
mov 4, %g1
andcc %o1, 0x7, %g0
lda [%o0 + %g0]0x88, %f0 ! load context
lda [%o0 + %g1]0x88, %f1
add %o0, 8, %o0
lda [%o0 + %g0]0x88, %f2
lda [%o0 + %g1]0x88, %f3
bne,pn %icc, .Lhwunaligned
sub %o0, 8, %o0
.Lhw_loop:
ldd [%o1 + 0x00], %f8
ldd [%o1 + 0x08], %f10
ldd [%o1 + 0x10], %f12
ldd [%o1 + 0x18], %f14
ldd [%o1 + 0x20], %f16
ldd [%o1 + 0x28], %f18
ldd [%o1 + 0x30], %f20
subcc %o2, 1, %o2 ! done yet?
ldd [%o1 + 0x38], %f22
add %o1, 0x40, %o1
prefetch [%o1 + 63], 20
.word 0x81b02800 ! MD5
bne,pt SIZE_T_CC, .Lhw_loop
nop
.Lhwfinish:
sta %f0, [%o0 + %g0]0x88 ! store context
sta %f1, [%o0 + %g1]0x88
add %o0, 8, %o0
sta %f2, [%o0 + %g0]0x88
sta %f3, [%o0 + %g1]0x88
retl
nop
.align 8
.Lhwunaligned:
.word 0x93b24300 !alignaddr %o1,%g0,%o1
ldd [%o1 + 0x00], %f10
.Lhwunaligned_loop:
ldd [%o1 + 0x08], %f12
ldd [%o1 + 0x10], %f14
ldd [%o1 + 0x18], %f16
ldd [%o1 + 0x20], %f18
ldd [%o1 + 0x28], %f20
ldd [%o1 + 0x30], %f22
ldd [%o1 + 0x38], %f24
subcc %o2, 1, %o2 ! done yet?
ldd [%o1 + 0x40], %f26
add %o1, 0x40, %o1
prefetch [%o1 + 63], 20
.word 0x91b2890c !faligndata %f10,%f12,%f8
.word 0x95b3090e !faligndata %f12,%f14,%f10
.word 0x99b38910 !faligndata %f14,%f16,%f12
.word 0x9db40912 !faligndata %f16,%f18,%f14
.word 0xa1b48914 !faligndata %f18,%f20,%f16
.word 0xa5b50916 !faligndata %f20,%f22,%f18
.word 0xa9b58918 !faligndata %f22,%f24,%f20
.word 0xadb6091a !faligndata %f24,%f26,%f22
.word 0x81b02800 ! MD5
bne,pt SIZE_T_CC, .Lhwunaligned_loop
.word 0x95b68f9a !for %f26,%f26,%f10 ! %f10=%f26
ba .Lhwfinish
nop
.align 16
.Lsoftware:
save %sp,-STACK_FRAME,%sp
rd %asi,%l7
wr %g0,0x88,%asi ! ASI_PRIMARY_LITTLE
and %i1,7,%i3
andn %i1,7,%i1
sll %i3,3,%i3 ! *=8
mov 56,%i5
ld [%i0+0],%l0
sub %i5,%i3,%i5
ld [%i0+4],%l1
and %i5,32,%i4
add %i5,8,%i5
ld [%i0+8],%l2
sub %i5,%i4,%i5 ! shr+shl1+shl2==64
ld [%i0+12],%l3
nop
.Loop:
cmp %i3,0 ! was inp aligned?
ldxa [%i1+0]%asi,%o0 ! load little-endian input
ldxa [%i1+8]%asi,%o1
ldxa [%i1+16]%asi,%o2
ldxa [%i1+24]%asi,%o3
ldxa [%i1+32]%asi,%o4
sllx %l0,32,%g4 ! pack A,B
ldxa [%i1+40]%asi,%o5
sllx %l2,32,%g5 ! pack C,D
ldxa [%i1+48]%asi,%o7
or %l1,%g4,%g4
ldxa [%i1+56]%asi,%g1
or %l3,%g5,%g5
bnz,a,pn %icc,.+8
ldxa [%i1+64]%asi,%g2
srlx %o0,%i3,%o0 ! align X[0]
sllx %o1,%i4,%g3
sethi %hi(3614090360),%l5
sllx %g3,%i5,%g3
or %l5,%lo(3614090360),%l5
or %g3,%o0,%o0
xor %l2,%l3,%l4
add %o0,%l5,%l5 ! X[0]+K[0]
srlx %o0,32,%g3 ! extract X[1]
and %l1,%l4,%l4 ! round 0
add %l5,%l0,%l0
xor %l3,%l4,%l4
sethi %hi(3905402710),%l5
add %l4,%l0,%l0
or %l5,%lo(3905402710),%l5
sll %l0,7,%l6
add %g3,%l5,%l5 ! X[1]+K[1]
srl %l0,32-7,%l0
add %l1,%l6,%l6
xor %l1,%l2,%l4
add %l6,%l0,%l0
srlx %o1,%i3,%o1 ! align X[2]
and %l0,%l4,%l4 ! round 1
sllx %o2,%i4,%g3
add %l5,%l3,%l3
sllx %g3,%i5,%g3
xor %l2,%l4,%l4
or %g3,%o1,%o1
sethi %hi(606105819),%l5
add %l4,%l3,%l3
or %l5,%lo(606105819),%l5
sll %l3,12,%l6
add %o1,%l5,%l5 ! X[2]+K[2]
srl %l3,32-12,%l3
add %l0,%l6,%l6
xor %l0,%l1,%l4
add %l6,%l3,%l3
srlx %o1,32,%g3 ! extract X[3]
and %l3,%l4,%l4 ! round 2
add %l5,%l2,%l2
xor %l1,%l4,%l4
sethi %hi(3250441966),%l5
add %l4,%l2,%l2
or %l5,%lo(3250441966),%l5
sll %l2,17,%l6
add %g3,%l5,%l5 ! X[3]+K[3]
srl %l2,32-17,%l2
add %l3,%l6,%l6
xor %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o2,%i3,%o2 ! align X[4]
and %l2,%l4,%l4 ! round 3
sllx %o3,%i4,%g3
add %l5,%l1,%l1
sllx %g3,%i5,%g3
xor %l0,%l4,%l4
or %g3,%o2,%o2
sethi %hi(4118548399),%l5
add %l4,%l1,%l1
or %l5,%lo(4118548399),%l5
sll %l1,22,%l6
add %o2,%l5,%l5 ! X[4]+K[4]
srl %l1,32-22,%l1
add %l2,%l6,%l6
xor %l2,%l3,%l4
add %l6,%l1,%l1
srlx %o2,32,%g3 ! extract X[5]
and %l1,%l4,%l4 ! round 4
add %l5,%l0,%l0
xor %l3,%l4,%l4
sethi %hi(1200080426),%l5
add %l4,%l0,%l0
or %l5,%lo(1200080426),%l5
sll %l0,7,%l6
add %g3,%l5,%l5 ! X[5]+K[5]
srl %l0,32-7,%l0
add %l1,%l6,%l6
xor %l1,%l2,%l4
add %l6,%l0,%l0
srlx %o3,%i3,%o3 ! align X[6]
and %l0,%l4,%l4 ! round 5
sllx %o4,%i4,%g3
add %l5,%l3,%l3
sllx %g3,%i5,%g3
xor %l2,%l4,%l4
or %g3,%o3,%o3
sethi %hi(2821735955),%l5
add %l4,%l3,%l3
or %l5,%lo(2821735955),%l5
sll %l3,12,%l6
add %o3,%l5,%l5 ! X[6]+K[6]
srl %l3,32-12,%l3
add %l0,%l6,%l6
xor %l0,%l1,%l4
add %l6,%l3,%l3
srlx %o3,32,%g3 ! extract X[7]
and %l3,%l4,%l4 ! round 6
add %l5,%l2,%l2
xor %l1,%l4,%l4
sethi %hi(4249261313),%l5
add %l4,%l2,%l2
or %l5,%lo(4249261313),%l5
sll %l2,17,%l6
add %g3,%l5,%l5 ! X[7]+K[7]
srl %l2,32-17,%l2
add %l3,%l6,%l6
xor %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o4,%i3,%o4 ! align X[8]
and %l2,%l4,%l4 ! round 7
sllx %o5,%i4,%g3
add %l5,%l1,%l1
sllx %g3,%i5,%g3
xor %l0,%l4,%l4
or %g3,%o4,%o4
sethi %hi(1770035416),%l5
add %l4,%l1,%l1
or %l5,%lo(1770035416),%l5
sll %l1,22,%l6
add %o4,%l5,%l5 ! X[8]+K[8]
srl %l1,32-22,%l1
add %l2,%l6,%l6
xor %l2,%l3,%l4
add %l6,%l1,%l1
srlx %o4,32,%g3 ! extract X[9]
and %l1,%l4,%l4 ! round 8
add %l5,%l0,%l0
xor %l3,%l4,%l4
sethi %hi(2336552879),%l5
add %l4,%l0,%l0
or %l5,%lo(2336552879),%l5
sll %l0,7,%l6
add %g3,%l5,%l5 ! X[9]+K[9]
srl %l0,32-7,%l0
add %l1,%l6,%l6
xor %l1,%l2,%l4
add %l6,%l0,%l0
srlx %o5,%i3,%o5 ! align X[10]
and %l0,%l4,%l4 ! round 9
sllx %o7,%i4,%g3
add %l5,%l3,%l3
sllx %g3,%i5,%g3
xor %l2,%l4,%l4
or %g3,%o5,%o5
sethi %hi(4294925233),%l5
add %l4,%l3,%l3
or %l5,%lo(4294925233),%l5
sll %l3,12,%l6
add %o5,%l5,%l5 ! X[10]+K[10]
srl %l3,32-12,%l3
add %l0,%l6,%l6
xor %l0,%l1,%l4
add %l6,%l3,%l3
srlx %o5,32,%g3 ! extract X[11]
and %l3,%l4,%l4 ! round 10
add %l5,%l2,%l2
xor %l1,%l4,%l4
sethi %hi(2304563134),%l5
add %l4,%l2,%l2
or %l5,%lo(2304563134),%l5
sll %l2,17,%l6
add %g3,%l5,%l5 ! X[11]+K[11]
srl %l2,32-17,%l2
add %l3,%l6,%l6
xor %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o7,%i3,%o7 ! align X[12]
and %l2,%l4,%l4 ! round 11
sllx %g1,%i4,%g3
add %l5,%l1,%l1
sllx %g3,%i5,%g3
xor %l0,%l4,%l4
or %g3,%o7,%o7
sethi %hi(1804603682),%l5
add %l4,%l1,%l1
or %l5,%lo(1804603682),%l5
sll %l1,22,%l6
add %o7,%l5,%l5 ! X[12]+K[12]
srl %l1,32-22,%l1
add %l2,%l6,%l6
xor %l2,%l3,%l4
add %l6,%l1,%l1
srlx %o7,32,%g3 ! extract X[13]
and %l1,%l4,%l4 ! round 12
add %l5,%l0,%l0
xor %l3,%l4,%l4
sethi %hi(4254626195),%l5
add %l4,%l0,%l0
or %l5,%lo(4254626195),%l5
sll %l0,7,%l6
add %g3,%l5,%l5 ! X[13]+K[13]
srl %l0,32-7,%l0
add %l1,%l6,%l6
xor %l1,%l2,%l4
add %l6,%l0,%l0
srlx %g1,%i3,%g1 ! align X[14]
and %l0,%l4,%l4 ! round 13
sllx %g2,%i4,%g3
add %l5,%l3,%l3
sllx %g3,%i5,%g3
xor %l2,%l4,%l4
or %g3,%g1,%g1
sethi %hi(2792965006),%l5
add %l4,%l3,%l3
or %l5,%lo(2792965006),%l5
sll %l3,12,%l6
add %g1,%l5,%l5 ! X[14]+K[14]
srl %l3,32-12,%l3
add %l0,%l6,%l6
xor %l0,%l1,%l4
add %l6,%l3,%l3
srlx %g1,32,%g3 ! extract X[15]
and %l3,%l4,%l4 ! round 14
add %l5,%l2,%l2
xor %l1,%l4,%l4
sethi %hi(1236535329),%l5
add %l4,%l2,%l2
or %l5,%lo(1236535329),%l5
sll %l2,17,%l6
add %g3,%l5,%l5 ! X[15]+K[15]
srl %l2,32-17,%l2
add %l3,%l6,%l6
xor %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o0,32,%g3 ! extract X[1]
and %l2,%l4,%l4 ! round 15
add %l5,%l1,%l1
xor %l0,%l4,%l4
sethi %hi(4129170786),%l5
add %l4,%l1,%l1
or %l5,%lo(4129170786),%l5
sll %l1,22,%l6
add %g3,%l5,%l5 ! X[1]+K[16]
srl %l1,32-22,%l1
add %l2,%l6,%l6
andn %l2,%l3,%l4
add %l6,%l1,%l1
and %l1,%l3,%l6 ! round 16
add %l5,%l0,%l0
or %l6,%l4,%l4
sethi %hi(3225465664),%l5
add %l4,%l0,%l0
or %l5,%lo(3225465664),%l5
sll %l0,5,%l6
add %o3,%l5,%l5 ! X[6]+K[17]
srl %l0,32-5,%l0
add %l1,%l6,%l6
andn %l1,%l2,%l4
add %l6,%l0,%l0
srlx %o5,32,%g3 ! extract X[11]
and %l0,%l2,%l6 ! round 17
add %l5,%l3,%l3
or %l6,%l4,%l4
sethi %hi(643717713),%l5
add %l4,%l3,%l3
or %l5,%lo(643717713),%l5
sll %l3,9,%l6
add %g3,%l5,%l5 ! X[11]+K[18]
srl %l3,32-9,%l3
add %l0,%l6,%l6
andn %l0,%l1,%l4
add %l6,%l3,%l3
and %l3,%l1,%l6 ! round 18
add %l5,%l2,%l2
or %l6,%l4,%l4
sethi %hi(3921069994),%l5
add %l4,%l2,%l2
or %l5,%lo(3921069994),%l5
sll %l2,14,%l6
add %o0,%l5,%l5 ! X[0]+K[19]
srl %l2,32-14,%l2
add %l3,%l6,%l6
andn %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o2,32,%g3 ! extract X[5]
and %l2,%l0,%l6 ! round 19
add %l5,%l1,%l1
or %l6,%l4,%l4
sethi %hi(3593408605),%l5
add %l4,%l1,%l1
or %l5,%lo(3593408605),%l5
sll %l1,20,%l6
add %g3,%l5,%l5 ! X[5]+K[20]
srl %l1,32-20,%l1
add %l2,%l6,%l6
andn %l2,%l3,%l4
add %l6,%l1,%l1
and %l1,%l3,%l6 ! round 20
add %l5,%l0,%l0
or %l6,%l4,%l4
sethi %hi(38016083),%l5
add %l4,%l0,%l0
or %l5,%lo(38016083),%l5
sll %l0,5,%l6
add %o5,%l5,%l5 ! X[10]+K[21]
srl %l0,32-5,%l0
add %l1,%l6,%l6
andn %l1,%l2,%l4
add %l6,%l0,%l0
srlx %g1,32,%g3 ! extract X[15]
and %l0,%l2,%l6 ! round 21
add %l5,%l3,%l3
or %l6,%l4,%l4
sethi %hi(3634488961),%l5
add %l4,%l3,%l3
or %l5,%lo(3634488961),%l5
sll %l3,9,%l6
add %g3,%l5,%l5 ! X[15]+K[22]
srl %l3,32-9,%l3
add %l0,%l6,%l6
andn %l0,%l1,%l4
add %l6,%l3,%l3
and %l3,%l1,%l6 ! round 22
add %l5,%l2,%l2
or %l6,%l4,%l4
sethi %hi(3889429448),%l5
add %l4,%l2,%l2
or %l5,%lo(3889429448),%l5
sll %l2,14,%l6
add %o2,%l5,%l5 ! X[4]+K[23]
srl %l2,32-14,%l2
add %l3,%l6,%l6
andn %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o4,32,%g3 ! extract X[9]
and %l2,%l0,%l6 ! round 23
add %l5,%l1,%l1
or %l6,%l4,%l4
sethi %hi(568446438),%l5
add %l4,%l1,%l1
or %l5,%lo(568446438),%l5
sll %l1,20,%l6
add %g3,%l5,%l5 ! X[9]+K[24]
srl %l1,32-20,%l1
add %l2,%l6,%l6
andn %l2,%l3,%l4
add %l6,%l1,%l1
and %l1,%l3,%l6 ! round 24
add %l5,%l0,%l0
or %l6,%l4,%l4
sethi %hi(3275163606),%l5
add %l4,%l0,%l0
or %l5,%lo(3275163606),%l5
sll %l0,5,%l6
add %g1,%l5,%l5 ! X[14]+K[25]
srl %l0,32-5,%l0
add %l1,%l6,%l6
andn %l1,%l2,%l4
add %l6,%l0,%l0
srlx %o1,32,%g3 ! extract X[3]
and %l0,%l2,%l6 ! round 25
add %l5,%l3,%l3
or %l6,%l4,%l4
sethi %hi(4107603335),%l5
add %l4,%l3,%l3
or %l5,%lo(4107603335),%l5
sll %l3,9,%l6
add %g3,%l5,%l5 ! X[3]+K[26]
srl %l3,32-9,%l3
add %l0,%l6,%l6
andn %l0,%l1,%l4
add %l6,%l3,%l3
and %l3,%l1,%l6 ! round 26
add %l5,%l2,%l2
or %l6,%l4,%l4
sethi %hi(1163531501),%l5
add %l4,%l2,%l2
or %l5,%lo(1163531501),%l5
sll %l2,14,%l6
add %o4,%l5,%l5 ! X[8]+K[27]
srl %l2,32-14,%l2
add %l3,%l6,%l6
andn %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o7,32,%g3 ! extract X[13]
and %l2,%l0,%l6 ! round 27
add %l5,%l1,%l1
or %l6,%l4,%l4
sethi %hi(2850285829),%l5
add %l4,%l1,%l1
or %l5,%lo(2850285829),%l5
sll %l1,20,%l6
add %g3,%l5,%l5 ! X[13]+K[28]
srl %l1,32-20,%l1
add %l2,%l6,%l6
andn %l2,%l3,%l4
add %l6,%l1,%l1
and %l1,%l3,%l6 ! round 28
add %l5,%l0,%l0
or %l6,%l4,%l4
sethi %hi(4243563512),%l5
add %l4,%l0,%l0
or %l5,%lo(4243563512),%l5
sll %l0,5,%l6
add %o1,%l5,%l5 ! X[2]+K[29]
srl %l0,32-5,%l0
add %l1,%l6,%l6
andn %l1,%l2,%l4
add %l6,%l0,%l0
srlx %o3,32,%g3 ! extract X[7]
and %l0,%l2,%l6 ! round 29
add %l5,%l3,%l3
or %l6,%l4,%l4
sethi %hi(1735328473),%l5
add %l4,%l3,%l3
or %l5,%lo(1735328473),%l5
sll %l3,9,%l6
add %g3,%l5,%l5 ! X[7]+K[30]
srl %l3,32-9,%l3
add %l0,%l6,%l6
andn %l0,%l1,%l4
add %l6,%l3,%l3
and %l3,%l1,%l6 ! round 30
add %l5,%l2,%l2
or %l6,%l4,%l4
sethi %hi(2368359562),%l5
add %l4,%l2,%l2
or %l5,%lo(2368359562),%l5
sll %l2,14,%l6
add %o7,%l5,%l5 ! X[12]+K[31]
srl %l2,32-14,%l2
add %l3,%l6,%l6
andn %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o2,32,%g3 ! extract X[5]
and %l2,%l0,%l6 ! round 31
add %l5,%l1,%l1
or %l6,%l4,%l4
sethi %hi(4294588738),%l5
add %l4,%l1,%l1
or %l5,%lo(4294588738),%l5
sll %l1,20,%l6
add %g3,%l5,%l5 ! X[5]+K[32]
srl %l1,32-20,%l1
add %l2,%l6,%l6
xor %l2,%l3,%l4
add %l6,%l1,%l1
add %l5,%l0,%l0 ! round 32
xor %l1,%l4,%l4
sethi %hi(2272392833),%l5
add %l4,%l0,%l0
or %l5,%lo(2272392833),%l5
sll %l0,4,%l6
add %o4,%l5,%l5 ! X[8]+K[33]
srl %l0,32-4,%l0
add %l1,%l6,%l6
xor %l1,%l2,%l4
add %l6,%l0,%l0
srlx %o5,32,%g3 ! extract X[11]
add %l5,%l3,%l3 ! round 33
xor %l0,%l4,%l4
sethi %hi(1839030562),%l5
add %l4,%l3,%l3
or %l5,%lo(1839030562),%l5
sll %l3,11,%l6
add %g3,%l5,%l5 ! X[11]+K[34]
srl %l3,32-11,%l3
add %l0,%l6,%l6
xor %l0,%l1,%l4
add %l6,%l3,%l3
add %l5,%l2,%l2 ! round 34
xor %l3,%l4,%l4
sethi %hi(4259657740),%l5
add %l4,%l2,%l2
or %l5,%lo(4259657740),%l5
sll %l2,16,%l6
add %g1,%l5,%l5 ! X[14]+K[35]
srl %l2,32-16,%l2
add %l3,%l6,%l6
xor %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o0,32,%g3 ! extract X[1]
add %l5,%l1,%l1 ! round 35
xor %l2,%l4,%l4
sethi %hi(2763975236),%l5
add %l4,%l1,%l1
or %l5,%lo(2763975236),%l5
sll %l1,23,%l6
add %g3,%l5,%l5 ! X[1]+K[36]
srl %l1,32-23,%l1
add %l2,%l6,%l6
xor %l2,%l3,%l4
add %l6,%l1,%l1
add %l5,%l0,%l0 ! round 36
xor %l1,%l4,%l4
sethi %hi(1272893353),%l5
add %l4,%l0,%l0
or %l5,%lo(1272893353),%l5
sll %l0,4,%l6
add %o2,%l5,%l5 ! X[4]+K[37]
srl %l0,32-4,%l0
add %l1,%l6,%l6
xor %l1,%l2,%l4
add %l6,%l0,%l0
srlx %o3,32,%g3 ! extract X[7]
add %l5,%l3,%l3 ! round 37
xor %l0,%l4,%l4
sethi %hi(4139469664),%l5
add %l4,%l3,%l3
or %l5,%lo(4139469664),%l5
sll %l3,11,%l6
add %g3,%l5,%l5 ! X[7]+K[38]
srl %l3,32-11,%l3
add %l0,%l6,%l6
xor %l0,%l1,%l4
add %l6,%l3,%l3
add %l5,%l2,%l2 ! round 38
xor %l3,%l4,%l4
sethi %hi(3200236656),%l5
add %l4,%l2,%l2
or %l5,%lo(3200236656),%l5
sll %l2,16,%l6
add %o5,%l5,%l5 ! X[10]+K[39]
srl %l2,32-16,%l2
add %l3,%l6,%l6
xor %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o7,32,%g3 ! extract X[13]
add %l5,%l1,%l1 ! round 39
xor %l2,%l4,%l4
sethi %hi(681279174),%l5
add %l4,%l1,%l1
or %l5,%lo(681279174),%l5
sll %l1,23,%l6
add %g3,%l5,%l5 ! X[13]+K[40]
srl %l1,32-23,%l1
add %l2,%l6,%l6
xor %l2,%l3,%l4
add %l6,%l1,%l1
add %l5,%l0,%l0 ! round 40
xor %l1,%l4,%l4
sethi %hi(3936430074),%l5
add %l4,%l0,%l0
or %l5,%lo(3936430074),%l5
sll %l0,4,%l6
add %o0,%l5,%l5 ! X[0]+K[41]
srl %l0,32-4,%l0
add %l1,%l6,%l6
xor %l1,%l2,%l4
add %l6,%l0,%l0
srlx %o1,32,%g3 ! extract X[3]
add %l5,%l3,%l3 ! round 41
xor %l0,%l4,%l4
sethi %hi(3572445317),%l5
add %l4,%l3,%l3
or %l5,%lo(3572445317),%l5
sll %l3,11,%l6
add %g3,%l5,%l5 ! X[3]+K[42]
srl %l3,32-11,%l3
add %l0,%l6,%l6
xor %l0,%l1,%l4
add %l6,%l3,%l3
add %l5,%l2,%l2 ! round 42
xor %l3,%l4,%l4
sethi %hi(76029189),%l5
add %l4,%l2,%l2
or %l5,%lo(76029189),%l5
sll %l2,16,%l6
add %o3,%l5,%l5 ! X[6]+K[43]
srl %l2,32-16,%l2
add %l3,%l6,%l6
xor %l3,%l0,%l4
add %l6,%l2,%l2
srlx %o4,32,%g3 ! extract X[9]
add %l5,%l1,%l1 ! round 43
xor %l2,%l4,%l4
sethi %hi(3654602809),%l5
add %l4,%l1,%l1
or %l5,%lo(3654602809),%l5
sll %l1,23,%l6
add %g3,%l5,%l5 ! X[9]+K[44]
srl %l1,32-23,%l1
add %l2,%l6,%l6
xor %l2,%l3,%l4
add %l6,%l1,%l1
add %l5,%l0,%l0 ! round 44
xor %l1,%l4,%l4
sethi %hi(3873151461),%l5
add %l4,%l0,%l0
or %l5,%lo(3873151461),%l5
sll %l0,4,%l6
add %o7,%l5,%l5 ! X[12]+K[45]
srl %l0,32-4,%l0
add %l1,%l6,%l6
xor %l1,%l2,%l4
add %l6,%l0,%l0
srlx %g1,32,%g3 ! extract X[15]
add %l5,%l3,%l3 ! round 45
xor %l0,%l4,%l4
sethi %hi(530742520),%l5
add %l4,%l3,%l3
or %l5,%lo(530742520),%l5
sll %l3,11,%l6
add %g3,%l5,%l5 ! X[15]+K[46]
srl %l3,32-11,%l3
add %l0,%l6,%l6
xor %l0,%l1,%l4
add %l6,%l3,%l3
add %l5,%l2,%l2 ! round 46
xor %l3,%l4,%l4
sethi %hi(3299628645),%l5
add %l4,%l2,%l2
or %l5,%lo(3299628645),%l5
sll %l2,16,%l6
add %o1,%l5,%l5 ! X[2]+K[47]
srl %l2,32-16,%l2
add %l3,%l6,%l6
xor %l3,%l0,%l4
add %l6,%l2,%l2
add %l5,%l1,%l1 ! round 47
xor %l2,%l4,%l4
sethi %hi(4096336452),%l5
add %l4,%l1,%l1
or %l5,%lo(4096336452),%l5
sll %l1,23,%l6
add %o0,%l5,%l5 ! X[0]+K[48]
srl %l1,32-23,%l1
add %l2,%l6,%l6
xor %l2,%l3,%l4
add %l6,%l1,%l1
add %l5,%l0,%l0 ! round 48
srlx %o3,32,%g3 ! extract X[7]
orn %l1,%l3,%l4
sethi %hi(1126891415),%l5
xor %l2,%l4,%l4
or %l5,%lo(1126891415),%l5
add %l4,%l0,%l0
sll %l0,6,%l6
add %g3,%l5,%l5 ! X[7]+K[49]
srl %l0,32-6,%l0
add %l1,%l6,%l6
add %l6,%l0,%l0
add %l5,%l3,%l3 ! round 49
orn %l0,%l2,%l4
sethi %hi(2878612391),%l5
xor %l1,%l4,%l4
or %l5,%lo(2878612391),%l5
add %l4,%l3,%l3
sll %l3,10,%l6
add %g1,%l5,%l5 ! X[14]+K[50]
srl %l3,32-10,%l3
add %l0,%l6,%l6
add %l6,%l3,%l3
add %l5,%l2,%l2 ! round 50
srlx %o2,32,%g3 ! extract X[5]
orn %l3,%l1,%l4
sethi %hi(4237533241),%l5
xor %l0,%l4,%l4
or %l5,%lo(4237533241),%l5
add %l4,%l2,%l2
sll %l2,15,%l6
add %g3,%l5,%l5 ! X[5]+K[51]
srl %l2,32-15,%l2
add %l3,%l6,%l6
add %l6,%l2,%l2
add %l5,%l1,%l1 ! round 51
orn %l2,%l0,%l4
sethi %hi(1700485571),%l5
xor %l3,%l4,%l4
or %l5,%lo(1700485571),%l5
add %l4,%l1,%l1
sll %l1,21,%l6
add %o7,%l5,%l5 ! X[12]+K[52]
srl %l1,32-21,%l1
add %l2,%l6,%l6
add %l6,%l1,%l1
add %l5,%l0,%l0 ! round 52
srlx %o1,32,%g3 ! extract X[3]
orn %l1,%l3,%l4
sethi %hi(2399980690),%l5
xor %l2,%l4,%l4
or %l5,%lo(2399980690),%l5
add %l4,%l0,%l0
sll %l0,6,%l6
add %g3,%l5,%l5 ! X[3]+K[53]
srl %l0,32-6,%l0
add %l1,%l6,%l6
add %l6,%l0,%l0
add %l5,%l3,%l3 ! round 53
orn %l0,%l2,%l4
sethi %hi(4293915773),%l5
xor %l1,%l4,%l4
or %l5,%lo(4293915773),%l5
add %l4,%l3,%l3
sll %l3,10,%l6
add %o5,%l5,%l5 ! X[10]+K[54]
srl %l3,32-10,%l3
add %l0,%l6,%l6
add %l6,%l3,%l3
add %l5,%l2,%l2 ! round 54
srlx %o0,32,%g3 ! extract X[1]
orn %l3,%l1,%l4
sethi %hi(2240044497),%l5
xor %l0,%l4,%l4
or %l5,%lo(2240044497),%l5
add %l4,%l2,%l2
sll %l2,15,%l6
add %g3,%l5,%l5 ! X[1]+K[55]
srl %l2,32-15,%l2
add %l3,%l6,%l6
add %l6,%l2,%l2
add %l5,%l1,%l1 ! round 55
orn %l2,%l0,%l4
sethi %hi(1873313359),%l5
xor %l3,%l4,%l4
or %l5,%lo(1873313359),%l5
add %l4,%l1,%l1
sll %l1,21,%l6
add %o4,%l5,%l5 ! X[8]+K[56]
srl %l1,32-21,%l1
add %l2,%l6,%l6
add %l6,%l1,%l1
add %l5,%l0,%l0 ! round 56
srlx %g1,32,%g3 ! extract X[15]
orn %l1,%l3,%l4
sethi %hi(4264355552),%l5
xor %l2,%l4,%l4
or %l5,%lo(4264355552),%l5
add %l4,%l0,%l0
sll %l0,6,%l6
add %g3,%l5,%l5 ! X[15]+K[57]
srl %l0,32-6,%l0
add %l1,%l6,%l6
add %l6,%l0,%l0
add %l5,%l3,%l3 ! round 57
orn %l0,%l2,%l4
sethi %hi(2734768916),%l5
xor %l1,%l4,%l4
or %l5,%lo(2734768916),%l5
add %l4,%l3,%l3
sll %l3,10,%l6
add %o3,%l5,%l5 ! X[6]+K[58]
srl %l3,32-10,%l3
add %l0,%l6,%l6
add %l6,%l3,%l3
add %l5,%l2,%l2 ! round 58
srlx %o7,32,%g3 ! extract X[13]
orn %l3,%l1,%l4
sethi %hi(1309151649),%l5
xor %l0,%l4,%l4
or %l5,%lo(1309151649),%l5
add %l4,%l2,%l2
sll %l2,15,%l6
add %g3,%l5,%l5 ! X[13]+K[59]
srl %l2,32-15,%l2
add %l3,%l6,%l6
add %l6,%l2,%l2
add %l5,%l1,%l1 ! round 59
orn %l2,%l0,%l4
sethi %hi(4149444226),%l5
xor %l3,%l4,%l4
or %l5,%lo(4149444226),%l5
add %l4,%l1,%l1
sll %l1,21,%l6
add %o2,%l5,%l5 ! X[4]+K[60]
srl %l1,32-21,%l1
add %l2,%l6,%l6
add %l6,%l1,%l1
add %l5,%l0,%l0 ! round 60
srlx %o5,32,%g3 ! extract X[11]
orn %l1,%l3,%l4
sethi %hi(3174756917),%l5
xor %l2,%l4,%l4
or %l5,%lo(3174756917),%l5
add %l4,%l0,%l0
sll %l0,6,%l6
add %g3,%l5,%l5 ! X[11]+K[61]
srl %l0,32-6,%l0
add %l1,%l6,%l6
add %l6,%l0,%l0
add %l5,%l3,%l3 ! round 61
orn %l0,%l2,%l4
sethi %hi(718787259),%l5
xor %l1,%l4,%l4
or %l5,%lo(718787259),%l5
add %l4,%l3,%l3
sll %l3,10,%l6
add %o1,%l5,%l5 ! X[2]+K[62]
srl %l3,32-10,%l3
add %l0,%l6,%l6
add %l6,%l3,%l3
add %l5,%l2,%l2 ! round 62
srlx %o4,32,%g3 ! extract X[9]
orn %l3,%l1,%l4
sethi %hi(3951481745),%l5
xor %l0,%l4,%l4
or %l5,%lo(3951481745),%l5
add %l4,%l2,%l2
sll %l2,15,%l6
add %g3,%l5,%l5 ! X[9]+K[63]
srl %l2,32-15,%l2
add %l3,%l6,%l6
add %l6,%l2,%l2
add %l5,%l1,%l1 ! round 63
orn %l2,%l0,%l4
sethi %hi(0),%l5
xor %l3,%l4,%l4
or %l5,%lo(0),%l5
add %l4,%l1,%l1
sll %l1,21,%l6
add %o0,%l5,%l5 ! X[0]+K[64]
srl %l1,32-21,%l1
add %l2,%l6,%l6
add %l6,%l1,%l1
srlx %g4,32,%l4 ! unpack A,B,C,D and accumulate
add %i1,64,%i1 ! advance inp
srlx %g5,32,%l5
add %l4,%l0,%l0
subcc %i2,1,%i2 ! done yet?
add %g4,%l1,%l1
add %l5,%l2,%l2
add %g5,%l3,%l3
srl %l1,0,%l1 ! clruw %l1
bne SIZE_T_CC,.Loop
srl %l3,0,%l3 ! clruw %l3
st %l0,[%i0+0] ! write out ctx
st %l1,[%i0+4]
st %l2,[%i0+8]
st %l3,[%i0+12]
wr %g0,%l7,%asi
ret
restore
.type md5_block_asm_data_order,#function
.size md5_block_asm_data_order,(.-md5_block_asm_data_order)
.asciz "MD5 block transform for SPARCv9, CRYPTOGAMS by <appro@openssl.org>"
.align 4