ppccpuid.pl 1.4 KB
Newer Older
A
Andy Polyakov 已提交
1 2
#!/usr/bin/env perl

A
Andy Polyakov 已提交
3
$flavour = shift;
A
Andy Polyakov 已提交
4 5 6 7 8 9

$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
( $xlate="${dir}perlasm/ppc-xlate.pl" and -f $xlate) or
die "can't locate ppc-xlate.pl";

A
Andy Polyakov 已提交
10
open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
A
Andy Polyakov 已提交
11

A
Andy Polyakov 已提交
12
if ($flavour=~/64/) {
A
Andy Polyakov 已提交
13 14 15 16 17 18 19 20 21 22
    $CMPLI="cmpldi";
    $SHRLI="srdi";
    $SIGNX="extsw";
} else {
    $CMPLI="cmplwi";
    $SHRLI="srwi";
    $SIGNX="mr";
}

$code=<<___;
A
Andy Polyakov 已提交
23
.machine	"any"
A
Andy Polyakov 已提交
24 25
.text

26
.globl	.OPENSSL_ppc64_probe
A
Andy Polyakov 已提交
27
.align	4
28 29 30
.OPENSSL_ppc64_probe:
	fcfid	f1,f1
	extrdi	r0,r0,32,0
A
Andy Polyakov 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
	blr

.globl	.OPENSSL_wipe_cpu
.align	4
.OPENSSL_wipe_cpu:
	xor	r0,r0,r0
	mr	r3,r1
	xor	r4,r4,r4
	xor	r5,r5,r5
	xor	r6,r6,r6
	xor	r7,r7,r7
	xor	r8,r8,r8
	xor	r9,r9,r9
	xor	r10,r10,r10
	xor	r11,r11,r11
	xor	r12,r12,r12
	blr

.globl	.OPENSSL_atomic_add
.align	4
.OPENSSL_atomic_add:
Loop:	lwarx	r5,0,r3
	add	r0,r4,r5
	stwcx.	r0,0,r3
	bne-	Loop
	$SIGNX	r3,r0
	blr

.globl	.OPENSSL_rdtsc
.align	4
.OPENSSL_rdtsc:
	mftb	r3
	mftbu	r4
	blr

.globl	.OPENSSL_cleanse
.align	4
.OPENSSL_cleanse:
	$CMPLI	r4,7
	li	r0,0
	bge	Lot
Little:	mtctr	r4
	stb	r0,0(r3)
	addi	r3,r3,1
A
Andy Polyakov 已提交
75
	bdnz-	\$-8
A
Andy Polyakov 已提交
76 77 78 79 80 81 82 83 84 85 86 87
	blr
Lot:	andi.	r5,r3,3
	beq	Laligned
	stb	r0,0(r3)
	subi	r4,r4,1
	addi	r3,r3,1
	b	Lot
Laligned:
	$SHRLI	r5,r4,2
	mtctr	r5
	stw	r0,0(r3)
	addi	r3,r3,4
A
Andy Polyakov 已提交
88
	bdnz-	\$-8
A
Andy Polyakov 已提交
89 90 91 92 93 94 95 96
	andi.	r4,r4,3
	bne	Little
	blr
___

$code =~ s/\`([^\`]*)\`/eval $1/gem;
print $code;
close STDOUT;