Home | History | Annotate | Line # | Download | only in sparc
dest4-sparcv9.S revision 1.3
      1 .text
      2 .align	32
      3 .globl	des_t4_key_expand
      4 .type	des_t4_key_expand,#function
      5 des_t4_key_expand:
      6 	andcc		%o0, 0x7, %g0
      7 	.word	0x91b20300 !alignaddr	%o0,%g0,%o0
      8 	bz,pt		%icc, 1f
      9 	ldd		[%o0 + 0x00], %f0
     10 	ldd		[%o0 + 0x08], %f2
     11 	.word	0x81b00902 !faligndata	%f0,%f2,%f0
     12 1:	.word	0x81b026c0 !des_kexpand	%f0,0,%f0,
     13 	.word	0x85b026c1 !des_kexpand	%f0,1,%f2,
     14 	std		%f0, [%o1 + 0x00]
     15 	.word	0x8db0a6c3 !des_kexpand	%f2,3,%f6,
     16 	std		%f2, [%o1 + 0x08]
     17 	.word	0x89b0a6c2 !des_kexpand	%f2,2,%f4,
     18 	.word	0x95b1a6c3 !des_kexpand	%f6,3,%f10,
     19 	std		%f6, [%o1 + 0x18]
     20 	.word	0x91b1a6c2 !des_kexpand	%f6,2,%f8,
     21 	std		%f4, [%o1 + 0x10]
     22 	.word	0x9db2a6c3 !des_kexpand	%f10,3,%f14,
     23 	std		%f10, [%o1 + 0x28]
     24 	.word	0x99b2a6c2 !des_kexpand	%f10,2,%f12,
     25 	std		%f8, [%o1 + 0x20]
     26 	.word	0xa1b3a6c1 !des_kexpand	%f14,1,%f16,
     27 	std		%f14, [%o1 + 0x38]
     28 	.word	0xa9b426c3 !des_kexpand	%f16,3,%f20,
     29 	std		%f12, [%o1 + 0x30]
     30 	.word	0xa5b426c2 !des_kexpand	%f16,2,%f18,
     31 	std		%f16, [%o1 + 0x40]
     32 	.word	0xb1b526c3 !des_kexpand	%f20,3,%f24,
     33 	std		%f20, [%o1 + 0x50]
     34 	.word	0xadb526c2 !des_kexpand	%f20,2,%f22,
     35 	std		%f18, [%o1 + 0x48]
     36 	.word	0xb9b626c3 !des_kexpand	%f24,3,%f28,
     37 	std		%f24, [%o1 + 0x60]
     38 	.word	0xb5b626c2 !des_kexpand	%f24,2,%f26,
     39 	std		%f22, [%o1 + 0x58]
     40 	.word	0xbdb726c1 !des_kexpand	%f28,1,%f30,
     41 	std		%f28, [%o1 + 0x70]
     42 	std		%f26, [%o1 + 0x68]
     43 	retl
     44 	std		%f30, [%o1 + 0x78]
     45 .size	des_t4_key_expand,.-des_t4_key_expand
     46 .globl	des_t4_cbc_encrypt
     47 .align	32
     48 des_t4_cbc_encrypt:
     49 	cmp		%o2, 0
     50 	be,pn		%icc, .Lcbc_abort
     51 	srln		%o2, 0, %o2		! needed on v8+, "nop" on v9
     52 	ld		[%o4 + 0], %f0	! load ivec
     53 	ld		[%o4 + 4], %f1
     54 
     55 	and		%o0, 7, %g1
     56 	andn		%o0, 7, %o0
     57 	sll		%g1, 3, %g1
     58 	mov		0xff, %g3
     59 	prefetch	[%o0], 20
     60 	prefetch	[%o0 + 63], 20
     61 	sub		%g0, %g1, %g2
     62 	and		%o1, 7, %g4
     63 	.word	0x93b24340 !alignaddrl	%o1,%g0,%o1
     64 	srl		%g3, %g4, %g3
     65 	srlx		%o2, 3, %o2
     66 	movrz		%g4, 0, %g3
     67 	prefetch	[%o1], 22
     68 
     69 	ldd		[%o3 + 0x00], %f4	! load key schedule
     70 	ldd		[%o3 + 0x08], %f6
     71 	ldd		[%o3 + 0x10], %f8
     72 	ldd		[%o3 + 0x18], %f10
     73 	ldd		[%o3 + 0x20], %f12
     74 	ldd		[%o3 + 0x28], %f14
     75 	ldd		[%o3 + 0x30], %f16
     76 	ldd		[%o3 + 0x38], %f18
     77 	ldd		[%o3 + 0x40], %f20
     78 	ldd		[%o3 + 0x48], %f22
     79 	ldd		[%o3 + 0x50], %f24
     80 	ldd		[%o3 + 0x58], %f26
     81 	ldd		[%o3 + 0x60], %f28
     82 	ldd		[%o3 + 0x68], %f30
     83 	ldd		[%o3 + 0x70], %f32
     84 	ldd		[%o3 + 0x78], %f34
     85 
     86 .Ldes_cbc_enc_loop:
     87 	ldx		[%o0 + 0], %g4
     88 	brz,pt		%g1, 4f
     89 	nop
     90 
     91 	ldx		[%o0 + 8], %g5
     92 	sllx		%g4, %g1, %g4
     93 	srlx		%g5, %g2, %g5
     94 	or		%g5, %g4, %g4
     95 4:
     96 	.word	0x85b02304 !movxtod	%g4,%f2
     97 	prefetch	[%o0 + 8+63], 20
     98 	add		%o0, 8, %o0
     99 	.word	0x81b08d80 !fxor	%f2,%f0,%f0		! ^= ivec
    100 	prefetch	[%o1 + 63], 22
    101 
    102 	.word	0x81b02680 !des_ip	%f0,%f0,,
    103 	.word	0x80c90126 !des_round	%f4,%f6,%f0,%f0
    104 	.word	0x80ca012a !des_round	%f8,%f10,%f0,%f0
    105 	.word	0x80cb012e !des_round	%f12,%f14,%f0,%f0
    106 	.word	0x80cc0132 !des_round	%f16,%f18,%f0,%f0
    107 	.word	0x80cd0136 !des_round	%f20,%f22,%f0,%f0
    108 	.word	0x80ce013a !des_round	%f24,%f26,%f0,%f0
    109 	.word	0x80cf013e !des_round	%f28,%f30,%f0,%f0
    110 	.word	0x80c84123 !des_round	%f32,%f34,%f0,%f0
    111 	.word	0x81b026a0 !des_iip	%f0,%f0,,
    112 
    113 	brnz,pn		%g3, 2f
    114 	sub		%o2, 1, %o2
    115 
    116 	std		%f0, [%o1 + 0]
    117 	brnz,pt		%o2, .Ldes_cbc_enc_loop
    118 	add		%o1, 8, %o1
    119 
    120 	st		%f0, [%o4 + 0]	! write out ivec
    121 	retl
    122 	st		%f1, [%o4 + 4]
    123 .Lcbc_abort:
    124 	retl
    125 	nop
    126 
    127 .align	16
    128 2:	ldxa		[%o0]0x82, %g4		! avoid read-after-write hazard
    129 						! and ~4x deterioration
    130 						! in inp==out case
    131 	.word	0x85b00900 !faligndata	%f0,%f0,%f2		! handle unaligned output
    132 
    133 	stda		%f2, [%o1 + %g3]0xc0	! partial store
    134 	add		%o1, 8, %o1
    135 	orn		%g0, %g3, %g3
    136 	stda		%f2, [%o1 + %g3]0xc0	! partial store
    137 
    138 	brnz,pt		%o2, .Ldes_cbc_enc_loop+4
    139 	orn		%g0, %g3, %g3
    140 
    141 	st		%f0, [%o4 + 0]	! write out ivec
    142 	retl
    143 	st		%f1, [%o4 + 4]
    144 .type	des_t4_cbc_encrypt,#function
    145 .size	des_t4_cbc_encrypt,.-des_t4_cbc_encrypt
    146 
    147 .globl	des_t4_cbc_decrypt
    148 .align	32
    149 des_t4_cbc_decrypt:
    150 	cmp		%o2, 0
    151 	be,pn		%icc, .Lcbc_abort
    152 	srln		%o2, 0, %o2		! needed on v8+, "nop" on v9
    153 	ld		[%o4 + 0], %f2	! load ivec
    154 	ld		[%o4 + 4], %f3
    155 
    156 	and		%o0, 7, %g1
    157 	andn		%o0, 7, %o0
    158 	sll		%g1, 3, %g1
    159 	mov		0xff, %g3
    160 	prefetch	[%o0], 20
    161 	prefetch	[%o0 + 63], 20
    162 	sub		%g0, %g1, %g2
    163 	and		%o1, 7, %g4
    164 	.word	0x93b24340 !alignaddrl	%o1,%g0,%o1
    165 	srl		%g3, %g4, %g3
    166 	srlx		%o2, 3, %o2
    167 	movrz		%g4, 0, %g3
    168 	prefetch	[%o1], 22
    169 
    170 	ldd		[%o3 + 0x78], %f4	! load key schedule
    171 	ldd		[%o3 + 0x70], %f6
    172 	ldd		[%o3 + 0x68], %f8
    173 	ldd		[%o3 + 0x60], %f10
    174 	ldd		[%o3 + 0x58], %f12
    175 	ldd		[%o3 + 0x50], %f14
    176 	ldd		[%o3 + 0x48], %f16
    177 	ldd		[%o3 + 0x40], %f18
    178 	ldd		[%o3 + 0x38], %f20
    179 	ldd		[%o3 + 0x30], %f22
    180 	ldd		[%o3 + 0x28], %f24
    181 	ldd		[%o3 + 0x20], %f26
    182 	ldd		[%o3 + 0x18], %f28
    183 	ldd		[%o3 + 0x10], %f30
    184 	ldd		[%o3 + 0x08], %f32
    185 	ldd		[%o3 + 0x00], %f34
    186 
    187 .Ldes_cbc_dec_loop:
    188 	ldx		[%o0 + 0], %g4
    189 	brz,pt		%g1, 4f
    190 	nop
    191 
    192 	ldx		[%o0 + 8], %g5
    193 	sllx		%g4, %g1, %g4
    194 	srlx		%g5, %g2, %g5
    195 	or		%g5, %g4, %g4
    196 4:
    197 	.word	0x81b02304 !movxtod	%g4,%f0
    198 	prefetch	[%o0 + 8+63], 20
    199 	add		%o0, 8, %o0
    200 	prefetch	[%o1 + 63], 22
    201 
    202 	.word	0x81b02680 !des_ip	%f0,%f0,,
    203 	.word	0x80c90126 !des_round	%f4,%f6,%f0,%f0
    204 	.word	0x80ca012a !des_round	%f8,%f10,%f0,%f0
    205 	.word	0x80cb012e !des_round	%f12,%f14,%f0,%f0
    206 	.word	0x80cc0132 !des_round	%f16,%f18,%f0,%f0
    207 	.word	0x80cd0136 !des_round	%f20,%f22,%f0,%f0
    208 	.word	0x80ce013a !des_round	%f24,%f26,%f0,%f0
    209 	.word	0x80cf013e !des_round	%f28,%f30,%f0,%f0
    210 	.word	0x80c84123 !des_round	%f32,%f34,%f0,%f0
    211 	.word	0x81b026a0 !des_iip	%f0,%f0,,
    212 
    213 	.word	0x81b08d80 !fxor	%f2,%f0,%f0		! ^= ivec
    214 	.word	0x85b02304 !movxtod	%g4,%f2
    215 
    216 	brnz,pn		%g3, 2f
    217 	sub		%o2, 1, %o2
    218 
    219 	std		%f0, [%o1 + 0]
    220 	brnz,pt		%o2, .Ldes_cbc_dec_loop
    221 	add		%o1, 8, %o1
    222 
    223 	st		%f2, [%o4 + 0]	! write out ivec
    224 	retl
    225 	st		%f3, [%o4 + 4]
    226 
    227 .align	16
    228 2:	ldxa		[%o0]0x82, %g4		! avoid read-after-write hazard
    229 						! and ~4x deterioration
    230 						! in inp==out case
    231 	.word	0x81b00900 !faligndata	%f0,%f0,%f0		! handle unaligned output
    232 
    233 	stda		%f0, [%o1 + %g3]0xc0	! partial store
    234 	add		%o1, 8, %o1
    235 	orn		%g0, %g3, %g3
    236 	stda		%f0, [%o1 + %g3]0xc0	! partial store
    237 
    238 	brnz,pt		%o2, .Ldes_cbc_dec_loop+4
    239 	orn		%g0, %g3, %g3
    240 
    241 	st		%f2, [%o4 + 0]	! write out ivec
    242 	retl
    243 	st		%f3, [%o4 + 4]
    244 .type	des_t4_cbc_decrypt,#function
    245 .size	des_t4_cbc_decrypt,.-des_t4_cbc_decrypt
    246 .globl	des_t4_ede3_cbc_encrypt
    247 .align	32
    248 des_t4_ede3_cbc_encrypt:
    249 	cmp		%o2, 0
    250 	be,pn		%icc, .Lcbc_abort
    251 	srln		%o2, 0, %o2		! needed on v8+, "nop" on v9
    252 	ld		[%o4 + 0], %f0	! load ivec
    253 	ld		[%o4 + 4], %f1
    254 
    255 	and		%o0, 7, %g1
    256 	andn		%o0, 7, %o0
    257 	sll		%g1, 3, %g1
    258 	mov		0xff, %g3
    259 	prefetch	[%o0], 20
    260 	prefetch	[%o0 + 63], 20
    261 	sub		%g0, %g1, %g2
    262 	and		%o1, 7, %g4
    263 	.word	0x93b24340 !alignaddrl	%o1,%g0,%o1
    264 	srl		%g3, %g4, %g3
    265 	srlx		%o2, 3, %o2
    266 	movrz		%g4, 0, %g3
    267 	prefetch	[%o1], 22
    268 
    269 	ldd		[%o3 + 0x00], %f4	! load key schedule
    270 	ldd		[%o3 + 0x08], %f6
    271 	ldd		[%o3 + 0x10], %f8
    272 	ldd		[%o3 + 0x18], %f10
    273 	ldd		[%o3 + 0x20], %f12
    274 	ldd		[%o3 + 0x28], %f14
    275 	ldd		[%o3 + 0x30], %f16
    276 	ldd		[%o3 + 0x38], %f18
    277 	ldd		[%o3 + 0x40], %f20
    278 	ldd		[%o3 + 0x48], %f22
    279 	ldd		[%o3 + 0x50], %f24
    280 	ldd		[%o3 + 0x58], %f26
    281 	ldd		[%o3 + 0x60], %f28
    282 	ldd		[%o3 + 0x68], %f30
    283 	ldd		[%o3 + 0x70], %f32
    284 	ldd		[%o3 + 0x78], %f34
    285 
    286 .Ldes_ede3_cbc_enc_loop:
    287 	ldx		[%o0 + 0], %g4
    288 	brz,pt		%g1, 4f
    289 	nop
    290 
    291 	ldx		[%o0 + 8], %g5
    292 	sllx		%g4, %g1, %g4
    293 	srlx		%g5, %g2, %g5
    294 	or		%g5, %g4, %g4
    295 4:
    296 	.word	0x85b02304 !movxtod	%g4,%f2
    297 	prefetch	[%o0 + 8+63], 20
    298 	add		%o0, 8, %o0
    299 	.word	0x81b08d80 !fxor	%f2,%f0,%f0		! ^= ivec
    300 	prefetch	[%o1 + 63], 22
    301 
    302 	.word	0x81b02680 !des_ip	%f0,%f0,,
    303 	.word	0x80c90126 !des_round	%f4,%f6,%f0,%f0
    304 	.word	0x80ca012a !des_round	%f8,%f10,%f0,%f0
    305 	.word	0x80cb012e !des_round	%f12,%f14,%f0,%f0
    306 	.word	0x80cc0132 !des_round	%f16,%f18,%f0,%f0
    307 	ldd		[%o3 + 0x100-0x08], %f36
    308 	ldd		[%o3 + 0x100-0x10], %f38
    309 	.word	0x80cd0136 !des_round	%f20,%f22,%f0,%f0
    310 	ldd		[%o3 + 0x100-0x18], %f40
    311 	ldd		[%o3 + 0x100-0x20], %f42
    312 	.word	0x80ce013a !des_round	%f24,%f26,%f0,%f0
    313 	ldd		[%o3 + 0x100-0x28], %f44
    314 	ldd		[%o3 + 0x100-0x30], %f46
    315 	.word	0x80cf013e !des_round	%f28,%f30,%f0,%f0
    316 	ldd		[%o3 + 0x100-0x38], %f48
    317 	ldd		[%o3 + 0x100-0x40], %f50
    318 	.word	0x80c84123 !des_round	%f32,%f34,%f0,%f0
    319 	ldd		[%o3 + 0x100-0x48], %f52
    320 	ldd		[%o3 + 0x100-0x50], %f54
    321 	.word	0x81b026a0 !des_iip	%f0,%f0,,
    322 
    323 	ldd		[%o3 + 0x100-0x58], %f56
    324 	ldd		[%o3 + 0x100-0x60], %f58
    325 	.word	0x81b02680 !des_ip	%f0,%f0,,
    326 	ldd		[%o3 + 0x100-0x68], %f60
    327 	ldd		[%o3 + 0x100-0x70], %f62
    328 	.word	0x80c94127 !des_round	%f36,%f38,%f0,%f0
    329 	ldd		[%o3 + 0x100-0x78], %f36
    330 	ldd		[%o3 + 0x100-0x80], %f38
    331 	.word	0x80ca412b !des_round	%f40,%f42,%f0,%f0
    332 	.word	0x80cb412f !des_round	%f44,%f46,%f0,%f0
    333 	.word	0x80cc4133 !des_round	%f48,%f50,%f0,%f0
    334 	ldd		[%o3 + 0x100+0x00], %f40
    335 	ldd		[%o3 + 0x100+0x08], %f42
    336 	.word	0x80cd4137 !des_round	%f52,%f54,%f0,%f0
    337 	ldd		[%o3 + 0x100+0x10], %f44
    338 	ldd		[%o3 + 0x100+0x18], %f46
    339 	.word	0x80ce413b !des_round	%f56,%f58,%f0,%f0
    340 	ldd		[%o3 + 0x100+0x20], %f48
    341 	ldd		[%o3 + 0x100+0x28], %f50
    342 	.word	0x80cf413f !des_round	%f60,%f62,%f0,%f0
    343 	ldd		[%o3 + 0x100+0x30], %f52
    344 	ldd		[%o3 + 0x100+0x38], %f54
    345 	.word	0x80c94127 !des_round	%f36,%f38,%f0,%f0
    346 	ldd		[%o3 + 0x100+0x40], %f56
    347 	ldd		[%o3 + 0x100+0x48], %f58
    348 	.word	0x81b026a0 !des_iip	%f0,%f0,,
    349 
    350 	ldd		[%o3 + 0x100+0x50], %f60
    351 	ldd		[%o3 + 0x100+0x58], %f62
    352 	.word	0x81b02680 !des_ip	%f0,%f0,,
    353 	ldd		[%o3 + 0x100+0x60], %f36
    354 	ldd		[%o3 + 0x100+0x68], %f38
    355 	.word	0x80ca412b !des_round	%f40,%f42,%f0,%f0
    356 	ldd		[%o3 + 0x100+0x70], %f40
    357 	ldd		[%o3 + 0x100+0x78], %f42
    358 	.word	0x80cb412f !des_round	%f44,%f46,%f0,%f0
    359 	.word	0x80cc4133 !des_round	%f48,%f50,%f0,%f0
    360 	.word	0x80cd4137 !des_round	%f52,%f54,%f0,%f0
    361 	.word	0x80ce413b !des_round	%f56,%f58,%f0,%f0
    362 	.word	0x80cf413f !des_round	%f60,%f62,%f0,%f0
    363 	.word	0x80c94127 !des_round	%f36,%f38,%f0,%f0
    364 	.word	0x80ca412b !des_round	%f40,%f42,%f0,%f0
    365 	.word	0x81b026a0 !des_iip	%f0,%f0,,
    366 
    367 	brnz,pn		%g3, 2f
    368 	sub		%o2, 1, %o2
    369 
    370 	std		%f0, [%o1 + 0]
    371 	brnz,pt		%o2, .Ldes_ede3_cbc_enc_loop
    372 	add		%o1, 8, %o1
    373 
    374 	st		%f0, [%o4 + 0]	! write out ivec
    375 	retl
    376 	st		%f1, [%o4 + 4]
    377 
    378 .align	16
    379 2:	ldxa		[%o0]0x82, %g4		! avoid read-after-write hazard
    380 						! and ~2x deterioration
    381 						! in inp==out case
    382 	.word	0x85b00900 !faligndata	%f0,%f0,%f2		! handle unaligned output
    383 
    384 	stda		%f2, [%o1 + %g3]0xc0	! partial store
    385 	add		%o1, 8, %o1
    386 	orn		%g0, %g3, %g3
    387 	stda		%f2, [%o1 + %g3]0xc0	! partial store
    388 
    389 	brnz,pt		%o2, .Ldes_ede3_cbc_enc_loop+4
    390 	orn		%g0, %g3, %g3
    391 
    392 	st		%f0, [%o4 + 0]	! write out ivec
    393 	retl
    394 	st		%f1, [%o4 + 4]
    395 .type	des_t4_ede3_cbc_encrypt,#function
    396 .size	des_t4_ede3_cbc_encrypt,.-des_t4_ede3_cbc_encrypt
    397 
    398 .globl	des_t4_ede3_cbc_decrypt
    399 .align	32
    400 des_t4_ede3_cbc_decrypt:
    401 	cmp		%o2, 0
    402 	be,pn		%icc, .Lcbc_abort
    403 	srln		%o2, 0, %o2		! needed on v8+, "nop" on v9
    404 	ld		[%o4 + 0], %f2	! load ivec
    405 	ld		[%o4 + 4], %f3
    406 
    407 	and		%o0, 7, %g1
    408 	andn		%o0, 7, %o0
    409 	sll		%g1, 3, %g1
    410 	mov		0xff, %g3
    411 	prefetch	[%o0], 20
    412 	prefetch	[%o0 + 63], 20
    413 	sub		%g0, %g1, %g2
    414 	and		%o1, 7, %g4
    415 	.word	0x93b24340 !alignaddrl	%o1,%g0,%o1
    416 	srl		%g3, %g4, %g3
    417 	srlx		%o2, 3, %o2
    418 	movrz		%g4, 0, %g3
    419 	prefetch	[%o1], 22
    420 
    421 	ldd		[%o3 + 0x100+0x78], %f4	! load key schedule
    422 	ldd		[%o3 + 0x100+0x70], %f6
    423 	ldd		[%o3 + 0x100+0x68], %f8
    424 	ldd		[%o3 + 0x100+0x60], %f10
    425 	ldd		[%o3 + 0x100+0x58], %f12
    426 	ldd		[%o3 + 0x100+0x50], %f14
    427 	ldd		[%o3 + 0x100+0x48], %f16
    428 	ldd		[%o3 + 0x100+0x40], %f18
    429 	ldd		[%o3 + 0x100+0x38], %f20
    430 	ldd		[%o3 + 0x100+0x30], %f22
    431 	ldd		[%o3 + 0x100+0x28], %f24
    432 	ldd		[%o3 + 0x100+0x20], %f26
    433 	ldd		[%o3 + 0x100+0x18], %f28
    434 	ldd		[%o3 + 0x100+0x10], %f30
    435 	ldd		[%o3 + 0x100+0x08], %f32
    436 	ldd		[%o3 + 0x100+0x00], %f34
    437 
    438 .Ldes_ede3_cbc_dec_loop:
    439 	ldx		[%o0 + 0], %g4
    440 	brz,pt		%g1, 4f
    441 	nop
    442 
    443 	ldx		[%o0 + 8], %g5
    444 	sllx		%g4, %g1, %g4
    445 	srlx		%g5, %g2, %g5
    446 	or		%g5, %g4, %g4
    447 4:
    448 	.word	0x81b02304 !movxtod	%g4,%f0
    449 	prefetch	[%o0 + 8+63], 20
    450 	add		%o0, 8, %o0
    451 	prefetch	[%o1 + 63], 22
    452 
    453 	.word	0x81b02680 !des_ip	%f0,%f0,,
    454 	.word	0x80c90126 !des_round	%f4,%f6,%f0,%f0
    455 	.word	0x80ca012a !des_round	%f8,%f10,%f0,%f0
    456 	.word	0x80cb012e !des_round	%f12,%f14,%f0,%f0
    457 	.word	0x80cc0132 !des_round	%f16,%f18,%f0,%f0
    458 	ldd		[%o3 + 0x80+0x00], %f36
    459 	ldd		[%o3 + 0x80+0x08], %f38
    460 	.word	0x80cd0136 !des_round	%f20,%f22,%f0,%f0
    461 	ldd		[%o3 + 0x80+0x10], %f40
    462 	ldd		[%o3 + 0x80+0x18], %f42
    463 	.word	0x80ce013a !des_round	%f24,%f26,%f0,%f0
    464 	ldd		[%o3 + 0x80+0x20], %f44
    465 	ldd		[%o3 + 0x80+0x28], %f46
    466 	.word	0x80cf013e !des_round	%f28,%f30,%f0,%f0
    467 	ldd		[%o3 + 0x80+0x30], %f48
    468 	ldd		[%o3 + 0x80+0x38], %f50
    469 	.word	0x80c84123 !des_round	%f32,%f34,%f0,%f0
    470 	ldd		[%o3 + 0x80+0x40], %f52
    471 	ldd		[%o3 + 0x80+0x48], %f54
    472 	.word	0x81b026a0 !des_iip	%f0,%f0,,
    473 
    474 	ldd		[%o3 + 0x80+0x50], %f56
    475 	ldd		[%o3 + 0x80+0x58], %f58
    476 	.word	0x81b02680 !des_ip	%f0,%f0,,
    477 	ldd		[%o3 + 0x80+0x60], %f60
    478 	ldd		[%o3 + 0x80+0x68], %f62
    479 	.word	0x80c94127 !des_round	%f36,%f38,%f0,%f0
    480 	ldd		[%o3 + 0x80+0x70], %f36
    481 	ldd		[%o3 + 0x80+0x78], %f38
    482 	.word	0x80ca412b !des_round	%f40,%f42,%f0,%f0
    483 	.word	0x80cb412f !des_round	%f44,%f46,%f0,%f0
    484 	.word	0x80cc4133 !des_round	%f48,%f50,%f0,%f0
    485 	ldd		[%o3 + 0x80-0x08], %f40
    486 	ldd		[%o3 + 0x80-0x10], %f42
    487 	.word	0x80cd4137 !des_round	%f52,%f54,%f0,%f0
    488 	ldd		[%o3 + 0x80-0x18], %f44
    489 	ldd		[%o3 + 0x80-0x20], %f46
    490 	.word	0x80ce413b !des_round	%f56,%f58,%f0,%f0
    491 	ldd		[%o3 + 0x80-0x28], %f48
    492 	ldd		[%o3 + 0x80-0x30], %f50
    493 	.word	0x80cf413f !des_round	%f60,%f62,%f0,%f0
    494 	ldd		[%o3 + 0x80-0x38], %f52
    495 	ldd		[%o3 + 0x80-0x40], %f54
    496 	.word	0x80c94127 !des_round	%f36,%f38,%f0,%f0
    497 	ldd		[%o3 + 0x80-0x48], %f56
    498 	ldd		[%o3 + 0x80-0x50], %f58
    499 	.word	0x81b026a0 !des_iip	%f0,%f0,,
    500 
    501 	ldd		[%o3 + 0x80-0x58], %f60
    502 	ldd		[%o3 + 0x80-0x60], %f62
    503 	.word	0x81b02680 !des_ip	%f0,%f0,,
    504 	ldd		[%o3 + 0x80-0x68], %f36
    505 	ldd		[%o3 + 0x80-0x70], %f38
    506 	.word	0x80ca412b !des_round	%f40,%f42,%f0,%f0
    507 	ldd		[%o3 + 0x80-0x78], %f40
    508 	ldd		[%o3 + 0x80-0x80], %f42
    509 	.word	0x80cb412f !des_round	%f44,%f46,%f0,%f0
    510 	.word	0x80cc4133 !des_round	%f48,%f50,%f0,%f0
    511 	.word	0x80cd4137 !des_round	%f52,%f54,%f0,%f0
    512 	.word	0x80ce413b !des_round	%f56,%f58,%f0,%f0
    513 	.word	0x80cf413f !des_round	%f60,%f62,%f0,%f0
    514 	.word	0x80c94127 !des_round	%f36,%f38,%f0,%f0
    515 	.word	0x80ca412b !des_round	%f40,%f42,%f0,%f0
    516 	.word	0x81b026a0 !des_iip	%f0,%f0,,
    517 
    518 	.word	0x81b08d80 !fxor	%f2,%f0,%f0		! ^= ivec
    519 	.word	0x85b02304 !movxtod	%g4,%f2
    520 
    521 	brnz,pn		%g3, 2f
    522 	sub		%o2, 1, %o2
    523 
    524 	std		%f0, [%o1 + 0]
    525 	brnz,pt		%o2, .Ldes_ede3_cbc_dec_loop
    526 	add		%o1, 8, %o1
    527 
    528 	st		%f2, [%o4 + 0]	! write out ivec
    529 	retl
    530 	st		%f3, [%o4 + 4]
    531 
    532 .align	16
    533 2:	ldxa		[%o0]0x82, %g4		! avoid read-after-write hazard
    534 						! and ~3x deterioration
    535 						! in inp==out case
    536 	.word	0x81b00900 !faligndata	%f0,%f0,%f0		! handle unaligned output
    537 
    538 	stda		%f0, [%o1 + %g3]0xc0	! partial store
    539 	add		%o1, 8, %o1
    540 	orn		%g0, %g3, %g3
    541 	stda		%f0, [%o1 + %g3]0xc0	! partial store
    542 
    543 	brnz,pt		%o2, .Ldes_ede3_cbc_dec_loop+4
    544 	orn		%g0, %g3, %g3
    545 
    546 	st		%f2, [%o4 + 0]	! write out ivec
    547 	retl
    548 	st		%f3, [%o4 + 4]
    549 .type	des_t4_ede3_cbc_decrypt,#function
    550 .size	des_t4_ede3_cbc_decrypt,.-des_t4_ede3_cbc_decrypt
    551 .asciz  "DES for SPARC T4, David S. Miller, Andy Polyakov"
    552 .align  4
    553