#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 " .align 4