123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- #! /usr/bin/env perl
- # Copyright 2010-2016 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
- $output = pop;
- open STDOUT,">$output";
- print <<'___';
- .text
- .set noat
- .globl OPENSSL_cpuid_setup
- .ent OPENSSL_cpuid_setup
- OPENSSL_cpuid_setup:
- .frame $30,0,$26
- .prologue 0
- ret ($26)
- .end OPENSSL_cpuid_setup
- .globl OPENSSL_wipe_cpu
- .ent OPENSSL_wipe_cpu
- OPENSSL_wipe_cpu:
- .frame $30,0,$26
- .prologue 0
- clr $1
- clr $2
- clr $3
- clr $4
- clr $5
- clr $6
- clr $7
- clr $8
- clr $16
- clr $17
- clr $18
- clr $19
- clr $20
- clr $21
- clr $22
- clr $23
- clr $24
- clr $25
- clr $27
- clr $at
- clr $29
- fclr $f0
- fclr $f1
- fclr $f10
- fclr $f11
- fclr $f12
- fclr $f13
- fclr $f14
- fclr $f15
- fclr $f16
- fclr $f17
- fclr $f18
- fclr $f19
- fclr $f20
- fclr $f21
- fclr $f22
- fclr $f23
- fclr $f24
- fclr $f25
- fclr $f26
- fclr $f27
- fclr $f28
- fclr $f29
- fclr $f30
- mov $sp,$0
- ret ($26)
- .end OPENSSL_wipe_cpu
- .globl OPENSSL_atomic_add
- .ent OPENSSL_atomic_add
- OPENSSL_atomic_add:
- .frame $30,0,$26
- .prologue 0
- 1: ldl_l $0,0($16)
- addl $0,$17,$1
- stl_c $1,0($16)
- beq $1,1b
- addl $0,$17,$0
- ret ($26)
- .end OPENSSL_atomic_add
- .globl OPENSSL_rdtsc
- .ent OPENSSL_rdtsc
- OPENSSL_rdtsc:
- .frame $30,0,$26
- .prologue 0
- rpcc $0
- ret ($26)
- .end OPENSSL_rdtsc
- .globl OPENSSL_cleanse
- .ent OPENSSL_cleanse
- OPENSSL_cleanse:
- .frame $30,0,$26
- .prologue 0
- beq $17,.Ldone
- and $16,7,$0
- bic $17,7,$at
- beq $at,.Little
- beq $0,.Laligned
- .Little:
- subq $0,8,$0
- ldq_u $1,0($16)
- mov $16,$2
- .Lalign:
- mskbl $1,$16,$1
- lda $16,1($16)
- subq $17,1,$17
- addq $0,1,$0
- beq $17,.Lout
- bne $0,.Lalign
- .Lout: stq_u $1,0($2)
- beq $17,.Ldone
- bic $17,7,$at
- beq $at,.Little
- .Laligned:
- stq $31,0($16)
- subq $17,8,$17
- lda $16,8($16)
- bic $17,7,$at
- bne $at,.Laligned
- bne $17,.Little
- .Ldone: ret ($26)
- .end OPENSSL_cleanse
- .globl CRYPTO_memcmp
- .ent CRYPTO_memcmp
- CRYPTO_memcmp:
- .frame $30,0,$26
- .prologue 0
- xor $0,$0,$0
- beq $18,.Lno_data
- xor $1,$1,$1
- nop
- .Loop_cmp:
- ldq_u $2,0($16)
- subq $18,1,$18
- ldq_u $3,0($17)
- extbl $2,$16,$2
- lda $16,1($16)
- extbl $3,$17,$3
- lda $17,1($17)
- xor $3,$2,$2
- or $2,$0,$0
- bne $18,.Loop_cmp
- subq $31,$0,$0
- srl $0,63,$0
- .Lno_data:
- ret ($26)
- .end CRYPTO_memcmp
- ___
- {
- my ($out,$cnt,$max)=("\$16","\$17","\$18");
- my ($tick,$lasttick)=("\$19","\$20");
- my ($diff,$lastdiff)=("\$21","\$22");
- my ($v0,$ra,$sp,$zero)=("\$0","\$26","\$30","\$31");
- print <<___;
- .globl OPENSSL_instrument_bus
- .ent OPENSSL_instrument_bus
- OPENSSL_instrument_bus:
- .frame $sp,0,$ra
- .prologue 0
- mov $cnt,$v0
- rpcc $lasttick
- mov 0,$diff
- ecb ($out)
- ldl_l $tick,0($out)
- addl $diff,$tick,$tick
- mov $tick,$diff
- stl_c $tick,0($out)
- stl $diff,0($out)
- .Loop: rpcc $tick
- subq $tick,$lasttick,$diff
- mov $tick,$lasttick
- ecb ($out)
- ldl_l $tick,0($out)
- addl $diff,$tick,$tick
- mov $tick,$diff
- stl_c $tick,0($out)
- stl $diff,0($out)
- subl $cnt,1,$cnt
- lda $out,4($out)
- bne $cnt,.Loop
- ret ($ra)
- .end OPENSSL_instrument_bus
- .globl OPENSSL_instrument_bus2
- .ent OPENSSL_instrument_bus2
- OPENSSL_instrument_bus2:
- .frame $sp,0,$ra
- .prologue 0
- mov $cnt,$v0
- rpcc $lasttick
- mov 0,$diff
- ecb ($out)
- ldl_l $tick,0($out)
- addl $diff,$tick,$tick
- mov $tick,$diff
- stl_c $tick,0($out)
- stl $diff,0($out)
- rpcc $tick
- subq $tick,$lasttick,$diff
- mov $tick,$lasttick
- mov $diff,$lastdiff
- .Loop2:
- ecb ($out)
- ldl_l $tick,0($out)
- addl $diff,$tick,$tick
- mov $tick,$diff
- stl_c $tick,0($out)
- stl $diff,0($out)
- subl $max,1,$max
- beq $max,.Ldone2
- rpcc $tick
- subq $tick,$lasttick,$diff
- mov $tick,$lasttick
- subq $lastdiff,$diff,$tick
- mov $diff,$lastdiff
- cmovne $tick,1,$tick
- subl $cnt,$tick,$cnt
- s4addq $tick,$out,$out
- bne $cnt,.Loop2
- .Ldone2:
- subl $v0,$cnt,$v0
- ret ($ra)
- .end OPENSSL_instrument_bus2
- ___
- }
- close STDOUT;
|