1238384Sjkim#!/usr/bin/env perl 2238384Sjkim# 3238384Sjkim# ==================================================================== 4238384Sjkim# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL 5238384Sjkim# project. Rights for redistribution and usage in source and binary 6238384Sjkim# forms are granted according to the OpenSSL license. 7238384Sjkim# ==================================================================== 8238384Sjkim# 9238384Sjkim# Version 1.1 10238384Sjkim# 11238384Sjkim# The major reason for undertaken effort was to mitigate the hazard of 12238384Sjkim# cache-timing attack. This is [currently and initially!] addressed in 13238384Sjkim# two ways. 1. S-boxes are compressed from 5KB to 2KB+256B size each. 14238384Sjkim# 2. References to them are scheduled for L2 cache latency, meaning 15238384Sjkim# that the tables don't have to reside in L1 cache. Once again, this 16238384Sjkim# is an initial draft and one should expect more countermeasures to 17238384Sjkim# be implemented... 18238384Sjkim# 19238384Sjkim# Version 1.1 prefetches T[ed]4 in order to mitigate attack on last 20238384Sjkim# round. 21238384Sjkim# 22238384Sjkim# Even though performance was not the primary goal [on the contrary, 23238384Sjkim# extra shifts "induced" by compressed S-box and longer loop epilogue 24238384Sjkim# "induced" by scheduling for L2 have negative effect on performance], 25238384Sjkim# the code turned out to run in ~23 cycles per processed byte en-/ 26238384Sjkim# decrypted with 128-bit key. This is pretty good result for code 27238384Sjkim# with mentioned qualities and UltraSPARC core. Compared to Sun C 28238384Sjkim# generated code my encrypt procedure runs just few percents faster, 29238384Sjkim# while decrypt one - whole 50% faster [yes, Sun C failed to generate 30238384Sjkim# optimal decrypt procedure]. Compared to GNU C generated code both 31238384Sjkim# procedures are more than 60% faster:-) 32238384Sjkim 33238384Sjkim$bits=32; 34238384Sjkimfor (@ARGV) { $bits=64 if (/\-m64/ || /\-xarch\=v9/); } 35238384Sjkimif ($bits==64) { $bias=2047; $frame=192; } 36238384Sjkimelse { $bias=0; $frame=112; } 37238384Sjkim$locals=16; 38238384Sjkim 39238384Sjkim$acc0="%l0"; 40238384Sjkim$acc1="%o0"; 41238384Sjkim$acc2="%o1"; 42238384Sjkim$acc3="%o2"; 43238384Sjkim 44238384Sjkim$acc4="%l1"; 45238384Sjkim$acc5="%o3"; 46238384Sjkim$acc6="%o4"; 47238384Sjkim$acc7="%o5"; 48238384Sjkim 49238384Sjkim$acc8="%l2"; 50238384Sjkim$acc9="%o7"; 51238384Sjkim$acc10="%g1"; 52238384Sjkim$acc11="%g2"; 53238384Sjkim 54238384Sjkim$acc12="%l3"; 55238384Sjkim$acc13="%g3"; 56238384Sjkim$acc14="%g4"; 57238384Sjkim$acc15="%g5"; 58238384Sjkim 59238384Sjkim$t0="%l4"; 60238384Sjkim$t1="%l5"; 61238384Sjkim$t2="%l6"; 62238384Sjkim$t3="%l7"; 63238384Sjkim 64238384Sjkim$s0="%i0"; 65238384Sjkim$s1="%i1"; 66238384Sjkim$s2="%i2"; 67238384Sjkim$s3="%i3"; 68238384Sjkim$tbl="%i4"; 69238384Sjkim$key="%i5"; 70238384Sjkim$rounds="%i7"; # aliases with return address, which is off-loaded to stack 71238384Sjkim 72238384Sjkimsub _data_word() 73238384Sjkim{ my $i; 74238384Sjkim while(defined($i=shift)) { $code.=sprintf"\t.long\t0x%08x,0x%08x\n",$i,$i; } 75238384Sjkim} 76238384Sjkim 77238384Sjkim$code.=<<___ if ($bits==64); 78238384Sjkim.register %g2,#scratch 79238384Sjkim.register %g3,#scratch 80238384Sjkim___ 81238384Sjkim$code.=<<___; 82238384Sjkim.section ".text",#alloc,#execinstr 83238384Sjkim 84238384Sjkim.align 256 85238384SjkimAES_Te: 86238384Sjkim___ 87238384Sjkim&_data_word( 88238384Sjkim 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 89238384Sjkim 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 90238384Sjkim 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 91238384Sjkim 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 92238384Sjkim 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 93238384Sjkim 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 94238384Sjkim 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 95238384Sjkim 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 96238384Sjkim 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 97238384Sjkim 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 98238384Sjkim 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 99238384Sjkim 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 100238384Sjkim 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 101238384Sjkim 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 102238384Sjkim 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 103238384Sjkim 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 104238384Sjkim 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 105238384Sjkim 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 106238384Sjkim 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 107238384Sjkim 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 108238384Sjkim 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 109238384Sjkim 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 110238384Sjkim 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 111238384Sjkim 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 112238384Sjkim 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 113238384Sjkim 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 114238384Sjkim 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 115238384Sjkim 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 116238384Sjkim 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 117238384Sjkim 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 118238384Sjkim 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 119238384Sjkim 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 120238384Sjkim 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 121238384Sjkim 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 122238384Sjkim 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 123238384Sjkim 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 124238384Sjkim 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 125238384Sjkim 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 126238384Sjkim 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 127238384Sjkim 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 128238384Sjkim 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 129238384Sjkim 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 130238384Sjkim 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 131238384Sjkim 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 132238384Sjkim 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 133238384Sjkim 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 134238384Sjkim 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 135238384Sjkim 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 136238384Sjkim 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 137238384Sjkim 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 138238384Sjkim 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 139238384Sjkim 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 140238384Sjkim 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 141238384Sjkim 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 142238384Sjkim 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 143238384Sjkim 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 144238384Sjkim 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 145238384Sjkim 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 146238384Sjkim 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 147238384Sjkim 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 148238384Sjkim 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 149238384Sjkim 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 150238384Sjkim 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 151238384Sjkim 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a); 152238384Sjkim$code.=<<___; 153238384Sjkim .byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 154238384Sjkim .byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 155238384Sjkim .byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0 156238384Sjkim .byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 157238384Sjkim .byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc 158238384Sjkim .byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 159238384Sjkim .byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a 160238384Sjkim .byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 161238384Sjkim .byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0 162238384Sjkim .byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 163238384Sjkim .byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b 164238384Sjkim .byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf 165238384Sjkim .byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85 166238384Sjkim .byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 167238384Sjkim .byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5 168238384Sjkim .byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 169238384Sjkim .byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17 170238384Sjkim .byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 171238384Sjkim .byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88 172238384Sjkim .byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb 173238384Sjkim .byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c 174238384Sjkim .byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 175238384Sjkim .byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9 176238384Sjkim .byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 177238384Sjkim .byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6 178238384Sjkim .byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a 179238384Sjkim .byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e 180238384Sjkim .byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e 181238384Sjkim .byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94 182238384Sjkim .byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf 183238384Sjkim .byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 184238384Sjkim .byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 185238384Sjkim.type AES_Te,#object 186238384Sjkim.size AES_Te,(.-AES_Te) 187238384Sjkim 188238384Sjkim.align 64 189238384Sjkim.skip 16 190238384Sjkim_sparcv9_AES_encrypt: 191238384Sjkim save %sp,-$frame-$locals,%sp 192238384Sjkim stx %i7,[%sp+$bias+$frame+0] ! off-load return address 193238384Sjkim ld [$key+240],$rounds 194238384Sjkim ld [$key+0],$t0 195238384Sjkim ld [$key+4],$t1 ! 196238384Sjkim ld [$key+8],$t2 197238384Sjkim srl $rounds,1,$rounds 198238384Sjkim xor $t0,$s0,$s0 199238384Sjkim ld [$key+12],$t3 200238384Sjkim srl $s0,21,$acc0 201238384Sjkim xor $t1,$s1,$s1 202238384Sjkim ld [$key+16],$t0 203238384Sjkim srl $s1,13,$acc1 ! 204238384Sjkim xor $t2,$s2,$s2 205238384Sjkim ld [$key+20],$t1 206238384Sjkim xor $t3,$s3,$s3 207238384Sjkim ld [$key+24],$t2 208238384Sjkim and $acc0,2040,$acc0 209238384Sjkim ld [$key+28],$t3 210238384Sjkim nop 211238384Sjkim.Lenc_loop: 212238384Sjkim srl $s2,5,$acc2 ! 213238384Sjkim and $acc1,2040,$acc1 214238384Sjkim ldx [$tbl+$acc0],$acc0 215238384Sjkim sll $s3,3,$acc3 216238384Sjkim and $acc2,2040,$acc2 217238384Sjkim ldx [$tbl+$acc1],$acc1 218238384Sjkim srl $s1,21,$acc4 219238384Sjkim and $acc3,2040,$acc3 220238384Sjkim ldx [$tbl+$acc2],$acc2 ! 221238384Sjkim srl $s2,13,$acc5 222238384Sjkim and $acc4,2040,$acc4 223238384Sjkim ldx [$tbl+$acc3],$acc3 224238384Sjkim srl $s3,5,$acc6 225238384Sjkim and $acc5,2040,$acc5 226238384Sjkim ldx [$tbl+$acc4],$acc4 227238384Sjkim fmovs %f0,%f0 228238384Sjkim sll $s0,3,$acc7 ! 229238384Sjkim and $acc6,2040,$acc6 230238384Sjkim ldx [$tbl+$acc5],$acc5 231238384Sjkim srl $s2,21,$acc8 232238384Sjkim and $acc7,2040,$acc7 233238384Sjkim ldx [$tbl+$acc6],$acc6 234238384Sjkim srl $s3,13,$acc9 235238384Sjkim and $acc8,2040,$acc8 236238384Sjkim ldx [$tbl+$acc7],$acc7 ! 237238384Sjkim srl $s0,5,$acc10 238238384Sjkim and $acc9,2040,$acc9 239238384Sjkim ldx [$tbl+$acc8],$acc8 240238384Sjkim sll $s1,3,$acc11 241238384Sjkim and $acc10,2040,$acc10 242238384Sjkim ldx [$tbl+$acc9],$acc9 243238384Sjkim fmovs %f0,%f0 244238384Sjkim srl $s3,21,$acc12 ! 245238384Sjkim and $acc11,2040,$acc11 246238384Sjkim ldx [$tbl+$acc10],$acc10 247238384Sjkim srl $s0,13,$acc13 248238384Sjkim and $acc12,2040,$acc12 249238384Sjkim ldx [$tbl+$acc11],$acc11 250238384Sjkim srl $s1,5,$acc14 251238384Sjkim and $acc13,2040,$acc13 252238384Sjkim ldx [$tbl+$acc12],$acc12 ! 253238384Sjkim sll $s2,3,$acc15 254238384Sjkim and $acc14,2040,$acc14 255238384Sjkim ldx [$tbl+$acc13],$acc13 256238384Sjkim and $acc15,2040,$acc15 257238384Sjkim add $key,32,$key 258238384Sjkim ldx [$tbl+$acc14],$acc14 259238384Sjkim fmovs %f0,%f0 260238384Sjkim subcc $rounds,1,$rounds ! 261238384Sjkim ldx [$tbl+$acc15],$acc15 262238384Sjkim bz,a,pn %icc,.Lenc_last 263238384Sjkim add $tbl,2048,$rounds 264238384Sjkim 265238384Sjkim srlx $acc1,8,$acc1 266238384Sjkim xor $acc0,$t0,$t0 267238384Sjkim ld [$key+0],$s0 268238384Sjkim fmovs %f0,%f0 269238384Sjkim srlx $acc2,16,$acc2 ! 270238384Sjkim xor $acc1,$t0,$t0 271238384Sjkim ld [$key+4],$s1 272238384Sjkim srlx $acc3,24,$acc3 273238384Sjkim xor $acc2,$t0,$t0 274238384Sjkim ld [$key+8],$s2 275238384Sjkim srlx $acc5,8,$acc5 276238384Sjkim xor $acc3,$t0,$t0 277238384Sjkim ld [$key+12],$s3 ! 278238384Sjkim srlx $acc6,16,$acc6 279238384Sjkim xor $acc4,$t1,$t1 280238384Sjkim fmovs %f0,%f0 281238384Sjkim srlx $acc7,24,$acc7 282238384Sjkim xor $acc5,$t1,$t1 283238384Sjkim srlx $acc9,8,$acc9 284238384Sjkim xor $acc6,$t1,$t1 285238384Sjkim srlx $acc10,16,$acc10 ! 286238384Sjkim xor $acc7,$t1,$t1 287238384Sjkim srlx $acc11,24,$acc11 288238384Sjkim xor $acc8,$t2,$t2 289238384Sjkim srlx $acc13,8,$acc13 290238384Sjkim xor $acc9,$t2,$t2 291238384Sjkim srlx $acc14,16,$acc14 292238384Sjkim xor $acc10,$t2,$t2 293238384Sjkim srlx $acc15,24,$acc15 ! 294238384Sjkim xor $acc11,$t2,$t2 295238384Sjkim xor $acc12,$acc14,$acc14 296238384Sjkim xor $acc13,$t3,$t3 297238384Sjkim srl $t0,21,$acc0 298238384Sjkim xor $acc14,$t3,$t3 299238384Sjkim srl $t1,13,$acc1 300238384Sjkim xor $acc15,$t3,$t3 301238384Sjkim 302238384Sjkim and $acc0,2040,$acc0 ! 303238384Sjkim srl $t2,5,$acc2 304238384Sjkim and $acc1,2040,$acc1 305238384Sjkim ldx [$tbl+$acc0],$acc0 306238384Sjkim sll $t3,3,$acc3 307238384Sjkim and $acc2,2040,$acc2 308238384Sjkim ldx [$tbl+$acc1],$acc1 309238384Sjkim fmovs %f0,%f0 310238384Sjkim srl $t1,21,$acc4 ! 311238384Sjkim and $acc3,2040,$acc3 312238384Sjkim ldx [$tbl+$acc2],$acc2 313238384Sjkim srl $t2,13,$acc5 314238384Sjkim and $acc4,2040,$acc4 315238384Sjkim ldx [$tbl+$acc3],$acc3 316238384Sjkim srl $t3,5,$acc6 317238384Sjkim and $acc5,2040,$acc5 318238384Sjkim ldx [$tbl+$acc4],$acc4 ! 319238384Sjkim sll $t0,3,$acc7 320238384Sjkim and $acc6,2040,$acc6 321238384Sjkim ldx [$tbl+$acc5],$acc5 322238384Sjkim srl $t2,21,$acc8 323238384Sjkim and $acc7,2040,$acc7 324238384Sjkim ldx [$tbl+$acc6],$acc6 325238384Sjkim fmovs %f0,%f0 326238384Sjkim srl $t3,13,$acc9 ! 327238384Sjkim and $acc8,2040,$acc8 328238384Sjkim ldx [$tbl+$acc7],$acc7 329238384Sjkim srl $t0,5,$acc10 330238384Sjkim and $acc9,2040,$acc9 331238384Sjkim ldx [$tbl+$acc8],$acc8 332238384Sjkim sll $t1,3,$acc11 333238384Sjkim and $acc10,2040,$acc10 334238384Sjkim ldx [$tbl+$acc9],$acc9 ! 335238384Sjkim srl $t3,21,$acc12 336238384Sjkim and $acc11,2040,$acc11 337238384Sjkim ldx [$tbl+$acc10],$acc10 338238384Sjkim srl $t0,13,$acc13 339238384Sjkim and $acc12,2040,$acc12 340238384Sjkim ldx [$tbl+$acc11],$acc11 341238384Sjkim fmovs %f0,%f0 342238384Sjkim srl $t1,5,$acc14 ! 343238384Sjkim and $acc13,2040,$acc13 344238384Sjkim ldx [$tbl+$acc12],$acc12 345238384Sjkim sll $t2,3,$acc15 346238384Sjkim and $acc14,2040,$acc14 347238384Sjkim ldx [$tbl+$acc13],$acc13 348238384Sjkim srlx $acc1,8,$acc1 349238384Sjkim and $acc15,2040,$acc15 350238384Sjkim ldx [$tbl+$acc14],$acc14 ! 351238384Sjkim 352238384Sjkim srlx $acc2,16,$acc2 353238384Sjkim xor $acc0,$s0,$s0 354238384Sjkim ldx [$tbl+$acc15],$acc15 355238384Sjkim srlx $acc3,24,$acc3 356238384Sjkim xor $acc1,$s0,$s0 357238384Sjkim ld [$key+16],$t0 358238384Sjkim fmovs %f0,%f0 359238384Sjkim srlx $acc5,8,$acc5 ! 360238384Sjkim xor $acc2,$s0,$s0 361238384Sjkim ld [$key+20],$t1 362238384Sjkim srlx $acc6,16,$acc6 363238384Sjkim xor $acc3,$s0,$s0 364238384Sjkim ld [$key+24],$t2 365238384Sjkim srlx $acc7,24,$acc7 366238384Sjkim xor $acc4,$s1,$s1 367238384Sjkim ld [$key+28],$t3 ! 368238384Sjkim srlx $acc9,8,$acc9 369238384Sjkim xor $acc5,$s1,$s1 370238384Sjkim ldx [$tbl+2048+0],%g0 ! prefetch te4 371238384Sjkim srlx $acc10,16,$acc10 372238384Sjkim xor $acc6,$s1,$s1 373238384Sjkim ldx [$tbl+2048+32],%g0 ! prefetch te4 374238384Sjkim srlx $acc11,24,$acc11 375238384Sjkim xor $acc7,$s1,$s1 376238384Sjkim ldx [$tbl+2048+64],%g0 ! prefetch te4 377238384Sjkim srlx $acc13,8,$acc13 378238384Sjkim xor $acc8,$s2,$s2 379238384Sjkim ldx [$tbl+2048+96],%g0 ! prefetch te4 380238384Sjkim srlx $acc14,16,$acc14 ! 381238384Sjkim xor $acc9,$s2,$s2 382238384Sjkim ldx [$tbl+2048+128],%g0 ! prefetch te4 383238384Sjkim srlx $acc15,24,$acc15 384238384Sjkim xor $acc10,$s2,$s2 385238384Sjkim ldx [$tbl+2048+160],%g0 ! prefetch te4 386238384Sjkim srl $s0,21,$acc0 387238384Sjkim xor $acc11,$s2,$s2 388238384Sjkim ldx [$tbl+2048+192],%g0 ! prefetch te4 389238384Sjkim xor $acc12,$acc14,$acc14 390238384Sjkim xor $acc13,$s3,$s3 391238384Sjkim ldx [$tbl+2048+224],%g0 ! prefetch te4 392238384Sjkim srl $s1,13,$acc1 ! 393238384Sjkim xor $acc14,$s3,$s3 394238384Sjkim xor $acc15,$s3,$s3 395238384Sjkim ba .Lenc_loop 396238384Sjkim and $acc0,2040,$acc0 397238384Sjkim 398238384Sjkim.align 32 399238384Sjkim.Lenc_last: 400238384Sjkim srlx $acc1,8,$acc1 ! 401238384Sjkim xor $acc0,$t0,$t0 402238384Sjkim ld [$key+0],$s0 403238384Sjkim srlx $acc2,16,$acc2 404238384Sjkim xor $acc1,$t0,$t0 405238384Sjkim ld [$key+4],$s1 406238384Sjkim srlx $acc3,24,$acc3 407238384Sjkim xor $acc2,$t0,$t0 408238384Sjkim ld [$key+8],$s2 ! 409238384Sjkim srlx $acc5,8,$acc5 410238384Sjkim xor $acc3,$t0,$t0 411238384Sjkim ld [$key+12],$s3 412238384Sjkim srlx $acc6,16,$acc6 413238384Sjkim xor $acc4,$t1,$t1 414238384Sjkim srlx $acc7,24,$acc7 415238384Sjkim xor $acc5,$t1,$t1 416238384Sjkim srlx $acc9,8,$acc9 ! 417238384Sjkim xor $acc6,$t1,$t1 418238384Sjkim srlx $acc10,16,$acc10 419238384Sjkim xor $acc7,$t1,$t1 420238384Sjkim srlx $acc11,24,$acc11 421238384Sjkim xor $acc8,$t2,$t2 422238384Sjkim srlx $acc13,8,$acc13 423238384Sjkim xor $acc9,$t2,$t2 424238384Sjkim srlx $acc14,16,$acc14 ! 425238384Sjkim xor $acc10,$t2,$t2 426238384Sjkim srlx $acc15,24,$acc15 427238384Sjkim xor $acc11,$t2,$t2 428238384Sjkim xor $acc12,$acc14,$acc14 429238384Sjkim xor $acc13,$t3,$t3 430238384Sjkim srl $t0,24,$acc0 431238384Sjkim xor $acc14,$t3,$t3 432238384Sjkim srl $t1,16,$acc1 ! 433238384Sjkim xor $acc15,$t3,$t3 434238384Sjkim 435238384Sjkim srl $t2,8,$acc2 436238384Sjkim and $acc1,255,$acc1 437238384Sjkim ldub [$rounds+$acc0],$acc0 438238384Sjkim srl $t1,24,$acc4 439238384Sjkim and $acc2,255,$acc2 440238384Sjkim ldub [$rounds+$acc1],$acc1 441238384Sjkim srl $t2,16,$acc5 ! 442238384Sjkim and $t3,255,$acc3 443238384Sjkim ldub [$rounds+$acc2],$acc2 444238384Sjkim ldub [$rounds+$acc3],$acc3 445238384Sjkim srl $t3,8,$acc6 446238384Sjkim and $acc5,255,$acc5 447238384Sjkim ldub [$rounds+$acc4],$acc4 448238384Sjkim fmovs %f0,%f0 449238384Sjkim srl $t2,24,$acc8 ! 450238384Sjkim and $acc6,255,$acc6 451238384Sjkim ldub [$rounds+$acc5],$acc5 452238384Sjkim srl $t3,16,$acc9 453238384Sjkim and $t0,255,$acc7 454238384Sjkim ldub [$rounds+$acc6],$acc6 455238384Sjkim ldub [$rounds+$acc7],$acc7 456238384Sjkim fmovs %f0,%f0 457238384Sjkim srl $t0,8,$acc10 ! 458238384Sjkim and $acc9,255,$acc9 459238384Sjkim ldub [$rounds+$acc8],$acc8 460238384Sjkim srl $t3,24,$acc12 461238384Sjkim and $acc10,255,$acc10 462238384Sjkim ldub [$rounds+$acc9],$acc9 463238384Sjkim srl $t0,16,$acc13 464238384Sjkim and $t1,255,$acc11 465238384Sjkim ldub [$rounds+$acc10],$acc10 ! 466238384Sjkim srl $t1,8,$acc14 467238384Sjkim and $acc13,255,$acc13 468238384Sjkim ldub [$rounds+$acc11],$acc11 469238384Sjkim ldub [$rounds+$acc12],$acc12 470238384Sjkim and $acc14,255,$acc14 471238384Sjkim ldub [$rounds+$acc13],$acc13 472238384Sjkim and $t2,255,$acc15 473238384Sjkim ldub [$rounds+$acc14],$acc14 ! 474238384Sjkim 475238384Sjkim sll $acc0,24,$acc0 476238384Sjkim xor $acc3,$s0,$s0 477238384Sjkim ldub [$rounds+$acc15],$acc15 478238384Sjkim sll $acc1,16,$acc1 479238384Sjkim xor $acc0,$s0,$s0 480238384Sjkim ldx [%sp+$bias+$frame+0],%i7 ! restore return address 481238384Sjkim fmovs %f0,%f0 482238384Sjkim sll $acc2,8,$acc2 ! 483238384Sjkim xor $acc1,$s0,$s0 484238384Sjkim sll $acc4,24,$acc4 485238384Sjkim xor $acc2,$s0,$s0 486238384Sjkim sll $acc5,16,$acc5 487238384Sjkim xor $acc7,$s1,$s1 488238384Sjkim sll $acc6,8,$acc6 489238384Sjkim xor $acc4,$s1,$s1 490238384Sjkim sll $acc8,24,$acc8 ! 491238384Sjkim xor $acc5,$s1,$s1 492238384Sjkim sll $acc9,16,$acc9 493238384Sjkim xor $acc11,$s2,$s2 494238384Sjkim sll $acc10,8,$acc10 495238384Sjkim xor $acc6,$s1,$s1 496238384Sjkim sll $acc12,24,$acc12 497238384Sjkim xor $acc8,$s2,$s2 498238384Sjkim sll $acc13,16,$acc13 ! 499238384Sjkim xor $acc9,$s2,$s2 500238384Sjkim sll $acc14,8,$acc14 501238384Sjkim xor $acc10,$s2,$s2 502238384Sjkim xor $acc12,$acc14,$acc14 503238384Sjkim xor $acc13,$s3,$s3 504238384Sjkim xor $acc14,$s3,$s3 505238384Sjkim xor $acc15,$s3,$s3 506238384Sjkim 507238384Sjkim ret 508238384Sjkim restore 509238384Sjkim.type _sparcv9_AES_encrypt,#function 510238384Sjkim.size _sparcv9_AES_encrypt,(.-_sparcv9_AES_encrypt) 511238384Sjkim 512238384Sjkim.align 32 513238384Sjkim.globl AES_encrypt 514238384SjkimAES_encrypt: 515238384Sjkim or %o0,%o1,%g1 516238384Sjkim andcc %g1,3,%g0 517238384Sjkim bnz,pn %xcc,.Lunaligned_enc 518238384Sjkim save %sp,-$frame,%sp 519238384Sjkim 520238384Sjkim ld [%i0+0],%o0 521238384Sjkim ld [%i0+4],%o1 522238384Sjkim ld [%i0+8],%o2 523238384Sjkim ld [%i0+12],%o3 524238384Sjkim 525238384Sjkim1: call .+8 526238384Sjkim add %o7,AES_Te-1b,%o4 527238384Sjkim call _sparcv9_AES_encrypt 528238384Sjkim mov %i2,%o5 529238384Sjkim 530238384Sjkim st %o0,[%i1+0] 531238384Sjkim st %o1,[%i1+4] 532238384Sjkim st %o2,[%i1+8] 533238384Sjkim st %o3,[%i1+12] 534238384Sjkim 535238384Sjkim ret 536238384Sjkim restore 537238384Sjkim 538238384Sjkim.align 32 539238384Sjkim.Lunaligned_enc: 540238384Sjkim ldub [%i0+0],%l0 541238384Sjkim ldub [%i0+1],%l1 542238384Sjkim ldub [%i0+2],%l2 543238384Sjkim 544238384Sjkim sll %l0,24,%l0 545238384Sjkim ldub [%i0+3],%l3 546238384Sjkim sll %l1,16,%l1 547238384Sjkim ldub [%i0+4],%l4 548238384Sjkim sll %l2,8,%l2 549238384Sjkim or %l1,%l0,%l0 550238384Sjkim ldub [%i0+5],%l5 551238384Sjkim sll %l4,24,%l4 552238384Sjkim or %l3,%l2,%l2 553238384Sjkim ldub [%i0+6],%l6 554238384Sjkim sll %l5,16,%l5 555238384Sjkim or %l0,%l2,%o0 556238384Sjkim ldub [%i0+7],%l7 557238384Sjkim 558238384Sjkim sll %l6,8,%l6 559238384Sjkim or %l5,%l4,%l4 560238384Sjkim ldub [%i0+8],%l0 561238384Sjkim or %l7,%l6,%l6 562238384Sjkim ldub [%i0+9],%l1 563238384Sjkim or %l4,%l6,%o1 564238384Sjkim ldub [%i0+10],%l2 565238384Sjkim 566238384Sjkim sll %l0,24,%l0 567238384Sjkim ldub [%i0+11],%l3 568238384Sjkim sll %l1,16,%l1 569238384Sjkim ldub [%i0+12],%l4 570238384Sjkim sll %l2,8,%l2 571238384Sjkim or %l1,%l0,%l0 572238384Sjkim ldub [%i0+13],%l5 573238384Sjkim sll %l4,24,%l4 574238384Sjkim or %l3,%l2,%l2 575238384Sjkim ldub [%i0+14],%l6 576238384Sjkim sll %l5,16,%l5 577238384Sjkim or %l0,%l2,%o2 578238384Sjkim ldub [%i0+15],%l7 579238384Sjkim 580238384Sjkim sll %l6,8,%l6 581238384Sjkim or %l5,%l4,%l4 582238384Sjkim or %l7,%l6,%l6 583238384Sjkim or %l4,%l6,%o3 584238384Sjkim 585238384Sjkim1: call .+8 586238384Sjkim add %o7,AES_Te-1b,%o4 587238384Sjkim call _sparcv9_AES_encrypt 588238384Sjkim mov %i2,%o5 589238384Sjkim 590238384Sjkim srl %o0,24,%l0 591238384Sjkim srl %o0,16,%l1 592238384Sjkim stb %l0,[%i1+0] 593238384Sjkim srl %o0,8,%l2 594238384Sjkim stb %l1,[%i1+1] 595238384Sjkim stb %l2,[%i1+2] 596238384Sjkim srl %o1,24,%l4 597238384Sjkim stb %o0,[%i1+3] 598238384Sjkim 599238384Sjkim srl %o1,16,%l5 600238384Sjkim stb %l4,[%i1+4] 601238384Sjkim srl %o1,8,%l6 602238384Sjkim stb %l5,[%i1+5] 603238384Sjkim stb %l6,[%i1+6] 604238384Sjkim srl %o2,24,%l0 605238384Sjkim stb %o1,[%i1+7] 606238384Sjkim 607238384Sjkim srl %o2,16,%l1 608238384Sjkim stb %l0,[%i1+8] 609238384Sjkim srl %o2,8,%l2 610238384Sjkim stb %l1,[%i1+9] 611238384Sjkim stb %l2,[%i1+10] 612238384Sjkim srl %o3,24,%l4 613238384Sjkim stb %o2,[%i1+11] 614238384Sjkim 615238384Sjkim srl %o3,16,%l5 616238384Sjkim stb %l4,[%i1+12] 617238384Sjkim srl %o3,8,%l6 618238384Sjkim stb %l5,[%i1+13] 619238384Sjkim stb %l6,[%i1+14] 620238384Sjkim stb %o3,[%i1+15] 621238384Sjkim 622238384Sjkim ret 623238384Sjkim restore 624238384Sjkim.type AES_encrypt,#function 625238384Sjkim.size AES_encrypt,(.-AES_encrypt) 626238384Sjkim 627238384Sjkim___ 628238384Sjkim 629238384Sjkim$code.=<<___; 630238384Sjkim.align 256 631238384SjkimAES_Td: 632238384Sjkim___ 633238384Sjkim&_data_word( 634238384Sjkim 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 635238384Sjkim 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 636238384Sjkim 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 637238384Sjkim 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 638238384Sjkim 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 639238384Sjkim 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 640238384Sjkim 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 641238384Sjkim 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 642238384Sjkim 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 643238384Sjkim 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 644238384Sjkim 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 645238384Sjkim 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 646238384Sjkim 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 647238384Sjkim 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 648238384Sjkim 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 649238384Sjkim 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 650238384Sjkim 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 651238384Sjkim 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 652238384Sjkim 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 653238384Sjkim 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 654238384Sjkim 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 655238384Sjkim 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 656238384Sjkim 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 657238384Sjkim 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 658238384Sjkim 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 659238384Sjkim 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 660238384Sjkim 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 661238384Sjkim 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 662238384Sjkim 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 663238384Sjkim 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 664238384Sjkim 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 665238384Sjkim 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 666238384Sjkim 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 667238384Sjkim 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 668238384Sjkim 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 669238384Sjkim 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 670238384Sjkim 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 671238384Sjkim 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 672238384Sjkim 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 673238384Sjkim 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 674238384Sjkim 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 675238384Sjkim 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 676238384Sjkim 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 677238384Sjkim 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 678238384Sjkim 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 679238384Sjkim 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 680238384Sjkim 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 681238384Sjkim 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 682238384Sjkim 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 683238384Sjkim 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 684238384Sjkim 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 685238384Sjkim 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 686238384Sjkim 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 687238384Sjkim 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 688238384Sjkim 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 689238384Sjkim 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 690238384Sjkim 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 691238384Sjkim 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 692238384Sjkim 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 693238384Sjkim 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 694238384Sjkim 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 695238384Sjkim 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 696238384Sjkim 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 697238384Sjkim 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742); 698238384Sjkim$code.=<<___; 699238384Sjkim .byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 700238384Sjkim .byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb 701238384Sjkim .byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 702238384Sjkim .byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb 703238384Sjkim .byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d 704238384Sjkim .byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e 705238384Sjkim .byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 706238384Sjkim .byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 707238384Sjkim .byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 708238384Sjkim .byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 709238384Sjkim .byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda 710238384Sjkim .byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 711238384Sjkim .byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a 712238384Sjkim .byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 713238384Sjkim .byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 714238384Sjkim .byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b 715238384Sjkim .byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea 716238384Sjkim .byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 717238384Sjkim .byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 718238384Sjkim .byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e 719238384Sjkim .byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 720238384Sjkim .byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b 721238384Sjkim .byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 722238384Sjkim .byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 723238384Sjkim .byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 724238384Sjkim .byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f 725238384Sjkim .byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d 726238384Sjkim .byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef 727238384Sjkim .byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 728238384Sjkim .byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 729238384Sjkim .byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 730238384Sjkim .byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 731238384Sjkim.type AES_Td,#object 732238384Sjkim.size AES_Td,(.-AES_Td) 733238384Sjkim 734238384Sjkim.align 64 735238384Sjkim.skip 16 736238384Sjkim_sparcv9_AES_decrypt: 737238384Sjkim save %sp,-$frame-$locals,%sp 738238384Sjkim stx %i7,[%sp+$bias+$frame+0] ! off-load return address 739238384Sjkim ld [$key+240],$rounds 740238384Sjkim ld [$key+0],$t0 741238384Sjkim ld [$key+4],$t1 ! 742238384Sjkim ld [$key+8],$t2 743238384Sjkim ld [$key+12],$t3 744238384Sjkim srl $rounds,1,$rounds 745238384Sjkim xor $t0,$s0,$s0 746238384Sjkim ld [$key+16],$t0 747238384Sjkim xor $t1,$s1,$s1 748238384Sjkim ld [$key+20],$t1 749238384Sjkim srl $s0,21,$acc0 ! 750238384Sjkim xor $t2,$s2,$s2 751238384Sjkim ld [$key+24],$t2 752238384Sjkim xor $t3,$s3,$s3 753238384Sjkim and $acc0,2040,$acc0 754238384Sjkim ld [$key+28],$t3 755238384Sjkim srl $s3,13,$acc1 756238384Sjkim nop 757238384Sjkim.Ldec_loop: 758238384Sjkim srl $s2,5,$acc2 ! 759238384Sjkim and $acc1,2040,$acc1 760238384Sjkim ldx [$tbl+$acc0],$acc0 761238384Sjkim sll $s1,3,$acc3 762238384Sjkim and $acc2,2040,$acc2 763238384Sjkim ldx [$tbl+$acc1],$acc1 764238384Sjkim srl $s1,21,$acc4 765238384Sjkim and $acc3,2040,$acc3 766238384Sjkim ldx [$tbl+$acc2],$acc2 ! 767238384Sjkim srl $s0,13,$acc5 768238384Sjkim and $acc4,2040,$acc4 769238384Sjkim ldx [$tbl+$acc3],$acc3 770238384Sjkim srl $s3,5,$acc6 771238384Sjkim and $acc5,2040,$acc5 772238384Sjkim ldx [$tbl+$acc4],$acc4 773238384Sjkim fmovs %f0,%f0 774238384Sjkim sll $s2,3,$acc7 ! 775238384Sjkim and $acc6,2040,$acc6 776238384Sjkim ldx [$tbl+$acc5],$acc5 777238384Sjkim srl $s2,21,$acc8 778238384Sjkim and $acc7,2040,$acc7 779238384Sjkim ldx [$tbl+$acc6],$acc6 780238384Sjkim srl $s1,13,$acc9 781238384Sjkim and $acc8,2040,$acc8 782238384Sjkim ldx [$tbl+$acc7],$acc7 ! 783238384Sjkim srl $s0,5,$acc10 784238384Sjkim and $acc9,2040,$acc9 785238384Sjkim ldx [$tbl+$acc8],$acc8 786238384Sjkim sll $s3,3,$acc11 787238384Sjkim and $acc10,2040,$acc10 788238384Sjkim ldx [$tbl+$acc9],$acc9 789238384Sjkim fmovs %f0,%f0 790238384Sjkim srl $s3,21,$acc12 ! 791238384Sjkim and $acc11,2040,$acc11 792238384Sjkim ldx [$tbl+$acc10],$acc10 793238384Sjkim srl $s2,13,$acc13 794238384Sjkim and $acc12,2040,$acc12 795238384Sjkim ldx [$tbl+$acc11],$acc11 796238384Sjkim srl $s1,5,$acc14 797238384Sjkim and $acc13,2040,$acc13 798238384Sjkim ldx [$tbl+$acc12],$acc12 ! 799238384Sjkim sll $s0,3,$acc15 800238384Sjkim and $acc14,2040,$acc14 801238384Sjkim ldx [$tbl+$acc13],$acc13 802238384Sjkim and $acc15,2040,$acc15 803238384Sjkim add $key,32,$key 804238384Sjkim ldx [$tbl+$acc14],$acc14 805238384Sjkim fmovs %f0,%f0 806238384Sjkim subcc $rounds,1,$rounds ! 807238384Sjkim ldx [$tbl+$acc15],$acc15 808238384Sjkim bz,a,pn %icc,.Ldec_last 809238384Sjkim add $tbl,2048,$rounds 810238384Sjkim 811238384Sjkim srlx $acc1,8,$acc1 812238384Sjkim xor $acc0,$t0,$t0 813238384Sjkim ld [$key+0],$s0 814238384Sjkim fmovs %f0,%f0 815238384Sjkim srlx $acc2,16,$acc2 ! 816238384Sjkim xor $acc1,$t0,$t0 817238384Sjkim ld [$key+4],$s1 818238384Sjkim srlx $acc3,24,$acc3 819238384Sjkim xor $acc2,$t0,$t0 820238384Sjkim ld [$key+8],$s2 821238384Sjkim srlx $acc5,8,$acc5 822238384Sjkim xor $acc3,$t0,$t0 823238384Sjkim ld [$key+12],$s3 ! 824238384Sjkim srlx $acc6,16,$acc6 825238384Sjkim xor $acc4,$t1,$t1 826238384Sjkim fmovs %f0,%f0 827238384Sjkim srlx $acc7,24,$acc7 828238384Sjkim xor $acc5,$t1,$t1 829238384Sjkim srlx $acc9,8,$acc9 830238384Sjkim xor $acc6,$t1,$t1 831238384Sjkim srlx $acc10,16,$acc10 ! 832238384Sjkim xor $acc7,$t1,$t1 833238384Sjkim srlx $acc11,24,$acc11 834238384Sjkim xor $acc8,$t2,$t2 835238384Sjkim srlx $acc13,8,$acc13 836238384Sjkim xor $acc9,$t2,$t2 837238384Sjkim srlx $acc14,16,$acc14 838238384Sjkim xor $acc10,$t2,$t2 839238384Sjkim srlx $acc15,24,$acc15 ! 840238384Sjkim xor $acc11,$t2,$t2 841238384Sjkim xor $acc12,$acc14,$acc14 842238384Sjkim xor $acc13,$t3,$t3 843238384Sjkim srl $t0,21,$acc0 844238384Sjkim xor $acc14,$t3,$t3 845238384Sjkim xor $acc15,$t3,$t3 846238384Sjkim srl $t3,13,$acc1 847238384Sjkim 848238384Sjkim and $acc0,2040,$acc0 ! 849238384Sjkim srl $t2,5,$acc2 850238384Sjkim and $acc1,2040,$acc1 851238384Sjkim ldx [$tbl+$acc0],$acc0 852238384Sjkim sll $t1,3,$acc3 853238384Sjkim and $acc2,2040,$acc2 854238384Sjkim ldx [$tbl+$acc1],$acc1 855238384Sjkim fmovs %f0,%f0 856238384Sjkim srl $t1,21,$acc4 ! 857238384Sjkim and $acc3,2040,$acc3 858238384Sjkim ldx [$tbl+$acc2],$acc2 859238384Sjkim srl $t0,13,$acc5 860238384Sjkim and $acc4,2040,$acc4 861238384Sjkim ldx [$tbl+$acc3],$acc3 862238384Sjkim srl $t3,5,$acc6 863238384Sjkim and $acc5,2040,$acc5 864238384Sjkim ldx [$tbl+$acc4],$acc4 ! 865238384Sjkim sll $t2,3,$acc7 866238384Sjkim and $acc6,2040,$acc6 867238384Sjkim ldx [$tbl+$acc5],$acc5 868238384Sjkim srl $t2,21,$acc8 869238384Sjkim and $acc7,2040,$acc7 870238384Sjkim ldx [$tbl+$acc6],$acc6 871238384Sjkim fmovs %f0,%f0 872238384Sjkim srl $t1,13,$acc9 ! 873238384Sjkim and $acc8,2040,$acc8 874238384Sjkim ldx [$tbl+$acc7],$acc7 875238384Sjkim srl $t0,5,$acc10 876238384Sjkim and $acc9,2040,$acc9 877238384Sjkim ldx [$tbl+$acc8],$acc8 878238384Sjkim sll $t3,3,$acc11 879238384Sjkim and $acc10,2040,$acc10 880238384Sjkim ldx [$tbl+$acc9],$acc9 ! 881238384Sjkim srl $t3,21,$acc12 882238384Sjkim and $acc11,2040,$acc11 883238384Sjkim ldx [$tbl+$acc10],$acc10 884238384Sjkim srl $t2,13,$acc13 885238384Sjkim and $acc12,2040,$acc12 886238384Sjkim ldx [$tbl+$acc11],$acc11 887238384Sjkim fmovs %f0,%f0 888238384Sjkim srl $t1,5,$acc14 ! 889238384Sjkim and $acc13,2040,$acc13 890238384Sjkim ldx [$tbl+$acc12],$acc12 891238384Sjkim sll $t0,3,$acc15 892238384Sjkim and $acc14,2040,$acc14 893238384Sjkim ldx [$tbl+$acc13],$acc13 894238384Sjkim srlx $acc1,8,$acc1 895238384Sjkim and $acc15,2040,$acc15 896238384Sjkim ldx [$tbl+$acc14],$acc14 ! 897238384Sjkim 898238384Sjkim srlx $acc2,16,$acc2 899238384Sjkim xor $acc0,$s0,$s0 900238384Sjkim ldx [$tbl+$acc15],$acc15 901238384Sjkim srlx $acc3,24,$acc3 902238384Sjkim xor $acc1,$s0,$s0 903238384Sjkim ld [$key+16],$t0 904238384Sjkim fmovs %f0,%f0 905238384Sjkim srlx $acc5,8,$acc5 ! 906238384Sjkim xor $acc2,$s0,$s0 907238384Sjkim ld [$key+20],$t1 908238384Sjkim srlx $acc6,16,$acc6 909238384Sjkim xor $acc3,$s0,$s0 910238384Sjkim ld [$key+24],$t2 911238384Sjkim srlx $acc7,24,$acc7 912238384Sjkim xor $acc4,$s1,$s1 913238384Sjkim ld [$key+28],$t3 ! 914238384Sjkim srlx $acc9,8,$acc9 915238384Sjkim xor $acc5,$s1,$s1 916238384Sjkim ldx [$tbl+2048+0],%g0 ! prefetch td4 917238384Sjkim srlx $acc10,16,$acc10 918238384Sjkim xor $acc6,$s1,$s1 919238384Sjkim ldx [$tbl+2048+32],%g0 ! prefetch td4 920238384Sjkim srlx $acc11,24,$acc11 921238384Sjkim xor $acc7,$s1,$s1 922238384Sjkim ldx [$tbl+2048+64],%g0 ! prefetch td4 923238384Sjkim srlx $acc13,8,$acc13 924238384Sjkim xor $acc8,$s2,$s2 925238384Sjkim ldx [$tbl+2048+96],%g0 ! prefetch td4 926238384Sjkim srlx $acc14,16,$acc14 ! 927238384Sjkim xor $acc9,$s2,$s2 928238384Sjkim ldx [$tbl+2048+128],%g0 ! prefetch td4 929238384Sjkim srlx $acc15,24,$acc15 930238384Sjkim xor $acc10,$s2,$s2 931238384Sjkim ldx [$tbl+2048+160],%g0 ! prefetch td4 932238384Sjkim srl $s0,21,$acc0 933238384Sjkim xor $acc11,$s2,$s2 934238384Sjkim ldx [$tbl+2048+192],%g0 ! prefetch td4 935238384Sjkim xor $acc12,$acc14,$acc14 936238384Sjkim xor $acc13,$s3,$s3 937238384Sjkim ldx [$tbl+2048+224],%g0 ! prefetch td4 938238384Sjkim and $acc0,2040,$acc0 ! 939238384Sjkim xor $acc14,$s3,$s3 940238384Sjkim xor $acc15,$s3,$s3 941238384Sjkim ba .Ldec_loop 942238384Sjkim srl $s3,13,$acc1 943238384Sjkim 944238384Sjkim.align 32 945238384Sjkim.Ldec_last: 946238384Sjkim srlx $acc1,8,$acc1 ! 947238384Sjkim xor $acc0,$t0,$t0 948238384Sjkim ld [$key+0],$s0 949238384Sjkim srlx $acc2,16,$acc2 950238384Sjkim xor $acc1,$t0,$t0 951238384Sjkim ld [$key+4],$s1 952238384Sjkim srlx $acc3,24,$acc3 953238384Sjkim xor $acc2,$t0,$t0 954238384Sjkim ld [$key+8],$s2 ! 955238384Sjkim srlx $acc5,8,$acc5 956238384Sjkim xor $acc3,$t0,$t0 957238384Sjkim ld [$key+12],$s3 958238384Sjkim srlx $acc6,16,$acc6 959238384Sjkim xor $acc4,$t1,$t1 960238384Sjkim srlx $acc7,24,$acc7 961238384Sjkim xor $acc5,$t1,$t1 962238384Sjkim srlx $acc9,8,$acc9 ! 963238384Sjkim xor $acc6,$t1,$t1 964238384Sjkim srlx $acc10,16,$acc10 965238384Sjkim xor $acc7,$t1,$t1 966238384Sjkim srlx $acc11,24,$acc11 967238384Sjkim xor $acc8,$t2,$t2 968238384Sjkim srlx $acc13,8,$acc13 969238384Sjkim xor $acc9,$t2,$t2 970238384Sjkim srlx $acc14,16,$acc14 ! 971238384Sjkim xor $acc10,$t2,$t2 972238384Sjkim srlx $acc15,24,$acc15 973238384Sjkim xor $acc11,$t2,$t2 974238384Sjkim xor $acc12,$acc14,$acc14 975238384Sjkim xor $acc13,$t3,$t3 976238384Sjkim srl $t0,24,$acc0 977238384Sjkim xor $acc14,$t3,$t3 978238384Sjkim xor $acc15,$t3,$t3 ! 979238384Sjkim srl $t3,16,$acc1 980238384Sjkim 981238384Sjkim srl $t2,8,$acc2 982238384Sjkim and $acc1,255,$acc1 983238384Sjkim ldub [$rounds+$acc0],$acc0 984238384Sjkim srl $t1,24,$acc4 985238384Sjkim and $acc2,255,$acc2 986238384Sjkim ldub [$rounds+$acc1],$acc1 987238384Sjkim srl $t0,16,$acc5 ! 988238384Sjkim and $t1,255,$acc3 989238384Sjkim ldub [$rounds+$acc2],$acc2 990238384Sjkim ldub [$rounds+$acc3],$acc3 991238384Sjkim srl $t3,8,$acc6 992238384Sjkim and $acc5,255,$acc5 993238384Sjkim ldub [$rounds+$acc4],$acc4 994238384Sjkim fmovs %f0,%f0 995238384Sjkim srl $t2,24,$acc8 ! 996238384Sjkim and $acc6,255,$acc6 997238384Sjkim ldub [$rounds+$acc5],$acc5 998238384Sjkim srl $t1,16,$acc9 999238384Sjkim and $t2,255,$acc7 1000238384Sjkim ldub [$rounds+$acc6],$acc6 1001238384Sjkim ldub [$rounds+$acc7],$acc7 1002238384Sjkim fmovs %f0,%f0 1003238384Sjkim srl $t0,8,$acc10 ! 1004238384Sjkim and $acc9,255,$acc9 1005238384Sjkim ldub [$rounds+$acc8],$acc8 1006238384Sjkim srl $t3,24,$acc12 1007238384Sjkim and $acc10,255,$acc10 1008238384Sjkim ldub [$rounds+$acc9],$acc9 1009238384Sjkim srl $t2,16,$acc13 1010238384Sjkim and $t3,255,$acc11 1011238384Sjkim ldub [$rounds+$acc10],$acc10 ! 1012238384Sjkim srl $t1,8,$acc14 1013238384Sjkim and $acc13,255,$acc13 1014238384Sjkim ldub [$rounds+$acc11],$acc11 1015238384Sjkim ldub [$rounds+$acc12],$acc12 1016238384Sjkim and $acc14,255,$acc14 1017238384Sjkim ldub [$rounds+$acc13],$acc13 1018238384Sjkim and $t0,255,$acc15 1019238384Sjkim ldub [$rounds+$acc14],$acc14 ! 1020238384Sjkim 1021238384Sjkim sll $acc0,24,$acc0 1022238384Sjkim xor $acc3,$s0,$s0 1023238384Sjkim ldub [$rounds+$acc15],$acc15 1024238384Sjkim sll $acc1,16,$acc1 1025238384Sjkim xor $acc0,$s0,$s0 1026238384Sjkim ldx [%sp+$bias+$frame+0],%i7 ! restore return address 1027238384Sjkim fmovs %f0,%f0 1028238384Sjkim sll $acc2,8,$acc2 ! 1029238384Sjkim xor $acc1,$s0,$s0 1030238384Sjkim sll $acc4,24,$acc4 1031238384Sjkim xor $acc2,$s0,$s0 1032238384Sjkim sll $acc5,16,$acc5 1033238384Sjkim xor $acc7,$s1,$s1 1034238384Sjkim sll $acc6,8,$acc6 1035238384Sjkim xor $acc4,$s1,$s1 1036238384Sjkim sll $acc8,24,$acc8 ! 1037238384Sjkim xor $acc5,$s1,$s1 1038238384Sjkim sll $acc9,16,$acc9 1039238384Sjkim xor $acc11,$s2,$s2 1040238384Sjkim sll $acc10,8,$acc10 1041238384Sjkim xor $acc6,$s1,$s1 1042238384Sjkim sll $acc12,24,$acc12 1043238384Sjkim xor $acc8,$s2,$s2 1044238384Sjkim sll $acc13,16,$acc13 ! 1045238384Sjkim xor $acc9,$s2,$s2 1046238384Sjkim sll $acc14,8,$acc14 1047238384Sjkim xor $acc10,$s2,$s2 1048238384Sjkim xor $acc12,$acc14,$acc14 1049238384Sjkim xor $acc13,$s3,$s3 1050238384Sjkim xor $acc14,$s3,$s3 1051238384Sjkim xor $acc15,$s3,$s3 1052238384Sjkim 1053238384Sjkim ret 1054238384Sjkim restore 1055238384Sjkim.type _sparcv9_AES_decrypt,#function 1056238384Sjkim.size _sparcv9_AES_decrypt,(.-_sparcv9_AES_decrypt) 1057238384Sjkim 1058238384Sjkim.align 32 1059238384Sjkim.globl AES_decrypt 1060238384SjkimAES_decrypt: 1061238384Sjkim or %o0,%o1,%g1 1062238384Sjkim andcc %g1,3,%g0 1063238384Sjkim bnz,pn %xcc,.Lunaligned_dec 1064238384Sjkim save %sp,-$frame,%sp 1065238384Sjkim 1066238384Sjkim ld [%i0+0],%o0 1067238384Sjkim ld [%i0+4],%o1 1068238384Sjkim ld [%i0+8],%o2 1069238384Sjkim ld [%i0+12],%o3 1070238384Sjkim 1071238384Sjkim1: call .+8 1072238384Sjkim add %o7,AES_Td-1b,%o4 1073238384Sjkim call _sparcv9_AES_decrypt 1074238384Sjkim mov %i2,%o5 1075238384Sjkim 1076238384Sjkim st %o0,[%i1+0] 1077238384Sjkim st %o1,[%i1+4] 1078238384Sjkim st %o2,[%i1+8] 1079238384Sjkim st %o3,[%i1+12] 1080238384Sjkim 1081238384Sjkim ret 1082238384Sjkim restore 1083238384Sjkim 1084238384Sjkim.align 32 1085238384Sjkim.Lunaligned_dec: 1086238384Sjkim ldub [%i0+0],%l0 1087238384Sjkim ldub [%i0+1],%l1 1088238384Sjkim ldub [%i0+2],%l2 1089238384Sjkim 1090238384Sjkim sll %l0,24,%l0 1091238384Sjkim ldub [%i0+3],%l3 1092238384Sjkim sll %l1,16,%l1 1093238384Sjkim ldub [%i0+4],%l4 1094238384Sjkim sll %l2,8,%l2 1095238384Sjkim or %l1,%l0,%l0 1096238384Sjkim ldub [%i0+5],%l5 1097238384Sjkim sll %l4,24,%l4 1098238384Sjkim or %l3,%l2,%l2 1099238384Sjkim ldub [%i0+6],%l6 1100238384Sjkim sll %l5,16,%l5 1101238384Sjkim or %l0,%l2,%o0 1102238384Sjkim ldub [%i0+7],%l7 1103238384Sjkim 1104238384Sjkim sll %l6,8,%l6 1105238384Sjkim or %l5,%l4,%l4 1106238384Sjkim ldub [%i0+8],%l0 1107238384Sjkim or %l7,%l6,%l6 1108238384Sjkim ldub [%i0+9],%l1 1109238384Sjkim or %l4,%l6,%o1 1110238384Sjkim ldub [%i0+10],%l2 1111238384Sjkim 1112238384Sjkim sll %l0,24,%l0 1113238384Sjkim ldub [%i0+11],%l3 1114238384Sjkim sll %l1,16,%l1 1115238384Sjkim ldub [%i0+12],%l4 1116238384Sjkim sll %l2,8,%l2 1117238384Sjkim or %l1,%l0,%l0 1118238384Sjkim ldub [%i0+13],%l5 1119238384Sjkim sll %l4,24,%l4 1120238384Sjkim or %l3,%l2,%l2 1121238384Sjkim ldub [%i0+14],%l6 1122238384Sjkim sll %l5,16,%l5 1123238384Sjkim or %l0,%l2,%o2 1124238384Sjkim ldub [%i0+15],%l7 1125238384Sjkim 1126238384Sjkim sll %l6,8,%l6 1127238384Sjkim or %l5,%l4,%l4 1128238384Sjkim or %l7,%l6,%l6 1129238384Sjkim or %l4,%l6,%o3 1130238384Sjkim 1131238384Sjkim1: call .+8 1132238384Sjkim add %o7,AES_Td-1b,%o4 1133238384Sjkim call _sparcv9_AES_decrypt 1134238384Sjkim mov %i2,%o5 1135238384Sjkim 1136238384Sjkim srl %o0,24,%l0 1137238384Sjkim srl %o0,16,%l1 1138238384Sjkim stb %l0,[%i1+0] 1139238384Sjkim srl %o0,8,%l2 1140238384Sjkim stb %l1,[%i1+1] 1141238384Sjkim stb %l2,[%i1+2] 1142238384Sjkim srl %o1,24,%l4 1143238384Sjkim stb %o0,[%i1+3] 1144238384Sjkim 1145238384Sjkim srl %o1,16,%l5 1146238384Sjkim stb %l4,[%i1+4] 1147238384Sjkim srl %o1,8,%l6 1148238384Sjkim stb %l5,[%i1+5] 1149238384Sjkim stb %l6,[%i1+6] 1150238384Sjkim srl %o2,24,%l0 1151238384Sjkim stb %o1,[%i1+7] 1152238384Sjkim 1153238384Sjkim srl %o2,16,%l1 1154238384Sjkim stb %l0,[%i1+8] 1155238384Sjkim srl %o2,8,%l2 1156238384Sjkim stb %l1,[%i1+9] 1157238384Sjkim stb %l2,[%i1+10] 1158238384Sjkim srl %o3,24,%l4 1159238384Sjkim stb %o2,[%i1+11] 1160238384Sjkim 1161238384Sjkim srl %o3,16,%l5 1162238384Sjkim stb %l4,[%i1+12] 1163238384Sjkim srl %o3,8,%l6 1164238384Sjkim stb %l5,[%i1+13] 1165238384Sjkim stb %l6,[%i1+14] 1166238384Sjkim stb %o3,[%i1+15] 1167238384Sjkim 1168238384Sjkim ret 1169238384Sjkim restore 1170238384Sjkim.type AES_decrypt,#function 1171238384Sjkim.size AES_decrypt,(.-AES_decrypt) 1172238384Sjkim___ 1173238384Sjkim 1174238384Sjkim# fmovs instructions substituting for FP nops were originally added 1175238384Sjkim# to meet specific instruction alignment requirements to maximize ILP. 1176238384Sjkim# As UltraSPARC T1, a.k.a. Niagara, has shared FPU, FP nops can have 1177238384Sjkim# undesired effect, so just omit them and sacrifice some portion of 1178238384Sjkim# percent in performance... 1179238384Sjkim$code =~ s/fmovs.*$//gm; 1180238384Sjkim 1181238384Sjkimprint $code; 1182238384Sjkimclose STDOUT; # ensure flush 1183