217 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Raku
		
	
	
	
	
	
			
		
		
	
	
			217 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:
 | 
						|
	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
 | 
						|
___
 | 
						|
{
 | 
						|
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
 | 
						|
___
 | 
						|
}
 |