| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env perl | |
| 2 | |
| 3 $flavour = shift; | |
| 4 $output = shift; | |
| 5 open STDOUT,">$output"; | |
| 6 | |
| 7 if ($flavour =~ /64/) { | |
| 8 $LEVEL ="2.0W"; | |
| 9 $SIZE_T =8; | |
| 10 $ST ="std"; | |
| 11 } else { | |
| 12 $LEVEL ="1.1"; | |
| 13 $SIZE_T =4; | |
| 14 $ST ="stw"; | |
| 15 } | |
| 16 | |
| 17 $rp="%r2"; | |
| 18 $sp="%r30"; | |
| 19 $rv="%r28"; | |
| 20 | |
| 21 $code=<<___; | |
| 22 .LEVEL $LEVEL | |
| 23 .SPACE \$TEXT\$ | |
| 24 .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY | |
| 25 | |
| 26 .EXPORT OPENSSL_cpuid_setup,ENTRY | |
| 27 .ALIGN 8 | |
| 28 OPENSSL_cpuid_setup | |
| 29 .PROC | |
| 30 .CALLINFO NO_CALLS | |
| 31 .ENTRY | |
| 32 bv ($rp) | |
| 33 .EXIT | |
| 34 nop | |
| 35 .PROCEND | |
| 36 | |
| 37 .EXPORT OPENSSL_rdtsc,ENTRY | |
| 38 .ALIGN 8 | |
| 39 OPENSSL_rdtsc | |
| 40 .PROC | |
| 41 .CALLINFO NO_CALLS | |
| 42 .ENTRY | |
| 43 mfctl %cr16,$rv | |
| 44 bv ($rp) | |
| 45 .EXIT | |
| 46 nop | |
| 47 .PROCEND | |
| 48 | |
| 49 .EXPORT OPENSSL_wipe_cpu,ENTRY | |
| 50 .ALIGN 8 | |
| 51 OPENSSL_wipe_cpu | |
| 52 .PROC | |
| 53 .CALLINFO NO_CALLS | |
| 54 .ENTRY | |
| 55 xor %r0,%r0,%r1 | |
| 56 fcpy,dbl %fr0,%fr4 | |
| 57 xor %r0,%r0,%r19 | |
| 58 fcpy,dbl %fr0,%fr5 | |
| 59 xor %r0,%r0,%r20 | |
| 60 fcpy,dbl %fr0,%fr6 | |
| 61 xor %r0,%r0,%r21 | |
| 62 fcpy,dbl %fr0,%fr7 | |
| 63 xor %r0,%r0,%r22 | |
| 64 fcpy,dbl %fr0,%fr8 | |
| 65 xor %r0,%r0,%r23 | |
| 66 fcpy,dbl %fr0,%fr9 | |
| 67 xor %r0,%r0,%r24 | |
| 68 fcpy,dbl %fr0,%fr10 | |
| 69 xor %r0,%r0,%r25 | |
| 70 fcpy,dbl %fr0,%fr11 | |
| 71 xor %r0,%r0,%r26 | |
| 72 fcpy,dbl %fr0,%fr22 | |
| 73 xor %r0,%r0,%r29 | |
| 74 fcpy,dbl %fr0,%fr23 | |
| 75 xor %r0,%r0,%r31 | |
| 76 fcpy,dbl %fr0,%fr24 | |
| 77 fcpy,dbl %fr0,%fr25 | |
| 78 fcpy,dbl %fr0,%fr26 | |
| 79 fcpy,dbl %fr0,%fr27 | |
| 80 fcpy,dbl %fr0,%fr28 | |
| 81 fcpy,dbl %fr0,%fr29 | |
| 82 fcpy,dbl %fr0,%fr30 | |
| 83 fcpy,dbl %fr0,%fr31 | |
| 84 bv ($rp) | |
| 85 .EXIT | |
| 86 ldo 0($sp),$rv | |
| 87 .PROCEND | |
| 88 ___ | |
| 89 { | |
| 90 my $inp="%r26"; | |
| 91 my $len="%r25"; | |
| 92 | |
| 93 $code.=<<___; | |
| 94 .EXPORT OPENSSL_cleanse,ENTRY,ARGW0=GR,ARGW1=GR | |
| 95 .ALIGN 8 | |
| 96 OPENSSL_cleanse | |
| 97 .PROC | |
| 98 .CALLINFO NO_CALLS | |
| 99 .ENTRY | |
| 100 cmpib,*= 0,$len,Ldone | |
| 101 nop | |
| 102 cmpib,*>>= 15,$len,Little | |
| 103 ldi $SIZE_T-1,%r1 | |
| 104 | |
| 105 Lalign | |
| 106 and,*<> $inp,%r1,%r28 | |
| 107 b,n Laligned | |
| 108 stb %r0,0($inp) | |
| 109 ldo -1($len),$len | |
| 110 b Lalign | |
| 111 ldo 1($inp),$inp | |
| 112 | |
| 113 Laligned | |
| 114 andcm $len,%r1,%r28 | |
| 115 Lot | |
| 116 $ST %r0,0($inp) | |
| 117 addib,*<> -$SIZE_T,%r28,Lot | |
| 118 ldo $SIZE_T($inp),$inp | |
| 119 | |
| 120 and,*<> $len,%r1,$len | |
| 121 b,n Ldone | |
| 122 Little | |
| 123 stb %r0,0($inp) | |
| 124 addib,*<> -1,$len,Little | |
| 125 ldo 1($inp),$inp | |
| 126 Ldone | |
| 127 bv ($rp) | |
| 128 .EXIT | |
| 129 nop | |
| 130 .PROCEND | |
| 131 ___ | |
| 132 } | |
| 133 { | |
| 134 my ($out,$cnt,$max)=("%r26","%r25","%r24"); | |
| 135 my ($tick,$lasttick)=("%r23","%r22"); | |
| 136 my ($diff,$lastdiff)=("%r21","%r20"); | |
| 137 | |
| 138 $code.=<<___; | |
| 139 .EXPORT OPENSSL_instrument_bus,ENTRY,ARGW0=GR,ARGW1=GR | |
| 140 .ALIGN 8 | |
| 141 OPENSSL_instrument_bus | |
| 142 .PROC | |
| 143 .CALLINFO NO_CALLS | |
| 144 .ENTRY | |
| 145 copy $cnt,$rv | |
| 146 mfctl %cr16,$tick | |
| 147 copy $tick,$lasttick | |
| 148 ldi 0,$diff | |
| 149 | |
| 150 fdc 0($out) | |
| 151 ldw 0($out),$tick | |
| 152 add $diff,$tick,$tick | |
| 153 stw $tick,0($out) | |
| 154 Loop | |
| 155 mfctl %cr16,$tick | |
| 156 sub $tick,$lasttick,$diff | |
| 157 copy $tick,$lasttick | |
| 158 | |
| 159 fdc 0($out) | |
| 160 ldw 0($out),$tick | |
| 161 add $diff,$tick,$tick | |
| 162 stw $tick,0($out) | |
| 163 | |
| 164 addib,<> -1,$cnt,Loop | |
| 165 addi 4,$out,$out | |
| 166 | |
| 167 bv ($rp) | |
| 168 .EXIT | |
| 169 sub $rv,$cnt,$rv | |
| 170 .PROCEND | |
| 171 | |
| 172 .EXPORT OPENSSL_instrument_bus2,ENTRY,ARGW0=GR,ARGW1=GR | |
| 173 .ALIGN 8 | |
| 174 OPENSSL_instrument_bus2 | |
| 175 .PROC | |
| 176 .CALLINFO NO_CALLS | |
| 177 .ENTRY | |
| 178 copy $cnt,$rv | |
| 179 sub %r0,$cnt,$cnt | |
| 180 | |
| 181 mfctl %cr16,$tick | |
| 182 copy $tick,$lasttick | |
| 183 ldi 0,$diff | |
| 184 | |
| 185 fdc 0($out) | |
| 186 ldw 0($out),$tick | |
| 187 add $diff,$tick,$tick | |
| 188 stw $tick,0($out) | |
| 189 | |
| 190 mfctl %cr16,$tick | |
| 191 sub $tick,$lasttick,$diff | |
| 192 copy $tick,$lasttick | |
| 193 Loop2 | |
| 194 copy $diff,$lastdiff | |
| 195 fdc 0($out) | |
| 196 ldw 0($out),$tick | |
| 197 add $diff,$tick,$tick | |
| 198 stw $tick,0($out) | |
| 199 | |
| 200 addib,= -1,$max,Ldone2 | |
| 201 nop | |
| 202 | |
| 203 mfctl %cr16,$tick | |
| 204 sub $tick,$lasttick,$diff | |
| 205 copy $tick,$lasttick | |
| 206 cmpclr,<> $lastdiff,$diff,$tick | |
| 207 ldi 1,$tick | |
| 208 | |
| 209 ldi 1,%r1 | |
| 210 xor %r1,$tick,$tick | |
| 211 addb,<> $tick,$cnt,Loop2 | |
| 212 shladd,l $tick,2,$out,$out | |
| 213 Ldone2 | |
| 214 bv ($rp) | |
| 215 .EXIT | |
| 216 add $rv,$cnt,$rv | |
| 217 .PROCEND | |
| 218 ___ | |
| 219 } | |
| 220 $code =~ s/cmpib,\*/comib,/gm if ($SIZE_T==4); | |
| 221 $code =~ s/,\*/,/gm if ($SIZE_T==4); | |
| 222 print $code; | |
| 223 close STDOUT; | |
| 224 | |
| OLD | NEW |