openssl/crypto/alphacpuid.pl

218 lines
3.1 KiB
Raku

#!/usr/bin/env perl
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:
ldq_u $1,0($16)
mov $16,$2
.Lalign:
mskbl $1,$16,$1
lda $16,1($16)
subq $17,1,$17
subq $0,1,$0
beq $17,.Lout
bne $0,.Lalign
.Lout: stq_u $1,0($2)
beq $17,.Ldone
bic $17,7,$at
mov $17,$0
beq $at,.Little
.Laligned:
stq $31,0($16)
subq $17,8,$17
lda $16,8($16)
bic $17,7,$at
bne $at,.Laligned
beq $17,.Ldone
mov $17,$0
br .Little
.Ldone: ret ($26)
.end OPENSSL_cleanse
___
{
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
___
}