123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- #! /usr/bin/env perl
- # Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved.
- #
- # Licensed under the Apache License 2.0 (the "License"). You may not use
- # this file except in compliance with the License. You can obtain a copy
- # in the file LICENSE in the source distribution or at
- # https://www.openssl.org/source/license.html
- while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
- open STDOUT,">$output";
- $code.=<<___;
- .text
- .if .ASSEMBLER_VERSION<7000000
- .asg 0,__TI_EABI__
- .endif
- .if __TI_EABI__
- .asg OPENSSL_rdtsc,_OPENSSL_rdtsc
- .asg OPENSSL_cleanse,_OPENSSL_cleanse
- .asg CRYPTO_memcmp,_CRYPTO_memcmp
- .asg OPENSSL_atomic_add,_OPENSSL_atomic_add
- .asg OPENSSL_wipe_cpu,_OPENSSL_wipe_cpu
- .asg OPENSSL_instrument_bus,_OPENSSL_instrument_bus
- .asg OPENSSL_instrument_bus2,_OPENSSL_instrument_bus2
- .endif
- .asg B3,RA
- .global _OPENSSL_rdtsc
- _OPENSSL_rdtsc:
- .asmfunc
- B RA
- MVC TSCL,B0
- MVC TSCH,B1
- [!B0] MVC B0,TSCL ; start TSC
- MV B0,A4
- MV B1,A5
- .endasmfunc
- .global _OPENSSL_cleanse
- _OPENSSL_cleanse:
- .asmfunc
- ZERO A3:A2
- || ZERO B2
- || SHRU B4,3,B0 ; is length >= 8
- || ADD 1,A4,B6
- [!B0] BNOP RA
- || ZERO A1
- || ZERO B1
- [B0] MVC B0,ILC
- ||[!B0] CMPLT 0,B4,A1
- ||[!B0] CMPLT 1,B4,B1
- [A1] STB A2,*A4++[2]
- || [B1] STB B2,*B6++[2]
- ||[!B0] CMPLT 2,B4,A1
- ||[!B0] CMPLT 3,B4,B1
- [A1] STB A2,*A4++[2]
- || [B1] STB B2,*B6++[2]
- ||[!B0] CMPLT 4,B4,A1
- ||[!B0] CMPLT 5,B4,B1
- [A1] STB A2,*A4++[2]
- || [B1] STB B2,*B6++[2]
- ||[!B0] CMPLT 6,B4,A1
- [A1] STB A2,*A4++[2]
- SPLOOP 1
- STNDW A3:A2,*A4++
- || SUB B4,8,B4
- SPKERNEL
- MV B4,B0 ; remaining bytes
- || ADD 1,A4,B6
- || BNOP RA
- [B0] CMPLT 0,B0,A1
- || [B0] CMPLT 1,B0,B1
- [A1] STB A2,*A4++[2]
- || [B1] STB B2,*B6++[2]
- || [B0] CMPLT 2,B0,A1
- || [B0] CMPLT 3,B0,B1
- [A1] STB A2,*A4++[2]
- || [B1] STB B2,*B6++[2]
- || [B0] CMPLT 4,B0,A1
- || [B0] CMPLT 5,B0,B1
- [A1] STB A2,*A4++[2]
- || [B1] STB B2,*B6++[2]
- || [B0] CMPLT 6,B0,A1
- [A1] STB A2,*A4++[2]
- .endasmfunc
- .global _CRYPTO_memcmp
- _CRYPTO_memcmp:
- .asmfunc
- MV A6,B0
- [!B0] BNOP RA
- ||[!B0] ZERO A4
- [B0] MVC B0,ILC
- || [B0] ZERO A0
- NOP 4
- SPLOOP 1
- LDBU *A4++,A1
- || LDBU *B4++,B1
- NOP 4
- XOR.L B1,A1,A2
- SPKERNEL 1,0
- || OR.S A2,A0,A0
- BNOP RA,3
- ZERO.L A4
- [A0] MVK 1,A4
- .endasmfunc
- .global _OPENSSL_atomic_add
- _OPENSSL_atomic_add:
- .asmfunc
- MV A4,B0
- atomic_add?:
- LL *B0,B5
- NOP 4
- ADD B4,B5,B5
- SL B5,*B0
- CMTL *B0,B1
- NOP 4
- [!B1] B atomic_add?
- [B1] BNOP RA,4
- MV B5,A4
- .endasmfunc
- .global _OPENSSL_wipe_cpu
- _OPENSSL_wipe_cpu:
- .asmfunc
- ZERO A0
- || ZERO B0
- || ZERO A1
- || ZERO B1
- ZERO A3:A2
- || MVD B0,B2
- || ZERO A4
- || ZERO B4
- || ZERO A5
- || ZERO B5
- || BNOP RA
- ZERO A7:A6
- || ZERO B7:B6
- || ZERO A8
- || ZERO B8
- || ZERO A9
- || ZERO B9
- ZERO A17:A16
- || ZERO B17:B16
- || ZERO A18
- || ZERO B18
- || ZERO A19
- || ZERO B19
- ZERO A21:A20
- || ZERO B21:B20
- || ZERO A22
- || ZERO B22
- || ZERO A23
- || ZERO B23
- ZERO A25:A24
- || ZERO B25:B24
- || ZERO A26
- || ZERO B26
- || ZERO A27
- || ZERO B27
- ZERO A29:A28
- || ZERO B29:B28
- || ZERO A30
- || ZERO B30
- || ZERO A31
- || ZERO B31
- .endasmfunc
- CLFLUSH .macro CONTROL,ADDR,LEN
- B passthrough?
- || STW ADDR,*CONTROL[0]
- STW LEN,*CONTROL[1]
- spinlock?:
- LDW *CONTROL[1],A0
- NOP 3
- passthrough?:
- NOP
- [A0] BNOP spinlock?,5
- .endm
- .global _OPENSSL_instrument_bus
- _OPENSSL_instrument_bus:
- .asmfunc
- MV B4,B0 ; reassign sizeof(output)
- || MV A4,B4 ; reassign output
- || MVK 0x00004030,A3
- MV B0,A4 ; return value
- || MVK 1,A1
- || MVKH 0x01840000,A3 ; L1DWIBAR
- MVC TSCL,B8 ; collect 1st tick
- || MVK 0x00004010,A5
- MV B8,B9 ; lasttick = tick
- || MVK 0,B7 ; lastdiff = 0
- || MVKH 0x01840000,A5 ; L2WIBAR
- CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
- CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
- LL *B4,B5
- NOP 4
- ADD B7,B5,B5
- SL B5,*B4
- CMTL *B4,B1
- NOP 4
- STW B5,*B4
- bus_loop1?:
- MVC TSCL,B8
- || [B0] SUB B0,1,B0
- SUB B8,B9,B7 ; lastdiff = tick - lasttick
- || MV B8,B9 ; lasttick = tick
- CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
- CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
- LL *B4,B5
- NOP 4
- ADD B7,B5,B5
- SL B5,*B4
- CMTL *B4,B1
- STW B5,*B4 ; [!B1] is removed to flatten samples
- || ADDK 4,B4
- || [B0] BNOP bus_loop1?,5
- BNOP RA,5
- .endasmfunc
- .global _OPENSSL_instrument_bus2
- _OPENSSL_instrument_bus2:
- .asmfunc
- MV A6,B0 ; reassign max
- || MV B4,A6 ; reassign sizeof(output)
- || MVK 0x00004030,A3
- MV A4,B4 ; reassign output
- || MVK 0,A4 ; return value
- || MVK 1,A1
- || MVKH 0x01840000,A3 ; L1DWIBAR
- MVC TSCL,B8 ; collect 1st tick
- || MVK 0x00004010,A5
- MV B8,B9 ; lasttick = tick
- || MVK 0,B7 ; lastdiff = 0
- || MVKH 0x01840000,A5 ; L2WIBAR
- CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
- CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
- LL *B4,B5
- NOP 4
- ADD B7,B5,B5
- SL B5,*B4
- CMTL *B4,B1
- NOP 4
- STW B5,*B4
- MVC TSCL,B8 ; collect 1st diff
- SUB B8,B9,B7 ; lastdiff = tick - lasttick
- || MV B8,B9 ; lasttick = tick
- || SUB B0,1,B0
- bus_loop2?:
- CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
- CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
- LL *B4,B5
- NOP 4
- ADD B7,B5,B5
- SL B5,*B4
- CMTL *B4,B1
- STW B5,*B4 ; [!B1] is removed to flatten samples
- ||[!B0] BNOP bus_loop2_done?,2
- || SUB B0,1,B0
- MVC TSCL,B8
- SUB B8,B9,B8
- || MV B8,B9
- CMPEQ B8,B7,B2
- || MV B8,B7
- [!B2] ADDAW B4,1,B4
- ||[!B2] ADDK 1,A4
- CMPEQ A4,A6,A2
- [!A2] BNOP bus_loop2?,5
- bus_loop2_done?:
- BNOP RA,5
- .endasmfunc
- ___
- print $code;
- close STDOUT or die "error closing STDOUT: $!";
|