258 lines
3.9 KiB
Perl
258 lines
3.9 KiB
Perl
|
#! /usr/bin/env perl
|
||
|
# Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved.
|
||
|
#
|
||
|
# Licensed under the OpenSSL license (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 or die "error closing STDOUT: $!";
|