| #! /usr/bin/env perl |
| # Copyright 2010-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 |
| |
| |
| $output = pop and 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 or die "error closing STDOUT: $!"; |