diff options
Diffstat (limited to 'src/lib/libcrypto/sha/asm/sha1-parisc.pl')
| -rw-r--r-- | src/lib/libcrypto/sha/asm/sha1-parisc.pl | 266 |
1 files changed, 0 insertions, 266 deletions
diff --git a/src/lib/libcrypto/sha/asm/sha1-parisc.pl b/src/lib/libcrypto/sha/asm/sha1-parisc.pl deleted file mode 100644 index 6cb4656422..0000000000 --- a/src/lib/libcrypto/sha/asm/sha1-parisc.pl +++ /dev/null | |||
| @@ -1,266 +0,0 @@ | |||
| 1 | #!/usr/bin/env perl | ||
| 2 | |||
| 3 | # ==================================================================== | ||
| 4 | # Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL | ||
| 5 | # project. The module is, however, dual licensed under OpenSSL and | ||
| 6 | # CRYPTOGAMS licenses depending on where you obtain it. For further | ||
| 7 | # details see http://www.openssl.org/~appro/cryptogams/. | ||
| 8 | # ==================================================================== | ||
| 9 | |||
| 10 | # SHA1 block procedure for PA-RISC. | ||
| 11 | |||
| 12 | # June 2009. | ||
| 13 | # | ||
| 14 | # On PA-7100LC performance is >30% better than gcc 3.2 generated code | ||
| 15 | # for aligned input and >50% better for unaligned. Compared to vendor | ||
| 16 | # compiler on PA-8600 it's almost 60% faster in 64-bit build and just | ||
| 17 | # few percent faster in 32-bit one (this for aligned input, data for | ||
| 18 | # unaligned input is not available). | ||
| 19 | # | ||
| 20 | # Special thanks to polarhome.com for providing HP-UX account. | ||
| 21 | |||
| 22 | $flavour = shift; | ||
| 23 | $output = shift; | ||
| 24 | open STDOUT,">$output"; | ||
| 25 | |||
| 26 | if ($flavour =~ /64/) { | ||
| 27 | $LEVEL ="2.0W"; | ||
| 28 | $SIZE_T =8; | ||
| 29 | $FRAME_MARKER =80; | ||
| 30 | $SAVED_RP =16; | ||
| 31 | $PUSH ="std"; | ||
| 32 | $PUSHMA ="std,ma"; | ||
| 33 | $POP ="ldd"; | ||
| 34 | $POPMB ="ldd,mb"; | ||
| 35 | } else { | ||
| 36 | $LEVEL ="1.0"; | ||
| 37 | $SIZE_T =4; | ||
| 38 | $FRAME_MARKER =48; | ||
| 39 | $SAVED_RP =20; | ||
| 40 | $PUSH ="stw"; | ||
| 41 | $PUSHMA ="stwm"; | ||
| 42 | $POP ="ldw"; | ||
| 43 | $POPMB ="ldwm"; | ||
| 44 | } | ||
| 45 | |||
| 46 | $FRAME=14*$SIZE_T+$FRAME_MARKER;# 14 saved regs + frame marker | ||
| 47 | # [+ argument transfer] | ||
| 48 | $ctx="%r26"; # arg0 | ||
| 49 | $inp="%r25"; # arg1 | ||
| 50 | $num="%r24"; # arg2 | ||
| 51 | |||
| 52 | $t0="%r28"; | ||
| 53 | $t1="%r29"; | ||
| 54 | $K="%r31"; | ||
| 55 | |||
| 56 | @X=("%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7", "%r8", | ||
| 57 | "%r9", "%r10","%r11","%r12","%r13","%r14","%r15","%r16",$t0); | ||
| 58 | |||
| 59 | @V=($A,$B,$C,$D,$E)=("%r19","%r20","%r21","%r22","%r23"); | ||
| 60 | |||
| 61 | sub BODY_00_19 { | ||
| 62 | my ($i,$a,$b,$c,$d,$e)=@_; | ||
| 63 | my $j=$i+1; | ||
| 64 | $code.=<<___ if ($i<15); | ||
| 65 | addl $K,$e,$e ; $i | ||
| 66 | shd $a,$a,27,$t1 | ||
| 67 | addl @X[$i],$e,$e | ||
| 68 | and $c,$b,$t0 | ||
| 69 | addl $t1,$e,$e | ||
| 70 | andcm $d,$b,$t1 | ||
| 71 | shd $b,$b,2,$b | ||
| 72 | or $t1,$t0,$t0 | ||
| 73 | addl $t0,$e,$e | ||
| 74 | ___ | ||
| 75 | $code.=<<___ if ($i>=15); # with forward Xupdate | ||
| 76 | addl $K,$e,$e ; $i | ||
| 77 | shd $a,$a,27,$t1 | ||
| 78 | xor @X[($j+2)%16],@X[$j%16],@X[$j%16] | ||
| 79 | addl @X[$i%16],$e,$e | ||
| 80 | and $c,$b,$t0 | ||
| 81 | xor @X[($j+8)%16],@X[$j%16],@X[$j%16] | ||
| 82 | addl $t1,$e,$e | ||
| 83 | andcm $d,$b,$t1 | ||
| 84 | shd $b,$b,2,$b | ||
| 85 | or $t1,$t0,$t0 | ||
| 86 | xor @X[($j+13)%16],@X[$j%16],@X[$j%16] | ||
| 87 | add $t0,$e,$e | ||
| 88 | shd @X[$j%16],@X[$j%16],31,@X[$j%16] | ||
| 89 | ___ | ||
| 90 | } | ||
| 91 | |||
| 92 | sub BODY_20_39 { | ||
| 93 | my ($i,$a,$b,$c,$d,$e)=@_; | ||
| 94 | my $j=$i+1; | ||
| 95 | $code.=<<___ if ($i<79); | ||
| 96 | xor @X[($j+2)%16],@X[$j%16],@X[$j%16] ; $i | ||
| 97 | addl $K,$e,$e | ||
| 98 | shd $a,$a,27,$t1 | ||
| 99 | xor @X[($j+8)%16],@X[$j%16],@X[$j%16] | ||
| 100 | addl @X[$i%16],$e,$e | ||
| 101 | xor $b,$c,$t0 | ||
| 102 | xor @X[($j+13)%16],@X[$j%16],@X[$j%16] | ||
| 103 | addl $t1,$e,$e | ||
| 104 | shd $b,$b,2,$b | ||
| 105 | xor $d,$t0,$t0 | ||
| 106 | shd @X[$j%16],@X[$j%16],31,@X[$j%16] | ||
| 107 | addl $t0,$e,$e | ||
| 108 | ___ | ||
| 109 | $code.=<<___ if ($i==79); # with context load | ||
| 110 | ldw 0($ctx),@X[0] ; $i | ||
| 111 | addl $K,$e,$e | ||
| 112 | shd $a,$a,27,$t1 | ||
| 113 | ldw 4($ctx),@X[1] | ||
| 114 | addl @X[$i%16],$e,$e | ||
| 115 | xor $b,$c,$t0 | ||
| 116 | ldw 8($ctx),@X[2] | ||
| 117 | addl $t1,$e,$e | ||
| 118 | shd $b,$b,2,$b | ||
| 119 | xor $d,$t0,$t0 | ||
| 120 | ldw 12($ctx),@X[3] | ||
| 121 | addl $t0,$e,$e | ||
| 122 | ldw 16($ctx),@X[4] | ||
| 123 | ___ | ||
| 124 | } | ||
| 125 | |||
| 126 | sub BODY_40_59 { | ||
| 127 | my ($i,$a,$b,$c,$d,$e)=@_; | ||
| 128 | my $j=$i+1; | ||
| 129 | $code.=<<___; | ||
| 130 | shd $a,$a,27,$t1 ; $i | ||
| 131 | addl $K,$e,$e | ||
| 132 | xor @X[($j+2)%16],@X[$j%16],@X[$j%16] | ||
| 133 | xor $d,$c,$t0 | ||
| 134 | addl @X[$i%16],$e,$e | ||
| 135 | xor @X[($j+8)%16],@X[$j%16],@X[$j%16] | ||
| 136 | and $b,$t0,$t0 | ||
| 137 | addl $t1,$e,$e | ||
| 138 | shd $b,$b,2,$b | ||
| 139 | xor @X[($j+13)%16],@X[$j%16],@X[$j%16] | ||
| 140 | addl $t0,$e,$e | ||
| 141 | and $d,$c,$t1 | ||
| 142 | shd @X[$j%16],@X[$j%16],31,@X[$j%16] | ||
| 143 | addl $t1,$e,$e | ||
| 144 | ___ | ||
| 145 | } | ||
| 146 | |||
| 147 | $code=<<___; | ||
| 148 | .LEVEL $LEVEL | ||
| 149 | #if 0 | ||
| 150 | .SPACE \$TEXT\$ | ||
| 151 | .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY | ||
| 152 | #else | ||
| 153 | .text | ||
| 154 | #endif | ||
| 155 | |||
| 156 | .EXPORT sha1_block_data_order,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR | ||
| 157 | sha1_block_data_order | ||
| 158 | .PROC | ||
| 159 | .CALLINFO FRAME=`$FRAME-14*$SIZE_T`,NO_CALLS,SAVE_RP,ENTRY_GR=16 | ||
| 160 | .ENTRY | ||
| 161 | $PUSH %r2,-$SAVED_RP(%sp) ; standard prologue | ||
| 162 | $PUSHMA %r3,$FRAME(%sp) | ||
| 163 | $PUSH %r4,`-$FRAME+1*$SIZE_T`(%sp) | ||
| 164 | $PUSH %r5,`-$FRAME+2*$SIZE_T`(%sp) | ||
| 165 | $PUSH %r6,`-$FRAME+3*$SIZE_T`(%sp) | ||
| 166 | $PUSH %r7,`-$FRAME+4*$SIZE_T`(%sp) | ||
| 167 | $PUSH %r8,`-$FRAME+5*$SIZE_T`(%sp) | ||
| 168 | $PUSH %r9,`-$FRAME+6*$SIZE_T`(%sp) | ||
| 169 | $PUSH %r10,`-$FRAME+7*$SIZE_T`(%sp) | ||
| 170 | $PUSH %r11,`-$FRAME+8*$SIZE_T`(%sp) | ||
| 171 | $PUSH %r12,`-$FRAME+9*$SIZE_T`(%sp) | ||
| 172 | $PUSH %r13,`-$FRAME+10*$SIZE_T`(%sp) | ||
| 173 | $PUSH %r14,`-$FRAME+11*$SIZE_T`(%sp) | ||
| 174 | $PUSH %r15,`-$FRAME+12*$SIZE_T`(%sp) | ||
| 175 | $PUSH %r16,`-$FRAME+13*$SIZE_T`(%sp) | ||
| 176 | |||
| 177 | ldw 0($ctx),$A | ||
| 178 | ldw 4($ctx),$B | ||
| 179 | ldw 8($ctx),$C | ||
| 180 | ldw 12($ctx),$D | ||
| 181 | ldw 16($ctx),$E | ||
| 182 | |||
| 183 | extru $inp,31,2,$t0 ; t0=inp&3; | ||
| 184 | sh3addl $t0,%r0,$t0 ; t0*=8; | ||
| 185 | subi 32,$t0,$t0 ; t0=32-t0; | ||
| 186 | mtctl $t0,%cr11 ; %sar=t0; | ||
| 187 | |||
| 188 | L\$oop | ||
| 189 | ldi 3,$t0 | ||
| 190 | andcm $inp,$t0,$t0 ; 64-bit neutral | ||
| 191 | ___ | ||
| 192 | for ($i=0;$i<15;$i++) { # load input block | ||
| 193 | $code.="\tldw `4*$i`($t0),@X[$i]\n"; } | ||
| 194 | $code.=<<___; | ||
| 195 | cmpb,*= $inp,$t0,L\$aligned | ||
| 196 | ldw 60($t0),@X[15] | ||
| 197 | ldw 64($t0),@X[16] | ||
| 198 | ___ | ||
| 199 | for ($i=0;$i<16;$i++) { # align input | ||
| 200 | $code.="\tvshd @X[$i],@X[$i+1],@X[$i]\n"; } | ||
| 201 | $code.=<<___; | ||
| 202 | L\$aligned | ||
| 203 | ldil L'0x5a827000,$K ; K_00_19 | ||
| 204 | ldo 0x999($K),$K | ||
| 205 | ___ | ||
| 206 | for ($i=0;$i<20;$i++) { &BODY_00_19($i,@V); unshift(@V,pop(@V)); } | ||
| 207 | $code.=<<___; | ||
| 208 | ldil L'0x6ed9e000,$K ; K_20_39 | ||
| 209 | ldo 0xba1($K),$K | ||
| 210 | ___ | ||
| 211 | |||
| 212 | for (;$i<40;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); } | ||
| 213 | $code.=<<___; | ||
| 214 | ldil L'0x8f1bb000,$K ; K_40_59 | ||
| 215 | ldo 0xcdc($K),$K | ||
| 216 | ___ | ||
| 217 | |||
| 218 | for (;$i<60;$i++) { &BODY_40_59($i,@V); unshift(@V,pop(@V)); } | ||
| 219 | $code.=<<___; | ||
| 220 | ldil L'0xca62c000,$K ; K_60_79 | ||
| 221 | ldo 0x1d6($K),$K | ||
| 222 | ___ | ||
| 223 | for (;$i<80;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); } | ||
| 224 | |||
| 225 | $code.=<<___; | ||
| 226 | addl @X[0],$A,$A | ||
| 227 | addl @X[1],$B,$B | ||
| 228 | addl @X[2],$C,$C | ||
| 229 | addl @X[3],$D,$D | ||
| 230 | addl @X[4],$E,$E | ||
| 231 | stw $A,0($ctx) | ||
| 232 | stw $B,4($ctx) | ||
| 233 | stw $C,8($ctx) | ||
| 234 | stw $D,12($ctx) | ||
| 235 | stw $E,16($ctx) | ||
| 236 | addib,*<> -1,$num,L\$oop | ||
| 237 | ldo 64($inp),$inp | ||
| 238 | |||
| 239 | $POP `-$FRAME-$SAVED_RP`(%sp),%r2 ; standard epilogue | ||
| 240 | $POP `-$FRAME+1*$SIZE_T`(%sp),%r4 | ||
| 241 | $POP `-$FRAME+2*$SIZE_T`(%sp),%r5 | ||
| 242 | $POP `-$FRAME+3*$SIZE_T`(%sp),%r6 | ||
| 243 | $POP `-$FRAME+4*$SIZE_T`(%sp),%r7 | ||
| 244 | $POP `-$FRAME+5*$SIZE_T`(%sp),%r8 | ||
| 245 | $POP `-$FRAME+6*$SIZE_T`(%sp),%r9 | ||
| 246 | $POP `-$FRAME+7*$SIZE_T`(%sp),%r10 | ||
| 247 | $POP `-$FRAME+8*$SIZE_T`(%sp),%r11 | ||
| 248 | $POP `-$FRAME+9*$SIZE_T`(%sp),%r12 | ||
| 249 | $POP `-$FRAME+10*$SIZE_T`(%sp),%r13 | ||
| 250 | $POP `-$FRAME+11*$SIZE_T`(%sp),%r14 | ||
| 251 | $POP `-$FRAME+12*$SIZE_T`(%sp),%r15 | ||
| 252 | $POP `-$FRAME+13*$SIZE_T`(%sp),%r16 | ||
| 253 | bv (%r2) | ||
| 254 | .EXIT | ||
| 255 | $POPMB -$FRAME(%sp),%r3 | ||
| 256 | .PROCEND | ||
| 257 | |||
| 258 | .data | ||
| 259 | .STRINGZ "SHA1 block transform for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>" | ||
| 260 | ___ | ||
| 261 | |||
| 262 | $code =~ s/\`([^\`]*)\`/eval $1/gem; | ||
| 263 | $code =~ s/,\*/,/gm if ($SIZE_T==4); | ||
| 264 | $code =~ s/\bbv\b/bve/gm if ($SIZE_T==8); | ||
| 265 | print $code; | ||
| 266 | close STDOUT; | ||
