Home | History | Annotate | Line # | Download | only in sparc64
      1  1.1.1.2  christos ! Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
      2      1.1  christos !
      3  1.1.1.2  christos ! Licensed under the OpenSSL license (the "License").  You may not use
      4  1.1.1.2  christos ! this file except in compliance with the License.  You can obtain a copy
      5  1.1.1.2  christos ! in the file LICENSE in the source distribution or at
      6  1.1.1.2  christos ! https://www.openssl.org/source/license.html
      7      1.1  christos !
      8      1.1  christos !  To expand the m4 macros: m4 -B 8192 des_enc.m4 > des_enc.S
      9      1.1  christos !
     10      1.1  christos !  Global registers 1 to 5 are used. This is the same as done by the
     11      1.1  christos !  cc compiler. The UltraSPARC load/store little endian feature is used.
     12      1.1  christos !
     13      1.1  christos !  Instruction grouping often refers to one CPU cycle.
     14      1.1  christos !
     15      1.1  christos !  Assemble through gcc: gcc -c -mcpu=ultrasparc -o des_enc.o des_enc.S
     16      1.1  christos !
     17      1.1  christos !  Assemble through cc:  cc -c -xarch=v8plusa -o des_enc.o des_enc.S
     18      1.1  christos !
     19      1.1  christos !  Performance improvement according to './apps/openssl speed des'
     20      1.1  christos !
     21      1.1  christos !	32-bit build:
     22      1.1  christos !		23%  faster than cc-5.2 -xarch=v8plus -xO5
     23      1.1  christos !		115% faster than gcc-3.2.1 -m32 -mcpu=ultrasparc -O5
     24      1.1  christos !	64-bit build:
     25      1.1  christos !		50%  faster than cc-5.2 -xarch=v9 -xO5
     26      1.1  christos !		100% faster than gcc-3.2.1 -m64 -mcpu=ultrasparc -O5
     27      1.1  christos !
     28      1.1  christos 
     29      1.1  christos .ident "des_enc.m4 2.1"
     30      1.1  christos .file  "des_enc-sparc.S"
     31      1.1  christos 
     32      1.1  christos #include <openssl/opensslconf.h>
     33      1.1  christos 
     34      1.1  christos #if defined(__SUNPRO_C) && defined(__sparcv9)
     35      1.1  christos # define ABI64  /* They've said -xarch=v9 at command line */
     36      1.1  christos #elif defined(__GNUC__) && defined(__arch64__)
     37      1.1  christos # define ABI64  /* They've said -m64 at command line */
     38      1.1  christos #endif
     39      1.1  christos 
     40      1.1  christos #ifdef ABI64
     41      1.1  christos   .register	%g2,#scratch
     42      1.1  christos   .register	%g3,#scratch
     43      1.1  christos # define	FRAME	-192
     44      1.1  christos # define	BIAS	2047
     45      1.1  christos # define	LDPTR	ldx
     46      1.1  christos # define	STPTR	stx
     47      1.1  christos # define	ARG0	128
     48      1.1  christos # define	ARGSZ	8
     49      1.1  christos #else
     50      1.1  christos # define	FRAME	-96
     51      1.1  christos # define	BIAS	0
     52      1.1  christos # define	LDPTR	ld
     53      1.1  christos # define	STPTR	st
     54      1.1  christos # define	ARG0	68
     55      1.1  christos # define	ARGSZ	4
     56      1.1  christos #endif
     57      1.1  christos 
     58      1.1  christos #define LOOPS 7
     59      1.1  christos 
     60      1.1  christos #define global0 %g0
     61      1.1  christos #define global1 %g1
     62      1.1  christos #define global2 %g2
     63      1.1  christos #define global3 %g3
     64      1.1  christos #define global4 %g4
     65      1.1  christos #define global5 %g5
     66      1.1  christos 
     67      1.1  christos #define local0 %l0
     68      1.1  christos #define local1 %l1
     69      1.1  christos #define local2 %l2
     70      1.1  christos #define local3 %l3
     71      1.1  christos #define local4 %l4
     72      1.1  christos #define local5 %l5
     73      1.1  christos #define local7 %l6
     74      1.1  christos #define local6 %l7
     75      1.1  christos 
     76      1.1  christos #define in0 %i0
     77      1.1  christos #define in1 %i1
     78      1.1  christos #define in2 %i2
     79      1.1  christos #define in3 %i3
     80      1.1  christos #define in4 %i4
     81      1.1  christos #define in5 %i5
     82      1.1  christos #define in6 %i6
     83      1.1  christos #define in7 %i7
     84      1.1  christos 
     85      1.1  christos #define out0 %o0
     86      1.1  christos #define out1 %o1
     87      1.1  christos #define out2 %o2
     88      1.1  christos #define out3 %o3
     89      1.1  christos #define out4 %o4
     90      1.1  christos #define out5 %o5
     91      1.1  christos #define out6 %o6
     92      1.1  christos #define out7 %o7
     93      1.1  christos 
     94      1.1  christos #define stub stb
     95      1.1  christos 
     96      1.1  christos 
     97      1.1  christos 
     98      1.1  christos 
     99      1.1  christos ! Macro definitions:
    100      1.1  christos 
    101      1.1  christos 
    102      1.1  christos ! ip_macro
    103      1.1  christos !
    104      1.1  christos ! The logic used in initial and final permutations is the same as in
    105      1.1  christos ! the C code. The permutations are done with a clever , xor, and
    106      1.1  christos ! technique.
    107      1.1  christos !
    108      1.1  christos ! The macro also loads address sbox 1 to 5 to global 1 to 5, address
    109  1.1.1.2  christos ! sbox 6 to local6, and address sbox 8 to out3.
    110      1.1  christos !
    111  1.1.1.2  christos ! Rotates the halves 3 left to bring the sbox bits in convenient positions.
    112      1.1  christos !
    113      1.1  christos ! Loads key first round from address in parameter 5 to out0, out1.
    114      1.1  christos !
    115  1.1.1.2  christos ! After the original LibDES initial permutation, the resulting left
    116      1.1  christos ! is in the variable initially used for right and vice versa. The macro
    117  1.1.1.2  christos ! implements the possibility to keep the halves in the original registers.
    118      1.1  christos !
    119      1.1  christos ! parameter 1  left
    120      1.1  christos ! parameter 2  right
    121      1.1  christos ! parameter 3  result left (modify in first round)
    122      1.1  christos ! parameter 4  result right (use in first round)
    123      1.1  christos ! parameter 5  key address
    124      1.1  christos ! parameter 6  1/2 for include encryption/decryption
    125      1.1  christos ! parameter 7  1 for move in1 to in3
    126      1.1  christos ! parameter 8  1 for move in3 to in4, 2 for move in4 to in3
    127      1.1  christos ! parameter 9  1 for load ks3 and ks2 to in4 and in3
    128      1.1  christos 
    129      1.1  christos 
    130      1.1  christos 
    131      1.1  christos 
    132      1.1  christos ! rounds_macro
    133      1.1  christos !
    134      1.1  christos ! The logic used in the DES rounds is the same as in the C code,
    135      1.1  christos ! except that calculations for sbox 1 and sbox 5 begin before
    136      1.1  christos ! the previous round is finished.
    137      1.1  christos !
    138      1.1  christos ! In each round one half (work) is modified based on key and the
    139      1.1  christos ! other half (use).
    140      1.1  christos !
    141      1.1  christos ! In this version we do two rounds in a loop repeated 7 times
    142  1.1.1.2  christos ! and two rounds separately.
    143      1.1  christos !
    144      1.1  christos ! One half has the bits for the sboxes in the following positions:
    145      1.1  christos !
    146      1.1  christos !	777777xx555555xx333333xx111111xx
    147      1.1  christos !
    148      1.1  christos !	88xx666666xx444444xx222222xx8888
    149      1.1  christos !
    150      1.1  christos ! The bits for each sbox are xor-ed with the key bits for that box.
    151      1.1  christos ! The above xx bits are cleared, and the result used for lookup in
    152      1.1  christos ! the sbox table. Each sbox entry contains the 4 output bits permuted
    153      1.1  christos ! into 32 bits according to the P permutation.
    154      1.1  christos !
    155      1.1  christos ! In the description of DES, left and right are switched after
    156      1.1  christos ! each round, except after last round. In this code the original
    157      1.1  christos ! left and right are kept in the same register in all rounds, meaning
    158      1.1  christos ! that after the 16 rounds the result for right is in the register
    159      1.1  christos ! originally used for left.
    160      1.1  christos !
    161      1.1  christos ! parameter 1  first work (left in first round)
    162      1.1  christos ! parameter 2  first use (right in first round)
    163      1.1  christos ! parameter 3  enc/dec  1/-1
    164      1.1  christos ! parameter 4  loop label
    165      1.1  christos ! parameter 5  key address register
    166      1.1  christos ! parameter 6  optional address for key next encryption/decryption
    167      1.1  christos ! parameter 7  not empty for include retl
    168      1.1  christos !
    169      1.1  christos ! also compares in2 to 8
    170      1.1  christos 
    171      1.1  christos 
    172      1.1  christos 
    173      1.1  christos 
    174      1.1  christos ! fp_macro
    175      1.1  christos !
    176      1.1  christos !  parameter 1   right (original left)
    177      1.1  christos !  parameter 2   left (original right)
    178      1.1  christos !  parameter 3   1 for optional store to [in0]
    179      1.1  christos !  parameter 4   1 for load input/output address to local5/7
    180      1.1  christos !
    181  1.1.1.2  christos !  The final permutation logic switches the halves, meaning that
    182  1.1.1.2  christos !  left and right ends up the registers originally used.
    183      1.1  christos 
    184      1.1  christos 
    185      1.1  christos 
    186      1.1  christos 
    187      1.1  christos ! fp_ip_macro
    188      1.1  christos !
    189      1.1  christos ! Does initial permutation for next block mixed with
    190      1.1  christos ! final permutation for current block.
    191      1.1  christos !
    192      1.1  christos ! parameter 1   original left
    193      1.1  christos ! parameter 2   original right
    194      1.1  christos ! parameter 3   left ip
    195      1.1  christos ! parameter 4   right ip
    196      1.1  christos ! parameter 5   1: load ks1/ks2 to in3/in4, add 120 to in4
    197      1.1  christos !                2: mov in4 to in3
    198      1.1  christos !
    199      1.1  christos ! also adds -8 to length in2 and loads loop counter to out4
    200      1.1  christos 
    201      1.1  christos 
    202      1.1  christos 
    203      1.1  christos 
    204      1.1  christos 
    205      1.1  christos ! load_little_endian
    206      1.1  christos !
    207      1.1  christos ! parameter 1  address
    208      1.1  christos ! parameter 2  destination left
    209      1.1  christos ! parameter 3  destination right
    210  1.1.1.2  christos ! parameter 4  temporary
    211      1.1  christos ! parameter 5  label
    212      1.1  christos 
    213      1.1  christos 
    214      1.1  christos 
    215      1.1  christos 
    216      1.1  christos ! load_little_endian_inc
    217      1.1  christos !
    218      1.1  christos ! parameter 1  address
    219      1.1  christos ! parameter 2  destination left
    220      1.1  christos ! parameter 3  destination right
    221  1.1.1.2  christos ! parameter 4  temporary
    222      1.1  christos ! parameter 4  label
    223      1.1  christos !
    224      1.1  christos ! adds 8 to address
    225      1.1  christos 
    226      1.1  christos 
    227      1.1  christos 
    228      1.1  christos 
    229      1.1  christos ! load_n_bytes
    230      1.1  christos !
    231      1.1  christos ! Loads 1 to 7 bytes little endian
    232      1.1  christos ! Remaining bytes are zeroed.
    233      1.1  christos !
    234      1.1  christos ! parameter 1  address
    235      1.1  christos ! parameter 2  length
    236      1.1  christos ! parameter 3  destination register left
    237      1.1  christos ! parameter 4  destination register right
    238      1.1  christos ! parameter 5  temp
    239      1.1  christos ! parameter 6  temp2
    240      1.1  christos ! parameter 7  label
    241      1.1  christos ! parameter 8  return label
    242      1.1  christos 
    243      1.1  christos 
    244      1.1  christos 
    245      1.1  christos 
    246      1.1  christos ! store_little_endian
    247      1.1  christos !
    248      1.1  christos ! parameter 1  address
    249      1.1  christos ! parameter 2  source left
    250      1.1  christos ! parameter 3  source right
    251  1.1.1.2  christos ! parameter 4  temporary
    252      1.1  christos 
    253      1.1  christos 
    254      1.1  christos 
    255      1.1  christos 
    256      1.1  christos ! store_n_bytes
    257      1.1  christos !
    258      1.1  christos ! Stores 1 to 7 bytes little endian
    259      1.1  christos !
    260      1.1  christos ! parameter 1  address
    261      1.1  christos ! parameter 2  length
    262      1.1  christos ! parameter 3  source register left
    263      1.1  christos ! parameter 4  source register right
    264      1.1  christos ! parameter 5  temp
    265      1.1  christos ! parameter 6  temp2
    266      1.1  christos ! parameter 7  label
    267      1.1  christos ! parameter 8  return label
    268      1.1  christos 
    269      1.1  christos 
    270      1.1  christos 
    271      1.1  christos 
    272      1.1  christos 
    273      1.1  christos 
    274      1.1  christos 
    275      1.1  christos 
    276      1.1  christos .section	".text"
    277      1.1  christos 
    278      1.1  christos 	.align 32
    279      1.1  christos 
    280      1.1  christos .des_enc:
    281      1.1  christos 
    282      1.1  christos 	! key address in3
    283      1.1  christos 	! loads key next encryption/decryption first round from [in4]
    284      1.1  christos 
    285      1.1  christos 
    286      1.1  christos 
    287      1.1  christos ! rounds_macro
    288      1.1  christos ! in5 out5 1 .des_enc.1 in3 in4 retl
    289      1.1  christos 
    290      1.1  christos 	xor	out5, out0, local1
    291      1.1  christos 
    292      1.1  christos 	ld	[out2+284], local5        ! 0x0000FC00
    293      1.1  christos 	ba	.des_enc.1
    294      1.1  christos 	and	local1, 252, local1
    295      1.1  christos 
    296      1.1  christos 	.align 32
    297      1.1  christos 
    298      1.1  christos .des_enc.1:
    299      1.1  christos 	! local6 is address sbox 6
    300      1.1  christos 	! out3   is address sbox 8
    301      1.1  christos 	! out4   is loop counter
    302      1.1  christos 
    303      1.1  christos 	ld	[global1+local1], local1
    304      1.1  christos 	xor	out5, out1, out1            ! 8642
    305      1.1  christos 	xor	out5, out0, out0            ! 7531
    306      1.1  christos 	! fmovs	%f0, %f0                  ! fxor used for alignment
    307      1.1  christos 
    308      1.1  christos 	srl	out1, 4, local0           ! rotate 4 right
    309      1.1  christos 	and	out0, local5, local3      ! 3
    310      1.1  christos 	! fmovs	%f0, %f0
    311      1.1  christos 
    312      1.1  christos 	ld	[in3+1*8], local7         ! key 7531 next round
    313      1.1  christos 	srl	local3, 8, local3         ! 3
    314      1.1  christos 	and	local0, 252, local2       ! 2
    315      1.1  christos 	! fmovs	%f0, %f0
    316      1.1  christos 
    317      1.1  christos 	ld	[global3+local3],local3   ! 3
    318      1.1  christos 	sll	out1, 28, out1            ! rotate
    319      1.1  christos 	xor	in5, local1, in5            ! 1 finished, local1 now sbox 7
    320      1.1  christos 
    321  1.1.1.2  christos 	ld	[global2+local2], local2  ! 2
    322      1.1  christos 	srl	out0, 24, local1          ! 7
    323      1.1  christos 	or	out1, local0, out1        ! rotate
    324      1.1  christos 
    325      1.1  christos 	ldub	[out2+local1], local1     ! 7 (and 0xFC)
    326      1.1  christos 	srl	out1, 24, local0          ! 8
    327      1.1  christos 	and	out1, local5, local4      ! 4
    328      1.1  christos 
    329      1.1  christos 	ldub	[out2+local0], local0     ! 8 (and 0xFC)
    330      1.1  christos 	srl	local4, 8, local4         ! 4
    331      1.1  christos 	xor	in5, local2, in5            ! 2 finished local2 now sbox 6
    332      1.1  christos 
    333      1.1  christos 	ld	[global4+local4],local4   ! 4
    334      1.1  christos 	srl	out1, 16, local2          ! 6
    335      1.1  christos 	xor	in5, local3, in5            ! 3 finished local3 now sbox 5
    336      1.1  christos 
    337      1.1  christos 	ld	[out3+local0],local0      ! 8
    338      1.1  christos 	and	local2, 252, local2       ! 6
    339      1.1  christos 	add	global1, 1536, local5     ! address sbox 7
    340      1.1  christos 
    341      1.1  christos 	ld	[local6+local2], local2   ! 6
    342      1.1  christos 	srl	out0, 16, local3          ! 5
    343      1.1  christos 	xor	in5, local4, in5            ! 4 finished
    344      1.1  christos 
    345      1.1  christos 	ld	[local5+local1],local1    ! 7
    346      1.1  christos 	and	local3, 252, local3       ! 5
    347      1.1  christos 	xor	in5, local0, in5            ! 8 finished
    348      1.1  christos 
    349      1.1  christos 	ld	[global5+local3],local3   ! 5
    350      1.1  christos 	xor	in5, local2, in5            ! 6 finished
    351      1.1  christos 	subcc	out4, 1, out4
    352      1.1  christos 
    353      1.1  christos 	ld	[in3+1*8+4], out0         ! key 8642 next round
    354      1.1  christos 	xor	in5, local7, local2        ! sbox 5 next round
    355      1.1  christos 	xor	in5, local1, in5            ! 7 finished
    356      1.1  christos 
    357      1.1  christos 	srl	local2, 16, local2        ! sbox 5 next round
    358      1.1  christos 	xor	in5, local3, in5            ! 5 finished
    359      1.1  christos 
    360      1.1  christos 	ld	[in3+1*16+4], out1        ! key 8642 next round again
    361      1.1  christos 	and	local2, 252, local2       ! sbox5 next round
    362      1.1  christos ! next round
    363      1.1  christos 	xor	in5, local7, local7        ! 7531
    364      1.1  christos 
    365      1.1  christos 	ld	[global5+local2], local2  ! 5
    366      1.1  christos 	srl	local7, 24, local3        ! 7
    367      1.1  christos 	xor	in5, out0, out0            ! 8642
    368      1.1  christos 
    369      1.1  christos 	ldub	[out2+local3], local3     ! 7 (and 0xFC)
    370      1.1  christos 	srl	out0, 4, local0           ! rotate 4 right
    371      1.1  christos 	and	local7, 252, local1       ! 1
    372      1.1  christos 
    373      1.1  christos 	sll	out0, 28, out0            ! rotate
    374      1.1  christos 	xor	out5, local2, out5            ! 5 finished local2 used
    375      1.1  christos 
    376      1.1  christos 	srl	local0, 8, local4         ! 4
    377      1.1  christos 	and	local0, 252, local2       ! 2
    378      1.1  christos 	ld	[local5+local3], local3   ! 7
    379      1.1  christos 
    380      1.1  christos 	srl	local0, 16, local5        ! 6
    381      1.1  christos 	or	out0, local0, out0        ! rotate
    382      1.1  christos 	ld	[global2+local2], local2  ! 2
    383      1.1  christos 
    384      1.1  christos 	srl	out0, 24, local0
    385      1.1  christos 	ld	[in3+1*16], out0          ! key 7531 next round
    386      1.1  christos 	and	local4, 252, local4	  ! 4
    387      1.1  christos 
    388      1.1  christos 	and	local5, 252, local5       ! 6
    389      1.1  christos 	ld	[global4+local4], local4  ! 4
    390      1.1  christos 	xor	out5, local3, out5            ! 7 finished local3 used
    391      1.1  christos 
    392      1.1  christos 	and	local0, 252, local0       ! 8
    393      1.1  christos 	ld	[local6+local5], local5   ! 6
    394      1.1  christos 	xor	out5, local2, out5            ! 2 finished local2 now sbox 3
    395      1.1  christos 
    396      1.1  christos 	srl	local7, 8, local2         ! 3 start
    397      1.1  christos 	ld	[out3+local0], local0     ! 8
    398      1.1  christos 	xor	out5, local4, out5            ! 4 finished
    399      1.1  christos 
    400      1.1  christos 	and	local2, 252, local2       ! 3
    401      1.1  christos 	ld	[global1+local1], local1  ! 1
    402      1.1  christos 	xor	out5, local5, out5            ! 6 finished local5 used
    403      1.1  christos 
    404      1.1  christos 	ld	[global3+local2], local2  ! 3
    405      1.1  christos 	xor	out5, local0, out5            ! 8 finished
    406      1.1  christos 	add	in3, 1*16, in3             ! enc add 8, dec add -8 to key pointer
    407      1.1  christos 
    408      1.1  christos 	ld	[out2+284], local5        ! 0x0000FC00
    409      1.1  christos 	xor	out5, out0, local4          ! sbox 1 next round
    410      1.1  christos 	xor	out5, local1, out5            ! 1 finished
    411      1.1  christos 
    412      1.1  christos 	xor	out5, local2, out5            ! 3 finished
    413      1.1  christos 	bne	.des_enc.1
    414      1.1  christos 	and	local4, 252, local1       ! sbox 1 next round
    415      1.1  christos 
    416      1.1  christos ! two rounds more:
    417      1.1  christos 
    418      1.1  christos 	ld	[global1+local1], local1
    419      1.1  christos 	xor	out5, out1, out1
    420      1.1  christos 	xor	out5, out0, out0
    421      1.1  christos 
    422      1.1  christos 	srl	out1, 4, local0           ! rotate
    423      1.1  christos 	and	out0, local5, local3
    424      1.1  christos 
    425      1.1  christos 	ld	[in3+1*8], local7         ! key 7531
    426      1.1  christos 	srl	local3, 8, local3
    427      1.1  christos 	and	local0, 252, local2
    428      1.1  christos 
    429      1.1  christos 	ld	[global3+local3],local3
    430      1.1  christos 	sll	out1, 28, out1            ! rotate
    431      1.1  christos 	xor	in5, local1, in5            ! 1 finished, local1 now sbox 7
    432      1.1  christos 
    433      1.1  christos 	ld	[global2+local2], local2
    434      1.1  christos 	srl	out0, 24, local1
    435      1.1  christos 	or	out1, local0, out1        ! rotate
    436      1.1  christos 
    437      1.1  christos 	ldub	[out2+local1], local1
    438      1.1  christos 	srl	out1, 24, local0
    439      1.1  christos 	and	out1, local5, local4
    440      1.1  christos 
    441      1.1  christos 	ldub	[out2+local0], local0
    442      1.1  christos 	srl	local4, 8, local4
    443      1.1  christos 	xor	in5, local2, in5            ! 2 finished local2 now sbox 6
    444      1.1  christos 
    445      1.1  christos 	ld	[global4+local4],local4
    446      1.1  christos 	srl	out1, 16, local2
    447      1.1  christos 	xor	in5, local3, in5            ! 3 finished local3 now sbox 5
    448      1.1  christos 
    449      1.1  christos 	ld	[out3+local0],local0
    450      1.1  christos 	and	local2, 252, local2
    451      1.1  christos 	add	global1, 1536, local5     ! address sbox 7
    452      1.1  christos 
    453      1.1  christos 	ld	[local6+local2], local2
    454      1.1  christos 	srl	out0, 16, local3
    455      1.1  christos 	xor	in5, local4, in5            ! 4 finished
    456      1.1  christos 
    457      1.1  christos 	ld	[local5+local1],local1
    458      1.1  christos 	and	local3, 252, local3
    459      1.1  christos 	xor	in5, local0, in5
    460      1.1  christos 
    461      1.1  christos 	ld	[global5+local3],local3
    462      1.1  christos 	xor	in5, local2, in5            ! 6 finished
    463      1.1  christos 	cmp	in2, 8
    464      1.1  christos 
    465      1.1  christos 	ld	[out2+280], out4  ! loop counter
    466      1.1  christos 	xor	in5, local7, local2        ! sbox 5 next round
    467      1.1  christos 	xor	in5, local1, in5            ! 7 finished
    468      1.1  christos 
    469      1.1  christos 	ld	[in3+1*8+4], out0
    470      1.1  christos 	srl	local2, 16, local2        ! sbox 5 next round
    471      1.1  christos 	xor	in5, local3, in5            ! 5 finished
    472      1.1  christos 
    473      1.1  christos 	and	local2, 252, local2
    474      1.1  christos ! next round (two rounds more)
    475      1.1  christos 	xor	in5, local7, local7        ! 7531
    476      1.1  christos 
    477      1.1  christos 	ld	[global5+local2], local2
    478      1.1  christos 	srl	local7, 24, local3
    479      1.1  christos 	xor	in5, out0, out0            ! 8642
    480      1.1  christos 
    481      1.1  christos 	ldub	[out2+local3], local3
    482      1.1  christos 	srl	out0, 4, local0           ! rotate
    483      1.1  christos 	and	local7, 252, local1
    484      1.1  christos 
    485      1.1  christos 	sll	out0, 28, out0            ! rotate
    486      1.1  christos 	xor	out5, local2, out5            ! 5 finished local2 used
    487      1.1  christos 
    488      1.1  christos 	srl	local0, 8, local4
    489      1.1  christos 	and	local0, 252, local2
    490      1.1  christos 	ld	[local5+local3], local3
    491      1.1  christos 
    492      1.1  christos 	srl	local0, 16, local5
    493      1.1  christos 	or	out0, local0, out0        ! rotate
    494      1.1  christos 	ld	[global2+local2], local2
    495      1.1  christos 
    496      1.1  christos 	srl	out0, 24, local0
    497      1.1  christos 	ld	[in4], out0   ! key next encryption/decryption
    498      1.1  christos 	and	local4, 252, local4
    499      1.1  christos 
    500      1.1  christos 	and	local5, 252, local5
    501      1.1  christos 	ld	[global4+local4], local4
    502      1.1  christos 	xor	out5, local3, out5            ! 7 finished local3 used
    503      1.1  christos 
    504      1.1  christos 	and	local0, 252, local0
    505      1.1  christos 	ld	[local6+local5], local5
    506      1.1  christos 	xor	out5, local2, out5            ! 2 finished local2 now sbox 3
    507      1.1  christos 
    508      1.1  christos 	srl	local7, 8, local2         ! 3 start
    509      1.1  christos 	ld	[out3+local0], local0
    510      1.1  christos 	xor	out5, local4, out5
    511      1.1  christos 
    512      1.1  christos 	and	local2, 252, local2
    513      1.1  christos 	ld	[global1+local1], local1
    514      1.1  christos 	xor	out5, local5, out5            ! 6 finished local5 used
    515      1.1  christos 
    516      1.1  christos 	ld	[global3+local2], local2
    517      1.1  christos 	srl	in5, 3, local3
    518      1.1  christos 	xor	out5, local0, out5
    519      1.1  christos 
    520      1.1  christos 	ld	[in4+4], out1 ! key next encryption/decryption
    521      1.1  christos 	sll	in5, 29, local4
    522      1.1  christos 	xor	out5, local1, out5
    523      1.1  christos 
    524      1.1  christos 	retl
    525      1.1  christos 	xor	out5, local2, out5
    526      1.1  christos 
    527      1.1  christos 
    528      1.1  christos 
    529      1.1  christos 	.align 32
    530      1.1  christos 
    531      1.1  christos .des_dec:
    532      1.1  christos 
    533      1.1  christos 	! implemented with out5 as first parameter to avoid
    534      1.1  christos 	! register exchange in ede modes
    535      1.1  christos 
    536      1.1  christos 	! key address in4
    537      1.1  christos 	! loads key next encryption/decryption first round from [in3]
    538      1.1  christos 
    539      1.1  christos 
    540      1.1  christos 
    541      1.1  christos ! rounds_macro
    542      1.1  christos ! out5 in5 -1 .des_dec.1 in4 in3 retl
    543      1.1  christos 
    544      1.1  christos 	xor	in5, out0, local1
    545      1.1  christos 
    546      1.1  christos 	ld	[out2+284], local5        ! 0x0000FC00
    547      1.1  christos 	ba	.des_dec.1
    548      1.1  christos 	and	local1, 252, local1
    549      1.1  christos 
    550      1.1  christos 	.align 32
    551      1.1  christos 
    552      1.1  christos .des_dec.1:
    553      1.1  christos 	! local6 is address sbox 6
    554      1.1  christos 	! out3   is address sbox 8
    555      1.1  christos 	! out4   is loop counter
    556      1.1  christos 
    557      1.1  christos 	ld	[global1+local1], local1
    558      1.1  christos 	xor	in5, out1, out1            ! 8642
    559      1.1  christos 	xor	in5, out0, out0            ! 7531
    560      1.1  christos 	! fmovs	%f0, %f0                  ! fxor used for alignment
    561      1.1  christos 
    562      1.1  christos 	srl	out1, 4, local0           ! rotate 4 right
    563      1.1  christos 	and	out0, local5, local3      ! 3
    564      1.1  christos 	! fmovs	%f0, %f0
    565      1.1  christos 
    566      1.1  christos 	ld	[in4+-1*8], local7         ! key 7531 next round
    567      1.1  christos 	srl	local3, 8, local3         ! 3
    568      1.1  christos 	and	local0, 252, local2       ! 2
    569      1.1  christos 	! fmovs	%f0, %f0
    570      1.1  christos 
    571      1.1  christos 	ld	[global3+local3],local3   ! 3
    572      1.1  christos 	sll	out1, 28, out1            ! rotate
    573      1.1  christos 	xor	out5, local1, out5            ! 1 finished, local1 now sbox 7
    574      1.1  christos 
    575  1.1.1.2  christos 	ld	[global2+local2], local2  ! 2
    576      1.1  christos 	srl	out0, 24, local1          ! 7
    577      1.1  christos 	or	out1, local0, out1        ! rotate
    578      1.1  christos 
    579      1.1  christos 	ldub	[out2+local1], local1     ! 7 (and 0xFC)
    580      1.1  christos 	srl	out1, 24, local0          ! 8
    581      1.1  christos 	and	out1, local5, local4      ! 4
    582      1.1  christos 
    583      1.1  christos 	ldub	[out2+local0], local0     ! 8 (and 0xFC)
    584      1.1  christos 	srl	local4, 8, local4         ! 4
    585      1.1  christos 	xor	out5, local2, out5            ! 2 finished local2 now sbox 6
    586      1.1  christos 
    587      1.1  christos 	ld	[global4+local4],local4   ! 4
    588      1.1  christos 	srl	out1, 16, local2          ! 6
    589      1.1  christos 	xor	out5, local3, out5            ! 3 finished local3 now sbox 5
    590      1.1  christos 
    591      1.1  christos 	ld	[out3+local0],local0      ! 8
    592      1.1  christos 	and	local2, 252, local2       ! 6
    593      1.1  christos 	add	global1, 1536, local5     ! address sbox 7
    594      1.1  christos 
    595      1.1  christos 	ld	[local6+local2], local2   ! 6
    596      1.1  christos 	srl	out0, 16, local3          ! 5
    597      1.1  christos 	xor	out5, local4, out5            ! 4 finished
    598      1.1  christos 
    599      1.1  christos 	ld	[local5+local1],local1    ! 7
    600      1.1  christos 	and	local3, 252, local3       ! 5
    601      1.1  christos 	xor	out5, local0, out5            ! 8 finished
    602      1.1  christos 
    603      1.1  christos 	ld	[global5+local3],local3   ! 5
    604      1.1  christos 	xor	out5, local2, out5            ! 6 finished
    605      1.1  christos 	subcc	out4, 1, out4
    606      1.1  christos 
    607      1.1  christos 	ld	[in4+-1*8+4], out0         ! key 8642 next round
    608      1.1  christos 	xor	out5, local7, local2        ! sbox 5 next round
    609      1.1  christos 	xor	out5, local1, out5            ! 7 finished
    610      1.1  christos 
    611      1.1  christos 	srl	local2, 16, local2        ! sbox 5 next round
    612      1.1  christos 	xor	out5, local3, out5            ! 5 finished
    613      1.1  christos 
    614      1.1  christos 	ld	[in4+-1*16+4], out1        ! key 8642 next round again
    615      1.1  christos 	and	local2, 252, local2       ! sbox5 next round
    616      1.1  christos ! next round
    617      1.1  christos 	xor	out5, local7, local7        ! 7531
    618      1.1  christos 
    619      1.1  christos 	ld	[global5+local2], local2  ! 5
    620      1.1  christos 	srl	local7, 24, local3        ! 7
    621      1.1  christos 	xor	out5, out0, out0            ! 8642
    622      1.1  christos 
    623      1.1  christos 	ldub	[out2+local3], local3     ! 7 (and 0xFC)
    624      1.1  christos 	srl	out0, 4, local0           ! rotate 4 right
    625      1.1  christos 	and	local7, 252, local1       ! 1
    626      1.1  christos 
    627      1.1  christos 	sll	out0, 28, out0            ! rotate
    628      1.1  christos 	xor	in5, local2, in5            ! 5 finished local2 used
    629      1.1  christos 
    630      1.1  christos 	srl	local0, 8, local4         ! 4
    631      1.1  christos 	and	local0, 252, local2       ! 2
    632      1.1  christos 	ld	[local5+local3], local3   ! 7
    633      1.1  christos 
    634      1.1  christos 	srl	local0, 16, local5        ! 6
    635      1.1  christos 	or	out0, local0, out0        ! rotate
    636      1.1  christos 	ld	[global2+local2], local2  ! 2
    637      1.1  christos 
    638      1.1  christos 	srl	out0, 24, local0
    639      1.1  christos 	ld	[in4+-1*16], out0          ! key 7531 next round
    640      1.1  christos 	and	local4, 252, local4	  ! 4
    641      1.1  christos 
    642      1.1  christos 	and	local5, 252, local5       ! 6
    643      1.1  christos 	ld	[global4+local4], local4  ! 4
    644      1.1  christos 	xor	in5, local3, in5            ! 7 finished local3 used
    645      1.1  christos 
    646      1.1  christos 	and	local0, 252, local0       ! 8
    647      1.1  christos 	ld	[local6+local5], local5   ! 6
    648      1.1  christos 	xor	in5, local2, in5            ! 2 finished local2 now sbox 3
    649      1.1  christos 
    650      1.1  christos 	srl	local7, 8, local2         ! 3 start
    651      1.1  christos 	ld	[out3+local0], local0     ! 8
    652      1.1  christos 	xor	in5, local4, in5            ! 4 finished
    653      1.1  christos 
    654      1.1  christos 	and	local2, 252, local2       ! 3
    655      1.1  christos 	ld	[global1+local1], local1  ! 1
    656      1.1  christos 	xor	in5, local5, in5            ! 6 finished local5 used
    657      1.1  christos 
    658      1.1  christos 	ld	[global3+local2], local2  ! 3
    659      1.1  christos 	xor	in5, local0, in5            ! 8 finished
    660      1.1  christos 	add	in4, -1*16, in4             ! enc add 8, dec add -8 to key pointer
    661      1.1  christos 
    662      1.1  christos 	ld	[out2+284], local5        ! 0x0000FC00
    663      1.1  christos 	xor	in5, out0, local4          ! sbox 1 next round
    664      1.1  christos 	xor	in5, local1, in5            ! 1 finished
    665      1.1  christos 
    666      1.1  christos 	xor	in5, local2, in5            ! 3 finished
    667      1.1  christos 	bne	.des_dec.1
    668      1.1  christos 	and	local4, 252, local1       ! sbox 1 next round
    669      1.1  christos 
    670      1.1  christos ! two rounds more:
    671      1.1  christos 
    672      1.1  christos 	ld	[global1+local1], local1
    673      1.1  christos 	xor	in5, out1, out1
    674      1.1  christos 	xor	in5, out0, out0
    675      1.1  christos 
    676      1.1  christos 	srl	out1, 4, local0           ! rotate
    677      1.1  christos 	and	out0, local5, local3
    678      1.1  christos 
    679      1.1  christos 	ld	[in4+-1*8], local7         ! key 7531
    680      1.1  christos 	srl	local3, 8, local3
    681      1.1  christos 	and	local0, 252, local2
    682      1.1  christos 
    683      1.1  christos 	ld	[global3+local3],local3
    684      1.1  christos 	sll	out1, 28, out1            ! rotate
    685      1.1  christos 	xor	out5, local1, out5            ! 1 finished, local1 now sbox 7
    686      1.1  christos 
    687      1.1  christos 	ld	[global2+local2], local2
    688      1.1  christos 	srl	out0, 24, local1
    689      1.1  christos 	or	out1, local0, out1        ! rotate
    690      1.1  christos 
    691      1.1  christos 	ldub	[out2+local1], local1
    692      1.1  christos 	srl	out1, 24, local0
    693      1.1  christos 	and	out1, local5, local4
    694      1.1  christos 
    695      1.1  christos 	ldub	[out2+local0], local0
    696      1.1  christos 	srl	local4, 8, local4
    697      1.1  christos 	xor	out5, local2, out5            ! 2 finished local2 now sbox 6
    698      1.1  christos 
    699      1.1  christos 	ld	[global4+local4],local4
    700      1.1  christos 	srl	out1, 16, local2
    701      1.1  christos 	xor	out5, local3, out5            ! 3 finished local3 now sbox 5
    702      1.1  christos 
    703      1.1  christos 	ld	[out3+local0],local0
    704      1.1  christos 	and	local2, 252, local2
    705      1.1  christos 	add	global1, 1536, local5     ! address sbox 7
    706      1.1  christos 
    707      1.1  christos 	ld	[local6+local2], local2
    708      1.1  christos 	srl	out0, 16, local3
    709      1.1  christos 	xor	out5, local4, out5            ! 4 finished
    710      1.1  christos 
    711      1.1  christos 	ld	[local5+local1],local1
    712      1.1  christos 	and	local3, 252, local3
    713      1.1  christos 	xor	out5, local0, out5
    714      1.1  christos 
    715      1.1  christos 	ld	[global5+local3],local3
    716      1.1  christos 	xor	out5, local2, out5            ! 6 finished
    717      1.1  christos 	cmp	in2, 8
    718      1.1  christos 
    719      1.1  christos 	ld	[out2+280], out4  ! loop counter
    720      1.1  christos 	xor	out5, local7, local2        ! sbox 5 next round
    721      1.1  christos 	xor	out5, local1, out5            ! 7 finished
    722      1.1  christos 
    723      1.1  christos 	ld	[in4+-1*8+4], out0
    724      1.1  christos 	srl	local2, 16, local2        ! sbox 5 next round
    725      1.1  christos 	xor	out5, local3, out5            ! 5 finished
    726      1.1  christos 
    727      1.1  christos 	and	local2, 252, local2
    728      1.1  christos ! next round (two rounds more)
    729      1.1  christos 	xor	out5, local7, local7        ! 7531
    730      1.1  christos 
    731      1.1  christos 	ld	[global5+local2], local2
    732      1.1  christos 	srl	local7, 24, local3
    733      1.1  christos 	xor	out5, out0, out0            ! 8642
    734      1.1  christos 
    735      1.1  christos 	ldub	[out2+local3], local3
    736      1.1  christos 	srl	out0, 4, local0           ! rotate
    737      1.1  christos 	and	local7, 252, local1
    738      1.1  christos 
    739      1.1  christos 	sll	out0, 28, out0            ! rotate
    740      1.1  christos 	xor	in5, local2, in5            ! 5 finished local2 used
    741      1.1  christos 
    742      1.1  christos 	srl	local0, 8, local4
    743      1.1  christos 	and	local0, 252, local2
    744      1.1  christos 	ld	[local5+local3], local3
    745      1.1  christos 
    746      1.1  christos 	srl	local0, 16, local5
    747      1.1  christos 	or	out0, local0, out0        ! rotate
    748      1.1  christos 	ld	[global2+local2], local2
    749      1.1  christos 
    750      1.1  christos 	srl	out0, 24, local0
    751      1.1  christos 	ld	[in3], out0   ! key next encryption/decryption
    752      1.1  christos 	and	local4, 252, local4
    753      1.1  christos 
    754      1.1  christos 	and	local5, 252, local5
    755      1.1  christos 	ld	[global4+local4], local4
    756      1.1  christos 	xor	in5, local3, in5            ! 7 finished local3 used
    757      1.1  christos 
    758      1.1  christos 	and	local0, 252, local0
    759      1.1  christos 	ld	[local6+local5], local5
    760      1.1  christos 	xor	in5, local2, in5            ! 2 finished local2 now sbox 3
    761      1.1  christos 
    762      1.1  christos 	srl	local7, 8, local2         ! 3 start
    763      1.1  christos 	ld	[out3+local0], local0
    764      1.1  christos 	xor	in5, local4, in5
    765      1.1  christos 
    766      1.1  christos 	and	local2, 252, local2
    767      1.1  christos 	ld	[global1+local1], local1
    768      1.1  christos 	xor	in5, local5, in5            ! 6 finished local5 used
    769      1.1  christos 
    770      1.1  christos 	ld	[global3+local2], local2
    771      1.1  christos 	srl	out5, 3, local3
    772      1.1  christos 	xor	in5, local0, in5
    773      1.1  christos 
    774      1.1  christos 	ld	[in3+4], out1 ! key next encryption/decryption
    775      1.1  christos 	sll	out5, 29, local4
    776      1.1  christos 	xor	in5, local1, in5
    777      1.1  christos 
    778      1.1  christos 	retl
    779      1.1  christos 	xor	in5, local2, in5
    780      1.1  christos 
    781      1.1  christos 
    782      1.1  christos 
    783      1.1  christos 
    784      1.1  christos ! void DES_encrypt1(data, ks, enc)
    785      1.1  christos ! *******************************
    786      1.1  christos 
    787      1.1  christos 	.align 32
    788      1.1  christos 	.global DES_encrypt1
    789      1.1  christos 	.type	 DES_encrypt1,#function
    790      1.1  christos 
    791      1.1  christos DES_encrypt1:
    792      1.1  christos 
    793      1.1  christos 	save	%sp, FRAME, %sp
    794      1.1  christos 
    795      1.1  christos 	sethi	%hi(_PIC_DES_SPtrans-1f),global1
    796      1.1  christos 	or	global1,%lo(_PIC_DES_SPtrans-1f),global1
    797      1.1  christos 1:	call	.+8
    798      1.1  christos 	add	%o7,global1,global1
    799      1.1  christos 	sub	global1,_PIC_DES_SPtrans-.des_and,out2
    800      1.1  christos 
    801      1.1  christos 	ld	[in0], in5                ! left
    802      1.1  christos 	cmp	in2, 0                    ! enc
    803      1.1  christos 
    804      1.1  christos 	be	.encrypt.dec
    805      1.1  christos 	ld	[in0+4], out5             ! right
    806      1.1  christos 
    807      1.1  christos 	! parameter 6  1/2 for include encryption/decryption
    808      1.1  christos 	! parameter 7  1 for move in1 to in3
    809      1.1  christos 	! parameter 8  1 for move in3 to in4, 2 for move in4 to in3
    810      1.1  christos 
    811      1.1  christos 
    812      1.1  christos 
    813      1.1  christos ! ip_macro
    814      1.1  christos ! in5 out5 out5 in5 in3 0 1 1
    815      1.1  christos 
    816      1.1  christos 	ld	[out2+256], local1
    817      1.1  christos 	srl	out5, 4, local4
    818      1.1  christos 
    819      1.1  christos 	xor	local4, in5, local4
    820      1.1  christos 	mov in1, in3
    821      1.1  christos 
    822      1.1  christos 	ld	[out2+260], local2
    823      1.1  christos 	and	local4, local1, local4
    824      1.1  christos 	mov in3, in4
    825      1.1  christos 
    826      1.1  christos 
    827      1.1  christos 	ld	[out2+280], out4          ! loop counter
    828      1.1  christos 	sll	local4, 4, local1
    829      1.1  christos 	xor	in5, local4, in5
    830      1.1  christos 
    831      1.1  christos 	ld	[out2+264], local3
    832      1.1  christos 	srl	in5, 16, local4
    833      1.1  christos 	xor	out5, local1, out5
    834      1.1  christos 
    835      1.1  christos 
    836      1.1  christos 	xor	local4, out5, local4
    837      1.1  christos 	nop	!sethi	%hi(DES_SPtrans), global1 ! sbox addr
    838      1.1  christos 
    839      1.1  christos 
    840      1.1  christos 	and	local4, local2, local4
    841      1.1  christos 	nop	!or	global1, %lo(DES_SPtrans), global1   ! sbox addr
    842      1.1  christos 
    843      1.1  christos 	sll	local4, 16, local1
    844      1.1  christos 	xor	out5, local4, out5
    845      1.1  christos 
    846      1.1  christos 	srl	out5, 2, local4
    847      1.1  christos 	xor	in5, local1, in5
    848      1.1  christos 
    849      1.1  christos 	sethi	%hi(16711680), local5
    850      1.1  christos 	xor	local4, in5, local4
    851      1.1  christos 
    852      1.1  christos 	and	local4, local3, local4
    853      1.1  christos 	or	local5, 255, local5
    854      1.1  christos 
    855      1.1  christos 	sll	local4, 2, local2
    856      1.1  christos 	xor	in5, local4, in5
    857      1.1  christos 
    858      1.1  christos 	srl	in5, 8, local4
    859      1.1  christos 	xor	out5, local2, out5
    860      1.1  christos 
    861      1.1  christos 	xor	local4, out5, local4
    862      1.1  christos 	add	global1, 768, global4
    863      1.1  christos 
    864      1.1  christos 	and	local4, local5, local4
    865      1.1  christos 	add	global1, 1024, global5
    866      1.1  christos 
    867      1.1  christos 	ld	[out2+272], local7
    868      1.1  christos 	sll	local4, 8, local1
    869      1.1  christos 	xor	out5, local4, out5
    870      1.1  christos 
    871      1.1  christos 	srl	out5, 1, local4
    872      1.1  christos 	xor	in5, local1, in5
    873      1.1  christos 
    874      1.1  christos 	ld	[in3], out0                ! key 7531
    875      1.1  christos 	xor	local4, in5, local4
    876      1.1  christos 	add	global1, 256, global2
    877      1.1  christos 
    878      1.1  christos 	ld	[in3+4], out1              ! key 8642
    879      1.1  christos 	and	local4, local7, local4
    880      1.1  christos 	add	global1, 512, global3
    881      1.1  christos 
    882      1.1  christos 	sll	local4, 1, local1
    883      1.1  christos 	xor	in5, local4, in5
    884      1.1  christos 
    885      1.1  christos 	sll	in5, 3, local3
    886      1.1  christos 	xor	out5, local1, out5
    887      1.1  christos 
    888      1.1  christos 	sll	out5, 3, local2
    889      1.1  christos 	add	global1, 1280, local6     ! address sbox 8
    890      1.1  christos 
    891      1.1  christos 	srl	in5, 29, local4
    892      1.1  christos 	add	global1, 1792, out3       ! address sbox 8
    893      1.1  christos 
    894      1.1  christos 	srl	out5, 29, local1
    895      1.1  christos 	or	local4, local3, out5
    896      1.1  christos 
    897      1.1  christos 	or	local2, local1, in5
    898      1.1  christos 
    899      1.1  christos 
    900      1.1  christos 
    901      1.1  christos 
    902      1.1  christos 
    903      1.1  christos 
    904      1.1  christos 
    905      1.1  christos 
    906      1.1  christos ! rounds_macro
    907      1.1  christos ! in5 out5 1 .des_encrypt1.1 in3 in4
    908      1.1  christos 
    909      1.1  christos 	xor	out5, out0, local1
    910      1.1  christos 
    911      1.1  christos 	ld	[out2+284], local5        ! 0x0000FC00
    912      1.1  christos 	ba	.des_encrypt1.1
    913      1.1  christos 	and	local1, 252, local1
    914      1.1  christos 
    915      1.1  christos 	.align 32
    916      1.1  christos 
    917      1.1  christos .des_encrypt1.1:
    918      1.1  christos 	! local6 is address sbox 6
    919      1.1  christos 	! out3   is address sbox 8
    920      1.1  christos 	! out4   is loop counter
    921      1.1  christos 
    922      1.1  christos 	ld	[global1+local1], local1
    923      1.1  christos 	xor	out5, out1, out1            ! 8642
    924      1.1  christos 	xor	out5, out0, out0            ! 7531
    925      1.1  christos 	! fmovs	%f0, %f0                  ! fxor used for alignment
    926      1.1  christos 
    927      1.1  christos 	srl	out1, 4, local0           ! rotate 4 right
    928      1.1  christos 	and	out0, local5, local3      ! 3
    929      1.1  christos 	! fmovs	%f0, %f0
    930      1.1  christos 
    931      1.1  christos 	ld	[in3+1*8], local7         ! key 7531 next round
    932      1.1  christos 	srl	local3, 8, local3         ! 3
    933      1.1  christos 	and	local0, 252, local2       ! 2
    934      1.1  christos 	! fmovs	%f0, %f0
    935      1.1  christos 
    936      1.1  christos 	ld	[global3+local3],local3   ! 3
    937      1.1  christos 	sll	out1, 28, out1            ! rotate
    938      1.1  christos 	xor	in5, local1, in5            ! 1 finished, local1 now sbox 7
    939      1.1  christos 
    940  1.1.1.2  christos 	ld	[global2+local2], local2  ! 2
    941      1.1  christos 	srl	out0, 24, local1          ! 7
    942      1.1  christos 	or	out1, local0, out1        ! rotate
    943      1.1  christos 
    944      1.1  christos 	ldub	[out2+local1], local1     ! 7 (and 0xFC)
    945      1.1  christos 	srl	out1, 24, local0          ! 8
    946      1.1  christos 	and	out1, local5, local4      ! 4
    947      1.1  christos 
    948      1.1  christos 	ldub	[out2+local0], local0     ! 8 (and 0xFC)
    949      1.1  christos 	srl	local4, 8, local4         ! 4
    950      1.1  christos 	xor	in5, local2, in5            ! 2 finished local2 now sbox 6
    951      1.1  christos 
    952      1.1  christos 	ld	[global4+local4],local4   ! 4
    953      1.1  christos 	srl	out1, 16, local2          ! 6
    954      1.1  christos 	xor	in5, local3, in5            ! 3 finished local3 now sbox 5
    955      1.1  christos 
    956      1.1  christos 	ld	[out3+local0],local0      ! 8
    957      1.1  christos 	and	local2, 252, local2       ! 6
    958      1.1  christos 	add	global1, 1536, local5     ! address sbox 7
    959      1.1  christos 
    960      1.1  christos 	ld	[local6+local2], local2   ! 6
    961      1.1  christos 	srl	out0, 16, local3          ! 5
    962      1.1  christos 	xor	in5, local4, in5            ! 4 finished
    963      1.1  christos 
    964      1.1  christos 	ld	[local5+local1],local1    ! 7
    965      1.1  christos 	and	local3, 252, local3       ! 5
    966      1.1  christos 	xor	in5, local0, in5            ! 8 finished
    967      1.1  christos 
    968      1.1  christos 	ld	[global5+local3],local3   ! 5
    969      1.1  christos 	xor	in5, local2, in5            ! 6 finished
    970      1.1  christos 	subcc	out4, 1, out4
    971      1.1  christos 
    972      1.1  christos 	ld	[in3+1*8+4], out0         ! key 8642 next round
    973      1.1  christos 	xor	in5, local7, local2        ! sbox 5 next round
    974      1.1  christos 	xor	in5, local1, in5            ! 7 finished
    975      1.1  christos 
    976      1.1  christos 	srl	local2, 16, local2        ! sbox 5 next round
    977      1.1  christos 	xor	in5, local3, in5            ! 5 finished
    978      1.1  christos 
    979      1.1  christos 	ld	[in3+1*16+4], out1        ! key 8642 next round again
    980      1.1  christos 	and	local2, 252, local2       ! sbox5 next round
    981      1.1  christos ! next round
    982      1.1  christos 	xor	in5, local7, local7        ! 7531
    983      1.1  christos 
    984      1.1  christos 	ld	[global5+local2], local2  ! 5
    985      1.1  christos 	srl	local7, 24, local3        ! 7
    986      1.1  christos 	xor	in5, out0, out0            ! 8642
    987      1.1  christos 
    988      1.1  christos 	ldub	[out2+local3], local3     ! 7 (and 0xFC)
    989      1.1  christos 	srl	out0, 4, local0           ! rotate 4 right
    990      1.1  christos 	and	local7, 252, local1       ! 1
    991      1.1  christos 
    992      1.1  christos 	sll	out0, 28, out0            ! rotate
    993      1.1  christos 	xor	out5, local2, out5            ! 5 finished local2 used
    994      1.1  christos 
    995      1.1  christos 	srl	local0, 8, local4         ! 4
    996      1.1  christos 	and	local0, 252, local2       ! 2
    997      1.1  christos 	ld	[local5+local3], local3   ! 7
    998      1.1  christos 
    999      1.1  christos 	srl	local0, 16, local5        ! 6
   1000      1.1  christos 	or	out0, local0, out0        ! rotate
   1001      1.1  christos 	ld	[global2+local2], local2  ! 2
   1002      1.1  christos 
   1003      1.1  christos 	srl	out0, 24, local0
   1004      1.1  christos 	ld	[in3+1*16], out0          ! key 7531 next round
   1005      1.1  christos 	and	local4, 252, local4	  ! 4
   1006      1.1  christos 
   1007      1.1  christos 	and	local5, 252, local5       ! 6
   1008      1.1  christos 	ld	[global4+local4], local4  ! 4
   1009      1.1  christos 	xor	out5, local3, out5            ! 7 finished local3 used
   1010      1.1  christos 
   1011      1.1  christos 	and	local0, 252, local0       ! 8
   1012      1.1  christos 	ld	[local6+local5], local5   ! 6
   1013      1.1  christos 	xor	out5, local2, out5            ! 2 finished local2 now sbox 3
   1014      1.1  christos 
   1015      1.1  christos 	srl	local7, 8, local2         ! 3 start
   1016      1.1  christos 	ld	[out3+local0], local0     ! 8
   1017      1.1  christos 	xor	out5, local4, out5            ! 4 finished
   1018      1.1  christos 
   1019      1.1  christos 	and	local2, 252, local2       ! 3
   1020      1.1  christos 	ld	[global1+local1], local1  ! 1
   1021      1.1  christos 	xor	out5, local5, out5            ! 6 finished local5 used
   1022      1.1  christos 
   1023      1.1  christos 	ld	[global3+local2], local2  ! 3
   1024      1.1  christos 	xor	out5, local0, out5            ! 8 finished
   1025      1.1  christos 	add	in3, 1*16, in3             ! enc add 8, dec add -8 to key pointer
   1026      1.1  christos 
   1027      1.1  christos 	ld	[out2+284], local5        ! 0x0000FC00
   1028      1.1  christos 	xor	out5, out0, local4          ! sbox 1 next round
   1029      1.1  christos 	xor	out5, local1, out5            ! 1 finished
   1030      1.1  christos 
   1031      1.1  christos 	xor	out5, local2, out5            ! 3 finished
   1032      1.1  christos 	bne	.des_encrypt1.1
   1033      1.1  christos 	and	local4, 252, local1       ! sbox 1 next round
   1034      1.1  christos 
   1035      1.1  christos ! two rounds more:
   1036      1.1  christos 
   1037      1.1  christos 	ld	[global1+local1], local1
   1038      1.1  christos 	xor	out5, out1, out1
   1039      1.1  christos 	xor	out5, out0, out0
   1040      1.1  christos 
   1041      1.1  christos 	srl	out1, 4, local0           ! rotate
   1042      1.1  christos 	and	out0, local5, local3
   1043      1.1  christos 
   1044      1.1  christos 	ld	[in3+1*8], local7         ! key 7531
   1045      1.1  christos 	srl	local3, 8, local3
   1046      1.1  christos 	and	local0, 252, local2
   1047      1.1  christos 
   1048      1.1  christos 	ld	[global3+local3],local3
   1049      1.1  christos 	sll	out1, 28, out1            ! rotate
   1050      1.1  christos 	xor	in5, local1, in5            ! 1 finished, local1 now sbox 7
   1051      1.1  christos 
   1052      1.1  christos 	ld	[global2+local2], local2
   1053      1.1  christos 	srl	out0, 24, local1
   1054      1.1  christos 	or	out1, local0, out1        ! rotate
   1055      1.1  christos 
   1056      1.1  christos 	ldub	[out2+local1], local1
   1057      1.1  christos 	srl	out1, 24, local0
   1058      1.1  christos 	and	out1, local5, local4
   1059      1.1  christos 
   1060      1.1  christos 	ldub	[out2+local0], local0
   1061      1.1  christos 	srl	local4, 8, local4
   1062      1.1  christos 	xor	in5, local2, in5            ! 2 finished local2 now sbox 6
   1063      1.1  christos 
   1064      1.1  christos 	ld	[global4+local4],local4
   1065      1.1  christos 	srl	out1, 16, local2
   1066      1.1  christos 	xor	in5, local3, in5            ! 3 finished local3 now sbox 5
   1067      1.1  christos 
   1068      1.1  christos 	ld	[out3+local0],local0
   1069      1.1  christos 	and	local2, 252, local2
   1070      1.1  christos 	add	global1, 1536, local5     ! address sbox 7
   1071      1.1  christos 
   1072      1.1  christos 	ld	[local6+local2], local2
   1073      1.1  christos 	srl	out0, 16, local3
   1074      1.1  christos 	xor	in5, local4, in5            ! 4 finished
   1075      1.1  christos 
   1076      1.1  christos 	ld	[local5+local1],local1
   1077      1.1  christos 	and	local3, 252, local3
   1078      1.1  christos 	xor	in5, local0, in5
   1079      1.1  christos 
   1080      1.1  christos 	ld	[global5+local3],local3
   1081      1.1  christos 	xor	in5, local2, in5            ! 6 finished
   1082      1.1  christos 	cmp	in2, 8
   1083      1.1  christos 
   1084      1.1  christos 	ld	[out2+280], out4  ! loop counter
   1085      1.1  christos 	xor	in5, local7, local2        ! sbox 5 next round
   1086      1.1  christos 	xor	in5, local1, in5            ! 7 finished
   1087      1.1  christos 
   1088      1.1  christos 	ld	[in3+1*8+4], out0
   1089      1.1  christos 	srl	local2, 16, local2        ! sbox 5 next round
   1090      1.1  christos 	xor	in5, local3, in5            ! 5 finished
   1091      1.1  christos 
   1092      1.1  christos 	and	local2, 252, local2
   1093      1.1  christos ! next round (two rounds more)
   1094      1.1  christos 	xor	in5, local7, local7        ! 7531
   1095      1.1  christos 
   1096      1.1  christos 	ld	[global5+local2], local2
   1097      1.1  christos 	srl	local7, 24, local3
   1098      1.1  christos 	xor	in5, out0, out0            ! 8642
   1099      1.1  christos 
   1100      1.1  christos 	ldub	[out2+local3], local3
   1101      1.1  christos 	srl	out0, 4, local0           ! rotate
   1102      1.1  christos 	and	local7, 252, local1
   1103      1.1  christos 
   1104      1.1  christos 	sll	out0, 28, out0            ! rotate
   1105      1.1  christos 	xor	out5, local2, out5            ! 5 finished local2 used
   1106      1.1  christos 
   1107      1.1  christos 	srl	local0, 8, local4
   1108      1.1  christos 	and	local0, 252, local2
   1109      1.1  christos 	ld	[local5+local3], local3
   1110      1.1  christos 
   1111      1.1  christos 	srl	local0, 16, local5
   1112      1.1  christos 	or	out0, local0, out0        ! rotate
   1113      1.1  christos 	ld	[global2+local2], local2
   1114      1.1  christos 
   1115      1.1  christos 	srl	out0, 24, local0
   1116      1.1  christos 	ld	[in4], out0   ! key next encryption/decryption
   1117      1.1  christos 	and	local4, 252, local4
   1118      1.1  christos 
   1119      1.1  christos 	and	local5, 252, local5
   1120      1.1  christos 	ld	[global4+local4], local4
   1121      1.1  christos 	xor	out5, local3, out5            ! 7 finished local3 used
   1122      1.1  christos 
   1123      1.1  christos 	and	local0, 252, local0
   1124      1.1  christos 	ld	[local6+local5], local5
   1125      1.1  christos 	xor	out5, local2, out5            ! 2 finished local2 now sbox 3
   1126      1.1  christos 
   1127      1.1  christos 	srl	local7, 8, local2         ! 3 start
   1128      1.1  christos 	ld	[out3+local0], local0
   1129      1.1  christos 	xor	out5, local4, out5
   1130      1.1  christos 
   1131      1.1  christos 	and	local2, 252, local2
   1132      1.1  christos 	ld	[global1+local1], local1
   1133      1.1  christos 	xor	out5, local5, out5            ! 6 finished local5 used
   1134      1.1  christos 
   1135      1.1  christos 	ld	[global3+local2], local2
   1136      1.1  christos 	srl	in5, 3, local3
   1137      1.1  christos 	xor	out5, local0, out5
   1138      1.1  christos 
   1139      1.1  christos 	ld	[in4+4], out1 ! key next encryption/decryption
   1140      1.1  christos 	sll	in5, 29, local4
   1141      1.1  christos 	xor	out5, local1, out5
   1142      1.1  christos 
   1143      1.1  christos 
   1144      1.1  christos 	xor	out5, local2, out5
   1145      1.1  christos  ! in4 not used
   1146      1.1  christos 
   1147      1.1  christos 
   1148      1.1  christos 
   1149      1.1  christos ! fp_macro
   1150      1.1  christos ! in5 out5 1
   1151      1.1  christos 
   1152      1.1  christos 	! initially undo the rotate 3 left done after initial permutation
   1153      1.1  christos 	! original left is received shifted 3 right and 29 left in local3/4
   1154      1.1  christos 
   1155      1.1  christos 	sll	out5, 29, local1
   1156      1.1  christos 	or	local3, local4, in5
   1157      1.1  christos 
   1158      1.1  christos 	srl	out5, 3, out5
   1159      1.1  christos 	sethi	%hi(0x55555555), local2
   1160      1.1  christos 
   1161      1.1  christos 	or	out5, local1, out5
   1162      1.1  christos 	or	local2, %lo(0x55555555), local2
   1163      1.1  christos 
   1164      1.1  christos 	srl	out5, 1, local3
   1165      1.1  christos 	sethi	%hi(0x00ff00ff), local1
   1166      1.1  christos 	xor	local3, in5, local3
   1167      1.1  christos 	or	local1, %lo(0x00ff00ff), local1
   1168      1.1  christos 	and	local3, local2, local3
   1169      1.1  christos 	sethi	%hi(0x33333333), local4
   1170      1.1  christos 	sll	local3, 1, local2
   1171      1.1  christos 
   1172      1.1  christos 	xor	in5, local3, in5
   1173      1.1  christos 
   1174      1.1  christos 	srl	in5, 8, local3
   1175      1.1  christos 	xor	out5, local2, out5
   1176      1.1  christos 	xor	local3, out5, local3
   1177      1.1  christos 	or	local4, %lo(0x33333333), local4
   1178      1.1  christos 	and	local3, local1, local3
   1179      1.1  christos 	sethi	%hi(0x0000ffff), local1
   1180      1.1  christos 	sll	local3, 8, local2
   1181      1.1  christos 
   1182      1.1  christos 	xor	out5, local3, out5
   1183      1.1  christos 
   1184      1.1  christos 	srl	out5, 2, local3
   1185      1.1  christos 	xor	in5, local2, in5
   1186      1.1  christos 	xor	local3, in5, local3
   1187      1.1  christos 	or	local1, %lo(0x0000ffff), local1
   1188      1.1  christos 	and	local3, local4, local3
   1189      1.1  christos 	sethi	%hi(0x0f0f0f0f), local4
   1190      1.1  christos 	sll	local3, 2, local2
   1191      1.1  christos 
   1192      1.1  christos 
   1193      1.1  christos 	xor	in5, local3, in5
   1194      1.1  christos 
   1195      1.1  christos 
   1196      1.1  christos 	srl	in5, 16, local3
   1197      1.1  christos 	xor	out5, local2, out5
   1198      1.1  christos 	xor	local3, out5, local3
   1199      1.1  christos 	or	local4, %lo(0x0f0f0f0f), local4
   1200      1.1  christos 	and	local3, local1, local3
   1201      1.1  christos 	sll	local3, 16, local2
   1202      1.1  christos 
   1203      1.1  christos 	xor	out5, local3, local1
   1204      1.1  christos 
   1205      1.1  christos 	srl	local1, 4, local3
   1206      1.1  christos 	xor	in5, local2, in5
   1207      1.1  christos 	xor	local3, in5, local3
   1208      1.1  christos 	and	local3, local4, local3
   1209      1.1  christos 	sll	local3, 4, local2
   1210      1.1  christos 
   1211      1.1  christos 	xor	in5, local3, in5
   1212      1.1  christos 
   1213      1.1  christos 	! optional store:
   1214      1.1  christos 
   1215      1.1  christos 	st in5, [in0]
   1216      1.1  christos 
   1217      1.1  christos 	xor	local1, local2, out5
   1218      1.1  christos 
   1219      1.1  christos 	st out5, [in0+4]
   1220      1.1  christos 
   1221      1.1  christos             ! 1 for store to [in0]
   1222      1.1  christos 
   1223      1.1  christos 	ret
   1224      1.1  christos 	restore
   1225      1.1  christos 
   1226      1.1  christos .encrypt.dec:
   1227      1.1  christos 
   1228      1.1  christos 	add	in1, 120, in3             ! use last subkey for first round
   1229      1.1  christos 
   1230      1.1  christos 	! parameter 6  1/2 for include encryption/decryption
   1231      1.1  christos 	! parameter 7  1 for move in1 to in3
   1232      1.1  christos 	! parameter 8  1 for move in3 to in4, 2 for move in4 to in3
   1233      1.1  christos 
   1234      1.1  christos 
   1235      1.1  christos 
   1236      1.1  christos ! ip_macro
   1237      1.1  christos ! in5 out5 in5 out5 in4 2 0 1
   1238      1.1  christos 
   1239      1.1  christos 	ld	[out2+256], local1
   1240      1.1  christos 	srl	out5, 4, local4
   1241      1.1  christos 
   1242      1.1  christos 	xor	local4, in5, local4
   1243      1.1  christos 	nop
   1244      1.1  christos 
   1245      1.1  christos 	ld	[out2+260], local2
   1246      1.1  christos 	and	local4, local1, local4
   1247      1.1  christos 	mov in3, in4
   1248      1.1  christos 
   1249      1.1  christos 
   1250      1.1  christos 	ld	[out2+280], out4          ! loop counter
   1251      1.1  christos 	sll	local4, 4, local1
   1252      1.1  christos 	xor	in5, local4, in5
   1253      1.1  christos 
   1254      1.1  christos 	ld	[out2+264], local3
   1255      1.1  christos 	srl	in5, 16, local4
   1256      1.1  christos 	xor	out5, local1, out5
   1257      1.1  christos 
   1258      1.1  christos 
   1259      1.1  christos 	xor	local4, out5, local4
   1260      1.1  christos 	nop	!sethi	%hi(DES_SPtrans), global1 ! sbox addr
   1261      1.1  christos 
   1262      1.1  christos 
   1263      1.1  christos 	and	local4, local2, local4
   1264      1.1  christos 	nop	!or	global1, %lo(DES_SPtrans), global1   ! sbox addr
   1265      1.1  christos 
   1266      1.1  christos 	sll	local4, 16, local1
   1267      1.1  christos 	xor	out5, local4, out5
   1268      1.1  christos 
   1269      1.1  christos 	srl	out5, 2, local4
   1270      1.1  christos 	xor	in5, local1, in5
   1271      1.1  christos 
   1272      1.1  christos 	sethi	%hi(16711680), local5
   1273      1.1  christos 	xor	local4, in5, local4
   1274      1.1  christos 
   1275      1.1  christos 	and	local4, local3, local4
   1276      1.1  christos 	or	local5, 255, local5
   1277      1.1  christos 
   1278      1.1  christos 	sll	local4, 2, local2
   1279      1.1  christos 	xor	in5, local4, in5
   1280      1.1  christos 
   1281      1.1  christos 	srl	in5, 8, local4
   1282      1.1  christos 	xor	out5, local2, out5
   1283      1.1  christos 
   1284      1.1  christos 	xor	local4, out5, local4
   1285      1.1  christos 	add	global1, 768, global4
   1286      1.1  christos 
   1287      1.1  christos 	and	local4, local5, local4
   1288      1.1  christos 	add	global1, 1024, global5
   1289      1.1  christos 
   1290      1.1  christos 	ld	[out2+272], local7
   1291      1.1  christos 	sll	local4, 8, local1
   1292      1.1  christos 	xor	out5, local4, out5
   1293      1.1  christos 
   1294      1.1  christos 	srl	out5, 1, local4
   1295      1.1  christos 	xor	in5, local1, in5
   1296      1.1  christos 
   1297      1.1  christos 	ld	[in4], out0                ! key 7531
   1298      1.1  christos 	xor	local4, in5, local4
   1299      1.1  christos 	add	global1, 256, global2
   1300      1.1  christos 
   1301      1.1  christos 	ld	[in4+4], out1              ! key 8642
   1302      1.1  christos 	and	local4, local7, local4
   1303      1.1  christos 	add	global1, 512, global3
   1304      1.1  christos 
   1305      1.1  christos 	sll	local4, 1, local1
   1306      1.1  christos 	xor	in5, local4, in5
   1307      1.1  christos 
   1308      1.1  christos 	sll	in5, 3, local3
   1309      1.1  christos 	xor	out5, local1, out5
   1310      1.1  christos 
   1311      1.1  christos 	sll	out5, 3, local2
   1312      1.1  christos 	add	global1, 1280, local6     ! address sbox 8
   1313      1.1  christos 
   1314      1.1  christos 	srl	in5, 29, local4
   1315      1.1  christos 	add	global1, 1792, out3       ! address sbox 8
   1316      1.1  christos 
   1317      1.1  christos 	srl	out5, 29, local1
   1318      1.1  christos 	or	local4, local3, in5
   1319      1.1  christos 
   1320      1.1  christos 	or	local2, local1, out5
   1321      1.1  christos 
   1322      1.1  christos 
   1323      1.1  christos 
   1324      1.1  christos 
   1325      1.1  christos 
   1326      1.1  christos 		ld	[out2+284], local5     ! 0x0000FC00 used in the rounds
   1327      1.1  christos 		or	local2, local1, out5
   1328      1.1  christos 		xor	in5, out0, local1
   1329      1.1  christos 
   1330      1.1  christos 		call .des_dec.1
   1331      1.1  christos 		and	local1, 252, local1
   1332      1.1  christos 
   1333      1.1  christos 
   1334      1.1  christos  ! include dec,  ks in4
   1335      1.1  christos 
   1336      1.1  christos 
   1337      1.1  christos 
   1338      1.1  christos ! fp_macro
   1339      1.1  christos ! out5 in5 1
   1340      1.1  christos 
   1341      1.1  christos 	! initially undo the rotate 3 left done after initial permutation
   1342      1.1  christos 	! original left is received shifted 3 right and 29 left in local3/4
   1343      1.1  christos 
   1344      1.1  christos 	sll	in5, 29, local1
   1345      1.1  christos 	or	local3, local4, out5
   1346      1.1  christos 
   1347      1.1  christos 	srl	in5, 3, in5
   1348      1.1  christos 	sethi	%hi(0x55555555), local2
   1349      1.1  christos 
   1350      1.1  christos 	or	in5, local1, in5
   1351      1.1  christos 	or	local2, %lo(0x55555555), local2
   1352      1.1  christos 
   1353      1.1  christos 	srl	in5, 1, local3
   1354      1.1  christos 	sethi	%hi(0x00ff00ff), local1
   1355      1.1  christos 	xor	local3, out5, local3
   1356      1.1  christos 	or	local1, %lo(0x00ff00ff), local1
   1357      1.1  christos 	and	local3, local2, local3
   1358      1.1  christos 	sethi	%hi(0x33333333), local4
   1359      1.1  christos 	sll	local3, 1, local2
   1360      1.1  christos 
   1361      1.1  christos 	xor	out5, local3, out5
   1362      1.1  christos 
   1363      1.1  christos 	srl	out5, 8, local3
   1364      1.1  christos 	xor	in5, local2, in5
   1365      1.1  christos 	xor	local3, in5, local3
   1366      1.1  christos 	or	local4, %lo(0x33333333), local4
   1367      1.1  christos 	and	local3, local1, local3
   1368      1.1  christos 	sethi	%hi(0x0000ffff), local1
   1369      1.1  christos 	sll	local3, 8, local2
   1370      1.1  christos 
   1371      1.1  christos 	xor	in5, local3, in5
   1372      1.1  christos 
   1373      1.1  christos 	srl	in5, 2, local3
   1374      1.1  christos 	xor	out5, local2, out5
   1375      1.1  christos 	xor	local3, out5, local3
   1376      1.1  christos 	or	local1, %lo(0x0000ffff), local1
   1377      1.1  christos 	and	local3, local4, local3
   1378      1.1  christos 	sethi	%hi(0x0f0f0f0f), local4
   1379      1.1  christos 	sll	local3, 2, local2
   1380      1.1  christos 
   1381      1.1  christos 
   1382      1.1  christos 	xor	out5, local3, out5
   1383      1.1  christos 
   1384      1.1  christos 
   1385      1.1  christos 	srl	out5, 16, local3
   1386      1.1  christos 	xor	in5, local2, in5
   1387      1.1  christos 	xor	local3, in5, local3
   1388      1.1  christos 	or	local4, %lo(0x0f0f0f0f), local4
   1389      1.1  christos 	and	local3, local1, local3
   1390      1.1  christos 	sll	local3, 16, local2
   1391      1.1  christos 
   1392      1.1  christos 	xor	in5, local3, local1
   1393      1.1  christos 
   1394      1.1  christos 	srl	local1, 4, local3
   1395      1.1  christos 	xor	out5, local2, out5
   1396      1.1  christos 	xor	local3, out5, local3
   1397      1.1  christos 	and	local3, local4, local3
   1398      1.1  christos 	sll	local3, 4, local2
   1399      1.1  christos 
   1400      1.1  christos 	xor	out5, local3, out5
   1401      1.1  christos 
   1402      1.1  christos 	! optional store:
   1403      1.1  christos 
   1404      1.1  christos 	st out5, [in0]
   1405      1.1  christos 
   1406      1.1  christos 	xor	local1, local2, in5
   1407      1.1  christos 
   1408      1.1  christos 	st in5, [in0+4]
   1409      1.1  christos 
   1410      1.1  christos             ! 1 for store to [in0]
   1411      1.1  christos 
   1412      1.1  christos 	ret
   1413      1.1  christos 	restore
   1414      1.1  christos 
   1415      1.1  christos .DES_encrypt1.end:
   1416      1.1  christos 	.size	 DES_encrypt1,.DES_encrypt1.end-DES_encrypt1
   1417      1.1  christos 
   1418      1.1  christos 
   1419      1.1  christos ! void DES_encrypt2(data, ks, enc)
   1420      1.1  christos !*********************************
   1421      1.1  christos 
   1422      1.1  christos 	! encrypts/decrypts without initial/final permutation
   1423      1.1  christos 
   1424      1.1  christos 	.align 32
   1425      1.1  christos 	.global DES_encrypt2
   1426      1.1  christos 	.type	 DES_encrypt2,#function
   1427      1.1  christos 
   1428      1.1  christos DES_encrypt2:
   1429      1.1  christos 
   1430      1.1  christos 	save	%sp, FRAME, %sp
   1431      1.1  christos 
   1432      1.1  christos 	sethi	%hi(_PIC_DES_SPtrans-1f),global1
   1433      1.1  christos 	or	global1,%lo(_PIC_DES_SPtrans-1f),global1
   1434      1.1  christos 1:	call	.+8
   1435      1.1  christos 	add	%o7,global1,global1
   1436      1.1  christos 	sub	global1,_PIC_DES_SPtrans-.des_and,out2
   1437      1.1  christos 
   1438  1.1.1.2  christos 	! Set sbox address 1 to 6 and rotate halves 3 left
   1439      1.1  christos 	! Errors caught by destest? Yes. Still? *NO*
   1440      1.1  christos 
   1441      1.1  christos 	!sethi	%hi(DES_SPtrans), global1 ! address sbox 1
   1442      1.1  christos 
   1443      1.1  christos 	!or	global1, %lo(DES_SPtrans), global1  ! sbox 1
   1444      1.1  christos 
   1445      1.1  christos 	add	global1, 256, global2     ! sbox 2
   1446      1.1  christos 	add	global1, 512, global3     ! sbox 3
   1447      1.1  christos 
   1448      1.1  christos 	ld	[in0], out5               ! right
   1449      1.1  christos 	add	global1, 768, global4     ! sbox 4
   1450      1.1  christos 	add	global1, 1024, global5    ! sbox 5
   1451      1.1  christos 
   1452      1.1  christos 	ld	[in0+4], in5              ! left
   1453      1.1  christos 	add	global1, 1280, local6     ! sbox 6
   1454      1.1  christos 	add	global1, 1792, out3       ! sbox 8
   1455      1.1  christos 
   1456      1.1  christos 	! rotate
   1457      1.1  christos 
   1458      1.1  christos 	sll	in5, 3, local5
   1459      1.1  christos 	mov	in1, in3                  ! key address to in3
   1460      1.1  christos 
   1461      1.1  christos 	sll	out5, 3, local7
   1462      1.1  christos 	srl	in5, 29, in5
   1463      1.1  christos 
   1464      1.1  christos 	srl	out5, 29, out5
   1465      1.1  christos 	add	in5, local5, in5
   1466      1.1  christos 
   1467      1.1  christos 	add	out5, local7, out5
   1468      1.1  christos 	cmp	in2, 0
   1469      1.1  christos 
   1470      1.1  christos 	! we use our own stackframe
   1471      1.1  christos 
   1472      1.1  christos 	be	.encrypt2.dec
   1473      1.1  christos 	STPTR	in0, [%sp+BIAS+ARG0+0*ARGSZ]
   1474      1.1  christos 
   1475      1.1  christos 	ld	[in3], out0               ! key 7531 first round
   1476      1.1  christos 	mov	LOOPS, out4               ! loop counter
   1477      1.1  christos 
   1478      1.1  christos 	ld	[in3+4], out1             ! key 8642 first round
   1479      1.1  christos 	sethi	%hi(0x0000FC00), local5
   1480      1.1  christos 
   1481      1.1  christos 	call .des_enc
   1482      1.1  christos 	mov	in3, in4
   1483      1.1  christos 
   1484      1.1  christos 	! rotate
   1485      1.1  christos 	sll	in5, 29, in0
   1486      1.1  christos 	srl	in5, 3, in5
   1487      1.1  christos 	sll	out5, 29, in1
   1488      1.1  christos 	add	in5, in0, in5
   1489      1.1  christos 	srl	out5, 3, out5
   1490      1.1  christos 	LDPTR	[%sp+BIAS+ARG0+0*ARGSZ], in0
   1491      1.1  christos 	add	out5, in1, out5
   1492      1.1  christos 	st	in5, [in0]
   1493      1.1  christos 	st	out5, [in0+4]
   1494      1.1  christos 
   1495      1.1  christos 	ret
   1496      1.1  christos 	restore
   1497      1.1  christos 
   1498      1.1  christos 
   1499      1.1  christos .encrypt2.dec:
   1500      1.1  christos 
   1501      1.1  christos 	add in3, 120, in4
   1502      1.1  christos 
   1503      1.1  christos 	ld	[in4], out0               ! key 7531 first round
   1504      1.1  christos 	mov	LOOPS, out4               ! loop counter
   1505      1.1  christos 
   1506      1.1  christos 	ld	[in4+4], out1             ! key 8642 first round
   1507      1.1  christos 	sethi	%hi(0x0000FC00), local5
   1508      1.1  christos 
   1509      1.1  christos 	mov	in5, local1               ! left expected in out5
   1510      1.1  christos 	mov	out5, in5
   1511      1.1  christos 
   1512      1.1  christos 	call .des_dec
   1513      1.1  christos 	mov	local1, out5
   1514      1.1  christos 
   1515      1.1  christos .encrypt2.finish:
   1516      1.1  christos 
   1517      1.1  christos 	! rotate
   1518      1.1  christos 	sll	in5, 29, in0
   1519      1.1  christos 	srl	in5, 3, in5
   1520      1.1  christos 	sll	out5, 29, in1
   1521      1.1  christos 	add	in5, in0, in5
   1522      1.1  christos 	srl	out5, 3, out5
   1523      1.1  christos 	LDPTR	[%sp+BIAS+ARG0+0*ARGSZ], in0
   1524      1.1  christos 	add	out5, in1, out5
   1525      1.1  christos 	st	out5, [in0]
   1526      1.1  christos 	st	in5, [in0+4]
   1527      1.1  christos 
   1528      1.1  christos 	ret
   1529      1.1  christos 	restore
   1530      1.1  christos 
   1531      1.1  christos .DES_encrypt2.end:
   1532      1.1  christos 	.size	 DES_encrypt2, .DES_encrypt2.end-DES_encrypt2
   1533      1.1  christos 
   1534      1.1  christos 
   1535      1.1  christos ! void DES_encrypt3(data, ks1, ks2, ks3)
   1536      1.1  christos ! **************************************
   1537      1.1  christos 
   1538      1.1  christos 	.align 32
   1539      1.1  christos 	.global DES_encrypt3
   1540      1.1  christos 	.type	 DES_encrypt3,#function
   1541      1.1  christos 
   1542      1.1  christos DES_encrypt3:
   1543      1.1  christos 
   1544      1.1  christos 	save	%sp, FRAME, %sp
   1545      1.1  christos 
   1546      1.1  christos 	sethi	%hi(_PIC_DES_SPtrans-1f),global1
   1547      1.1  christos 	or	global1,%lo(_PIC_DES_SPtrans-1f),global1
   1548      1.1  christos 1:	call	.+8
   1549      1.1  christos 	add	%o7,global1,global1
   1550      1.1  christos 	sub	global1,_PIC_DES_SPtrans-.des_and,out2
   1551      1.1  christos 
   1552      1.1  christos 	ld	[in0], in5                ! left
   1553      1.1  christos 	add	in2, 120, in4             ! ks2
   1554      1.1  christos 
   1555      1.1  christos 	ld	[in0+4], out5             ! right
   1556      1.1  christos 	mov	in3, in2                  ! save ks3
   1557      1.1  christos 
   1558      1.1  christos 	! parameter 6  1/2 for include encryption/decryption
   1559      1.1  christos 	! parameter 7  1 for mov in1 to in3
   1560      1.1  christos 	! parameter 8  1 for mov in3 to in4
   1561      1.1  christos 	! parameter 9  1 for load ks3 and ks2 to in4 and in3
   1562      1.1  christos 
   1563      1.1  christos 
   1564      1.1  christos 
   1565      1.1  christos ! ip_macro
   1566      1.1  christos ! in5 out5 out5 in5 in3 1 1 0 0
   1567      1.1  christos 
   1568      1.1  christos 	ld	[out2+256], local1
   1569      1.1  christos 	srl	out5, 4, local4
   1570      1.1  christos 
   1571      1.1  christos 	xor	local4, in5, local4
   1572      1.1  christos 	mov in1, in3
   1573      1.1  christos 
   1574      1.1  christos 	ld	[out2+260], local2
   1575      1.1  christos 	and	local4, local1, local4
   1576      1.1  christos 
   1577      1.1  christos 
   1578      1.1  christos 
   1579      1.1  christos 	ld	[out2+280], out4          ! loop counter
   1580      1.1  christos 	sll	local4, 4, local1
   1581      1.1  christos 	xor	in5, local4, in5
   1582      1.1  christos 
   1583      1.1  christos 	ld	[out2+264], local3
   1584      1.1  christos 	srl	in5, 16, local4
   1585      1.1  christos 	xor	out5, local1, out5
   1586      1.1  christos 
   1587      1.1  christos 
   1588      1.1  christos 	xor	local4, out5, local4
   1589      1.1  christos 	nop	!sethi	%hi(DES_SPtrans), global1 ! sbox addr
   1590      1.1  christos 
   1591      1.1  christos 
   1592      1.1  christos 	and	local4, local2, local4
   1593      1.1  christos 	nop	!or	global1, %lo(DES_SPtrans), global1   ! sbox addr
   1594      1.1  christos 
   1595      1.1  christos 	sll	local4, 16, local1
   1596      1.1  christos 	xor	out5, local4, out5
   1597      1.1  christos 
   1598      1.1  christos 	srl	out5, 2, local4
   1599      1.1  christos 	xor	in5, local1, in5
   1600      1.1  christos 
   1601      1.1  christos 	sethi	%hi(16711680), local5
   1602      1.1  christos 	xor	local4, in5, local4
   1603      1.1  christos 
   1604      1.1  christos 	and	local4, local3, local4
   1605      1.1  christos 	or	local5, 255, local5
   1606      1.1  christos 
   1607      1.1  christos 	sll	local4, 2, local2
   1608      1.1  christos 	xor	in5, local4, in5
   1609      1.1  christos 
   1610      1.1  christos 	srl	in5, 8, local4
   1611      1.1  christos 	xor	out5, local2, out5
   1612      1.1  christos 
   1613      1.1  christos 	xor	local4, out5, local4
   1614      1.1  christos 	add	global1, 768, global4
   1615      1.1  christos 
   1616      1.1  christos 	and	local4, local5, local4
   1617      1.1  christos 	add	global1, 1024, global5
   1618      1.1  christos 
   1619      1.1  christos 	ld	[out2+272], local7
   1620      1.1  christos 	sll	local4, 8, local1
   1621      1.1  christos 	xor	out5, local4, out5
   1622      1.1  christos 
   1623      1.1  christos 	srl	out5, 1, local4
   1624      1.1  christos 	xor	in5, local1, in5
   1625      1.1  christos 
   1626      1.1  christos 	ld	[in3], out0                ! key 7531
   1627      1.1  christos 	xor	local4, in5, local4
   1628      1.1  christos 	add	global1, 256, global2
   1629      1.1  christos 
   1630      1.1  christos 	ld	[in3+4], out1              ! key 8642
   1631      1.1  christos 	and	local4, local7, local4
   1632      1.1  christos 	add	global1, 512, global3
   1633      1.1  christos 
   1634      1.1  christos 	sll	local4, 1, local1
   1635      1.1  christos 	xor	in5, local4, in5
   1636      1.1  christos 
   1637      1.1  christos 	sll	in5, 3, local3
   1638      1.1  christos 	xor	out5, local1, out5
   1639      1.1  christos 
   1640      1.1  christos 	sll	out5, 3, local2
   1641      1.1  christos 	add	global1, 1280, local6     ! address sbox 8
   1642      1.1  christos 
   1643      1.1  christos 	srl	in5, 29, local4
   1644      1.1  christos 	add	global1, 1792, out3       ! address sbox 8
   1645      1.1  christos 
   1646      1.1  christos 	srl	out5, 29, local1
   1647      1.1  christos 	or	local4, local3, out5
   1648      1.1  christos 
   1649      1.1  christos 	or	local2, local1, in5
   1650      1.1  christos 
   1651      1.1  christos 
   1652      1.1  christos 
   1653      1.1  christos 		ld	[out2+284], local5     ! 0x0000FC00 used in the rounds
   1654      1.1  christos 		or	local2, local1, in5
   1655      1.1  christos 		xor	out5, out0, local1
   1656      1.1  christos 
   1657      1.1  christos 		call .des_enc.1
   1658      1.1  christos 		and	local1, 252, local1
   1659      1.1  christos 
   1660      1.1  christos 
   1661      1.1  christos 
   1662      1.1  christos 
   1663      1.1  christos 
   1664      1.1  christos 
   1665      1.1  christos 	call	.des_dec
   1666      1.1  christos 	mov	in2, in3                  ! preload ks3
   1667      1.1  christos 
   1668      1.1  christos 	call	.des_enc
   1669      1.1  christos 	nop
   1670      1.1  christos 
   1671      1.1  christos 
   1672      1.1  christos 
   1673      1.1  christos ! fp_macro
   1674      1.1  christos ! in5 out5 1
   1675      1.1  christos 
   1676      1.1  christos 	! initially undo the rotate 3 left done after initial permutation
   1677      1.1  christos 	! original left is received shifted 3 right and 29 left in local3/4
   1678      1.1  christos 
   1679      1.1  christos 	sll	out5, 29, local1
   1680      1.1  christos 	or	local3, local4, in5
   1681      1.1  christos 
   1682      1.1  christos 	srl	out5, 3, out5
   1683      1.1  christos 	sethi	%hi(0x55555555), local2
   1684      1.1  christos 
   1685      1.1  christos 	or	out5, local1, out5
   1686      1.1  christos 	or	local2, %lo(0x55555555), local2
   1687      1.1  christos 
   1688      1.1  christos 	srl	out5, 1, local3
   1689      1.1  christos 	sethi	%hi(0x00ff00ff), local1
   1690      1.1  christos 	xor	local3, in5, local3
   1691      1.1  christos 	or	local1, %lo(0x00ff00ff), local1
   1692      1.1  christos 	and	local3, local2, local3
   1693      1.1  christos 	sethi	%hi(0x33333333), local4
   1694      1.1  christos 	sll	local3, 1, local2
   1695      1.1  christos 
   1696      1.1  christos 	xor	in5, local3, in5
   1697      1.1  christos 
   1698      1.1  christos 	srl	in5, 8, local3
   1699      1.1  christos 	xor	out5, local2, out5
   1700      1.1  christos 	xor	local3, out5, local3
   1701      1.1  christos 	or	local4, %lo(0x33333333), local4
   1702      1.1  christos 	and	local3, local1, local3
   1703      1.1  christos 	sethi	%hi(0x0000ffff), local1
   1704      1.1  christos 	sll	local3, 8, local2
   1705      1.1  christos 
   1706      1.1  christos 	xor	out5, local3, out5
   1707      1.1  christos 
   1708      1.1  christos 	srl	out5, 2, local3
   1709      1.1  christos 	xor	in5, local2, in5
   1710      1.1  christos 	xor	local3, in5, local3
   1711      1.1  christos 	or	local1, %lo(0x0000ffff), local1
   1712      1.1  christos 	and	local3, local4, local3
   1713      1.1  christos 	sethi	%hi(0x0f0f0f0f), local4
   1714      1.1  christos 	sll	local3, 2, local2
   1715      1.1  christos 
   1716      1.1  christos 
   1717      1.1  christos 	xor	in5, local3, in5
   1718      1.1  christos 
   1719      1.1  christos 
   1720      1.1  christos 	srl	in5, 16, local3
   1721      1.1  christos 	xor	out5, local2, out5
   1722      1.1  christos 	xor	local3, out5, local3
   1723      1.1  christos 	or	local4, %lo(0x0f0f0f0f), local4
   1724      1.1  christos 	and	local3, local1, local3
   1725      1.1  christos 	sll	local3, 16, local2
   1726      1.1  christos 
   1727      1.1  christos 	xor	out5, local3, local1
   1728      1.1  christos 
   1729      1.1  christos 	srl	local1, 4, local3
   1730      1.1  christos 	xor	in5, local2, in5
   1731      1.1  christos 	xor	local3, in5, local3
   1732      1.1  christos 	and	local3, local4, local3
   1733      1.1  christos 	sll	local3, 4, local2
   1734      1.1  christos 
   1735      1.1  christos 	xor	in5, local3, in5
   1736      1.1  christos 
   1737      1.1  christos 	! optional store:
   1738      1.1  christos 
   1739      1.1  christos 	st in5, [in0]
   1740      1.1  christos 
   1741      1.1  christos 	xor	local1, local2, out5
   1742      1.1  christos 
   1743      1.1  christos 	st out5, [in0+4]
   1744      1.1  christos 
   1745      1.1  christos 
   1746      1.1  christos 
   1747      1.1  christos 	ret
   1748      1.1  christos 	restore
   1749      1.1  christos 
   1750      1.1  christos .DES_encrypt3.end:
   1751      1.1  christos 	.size	 DES_encrypt3,.DES_encrypt3.end-DES_encrypt3
   1752      1.1  christos 
   1753      1.1  christos 
   1754      1.1  christos ! void DES_decrypt3(data, ks1, ks2, ks3)
   1755      1.1  christos ! **************************************
   1756      1.1  christos 
   1757      1.1  christos 	.align 32
   1758      1.1  christos 	.global DES_decrypt3
   1759      1.1  christos 	.type	 DES_decrypt3,#function
   1760      1.1  christos 
   1761      1.1  christos DES_decrypt3:
   1762      1.1  christos 
   1763      1.1  christos 	save	%sp, FRAME, %sp
   1764      1.1  christos 
   1765      1.1  christos 	sethi	%hi(_PIC_DES_SPtrans-1f),global1
   1766      1.1  christos 	or	global1,%lo(_PIC_DES_SPtrans-1f),global1
   1767      1.1  christos 1:	call	.+8
   1768      1.1  christos 	add	%o7,global1,global1
   1769      1.1  christos 	sub	global1,_PIC_DES_SPtrans-.des_and,out2
   1770      1.1  christos 
   1771      1.1  christos 	ld	[in0], in5                ! left
   1772      1.1  christos 	add	in3, 120, in4             ! ks3
   1773      1.1  christos 
   1774      1.1  christos 	ld	[in0+4], out5             ! right
   1775      1.1  christos 	mov	in2, in3                  ! ks2
   1776      1.1  christos 
   1777      1.1  christos 	! parameter 6  1/2 for include encryption/decryption
   1778      1.1  christos 	! parameter 7  1 for mov in1 to in3
   1779      1.1  christos 	! parameter 8  1 for mov in3 to in4
   1780      1.1  christos 	! parameter 9  1 for load ks3 and ks2 to in4 and in3
   1781      1.1  christos 
   1782      1.1  christos 
   1783      1.1  christos 
   1784      1.1  christos ! ip_macro
   1785      1.1  christos ! in5 out5 in5 out5 in4 2 0 0 0
   1786      1.1  christos 
   1787      1.1  christos 	ld	[out2+256], local1
   1788      1.1  christos 	srl	out5, 4, local4
   1789      1.1  christos 
   1790      1.1  christos 	xor	local4, in5, local4
   1791      1.1  christos 	nop
   1792      1.1  christos 
   1793      1.1  christos 	ld	[out2+260], local2
   1794      1.1  christos 	and	local4, local1, local4
   1795      1.1  christos 
   1796      1.1  christos 
   1797      1.1  christos 
   1798      1.1  christos 	ld	[out2+280], out4          ! loop counter
   1799      1.1  christos 	sll	local4, 4, local1
   1800      1.1  christos 	xor	in5, local4, in5
   1801      1.1  christos 
   1802      1.1  christos 	ld	[out2+264], local3
   1803      1.1  christos 	srl	in5, 16, local4
   1804      1.1  christos 	xor	out5, local1, out5
   1805      1.1  christos 
   1806      1.1  christos 
   1807      1.1  christos 	xor	local4, out5, local4
   1808      1.1  christos 	nop	!sethi	%hi(DES_SPtrans), global1 ! sbox addr
   1809      1.1  christos 
   1810      1.1  christos 
   1811      1.1  christos 	and	local4, local2, local4
   1812      1.1  christos 	nop	!or	global1, %lo(DES_SPtrans), global1   ! sbox addr
   1813      1.1  christos 
   1814      1.1  christos 	sll	local4, 16, local1
   1815      1.1  christos 	xor	out5, local4, out5
   1816      1.1  christos 
   1817      1.1  christos 	srl	out5, 2, local4
   1818      1.1  christos 	xor	in5, local1, in5
   1819      1.1  christos 
   1820      1.1  christos 	sethi	%hi(16711680), local5
   1821      1.1  christos 	xor	local4, in5, local4
   1822      1.1  christos 
   1823      1.1  christos 	and	local4, local3, local4
   1824      1.1  christos 	or	local5, 255, local5
   1825      1.1  christos 
   1826      1.1  christos 	sll	local4, 2, local2
   1827      1.1  christos 	xor	in5, local4, in5
   1828      1.1  christos 
   1829      1.1  christos 	srl	in5, 8, local4
   1830      1.1  christos 	xor	out5, local2, out5
   1831      1.1  christos 
   1832      1.1  christos 	xor	local4, out5, local4
   1833      1.1  christos 	add	global1, 768, global4
   1834      1.1  christos 
   1835      1.1  christos 	and	local4, local5, local4
   1836      1.1  christos 	add	global1, 1024, global5
   1837      1.1  christos 
   1838      1.1  christos 	ld	[out2+272], local7
   1839      1.1  christos 	sll	local4, 8, local1
   1840      1.1  christos 	xor	out5, local4, out5
   1841      1.1  christos 
   1842      1.1  christos 	srl	out5, 1, local4
   1843      1.1  christos 	xor	in5, local1, in5
   1844      1.1  christos 
   1845      1.1  christos 	ld	[in4], out0                ! key 7531
   1846      1.1  christos 	xor	local4, in5, local4
   1847      1.1  christos 	add	global1, 256, global2
   1848      1.1  christos 
   1849      1.1  christos 	ld	[in4+4], out1              ! key 8642
   1850      1.1  christos 	and	local4, local7, local4
   1851      1.1  christos 	add	global1, 512, global3
   1852      1.1  christos 
   1853      1.1  christos 	sll	local4, 1, local1
   1854      1.1  christos 	xor	in5, local4, in5
   1855      1.1  christos 
   1856      1.1  christos 	sll	in5, 3, local3
   1857      1.1  christos 	xor	out5, local1, out5
   1858      1.1  christos 
   1859      1.1  christos 	sll	out5, 3, local2
   1860      1.1  christos 	add	global1, 1280, local6     ! address sbox 8
   1861      1.1  christos 
   1862      1.1  christos 	srl	in5, 29, local4
   1863      1.1  christos 	add	global1, 1792, out3       ! address sbox 8
   1864      1.1  christos 
   1865      1.1  christos 	srl	out5, 29, local1
   1866      1.1  christos 	or	local4, local3, in5
   1867      1.1  christos 
   1868      1.1  christos 	or	local2, local1, out5
   1869      1.1  christos 
   1870      1.1  christos 
   1871      1.1  christos 
   1872      1.1  christos 
   1873      1.1  christos 
   1874      1.1  christos 		ld	[out2+284], local5     ! 0x0000FC00 used in the rounds
   1875      1.1  christos 		or	local2, local1, out5
   1876      1.1  christos 		xor	in5, out0, local1
   1877      1.1  christos 
   1878      1.1  christos 		call .des_dec.1
   1879      1.1  christos 		and	local1, 252, local1
   1880      1.1  christos 
   1881      1.1  christos 
   1882      1.1  christos 
   1883      1.1  christos 
   1884      1.1  christos 	call	.des_enc
   1885      1.1  christos 	add	in1, 120, in4             ! preload ks1
   1886      1.1  christos 
   1887      1.1  christos 	call	.des_dec
   1888      1.1  christos 	nop
   1889      1.1  christos 
   1890      1.1  christos 
   1891      1.1  christos 
   1892      1.1  christos ! fp_macro
   1893      1.1  christos ! out5 in5 1
   1894      1.1  christos 
   1895      1.1  christos 	! initially undo the rotate 3 left done after initial permutation
   1896      1.1  christos 	! original left is received shifted 3 right and 29 left in local3/4
   1897      1.1  christos 
   1898      1.1  christos 	sll	in5, 29, local1
   1899      1.1  christos 	or	local3, local4, out5
   1900      1.1  christos 
   1901      1.1  christos 	srl	in5, 3, in5
   1902      1.1  christos 	sethi	%hi(0x55555555), local2
   1903      1.1  christos 
   1904      1.1  christos 	or	in5, local1, in5
   1905      1.1  christos 	or	local2, %lo(0x55555555), local2
   1906      1.1  christos 
   1907      1.1  christos 	srl	in5, 1, local3
   1908      1.1  christos 	sethi	%hi(0x00ff00ff), local1
   1909      1.1  christos 	xor	local3, out5, local3
   1910      1.1  christos 	or	local1, %lo(0x00ff00ff), local1
   1911      1.1  christos 	and	local3, local2, local3
   1912      1.1  christos 	sethi	%hi(0x33333333), local4
   1913      1.1  christos 	sll	local3, 1, local2
   1914      1.1  christos 
   1915      1.1  christos 	xor	out5, local3, out5
   1916      1.1  christos 
   1917      1.1  christos 	srl	out5, 8, local3
   1918      1.1  christos 	xor	in5, local2, in5
   1919      1.1  christos 	xor	local3, in5, local3
   1920      1.1  christos 	or	local4, %lo(0x33333333), local4
   1921      1.1  christos 	and	local3, local1, local3
   1922      1.1  christos 	sethi	%hi(0x0000ffff), local1
   1923      1.1  christos 	sll	local3, 8, local2
   1924      1.1  christos 
   1925      1.1  christos 	xor	in5, local3, in5
   1926      1.1  christos 
   1927      1.1  christos 	srl	in5, 2, local3
   1928      1.1  christos 	xor	out5, local2, out5
   1929      1.1  christos 	xor	local3, out5, local3
   1930      1.1  christos 	or	local1, %lo(0x0000ffff), local1
   1931      1.1  christos 	and	local3, local4, local3
   1932      1.1  christos 	sethi	%hi(0x0f0f0f0f), local4
   1933      1.1  christos 	sll	local3, 2, local2
   1934      1.1  christos 
   1935      1.1  christos 
   1936      1.1  christos 	xor	out5, local3, out5
   1937      1.1  christos 
   1938      1.1  christos 
   1939      1.1  christos 	srl	out5, 16, local3
   1940      1.1  christos 	xor	in5, local2, in5
   1941      1.1  christos 	xor	local3, in5, local3
   1942      1.1  christos 	or	local4, %lo(0x0f0f0f0f), local4
   1943      1.1  christos 	and	local3, local1, local3
   1944      1.1  christos 	sll	local3, 16, local2
   1945      1.1  christos 
   1946      1.1  christos 	xor	in5, local3, local1
   1947      1.1  christos 
   1948      1.1  christos 	srl	local1, 4, local3
   1949      1.1  christos 	xor	out5, local2, out5
   1950      1.1  christos 	xor	local3, out5, local3
   1951      1.1  christos 	and	local3, local4, local3
   1952      1.1  christos 	sll	local3, 4, local2
   1953      1.1  christos 
   1954      1.1  christos 	xor	out5, local3, out5
   1955      1.1  christos 
   1956      1.1  christos 	! optional store:
   1957      1.1  christos 
   1958      1.1  christos 	st out5, [in0]
   1959      1.1  christos 
   1960      1.1  christos 	xor	local1, local2, in5
   1961      1.1  christos 
   1962      1.1  christos 	st in5, [in0+4]
   1963      1.1  christos 
   1964      1.1  christos 
   1965      1.1  christos 
   1966      1.1  christos 	ret
   1967      1.1  christos 	restore
   1968      1.1  christos 
   1969      1.1  christos .DES_decrypt3.end:
   1970      1.1  christos 	.size	 DES_decrypt3,.DES_decrypt3.end-DES_decrypt3
   1971      1.1  christos 
   1972      1.1  christos ! void DES_ncbc_encrypt(input, output, length, schedule, ivec, enc)
   1973      1.1  christos ! *****************************************************************
   1974      1.1  christos 
   1975      1.1  christos 
   1976      1.1  christos 	.align 32
   1977      1.1  christos 	.global DES_ncbc_encrypt
   1978      1.1  christos 	.type	 DES_ncbc_encrypt,#function
   1979      1.1  christos 
   1980      1.1  christos DES_ncbc_encrypt:
   1981      1.1  christos 
   1982      1.1  christos 	save	%sp, FRAME, %sp
   1983      1.1  christos 
   1984      1.1  christos 
   1985      1.1  christos 
   1986      1.1  christos 
   1987      1.1  christos 
   1988      1.1  christos 	sethi	%hi(_PIC_DES_SPtrans-1f),global1
   1989      1.1  christos 	or	global1,%lo(_PIC_DES_SPtrans-1f),global1
   1990      1.1  christos 1:	call	.+8
   1991      1.1  christos 	add	%o7,global1,global1
   1992      1.1  christos 	sub	global1,_PIC_DES_SPtrans-.des_and,out2
   1993      1.1  christos 
   1994  1.1.1.2  christos 	cmp	in5, 0                    ! enc
   1995      1.1  christos 
   1996      1.1  christos 	be	.ncbc.dec
   1997      1.1  christos 	STPTR	in4,  [%sp+BIAS+ARG0+4*ARGSZ]
   1998      1.1  christos 
   1999      1.1  christos 	! addr  left  right  temp  label
   2000      1.1  christos 
   2001      1.1  christos 
   2002      1.1  christos ! load_little_endian
   2003      1.1  christos ! in4 in5 out5 local3 .LLE1
   2004      1.1  christos 
   2005      1.1  christos 	! first in memory to rightmost in register
   2006      1.1  christos 
   2007      1.1  christos .LLE1:
   2008      1.1  christos 	ldub	[in4+3], in5
   2009      1.1  christos 
   2010      1.1  christos 	ldub	[in4+2], local3
   2011      1.1  christos 	sll	in5, 8, in5
   2012      1.1  christos 	or	in5, local3, in5
   2013      1.1  christos 
   2014      1.1  christos 	ldub	[in4+1], local3
   2015      1.1  christos 	sll	in5, 8, in5
   2016      1.1  christos 	or	in5, local3, in5
   2017      1.1  christos 
   2018      1.1  christos 	ldub	[in4+0], local3
   2019      1.1  christos 	sll	in5, 8, in5
   2020      1.1  christos 	or	in5, local3, in5
   2021      1.1  christos 
   2022      1.1  christos 
   2023      1.1  christos 	ldub	[in4+3+4], out5
   2024      1.1  christos 
   2025      1.1  christos 	ldub	[in4+2+4], local3
   2026      1.1  christos 	sll	out5, 8, out5
   2027      1.1  christos 	or	out5, local3, out5
   2028      1.1  christos 
   2029      1.1  christos 	ldub	[in4+1+4], local3
   2030      1.1  christos 	sll	out5, 8, out5
   2031      1.1  christos 	or	out5, local3, out5
   2032      1.1  christos 
   2033      1.1  christos 	ldub	[in4+0+4], local3
   2034      1.1  christos 	sll	out5, 8, out5
   2035      1.1  christos 	or	out5, local3, out5
   2036      1.1  christos .LLE1a:
   2037      1.1  christos 
   2038      1.1  christos   ! iv
   2039      1.1  christos 
   2040      1.1  christos 	addcc	in2, -8, in2              ! bytes missing when first block done
   2041      1.1  christos 
   2042      1.1  christos 	bl	.ncbc.enc.seven.or.less
   2043      1.1  christos 	mov	in3, in4                  ! schedule
   2044      1.1  christos 
   2045      1.1  christos .ncbc.enc.next.block:
   2046      1.1  christos 
   2047      1.1  christos 
   2048      1.1  christos 
   2049      1.1  christos ! load_little_endian
   2050      1.1  christos ! in0 out4 global4 local3 .LLE2
   2051      1.1  christos 
   2052      1.1  christos 	! first in memory to rightmost in register
   2053      1.1  christos 
   2054      1.1  christos .LLE2:
   2055      1.1  christos 	ldub	[in0+3], out4
   2056      1.1  christos 
   2057      1.1  christos 	ldub	[in0+2], local3
   2058      1.1  christos 	sll	out4, 8, out4
   2059      1.1  christos 	or	out4, local3, out4
   2060      1.1  christos 
   2061      1.1  christos 	ldub	[in0+1], local3
   2062      1.1  christos 	sll	out4, 8, out4
   2063      1.1  christos 	or	out4, local3, out4
   2064      1.1  christos 
   2065      1.1  christos 	ldub	[in0+0], local3
   2066      1.1  christos 	sll	out4, 8, out4
   2067      1.1  christos 	or	out4, local3, out4
   2068      1.1  christos 
   2069      1.1  christos 
   2070      1.1  christos 	ldub	[in0+3+4], global4
   2071      1.1  christos 
   2072      1.1  christos 	ldub	[in0+2+4], local3
   2073      1.1  christos 	sll	global4, 8, global4
   2074      1.1  christos 	or	global4, local3, global4
   2075      1.1  christos 
   2076      1.1  christos 	ldub	[in0+1+4], local3
   2077      1.1  christos 	sll	global4, 8, global4
   2078      1.1  christos 	or	global4, local3, global4
   2079      1.1  christos 
   2080      1.1  christos 	ldub	[in0+0+4], local3
   2081      1.1  christos 	sll	global4, 8, global4
   2082      1.1  christos 	or	global4, local3, global4
   2083      1.1  christos .LLE2a:
   2084      1.1  christos 
   2085      1.1  christos   ! block
   2086      1.1  christos 
   2087      1.1  christos .ncbc.enc.next.block_1:
   2088      1.1  christos 
   2089      1.1  christos 	xor	in5, out4, in5            ! iv xor
   2090      1.1  christos 	xor	out5, global4, out5       ! iv xor
   2091      1.1  christos 
   2092      1.1  christos 	! parameter 8  1 for move in3 to in4, 2 for move in4 to in3
   2093      1.1  christos 
   2094      1.1  christos 
   2095      1.1  christos ! ip_macro
   2096      1.1  christos ! in5 out5 out5 in5 in3 0 0 2
   2097      1.1  christos 
   2098      1.1  christos 	ld	[out2+256], local1
   2099      1.1  christos 	srl	out5, 4, local4
   2100      1.1  christos 
   2101      1.1  christos 	xor	local4, in5, local4
   2102      1.1  christos 	nop
   2103      1.1  christos 
   2104      1.1  christos 	ld	[out2+260], local2
   2105      1.1  christos 	and	local4, local1, local4
   2106      1.1  christos 
   2107      1.1  christos 	mov in4, in3
   2108      1.1  christos 
   2109      1.1  christos 	ld	[out2+280], out4          ! loop counter
   2110      1.1  christos 	sll	local4, 4, local1
   2111      1.1  christos 	xor	in5, local4, in5
   2112      1.1  christos 
   2113      1.1  christos 	ld	[out2+264], local3
   2114      1.1  christos 	srl	in5, 16, local4
   2115      1.1  christos 	xor	out5, local1, out5
   2116      1.1  christos 
   2117      1.1  christos 
   2118      1.1  christos 	xor	local4, out5, local4
   2119      1.1  christos 	nop	!sethi	%hi(DES_SPtrans), global1 ! sbox addr
   2120      1.1  christos 
   2121      1.1  christos 
   2122      1.1  christos 	and	local4, local2, local4
   2123      1.1  christos 	nop	!or	global1, %lo(DES_SPtrans), global1   ! sbox addr
   2124      1.1  christos 
   2125      1.1  christos 	sll	local4, 16, local1
   2126      1.1  christos 	xor	out5, local4, out5
   2127      1.1  christos 
   2128      1.1  christos 	srl	out5, 2, local4
   2129      1.1  christos 	xor	in5, local1, in5
   2130      1.1  christos 
   2131      1.1  christos 	sethi	%hi(16711680), local5
   2132      1.1  christos 	xor	local4, in5, local4
   2133      1.1  christos 
   2134      1.1  christos 	and	local4, local3, local4
   2135      1.1  christos 	or	local5, 255, local5
   2136      1.1  christos 
   2137      1.1  christos 	sll	local4, 2, local2
   2138      1.1  christos 	xor	in5, local4, in5
   2139      1.1  christos 
   2140      1.1  christos 	srl	in5, 8, local4
   2141      1.1  christos 	xor	out5, local2, out5
   2142      1.1  christos 
   2143      1.1  christos 	xor	local4, out5, local4
   2144      1.1  christos 	add	global1, 768, global4
   2145      1.1  christos 
   2146      1.1  christos 	and	local4, local5, local4
   2147      1.1  christos 	add	global1, 1024, global5
   2148      1.1  christos 
   2149      1.1  christos 	ld	[out2+272], local7
   2150      1.1  christos 	sll	local4, 8, local1
   2151      1.1  christos 	xor	out5, local4, out5
   2152      1.1  christos 
   2153      1.1  christos 	srl	out5, 1, local4
   2154      1.1  christos 	xor	in5, local1, in5
   2155      1.1  christos 
   2156      1.1  christos 	ld	[in3], out0                ! key 7531
   2157      1.1  christos 	xor	local4, in5, local4
   2158      1.1  christos 	add	global1, 256, global2
   2159      1.1  christos 
   2160      1.1  christos 	ld	[in3+4], out1              ! key 8642
   2161      1.1  christos 	and	local4, local7, local4
   2162      1.1  christos 	add	global1, 512, global3
   2163      1.1  christos 
   2164      1.1  christos 	sll	local4, 1, local1
   2165      1.1  christos 	xor	in5, local4, in5
   2166      1.1  christos 
   2167      1.1  christos 	sll	in5, 3, local3
   2168      1.1  christos 	xor	out5, local1, out5
   2169      1.1  christos 
   2170      1.1  christos 	sll	out5, 3, local2
   2171      1.1  christos 	add	global1, 1280, local6     ! address sbox 8
   2172      1.1  christos 
   2173      1.1  christos 	srl	in5, 29, local4
   2174      1.1  christos 	add	global1, 1792, out3       ! address sbox 8
   2175      1.1  christos 
   2176      1.1  christos 	srl	out5, 29, local1
   2177      1.1  christos 	or	local4, local3, out5
   2178      1.1  christos 
   2179      1.1  christos 	or	local2, local1, in5
   2180      1.1  christos 
   2181      1.1  christos 
   2182      1.1  christos 
   2183      1.1  christos 
   2184      1.1  christos 
   2185      1.1  christos 
   2186      1.1  christos .ncbc.enc.next.block_2:
   2187      1.1  christos 
   2188      1.1  christos !//	call .des_enc                     ! compares in2 to 8
   2189      1.1  christos !	rounds inlined for alignment purposes
   2190      1.1  christos 
   2191      1.1  christos 	add	global1, 768, global4     ! address sbox 4 since register used below
   2192      1.1  christos 
   2193      1.1  christos 
   2194      1.1  christos 
   2195      1.1  christos ! rounds_macro
   2196      1.1  christos ! in5 out5 1 .ncbc.enc.1 in3 in4
   2197      1.1  christos 
   2198      1.1  christos 	xor	out5, out0, local1
   2199      1.1  christos 
   2200      1.1  christos 	ld	[out2+284], local5        ! 0x0000FC00
   2201      1.1  christos 	ba	.ncbc.enc.1
   2202      1.1  christos 	and	local1, 252, local1
   2203      1.1  christos 
   2204      1.1  christos 	.align 32
   2205      1.1  christos 
   2206      1.1  christos .ncbc.enc.1:
   2207      1.1  christos 	! local6 is address sbox 6
   2208      1.1  christos 	! out3   is address sbox 8
   2209      1.1  christos 	! out4   is loop counter
   2210      1.1  christos 
   2211      1.1  christos 	ld	[global1+local1], local1
   2212      1.1  christos 	xor	out5, out1, out1            ! 8642
   2213      1.1  christos 	xor	out5, out0, out0            ! 7531
   2214      1.1  christos 	! fmovs	%f0, %f0                  ! fxor used for alignment
   2215      1.1  christos 
   2216      1.1  christos 	srl	out1, 4, local0           ! rotate 4 right
   2217      1.1  christos 	and	out0, local5, local3      ! 3
   2218      1.1  christos 	! fmovs	%f0, %f0
   2219      1.1  christos 
   2220      1.1  christos 	ld	[in3+1*8], local7         ! key 7531 next round
   2221      1.1  christos 	srl	local3, 8, local3         ! 3
   2222      1.1  christos 	and	local0, 252, local2       ! 2
   2223      1.1  christos 	! fmovs	%f0, %f0
   2224      1.1  christos 
   2225      1.1  christos 	ld	[global3+local3],local3   ! 3
   2226      1.1  christos 	sll	out1, 28, out1            ! rotate
   2227      1.1  christos 	xor	in5, local1, in5            ! 1 finished, local1 now sbox 7
   2228      1.1  christos 
   2229  1.1.1.2  christos 	ld	[global2+local2], local2  ! 2
   2230      1.1  christos 	srl	out0, 24, local1          ! 7
   2231      1.1  christos 	or	out1, local0, out1        ! rotate
   2232      1.1  christos 
   2233      1.1  christos 	ldub	[out2+local1], local1     ! 7 (and 0xFC)
   2234      1.1  christos 	srl	out1, 24, local0          ! 8
   2235      1.1  christos 	and	out1, local5, local4      ! 4
   2236      1.1  christos 
   2237      1.1  christos 	ldub	[out2+local0], local0     ! 8 (and 0xFC)
   2238      1.1  christos 	srl	local4, 8, local4         ! 4
   2239      1.1  christos 	xor	in5, local2, in5            ! 2 finished local2 now sbox 6
   2240      1.1  christos 
   2241      1.1  christos 	ld	[global4+local4],local4   ! 4
   2242      1.1  christos 	srl	out1, 16, local2          ! 6
   2243      1.1  christos 	xor	in5, local3, in5            ! 3 finished local3 now sbox 5
   2244      1.1  christos 
   2245      1.1  christos 	ld	[out3+local0],local0      ! 8
   2246      1.1  christos 	and	local2, 252, local2       ! 6
   2247      1.1  christos 	add	global1, 1536, local5     ! address sbox 7
   2248      1.1  christos 
   2249      1.1  christos 	ld	[local6+local2], local2   ! 6
   2250      1.1  christos 	srl	out0, 16, local3          ! 5
   2251      1.1  christos 	xor	in5, local4, in5            ! 4 finished
   2252      1.1  christos 
   2253      1.1  christos 	ld	[local5+local1],local1    ! 7
   2254      1.1  christos 	and	local3, 252, local3       ! 5
   2255      1.1  christos 	xor	in5, local0, in5            ! 8 finished
   2256      1.1  christos 
   2257      1.1  christos 	ld	[global5+local3],local3   ! 5
   2258      1.1  christos 	xor	in5, local2, in5            ! 6 finished
   2259      1.1  christos 	subcc	out4, 1, out4
   2260      1.1  christos 
   2261      1.1  christos 	ld	[in3+1*8+4], out0         ! key 8642 next round
   2262      1.1  christos 	xor	in5, local7, local2        ! sbox 5 next round
   2263      1.1  christos 	xor	in5, local1, in5            ! 7 finished
   2264      1.1  christos 
   2265      1.1  christos 	srl	local2, 16, local2        ! sbox 5 next round
   2266      1.1  christos 	xor	in5, local3, in5            ! 5 finished
   2267      1.1  christos 
   2268      1.1  christos 	ld	[in3+1*16+4], out1        ! key 8642 next round again
   2269      1.1  christos 	and	local2, 252, local2       ! sbox5 next round
   2270      1.1  christos ! next round
   2271      1.1  christos 	xor	in5, local7, local7        ! 7531
   2272      1.1  christos 
   2273      1.1  christos 	ld	[global5+local2], local2  ! 5
   2274      1.1  christos 	srl	local7, 24, local3        ! 7
   2275      1.1  christos 	xor	in5, out0, out0            ! 8642
   2276      1.1  christos 
   2277      1.1  christos 	ldub	[out2+local3], local3     ! 7 (and 0xFC)
   2278      1.1  christos 	srl	out0, 4, local0           ! rotate 4 right
   2279      1.1  christos 	and	local7, 252, local1       ! 1
   2280      1.1  christos 
   2281      1.1  christos 	sll	out0, 28, out0            ! rotate
   2282      1.1  christos 	xor	out5, local2, out5            ! 5 finished local2 used
   2283      1.1  christos 
   2284      1.1  christos 	srl	local0, 8, local4         ! 4
   2285      1.1  christos 	and	local0, 252, local2       ! 2
   2286      1.1  christos 	ld	[local5+local3], local3   ! 7
   2287      1.1  christos 
   2288      1.1  christos 	srl	local0, 16, local5        ! 6
   2289      1.1  christos 	or	out0, local0, out0        ! rotate
   2290      1.1  christos 	ld	[global2+local2], local2  ! 2
   2291      1.1  christos 
   2292      1.1  christos 	srl	out0, 24, local0
   2293      1.1  christos 	ld	[in3+1*16], out0          ! key 7531 next round
   2294      1.1  christos 	and	local4, 252, local4	  ! 4
   2295      1.1  christos 
   2296      1.1  christos 	and	local5, 252, local5       ! 6
   2297      1.1  christos 	ld	[global4+local4], local4  ! 4
   2298      1.1  christos 	xor	out5, local3, out5            ! 7 finished local3 used
   2299      1.1  christos 
   2300      1.1  christos 	and	local0, 252, local0       ! 8
   2301      1.1  christos 	ld	[local6+local5], local5   ! 6
   2302      1.1  christos 	xor	out5, local2, out5            ! 2 finished local2 now sbox 3
   2303      1.1  christos 
   2304      1.1  christos 	srl	local7, 8, local2         ! 3 start
   2305      1.1  christos 	ld	[out3+local0], local0     ! 8
   2306      1.1  christos 	xor	out5, local4, out5            ! 4 finished
   2307      1.1  christos 
   2308      1.1  christos 	and	local2, 252, local2       ! 3
   2309      1.1  christos 	ld	[global1+local1], local1  ! 1
   2310      1.1  christos 	xor	out5, local5, out5            ! 6 finished local5 used
   2311      1.1  christos 
   2312      1.1  christos 	ld	[global3+local2], local2  ! 3
   2313      1.1  christos 	xor	out5, local0, out5            ! 8 finished
   2314      1.1  christos 	add	in3, 1*16, in3             ! enc add 8, dec add -8 to key pointer
   2315      1.1  christos 
   2316      1.1  christos 	ld	[out2+284], local5        ! 0x0000FC00
   2317      1.1  christos 	xor	out5, out0, local4          ! sbox 1 next round
   2318      1.1  christos 	xor	out5, local1, out5            ! 1 finished
   2319      1.1  christos 
   2320      1.1  christos 	xor	out5, local2, out5            ! 3 finished
   2321      1.1  christos 	bne	.ncbc.enc.1
   2322      1.1  christos 	and	local4, 252, local1       ! sbox 1 next round
   2323      1.1  christos 
   2324      1.1  christos ! two rounds more:
   2325      1.1  christos 
   2326      1.1  christos 	ld	[global1+local1], local1
   2327      1.1  christos 	xor	out5, out1, out1
   2328      1.1  christos 	xor	out5, out0, out0
   2329      1.1  christos 
   2330      1.1  christos 	srl	out1, 4, local0           ! rotate
   2331      1.1  christos 	and	out0, local5, local3
   2332      1.1  christos 
   2333      1.1  christos 	ld	[in3+1*8], local7         ! key 7531
   2334      1.1  christos 	srl	local3, 8, local3
   2335      1.1  christos 	and	local0, 252, local2
   2336      1.1  christos 
   2337      1.1  christos 	ld	[global3+local3],local3
   2338      1.1  christos 	sll	out1, 28, out1            ! rotate
   2339      1.1  christos 	xor	in5, local1, in5            ! 1 finished, local1 now sbox 7
   2340      1.1  christos 
   2341      1.1  christos 	ld	[global2+local2], local2
   2342      1.1  christos 	srl	out0, 24, local1
   2343      1.1  christos 	or	out1, local0, out1        ! rotate
   2344      1.1  christos 
   2345      1.1  christos 	ldub	[out2+local1], local1
   2346      1.1  christos 	srl	out1, 24, local0
   2347      1.1  christos 	and	out1, local5, local4
   2348      1.1  christos 
   2349      1.1  christos 	ldub	[out2+local0], local0
   2350      1.1  christos 	srl	local4, 8, local4
   2351      1.1  christos 	xor	in5, local2, in5            ! 2 finished local2 now sbox 6
   2352      1.1  christos 
   2353      1.1  christos 	ld	[global4+local4],local4
   2354      1.1  christos 	srl	out1, 16, local2
   2355      1.1  christos 	xor	in5, local3, in5            ! 3 finished local3 now sbox 5
   2356      1.1  christos 
   2357      1.1  christos 	ld	[out3+local0],local0
   2358      1.1  christos 	and	local2, 252, local2
   2359      1.1  christos 	add	global1, 1536, local5     ! address sbox 7
   2360      1.1  christos 
   2361      1.1  christos 	ld	[local6+local2], local2
   2362      1.1  christos 	srl	out0, 16, local3
   2363      1.1  christos 	xor	in5, local4, in5            ! 4 finished
   2364      1.1  christos 
   2365      1.1  christos 	ld	[local5+local1],local1
   2366      1.1  christos 	and	local3, 252, local3
   2367      1.1  christos 	xor	in5, local0, in5
   2368      1.1  christos 
   2369      1.1  christos 	ld	[global5+local3],local3
   2370      1.1  christos 	xor	in5, local2, in5            ! 6 finished
   2371      1.1  christos 	cmp	in2, 8
   2372      1.1  christos 
   2373      1.1  christos 	ld	[out2+280], out4  ! loop counter
   2374      1.1  christos 	xor	in5, local7, local2        ! sbox 5 next round
   2375      1.1  christos 	xor	in5, local1, in5            ! 7 finished
   2376      1.1  christos 
   2377      1.1  christos 	ld	[in3+1*8+4], out0
   2378      1.1  christos 	srl	local2, 16, local2        ! sbox 5 next round
   2379      1.1  christos 	xor	in5, local3, in5            ! 5 finished
   2380      1.1  christos 
   2381      1.1  christos 	and	local2, 252, local2
   2382      1.1  christos ! next round (two rounds more)
   2383      1.1  christos 	xor	in5, local7, local7        ! 7531
   2384      1.1  christos 
   2385      1.1  christos 	ld	[global5+local2], local2
   2386      1.1  christos 	srl	local7, 24, local3
   2387      1.1  christos 	xor	in5, out0, out0            ! 8642
   2388      1.1  christos 
   2389      1.1  christos 	ldub	[out2+local3], local3
   2390      1.1  christos 	srl	out0, 4, local0           ! rotate
   2391      1.1  christos 	and	local7, 252, local1
   2392      1.1  christos 
   2393      1.1  christos 	sll	out0, 28, out0            ! rotate
   2394      1.1  christos 	xor	out5, local2, out5            ! 5 finished local2 used
   2395      1.1  christos 
   2396      1.1  christos 	srl	local0, 8, local4
   2397      1.1  christos 	and	local0, 252, local2
   2398      1.1  christos 	ld	[local5+local3], local3
   2399      1.1  christos 
   2400      1.1  christos 	srl	local0, 16, local5
   2401      1.1  christos 	or	out0, local0, out0        ! rotate
   2402      1.1  christos 	ld	[global2+local2], local2
   2403      1.1  christos 
   2404      1.1  christos 	srl	out0, 24, local0
   2405      1.1  christos 	ld	[in4], out0   ! key next encryption/decryption
   2406      1.1  christos 	and	local4, 252, local4
   2407      1.1  christos 
   2408      1.1  christos 	and	local5, 252, local5
   2409      1.1  christos 	ld	[global4+local4], local4
   2410      1.1  christos 	xor	out5, local3, out5            ! 7 finished local3 used
   2411      1.1  christos 
   2412      1.1  christos 	and	local0, 252, local0
   2413      1.1  christos 	ld	[local6+local5], local5
   2414      1.1  christos 	xor	out5, local2, out5            ! 2 finished local2 now sbox 3
   2415      1.1  christos 
   2416      1.1  christos 	srl	local7, 8, local2         ! 3 start
   2417      1.1  christos 	ld	[out3+local0], local0
   2418      1.1  christos 	xor	out5, local4, out5
   2419      1.1  christos 
   2420      1.1  christos 	and	local2, 252, local2
   2421      1.1  christos 	ld	[global1+local1], local1
   2422      1.1  christos 	xor	out5, local5, out5            ! 6 finished local5 used
   2423      1.1  christos 
   2424      1.1  christos 	ld	[global3+local2], local2
   2425      1.1  christos 	srl	in5, 3, local3
   2426      1.1  christos 	xor	out5, local0, out5
   2427      1.1  christos 
   2428      1.1  christos 	ld	[in4+4], out1 ! key next encryption/decryption
   2429      1.1  christos 	sll	in5, 29, local4
   2430      1.1  christos 	xor	out5, local1, out5
   2431      1.1  christos 
   2432      1.1  christos 
   2433      1.1  christos 	xor	out5, local2, out5
   2434      1.1  christos  ! include encryption  ks in3
   2435      1.1  christos 
   2436      1.1  christos 	bl	.ncbc.enc.next.block_fp
   2437      1.1  christos 	add	in0, 8, in0               ! input address
   2438      1.1  christos 
   2439      1.1  christos 	! If 8 or more bytes are to be encrypted after this block,
   2440      1.1  christos 	! we combine final permutation for this block with initial
   2441      1.1  christos 	! permutation for next block. Load next block:
   2442      1.1  christos 
   2443      1.1  christos 
   2444      1.1  christos 
   2445      1.1  christos ! load_little_endian
   2446      1.1  christos ! in0 global3 global4 local5 .LLE12
   2447      1.1  christos 
   2448      1.1  christos 	! first in memory to rightmost in register
   2449      1.1  christos 
   2450      1.1  christos .LLE12:
   2451      1.1  christos 	ldub	[in0+3], global3
   2452      1.1  christos 
   2453      1.1  christos 	ldub	[in0+2], local5
   2454      1.1  christos 	sll	global3, 8, global3
   2455      1.1  christos 	or	global3, local5, global3
   2456      1.1  christos 
   2457      1.1  christos 	ldub	[in0+1], local5
   2458      1.1  christos 	sll	global3, 8, global3
   2459      1.1  christos 	or	global3, local5, global3
   2460      1.1  christos 
   2461      1.1  christos 	ldub	[in0+0], local5
   2462      1.1  christos 	sll	global3, 8, global3
   2463      1.1  christos 	or	global3, local5, global3
   2464      1.1  christos 
   2465      1.1  christos 
   2466      1.1  christos 	ldub	[in0+3+4], global4
   2467      1.1  christos 
   2468      1.1  christos 	ldub	[in0+2+4], local5
   2469      1.1  christos 	sll	global4, 8, global4
   2470      1.1  christos 	or	global4, local5, global4
   2471      1.1  christos 
   2472      1.1  christos 	ldub	[in0+1+4], local5
   2473      1.1  christos 	sll	global4, 8, global4
   2474      1.1  christos 	or	global4, local5, global4
   2475      1.1  christos 
   2476      1.1  christos 	ldub	[in0+0+4], local5
   2477      1.1  christos 	sll	global4, 8, global4
   2478      1.1  christos 	or	global4, local5, global4
   2479      1.1  christos .LLE12a:
   2480      1.1  christos 
   2481      1.1  christos 
   2482      1.1  christos 
   2483      1.1  christos 	!  parameter 1   original left
   2484      1.1  christos 	!  parameter 2   original right
   2485      1.1  christos 	!  parameter 3   left ip
   2486      1.1  christos 	!  parameter 4   right ip
   2487      1.1  christos 	!  parameter 5   1: load ks1/ks2 to in3/in4, add 120 to in4
   2488      1.1  christos 	!                2: mov in4 to in3
   2489      1.1  christos 	!
   2490      1.1  christos 	! also adds -8 to length in2 and loads loop counter to out4
   2491      1.1  christos 
   2492      1.1  christos 
   2493      1.1  christos 
   2494      1.1  christos ! fp_ip_macro
   2495      1.1  christos ! out0 out1 global3 global4 2
   2496      1.1  christos 
   2497      1.1  christos 
   2498      1.1  christos 
   2499      1.1  christos 
   2500      1.1  christos 
   2501      1.1  christos 
   2502      1.1  christos 
   2503      1.1  christos 
   2504      1.1  christos 
   2505      1.1  christos 	! out0 in local3, local4
   2506      1.1  christos 
   2507      1.1  christos 	ld	[out2+256], local1
   2508      1.1  christos 	sll	out5, 29, out4
   2509      1.1  christos 	or	local3, local4, out0
   2510      1.1  christos 
   2511      1.1  christos 	srl	out5, 3, out1
   2512      1.1  christos 	mov in4, in3
   2513      1.1  christos 
   2514      1.1  christos 	ld	[out2+272], local5
   2515      1.1  christos 	srl	global4, 4, local0
   2516      1.1  christos 	or	out1, out4, out1
   2517      1.1  christos 
   2518      1.1  christos 	srl	out1, 1, out4
   2519      1.1  christos 	xor	out4, out0, out4
   2520      1.1  christos 
   2521      1.1  christos 	and	out4, local5, out4
   2522      1.1  christos 	xor	local0, global3, local0
   2523      1.1  christos 
   2524      1.1  christos 	sll	out4, 1, local3
   2525      1.1  christos 	xor	out0, out4, out0
   2526      1.1  christos 
   2527      1.1  christos 	and	local0, local1, local0
   2528      1.1  christos 	add	in2, -8, in2
   2529      1.1  christos 
   2530      1.1  christos 	sll	local0, 4, local7
   2531      1.1  christos 	xor	global3, local0, global3
   2532      1.1  christos 
   2533      1.1  christos 	ld	[out2+268], local4
   2534      1.1  christos 	srl	out0, 8, out4
   2535      1.1  christos 	xor	out1, local3, out1
   2536      1.1  christos 	ld	[out2+260], local2
   2537      1.1  christos 	srl	global3, 16, local0
   2538      1.1  christos 	xor	global4, local7, global4
   2539      1.1  christos 	xor	out4, out1, out4
   2540      1.1  christos 	xor	local0, global4, local0
   2541      1.1  christos 	and	out4, local4, out4
   2542      1.1  christos 	and	local0, local2, local0
   2543      1.1  christos 	sll	out4, 8, local3
   2544      1.1  christos 	xor	out1, out4, out1
   2545      1.1  christos 	sll	local0, 16, local7
   2546      1.1  christos 	xor	global4, local0, global4
   2547      1.1  christos 
   2548      1.1  christos 	srl	out1, 2, out4
   2549      1.1  christos 	xor	out0, local3, out0
   2550      1.1  christos 
   2551      1.1  christos 	ld	[out2+264], local3         ! ip3
   2552      1.1  christos 	srl	global4, 2, local0
   2553      1.1  christos 	xor	global3, local7, global3
   2554      1.1  christos 	xor	out4, out0, out4
   2555      1.1  christos 	xor	local0, global3, local0
   2556      1.1  christos 	and	out4, local3, out4
   2557      1.1  christos 	and	local0, local3, local0
   2558      1.1  christos 	sll	out4, 2, local3
   2559      1.1  christos 	xor	out0, out4, out0
   2560      1.1  christos 	sll	local0, 2, local7
   2561      1.1  christos 	xor	global3, local0, global3
   2562      1.1  christos 
   2563      1.1  christos 	srl	out0, 16, out4
   2564      1.1  christos 	xor	out1, local3, out1
   2565      1.1  christos 	srl	global3, 8, local0
   2566      1.1  christos 	xor	global4, local7, global4
   2567      1.1  christos 	xor	out4, out1, out4
   2568      1.1  christos 	xor	local0, global4, local0
   2569      1.1  christos 	and	out4, local2, out4
   2570      1.1  christos 	and	local0, local4, local0
   2571      1.1  christos 	sll	out4, 16, local3
   2572      1.1  christos 	xor	out1, out4, local4
   2573      1.1  christos 	sll	local0, 8, local7
   2574      1.1  christos 	xor	global4, local0, global4
   2575      1.1  christos 
   2576      1.1  christos 	srl	global4, 1, local0
   2577      1.1  christos 	xor	global3, local7, global3
   2578      1.1  christos 
   2579      1.1  christos 	srl	local4, 4, out4
   2580      1.1  christos 	xor	local0, global3, local0
   2581      1.1  christos 
   2582      1.1  christos 	xor	out0, local3, out0
   2583      1.1  christos 	and	local0, local5, local0
   2584      1.1  christos 
   2585      1.1  christos 	sll	local0, 1, local7
   2586      1.1  christos 	xor	out4, out0, out4
   2587      1.1  christos 
   2588      1.1  christos 	xor	global3, local0, global3
   2589      1.1  christos 	xor	global4, local7, global4
   2590      1.1  christos 
   2591      1.1  christos 	sll	global3, 3, local5
   2592      1.1  christos 	and	out4, local1, out4
   2593      1.1  christos 
   2594      1.1  christos 	sll	out4, 4, local3
   2595      1.1  christos 	xor	out0, out4, out0
   2596      1.1  christos 
   2597      1.1  christos 
   2598      1.1  christos 	sll	global4, 3, local2
   2599      1.1  christos 	xor	local4, local3, out1
   2600      1.1  christos 
   2601  1.1.1.2  christos 	! reload since used as temporary:
   2602      1.1  christos 
   2603      1.1  christos 	ld	[out2+280], out4          ! loop counter
   2604      1.1  christos 
   2605      1.1  christos 	srl	global3, 29, local0
   2606      1.1  christos 
   2607      1.1  christos 
   2608      1.1  christos 
   2609      1.1  christos 	srl	global4, 29, local7
   2610      1.1  christos 
   2611      1.1  christos 	or	local0, local5, global4
   2612      1.1  christos 	or	local2, local7, global3
   2613      1.1  christos 
   2614      1.1  christos 
   2615      1.1  christos 
   2616      1.1  christos 
   2617      1.1  christos 
   2618      1.1  christos ! store_little_endian
   2619      1.1  christos ! in1 out0 out1 local3 .SLE10
   2620      1.1  christos 
   2621      1.1  christos 	! rightmost in register to first in memory
   2622      1.1  christos 
   2623      1.1  christos .SLE10:
   2624      1.1  christos 	and	out0, 255, local3
   2625      1.1  christos 	stub	local3, [in1+0]
   2626      1.1  christos 
   2627      1.1  christos 	srl	out0, 8, local3
   2628      1.1  christos 	and	local3, 255, local3
   2629      1.1  christos 	stub	local3, [in1+1]
   2630      1.1  christos 
   2631      1.1  christos 	srl	out0, 16, local3
   2632      1.1  christos 	and	local3, 255, local3
   2633      1.1  christos 	stub	local3, [in1+2]
   2634      1.1  christos 
   2635      1.1  christos 	srl	out0, 24, local3
   2636      1.1  christos 	stub	local3, [in1+3]
   2637      1.1  christos 
   2638      1.1  christos 
   2639      1.1  christos 	and	out1, 255, local3
   2640      1.1  christos 	stub	local3, [in1+0+4]
   2641      1.1  christos 
   2642      1.1  christos 	srl	out1, 8, local3
   2643      1.1  christos 	and	local3, 255, local3
   2644      1.1  christos 	stub	local3, [in1+1+4]
   2645      1.1  christos 
   2646      1.1  christos 	srl	out1, 16, local3
   2647      1.1  christos 	and	local3, 255, local3
   2648      1.1  christos 	stub	local3, [in1+2+4]
   2649      1.1  christos 
   2650      1.1  christos 	srl	out1, 24, local3
   2651      1.1  christos 	stub	local3, [in1+3+4]
   2652      1.1  christos 
   2653      1.1  christos .SLE10a:
   2654      1.1  christos 
   2655      1.1  christos   ! block
   2656      1.1  christos 
   2657      1.1  christos 	ld	[in3], out0               ! key 7531 first round next block
   2658      1.1  christos 	mov 	in5, local1
   2659      1.1  christos 	xor	global3, out5, in5        ! iv xor next block
   2660      1.1  christos 
   2661      1.1  christos 	ld	[in3+4], out1             ! key 8642
   2662      1.1  christos 	add	global1, 512, global3     ! address sbox 3 since register used
   2663      1.1  christos 	xor	global4, local1, out5     ! iv xor next block
   2664      1.1  christos 
   2665      1.1  christos 	ba	.ncbc.enc.next.block_2
   2666  1.1.1.2  christos 	add	in1, 8, in1               ! output address
   2667      1.1  christos 
   2668      1.1  christos .ncbc.enc.next.block_fp:
   2669      1.1  christos 
   2670      1.1  christos 
   2671      1.1  christos 
   2672      1.1  christos ! fp_macro
   2673      1.1  christos ! in5 out5
   2674      1.1  christos 
   2675      1.1  christos 	! initially undo the rotate 3 left done after initial permutation
   2676      1.1  christos 	! original left is received shifted 3 right and 29 left in local3/4
   2677      1.1  christos 
   2678      1.1  christos 	sll	out5, 29, local1
   2679      1.1  christos 	or	local3, local4, in5
   2680      1.1  christos 
   2681      1.1  christos 	srl	out5, 3, out5
   2682      1.1  christos 	sethi	%hi(0x55555555), local2
   2683      1.1  christos 
   2684      1.1  christos 	or	out5, local1, out5
   2685      1.1  christos 	or	local2, %lo(0x55555555), local2
   2686      1.1  christos 
   2687      1.1  christos 	srl	out5, 1, local3
   2688      1.1  christos 	sethi	%hi(0x00ff00ff), local1
   2689      1.1  christos 	xor	local3, in5, local3
   2690      1.1  christos 	or	local1, %lo(0x00ff00ff), local1
   2691      1.1  christos 	and	local3, local2, local3
   2692      1.1  christos 	sethi	%hi(0x33333333), local4
   2693      1.1  christos 	sll	local3, 1, local2
   2694      1.1  christos 
   2695      1.1  christos 	xor	in5, local3, in5
   2696      1.1  christos 
   2697      1.1  christos 	srl	in5, 8, local3
   2698      1.1  christos 	xor	out5, local2, out5
   2699      1.1  christos 	xor	local3, out5, local3
   2700      1.1  christos 	or	local4, %lo(0x33333333), local4
   2701      1.1  christos 	and	local3, local1, local3
   2702      1.1  christos 	sethi	%hi(0x0000ffff), local1
   2703      1.1  christos 	sll	local3, 8, local2
   2704      1.1  christos 
   2705      1.1  christos 	xor	out5, local3, out5
   2706      1.1  christos 
   2707      1.1  christos 	srl	out5, 2, local3
   2708      1.1  christos 	xor	in5, local2, in5
   2709      1.1  christos 	xor	local3, in5, local3
   2710      1.1  christos 	or	local1, %lo(0x0000ffff), local1
   2711      1.1  christos 	and	local3, local4, local3
   2712      1.1  christos 	sethi	%hi(0x0f0f0f0f), local4
   2713      1.1  christos 	sll	local3, 2, local2
   2714      1.1  christos 
   2715      1.1  christos 
   2716      1.1  christos 	xor	in5, local3, in5
   2717      1.1  christos 
   2718      1.1  christos 
   2719      1.1  christos 	srl	in5, 16, local3
   2720      1.1  christos 	xor	out5, local2, out5
   2721      1.1  christos 	xor	local3, out5, local3
   2722      1.1  christos 	or	local4, %lo(0x0f0f0f0f), local4
   2723      1.1  christos 	and	local3, local1, local3
   2724      1.1  christos 	sll	local3, 16, local2
   2725      1.1  christos 
   2726      1.1  christos 	xor	out5, local3, local1
   2727      1.1  christos 
   2728      1.1  christos 	srl	local1, 4, local3
   2729      1.1  christos 	xor	in5, local2, in5
   2730      1.1  christos 	xor	local3, in5, local3
   2731      1.1  christos 	and	local3, local4, local3
   2732      1.1  christos 	sll	local3, 4, local2
   2733      1.1  christos 
   2734      1.1  christos 	xor	in5, local3, in5
   2735      1.1  christos 
   2736      1.1  christos 	! optional store:
   2737      1.1  christos 
   2738      1.1  christos 
   2739      1.1  christos 
   2740      1.1  christos 	xor	local1, local2, out5
   2741      1.1  christos 
   2742      1.1  christos 
   2743      1.1  christos 
   2744      1.1  christos 
   2745      1.1  christos 
   2746      1.1  christos 
   2747      1.1  christos 
   2748      1.1  christos ! store_little_endian
   2749      1.1  christos ! in1 in5 out5 local3 .SLE1
   2750      1.1  christos 
   2751      1.1  christos 	! rightmost in register to first in memory
   2752      1.1  christos 
   2753      1.1  christos .SLE1:
   2754      1.1  christos 	and	in5, 255, local3
   2755      1.1  christos 	stub	local3, [in1+0]
   2756      1.1  christos 
   2757      1.1  christos 	srl	in5, 8, local3
   2758      1.1  christos 	and	local3, 255, local3
   2759      1.1  christos 	stub	local3, [in1+1]
   2760      1.1  christos 
   2761      1.1  christos 	srl	in5, 16, local3
   2762      1.1  christos 	and	local3, 255, local3
   2763      1.1  christos 	stub	local3, [in1+2]
   2764      1.1  christos 
   2765      1.1  christos 	srl	in5, 24, local3
   2766      1.1  christos 	stub	local3, [in1+3]
   2767      1.1  christos 
   2768      1.1  christos 
   2769      1.1  christos 	and	out5, 255, local3
   2770      1.1  christos 	stub	local3, [in1+0+4]
   2771      1.1  christos 
   2772      1.1  christos 	srl	out5, 8, local3
   2773      1.1  christos 	and	local3, 255, local3
   2774      1.1  christos 	stub	local3, [in1+1+4]
   2775      1.1  christos 
   2776      1.1  christos 	srl	out5, 16, local3
   2777      1.1  christos 	and	local3, 255, local3
   2778      1.1  christos 	stub	local3, [in1+2+4]
   2779      1.1  christos 
   2780      1.1  christos 	srl	out5, 24, local3
   2781      1.1  christos 	stub	local3, [in1+3+4]
   2782      1.1  christos 
   2783      1.1  christos .SLE1a:
   2784      1.1  christos 
   2785      1.1  christos   ! block
   2786      1.1  christos 
   2787      1.1  christos 	addcc   in2, -8, in2              ! bytes missing when next block done
   2788      1.1  christos 
   2789      1.1  christos 	bpos	.ncbc.enc.next.block
   2790      1.1  christos 	add	in1, 8, in1
   2791      1.1  christos 
   2792      1.1  christos .ncbc.enc.seven.or.less:
   2793      1.1  christos 
   2794      1.1  christos 	cmp	in2, -8
   2795      1.1  christos 
   2796      1.1  christos 	ble	.ncbc.enc.finish
   2797      1.1  christos 	nop
   2798      1.1  christos 
   2799      1.1  christos 	add	in2, 8, local1            ! bytes to load
   2800      1.1  christos 
   2801      1.1  christos 	! addr, length, dest left, dest right, temp, local3, label, ret label
   2802      1.1  christos 
   2803      1.1  christos 
   2804      1.1  christos ! load_n_bytes
   2805      1.1  christos ! in0 local1 local2 local3 .LNB1 .ncbc.enc.next.block_1 .LNB1 .ncbc.enc.next.block_1
   2806      1.1  christos 
   2807      1.1  christos .LNB1.0:	call	.+8
   2808      1.1  christos 	sll	local1, 2, local3
   2809      1.1  christos 
   2810      1.1  christos 	add	%o7,.LNB1.jmp.table-.LNB1.0,local2
   2811      1.1  christos 
   2812      1.1  christos 	add	local2, local3, local2
   2813      1.1  christos 	mov	0, out4
   2814      1.1  christos 
   2815      1.1  christos 	ld	[local2], local2
   2816      1.1  christos 
   2817      1.1  christos 	jmp	%o7+local2
   2818      1.1  christos 	mov	0, global4
   2819      1.1  christos 
   2820      1.1  christos .LNB1.7:
   2821      1.1  christos 	ldub	[in0+6], local2
   2822      1.1  christos 	sll	local2, 16, local2
   2823      1.1  christos 	or	global4, local2, global4
   2824      1.1  christos .LNB1.6:
   2825      1.1  christos 	ldub	[in0+5], local2
   2826      1.1  christos 	sll	local2, 8, local2
   2827      1.1  christos 	or	global4, local2, global4
   2828      1.1  christos .LNB1.5:
   2829      1.1  christos 	ldub	[in0+4], local2
   2830      1.1  christos 	or	global4, local2, global4
   2831      1.1  christos .LNB1.4:
   2832      1.1  christos 	ldub	[in0+3], local2
   2833      1.1  christos 	sll	local2, 24, local2
   2834      1.1  christos 	or	out4, local2, out4
   2835      1.1  christos .LNB1.3:
   2836      1.1  christos 	ldub	[in0+2], local2
   2837      1.1  christos 	sll	local2, 16, local2
   2838      1.1  christos 	or	out4, local2, out4
   2839      1.1  christos .LNB1.2:
   2840      1.1  christos 	ldub	[in0+1], local2
   2841      1.1  christos 	sll	local2, 8, local2
   2842      1.1  christos 	or	out4, local2, out4
   2843      1.1  christos .LNB1.1:
   2844      1.1  christos 	ldub	[in0+0], local2
   2845      1.1  christos 	ba	.ncbc.enc.next.block_1
   2846      1.1  christos 	or	out4, local2, out4
   2847      1.1  christos 
   2848      1.1  christos 	.align 4
   2849      1.1  christos 
   2850      1.1  christos .LNB1.jmp.table:
   2851      1.1  christos 	.word	0
   2852      1.1  christos 	.word	.LNB1.1-.LNB1.0
   2853      1.1  christos 	.word	.LNB1.2-.LNB1.0
   2854      1.1  christos 	.word	.LNB1.3-.LNB1.0
   2855      1.1  christos 	.word	.LNB1.4-.LNB1.0
   2856      1.1  christos 	.word	.LNB1.5-.LNB1.0
   2857      1.1  christos 	.word	.LNB1.6-.LNB1.0
   2858      1.1  christos 	.word	.LNB1.7-.LNB1.0
   2859      1.1  christos 
   2860      1.1  christos 
   2861      1.1  christos 	! Loads 1 to 7 bytes little endian to global4, out4
   2862      1.1  christos 
   2863      1.1  christos 
   2864      1.1  christos .ncbc.enc.finish:
   2865      1.1  christos 
   2866      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+4*ARGSZ] , local4
   2867      1.1  christos 
   2868      1.1  christos 
   2869      1.1  christos ! store_little_endian
   2870      1.1  christos ! local4 in5 out5 local5 .SLE2
   2871      1.1  christos 
   2872      1.1  christos 	! rightmost in register to first in memory
   2873      1.1  christos 
   2874      1.1  christos .SLE2:
   2875      1.1  christos 	and	in5, 255, local5
   2876      1.1  christos 	stub	local5, [local4+0]
   2877      1.1  christos 
   2878      1.1  christos 	srl	in5, 8, local5
   2879      1.1  christos 	and	local5, 255, local5
   2880      1.1  christos 	stub	local5, [local4+1]
   2881      1.1  christos 
   2882      1.1  christos 	srl	in5, 16, local5
   2883      1.1  christos 	and	local5, 255, local5
   2884      1.1  christos 	stub	local5, [local4+2]
   2885      1.1  christos 
   2886      1.1  christos 	srl	in5, 24, local5
   2887      1.1  christos 	stub	local5, [local4+3]
   2888      1.1  christos 
   2889      1.1  christos 
   2890      1.1  christos 	and	out5, 255, local5
   2891      1.1  christos 	stub	local5, [local4+0+4]
   2892      1.1  christos 
   2893      1.1  christos 	srl	out5, 8, local5
   2894      1.1  christos 	and	local5, 255, local5
   2895      1.1  christos 	stub	local5, [local4+1+4]
   2896      1.1  christos 
   2897      1.1  christos 	srl	out5, 16, local5
   2898      1.1  christos 	and	local5, 255, local5
   2899      1.1  christos 	stub	local5, [local4+2+4]
   2900      1.1  christos 
   2901      1.1  christos 	srl	out5, 24, local5
   2902      1.1  christos 	stub	local5, [local4+3+4]
   2903      1.1  christos 
   2904      1.1  christos .SLE2a:
   2905      1.1  christos 
   2906      1.1  christos   ! ivec
   2907      1.1  christos 
   2908      1.1  christos 	ret
   2909      1.1  christos 	restore
   2910      1.1  christos 
   2911      1.1  christos 
   2912      1.1  christos .ncbc.dec:
   2913      1.1  christos 
   2914      1.1  christos 	STPTR	in0,  [%sp+BIAS+ARG0+0*ARGSZ]
   2915      1.1  christos 	cmp	in2, 0                    ! length
   2916      1.1  christos 	add	in3, 120, in3
   2917      1.1  christos 
   2918      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+4*ARGSZ] , local7              ! ivec
   2919      1.1  christos 	ble	.ncbc.dec.finish
   2920      1.1  christos 	mov	in3, in4                  ! schedule
   2921      1.1  christos 
   2922      1.1  christos 	STPTR	in1,  [%sp+BIAS+ARG0+1*ARGSZ]
   2923      1.1  christos 	mov	in0, local5               ! input
   2924      1.1  christos 
   2925      1.1  christos 
   2926      1.1  christos 
   2927      1.1  christos ! load_little_endian
   2928      1.1  christos ! local7 in0 in1 local3 .LLE3
   2929      1.1  christos 
   2930      1.1  christos 	! first in memory to rightmost in register
   2931      1.1  christos 
   2932      1.1  christos .LLE3:
   2933      1.1  christos 	ldub	[local7+3], in0
   2934      1.1  christos 
   2935      1.1  christos 	ldub	[local7+2], local3
   2936      1.1  christos 	sll	in0, 8, in0
   2937      1.1  christos 	or	in0, local3, in0
   2938      1.1  christos 
   2939      1.1  christos 	ldub	[local7+1], local3
   2940      1.1  christos 	sll	in0, 8, in0
   2941      1.1  christos 	or	in0, local3, in0
   2942      1.1  christos 
   2943      1.1  christos 	ldub	[local7+0], local3
   2944      1.1  christos 	sll	in0, 8, in0
   2945      1.1  christos 	or	in0, local3, in0
   2946      1.1  christos 
   2947      1.1  christos 
   2948      1.1  christos 	ldub	[local7+3+4], in1
   2949      1.1  christos 
   2950      1.1  christos 	ldub	[local7+2+4], local3
   2951      1.1  christos 	sll	in1, 8, in1
   2952      1.1  christos 	or	in1, local3, in1
   2953      1.1  christos 
   2954      1.1  christos 	ldub	[local7+1+4], local3
   2955      1.1  christos 	sll	in1, 8, in1
   2956      1.1  christos 	or	in1, local3, in1
   2957      1.1  christos 
   2958      1.1  christos 	ldub	[local7+0+4], local3
   2959      1.1  christos 	sll	in1, 8, in1
   2960      1.1  christos 	or	in1, local3, in1
   2961      1.1  christos .LLE3a:
   2962      1.1  christos 
   2963      1.1  christos    ! ivec
   2964      1.1  christos 
   2965      1.1  christos .ncbc.dec.next.block:
   2966      1.1  christos 
   2967      1.1  christos 
   2968      1.1  christos 
   2969      1.1  christos ! load_little_endian
   2970      1.1  christos ! local5 in5 out5 local3 .LLE4
   2971      1.1  christos 
   2972      1.1  christos 	! first in memory to rightmost in register
   2973      1.1  christos 
   2974      1.1  christos .LLE4:
   2975      1.1  christos 	ldub	[local5+3], in5
   2976      1.1  christos 
   2977      1.1  christos 	ldub	[local5+2], local3
   2978      1.1  christos 	sll	in5, 8, in5
   2979      1.1  christos 	or	in5, local3, in5
   2980      1.1  christos 
   2981      1.1  christos 	ldub	[local5+1], local3
   2982      1.1  christos 	sll	in5, 8, in5
   2983      1.1  christos 	or	in5, local3, in5
   2984      1.1  christos 
   2985      1.1  christos 	ldub	[local5+0], local3
   2986      1.1  christos 	sll	in5, 8, in5
   2987      1.1  christos 	or	in5, local3, in5
   2988      1.1  christos 
   2989      1.1  christos 
   2990      1.1  christos 	ldub	[local5+3+4], out5
   2991      1.1  christos 
   2992      1.1  christos 	ldub	[local5+2+4], local3
   2993      1.1  christos 	sll	out5, 8, out5
   2994      1.1  christos 	or	out5, local3, out5
   2995      1.1  christos 
   2996      1.1  christos 	ldub	[local5+1+4], local3
   2997      1.1  christos 	sll	out5, 8, out5
   2998      1.1  christos 	or	out5, local3, out5
   2999      1.1  christos 
   3000      1.1  christos 	ldub	[local5+0+4], local3
   3001      1.1  christos 	sll	out5, 8, out5
   3002      1.1  christos 	or	out5, local3, out5
   3003      1.1  christos .LLE4a:
   3004      1.1  christos 
   3005      1.1  christos   ! block
   3006      1.1  christos 
   3007      1.1  christos 	! parameter 6  1/2 for include encryption/decryption
   3008      1.1  christos 	! parameter 7  1 for mov in1 to in3
   3009      1.1  christos 	! parameter 8  1 for mov in3 to in4
   3010      1.1  christos 
   3011      1.1  christos 
   3012      1.1  christos 
   3013      1.1  christos ! ip_macro
   3014      1.1  christos ! in5 out5 in5 out5 in4 2 0 1
   3015      1.1  christos 
   3016      1.1  christos 	ld	[out2+256], local1
   3017      1.1  christos 	srl	out5, 4, local4
   3018      1.1  christos 
   3019      1.1  christos 	xor	local4, in5, local4
   3020      1.1  christos 	nop
   3021      1.1  christos 
   3022      1.1  christos 	ld	[out2+260], local2
   3023      1.1  christos 	and	local4, local1, local4
   3024      1.1  christos 	mov in3, in4
   3025      1.1  christos 
   3026      1.1  christos 
   3027      1.1  christos 	ld	[out2+280], out4          ! loop counter
   3028      1.1  christos 	sll	local4, 4, local1
   3029      1.1  christos 	xor	in5, local4, in5
   3030      1.1  christos 
   3031      1.1  christos 	ld	[out2+264], local3
   3032      1.1  christos 	srl	in5, 16, local4
   3033      1.1  christos 	xor	out5, local1, out5
   3034      1.1  christos 
   3035      1.1  christos 
   3036      1.1  christos 	xor	local4, out5, local4
   3037      1.1  christos 	nop	!sethi	%hi(DES_SPtrans), global1 ! sbox addr
   3038      1.1  christos 
   3039      1.1  christos 
   3040      1.1  christos 	and	local4, local2, local4
   3041      1.1  christos 	nop	!or	global1, %lo(DES_SPtrans), global1   ! sbox addr
   3042      1.1  christos 
   3043      1.1  christos 	sll	local4, 16, local1
   3044      1.1  christos 	xor	out5, local4, out5
   3045      1.1  christos 
   3046      1.1  christos 	srl	out5, 2, local4
   3047      1.1  christos 	xor	in5, local1, in5
   3048      1.1  christos 
   3049      1.1  christos 	sethi	%hi(16711680), local5
   3050      1.1  christos 	xor	local4, in5, local4
   3051      1.1  christos 
   3052      1.1  christos 	and	local4, local3, local4
   3053      1.1  christos 	or	local5, 255, local5
   3054      1.1  christos 
   3055      1.1  christos 	sll	local4, 2, local2
   3056      1.1  christos 	xor	in5, local4, in5
   3057      1.1  christos 
   3058      1.1  christos 	srl	in5, 8, local4
   3059      1.1  christos 	xor	out5, local2, out5
   3060      1.1  christos 
   3061      1.1  christos 	xor	local4, out5, local4
   3062      1.1  christos 	add	global1, 768, global4
   3063      1.1  christos 
   3064      1.1  christos 	and	local4, local5, local4
   3065      1.1  christos 	add	global1, 1024, global5
   3066      1.1  christos 
   3067      1.1  christos 	ld	[out2+272], local7
   3068      1.1  christos 	sll	local4, 8, local1
   3069      1.1  christos 	xor	out5, local4, out5
   3070      1.1  christos 
   3071      1.1  christos 	srl	out5, 1, local4
   3072      1.1  christos 	xor	in5, local1, in5
   3073      1.1  christos 
   3074      1.1  christos 	ld	[in4], out0                ! key 7531
   3075      1.1  christos 	xor	local4, in5, local4
   3076      1.1  christos 	add	global1, 256, global2
   3077      1.1  christos 
   3078      1.1  christos 	ld	[in4+4], out1              ! key 8642
   3079      1.1  christos 	and	local4, local7, local4
   3080      1.1  christos 	add	global1, 512, global3
   3081      1.1  christos 
   3082      1.1  christos 	sll	local4, 1, local1
   3083      1.1  christos 	xor	in5, local4, in5
   3084      1.1  christos 
   3085      1.1  christos 	sll	in5, 3, local3
   3086      1.1  christos 	xor	out5, local1, out5
   3087      1.1  christos 
   3088      1.1  christos 	sll	out5, 3, local2
   3089      1.1  christos 	add	global1, 1280, local6     ! address sbox 8
   3090      1.1  christos 
   3091      1.1  christos 	srl	in5, 29, local4
   3092      1.1  christos 	add	global1, 1792, out3       ! address sbox 8
   3093      1.1  christos 
   3094      1.1  christos 	srl	out5, 29, local1
   3095      1.1  christos 	or	local4, local3, in5
   3096      1.1  christos 
   3097      1.1  christos 	or	local2, local1, out5
   3098      1.1  christos 
   3099      1.1  christos 
   3100      1.1  christos 
   3101      1.1  christos 
   3102      1.1  christos 
   3103      1.1  christos 		ld	[out2+284], local5     ! 0x0000FC00 used in the rounds
   3104      1.1  christos 		or	local2, local1, out5
   3105      1.1  christos 		xor	in5, out0, local1
   3106      1.1  christos 
   3107      1.1  christos 		call .des_dec.1
   3108      1.1  christos 		and	local1, 252, local1
   3109      1.1  christos 
   3110      1.1  christos 
   3111  1.1.1.2  christos  ! include decryption  ks in4
   3112      1.1  christos 
   3113      1.1  christos 
   3114      1.1  christos 
   3115      1.1  christos ! fp_macro
   3116      1.1  christos ! out5 in5 0 1
   3117      1.1  christos 
   3118      1.1  christos 	! initially undo the rotate 3 left done after initial permutation
   3119      1.1  christos 	! original left is received shifted 3 right and 29 left in local3/4
   3120      1.1  christos 
   3121      1.1  christos 	sll	in5, 29, local1
   3122      1.1  christos 	or	local3, local4, out5
   3123      1.1  christos 
   3124      1.1  christos 	srl	in5, 3, in5
   3125      1.1  christos 	sethi	%hi(0x55555555), local2
   3126      1.1  christos 
   3127      1.1  christos 	or	in5, local1, in5
   3128      1.1  christos 	or	local2, %lo(0x55555555), local2
   3129      1.1  christos 
   3130      1.1  christos 	srl	in5, 1, local3
   3131      1.1  christos 	sethi	%hi(0x00ff00ff), local1
   3132      1.1  christos 	xor	local3, out5, local3
   3133      1.1  christos 	or	local1, %lo(0x00ff00ff), local1
   3134      1.1  christos 	and	local3, local2, local3
   3135      1.1  christos 	sethi	%hi(0x33333333), local4
   3136      1.1  christos 	sll	local3, 1, local2
   3137      1.1  christos 
   3138      1.1  christos 	xor	out5, local3, out5
   3139      1.1  christos 
   3140      1.1  christos 	srl	out5, 8, local3
   3141      1.1  christos 	xor	in5, local2, in5
   3142      1.1  christos 	xor	local3, in5, local3
   3143      1.1  christos 	or	local4, %lo(0x33333333), local4
   3144      1.1  christos 	and	local3, local1, local3
   3145      1.1  christos 	sethi	%hi(0x0000ffff), local1
   3146      1.1  christos 	sll	local3, 8, local2
   3147      1.1  christos 
   3148      1.1  christos 	xor	in5, local3, in5
   3149      1.1  christos 
   3150      1.1  christos 	srl	in5, 2, local3
   3151      1.1  christos 	xor	out5, local2, out5
   3152      1.1  christos 	xor	local3, out5, local3
   3153      1.1  christos 	or	local1, %lo(0x0000ffff), local1
   3154      1.1  christos 	and	local3, local4, local3
   3155      1.1  christos 	sethi	%hi(0x0f0f0f0f), local4
   3156      1.1  christos 	sll	local3, 2, local2
   3157      1.1  christos 
   3158      1.1  christos 	LDPTR  [%sp+BIAS+ARG0+0*ARGSZ] , local5
   3159      1.1  christos 	xor	out5, local3, out5
   3160      1.1  christos 
   3161      1.1  christos 	LDPTR  [%sp+BIAS+ARG0+1*ARGSZ] , local7
   3162      1.1  christos 	srl	out5, 16, local3
   3163      1.1  christos 	xor	in5, local2, in5
   3164      1.1  christos 	xor	local3, in5, local3
   3165      1.1  christos 	or	local4, %lo(0x0f0f0f0f), local4
   3166      1.1  christos 	and	local3, local1, local3
   3167      1.1  christos 	sll	local3, 16, local2
   3168      1.1  christos 
   3169      1.1  christos 	xor	in5, local3, local1
   3170      1.1  christos 
   3171      1.1  christos 	srl	local1, 4, local3
   3172      1.1  christos 	xor	out5, local2, out5
   3173      1.1  christos 	xor	local3, out5, local3
   3174      1.1  christos 	and	local3, local4, local3
   3175      1.1  christos 	sll	local3, 4, local2
   3176      1.1  christos 
   3177      1.1  christos 	xor	out5, local3, out5
   3178      1.1  christos 
   3179      1.1  christos 	! optional store:
   3180      1.1  christos 
   3181      1.1  christos 
   3182      1.1  christos 
   3183      1.1  christos 	xor	local1, local2, in5
   3184      1.1  christos 
   3185      1.1  christos 
   3186      1.1  christos 
   3187      1.1  christos  ! 1 for input and output address to local5/7
   3188      1.1  christos 
   3189      1.1  christos 	! in2 is bytes left to be stored
   3190      1.1  christos 	! in2 is compared to 8 in the rounds
   3191      1.1  christos 
   3192      1.1  christos 	xor	out5, in0, out4           ! iv xor
   3193      1.1  christos 	bl	.ncbc.dec.seven.or.less
   3194      1.1  christos 	xor	in5, in1, global4         ! iv xor
   3195      1.1  christos 
   3196      1.1  christos 	! Load ivec next block now, since input and output address might be the same.
   3197      1.1  christos 
   3198      1.1  christos 
   3199      1.1  christos 
   3200      1.1  christos ! load_little_endian_inc
   3201      1.1  christos ! local5 in0 in1 local3 .LLE5
   3202      1.1  christos 
   3203      1.1  christos 	! first in memory to rightmost in register
   3204      1.1  christos 
   3205      1.1  christos .LLE5:
   3206      1.1  christos 	ldub	[local5+3], in0
   3207      1.1  christos 
   3208      1.1  christos 	ldub	[local5+2], local3
   3209      1.1  christos 	sll	in0, 8, in0
   3210      1.1  christos 	or	in0, local3, in0
   3211      1.1  christos 
   3212      1.1  christos 	ldub	[local5+1], local3
   3213      1.1  christos 	sll	in0, 8, in0
   3214      1.1  christos 	or	in0, local3, in0
   3215      1.1  christos 
   3216      1.1  christos 	ldub	[local5+0], local3
   3217      1.1  christos 	sll	in0, 8, in0
   3218      1.1  christos 	or	in0, local3, in0
   3219      1.1  christos 
   3220      1.1  christos 	ldub	[local5+3+4], in1
   3221      1.1  christos 	add	local5, 8, local5
   3222      1.1  christos 
   3223      1.1  christos 	ldub	[local5+2+4-8], local3
   3224      1.1  christos 	sll	in1, 8, in1
   3225      1.1  christos 	or	in1, local3, in1
   3226      1.1  christos 
   3227      1.1  christos 	ldub	[local5+1+4-8], local3
   3228      1.1  christos 	sll	in1, 8, in1
   3229      1.1  christos 	or	in1, local3, in1
   3230      1.1  christos 
   3231      1.1  christos 	ldub	[local5+0+4-8], local3
   3232      1.1  christos 	sll	in1, 8, in1
   3233      1.1  christos 	or	in1, local3, in1
   3234      1.1  christos .LLE5a:
   3235      1.1  christos 
   3236      1.1  christos   ! iv
   3237      1.1  christos 
   3238      1.1  christos 
   3239      1.1  christos 
   3240      1.1  christos ! store_little_endian
   3241      1.1  christos ! local7 out4 global4 local3 .SLE3
   3242      1.1  christos 
   3243      1.1  christos 	! rightmost in register to first in memory
   3244      1.1  christos 
   3245      1.1  christos .SLE3:
   3246      1.1  christos 	and	out4, 255, local3
   3247      1.1  christos 	stub	local3, [local7+0]
   3248      1.1  christos 
   3249      1.1  christos 	srl	out4, 8, local3
   3250      1.1  christos 	and	local3, 255, local3
   3251      1.1  christos 	stub	local3, [local7+1]
   3252      1.1  christos 
   3253      1.1  christos 	srl	out4, 16, local3
   3254      1.1  christos 	and	local3, 255, local3
   3255      1.1  christos 	stub	local3, [local7+2]
   3256      1.1  christos 
   3257      1.1  christos 	srl	out4, 24, local3
   3258      1.1  christos 	stub	local3, [local7+3]
   3259      1.1  christos 
   3260      1.1  christos 
   3261      1.1  christos 	and	global4, 255, local3
   3262      1.1  christos 	stub	local3, [local7+0+4]
   3263      1.1  christos 
   3264      1.1  christos 	srl	global4, 8, local3
   3265      1.1  christos 	and	local3, 255, local3
   3266      1.1  christos 	stub	local3, [local7+1+4]
   3267      1.1  christos 
   3268      1.1  christos 	srl	global4, 16, local3
   3269      1.1  christos 	and	local3, 255, local3
   3270      1.1  christos 	stub	local3, [local7+2+4]
   3271      1.1  christos 
   3272      1.1  christos 	srl	global4, 24, local3
   3273      1.1  christos 	stub	local3, [local7+3+4]
   3274      1.1  christos 
   3275      1.1  christos .SLE3a:
   3276      1.1  christos 
   3277      1.1  christos 
   3278      1.1  christos 
   3279      1.1  christos 	STPTR	local5,  [%sp+BIAS+ARG0+0*ARGSZ]
   3280      1.1  christos 	add	local7, 8, local7
   3281      1.1  christos 	addcc   in2, -8, in2
   3282      1.1  christos 
   3283      1.1  christos 	bg	.ncbc.dec.next.block
   3284      1.1  christos 	STPTR	local7,  [%sp+BIAS+ARG0+1*ARGSZ]
   3285      1.1  christos 
   3286      1.1  christos 
   3287      1.1  christos .ncbc.dec.store.iv:
   3288      1.1  christos 
   3289      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+4*ARGSZ] , local4              ! ivec
   3290      1.1  christos 
   3291      1.1  christos 
   3292      1.1  christos ! store_little_endian
   3293      1.1  christos ! local4 in0 in1 local5 .SLE4
   3294      1.1  christos 
   3295      1.1  christos 	! rightmost in register to first in memory
   3296      1.1  christos 
   3297      1.1  christos .SLE4:
   3298      1.1  christos 	and	in0, 255, local5
   3299      1.1  christos 	stub	local5, [local4+0]
   3300      1.1  christos 
   3301      1.1  christos 	srl	in0, 8, local5
   3302      1.1  christos 	and	local5, 255, local5
   3303      1.1  christos 	stub	local5, [local4+1]
   3304      1.1  christos 
   3305      1.1  christos 	srl	in0, 16, local5
   3306      1.1  christos 	and	local5, 255, local5
   3307      1.1  christos 	stub	local5, [local4+2]
   3308      1.1  christos 
   3309      1.1  christos 	srl	in0, 24, local5
   3310      1.1  christos 	stub	local5, [local4+3]
   3311      1.1  christos 
   3312      1.1  christos 
   3313      1.1  christos 	and	in1, 255, local5
   3314      1.1  christos 	stub	local5, [local4+0+4]
   3315      1.1  christos 
   3316      1.1  christos 	srl	in1, 8, local5
   3317      1.1  christos 	and	local5, 255, local5
   3318      1.1  christos 	stub	local5, [local4+1+4]
   3319      1.1  christos 
   3320      1.1  christos 	srl	in1, 16, local5
   3321      1.1  christos 	and	local5, 255, local5
   3322      1.1  christos 	stub	local5, [local4+2+4]
   3323      1.1  christos 
   3324      1.1  christos 	srl	in1, 24, local5
   3325      1.1  christos 	stub	local5, [local4+3+4]
   3326      1.1  christos 
   3327      1.1  christos .SLE4a:
   3328      1.1  christos 
   3329      1.1  christos 
   3330      1.1  christos 
   3331      1.1  christos .ncbc.dec.finish:
   3332      1.1  christos 
   3333      1.1  christos 	ret
   3334      1.1  christos 	restore
   3335      1.1  christos 
   3336      1.1  christos .ncbc.dec.seven.or.less:
   3337      1.1  christos 
   3338      1.1  christos 
   3339      1.1  christos 
   3340      1.1  christos ! load_little_endian_inc
   3341      1.1  christos ! local5 in0 in1 local3 .LLE13
   3342      1.1  christos 
   3343      1.1  christos 	! first in memory to rightmost in register
   3344      1.1  christos 
   3345      1.1  christos .LLE13:
   3346      1.1  christos 	ldub	[local5+3], in0
   3347      1.1  christos 
   3348      1.1  christos 	ldub	[local5+2], local3
   3349      1.1  christos 	sll	in0, 8, in0
   3350      1.1  christos 	or	in0, local3, in0
   3351      1.1  christos 
   3352      1.1  christos 	ldub	[local5+1], local3
   3353      1.1  christos 	sll	in0, 8, in0
   3354      1.1  christos 	or	in0, local3, in0
   3355      1.1  christos 
   3356      1.1  christos 	ldub	[local5+0], local3
   3357      1.1  christos 	sll	in0, 8, in0
   3358      1.1  christos 	or	in0, local3, in0
   3359      1.1  christos 
   3360      1.1  christos 	ldub	[local5+3+4], in1
   3361      1.1  christos 	add	local5, 8, local5
   3362      1.1  christos 
   3363      1.1  christos 	ldub	[local5+2+4-8], local3
   3364      1.1  christos 	sll	in1, 8, in1
   3365      1.1  christos 	or	in1, local3, in1
   3366      1.1  christos 
   3367      1.1  christos 	ldub	[local5+1+4-8], local3
   3368      1.1  christos 	sll	in1, 8, in1
   3369      1.1  christos 	or	in1, local3, in1
   3370      1.1  christos 
   3371      1.1  christos 	ldub	[local5+0+4-8], local3
   3372      1.1  christos 	sll	in1, 8, in1
   3373      1.1  christos 	or	in1, local3, in1
   3374      1.1  christos .LLE13a:
   3375      1.1  christos 
   3376      1.1  christos      ! ivec
   3377      1.1  christos 
   3378      1.1  christos 
   3379      1.1  christos 
   3380      1.1  christos ! store_n_bytes
   3381      1.1  christos ! local7 in2 local3 local4 .SNB1 .ncbc.dec.store.iv .SNB1 .ncbc.dec.store.iv
   3382      1.1  christos 
   3383      1.1  christos .SNB1.0:	call	.+8
   3384      1.1  christos 	sll	in2, 2, local4
   3385      1.1  christos 
   3386      1.1  christos 	add	%o7,.SNB1.jmp.table-.SNB1.0,local3
   3387      1.1  christos 
   3388      1.1  christos 	add	local3, local4, local3
   3389      1.1  christos 
   3390      1.1  christos 	ld	[local3], local3
   3391      1.1  christos 
   3392      1.1  christos 	jmp	%o7+local3
   3393      1.1  christos 	nop
   3394      1.1  christos 
   3395      1.1  christos .SNB1.7:
   3396      1.1  christos 	srl	global4, 16, local3
   3397      1.1  christos 	and	local3, 0xff, local3
   3398      1.1  christos 	stub	local3, [local7+6]
   3399      1.1  christos .SNB1.6:
   3400      1.1  christos 	srl	global4, 8, local3
   3401      1.1  christos 	and	local3, 0xff, local3
   3402      1.1  christos 	stub	local3, [local7+5]
   3403      1.1  christos .SNB1.5:
   3404      1.1  christos 	and	global4, 0xff, local3
   3405      1.1  christos 	stub	local3, [local7+4]
   3406      1.1  christos .SNB1.4:
   3407      1.1  christos 	srl	out4, 24, local3
   3408      1.1  christos 	stub	local3, [local7+3]
   3409      1.1  christos .SNB1.3:
   3410      1.1  christos 	srl	out4, 16, local3
   3411      1.1  christos 	and	local3, 0xff, local3
   3412      1.1  christos 	stub	local3, [local7+2]
   3413      1.1  christos .SNB1.2:
   3414      1.1  christos 	srl	out4, 8, local3
   3415      1.1  christos 	and	local3, 0xff, local3
   3416      1.1  christos 	stub	local3, [local7+1]
   3417      1.1  christos .SNB1.1:
   3418      1.1  christos 	and	out4, 0xff, local3
   3419      1.1  christos 
   3420      1.1  christos 
   3421      1.1  christos 	ba	.ncbc.dec.store.iv
   3422      1.1  christos 	stub	local3, [local7]
   3423      1.1  christos 
   3424      1.1  christos 	.align 4
   3425      1.1  christos 
   3426      1.1  christos .SNB1.jmp.table:
   3427      1.1  christos 
   3428      1.1  christos 	.word	0
   3429      1.1  christos 	.word	.SNB1.1-.SNB1.0
   3430      1.1  christos 	.word	.SNB1.2-.SNB1.0
   3431      1.1  christos 	.word	.SNB1.3-.SNB1.0
   3432      1.1  christos 	.word	.SNB1.4-.SNB1.0
   3433      1.1  christos 	.word	.SNB1.5-.SNB1.0
   3434      1.1  christos 	.word	.SNB1.6-.SNB1.0
   3435      1.1  christos 	.word	.SNB1.7-.SNB1.0
   3436      1.1  christos 
   3437      1.1  christos 
   3438      1.1  christos 
   3439      1.1  christos .DES_ncbc_encrypt.end:
   3440      1.1  christos 	.size	 DES_ncbc_encrypt, .DES_ncbc_encrypt.end-DES_ncbc_encrypt
   3441      1.1  christos 
   3442      1.1  christos 
   3443  1.1.1.2  christos ! void DES_ede3_cbc_encrypt(input, output, length, ks1, ks2, ks3, ivec, enc)
   3444      1.1  christos ! **************************************************************************
   3445      1.1  christos 
   3446      1.1  christos 
   3447      1.1  christos 	.align 32
   3448      1.1  christos 	.global DES_ede3_cbc_encrypt
   3449      1.1  christos 	.type	 DES_ede3_cbc_encrypt,#function
   3450      1.1  christos 
   3451      1.1  christos DES_ede3_cbc_encrypt:
   3452      1.1  christos 
   3453      1.1  christos 	save	%sp, FRAME, %sp
   3454      1.1  christos 
   3455      1.1  christos 
   3456      1.1  christos 
   3457      1.1  christos 
   3458      1.1  christos 
   3459      1.1  christos 	sethi	%hi(_PIC_DES_SPtrans-1f),global1
   3460      1.1  christos 	or	global1,%lo(_PIC_DES_SPtrans-1f),global1
   3461      1.1  christos 1:	call	.+8
   3462      1.1  christos 	add	%o7,global1,global1
   3463      1.1  christos 	sub	global1,_PIC_DES_SPtrans-.des_and,out2
   3464      1.1  christos 
   3465      1.1  christos 	LDPTR	[%fp+BIAS+ARG0+7*ARGSZ], local3          ! enc
   3466      1.1  christos 	LDPTR	[%fp+BIAS+ARG0+6*ARGSZ], local4          ! ivec
   3467      1.1  christos 	cmp	local3, 0                 ! enc
   3468      1.1  christos 
   3469      1.1  christos 	be	.ede3.dec
   3470      1.1  christos 	STPTR	in4,  [%sp+BIAS+ARG0+4*ARGSZ]
   3471      1.1  christos 
   3472      1.1  christos 	STPTR	in5,  [%sp+BIAS+ARG0+5*ARGSZ]
   3473      1.1  christos 
   3474      1.1  christos 
   3475      1.1  christos 
   3476      1.1  christos ! load_little_endian
   3477      1.1  christos ! local4 in5 out5 local3 .LLE6
   3478      1.1  christos 
   3479      1.1  christos 	! first in memory to rightmost in register
   3480      1.1  christos 
   3481      1.1  christos .LLE6:
   3482      1.1  christos 	ldub	[local4+3], in5
   3483      1.1  christos 
   3484      1.1  christos 	ldub	[local4+2], local3
   3485      1.1  christos 	sll	in5, 8, in5
   3486      1.1  christos 	or	in5, local3, in5
   3487      1.1  christos 
   3488      1.1  christos 	ldub	[local4+1], local3
   3489      1.1  christos 	sll	in5, 8, in5
   3490      1.1  christos 	or	in5, local3, in5
   3491      1.1  christos 
   3492      1.1  christos 	ldub	[local4+0], local3
   3493      1.1  christos 	sll	in5, 8, in5
   3494      1.1  christos 	or	in5, local3, in5
   3495      1.1  christos 
   3496      1.1  christos 
   3497      1.1  christos 	ldub	[local4+3+4], out5
   3498      1.1  christos 
   3499      1.1  christos 	ldub	[local4+2+4], local3
   3500      1.1  christos 	sll	out5, 8, out5
   3501      1.1  christos 	or	out5, local3, out5
   3502      1.1  christos 
   3503      1.1  christos 	ldub	[local4+1+4], local3
   3504      1.1  christos 	sll	out5, 8, out5
   3505      1.1  christos 	or	out5, local3, out5
   3506      1.1  christos 
   3507      1.1  christos 	ldub	[local4+0+4], local3
   3508      1.1  christos 	sll	out5, 8, out5
   3509      1.1  christos 	or	out5, local3, out5
   3510      1.1  christos .LLE6a:
   3511      1.1  christos 
   3512      1.1  christos   ! ivec
   3513      1.1  christos 
   3514      1.1  christos 	addcc	in2, -8, in2              ! bytes missing after next block
   3515      1.1  christos 
   3516      1.1  christos 	bl	.ede3.enc.seven.or.less
   3517      1.1  christos 	STPTR	in3,  [%sp+BIAS+ARG0+3*ARGSZ]
   3518      1.1  christos 
   3519      1.1  christos .ede3.enc.next.block:
   3520      1.1  christos 
   3521      1.1  christos 
   3522      1.1  christos 
   3523      1.1  christos ! load_little_endian
   3524      1.1  christos ! in0 out4 global4 local3 .LLE7
   3525      1.1  christos 
   3526      1.1  christos 	! first in memory to rightmost in register
   3527      1.1  christos 
   3528      1.1  christos .LLE7:
   3529      1.1  christos 	ldub	[in0+3], out4
   3530      1.1  christos 
   3531      1.1  christos 	ldub	[in0+2], local3
   3532      1.1  christos 	sll	out4, 8, out4
   3533      1.1  christos 	or	out4, local3, out4
   3534      1.1  christos 
   3535      1.1  christos 	ldub	[in0+1], local3
   3536      1.1  christos 	sll	out4, 8, out4
   3537      1.1  christos 	or	out4, local3, out4
   3538      1.1  christos 
   3539      1.1  christos 	ldub	[in0+0], local3
   3540      1.1  christos 	sll	out4, 8, out4
   3541      1.1  christos 	or	out4, local3, out4
   3542      1.1  christos 
   3543      1.1  christos 
   3544      1.1  christos 	ldub	[in0+3+4], global4
   3545      1.1  christos 
   3546      1.1  christos 	ldub	[in0+2+4], local3
   3547      1.1  christos 	sll	global4, 8, global4
   3548      1.1  christos 	or	global4, local3, global4
   3549      1.1  christos 
   3550      1.1  christos 	ldub	[in0+1+4], local3
   3551      1.1  christos 	sll	global4, 8, global4
   3552      1.1  christos 	or	global4, local3, global4
   3553      1.1  christos 
   3554      1.1  christos 	ldub	[in0+0+4], local3
   3555      1.1  christos 	sll	global4, 8, global4
   3556      1.1  christos 	or	global4, local3, global4
   3557      1.1  christos .LLE7a:
   3558      1.1  christos 
   3559      1.1  christos 
   3560      1.1  christos 
   3561      1.1  christos .ede3.enc.next.block_1:
   3562      1.1  christos 
   3563      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+4*ARGSZ] , in4
   3564      1.1  christos 	xor	in5, out4, in5            ! iv xor
   3565      1.1  christos 	xor	out5, global4, out5       ! iv xor
   3566      1.1  christos 
   3567      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+3*ARGSZ] , in3
   3568      1.1  christos 	add	in4, 120, in4             ! for decryption we use last subkey first
   3569      1.1  christos 	nop
   3570      1.1  christos 
   3571      1.1  christos 
   3572      1.1  christos 
   3573      1.1  christos ! ip_macro
   3574      1.1  christos ! in5 out5 out5 in5 in3
   3575      1.1  christos 
   3576      1.1  christos 	ld	[out2+256], local1
   3577      1.1  christos 	srl	out5, 4, local4
   3578      1.1  christos 
   3579      1.1  christos 	xor	local4, in5, local4
   3580      1.1  christos 	nop
   3581      1.1  christos 
   3582      1.1  christos 	ld	[out2+260], local2
   3583      1.1  christos 	and	local4, local1, local4
   3584      1.1  christos 
   3585      1.1  christos 
   3586      1.1  christos 
   3587      1.1  christos 	ld	[out2+280], out4          ! loop counter
   3588      1.1  christos 	sll	local4, 4, local1
   3589      1.1  christos 	xor	in5, local4, in5
   3590      1.1  christos 
   3591      1.1  christos 	ld	[out2+264], local3
   3592      1.1  christos 	srl	in5, 16, local4
   3593      1.1  christos 	xor	out5, local1, out5
   3594      1.1  christos 
   3595      1.1  christos 
   3596      1.1  christos 	xor	local4, out5, local4
   3597      1.1  christos 	nop	!sethi	%hi(DES_SPtrans), global1 ! sbox addr
   3598      1.1  christos 
   3599      1.1  christos 
   3600      1.1  christos 	and	local4, local2, local4
   3601      1.1  christos 	nop	!or	global1, %lo(DES_SPtrans), global1   ! sbox addr
   3602      1.1  christos 
   3603      1.1  christos 	sll	local4, 16, local1
   3604      1.1  christos 	xor	out5, local4, out5
   3605      1.1  christos 
   3606      1.1  christos 	srl	out5, 2, local4
   3607      1.1  christos 	xor	in5, local1, in5
   3608      1.1  christos 
   3609      1.1  christos 	sethi	%hi(16711680), local5
   3610      1.1  christos 	xor	local4, in5, local4
   3611      1.1  christos 
   3612      1.1  christos 	and	local4, local3, local4
   3613      1.1  christos 	or	local5, 255, local5
   3614      1.1  christos 
   3615      1.1  christos 	sll	local4, 2, local2
   3616      1.1  christos 	xor	in5, local4, in5
   3617      1.1  christos 
   3618      1.1  christos 	srl	in5, 8, local4
   3619      1.1  christos 	xor	out5, local2, out5
   3620      1.1  christos 
   3621      1.1  christos 	xor	local4, out5, local4
   3622      1.1  christos 	add	global1, 768, global4
   3623      1.1  christos 
   3624      1.1  christos 	and	local4, local5, local4
   3625      1.1  christos 	add	global1, 1024, global5
   3626      1.1  christos 
   3627      1.1  christos 	ld	[out2+272], local7
   3628      1.1  christos 	sll	local4, 8, local1
   3629      1.1  christos 	xor	out5, local4, out5
   3630      1.1  christos 
   3631      1.1  christos 	srl	out5, 1, local4
   3632      1.1  christos 	xor	in5, local1, in5
   3633      1.1  christos 
   3634      1.1  christos 	ld	[in3], out0                ! key 7531
   3635      1.1  christos 	xor	local4, in5, local4
   3636      1.1  christos 	add	global1, 256, global2
   3637      1.1  christos 
   3638      1.1  christos 	ld	[in3+4], out1              ! key 8642
   3639      1.1  christos 	and	local4, local7, local4
   3640      1.1  christos 	add	global1, 512, global3
   3641      1.1  christos 
   3642      1.1  christos 	sll	local4, 1, local1
   3643      1.1  christos 	xor	in5, local4, in5
   3644      1.1  christos 
   3645      1.1  christos 	sll	in5, 3, local3
   3646      1.1  christos 	xor	out5, local1, out5
   3647      1.1  christos 
   3648      1.1  christos 	sll	out5, 3, local2
   3649      1.1  christos 	add	global1, 1280, local6     ! address sbox 8
   3650      1.1  christos 
   3651      1.1  christos 	srl	in5, 29, local4
   3652      1.1  christos 	add	global1, 1792, out3       ! address sbox 8
   3653      1.1  christos 
   3654      1.1  christos 	srl	out5, 29, local1
   3655      1.1  christos 	or	local4, local3, out5
   3656      1.1  christos 
   3657      1.1  christos 	or	local2, local1, in5
   3658      1.1  christos 
   3659      1.1  christos 
   3660      1.1  christos 
   3661      1.1  christos 
   3662      1.1  christos 
   3663      1.1  christos 
   3664      1.1  christos .ede3.enc.next.block_2:
   3665      1.1  christos 
   3666      1.1  christos 	call .des_enc                     ! ks1 in3
   3667      1.1  christos 	nop
   3668      1.1  christos 
   3669      1.1  christos 	call .des_dec                     ! ks2 in4
   3670      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+5*ARGSZ] , in3
   3671      1.1  christos 
   3672      1.1  christos 	call .des_enc                     ! ks3 in3  compares in2 to 8
   3673      1.1  christos 	nop
   3674      1.1  christos 
   3675      1.1  christos 	bl	.ede3.enc.next.block_fp
   3676      1.1  christos 	add	in0, 8, in0
   3677      1.1  christos 
   3678      1.1  christos 	! If 8 or more bytes are to be encrypted after this block,
   3679      1.1  christos 	! we combine final permutation for this block with initial
   3680      1.1  christos 	! permutation for next block. Load next block:
   3681      1.1  christos 
   3682      1.1  christos 
   3683      1.1  christos 
   3684      1.1  christos ! load_little_endian
   3685      1.1  christos ! in0 global3 global4 local5 .LLE11
   3686      1.1  christos 
   3687      1.1  christos 	! first in memory to rightmost in register
   3688      1.1  christos 
   3689      1.1  christos .LLE11:
   3690      1.1  christos 	ldub	[in0+3], global3
   3691      1.1  christos 
   3692      1.1  christos 	ldub	[in0+2], local5
   3693      1.1  christos 	sll	global3, 8, global3
   3694      1.1  christos 	or	global3, local5, global3
   3695      1.1  christos 
   3696      1.1  christos 	ldub	[in0+1], local5
   3697      1.1  christos 	sll	global3, 8, global3
   3698      1.1  christos 	or	global3, local5, global3
   3699      1.1  christos 
   3700      1.1  christos 	ldub	[in0+0], local5
   3701      1.1  christos 	sll	global3, 8, global3
   3702      1.1  christos 	or	global3, local5, global3
   3703      1.1  christos 
   3704      1.1  christos 
   3705      1.1  christos 	ldub	[in0+3+4], global4
   3706      1.1  christos 
   3707      1.1  christos 	ldub	[in0+2+4], local5
   3708      1.1  christos 	sll	global4, 8, global4
   3709      1.1  christos 	or	global4, local5, global4
   3710      1.1  christos 
   3711      1.1  christos 	ldub	[in0+1+4], local5
   3712      1.1  christos 	sll	global4, 8, global4
   3713      1.1  christos 	or	global4, local5, global4
   3714      1.1  christos 
   3715      1.1  christos 	ldub	[in0+0+4], local5
   3716      1.1  christos 	sll	global4, 8, global4
   3717      1.1  christos 	or	global4, local5, global4
   3718      1.1  christos .LLE11a:
   3719      1.1  christos 
   3720      1.1  christos 
   3721      1.1  christos 
   3722      1.1  christos 	!  parameter 1   original left
   3723      1.1  christos 	!  parameter 2   original right
   3724      1.1  christos 	!  parameter 3   left ip
   3725      1.1  christos 	!  parameter 4   right ip
   3726      1.1  christos 	!  parameter 5   1: load ks1/ks2 to in3/in4, add 120 to in4
   3727      1.1  christos 	!                2: mov in4 to in3
   3728      1.1  christos 	!
   3729      1.1  christos 	! also adds -8 to length in2 and loads loop counter to out4
   3730      1.1  christos 
   3731      1.1  christos 
   3732      1.1  christos 
   3733      1.1  christos ! fp_ip_macro
   3734      1.1  christos ! out0 out1 global3 global4 1
   3735      1.1  christos 
   3736      1.1  christos 
   3737      1.1  christos 
   3738      1.1  christos 
   3739      1.1  christos 
   3740      1.1  christos 
   3741      1.1  christos 
   3742      1.1  christos 
   3743      1.1  christos 
   3744      1.1  christos 	! out0 in local3, local4
   3745      1.1  christos 
   3746      1.1  christos 	ld	[out2+256], local1
   3747      1.1  christos 	sll	out5, 29, out4
   3748      1.1  christos 	or	local3, local4, out0
   3749      1.1  christos 
   3750      1.1  christos 	srl	out5, 3, out1
   3751      1.1  christos 
   3752      1.1  christos 
   3753      1.1  christos 	ld	[out2+272], local5
   3754      1.1  christos 	srl	global4, 4, local0
   3755      1.1  christos 	or	out1, out4, out1
   3756      1.1  christos 
   3757      1.1  christos 	srl	out1, 1, out4
   3758      1.1  christos 	xor	out4, out0, out4
   3759      1.1  christos 
   3760      1.1  christos 	and	out4, local5, out4
   3761      1.1  christos 	xor	local0, global3, local0
   3762      1.1  christos 
   3763      1.1  christos 	sll	out4, 1, local3
   3764      1.1  christos 	xor	out0, out4, out0
   3765      1.1  christos 
   3766      1.1  christos 	and	local0, local1, local0
   3767      1.1  christos 	add	in2, -8, in2
   3768      1.1  christos 
   3769      1.1  christos 	sll	local0, 4, local7
   3770      1.1  christos 	xor	global3, local0, global3
   3771      1.1  christos 
   3772      1.1  christos 	ld	[out2+268], local4
   3773      1.1  christos 	srl	out0, 8, out4
   3774      1.1  christos 	xor	out1, local3, out1
   3775      1.1  christos 	ld	[out2+260], local2
   3776      1.1  christos 	srl	global3, 16, local0
   3777      1.1  christos 	xor	global4, local7, global4
   3778      1.1  christos 	xor	out4, out1, out4
   3779      1.1  christos 	xor	local0, global4, local0
   3780      1.1  christos 	and	out4, local4, out4
   3781      1.1  christos 	and	local0, local2, local0
   3782      1.1  christos 	sll	out4, 8, local3
   3783      1.1  christos 	xor	out1, out4, out1
   3784      1.1  christos 	sll	local0, 16, local7
   3785      1.1  christos 	xor	global4, local0, global4
   3786      1.1  christos 
   3787      1.1  christos 	srl	out1, 2, out4
   3788      1.1  christos 	xor	out0, local3, out0
   3789      1.1  christos 
   3790      1.1  christos 	ld	[out2+264], local3         ! ip3
   3791      1.1  christos 	srl	global4, 2, local0
   3792      1.1  christos 	xor	global3, local7, global3
   3793      1.1  christos 	xor	out4, out0, out4
   3794      1.1  christos 	xor	local0, global3, local0
   3795      1.1  christos 	and	out4, local3, out4
   3796      1.1  christos 	and	local0, local3, local0
   3797      1.1  christos 	sll	out4, 2, local3
   3798      1.1  christos 	xor	out0, out4, out0
   3799      1.1  christos 	sll	local0, 2, local7
   3800      1.1  christos 	xor	global3, local0, global3
   3801      1.1  christos 
   3802      1.1  christos 	srl	out0, 16, out4
   3803      1.1  christos 	xor	out1, local3, out1
   3804      1.1  christos 	srl	global3, 8, local0
   3805      1.1  christos 	xor	global4, local7, global4
   3806      1.1  christos 	xor	out4, out1, out4
   3807      1.1  christos 	xor	local0, global4, local0
   3808      1.1  christos 	and	out4, local2, out4
   3809      1.1  christos 	and	local0, local4, local0
   3810      1.1  christos 	sll	out4, 16, local3
   3811      1.1  christos 	xor	out1, out4, local4
   3812      1.1  christos 	sll	local0, 8, local7
   3813      1.1  christos 	xor	global4, local0, global4
   3814      1.1  christos 
   3815      1.1  christos 	srl	global4, 1, local0
   3816      1.1  christos 	xor	global3, local7, global3
   3817      1.1  christos 
   3818      1.1  christos 	srl	local4, 4, out4
   3819      1.1  christos 	xor	local0, global3, local0
   3820      1.1  christos 
   3821      1.1  christos 	xor	out0, local3, out0
   3822      1.1  christos 	and	local0, local5, local0
   3823      1.1  christos 
   3824      1.1  christos 	sll	local0, 1, local7
   3825      1.1  christos 	xor	out4, out0, out4
   3826      1.1  christos 
   3827      1.1  christos 	xor	global3, local0, global3
   3828      1.1  christos 	xor	global4, local7, global4
   3829      1.1  christos 
   3830      1.1  christos 	sll	global3, 3, local5
   3831      1.1  christos 	and	out4, local1, out4
   3832      1.1  christos 
   3833      1.1  christos 	sll	out4, 4, local3
   3834      1.1  christos 	xor	out0, out4, out0
   3835      1.1  christos 
   3836      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+4*ARGSZ] , in4
   3837      1.1  christos 	sll	global4, 3, local2
   3838      1.1  christos 	xor	local4, local3, out1
   3839      1.1  christos 
   3840  1.1.1.2  christos 	! reload since used as temporary:
   3841      1.1  christos 
   3842      1.1  christos 	ld	[out2+280], out4          ! loop counter
   3843      1.1  christos 
   3844      1.1  christos 	srl	global3, 29, local0
   3845      1.1  christos 	add in4, 120, in4
   3846      1.1  christos 
   3847      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+3*ARGSZ] , in3
   3848      1.1  christos 	srl	global4, 29, local7
   3849      1.1  christos 
   3850      1.1  christos 	or	local0, local5, global4
   3851      1.1  christos 	or	local2, local7, global3
   3852      1.1  christos 
   3853      1.1  christos 
   3854      1.1  christos 
   3855      1.1  christos 
   3856      1.1  christos 
   3857      1.1  christos ! store_little_endian
   3858      1.1  christos ! in1 out0 out1 local3 .SLE9
   3859      1.1  christos 
   3860      1.1  christos 	! rightmost in register to first in memory
   3861      1.1  christos 
   3862      1.1  christos .SLE9:
   3863      1.1  christos 	and	out0, 255, local3
   3864      1.1  christos 	stub	local3, [in1+0]
   3865      1.1  christos 
   3866      1.1  christos 	srl	out0, 8, local3
   3867      1.1  christos 	and	local3, 255, local3
   3868      1.1  christos 	stub	local3, [in1+1]
   3869      1.1  christos 
   3870      1.1  christos 	srl	out0, 16, local3
   3871      1.1  christos 	and	local3, 255, local3
   3872      1.1  christos 	stub	local3, [in1+2]
   3873      1.1  christos 
   3874      1.1  christos 	srl	out0, 24, local3
   3875      1.1  christos 	stub	local3, [in1+3]
   3876      1.1  christos 
   3877      1.1  christos 
   3878      1.1  christos 	and	out1, 255, local3
   3879      1.1  christos 	stub	local3, [in1+0+4]
   3880      1.1  christos 
   3881      1.1  christos 	srl	out1, 8, local3
   3882      1.1  christos 	and	local3, 255, local3
   3883      1.1  christos 	stub	local3, [in1+1+4]
   3884      1.1  christos 
   3885      1.1  christos 	srl	out1, 16, local3
   3886      1.1  christos 	and	local3, 255, local3
   3887      1.1  christos 	stub	local3, [in1+2+4]
   3888      1.1  christos 
   3889      1.1  christos 	srl	out1, 24, local3
   3890      1.1  christos 	stub	local3, [in1+3+4]
   3891      1.1  christos 
   3892      1.1  christos .SLE9a:
   3893      1.1  christos 
   3894      1.1  christos   ! block
   3895      1.1  christos 
   3896      1.1  christos 	mov 	in5, local1
   3897      1.1  christos 	xor	global3, out5, in5        ! iv xor next block
   3898      1.1  christos 
   3899      1.1  christos 	ld	[in3], out0               ! key 7531
   3900      1.1  christos 	add	global1, 512, global3     ! address sbox 3
   3901      1.1  christos 	xor	global4, local1, out5     ! iv xor next block
   3902      1.1  christos 
   3903      1.1  christos 	ld	[in3+4], out1             ! key 8642
   3904      1.1  christos 	add	global1, 768, global4     ! address sbox 4
   3905      1.1  christos 	ba	.ede3.enc.next.block_2
   3906      1.1  christos 	add	in1, 8, in1
   3907      1.1  christos 
   3908      1.1  christos .ede3.enc.next.block_fp:
   3909      1.1  christos 
   3910      1.1  christos 
   3911      1.1  christos 
   3912      1.1  christos ! fp_macro
   3913      1.1  christos ! in5 out5
   3914      1.1  christos 
   3915      1.1  christos 	! initially undo the rotate 3 left done after initial permutation
   3916      1.1  christos 	! original left is received shifted 3 right and 29 left in local3/4
   3917      1.1  christos 
   3918      1.1  christos 	sll	out5, 29, local1
   3919      1.1  christos 	or	local3, local4, in5
   3920      1.1  christos 
   3921      1.1  christos 	srl	out5, 3, out5
   3922      1.1  christos 	sethi	%hi(0x55555555), local2
   3923      1.1  christos 
   3924      1.1  christos 	or	out5, local1, out5
   3925      1.1  christos 	or	local2, %lo(0x55555555), local2
   3926      1.1  christos 
   3927      1.1  christos 	srl	out5, 1, local3
   3928      1.1  christos 	sethi	%hi(0x00ff00ff), local1
   3929      1.1  christos 	xor	local3, in5, local3
   3930      1.1  christos 	or	local1, %lo(0x00ff00ff), local1
   3931      1.1  christos 	and	local3, local2, local3
   3932      1.1  christos 	sethi	%hi(0x33333333), local4
   3933      1.1  christos 	sll	local3, 1, local2
   3934      1.1  christos 
   3935      1.1  christos 	xor	in5, local3, in5
   3936      1.1  christos 
   3937      1.1  christos 	srl	in5, 8, local3
   3938      1.1  christos 	xor	out5, local2, out5
   3939      1.1  christos 	xor	local3, out5, local3
   3940      1.1  christos 	or	local4, %lo(0x33333333), local4
   3941      1.1  christos 	and	local3, local1, local3
   3942      1.1  christos 	sethi	%hi(0x0000ffff), local1
   3943      1.1  christos 	sll	local3, 8, local2
   3944      1.1  christos 
   3945      1.1  christos 	xor	out5, local3, out5
   3946      1.1  christos 
   3947      1.1  christos 	srl	out5, 2, local3
   3948      1.1  christos 	xor	in5, local2, in5
   3949      1.1  christos 	xor	local3, in5, local3
   3950      1.1  christos 	or	local1, %lo(0x0000ffff), local1
   3951      1.1  christos 	and	local3, local4, local3
   3952      1.1  christos 	sethi	%hi(0x0f0f0f0f), local4
   3953      1.1  christos 	sll	local3, 2, local2
   3954      1.1  christos 
   3955      1.1  christos 
   3956      1.1  christos 	xor	in5, local3, in5
   3957      1.1  christos 
   3958      1.1  christos 
   3959      1.1  christos 	srl	in5, 16, local3
   3960      1.1  christos 	xor	out5, local2, out5
   3961      1.1  christos 	xor	local3, out5, local3
   3962      1.1  christos 	or	local4, %lo(0x0f0f0f0f), local4
   3963      1.1  christos 	and	local3, local1, local3
   3964      1.1  christos 	sll	local3, 16, local2
   3965      1.1  christos 
   3966      1.1  christos 	xor	out5, local3, local1
   3967      1.1  christos 
   3968      1.1  christos 	srl	local1, 4, local3
   3969      1.1  christos 	xor	in5, local2, in5
   3970      1.1  christos 	xor	local3, in5, local3
   3971      1.1  christos 	and	local3, local4, local3
   3972      1.1  christos 	sll	local3, 4, local2
   3973      1.1  christos 
   3974      1.1  christos 	xor	in5, local3, in5
   3975      1.1  christos 
   3976      1.1  christos 	! optional store:
   3977      1.1  christos 
   3978      1.1  christos 
   3979      1.1  christos 
   3980      1.1  christos 	xor	local1, local2, out5
   3981      1.1  christos 
   3982      1.1  christos 
   3983      1.1  christos 
   3984      1.1  christos 
   3985      1.1  christos 
   3986      1.1  christos 
   3987      1.1  christos 
   3988      1.1  christos ! store_little_endian
   3989      1.1  christos ! in1 in5 out5 local3 .SLE5
   3990      1.1  christos 
   3991      1.1  christos 	! rightmost in register to first in memory
   3992      1.1  christos 
   3993      1.1  christos .SLE5:
   3994      1.1  christos 	and	in5, 255, local3
   3995      1.1  christos 	stub	local3, [in1+0]
   3996      1.1  christos 
   3997      1.1  christos 	srl	in5, 8, local3
   3998      1.1  christos 	and	local3, 255, local3
   3999      1.1  christos 	stub	local3, [in1+1]
   4000      1.1  christos 
   4001      1.1  christos 	srl	in5, 16, local3
   4002      1.1  christos 	and	local3, 255, local3
   4003      1.1  christos 	stub	local3, [in1+2]
   4004      1.1  christos 
   4005      1.1  christos 	srl	in5, 24, local3
   4006      1.1  christos 	stub	local3, [in1+3]
   4007      1.1  christos 
   4008      1.1  christos 
   4009      1.1  christos 	and	out5, 255, local3
   4010      1.1  christos 	stub	local3, [in1+0+4]
   4011      1.1  christos 
   4012      1.1  christos 	srl	out5, 8, local3
   4013      1.1  christos 	and	local3, 255, local3
   4014      1.1  christos 	stub	local3, [in1+1+4]
   4015      1.1  christos 
   4016      1.1  christos 	srl	out5, 16, local3
   4017      1.1  christos 	and	local3, 255, local3
   4018      1.1  christos 	stub	local3, [in1+2+4]
   4019      1.1  christos 
   4020      1.1  christos 	srl	out5, 24, local3
   4021      1.1  christos 	stub	local3, [in1+3+4]
   4022      1.1  christos 
   4023      1.1  christos .SLE5a:
   4024      1.1  christos 
   4025      1.1  christos   ! block
   4026      1.1  christos 
   4027      1.1  christos 	addcc   in2, -8, in2              ! bytes missing when next block done
   4028      1.1  christos 
   4029      1.1  christos 	bpos	.ede3.enc.next.block
   4030      1.1  christos 	add	in1, 8, in1
   4031      1.1  christos 
   4032      1.1  christos .ede3.enc.seven.or.less:
   4033      1.1  christos 
   4034      1.1  christos 	cmp	in2, -8
   4035      1.1  christos 
   4036      1.1  christos 	ble	.ede3.enc.finish
   4037      1.1  christos 	nop
   4038      1.1  christos 
   4039      1.1  christos 	add	in2, 8, local1            ! bytes to load
   4040      1.1  christos 
   4041      1.1  christos 	! addr, length, dest left, dest right, temp, local3, label, ret label
   4042      1.1  christos 
   4043      1.1  christos 
   4044      1.1  christos ! load_n_bytes
   4045      1.1  christos ! in0 local1 local2 local3 .LNB2 .ede3.enc.next.block_1 .LNB2 .ede3.enc.next.block_1
   4046      1.1  christos 
   4047      1.1  christos .LNB2.0:	call	.+8
   4048      1.1  christos 	sll	local1, 2, local3
   4049      1.1  christos 
   4050      1.1  christos 	add	%o7,.LNB2.jmp.table-.LNB2.0,local2
   4051      1.1  christos 
   4052      1.1  christos 	add	local2, local3, local2
   4053      1.1  christos 	mov	0, out4
   4054      1.1  christos 
   4055      1.1  christos 	ld	[local2], local2
   4056      1.1  christos 
   4057      1.1  christos 	jmp	%o7+local2
   4058      1.1  christos 	mov	0, global4
   4059      1.1  christos 
   4060      1.1  christos .LNB2.7:
   4061      1.1  christos 	ldub	[in0+6], local2
   4062      1.1  christos 	sll	local2, 16, local2
   4063      1.1  christos 	or	global4, local2, global4
   4064      1.1  christos .LNB2.6:
   4065      1.1  christos 	ldub	[in0+5], local2
   4066      1.1  christos 	sll	local2, 8, local2
   4067      1.1  christos 	or	global4, local2, global4
   4068      1.1  christos .LNB2.5:
   4069      1.1  christos 	ldub	[in0+4], local2
   4070      1.1  christos 	or	global4, local2, global4
   4071      1.1  christos .LNB2.4:
   4072      1.1  christos 	ldub	[in0+3], local2
   4073      1.1  christos 	sll	local2, 24, local2
   4074      1.1  christos 	or	out4, local2, out4
   4075      1.1  christos .LNB2.3:
   4076      1.1  christos 	ldub	[in0+2], local2
   4077      1.1  christos 	sll	local2, 16, local2
   4078      1.1  christos 	or	out4, local2, out4
   4079      1.1  christos .LNB2.2:
   4080      1.1  christos 	ldub	[in0+1], local2
   4081      1.1  christos 	sll	local2, 8, local2
   4082      1.1  christos 	or	out4, local2, out4
   4083      1.1  christos .LNB2.1:
   4084      1.1  christos 	ldub	[in0+0], local2
   4085      1.1  christos 	ba	.ede3.enc.next.block_1
   4086      1.1  christos 	or	out4, local2, out4
   4087      1.1  christos 
   4088      1.1  christos 	.align 4
   4089      1.1  christos 
   4090      1.1  christos .LNB2.jmp.table:
   4091      1.1  christos 	.word	0
   4092      1.1  christos 	.word	.LNB2.1-.LNB2.0
   4093      1.1  christos 	.word	.LNB2.2-.LNB2.0
   4094      1.1  christos 	.word	.LNB2.3-.LNB2.0
   4095      1.1  christos 	.word	.LNB2.4-.LNB2.0
   4096      1.1  christos 	.word	.LNB2.5-.LNB2.0
   4097      1.1  christos 	.word	.LNB2.6-.LNB2.0
   4098      1.1  christos 	.word	.LNB2.7-.LNB2.0
   4099      1.1  christos 
   4100      1.1  christos 
   4101      1.1  christos .ede3.enc.finish:
   4102      1.1  christos 
   4103      1.1  christos 	LDPTR	[%fp+BIAS+ARG0+6*ARGSZ], local4          ! ivec
   4104      1.1  christos 
   4105      1.1  christos 
   4106      1.1  christos ! store_little_endian
   4107      1.1  christos ! local4 in5 out5 local5 .SLE6
   4108      1.1  christos 
   4109      1.1  christos 	! rightmost in register to first in memory
   4110      1.1  christos 
   4111      1.1  christos .SLE6:
   4112      1.1  christos 	and	in5, 255, local5
   4113      1.1  christos 	stub	local5, [local4+0]
   4114      1.1  christos 
   4115      1.1  christos 	srl	in5, 8, local5
   4116      1.1  christos 	and	local5, 255, local5
   4117      1.1  christos 	stub	local5, [local4+1]
   4118      1.1  christos 
   4119      1.1  christos 	srl	in5, 16, local5
   4120      1.1  christos 	and	local5, 255, local5
   4121      1.1  christos 	stub	local5, [local4+2]
   4122      1.1  christos 
   4123      1.1  christos 	srl	in5, 24, local5
   4124      1.1  christos 	stub	local5, [local4+3]
   4125      1.1  christos 
   4126      1.1  christos 
   4127      1.1  christos 	and	out5, 255, local5
   4128      1.1  christos 	stub	local5, [local4+0+4]
   4129      1.1  christos 
   4130      1.1  christos 	srl	out5, 8, local5
   4131      1.1  christos 	and	local5, 255, local5
   4132      1.1  christos 	stub	local5, [local4+1+4]
   4133      1.1  christos 
   4134      1.1  christos 	srl	out5, 16, local5
   4135      1.1  christos 	and	local5, 255, local5
   4136      1.1  christos 	stub	local5, [local4+2+4]
   4137      1.1  christos 
   4138      1.1  christos 	srl	out5, 24, local5
   4139      1.1  christos 	stub	local5, [local4+3+4]
   4140      1.1  christos 
   4141      1.1  christos .SLE6a:
   4142      1.1  christos 
   4143      1.1  christos   ! ivec
   4144      1.1  christos 
   4145      1.1  christos 	ret
   4146      1.1  christos 	restore
   4147      1.1  christos 
   4148      1.1  christos .ede3.dec:
   4149      1.1  christos 
   4150      1.1  christos 	STPTR	in0,  [%sp+BIAS+ARG0+0*ARGSZ]
   4151      1.1  christos 	add	in5, 120, in5
   4152      1.1  christos 
   4153      1.1  christos 	STPTR	in1,  [%sp+BIAS+ARG0+1*ARGSZ]
   4154      1.1  christos 	mov	in0, local5
   4155      1.1  christos 	add	in3, 120, in3
   4156      1.1  christos 
   4157      1.1  christos 	STPTR	in3,  [%sp+BIAS+ARG0+3*ARGSZ]
   4158      1.1  christos 	cmp	in2, 0
   4159      1.1  christos 
   4160      1.1  christos 	ble	.ede3.dec.finish
   4161      1.1  christos 	STPTR	in5,  [%sp+BIAS+ARG0+5*ARGSZ]
   4162      1.1  christos 
   4163      1.1  christos 	LDPTR	[%fp+BIAS+ARG0+6*ARGSZ], local7          ! iv
   4164      1.1  christos 
   4165      1.1  christos 
   4166      1.1  christos ! load_little_endian
   4167      1.1  christos ! local7 in0 in1 local3 .LLE8
   4168      1.1  christos 
   4169      1.1  christos 	! first in memory to rightmost in register
   4170      1.1  christos 
   4171      1.1  christos .LLE8:
   4172      1.1  christos 	ldub	[local7+3], in0
   4173      1.1  christos 
   4174      1.1  christos 	ldub	[local7+2], local3
   4175      1.1  christos 	sll	in0, 8, in0
   4176      1.1  christos 	or	in0, local3, in0
   4177      1.1  christos 
   4178      1.1  christos 	ldub	[local7+1], local3
   4179      1.1  christos 	sll	in0, 8, in0
   4180      1.1  christos 	or	in0, local3, in0
   4181      1.1  christos 
   4182      1.1  christos 	ldub	[local7+0], local3
   4183      1.1  christos 	sll	in0, 8, in0
   4184      1.1  christos 	or	in0, local3, in0
   4185      1.1  christos 
   4186      1.1  christos 
   4187      1.1  christos 	ldub	[local7+3+4], in1
   4188      1.1  christos 
   4189      1.1  christos 	ldub	[local7+2+4], local3
   4190      1.1  christos 	sll	in1, 8, in1
   4191      1.1  christos 	or	in1, local3, in1
   4192      1.1  christos 
   4193      1.1  christos 	ldub	[local7+1+4], local3
   4194      1.1  christos 	sll	in1, 8, in1
   4195      1.1  christos 	or	in1, local3, in1
   4196      1.1  christos 
   4197      1.1  christos 	ldub	[local7+0+4], local3
   4198      1.1  christos 	sll	in1, 8, in1
   4199      1.1  christos 	or	in1, local3, in1
   4200      1.1  christos .LLE8a:
   4201      1.1  christos 
   4202      1.1  christos 
   4203      1.1  christos 
   4204      1.1  christos .ede3.dec.next.block:
   4205      1.1  christos 
   4206      1.1  christos 
   4207      1.1  christos 
   4208      1.1  christos ! load_little_endian
   4209      1.1  christos ! local5 in5 out5 local3 .LLE9
   4210      1.1  christos 
   4211      1.1  christos 	! first in memory to rightmost in register
   4212      1.1  christos 
   4213      1.1  christos .LLE9:
   4214      1.1  christos 	ldub	[local5+3], in5
   4215      1.1  christos 
   4216      1.1  christos 	ldub	[local5+2], local3
   4217      1.1  christos 	sll	in5, 8, in5
   4218      1.1  christos 	or	in5, local3, in5
   4219      1.1  christos 
   4220      1.1  christos 	ldub	[local5+1], local3
   4221      1.1  christos 	sll	in5, 8, in5
   4222      1.1  christos 	or	in5, local3, in5
   4223      1.1  christos 
   4224      1.1  christos 	ldub	[local5+0], local3
   4225      1.1  christos 	sll	in5, 8, in5
   4226      1.1  christos 	or	in5, local3, in5
   4227      1.1  christos 
   4228      1.1  christos 
   4229      1.1  christos 	ldub	[local5+3+4], out5
   4230      1.1  christos 
   4231      1.1  christos 	ldub	[local5+2+4], local3
   4232      1.1  christos 	sll	out5, 8, out5
   4233      1.1  christos 	or	out5, local3, out5
   4234      1.1  christos 
   4235      1.1  christos 	ldub	[local5+1+4], local3
   4236      1.1  christos 	sll	out5, 8, out5
   4237      1.1  christos 	or	out5, local3, out5
   4238      1.1  christos 
   4239      1.1  christos 	ldub	[local5+0+4], local3
   4240      1.1  christos 	sll	out5, 8, out5
   4241      1.1  christos 	or	out5, local3, out5
   4242      1.1  christos .LLE9a:
   4243      1.1  christos 
   4244      1.1  christos 
   4245      1.1  christos 
   4246      1.1  christos 	! parameter 6  1/2 for include encryption/decryption
   4247      1.1  christos 	! parameter 7  1 for mov in1 to in3
   4248      1.1  christos 	! parameter 8  1 for mov in3 to in4
   4249      1.1  christos 	! parameter 9  1 for load ks3 and ks2 to in4 and in3
   4250      1.1  christos 
   4251      1.1  christos 
   4252      1.1  christos 
   4253      1.1  christos ! ip_macro
   4254      1.1  christos ! in5 out5 in5 out5 in4 2 0 0 1
   4255      1.1  christos 
   4256      1.1  christos 	ld	[out2+256], local1
   4257      1.1  christos 	srl	out5, 4, local4
   4258      1.1  christos 
   4259      1.1  christos 	xor	local4, in5, local4
   4260      1.1  christos 	nop
   4261      1.1  christos 
   4262      1.1  christos 	ld	[out2+260], local2
   4263      1.1  christos 	and	local4, local1, local4
   4264      1.1  christos 
   4265      1.1  christos 
   4266      1.1  christos 
   4267      1.1  christos 	ld	[out2+280], out4          ! loop counter
   4268      1.1  christos 	sll	local4, 4, local1
   4269      1.1  christos 	xor	in5, local4, in5
   4270      1.1  christos 
   4271      1.1  christos 	ld	[out2+264], local3
   4272      1.1  christos 	srl	in5, 16, local4
   4273      1.1  christos 	xor	out5, local1, out5
   4274      1.1  christos 
   4275      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+5*ARGSZ] , in4
   4276      1.1  christos 	xor	local4, out5, local4
   4277      1.1  christos 	nop	!sethi	%hi(DES_SPtrans), global1 ! sbox addr
   4278      1.1  christos 
   4279      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+4*ARGSZ] , in3
   4280      1.1  christos 	and	local4, local2, local4
   4281      1.1  christos 	nop	!or	global1, %lo(DES_SPtrans), global1   ! sbox addr
   4282      1.1  christos 
   4283      1.1  christos 	sll	local4, 16, local1
   4284      1.1  christos 	xor	out5, local4, out5
   4285      1.1  christos 
   4286      1.1  christos 	srl	out5, 2, local4
   4287      1.1  christos 	xor	in5, local1, in5
   4288      1.1  christos 
   4289      1.1  christos 	sethi	%hi(16711680), local5
   4290      1.1  christos 	xor	local4, in5, local4
   4291      1.1  christos 
   4292      1.1  christos 	and	local4, local3, local4
   4293      1.1  christos 	or	local5, 255, local5
   4294      1.1  christos 
   4295      1.1  christos 	sll	local4, 2, local2
   4296      1.1  christos 	xor	in5, local4, in5
   4297      1.1  christos 
   4298      1.1  christos 	srl	in5, 8, local4
   4299      1.1  christos 	xor	out5, local2, out5
   4300      1.1  christos 
   4301      1.1  christos 	xor	local4, out5, local4
   4302      1.1  christos 	add	global1, 768, global4
   4303      1.1  christos 
   4304      1.1  christos 	and	local4, local5, local4
   4305      1.1  christos 	add	global1, 1024, global5
   4306      1.1  christos 
   4307      1.1  christos 	ld	[out2+272], local7
   4308      1.1  christos 	sll	local4, 8, local1
   4309      1.1  christos 	xor	out5, local4, out5
   4310      1.1  christos 
   4311      1.1  christos 	srl	out5, 1, local4
   4312      1.1  christos 	xor	in5, local1, in5
   4313      1.1  christos 
   4314      1.1  christos 	ld	[in4], out0                ! key 7531
   4315      1.1  christos 	xor	local4, in5, local4
   4316      1.1  christos 	add	global1, 256, global2
   4317      1.1  christos 
   4318      1.1  christos 	ld	[in4+4], out1              ! key 8642
   4319      1.1  christos 	and	local4, local7, local4
   4320      1.1  christos 	add	global1, 512, global3
   4321      1.1  christos 
   4322      1.1  christos 	sll	local4, 1, local1
   4323      1.1  christos 	xor	in5, local4, in5
   4324      1.1  christos 
   4325      1.1  christos 	sll	in5, 3, local3
   4326      1.1  christos 	xor	out5, local1, out5
   4327      1.1  christos 
   4328      1.1  christos 	sll	out5, 3, local2
   4329      1.1  christos 	add	global1, 1280, local6     ! address sbox 8
   4330      1.1  christos 
   4331      1.1  christos 	srl	in5, 29, local4
   4332      1.1  christos 	add	global1, 1792, out3       ! address sbox 8
   4333      1.1  christos 
   4334      1.1  christos 	srl	out5, 29, local1
   4335      1.1  christos 	or	local4, local3, in5
   4336      1.1  christos 
   4337      1.1  christos 	or	local2, local1, out5
   4338      1.1  christos 
   4339      1.1  christos 
   4340      1.1  christos 
   4341      1.1  christos 
   4342      1.1  christos 
   4343      1.1  christos 		ld	[out2+284], local5     ! 0x0000FC00 used in the rounds
   4344      1.1  christos 		or	local2, local1, out5
   4345      1.1  christos 		xor	in5, out0, local1
   4346      1.1  christos 
   4347      1.1  christos 		call .des_dec.1
   4348      1.1  christos 		and	local1, 252, local1
   4349      1.1  christos 
   4350      1.1  christos 
   4351      1.1  christos  ! inc .des_dec ks3 in4
   4352      1.1  christos 
   4353      1.1  christos 	call .des_enc                     ! ks2 in3
   4354      1.1  christos 	LDPTR	 [%sp+BIAS+ARG0+3*ARGSZ] , in4
   4355      1.1  christos 
   4356      1.1  christos 	call .des_dec                     ! ks1 in4
   4357      1.1  christos 	nop
   4358      1.1  christos 
   4359      1.1  christos 
   4360      1.1  christos 
   4361      1.1  christos ! fp_macro
   4362      1.1  christos ! out5 in5 0 1
   4363      1.1  christos 
   4364      1.1  christos 	! initially undo the rotate 3 left done after initial permutation
   4365      1.1  christos 	! original left is received shifted 3 right and 29 left in local3/4
   4366      1.1  christos 
   4367      1.1  christos 	sll	in5, 29, local1
   4368      1.1  christos 	or	local3, local4, out5
   4369      1.1  christos 
   4370      1.1  christos 	srl	in5, 3, in5
   4371      1.1  christos 	sethi	%hi(0x55555555), local2
   4372      1.1  christos 
   4373      1.1  christos 	or	in5, local1, in5
   4374      1.1  christos 	or	local2, %lo(0x55555555), local2
   4375      1.1  christos 
   4376      1.1  christos 	srl	in5, 1, local3
   4377      1.1  christos 	sethi	%hi(0x00ff00ff), local1
   4378      1.1  christos 	xor	local3, out5, local3
   4379      1.1  christos 	or	local1, %lo(0x00ff00ff), local1
   4380      1.1  christos 	and	local3, local2, local3
   4381      1.1  christos 	sethi	%hi(0x33333333), local4
   4382      1.1  christos 	sll	local3, 1, local2
   4383      1.1  christos 
   4384      1.1  christos 	xor	out5, local3, out5
   4385      1.1  christos 
   4386      1.1  christos 	srl	out5, 8, local3
   4387      1.1  christos 	xor	in5, local2, in5
   4388      1.1  christos 	xor	local3, in5, local3
   4389      1.1  christos 	or	local4, %lo(0x33333333), local4
   4390      1.1  christos 	and	local3, local1, local3
   4391      1.1  christos 	sethi	%hi(0x0000ffff), local1
   4392      1.1  christos 	sll	local3, 8, local2
   4393      1.1  christos 
   4394      1.1  christos 	xor	in5, local3, in5
   4395      1.1  christos 
   4396      1.1  christos 	srl	in5, 2, local3
   4397      1.1  christos 	xor	out5, local2, out5
   4398      1.1  christos 	xor	local3, out5, local3
   4399      1.1  christos 	or	local1, %lo(0x0000ffff), local1
   4400      1.1  christos 	and	local3, local4, local3
   4401      1.1  christos 	sethi	%hi(0x0f0f0f0f), local4
   4402      1.1  christos 	sll	local3, 2, local2
   4403      1.1  christos 
   4404      1.1  christos 	LDPTR  [%sp+BIAS+ARG0+0*ARGSZ] , local5
   4405      1.1  christos 	xor	out5, local3, out5
   4406      1.1  christos 
   4407      1.1  christos 	LDPTR  [%sp+BIAS+ARG0+1*ARGSZ] , local7
   4408      1.1  christos 	srl	out5, 16, local3
   4409      1.1  christos 	xor	in5, local2, in5
   4410      1.1  christos 	xor	local3, in5, local3
   4411      1.1  christos 	or	local4, %lo(0x0f0f0f0f), local4
   4412      1.1  christos 	and	local3, local1, local3
   4413      1.1  christos 	sll	local3, 16, local2
   4414      1.1  christos 
   4415      1.1  christos 	xor	in5, local3, local1
   4416      1.1  christos 
   4417      1.1  christos 	srl	local1, 4, local3
   4418      1.1  christos 	xor	out5, local2, out5
   4419      1.1  christos 	xor	local3, out5, local3
   4420      1.1  christos 	and	local3, local4, local3
   4421      1.1  christos 	sll	local3, 4, local2
   4422      1.1  christos 
   4423      1.1  christos 	xor	out5, local3, out5
   4424      1.1  christos 
   4425      1.1  christos 	! optional store:
   4426      1.1  christos 
   4427      1.1  christos 
   4428      1.1  christos 
   4429      1.1  christos 	xor	local1, local2, in5
   4430      1.1  christos 
   4431      1.1  christos 
   4432      1.1  christos 
   4433      1.1  christos    ! 1 for input and output address local5/7
   4434      1.1  christos 
   4435      1.1  christos 	! in2 is bytes left to be stored
   4436      1.1  christos 	! in2 is compared to 8 in the rounds
   4437      1.1  christos 
   4438      1.1  christos 	xor	out5, in0, out4
   4439      1.1  christos 	bl	.ede3.dec.seven.or.less
   4440      1.1  christos 	xor	in5, in1, global4
   4441      1.1  christos 
   4442      1.1  christos 
   4443      1.1  christos 
   4444      1.1  christos ! load_little_endian_inc
   4445      1.1  christos ! local5 in0 in1 local3 .LLE10
   4446      1.1  christos 
   4447      1.1  christos 	! first in memory to rightmost in register
   4448      1.1  christos 
   4449      1.1  christos .LLE10:
   4450      1.1  christos 	ldub	[local5+3], in0
   4451      1.1  christos 
   4452      1.1  christos 	ldub	[local5+2], local3
   4453      1.1  christos 	sll	in0, 8, in0
   4454      1.1  christos 	or	in0, local3, in0
   4455      1.1  christos 
   4456      1.1  christos 	ldub	[local5+1], local3
   4457      1.1  christos 	sll	in0, 8, in0
   4458      1.1  christos 	or	in0, local3, in0
   4459      1.1  christos 
   4460      1.1  christos 	ldub	[local5+0], local3
   4461      1.1  christos 	sll	in0, 8, in0
   4462      1.1  christos 	or	in0, local3, in0
   4463      1.1  christos 
   4464      1.1  christos 	ldub	[local5+3+4], in1
   4465      1.1  christos 	add	local5, 8, local5
   4466      1.1  christos 
   4467      1.1  christos 	ldub	[local5+2+4-8], local3
   4468      1.1  christos 	sll	in1, 8, in1
   4469      1.1  christos 	or	in1, local3, in1
   4470      1.1  christos 
   4471      1.1  christos 	ldub	[local5+1+4-8], local3
   4472      1.1  christos 	sll	in1, 8, in1
   4473      1.1  christos 	or	in1, local3, in1
   4474      1.1  christos 
   4475      1.1  christos 	ldub	[local5+0+4-8], local3
   4476      1.1  christos 	sll	in1, 8, in1
   4477      1.1  christos 	or	in1, local3, in1
   4478      1.1  christos .LLE10a:
   4479      1.1  christos 
   4480      1.1  christos    ! iv next block
   4481      1.1  christos 
   4482      1.1  christos 
   4483      1.1  christos 
   4484      1.1  christos ! store_little_endian
   4485      1.1  christos ! local7 out4 global4 local3 .SLE7
   4486      1.1  christos 
   4487      1.1  christos 	! rightmost in register to first in memory
   4488      1.1  christos 
   4489      1.1  christos .SLE7:
   4490      1.1  christos 	and	out4, 255, local3
   4491      1.1  christos 	stub	local3, [local7+0]
   4492      1.1  christos 
   4493      1.1  christos 	srl	out4, 8, local3
   4494      1.1  christos 	and	local3, 255, local3
   4495      1.1  christos 	stub	local3, [local7+1]
   4496      1.1  christos 
   4497      1.1  christos 	srl	out4, 16, local3
   4498      1.1  christos 	and	local3, 255, local3
   4499      1.1  christos 	stub	local3, [local7+2]
   4500      1.1  christos 
   4501      1.1  christos 	srl	out4, 24, local3
   4502      1.1  christos 	stub	local3, [local7+3]
   4503      1.1  christos 
   4504      1.1  christos 
   4505      1.1  christos 	and	global4, 255, local3
   4506      1.1  christos 	stub	local3, [local7+0+4]
   4507      1.1  christos 
   4508      1.1  christos 	srl	global4, 8, local3
   4509      1.1  christos 	and	local3, 255, local3
   4510      1.1  christos 	stub	local3, [local7+1+4]
   4511      1.1  christos 
   4512      1.1  christos 	srl	global4, 16, local3
   4513      1.1  christos 	and	local3, 255, local3
   4514      1.1  christos 	stub	local3, [local7+2+4]
   4515      1.1  christos 
   4516      1.1  christos 	srl	global4, 24, local3
   4517      1.1  christos 	stub	local3, [local7+3+4]
   4518      1.1  christos 
   4519      1.1  christos .SLE7a:
   4520      1.1  christos 
   4521      1.1  christos   ! block
   4522      1.1  christos 
   4523      1.1  christos 	STPTR	local5,  [%sp+BIAS+ARG0+0*ARGSZ]
   4524      1.1  christos 	addcc   in2, -8, in2
   4525      1.1  christos 	add	local7, 8, local7
   4526      1.1  christos 
   4527      1.1  christos 	bg	.ede3.dec.next.block
   4528      1.1  christos 	STPTR	local7,  [%sp+BIAS+ARG0+1*ARGSZ]
   4529      1.1  christos 
   4530      1.1  christos .ede3.dec.store.iv:
   4531      1.1  christos 
   4532      1.1  christos 	LDPTR	[%fp+BIAS+ARG0+6*ARGSZ], local4          ! ivec
   4533      1.1  christos 
   4534      1.1  christos 
   4535      1.1  christos ! store_little_endian
   4536      1.1  christos ! local4 in0 in1 local5 .SLE8
   4537      1.1  christos 
   4538      1.1  christos 	! rightmost in register to first in memory
   4539      1.1  christos 
   4540      1.1  christos .SLE8:
   4541      1.1  christos 	and	in0, 255, local5
   4542      1.1  christos 	stub	local5, [local4+0]
   4543      1.1  christos 
   4544      1.1  christos 	srl	in0, 8, local5
   4545      1.1  christos 	and	local5, 255, local5
   4546      1.1  christos 	stub	local5, [local4+1]
   4547      1.1  christos 
   4548      1.1  christos 	srl	in0, 16, local5
   4549      1.1  christos 	and	local5, 255, local5
   4550      1.1  christos 	stub	local5, [local4+2]
   4551      1.1  christos 
   4552      1.1  christos 	srl	in0, 24, local5
   4553      1.1  christos 	stub	local5, [local4+3]
   4554      1.1  christos 
   4555      1.1  christos 
   4556      1.1  christos 	and	in1, 255, local5
   4557      1.1  christos 	stub	local5, [local4+0+4]
   4558      1.1  christos 
   4559      1.1  christos 	srl	in1, 8, local5
   4560      1.1  christos 	and	local5, 255, local5
   4561      1.1  christos 	stub	local5, [local4+1+4]
   4562      1.1  christos 
   4563      1.1  christos 	srl	in1, 16, local5
   4564      1.1  christos 	and	local5, 255, local5
   4565      1.1  christos 	stub	local5, [local4+2+4]
   4566      1.1  christos 
   4567      1.1  christos 	srl	in1, 24, local5
   4568      1.1  christos 	stub	local5, [local4+3+4]
   4569      1.1  christos 
   4570      1.1  christos .SLE8a:
   4571      1.1  christos 
   4572      1.1  christos   ! ivec
   4573      1.1  christos 
   4574      1.1  christos .ede3.dec.finish:
   4575      1.1  christos 
   4576      1.1  christos 	ret
   4577      1.1  christos 	restore
   4578      1.1  christos 
   4579      1.1  christos .ede3.dec.seven.or.less:
   4580      1.1  christos 
   4581      1.1  christos 
   4582      1.1  christos 
   4583      1.1  christos ! load_little_endian_inc
   4584      1.1  christos ! local5 in0 in1 local3 .LLE14
   4585      1.1  christos 
   4586      1.1  christos 	! first in memory to rightmost in register
   4587      1.1  christos 
   4588      1.1  christos .LLE14:
   4589      1.1  christos 	ldub	[local5+3], in0
   4590      1.1  christos 
   4591      1.1  christos 	ldub	[local5+2], local3
   4592      1.1  christos 	sll	in0, 8, in0
   4593      1.1  christos 	or	in0, local3, in0
   4594      1.1  christos 
   4595      1.1  christos 	ldub	[local5+1], local3
   4596      1.1  christos 	sll	in0, 8, in0
   4597      1.1  christos 	or	in0, local3, in0
   4598      1.1  christos 
   4599      1.1  christos 	ldub	[local5+0], local3
   4600      1.1  christos 	sll	in0, 8, in0
   4601      1.1  christos 	or	in0, local3, in0
   4602      1.1  christos 
   4603      1.1  christos 	ldub	[local5+3+4], in1
   4604      1.1  christos 	add	local5, 8, local5
   4605      1.1  christos 
   4606      1.1  christos 	ldub	[local5+2+4-8], local3
   4607      1.1  christos 	sll	in1, 8, in1
   4608      1.1  christos 	or	in1, local3, in1
   4609      1.1  christos 
   4610      1.1  christos 	ldub	[local5+1+4-8], local3
   4611      1.1  christos 	sll	in1, 8, in1
   4612      1.1  christos 	or	in1, local3, in1
   4613      1.1  christos 
   4614      1.1  christos 	ldub	[local5+0+4-8], local3
   4615      1.1  christos 	sll	in1, 8, in1
   4616      1.1  christos 	or	in1, local3, in1
   4617      1.1  christos .LLE14a:
   4618      1.1  christos 
   4619      1.1  christos      ! iv
   4620      1.1  christos 
   4621      1.1  christos 
   4622      1.1  christos 
   4623      1.1  christos ! store_n_bytes
   4624      1.1  christos ! local7 in2 local3 local4 .SNB2 .ede3.dec.store.iv .SNB2 .ede3.dec.store.iv
   4625      1.1  christos 
   4626      1.1  christos .SNB2.0:	call	.+8
   4627      1.1  christos 	sll	in2, 2, local4
   4628      1.1  christos 
   4629      1.1  christos 	add	%o7,.SNB2.jmp.table-.SNB2.0,local3
   4630      1.1  christos 
   4631      1.1  christos 	add	local3, local4, local3
   4632      1.1  christos 
   4633      1.1  christos 	ld	[local3], local3
   4634      1.1  christos 
   4635      1.1  christos 	jmp	%o7+local3
   4636      1.1  christos 	nop
   4637      1.1  christos 
   4638      1.1  christos .SNB2.7:
   4639      1.1  christos 	srl	global4, 16, local3
   4640      1.1  christos 	and	local3, 0xff, local3
   4641      1.1  christos 	stub	local3, [local7+6]
   4642      1.1  christos .SNB2.6:
   4643      1.1  christos 	srl	global4, 8, local3
   4644      1.1  christos 	and	local3, 0xff, local3
   4645      1.1  christos 	stub	local3, [local7+5]
   4646      1.1  christos .SNB2.5:
   4647      1.1  christos 	and	global4, 0xff, local3
   4648      1.1  christos 	stub	local3, [local7+4]
   4649      1.1  christos .SNB2.4:
   4650      1.1  christos 	srl	out4, 24, local3
   4651      1.1  christos 	stub	local3, [local7+3]
   4652      1.1  christos .SNB2.3:
   4653      1.1  christos 	srl	out4, 16, local3
   4654      1.1  christos 	and	local3, 0xff, local3
   4655      1.1  christos 	stub	local3, [local7+2]
   4656      1.1  christos .SNB2.2:
   4657      1.1  christos 	srl	out4, 8, local3
   4658      1.1  christos 	and	local3, 0xff, local3
   4659      1.1  christos 	stub	local3, [local7+1]
   4660      1.1  christos .SNB2.1:
   4661      1.1  christos 	and	out4, 0xff, local3
   4662      1.1  christos 
   4663      1.1  christos 
   4664      1.1  christos 	ba	.ede3.dec.store.iv
   4665      1.1  christos 	stub	local3, [local7]
   4666      1.1  christos 
   4667      1.1  christos 	.align 4
   4668      1.1  christos 
   4669      1.1  christos .SNB2.jmp.table:
   4670      1.1  christos 
   4671      1.1  christos 	.word	0
   4672      1.1  christos 	.word	.SNB2.1-.SNB2.0
   4673      1.1  christos 	.word	.SNB2.2-.SNB2.0
   4674      1.1  christos 	.word	.SNB2.3-.SNB2.0
   4675      1.1  christos 	.word	.SNB2.4-.SNB2.0
   4676      1.1  christos 	.word	.SNB2.5-.SNB2.0
   4677      1.1  christos 	.word	.SNB2.6-.SNB2.0
   4678      1.1  christos 	.word	.SNB2.7-.SNB2.0
   4679      1.1  christos 
   4680      1.1  christos 
   4681      1.1  christos 
   4682      1.1  christos .DES_ede3_cbc_encrypt.end:
   4683      1.1  christos 	.size	 DES_ede3_cbc_encrypt,.DES_ede3_cbc_encrypt.end-DES_ede3_cbc_encrypt
   4684      1.1  christos 
   4685      1.1  christos 	.align	256
   4686      1.1  christos 	.type	 .des_and,#object
   4687      1.1  christos 	.size	 .des_and,284
   4688      1.1  christos 
   4689      1.1  christos .des_and:
   4690      1.1  christos 
   4691      1.1  christos ! This table is used for AND 0xFC when it is known that register
   4692      1.1  christos ! bits 8-31 are zero. Makes it possible to do three arithmetic
   4693      1.1  christos ! operations in one cycle.
   4694      1.1  christos 
   4695      1.1  christos 	.byte  0, 0, 0, 0, 4, 4, 4, 4
   4696      1.1  christos 	.byte  8, 8, 8, 8, 12, 12, 12, 12
   4697      1.1  christos 	.byte  16, 16, 16, 16, 20, 20, 20, 20
   4698      1.1  christos 	.byte  24, 24, 24, 24, 28, 28, 28, 28
   4699      1.1  christos 	.byte  32, 32, 32, 32, 36, 36, 36, 36
   4700      1.1  christos 	.byte  40, 40, 40, 40, 44, 44, 44, 44
   4701      1.1  christos 	.byte  48, 48, 48, 48, 52, 52, 52, 52
   4702      1.1  christos 	.byte  56, 56, 56, 56, 60, 60, 60, 60
   4703      1.1  christos 	.byte  64, 64, 64, 64, 68, 68, 68, 68
   4704      1.1  christos 	.byte  72, 72, 72, 72, 76, 76, 76, 76
   4705      1.1  christos 	.byte  80, 80, 80, 80, 84, 84, 84, 84
   4706      1.1  christos 	.byte  88, 88, 88, 88, 92, 92, 92, 92
   4707      1.1  christos 	.byte  96, 96, 96, 96, 100, 100, 100, 100
   4708      1.1  christos 	.byte  104, 104, 104, 104, 108, 108, 108, 108
   4709      1.1  christos 	.byte  112, 112, 112, 112, 116, 116, 116, 116
   4710      1.1  christos 	.byte  120, 120, 120, 120, 124, 124, 124, 124
   4711      1.1  christos 	.byte  128, 128, 128, 128, 132, 132, 132, 132
   4712      1.1  christos 	.byte  136, 136, 136, 136, 140, 140, 140, 140
   4713      1.1  christos 	.byte  144, 144, 144, 144, 148, 148, 148, 148
   4714      1.1  christos 	.byte  152, 152, 152, 152, 156, 156, 156, 156
   4715      1.1  christos 	.byte  160, 160, 160, 160, 164, 164, 164, 164
   4716      1.1  christos 	.byte  168, 168, 168, 168, 172, 172, 172, 172
   4717      1.1  christos 	.byte  176, 176, 176, 176, 180, 180, 180, 180
   4718      1.1  christos 	.byte  184, 184, 184, 184, 188, 188, 188, 188
   4719      1.1  christos 	.byte  192, 192, 192, 192, 196, 196, 196, 196
   4720      1.1  christos 	.byte  200, 200, 200, 200, 204, 204, 204, 204
   4721      1.1  christos 	.byte  208, 208, 208, 208, 212, 212, 212, 212
   4722      1.1  christos 	.byte  216, 216, 216, 216, 220, 220, 220, 220
   4723      1.1  christos 	.byte  224, 224, 224, 224, 228, 228, 228, 228
   4724      1.1  christos 	.byte  232, 232, 232, 232, 236, 236, 236, 236
   4725      1.1  christos 	.byte  240, 240, 240, 240, 244, 244, 244, 244
   4726      1.1  christos 	.byte  248, 248, 248, 248, 252, 252, 252, 252
   4727      1.1  christos 
   4728  1.1.1.2  christos 	! 5 numbers for initial/final permutation
   4729      1.1  christos 
   4730      1.1  christos 	.word   0x0f0f0f0f                ! offset 256
   4731      1.1  christos 	.word	0x0000ffff                ! 260
   4732      1.1  christos 	.word	0x33333333                ! 264
   4733      1.1  christos 	.word	0x00ff00ff                ! 268
   4734      1.1  christos 	.word	0x55555555                ! 272
   4735      1.1  christos 
   4736      1.1  christos 	.word	0                         ! 276
   4737      1.1  christos 	.word	LOOPS                     ! 280
   4738      1.1  christos 	.word	0x0000FC00                ! 284
   4739      1.1  christos 
   4740      1.1  christos 	.global	DES_SPtrans
   4741      1.1  christos 	.type	DES_SPtrans,#object
   4742      1.1  christos 	.size	DES_SPtrans,2048
   4743      1.1  christos .align	64
   4744      1.1  christos DES_SPtrans:
   4745      1.1  christos _PIC_DES_SPtrans:
   4746      1.1  christos 	! nibble 0
   4747      1.1  christos 	.word	0x02080800, 0x00080000, 0x02000002, 0x02080802
   4748      1.1  christos 	.word	0x02000000, 0x00080802, 0x00080002, 0x02000002
   4749      1.1  christos 	.word	0x00080802, 0x02080800, 0x02080000, 0x00000802
   4750      1.1  christos 	.word	0x02000802, 0x02000000, 0x00000000, 0x00080002
   4751      1.1  christos 	.word	0x00080000, 0x00000002, 0x02000800, 0x00080800
   4752      1.1  christos 	.word	0x02080802, 0x02080000, 0x00000802, 0x02000800
   4753      1.1  christos 	.word	0x00000002, 0x00000800, 0x00080800, 0x02080002
   4754      1.1  christos 	.word	0x00000800, 0x02000802, 0x02080002, 0x00000000
   4755      1.1  christos 	.word	0x00000000, 0x02080802, 0x02000800, 0x00080002
   4756      1.1  christos 	.word	0x02080800, 0x00080000, 0x00000802, 0x02000800
   4757      1.1  christos 	.word	0x02080002, 0x00000800, 0x00080800, 0x02000002
   4758      1.1  christos 	.word	0x00080802, 0x00000002, 0x02000002, 0x02080000
   4759      1.1  christos 	.word	0x02080802, 0x00080800, 0x02080000, 0x02000802
   4760      1.1  christos 	.word	0x02000000, 0x00000802, 0x00080002, 0x00000000
   4761      1.1  christos 	.word	0x00080000, 0x02000000, 0x02000802, 0x02080800
   4762      1.1  christos 	.word	0x00000002, 0x02080002, 0x00000800, 0x00080802
   4763      1.1  christos 	! nibble 1
   4764      1.1  christos 	.word	0x40108010, 0x00000000, 0x00108000, 0x40100000
   4765      1.1  christos 	.word	0x40000010, 0x00008010, 0x40008000, 0x00108000
   4766      1.1  christos 	.word	0x00008000, 0x40100010, 0x00000010, 0x40008000
   4767      1.1  christos 	.word	0x00100010, 0x40108000, 0x40100000, 0x00000010
   4768      1.1  christos 	.word	0x00100000, 0x40008010, 0x40100010, 0x00008000
   4769      1.1  christos 	.word	0x00108010, 0x40000000, 0x00000000, 0x00100010
   4770      1.1  christos 	.word	0x40008010, 0x00108010, 0x40108000, 0x40000010
   4771      1.1  christos 	.word	0x40000000, 0x00100000, 0x00008010, 0x40108010
   4772      1.1  christos 	.word	0x00100010, 0x40108000, 0x40008000, 0x00108010
   4773      1.1  christos 	.word	0x40108010, 0x00100010, 0x40000010, 0x00000000
   4774      1.1  christos 	.word	0x40000000, 0x00008010, 0x00100000, 0x40100010
   4775      1.1  christos 	.word	0x00008000, 0x40000000, 0x00108010, 0x40008010
   4776      1.1  christos 	.word	0x40108000, 0x00008000, 0x00000000, 0x40000010
   4777      1.1  christos 	.word	0x00000010, 0x40108010, 0x00108000, 0x40100000
   4778      1.1  christos 	.word	0x40100010, 0x00100000, 0x00008010, 0x40008000
   4779      1.1  christos 	.word	0x40008010, 0x00000010, 0x40100000, 0x00108000
   4780      1.1  christos 	! nibble 2
   4781      1.1  christos 	.word	0x04000001, 0x04040100, 0x00000100, 0x04000101
   4782      1.1  christos 	.word	0x00040001, 0x04000000, 0x04000101, 0x00040100
   4783      1.1  christos 	.word	0x04000100, 0x00040000, 0x04040000, 0x00000001
   4784      1.1  christos 	.word	0x04040101, 0x00000101, 0x00000001, 0x04040001
   4785      1.1  christos 	.word	0x00000000, 0x00040001, 0x04040100, 0x00000100
   4786      1.1  christos 	.word	0x00000101, 0x04040101, 0x00040000, 0x04000001
   4787      1.1  christos 	.word	0x04040001, 0x04000100, 0x00040101, 0x04040000
   4788      1.1  christos 	.word	0x00040100, 0x00000000, 0x04000000, 0x00040101
   4789      1.1  christos 	.word	0x04040100, 0x00000100, 0x00000001, 0x00040000
   4790      1.1  christos 	.word	0x00000101, 0x00040001, 0x04040000, 0x04000101
   4791      1.1  christos 	.word	0x00000000, 0x04040100, 0x00040100, 0x04040001
   4792      1.1  christos 	.word	0x00040001, 0x04000000, 0x04040101, 0x00000001
   4793      1.1  christos 	.word	0x00040101, 0x04000001, 0x04000000, 0x04040101
   4794      1.1  christos 	.word	0x00040000, 0x04000100, 0x04000101, 0x00040100
   4795      1.1  christos 	.word	0x04000100, 0x00000000, 0x04040001, 0x00000101
   4796      1.1  christos 	.word	0x04000001, 0x00040101, 0x00000100, 0x04040000
   4797      1.1  christos 	! nibble 3
   4798      1.1  christos 	.word	0x00401008, 0x10001000, 0x00000008, 0x10401008
   4799      1.1  christos 	.word	0x00000000, 0x10400000, 0x10001008, 0x00400008
   4800      1.1  christos 	.word	0x10401000, 0x10000008, 0x10000000, 0x00001008
   4801      1.1  christos 	.word	0x10000008, 0x00401008, 0x00400000, 0x10000000
   4802      1.1  christos 	.word	0x10400008, 0x00401000, 0x00001000, 0x00000008
   4803      1.1  christos 	.word	0x00401000, 0x10001008, 0x10400000, 0x00001000
   4804      1.1  christos 	.word	0x00001008, 0x00000000, 0x00400008, 0x10401000
   4805      1.1  christos 	.word	0x10001000, 0x10400008, 0x10401008, 0x00400000
   4806      1.1  christos 	.word	0x10400008, 0x00001008, 0x00400000, 0x10000008
   4807      1.1  christos 	.word	0x00401000, 0x10001000, 0x00000008, 0x10400000
   4808      1.1  christos 	.word	0x10001008, 0x00000000, 0x00001000, 0x00400008
   4809      1.1  christos 	.word	0x00000000, 0x10400008, 0x10401000, 0x00001000
   4810      1.1  christos 	.word	0x10000000, 0x10401008, 0x00401008, 0x00400000
   4811      1.1  christos 	.word	0x10401008, 0x00000008, 0x10001000, 0x00401008
   4812      1.1  christos 	.word	0x00400008, 0x00401000, 0x10400000, 0x10001008
   4813      1.1  christos 	.word	0x00001008, 0x10000000, 0x10000008, 0x10401000
   4814      1.1  christos 	! nibble 4
   4815      1.1  christos 	.word	0x08000000, 0x00010000, 0x00000400, 0x08010420
   4816      1.1  christos 	.word	0x08010020, 0x08000400, 0x00010420, 0x08010000
   4817      1.1  christos 	.word	0x00010000, 0x00000020, 0x08000020, 0x00010400
   4818      1.1  christos 	.word	0x08000420, 0x08010020, 0x08010400, 0x00000000
   4819      1.1  christos 	.word	0x00010400, 0x08000000, 0x00010020, 0x00000420
   4820      1.1  christos 	.word	0x08000400, 0x00010420, 0x00000000, 0x08000020
   4821      1.1  christos 	.word	0x00000020, 0x08000420, 0x08010420, 0x00010020
   4822      1.1  christos 	.word	0x08010000, 0x00000400, 0x00000420, 0x08010400
   4823      1.1  christos 	.word	0x08010400, 0x08000420, 0x00010020, 0x08010000
   4824      1.1  christos 	.word	0x00010000, 0x00000020, 0x08000020, 0x08000400
   4825      1.1  christos 	.word	0x08000000, 0x00010400, 0x08010420, 0x00000000
   4826      1.1  christos 	.word	0x00010420, 0x08000000, 0x00000400, 0x00010020
   4827      1.1  christos 	.word	0x08000420, 0x00000400, 0x00000000, 0x08010420
   4828      1.1  christos 	.word	0x08010020, 0x08010400, 0x00000420, 0x00010000
   4829      1.1  christos 	.word	0x00010400, 0x08010020, 0x08000400, 0x00000420
   4830      1.1  christos 	.word	0x00000020, 0x00010420, 0x08010000, 0x08000020
   4831      1.1  christos 	! nibble 5
   4832      1.1  christos 	.word	0x80000040, 0x00200040, 0x00000000, 0x80202000
   4833      1.1  christos 	.word	0x00200040, 0x00002000, 0x80002040, 0x00200000
   4834      1.1  christos 	.word	0x00002040, 0x80202040, 0x00202000, 0x80000000
   4835      1.1  christos 	.word	0x80002000, 0x80000040, 0x80200000, 0x00202040
   4836      1.1  christos 	.word	0x00200000, 0x80002040, 0x80200040, 0x00000000
   4837      1.1  christos 	.word	0x00002000, 0x00000040, 0x80202000, 0x80200040
   4838      1.1  christos 	.word	0x80202040, 0x80200000, 0x80000000, 0x00002040
   4839      1.1  christos 	.word	0x00000040, 0x00202000, 0x00202040, 0x80002000
   4840      1.1  christos 	.word	0x00002040, 0x80000000, 0x80002000, 0x00202040
   4841      1.1  christos 	.word	0x80202000, 0x00200040, 0x00000000, 0x80002000
   4842      1.1  christos 	.word	0x80000000, 0x00002000, 0x80200040, 0x00200000
   4843      1.1  christos 	.word	0x00200040, 0x80202040, 0x00202000, 0x00000040
   4844      1.1  christos 	.word	0x80202040, 0x00202000, 0x00200000, 0x80002040
   4845      1.1  christos 	.word	0x80000040, 0x80200000, 0x00202040, 0x00000000
   4846      1.1  christos 	.word	0x00002000, 0x80000040, 0x80002040, 0x80202000
   4847      1.1  christos 	.word	0x80200000, 0x00002040, 0x00000040, 0x80200040
   4848      1.1  christos 	! nibble 6
   4849      1.1  christos 	.word	0x00004000, 0x00000200, 0x01000200, 0x01000004
   4850      1.1  christos 	.word	0x01004204, 0x00004004, 0x00004200, 0x00000000
   4851      1.1  christos 	.word	0x01000000, 0x01000204, 0x00000204, 0x01004000
   4852      1.1  christos 	.word	0x00000004, 0x01004200, 0x01004000, 0x00000204
   4853      1.1  christos 	.word	0x01000204, 0x00004000, 0x00004004, 0x01004204
   4854      1.1  christos 	.word	0x00000000, 0x01000200, 0x01000004, 0x00004200
   4855      1.1  christos 	.word	0x01004004, 0x00004204, 0x01004200, 0x00000004
   4856      1.1  christos 	.word	0x00004204, 0x01004004, 0x00000200, 0x01000000
   4857      1.1  christos 	.word	0x00004204, 0x01004000, 0x01004004, 0x00000204
   4858      1.1  christos 	.word	0x00004000, 0x00000200, 0x01000000, 0x01004004
   4859      1.1  christos 	.word	0x01000204, 0x00004204, 0x00004200, 0x00000000
   4860      1.1  christos 	.word	0x00000200, 0x01000004, 0x00000004, 0x01000200
   4861      1.1  christos 	.word	0x00000000, 0x01000204, 0x01000200, 0x00004200
   4862      1.1  christos 	.word	0x00000204, 0x00004000, 0x01004204, 0x01000000
   4863      1.1  christos 	.word	0x01004200, 0x00000004, 0x00004004, 0x01004204
   4864      1.1  christos 	.word	0x01000004, 0x01004200, 0x01004000, 0x00004004
   4865      1.1  christos 	! nibble 7
   4866      1.1  christos 	.word	0x20800080, 0x20820000, 0x00020080, 0x00000000
   4867      1.1  christos 	.word	0x20020000, 0x00800080, 0x20800000, 0x20820080
   4868      1.1  christos 	.word	0x00000080, 0x20000000, 0x00820000, 0x00020080
   4869      1.1  christos 	.word	0x00820080, 0x20020080, 0x20000080, 0x20800000
   4870      1.1  christos 	.word	0x00020000, 0x00820080, 0x00800080, 0x20020000
   4871      1.1  christos 	.word	0x20820080, 0x20000080, 0x00000000, 0x00820000
   4872      1.1  christos 	.word	0x20000000, 0x00800000, 0x20020080, 0x20800080
   4873      1.1  christos 	.word	0x00800000, 0x00020000, 0x20820000, 0x00000080
   4874      1.1  christos 	.word	0x00800000, 0x00020000, 0x20000080, 0x20820080
   4875      1.1  christos 	.word	0x00020080, 0x20000000, 0x00000000, 0x00820000
   4876      1.1  christos 	.word	0x20800080, 0x20020080, 0x20020000, 0x00800080
   4877      1.1  christos 	.word	0x20820000, 0x00000080, 0x00800080, 0x20020000
   4878      1.1  christos 	.word	0x20820080, 0x00800000, 0x20800000, 0x20000080
   4879      1.1  christos 	.word	0x00820000, 0x00020080, 0x20020080, 0x20800000
   4880      1.1  christos 	.word	0x00000080, 0x20820000, 0x00820080, 0x00000000
   4881      1.1  christos 	.word	0x20000000, 0x20800080, 0x00020000, 0x00820080
   4882      1.1  christos 
   4883