lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | #! /usr/bin/env perl |
| 2 | # Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved. |
| 3 | # |
| 4 | # Licensed under the OpenSSL license (the "License"). You may not use |
| 5 | # this file except in compliance with the License. You can obtain a copy |
| 6 | # in the file LICENSE in the source distribution or at |
| 7 | # https://www.openssl.org/source/license.html |
| 8 | |
| 9 | while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} |
| 10 | open STDOUT,">$output"; |
| 11 | |
| 12 | $code.=<<___; |
| 13 | .text |
| 14 | |
| 15 | .if .ASSEMBLER_VERSION<7000000 |
| 16 | .asg 0,__TI_EABI__ |
| 17 | .endif |
| 18 | .if __TI_EABI__ |
| 19 | .asg OPENSSL_rdtsc,_OPENSSL_rdtsc |
| 20 | .asg OPENSSL_cleanse,_OPENSSL_cleanse |
| 21 | .asg CRYPTO_memcmp,_CRYPTO_memcmp |
| 22 | .asg OPENSSL_atomic_add,_OPENSSL_atomic_add |
| 23 | .asg OPENSSL_wipe_cpu,_OPENSSL_wipe_cpu |
| 24 | .asg OPENSSL_instrument_bus,_OPENSSL_instrument_bus |
| 25 | .asg OPENSSL_instrument_bus2,_OPENSSL_instrument_bus2 |
| 26 | .endif |
| 27 | |
| 28 | .asg B3,RA |
| 29 | |
| 30 | .global _OPENSSL_rdtsc |
| 31 | _OPENSSL_rdtsc: |
| 32 | .asmfunc |
| 33 | B RA |
| 34 | MVC TSCL,B0 |
| 35 | MVC TSCH,B1 |
| 36 | [!B0] MVC B0,TSCL ; start TSC |
| 37 | MV B0,A4 |
| 38 | MV B1,A5 |
| 39 | .endasmfunc |
| 40 | |
| 41 | .global _OPENSSL_cleanse |
| 42 | _OPENSSL_cleanse: |
| 43 | .asmfunc |
| 44 | ZERO A3:A2 |
| 45 | || ZERO B2 |
| 46 | || SHRU B4,3,B0 ; is length >= 8 |
| 47 | || ADD 1,A4,B6 |
| 48 | [!B0] BNOP RA |
| 49 | || ZERO A1 |
| 50 | || ZERO B1 |
| 51 | [B0] MVC B0,ILC |
| 52 | ||[!B0] CMPLT 0,B4,A1 |
| 53 | ||[!B0] CMPLT 1,B4,B1 |
| 54 | [A1] STB A2,*A4++[2] |
| 55 | || [B1] STB B2,*B6++[2] |
| 56 | ||[!B0] CMPLT 2,B4,A1 |
| 57 | ||[!B0] CMPLT 3,B4,B1 |
| 58 | [A1] STB A2,*A4++[2] |
| 59 | || [B1] STB B2,*B6++[2] |
| 60 | ||[!B0] CMPLT 4,B4,A1 |
| 61 | ||[!B0] CMPLT 5,B4,B1 |
| 62 | [A1] STB A2,*A4++[2] |
| 63 | || [B1] STB B2,*B6++[2] |
| 64 | ||[!B0] CMPLT 6,B4,A1 |
| 65 | [A1] STB A2,*A4++[2] |
| 66 | |
| 67 | SPLOOP 1 |
| 68 | STNDW A3:A2,*A4++ |
| 69 | || SUB B4,8,B4 |
| 70 | SPKERNEL |
| 71 | |
| 72 | MV B4,B0 ; remaining bytes |
| 73 | || ADD 1,A4,B6 |
| 74 | || BNOP RA |
| 75 | [B0] CMPLT 0,B0,A1 |
| 76 | || [B0] CMPLT 1,B0,B1 |
| 77 | [A1] STB A2,*A4++[2] |
| 78 | || [B1] STB B2,*B6++[2] |
| 79 | || [B0] CMPLT 2,B0,A1 |
| 80 | || [B0] CMPLT 3,B0,B1 |
| 81 | [A1] STB A2,*A4++[2] |
| 82 | || [B1] STB B2,*B6++[2] |
| 83 | || [B0] CMPLT 4,B0,A1 |
| 84 | || [B0] CMPLT 5,B0,B1 |
| 85 | [A1] STB A2,*A4++[2] |
| 86 | || [B1] STB B2,*B6++[2] |
| 87 | || [B0] CMPLT 6,B0,A1 |
| 88 | [A1] STB A2,*A4++[2] |
| 89 | .endasmfunc |
| 90 | |
| 91 | .global _CRYPTO_memcmp |
| 92 | _CRYPTO_memcmp: |
| 93 | .asmfunc |
| 94 | MV A6,B0 |
| 95 | [!B0] BNOP RA |
| 96 | ||[!B0] ZERO A4 |
| 97 | [B0] MVC B0,ILC |
| 98 | || [B0] ZERO A0 |
| 99 | NOP 4 |
| 100 | |
| 101 | SPLOOP 1 |
| 102 | LDBU *A4++,A1 |
| 103 | || LDBU *B4++,B1 |
| 104 | NOP 4 |
| 105 | XOR.L B1,A1,A2 |
| 106 | SPKERNEL 1,0 |
| 107 | || OR.S A2,A0,A0 |
| 108 | |
| 109 | BNOP RA,3 |
| 110 | ZERO.L A4 |
| 111 | [A0] MVK 1,A4 |
| 112 | .endasmfunc |
| 113 | |
| 114 | .global _OPENSSL_atomic_add |
| 115 | _OPENSSL_atomic_add: |
| 116 | .asmfunc |
| 117 | MV A4,B0 |
| 118 | atomic_add?: |
| 119 | LL *B0,B5 |
| 120 | NOP 4 |
| 121 | ADD B4,B5,B5 |
| 122 | SL B5,*B0 |
| 123 | CMTL *B0,B1 |
| 124 | NOP 4 |
| 125 | [!B1] B atomic_add? |
| 126 | [B1] BNOP RA,4 |
| 127 | MV B5,A4 |
| 128 | .endasmfunc |
| 129 | |
| 130 | .global _OPENSSL_wipe_cpu |
| 131 | _OPENSSL_wipe_cpu: |
| 132 | .asmfunc |
| 133 | ZERO A0 |
| 134 | || ZERO B0 |
| 135 | || ZERO A1 |
| 136 | || ZERO B1 |
| 137 | ZERO A3:A2 |
| 138 | || MVD B0,B2 |
| 139 | || ZERO A4 |
| 140 | || ZERO B4 |
| 141 | || ZERO A5 |
| 142 | || ZERO B5 |
| 143 | || BNOP RA |
| 144 | ZERO A7:A6 |
| 145 | || ZERO B7:B6 |
| 146 | || ZERO A8 |
| 147 | || ZERO B8 |
| 148 | || ZERO A9 |
| 149 | || ZERO B9 |
| 150 | ZERO A17:A16 |
| 151 | || ZERO B17:B16 |
| 152 | || ZERO A18 |
| 153 | || ZERO B18 |
| 154 | || ZERO A19 |
| 155 | || ZERO B19 |
| 156 | ZERO A21:A20 |
| 157 | || ZERO B21:B20 |
| 158 | || ZERO A22 |
| 159 | || ZERO B22 |
| 160 | || ZERO A23 |
| 161 | || ZERO B23 |
| 162 | ZERO A25:A24 |
| 163 | || ZERO B25:B24 |
| 164 | || ZERO A26 |
| 165 | || ZERO B26 |
| 166 | || ZERO A27 |
| 167 | || ZERO B27 |
| 168 | ZERO A29:A28 |
| 169 | || ZERO B29:B28 |
| 170 | || ZERO A30 |
| 171 | || ZERO B30 |
| 172 | || ZERO A31 |
| 173 | || ZERO B31 |
| 174 | .endasmfunc |
| 175 | |
| 176 | CLFLUSH .macro CONTROL,ADDR,LEN |
| 177 | B passthrough? |
| 178 | || STW ADDR,*CONTROL[0] |
| 179 | STW LEN,*CONTROL[1] |
| 180 | spinlock?: |
| 181 | LDW *CONTROL[1],A0 |
| 182 | NOP 3 |
| 183 | passthrough?: |
| 184 | NOP |
| 185 | [A0] BNOP spinlock?,5 |
| 186 | .endm |
| 187 | |
| 188 | .global _OPENSSL_instrument_bus |
| 189 | _OPENSSL_instrument_bus: |
| 190 | .asmfunc |
| 191 | MV B4,B0 ; reassign sizeof(output) |
| 192 | || MV A4,B4 ; reassign output |
| 193 | || MVK 0x00004030,A3 |
| 194 | MV B0,A4 ; return value |
| 195 | || MVK 1,A1 |
| 196 | || MVKH 0x01840000,A3 ; L1DWIBAR |
| 197 | MVC TSCL,B8 ; collect 1st tick |
| 198 | || MVK 0x00004010,A5 |
| 199 | MV B8,B9 ; lasttick = tick |
| 200 | || MVK 0,B7 ; lastdiff = 0 |
| 201 | || MVKH 0x01840000,A5 ; L2WIBAR |
| 202 | CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line |
| 203 | CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line |
| 204 | LL *B4,B5 |
| 205 | NOP 4 |
| 206 | ADD B7,B5,B5 |
| 207 | SL B5,*B4 |
| 208 | CMTL *B4,B1 |
| 209 | NOP 4 |
| 210 | STW B5,*B4 |
| 211 | bus_loop1?: |
| 212 | MVC TSCL,B8 |
| 213 | || [B0] SUB B0,1,B0 |
| 214 | SUB B8,B9,B7 ; lastdiff = tick - lasttick |
| 215 | || MV B8,B9 ; lasttick = tick |
| 216 | CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line |
| 217 | CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line |
| 218 | LL *B4,B5 |
| 219 | NOP 4 |
| 220 | ADD B7,B5,B5 |
| 221 | SL B5,*B4 |
| 222 | CMTL *B4,B1 |
| 223 | STW B5,*B4 ; [!B1] is removed to flatten samples |
| 224 | || ADDK 4,B4 |
| 225 | || [B0] BNOP bus_loop1?,5 |
| 226 | |
| 227 | BNOP RA,5 |
| 228 | .endasmfunc |
| 229 | |
| 230 | .global _OPENSSL_instrument_bus2 |
| 231 | _OPENSSL_instrument_bus2: |
| 232 | .asmfunc |
| 233 | MV A6,B0 ; reassign max |
| 234 | || MV B4,A6 ; reassign sizeof(output) |
| 235 | || MVK 0x00004030,A3 |
| 236 | MV A4,B4 ; reassign output |
| 237 | || MVK 0,A4 ; return value |
| 238 | || MVK 1,A1 |
| 239 | || MVKH 0x01840000,A3 ; L1DWIBAR |
| 240 | |
| 241 | MVC TSCL,B8 ; collect 1st tick |
| 242 | || MVK 0x00004010,A5 |
| 243 | MV B8,B9 ; lasttick = tick |
| 244 | || MVK 0,B7 ; lastdiff = 0 |
| 245 | || MVKH 0x01840000,A5 ; L2WIBAR |
| 246 | CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line |
| 247 | CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line |
| 248 | LL *B4,B5 |
| 249 | NOP 4 |
| 250 | ADD B7,B5,B5 |
| 251 | SL B5,*B4 |
| 252 | CMTL *B4,B1 |
| 253 | NOP 4 |
| 254 | STW B5,*B4 |
| 255 | |
| 256 | MVC TSCL,B8 ; collect 1st diff |
| 257 | SUB B8,B9,B7 ; lastdiff = tick - lasttick |
| 258 | || MV B8,B9 ; lasttick = tick |
| 259 | || SUB B0,1,B0 |
| 260 | bus_loop2?: |
| 261 | CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line |
| 262 | CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line |
| 263 | LL *B4,B5 |
| 264 | NOP 4 |
| 265 | ADD B7,B5,B5 |
| 266 | SL B5,*B4 |
| 267 | CMTL *B4,B1 |
| 268 | STW B5,*B4 ; [!B1] is removed to flatten samples |
| 269 | ||[!B0] BNOP bus_loop2_done?,2 |
| 270 | || SUB B0,1,B0 |
| 271 | MVC TSCL,B8 |
| 272 | SUB B8,B9,B8 |
| 273 | || MV B8,B9 |
| 274 | CMPEQ B8,B7,B2 |
| 275 | || MV B8,B7 |
| 276 | [!B2] ADDAW B4,1,B4 |
| 277 | ||[!B2] ADDK 1,A4 |
| 278 | CMPEQ A4,A6,A2 |
| 279 | [!A2] BNOP bus_loop2?,5 |
| 280 | |
| 281 | bus_loop2_done?: |
| 282 | BNOP RA,5 |
| 283 | .endasmfunc |
| 284 | ___ |
| 285 | |
| 286 | print $code; |
| 287 | close STDOUT or die "error closing STDOUT: $!"; |