1*0Sstevel@tonic-gate.ident "md5-sparcv9.S, Version 1.0" 2*0Sstevel@tonic-gate.ident "SPARC V9 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>" 3*0Sstevel@tonic-gate.file "md5-sparcv9.S" 4*0Sstevel@tonic-gate 5*0Sstevel@tonic-gate/* 6*0Sstevel@tonic-gate * ==================================================================== 7*0Sstevel@tonic-gate * Copyright (c) 1999 Andy Polyakov <appro@fy.chalmers.se>. 8*0Sstevel@tonic-gate * 9*0Sstevel@tonic-gate * Rights for redistribution and usage in source and binary forms are 10*0Sstevel@tonic-gate * granted as long as above copyright notices are retained. Warranty 11*0Sstevel@tonic-gate * of any kind is (of course:-) disclaimed. 12*0Sstevel@tonic-gate * ==================================================================== 13*0Sstevel@tonic-gate */ 14*0Sstevel@tonic-gate 15*0Sstevel@tonic-gate/* 16*0Sstevel@tonic-gate * This is my modest contribution to OpenSSL project (see 17*0Sstevel@tonic-gate * http://www.openssl.org/ for more information about it) and is an 18*0Sstevel@tonic-gate * assembler implementation of MD5 block hash function. I've hand-coded 19*0Sstevel@tonic-gate * this for the sole reason to reach UltraSPARC-specific "load in 20*0Sstevel@tonic-gate * little-endian byte order" instruction. This gives up to 15% 21*0Sstevel@tonic-gate * performance improvement for cases when input message is aligned at 22*0Sstevel@tonic-gate * 32 bits boundary. The module was tested under both 32 *and* 64 bit 23*0Sstevel@tonic-gate * kernels. For updates see http://fy.chalmers.se/~appro/hpe/. 24*0Sstevel@tonic-gate * 25*0Sstevel@tonic-gate * To compile with SC4.x/SC5.x: 26*0Sstevel@tonic-gate * 27*0Sstevel@tonic-gate * cc -xarch=v[9|8plus] -DOPENSSL_SYSNAME_ULTRASPARC -DMD5_BLOCK_DATA_ORDER \ 28*0Sstevel@tonic-gate * -c md5-sparcv9.S 29*0Sstevel@tonic-gate * 30*0Sstevel@tonic-gate * and with gcc: 31*0Sstevel@tonic-gate * 32*0Sstevel@tonic-gate * gcc -mcpu=ultrasparc -DOPENSSL_SYSNAME_ULTRASPARC -DMD5_BLOCK_DATA_ORDER \ 33*0Sstevel@tonic-gate * -c md5-sparcv9.S 34*0Sstevel@tonic-gate * 35*0Sstevel@tonic-gate * or if above fails (it does if you have gas): 36*0Sstevel@tonic-gate * 37*0Sstevel@tonic-gate * gcc -E -DOPENSSL_SYSNAMEULTRASPARC -DMD5_BLOCK_DATA_ORDER md5_block.sparc.S | \ 38*0Sstevel@tonic-gate * as -xarch=v8plus /dev/fd/0 -o md5-sparcv9.o 39*0Sstevel@tonic-gate */ 40*0Sstevel@tonic-gate 41*0Sstevel@tonic-gate#include <openssl/e_os2.h> 42*0Sstevel@tonic-gate 43*0Sstevel@tonic-gate#define A %o0 44*0Sstevel@tonic-gate#define B %o1 45*0Sstevel@tonic-gate#define C %o2 46*0Sstevel@tonic-gate#define D %o3 47*0Sstevel@tonic-gate#define T1 %o4 48*0Sstevel@tonic-gate#define T2 %o5 49*0Sstevel@tonic-gate 50*0Sstevel@tonic-gate#define R0 %l0 51*0Sstevel@tonic-gate#define R1 %l1 52*0Sstevel@tonic-gate#define R2 %l2 53*0Sstevel@tonic-gate#define R3 %l3 54*0Sstevel@tonic-gate#define R4 %l4 55*0Sstevel@tonic-gate#define R5 %l5 56*0Sstevel@tonic-gate#define R6 %l6 57*0Sstevel@tonic-gate#define R7 %l7 58*0Sstevel@tonic-gate#define R8 %i3 59*0Sstevel@tonic-gate#define R9 %i4 60*0Sstevel@tonic-gate#define R10 %i5 61*0Sstevel@tonic-gate#define R11 %g1 62*0Sstevel@tonic-gate#define R12 %g2 63*0Sstevel@tonic-gate#define R13 %g3 64*0Sstevel@tonic-gate#define RX %g4 65*0Sstevel@tonic-gate 66*0Sstevel@tonic-gate#define Aptr %i0+0 67*0Sstevel@tonic-gate#define Bptr %i0+4 68*0Sstevel@tonic-gate#define Cptr %i0+8 69*0Sstevel@tonic-gate#define Dptr %i0+12 70*0Sstevel@tonic-gate 71*0Sstevel@tonic-gate#define Aval R5 /* those not used at the end of the last round */ 72*0Sstevel@tonic-gate#define Bval R6 73*0Sstevel@tonic-gate#define Cval R7 74*0Sstevel@tonic-gate#define Dval R8 75*0Sstevel@tonic-gate 76*0Sstevel@tonic-gate#if defined(MD5_BLOCK_DATA_ORDER) 77*0Sstevel@tonic-gate# if defined(OPENSSL_SYSNAME_ULTRASPARC) 78*0Sstevel@tonic-gate# define LOAD lda 79*0Sstevel@tonic-gate# define X(i) [%i1+i*4]%asi 80*0Sstevel@tonic-gate# define md5_block md5_block_asm_data_order_aligned 81*0Sstevel@tonic-gate# define ASI_PRIMARY_LITTLE 0x88 82*0Sstevel@tonic-gate# else 83*0Sstevel@tonic-gate# error "MD5_BLOCK_DATA_ORDER is supported only on UltraSPARC!" 84*0Sstevel@tonic-gate# endif 85*0Sstevel@tonic-gate#else 86*0Sstevel@tonic-gate# define LOAD ld 87*0Sstevel@tonic-gate# define X(i) [%i1+i*4] 88*0Sstevel@tonic-gate# define md5_block md5_block_asm_host_order 89*0Sstevel@tonic-gate#endif 90*0Sstevel@tonic-gate 91*0Sstevel@tonic-gate.section ".text",#alloc,#execinstr 92*0Sstevel@tonic-gate 93*0Sstevel@tonic-gate#if defined(__SUNPRO_C) && defined(__sparcv9) 94*0Sstevel@tonic-gate /* They've said -xarch=v9 at command line */ 95*0Sstevel@tonic-gate .register %g2,#scratch 96*0Sstevel@tonic-gate .register %g3,#scratch 97*0Sstevel@tonic-gate# define FRAME -192 98*0Sstevel@tonic-gate#elif defined(__GNUC__) && defined(__arch64__) 99*0Sstevel@tonic-gate /* They've said -m64 at command line */ 100*0Sstevel@tonic-gate .register %g2,#scratch 101*0Sstevel@tonic-gate .register %g3,#scratch 102*0Sstevel@tonic-gate# define FRAME -192 103*0Sstevel@tonic-gate#else 104*0Sstevel@tonic-gate# define FRAME -96 105*0Sstevel@tonic-gate#endif 106*0Sstevel@tonic-gate 107*0Sstevel@tonic-gate.align 32 108*0Sstevel@tonic-gate 109*0Sstevel@tonic-gate.global md5_block 110*0Sstevel@tonic-gatemd5_block: 111*0Sstevel@tonic-gate save %sp,FRAME,%sp 112*0Sstevel@tonic-gate 113*0Sstevel@tonic-gate ld [Dptr],D 114*0Sstevel@tonic-gate ld [Cptr],C 115*0Sstevel@tonic-gate ld [Bptr],B 116*0Sstevel@tonic-gate ld [Aptr],A 117*0Sstevel@tonic-gate#ifdef ASI_PRIMARY_LITTLE 118*0Sstevel@tonic-gate rd %asi,%o7 ! How dare I? Well, I just do:-) 119*0Sstevel@tonic-gate wr %g0,ASI_PRIMARY_LITTLE,%asi 120*0Sstevel@tonic-gate#endif 121*0Sstevel@tonic-gate LOAD X(0),R0 122*0Sstevel@tonic-gate 123*0Sstevel@tonic-gate.Lmd5_block_loop: 124*0Sstevel@tonic-gate 125*0Sstevel@tonic-gate!!!!!!!!Round 0 126*0Sstevel@tonic-gate 127*0Sstevel@tonic-gate xor C,D,T1 128*0Sstevel@tonic-gate sethi %hi(0xd76aa478),T2 129*0Sstevel@tonic-gate and T1,B,T1 130*0Sstevel@tonic-gate or T2,%lo(0xd76aa478),T2 != 131*0Sstevel@tonic-gate xor T1,D,T1 132*0Sstevel@tonic-gate add T1,R0,T1 133*0Sstevel@tonic-gate LOAD X(1),R1 134*0Sstevel@tonic-gate add T1,T2,T1 != 135*0Sstevel@tonic-gate add A,T1,A 136*0Sstevel@tonic-gate sll A,7,T2 137*0Sstevel@tonic-gate srl A,32-7,A 138*0Sstevel@tonic-gate or A,T2,A != 139*0Sstevel@tonic-gate xor B,C,T1 140*0Sstevel@tonic-gate add A,B,A 141*0Sstevel@tonic-gate 142*0Sstevel@tonic-gate sethi %hi(0xe8c7b756),T2 143*0Sstevel@tonic-gate and T1,A,T1 != 144*0Sstevel@tonic-gate or T2,%lo(0xe8c7b756),T2 145*0Sstevel@tonic-gate xor T1,C,T1 146*0Sstevel@tonic-gate LOAD X(2),R2 147*0Sstevel@tonic-gate add T1,R1,T1 != 148*0Sstevel@tonic-gate add T1,T2,T1 149*0Sstevel@tonic-gate add D,T1,D 150*0Sstevel@tonic-gate sll D,12,T2 151*0Sstevel@tonic-gate srl D,32-12,D != 152*0Sstevel@tonic-gate or D,T2,D 153*0Sstevel@tonic-gate xor A,B,T1 154*0Sstevel@tonic-gate add D,A,D 155*0Sstevel@tonic-gate 156*0Sstevel@tonic-gate sethi %hi(0x242070db),T2 != 157*0Sstevel@tonic-gate and T1,D,T1 158*0Sstevel@tonic-gate or T2,%lo(0x242070db),T2 159*0Sstevel@tonic-gate xor T1,B,T1 160*0Sstevel@tonic-gate add T1,R2,T1 != 161*0Sstevel@tonic-gate LOAD X(3),R3 162*0Sstevel@tonic-gate add T1,T2,T1 163*0Sstevel@tonic-gate add C,T1,C 164*0Sstevel@tonic-gate sll C,17,T2 != 165*0Sstevel@tonic-gate srl C,32-17,C 166*0Sstevel@tonic-gate or C,T2,C 167*0Sstevel@tonic-gate xor D,A,T1 168*0Sstevel@tonic-gate add C,D,C != 169*0Sstevel@tonic-gate 170*0Sstevel@tonic-gate sethi %hi(0xc1bdceee),T2 171*0Sstevel@tonic-gate and T1,C,T1 172*0Sstevel@tonic-gate or T2,%lo(0xc1bdceee),T2 173*0Sstevel@tonic-gate xor T1,A,T1 != 174*0Sstevel@tonic-gate add T1,R3,T1 175*0Sstevel@tonic-gate LOAD X(4),R4 176*0Sstevel@tonic-gate add T1,T2,T1 177*0Sstevel@tonic-gate add B,T1,B != 178*0Sstevel@tonic-gate sll B,22,T2 179*0Sstevel@tonic-gate srl B,32-22,B 180*0Sstevel@tonic-gate or B,T2,B 181*0Sstevel@tonic-gate xor C,D,T1 != 182*0Sstevel@tonic-gate add B,C,B 183*0Sstevel@tonic-gate 184*0Sstevel@tonic-gate sethi %hi(0xf57c0faf),T2 185*0Sstevel@tonic-gate and T1,B,T1 186*0Sstevel@tonic-gate or T2,%lo(0xf57c0faf),T2 != 187*0Sstevel@tonic-gate xor T1,D,T1 188*0Sstevel@tonic-gate add T1,R4,T1 189*0Sstevel@tonic-gate LOAD X(5),R5 190*0Sstevel@tonic-gate add T1,T2,T1 != 191*0Sstevel@tonic-gate add A,T1,A 192*0Sstevel@tonic-gate sll A,7,T2 193*0Sstevel@tonic-gate srl A,32-7,A 194*0Sstevel@tonic-gate or A,T2,A != 195*0Sstevel@tonic-gate xor B,C,T1 196*0Sstevel@tonic-gate add A,B,A 197*0Sstevel@tonic-gate 198*0Sstevel@tonic-gate sethi %hi(0x4787c62a),T2 199*0Sstevel@tonic-gate and T1,A,T1 != 200*0Sstevel@tonic-gate or T2,%lo(0x4787c62a),T2 201*0Sstevel@tonic-gate xor T1,C,T1 202*0Sstevel@tonic-gate LOAD X(6),R6 203*0Sstevel@tonic-gate add T1,R5,T1 != 204*0Sstevel@tonic-gate add T1,T2,T1 205*0Sstevel@tonic-gate add D,T1,D 206*0Sstevel@tonic-gate sll D,12,T2 207*0Sstevel@tonic-gate srl D,32-12,D != 208*0Sstevel@tonic-gate or D,T2,D 209*0Sstevel@tonic-gate xor A,B,T1 210*0Sstevel@tonic-gate add D,A,D 211*0Sstevel@tonic-gate 212*0Sstevel@tonic-gate sethi %hi(0xa8304613),T2 != 213*0Sstevel@tonic-gate and T1,D,T1 214*0Sstevel@tonic-gate or T2,%lo(0xa8304613),T2 215*0Sstevel@tonic-gate xor T1,B,T1 216*0Sstevel@tonic-gate add T1,R6,T1 != 217*0Sstevel@tonic-gate LOAD X(7),R7 218*0Sstevel@tonic-gate add T1,T2,T1 219*0Sstevel@tonic-gate add C,T1,C 220*0Sstevel@tonic-gate sll C,17,T2 != 221*0Sstevel@tonic-gate srl C,32-17,C 222*0Sstevel@tonic-gate or C,T2,C 223*0Sstevel@tonic-gate xor D,A,T1 224*0Sstevel@tonic-gate add C,D,C != 225*0Sstevel@tonic-gate 226*0Sstevel@tonic-gate sethi %hi(0xfd469501),T2 227*0Sstevel@tonic-gate and T1,C,T1 228*0Sstevel@tonic-gate or T2,%lo(0xfd469501),T2 229*0Sstevel@tonic-gate xor T1,A,T1 != 230*0Sstevel@tonic-gate add T1,R7,T1 231*0Sstevel@tonic-gate LOAD X(8),R8 232*0Sstevel@tonic-gate add T1,T2,T1 233*0Sstevel@tonic-gate add B,T1,B != 234*0Sstevel@tonic-gate sll B,22,T2 235*0Sstevel@tonic-gate srl B,32-22,B 236*0Sstevel@tonic-gate or B,T2,B 237*0Sstevel@tonic-gate xor C,D,T1 != 238*0Sstevel@tonic-gate add B,C,B 239*0Sstevel@tonic-gate 240*0Sstevel@tonic-gate sethi %hi(0x698098d8),T2 241*0Sstevel@tonic-gate and T1,B,T1 242*0Sstevel@tonic-gate or T2,%lo(0x698098d8),T2 != 243*0Sstevel@tonic-gate xor T1,D,T1 244*0Sstevel@tonic-gate add T1,R8,T1 245*0Sstevel@tonic-gate LOAD X(9),R9 246*0Sstevel@tonic-gate add T1,T2,T1 != 247*0Sstevel@tonic-gate add A,T1,A 248*0Sstevel@tonic-gate sll A,7,T2 249*0Sstevel@tonic-gate srl A,32-7,A 250*0Sstevel@tonic-gate or A,T2,A != 251*0Sstevel@tonic-gate xor B,C,T1 252*0Sstevel@tonic-gate add A,B,A 253*0Sstevel@tonic-gate 254*0Sstevel@tonic-gate sethi %hi(0x8b44f7af),T2 255*0Sstevel@tonic-gate and T1,A,T1 != 256*0Sstevel@tonic-gate or T2,%lo(0x8b44f7af),T2 257*0Sstevel@tonic-gate xor T1,C,T1 258*0Sstevel@tonic-gate LOAD X(10),R10 259*0Sstevel@tonic-gate add T1,R9,T1 != 260*0Sstevel@tonic-gate add T1,T2,T1 261*0Sstevel@tonic-gate add D,T1,D 262*0Sstevel@tonic-gate sll D,12,T2 263*0Sstevel@tonic-gate srl D,32-12,D != 264*0Sstevel@tonic-gate or D,T2,D 265*0Sstevel@tonic-gate xor A,B,T1 266*0Sstevel@tonic-gate add D,A,D 267*0Sstevel@tonic-gate 268*0Sstevel@tonic-gate sethi %hi(0xffff5bb1),T2 != 269*0Sstevel@tonic-gate and T1,D,T1 270*0Sstevel@tonic-gate or T2,%lo(0xffff5bb1),T2 271*0Sstevel@tonic-gate xor T1,B,T1 272*0Sstevel@tonic-gate add T1,R10,T1 != 273*0Sstevel@tonic-gate LOAD X(11),R11 274*0Sstevel@tonic-gate add T1,T2,T1 275*0Sstevel@tonic-gate add C,T1,C 276*0Sstevel@tonic-gate sll C,17,T2 != 277*0Sstevel@tonic-gate srl C,32-17,C 278*0Sstevel@tonic-gate or C,T2,C 279*0Sstevel@tonic-gate xor D,A,T1 280*0Sstevel@tonic-gate add C,D,C != 281*0Sstevel@tonic-gate 282*0Sstevel@tonic-gate sethi %hi(0x895cd7be),T2 283*0Sstevel@tonic-gate and T1,C,T1 284*0Sstevel@tonic-gate or T2,%lo(0x895cd7be),T2 285*0Sstevel@tonic-gate xor T1,A,T1 != 286*0Sstevel@tonic-gate add T1,R11,T1 287*0Sstevel@tonic-gate LOAD X(12),R12 288*0Sstevel@tonic-gate add T1,T2,T1 289*0Sstevel@tonic-gate add B,T1,B != 290*0Sstevel@tonic-gate sll B,22,T2 291*0Sstevel@tonic-gate srl B,32-22,B 292*0Sstevel@tonic-gate or B,T2,B 293*0Sstevel@tonic-gate xor C,D,T1 != 294*0Sstevel@tonic-gate add B,C,B 295*0Sstevel@tonic-gate 296*0Sstevel@tonic-gate sethi %hi(0x6b901122),T2 297*0Sstevel@tonic-gate and T1,B,T1 298*0Sstevel@tonic-gate or T2,%lo(0x6b901122),T2 != 299*0Sstevel@tonic-gate xor T1,D,T1 300*0Sstevel@tonic-gate add T1,R12,T1 301*0Sstevel@tonic-gate LOAD X(13),R13 302*0Sstevel@tonic-gate add T1,T2,T1 != 303*0Sstevel@tonic-gate add A,T1,A 304*0Sstevel@tonic-gate sll A,7,T2 305*0Sstevel@tonic-gate srl A,32-7,A 306*0Sstevel@tonic-gate or A,T2,A != 307*0Sstevel@tonic-gate xor B,C,T1 308*0Sstevel@tonic-gate add A,B,A 309*0Sstevel@tonic-gate 310*0Sstevel@tonic-gate sethi %hi(0xfd987193),T2 311*0Sstevel@tonic-gate and T1,A,T1 != 312*0Sstevel@tonic-gate or T2,%lo(0xfd987193),T2 313*0Sstevel@tonic-gate xor T1,C,T1 314*0Sstevel@tonic-gate LOAD X(14),RX 315*0Sstevel@tonic-gate add T1,R13,T1 != 316*0Sstevel@tonic-gate add T1,T2,T1 317*0Sstevel@tonic-gate add D,T1,D 318*0Sstevel@tonic-gate sll D,12,T2 319*0Sstevel@tonic-gate srl D,32-12,D != 320*0Sstevel@tonic-gate or D,T2,D 321*0Sstevel@tonic-gate xor A,B,T1 322*0Sstevel@tonic-gate add D,A,D 323*0Sstevel@tonic-gate 324*0Sstevel@tonic-gate sethi %hi(0xa679438e),T2 != 325*0Sstevel@tonic-gate and T1,D,T1 326*0Sstevel@tonic-gate or T2,%lo(0xa679438e),T2 327*0Sstevel@tonic-gate xor T1,B,T1 328*0Sstevel@tonic-gate add T1,RX,T1 != 329*0Sstevel@tonic-gate LOAD X(15),RX 330*0Sstevel@tonic-gate add T1,T2,T1 331*0Sstevel@tonic-gate add C,T1,C 332*0Sstevel@tonic-gate sll C,17,T2 != 333*0Sstevel@tonic-gate srl C,32-17,C 334*0Sstevel@tonic-gate or C,T2,C 335*0Sstevel@tonic-gate xor D,A,T1 336*0Sstevel@tonic-gate add C,D,C != 337*0Sstevel@tonic-gate 338*0Sstevel@tonic-gate sethi %hi(0x49b40821),T2 339*0Sstevel@tonic-gate and T1,C,T1 340*0Sstevel@tonic-gate or T2,%lo(0x49b40821),T2 341*0Sstevel@tonic-gate xor T1,A,T1 != 342*0Sstevel@tonic-gate add T1,RX,T1 343*0Sstevel@tonic-gate !pre-LOADed X(1),R1 344*0Sstevel@tonic-gate add T1,T2,T1 345*0Sstevel@tonic-gate add B,T1,B 346*0Sstevel@tonic-gate sll B,22,T2 != 347*0Sstevel@tonic-gate srl B,32-22,B 348*0Sstevel@tonic-gate or B,T2,B 349*0Sstevel@tonic-gate add B,C,B 350*0Sstevel@tonic-gate 351*0Sstevel@tonic-gate!!!!!!!!Round 1 352*0Sstevel@tonic-gate 353*0Sstevel@tonic-gate xor B,C,T1 != 354*0Sstevel@tonic-gate sethi %hi(0xf61e2562),T2 355*0Sstevel@tonic-gate and T1,D,T1 356*0Sstevel@tonic-gate or T2,%lo(0xf61e2562),T2 357*0Sstevel@tonic-gate xor T1,C,T1 != 358*0Sstevel@tonic-gate add T1,R1,T1 359*0Sstevel@tonic-gate !pre-LOADed X(6),R6 360*0Sstevel@tonic-gate add T1,T2,T1 361*0Sstevel@tonic-gate add A,T1,A 362*0Sstevel@tonic-gate sll A,5,T2 != 363*0Sstevel@tonic-gate srl A,32-5,A 364*0Sstevel@tonic-gate or A,T2,A 365*0Sstevel@tonic-gate add A,B,A 366*0Sstevel@tonic-gate 367*0Sstevel@tonic-gate xor A,B,T1 != 368*0Sstevel@tonic-gate sethi %hi(0xc040b340),T2 369*0Sstevel@tonic-gate and T1,C,T1 370*0Sstevel@tonic-gate or T2,%lo(0xc040b340),T2 371*0Sstevel@tonic-gate xor T1,B,T1 != 372*0Sstevel@tonic-gate add T1,R6,T1 373*0Sstevel@tonic-gate !pre-LOADed X(11),R11 374*0Sstevel@tonic-gate add T1,T2,T1 375*0Sstevel@tonic-gate add D,T1,D 376*0Sstevel@tonic-gate sll D,9,T2 != 377*0Sstevel@tonic-gate srl D,32-9,D 378*0Sstevel@tonic-gate or D,T2,D 379*0Sstevel@tonic-gate add D,A,D 380*0Sstevel@tonic-gate 381*0Sstevel@tonic-gate xor D,A,T1 != 382*0Sstevel@tonic-gate sethi %hi(0x265e5a51),T2 383*0Sstevel@tonic-gate and T1,B,T1 384*0Sstevel@tonic-gate or T2,%lo(0x265e5a51),T2 385*0Sstevel@tonic-gate xor T1,A,T1 != 386*0Sstevel@tonic-gate add T1,R11,T1 387*0Sstevel@tonic-gate !pre-LOADed X(0),R0 388*0Sstevel@tonic-gate add T1,T2,T1 389*0Sstevel@tonic-gate add C,T1,C 390*0Sstevel@tonic-gate sll C,14,T2 != 391*0Sstevel@tonic-gate srl C,32-14,C 392*0Sstevel@tonic-gate or C,T2,C 393*0Sstevel@tonic-gate add C,D,C 394*0Sstevel@tonic-gate 395*0Sstevel@tonic-gate xor C,D,T1 != 396*0Sstevel@tonic-gate sethi %hi(0xe9b6c7aa),T2 397*0Sstevel@tonic-gate and T1,A,T1 398*0Sstevel@tonic-gate or T2,%lo(0xe9b6c7aa),T2 399*0Sstevel@tonic-gate xor T1,D,T1 != 400*0Sstevel@tonic-gate add T1,R0,T1 401*0Sstevel@tonic-gate !pre-LOADed X(5),R5 402*0Sstevel@tonic-gate add T1,T2,T1 403*0Sstevel@tonic-gate add B,T1,B 404*0Sstevel@tonic-gate sll B,20,T2 != 405*0Sstevel@tonic-gate srl B,32-20,B 406*0Sstevel@tonic-gate or B,T2,B 407*0Sstevel@tonic-gate add B,C,B 408*0Sstevel@tonic-gate 409*0Sstevel@tonic-gate xor B,C,T1 != 410*0Sstevel@tonic-gate sethi %hi(0xd62f105d),T2 411*0Sstevel@tonic-gate and T1,D,T1 412*0Sstevel@tonic-gate or T2,%lo(0xd62f105d),T2 413*0Sstevel@tonic-gate xor T1,C,T1 != 414*0Sstevel@tonic-gate add T1,R5,T1 415*0Sstevel@tonic-gate !pre-LOADed X(10),R10 416*0Sstevel@tonic-gate add T1,T2,T1 417*0Sstevel@tonic-gate add A,T1,A 418*0Sstevel@tonic-gate sll A,5,T2 != 419*0Sstevel@tonic-gate srl A,32-5,A 420*0Sstevel@tonic-gate or A,T2,A 421*0Sstevel@tonic-gate add A,B,A 422*0Sstevel@tonic-gate 423*0Sstevel@tonic-gate xor A,B,T1 != 424*0Sstevel@tonic-gate sethi %hi(0x02441453),T2 425*0Sstevel@tonic-gate and T1,C,T1 426*0Sstevel@tonic-gate or T2,%lo(0x02441453),T2 427*0Sstevel@tonic-gate xor T1,B,T1 != 428*0Sstevel@tonic-gate add T1,R10,T1 429*0Sstevel@tonic-gate LOAD X(15),RX 430*0Sstevel@tonic-gate add T1,T2,T1 431*0Sstevel@tonic-gate add D,T1,D != 432*0Sstevel@tonic-gate sll D,9,T2 433*0Sstevel@tonic-gate srl D,32-9,D 434*0Sstevel@tonic-gate or D,T2,D 435*0Sstevel@tonic-gate add D,A,D != 436*0Sstevel@tonic-gate 437*0Sstevel@tonic-gate xor D,A,T1 438*0Sstevel@tonic-gate sethi %hi(0xd8a1e681),T2 439*0Sstevel@tonic-gate and T1,B,T1 440*0Sstevel@tonic-gate or T2,%lo(0xd8a1e681),T2 != 441*0Sstevel@tonic-gate xor T1,A,T1 442*0Sstevel@tonic-gate add T1,RX,T1 443*0Sstevel@tonic-gate !pre-LOADed X(4),R4 444*0Sstevel@tonic-gate add T1,T2,T1 445*0Sstevel@tonic-gate add C,T1,C != 446*0Sstevel@tonic-gate sll C,14,T2 447*0Sstevel@tonic-gate srl C,32-14,C 448*0Sstevel@tonic-gate or C,T2,C 449*0Sstevel@tonic-gate add C,D,C != 450*0Sstevel@tonic-gate 451*0Sstevel@tonic-gate xor C,D,T1 452*0Sstevel@tonic-gate sethi %hi(0xe7d3fbc8),T2 453*0Sstevel@tonic-gate and T1,A,T1 454*0Sstevel@tonic-gate or T2,%lo(0xe7d3fbc8),T2 != 455*0Sstevel@tonic-gate xor T1,D,T1 456*0Sstevel@tonic-gate add T1,R4,T1 457*0Sstevel@tonic-gate !pre-LOADed X(9),R9 458*0Sstevel@tonic-gate add T1,T2,T1 459*0Sstevel@tonic-gate add B,T1,B != 460*0Sstevel@tonic-gate sll B,20,T2 461*0Sstevel@tonic-gate srl B,32-20,B 462*0Sstevel@tonic-gate or B,T2,B 463*0Sstevel@tonic-gate add B,C,B != 464*0Sstevel@tonic-gate 465*0Sstevel@tonic-gate xor B,C,T1 466*0Sstevel@tonic-gate sethi %hi(0x21e1cde6),T2 467*0Sstevel@tonic-gate and T1,D,T1 468*0Sstevel@tonic-gate or T2,%lo(0x21e1cde6),T2 != 469*0Sstevel@tonic-gate xor T1,C,T1 470*0Sstevel@tonic-gate add T1,R9,T1 471*0Sstevel@tonic-gate LOAD X(14),RX 472*0Sstevel@tonic-gate add T1,T2,T1 != 473*0Sstevel@tonic-gate add A,T1,A 474*0Sstevel@tonic-gate sll A,5,T2 475*0Sstevel@tonic-gate srl A,32-5,A 476*0Sstevel@tonic-gate or A,T2,A != 477*0Sstevel@tonic-gate add A,B,A 478*0Sstevel@tonic-gate 479*0Sstevel@tonic-gate xor A,B,T1 480*0Sstevel@tonic-gate sethi %hi(0xc33707d6),T2 481*0Sstevel@tonic-gate and T1,C,T1 != 482*0Sstevel@tonic-gate or T2,%lo(0xc33707d6),T2 483*0Sstevel@tonic-gate xor T1,B,T1 484*0Sstevel@tonic-gate add T1,RX,T1 485*0Sstevel@tonic-gate !pre-LOADed X(3),R3 486*0Sstevel@tonic-gate add T1,T2,T1 != 487*0Sstevel@tonic-gate add D,T1,D 488*0Sstevel@tonic-gate sll D,9,T2 489*0Sstevel@tonic-gate srl D,32-9,D 490*0Sstevel@tonic-gate or D,T2,D != 491*0Sstevel@tonic-gate add D,A,D 492*0Sstevel@tonic-gate 493*0Sstevel@tonic-gate xor D,A,T1 494*0Sstevel@tonic-gate sethi %hi(0xf4d50d87),T2 495*0Sstevel@tonic-gate and T1,B,T1 != 496*0Sstevel@tonic-gate or T2,%lo(0xf4d50d87),T2 497*0Sstevel@tonic-gate xor T1,A,T1 498*0Sstevel@tonic-gate add T1,R3,T1 499*0Sstevel@tonic-gate !pre-LOADed X(8),R8 500*0Sstevel@tonic-gate add T1,T2,T1 != 501*0Sstevel@tonic-gate add C,T1,C 502*0Sstevel@tonic-gate sll C,14,T2 503*0Sstevel@tonic-gate srl C,32-14,C 504*0Sstevel@tonic-gate or C,T2,C != 505*0Sstevel@tonic-gate add C,D,C 506*0Sstevel@tonic-gate 507*0Sstevel@tonic-gate xor C,D,T1 508*0Sstevel@tonic-gate sethi %hi(0x455a14ed),T2 509*0Sstevel@tonic-gate and T1,A,T1 != 510*0Sstevel@tonic-gate or T2,%lo(0x455a14ed),T2 511*0Sstevel@tonic-gate xor T1,D,T1 512*0Sstevel@tonic-gate add T1,R8,T1 513*0Sstevel@tonic-gate !pre-LOADed X(13),R13 514*0Sstevel@tonic-gate add T1,T2,T1 != 515*0Sstevel@tonic-gate add B,T1,B 516*0Sstevel@tonic-gate sll B,20,T2 517*0Sstevel@tonic-gate srl B,32-20,B 518*0Sstevel@tonic-gate or B,T2,B != 519*0Sstevel@tonic-gate add B,C,B 520*0Sstevel@tonic-gate 521*0Sstevel@tonic-gate xor B,C,T1 522*0Sstevel@tonic-gate sethi %hi(0xa9e3e905),T2 523*0Sstevel@tonic-gate and T1,D,T1 != 524*0Sstevel@tonic-gate or T2,%lo(0xa9e3e905),T2 525*0Sstevel@tonic-gate xor T1,C,T1 526*0Sstevel@tonic-gate add T1,R13,T1 527*0Sstevel@tonic-gate !pre-LOADed X(2),R2 528*0Sstevel@tonic-gate add T1,T2,T1 != 529*0Sstevel@tonic-gate add A,T1,A 530*0Sstevel@tonic-gate sll A,5,T2 531*0Sstevel@tonic-gate srl A,32-5,A 532*0Sstevel@tonic-gate or A,T2,A != 533*0Sstevel@tonic-gate add A,B,A 534*0Sstevel@tonic-gate 535*0Sstevel@tonic-gate xor A,B,T1 536*0Sstevel@tonic-gate sethi %hi(0xfcefa3f8),T2 537*0Sstevel@tonic-gate and T1,C,T1 != 538*0Sstevel@tonic-gate or T2,%lo(0xfcefa3f8),T2 539*0Sstevel@tonic-gate xor T1,B,T1 540*0Sstevel@tonic-gate add T1,R2,T1 541*0Sstevel@tonic-gate !pre-LOADed X(7),R7 542*0Sstevel@tonic-gate add T1,T2,T1 != 543*0Sstevel@tonic-gate add D,T1,D 544*0Sstevel@tonic-gate sll D,9,T2 545*0Sstevel@tonic-gate srl D,32-9,D 546*0Sstevel@tonic-gate or D,T2,D != 547*0Sstevel@tonic-gate add D,A,D 548*0Sstevel@tonic-gate 549*0Sstevel@tonic-gate xor D,A,T1 550*0Sstevel@tonic-gate sethi %hi(0x676f02d9),T2 551*0Sstevel@tonic-gate and T1,B,T1 != 552*0Sstevel@tonic-gate or T2,%lo(0x676f02d9),T2 553*0Sstevel@tonic-gate xor T1,A,T1 554*0Sstevel@tonic-gate add T1,R7,T1 555*0Sstevel@tonic-gate !pre-LOADed X(12),R12 556*0Sstevel@tonic-gate add T1,T2,T1 != 557*0Sstevel@tonic-gate add C,T1,C 558*0Sstevel@tonic-gate sll C,14,T2 559*0Sstevel@tonic-gate srl C,32-14,C 560*0Sstevel@tonic-gate or C,T2,C != 561*0Sstevel@tonic-gate add C,D,C 562*0Sstevel@tonic-gate 563*0Sstevel@tonic-gate xor C,D,T1 564*0Sstevel@tonic-gate sethi %hi(0x8d2a4c8a),T2 565*0Sstevel@tonic-gate and T1,A,T1 != 566*0Sstevel@tonic-gate or T2,%lo(0x8d2a4c8a),T2 567*0Sstevel@tonic-gate xor T1,D,T1 568*0Sstevel@tonic-gate add T1,R12,T1 569*0Sstevel@tonic-gate !pre-LOADed X(5),R5 570*0Sstevel@tonic-gate add T1,T2,T1 != 571*0Sstevel@tonic-gate add B,T1,B 572*0Sstevel@tonic-gate sll B,20,T2 573*0Sstevel@tonic-gate srl B,32-20,B 574*0Sstevel@tonic-gate or B,T2,B != 575*0Sstevel@tonic-gate add B,C,B 576*0Sstevel@tonic-gate 577*0Sstevel@tonic-gate!!!!!!!!Round 2 578*0Sstevel@tonic-gate 579*0Sstevel@tonic-gate xor B,C,T1 580*0Sstevel@tonic-gate sethi %hi(0xfffa3942),T2 581*0Sstevel@tonic-gate xor T1,D,T1 != 582*0Sstevel@tonic-gate or T2,%lo(0xfffa3942),T2 583*0Sstevel@tonic-gate add T1,R5,T1 584*0Sstevel@tonic-gate !pre-LOADed X(8),R8 585*0Sstevel@tonic-gate add T1,T2,T1 586*0Sstevel@tonic-gate add A,T1,A != 587*0Sstevel@tonic-gate sll A,4,T2 588*0Sstevel@tonic-gate srl A,32-4,A 589*0Sstevel@tonic-gate or A,T2,A 590*0Sstevel@tonic-gate add A,B,A != 591*0Sstevel@tonic-gate 592*0Sstevel@tonic-gate xor A,B,T1 593*0Sstevel@tonic-gate sethi %hi(0x8771f681),T2 594*0Sstevel@tonic-gate xor T1,C,T1 595*0Sstevel@tonic-gate or T2,%lo(0x8771f681),T2 != 596*0Sstevel@tonic-gate add T1,R8,T1 597*0Sstevel@tonic-gate !pre-LOADed X(11),R11 598*0Sstevel@tonic-gate add T1,T2,T1 599*0Sstevel@tonic-gate add D,T1,D 600*0Sstevel@tonic-gate sll D,11,T2 != 601*0Sstevel@tonic-gate srl D,32-11,D 602*0Sstevel@tonic-gate or D,T2,D 603*0Sstevel@tonic-gate add D,A,D 604*0Sstevel@tonic-gate 605*0Sstevel@tonic-gate xor D,A,T1 != 606*0Sstevel@tonic-gate sethi %hi(0x6d9d6122),T2 607*0Sstevel@tonic-gate xor T1,B,T1 608*0Sstevel@tonic-gate or T2,%lo(0x6d9d6122),T2 609*0Sstevel@tonic-gate add T1,R11,T1 != 610*0Sstevel@tonic-gate LOAD X(14),RX 611*0Sstevel@tonic-gate add T1,T2,T1 612*0Sstevel@tonic-gate add C,T1,C 613*0Sstevel@tonic-gate sll C,16,T2 != 614*0Sstevel@tonic-gate srl C,32-16,C 615*0Sstevel@tonic-gate or C,T2,C 616*0Sstevel@tonic-gate add C,D,C 617*0Sstevel@tonic-gate 618*0Sstevel@tonic-gate xor C,D,T1 != 619*0Sstevel@tonic-gate sethi %hi(0xfde5380c),T2 620*0Sstevel@tonic-gate xor T1,A,T1 621*0Sstevel@tonic-gate or T2,%lo(0xfde5380c),T2 622*0Sstevel@tonic-gate add T1,RX,T1 != 623*0Sstevel@tonic-gate !pre-LOADed X(1),R1 624*0Sstevel@tonic-gate add T1,T2,T1 625*0Sstevel@tonic-gate add B,T1,B 626*0Sstevel@tonic-gate sll B,23,T2 627*0Sstevel@tonic-gate srl B,32-23,B != 628*0Sstevel@tonic-gate or B,T2,B 629*0Sstevel@tonic-gate add B,C,B 630*0Sstevel@tonic-gate 631*0Sstevel@tonic-gate xor B,C,T1 632*0Sstevel@tonic-gate sethi %hi(0xa4beea44),T2 != 633*0Sstevel@tonic-gate xor T1,D,T1 634*0Sstevel@tonic-gate or T2,%lo(0xa4beea44),T2 635*0Sstevel@tonic-gate add T1,R1,T1 636*0Sstevel@tonic-gate !pre-LOADed X(4),R4 637*0Sstevel@tonic-gate add T1,T2,T1 != 638*0Sstevel@tonic-gate add A,T1,A 639*0Sstevel@tonic-gate sll A,4,T2 640*0Sstevel@tonic-gate srl A,32-4,A 641*0Sstevel@tonic-gate or A,T2,A != 642*0Sstevel@tonic-gate add A,B,A 643*0Sstevel@tonic-gate 644*0Sstevel@tonic-gate xor A,B,T1 645*0Sstevel@tonic-gate sethi %hi(0x4bdecfa9),T2 646*0Sstevel@tonic-gate xor T1,C,T1 != 647*0Sstevel@tonic-gate or T2,%lo(0x4bdecfa9),T2 648*0Sstevel@tonic-gate add T1,R4,T1 649*0Sstevel@tonic-gate !pre-LOADed X(7),R7 650*0Sstevel@tonic-gate add T1,T2,T1 651*0Sstevel@tonic-gate add D,T1,D != 652*0Sstevel@tonic-gate sll D,11,T2 653*0Sstevel@tonic-gate srl D,32-11,D 654*0Sstevel@tonic-gate or D,T2,D 655*0Sstevel@tonic-gate add D,A,D != 656*0Sstevel@tonic-gate 657*0Sstevel@tonic-gate xor D,A,T1 658*0Sstevel@tonic-gate sethi %hi(0xf6bb4b60),T2 659*0Sstevel@tonic-gate xor T1,B,T1 660*0Sstevel@tonic-gate or T2,%lo(0xf6bb4b60),T2 != 661*0Sstevel@tonic-gate add T1,R7,T1 662*0Sstevel@tonic-gate !pre-LOADed X(10),R10 663*0Sstevel@tonic-gate add T1,T2,T1 664*0Sstevel@tonic-gate add C,T1,C 665*0Sstevel@tonic-gate sll C,16,T2 != 666*0Sstevel@tonic-gate srl C,32-16,C 667*0Sstevel@tonic-gate or C,T2,C 668*0Sstevel@tonic-gate add C,D,C 669*0Sstevel@tonic-gate 670*0Sstevel@tonic-gate xor C,D,T1 != 671*0Sstevel@tonic-gate sethi %hi(0xbebfbc70),T2 672*0Sstevel@tonic-gate xor T1,A,T1 673*0Sstevel@tonic-gate or T2,%lo(0xbebfbc70),T2 674*0Sstevel@tonic-gate add T1,R10,T1 != 675*0Sstevel@tonic-gate !pre-LOADed X(13),R13 676*0Sstevel@tonic-gate add T1,T2,T1 677*0Sstevel@tonic-gate add B,T1,B 678*0Sstevel@tonic-gate sll B,23,T2 679*0Sstevel@tonic-gate srl B,32-23,B != 680*0Sstevel@tonic-gate or B,T2,B 681*0Sstevel@tonic-gate add B,C,B 682*0Sstevel@tonic-gate 683*0Sstevel@tonic-gate xor B,C,T1 684*0Sstevel@tonic-gate sethi %hi(0x289b7ec6),T2 != 685*0Sstevel@tonic-gate xor T1,D,T1 686*0Sstevel@tonic-gate or T2,%lo(0x289b7ec6),T2 687*0Sstevel@tonic-gate add T1,R13,T1 688*0Sstevel@tonic-gate !pre-LOADed X(0),R0 689*0Sstevel@tonic-gate add T1,T2,T1 != 690*0Sstevel@tonic-gate add A,T1,A 691*0Sstevel@tonic-gate sll A,4,T2 692*0Sstevel@tonic-gate srl A,32-4,A 693*0Sstevel@tonic-gate or A,T2,A != 694*0Sstevel@tonic-gate add A,B,A 695*0Sstevel@tonic-gate 696*0Sstevel@tonic-gate xor A,B,T1 697*0Sstevel@tonic-gate sethi %hi(0xeaa127fa),T2 698*0Sstevel@tonic-gate xor T1,C,T1 != 699*0Sstevel@tonic-gate or T2,%lo(0xeaa127fa),T2 700*0Sstevel@tonic-gate add T1,R0,T1 701*0Sstevel@tonic-gate !pre-LOADed X(3),R3 702*0Sstevel@tonic-gate add T1,T2,T1 703*0Sstevel@tonic-gate add D,T1,D != 704*0Sstevel@tonic-gate sll D,11,T2 705*0Sstevel@tonic-gate srl D,32-11,D 706*0Sstevel@tonic-gate or D,T2,D 707*0Sstevel@tonic-gate add D,A,D != 708*0Sstevel@tonic-gate 709*0Sstevel@tonic-gate xor D,A,T1 710*0Sstevel@tonic-gate sethi %hi(0xd4ef3085),T2 711*0Sstevel@tonic-gate xor T1,B,T1 712*0Sstevel@tonic-gate or T2,%lo(0xd4ef3085),T2 != 713*0Sstevel@tonic-gate add T1,R3,T1 714*0Sstevel@tonic-gate !pre-LOADed X(6),R6 715*0Sstevel@tonic-gate add T1,T2,T1 716*0Sstevel@tonic-gate add C,T1,C 717*0Sstevel@tonic-gate sll C,16,T2 != 718*0Sstevel@tonic-gate srl C,32-16,C 719*0Sstevel@tonic-gate or C,T2,C 720*0Sstevel@tonic-gate add C,D,C 721*0Sstevel@tonic-gate 722*0Sstevel@tonic-gate xor C,D,T1 != 723*0Sstevel@tonic-gate sethi %hi(0x04881d05),T2 724*0Sstevel@tonic-gate xor T1,A,T1 725*0Sstevel@tonic-gate or T2,%lo(0x04881d05),T2 726*0Sstevel@tonic-gate add T1,R6,T1 != 727*0Sstevel@tonic-gate !pre-LOADed X(9),R9 728*0Sstevel@tonic-gate add T1,T2,T1 729*0Sstevel@tonic-gate add B,T1,B 730*0Sstevel@tonic-gate sll B,23,T2 731*0Sstevel@tonic-gate srl B,32-23,B != 732*0Sstevel@tonic-gate or B,T2,B 733*0Sstevel@tonic-gate add B,C,B 734*0Sstevel@tonic-gate 735*0Sstevel@tonic-gate xor B,C,T1 736*0Sstevel@tonic-gate sethi %hi(0xd9d4d039),T2 != 737*0Sstevel@tonic-gate xor T1,D,T1 738*0Sstevel@tonic-gate or T2,%lo(0xd9d4d039),T2 739*0Sstevel@tonic-gate add T1,R9,T1 740*0Sstevel@tonic-gate !pre-LOADed X(12),R12 741*0Sstevel@tonic-gate add T1,T2,T1 != 742*0Sstevel@tonic-gate add A,T1,A 743*0Sstevel@tonic-gate sll A,4,T2 744*0Sstevel@tonic-gate srl A,32-4,A 745*0Sstevel@tonic-gate or A,T2,A != 746*0Sstevel@tonic-gate add A,B,A 747*0Sstevel@tonic-gate 748*0Sstevel@tonic-gate xor A,B,T1 749*0Sstevel@tonic-gate sethi %hi(0xe6db99e5),T2 750*0Sstevel@tonic-gate xor T1,C,T1 != 751*0Sstevel@tonic-gate or T2,%lo(0xe6db99e5),T2 752*0Sstevel@tonic-gate add T1,R12,T1 753*0Sstevel@tonic-gate LOAD X(15),RX 754*0Sstevel@tonic-gate add T1,T2,T1 != 755*0Sstevel@tonic-gate add D,T1,D 756*0Sstevel@tonic-gate sll D,11,T2 757*0Sstevel@tonic-gate srl D,32-11,D 758*0Sstevel@tonic-gate or D,T2,D != 759*0Sstevel@tonic-gate add D,A,D 760*0Sstevel@tonic-gate 761*0Sstevel@tonic-gate xor D,A,T1 762*0Sstevel@tonic-gate sethi %hi(0x1fa27cf8),T2 763*0Sstevel@tonic-gate xor T1,B,T1 != 764*0Sstevel@tonic-gate or T2,%lo(0x1fa27cf8),T2 765*0Sstevel@tonic-gate add T1,RX,T1 766*0Sstevel@tonic-gate !pre-LOADed X(2),R2 767*0Sstevel@tonic-gate add T1,T2,T1 768*0Sstevel@tonic-gate add C,T1,C != 769*0Sstevel@tonic-gate sll C,16,T2 770*0Sstevel@tonic-gate srl C,32-16,C 771*0Sstevel@tonic-gate or C,T2,C 772*0Sstevel@tonic-gate add C,D,C != 773*0Sstevel@tonic-gate 774*0Sstevel@tonic-gate xor C,D,T1 775*0Sstevel@tonic-gate sethi %hi(0xc4ac5665),T2 776*0Sstevel@tonic-gate xor T1,A,T1 777*0Sstevel@tonic-gate or T2,%lo(0xc4ac5665),T2 != 778*0Sstevel@tonic-gate add T1,R2,T1 779*0Sstevel@tonic-gate !pre-LOADed X(0),R0 780*0Sstevel@tonic-gate add T1,T2,T1 781*0Sstevel@tonic-gate add B,T1,B 782*0Sstevel@tonic-gate sll B,23,T2 != 783*0Sstevel@tonic-gate srl B,32-23,B 784*0Sstevel@tonic-gate or B,T2,B 785*0Sstevel@tonic-gate add B,C,B 786*0Sstevel@tonic-gate 787*0Sstevel@tonic-gate!!!!!!!!Round 3 788*0Sstevel@tonic-gate 789*0Sstevel@tonic-gate orn B,D,T1 != 790*0Sstevel@tonic-gate sethi %hi(0xf4292244),T2 791*0Sstevel@tonic-gate xor T1,C,T1 792*0Sstevel@tonic-gate or T2,%lo(0xf4292244),T2 793*0Sstevel@tonic-gate add T1,R0,T1 != 794*0Sstevel@tonic-gate !pre-LOADed X(7),R7 795*0Sstevel@tonic-gate add T1,T2,T1 796*0Sstevel@tonic-gate add A,T1,A 797*0Sstevel@tonic-gate sll A,6,T2 798*0Sstevel@tonic-gate srl A,32-6,A != 799*0Sstevel@tonic-gate or A,T2,A 800*0Sstevel@tonic-gate add A,B,A 801*0Sstevel@tonic-gate 802*0Sstevel@tonic-gate orn A,C,T1 803*0Sstevel@tonic-gate sethi %hi(0x432aff97),T2 != 804*0Sstevel@tonic-gate xor T1,B,T1 805*0Sstevel@tonic-gate or T2,%lo(0x432aff97),T2 806*0Sstevel@tonic-gate LOAD X(14),RX 807*0Sstevel@tonic-gate add T1,R7,T1 != 808*0Sstevel@tonic-gate add T1,T2,T1 809*0Sstevel@tonic-gate add D,T1,D 810*0Sstevel@tonic-gate sll D,10,T2 811*0Sstevel@tonic-gate srl D,32-10,D != 812*0Sstevel@tonic-gate or D,T2,D 813*0Sstevel@tonic-gate add D,A,D 814*0Sstevel@tonic-gate 815*0Sstevel@tonic-gate orn D,B,T1 816*0Sstevel@tonic-gate sethi %hi(0xab9423a7),T2 != 817*0Sstevel@tonic-gate xor T1,A,T1 818*0Sstevel@tonic-gate or T2,%lo(0xab9423a7),T2 819*0Sstevel@tonic-gate add T1,RX,T1 820*0Sstevel@tonic-gate !pre-LOADed X(5),R5 821*0Sstevel@tonic-gate add T1,T2,T1 != 822*0Sstevel@tonic-gate add C,T1,C 823*0Sstevel@tonic-gate sll C,15,T2 824*0Sstevel@tonic-gate srl C,32-15,C 825*0Sstevel@tonic-gate or C,T2,C != 826*0Sstevel@tonic-gate add C,D,C 827*0Sstevel@tonic-gate 828*0Sstevel@tonic-gate orn C,A,T1 829*0Sstevel@tonic-gate sethi %hi(0xfc93a039),T2 830*0Sstevel@tonic-gate xor T1,D,T1 != 831*0Sstevel@tonic-gate or T2,%lo(0xfc93a039),T2 832*0Sstevel@tonic-gate add T1,R5,T1 833*0Sstevel@tonic-gate !pre-LOADed X(12),R12 834*0Sstevel@tonic-gate add T1,T2,T1 835*0Sstevel@tonic-gate add B,T1,B != 836*0Sstevel@tonic-gate sll B,21,T2 837*0Sstevel@tonic-gate srl B,32-21,B 838*0Sstevel@tonic-gate or B,T2,B 839*0Sstevel@tonic-gate add B,C,B != 840*0Sstevel@tonic-gate 841*0Sstevel@tonic-gate orn B,D,T1 842*0Sstevel@tonic-gate sethi %hi(0x655b59c3),T2 843*0Sstevel@tonic-gate xor T1,C,T1 844*0Sstevel@tonic-gate or T2,%lo(0x655b59c3),T2 != 845*0Sstevel@tonic-gate add T1,R12,T1 846*0Sstevel@tonic-gate !pre-LOADed X(3),R3 847*0Sstevel@tonic-gate add T1,T2,T1 848*0Sstevel@tonic-gate add A,T1,A 849*0Sstevel@tonic-gate sll A,6,T2 != 850*0Sstevel@tonic-gate srl A,32-6,A 851*0Sstevel@tonic-gate or A,T2,A 852*0Sstevel@tonic-gate add A,B,A 853*0Sstevel@tonic-gate 854*0Sstevel@tonic-gate orn A,C,T1 != 855*0Sstevel@tonic-gate sethi %hi(0x8f0ccc92),T2 856*0Sstevel@tonic-gate xor T1,B,T1 857*0Sstevel@tonic-gate or T2,%lo(0x8f0ccc92),T2 858*0Sstevel@tonic-gate add T1,R3,T1 != 859*0Sstevel@tonic-gate !pre-LOADed X(10),R10 860*0Sstevel@tonic-gate add T1,T2,T1 861*0Sstevel@tonic-gate add D,T1,D 862*0Sstevel@tonic-gate sll D,10,T2 863*0Sstevel@tonic-gate srl D,32-10,D != 864*0Sstevel@tonic-gate or D,T2,D 865*0Sstevel@tonic-gate add D,A,D 866*0Sstevel@tonic-gate 867*0Sstevel@tonic-gate orn D,B,T1 868*0Sstevel@tonic-gate sethi %hi(0xffeff47d),T2 != 869*0Sstevel@tonic-gate xor T1,A,T1 870*0Sstevel@tonic-gate or T2,%lo(0xffeff47d),T2 871*0Sstevel@tonic-gate add T1,R10,T1 872*0Sstevel@tonic-gate !pre-LOADed X(1),R1 873*0Sstevel@tonic-gate add T1,T2,T1 != 874*0Sstevel@tonic-gate add C,T1,C 875*0Sstevel@tonic-gate sll C,15,T2 876*0Sstevel@tonic-gate srl C,32-15,C 877*0Sstevel@tonic-gate or C,T2,C != 878*0Sstevel@tonic-gate add C,D,C 879*0Sstevel@tonic-gate 880*0Sstevel@tonic-gate orn C,A,T1 881*0Sstevel@tonic-gate sethi %hi(0x85845dd1),T2 882*0Sstevel@tonic-gate xor T1,D,T1 != 883*0Sstevel@tonic-gate or T2,%lo(0x85845dd1),T2 884*0Sstevel@tonic-gate add T1,R1,T1 885*0Sstevel@tonic-gate !pre-LOADed X(8),R8 886*0Sstevel@tonic-gate add T1,T2,T1 887*0Sstevel@tonic-gate add B,T1,B != 888*0Sstevel@tonic-gate sll B,21,T2 889*0Sstevel@tonic-gate srl B,32-21,B 890*0Sstevel@tonic-gate or B,T2,B 891*0Sstevel@tonic-gate add B,C,B != 892*0Sstevel@tonic-gate 893*0Sstevel@tonic-gate orn B,D,T1 894*0Sstevel@tonic-gate sethi %hi(0x6fa87e4f),T2 895*0Sstevel@tonic-gate xor T1,C,T1 896*0Sstevel@tonic-gate or T2,%lo(0x6fa87e4f),T2 != 897*0Sstevel@tonic-gate add T1,R8,T1 898*0Sstevel@tonic-gate LOAD X(15),RX 899*0Sstevel@tonic-gate add T1,T2,T1 900*0Sstevel@tonic-gate add A,T1,A != 901*0Sstevel@tonic-gate sll A,6,T2 902*0Sstevel@tonic-gate srl A,32-6,A 903*0Sstevel@tonic-gate or A,T2,A 904*0Sstevel@tonic-gate add A,B,A != 905*0Sstevel@tonic-gate 906*0Sstevel@tonic-gate orn A,C,T1 907*0Sstevel@tonic-gate sethi %hi(0xfe2ce6e0),T2 908*0Sstevel@tonic-gate xor T1,B,T1 909*0Sstevel@tonic-gate or T2,%lo(0xfe2ce6e0),T2 != 910*0Sstevel@tonic-gate add T1,RX,T1 911*0Sstevel@tonic-gate !pre-LOADed X(6),R6 912*0Sstevel@tonic-gate add T1,T2,T1 913*0Sstevel@tonic-gate add D,T1,D 914*0Sstevel@tonic-gate sll D,10,T2 != 915*0Sstevel@tonic-gate srl D,32-10,D 916*0Sstevel@tonic-gate or D,T2,D 917*0Sstevel@tonic-gate add D,A,D 918*0Sstevel@tonic-gate 919*0Sstevel@tonic-gate orn D,B,T1 != 920*0Sstevel@tonic-gate sethi %hi(0xa3014314),T2 921*0Sstevel@tonic-gate xor T1,A,T1 922*0Sstevel@tonic-gate or T2,%lo(0xa3014314),T2 923*0Sstevel@tonic-gate add T1,R6,T1 != 924*0Sstevel@tonic-gate !pre-LOADed X(13),R13 925*0Sstevel@tonic-gate add T1,T2,T1 926*0Sstevel@tonic-gate add C,T1,C 927*0Sstevel@tonic-gate sll C,15,T2 928*0Sstevel@tonic-gate srl C,32-15,C != 929*0Sstevel@tonic-gate or C,T2,C 930*0Sstevel@tonic-gate add C,D,C 931*0Sstevel@tonic-gate 932*0Sstevel@tonic-gate orn C,A,T1 933*0Sstevel@tonic-gate sethi %hi(0x4e0811a1),T2 != 934*0Sstevel@tonic-gate xor T1,D,T1 935*0Sstevel@tonic-gate or T2,%lo(0x4e0811a1),T2 936*0Sstevel@tonic-gate !pre-LOADed X(4),R4 937*0Sstevel@tonic-gate ld [Aptr],Aval 938*0Sstevel@tonic-gate add T1,R13,T1 != 939*0Sstevel@tonic-gate add T1,T2,T1 940*0Sstevel@tonic-gate add B,T1,B 941*0Sstevel@tonic-gate sll B,21,T2 942*0Sstevel@tonic-gate srl B,32-21,B != 943*0Sstevel@tonic-gate or B,T2,B 944*0Sstevel@tonic-gate add B,C,B 945*0Sstevel@tonic-gate 946*0Sstevel@tonic-gate orn B,D,T1 947*0Sstevel@tonic-gate sethi %hi(0xf7537e82),T2 != 948*0Sstevel@tonic-gate xor T1,C,T1 949*0Sstevel@tonic-gate or T2,%lo(0xf7537e82),T2 950*0Sstevel@tonic-gate !pre-LOADed X(11),R11 951*0Sstevel@tonic-gate ld [Dptr],Dval 952*0Sstevel@tonic-gate add T1,R4,T1 != 953*0Sstevel@tonic-gate add T1,T2,T1 954*0Sstevel@tonic-gate add A,T1,A 955*0Sstevel@tonic-gate sll A,6,T2 956*0Sstevel@tonic-gate srl A,32-6,A != 957*0Sstevel@tonic-gate or A,T2,A 958*0Sstevel@tonic-gate add A,B,A 959*0Sstevel@tonic-gate 960*0Sstevel@tonic-gate orn A,C,T1 961*0Sstevel@tonic-gate sethi %hi(0xbd3af235),T2 != 962*0Sstevel@tonic-gate xor T1,B,T1 963*0Sstevel@tonic-gate or T2,%lo(0xbd3af235),T2 964*0Sstevel@tonic-gate !pre-LOADed X(2),R2 965*0Sstevel@tonic-gate ld [Cptr],Cval 966*0Sstevel@tonic-gate add T1,R11,T1 != 967*0Sstevel@tonic-gate add T1,T2,T1 968*0Sstevel@tonic-gate add D,T1,D 969*0Sstevel@tonic-gate sll D,10,T2 970*0Sstevel@tonic-gate srl D,32-10,D != 971*0Sstevel@tonic-gate or D,T2,D 972*0Sstevel@tonic-gate add D,A,D 973*0Sstevel@tonic-gate 974*0Sstevel@tonic-gate orn D,B,T1 975*0Sstevel@tonic-gate sethi %hi(0x2ad7d2bb),T2 != 976*0Sstevel@tonic-gate xor T1,A,T1 977*0Sstevel@tonic-gate or T2,%lo(0x2ad7d2bb),T2 978*0Sstevel@tonic-gate !pre-LOADed X(9),R9 979*0Sstevel@tonic-gate ld [Bptr],Bval 980*0Sstevel@tonic-gate add T1,R2,T1 != 981*0Sstevel@tonic-gate add Aval,A,Aval 982*0Sstevel@tonic-gate add T1,T2,T1 983*0Sstevel@tonic-gate st Aval,[Aptr] 984*0Sstevel@tonic-gate add C,T1,C != 985*0Sstevel@tonic-gate sll C,15,T2 986*0Sstevel@tonic-gate add Dval,D,Dval 987*0Sstevel@tonic-gate srl C,32-15,C 988*0Sstevel@tonic-gate or C,T2,C != 989*0Sstevel@tonic-gate st Dval,[Dptr] 990*0Sstevel@tonic-gate add C,D,C 991*0Sstevel@tonic-gate 992*0Sstevel@tonic-gate orn C,A,T1 993*0Sstevel@tonic-gate sethi %hi(0xeb86d391),T2 != 994*0Sstevel@tonic-gate xor T1,D,T1 995*0Sstevel@tonic-gate or T2,%lo(0xeb86d391),T2 996*0Sstevel@tonic-gate add T1,R9,T1 997*0Sstevel@tonic-gate !pre-LOADed X(0),R0 998*0Sstevel@tonic-gate mov Aval,A != 999*0Sstevel@tonic-gate add T1,T2,T1 1000*0Sstevel@tonic-gate mov Dval,D 1001*0Sstevel@tonic-gate add B,T1,B 1002*0Sstevel@tonic-gate sll B,21,T2 != 1003*0Sstevel@tonic-gate add Cval,C,Cval 1004*0Sstevel@tonic-gate srl B,32-21,B 1005*0Sstevel@tonic-gate st Cval,[Cptr] 1006*0Sstevel@tonic-gate or B,T2,B != 1007*0Sstevel@tonic-gate add B,C,B 1008*0Sstevel@tonic-gate 1009*0Sstevel@tonic-gate deccc %i2 1010*0Sstevel@tonic-gate mov Cval,C 1011*0Sstevel@tonic-gate add B,Bval,B != 1012*0Sstevel@tonic-gate inc 64,%i1 1013*0Sstevel@tonic-gate nop 1014*0Sstevel@tonic-gate st B,[Bptr] 1015*0Sstevel@tonic-gate nop != 1016*0Sstevel@tonic-gate 1017*0Sstevel@tonic-gate#ifdef OPENSSL_SYSNAME_ULTRASPARC 1018*0Sstevel@tonic-gate bg,a,pt %icc,.Lmd5_block_loop 1019*0Sstevel@tonic-gate#else 1020*0Sstevel@tonic-gate bg,a .Lmd5_block_loop 1021*0Sstevel@tonic-gate#endif 1022*0Sstevel@tonic-gate LOAD X(0),R0 1023*0Sstevel@tonic-gate 1024*0Sstevel@tonic-gate#ifdef ASI_PRIMARY_LITTLE 1025*0Sstevel@tonic-gate wr %g0,%o7,%asi 1026*0Sstevel@tonic-gate#endif 1027*0Sstevel@tonic-gate ret 1028*0Sstevel@tonic-gate restore %g0,0,%o0 1029*0Sstevel@tonic-gate 1030*0Sstevel@tonic-gate.type md5_block,#function 1031*0Sstevel@tonic-gate.size md5_block,(.-md5_block) 1032