1221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#!/usr/bin/env perl
2221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
3221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$flavour = shift;
4221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
5221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
6221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
7221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom( $xlate="${dir}perlasm/ppc-xlate.pl" and -f $xlate) or
8221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromdie "can't locate ppc-xlate.pl";
9221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
10221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromopen STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
11221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
12221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromif ($flavour=~/64/) {
13221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom    $CMPLI="cmpldi";
14221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom    $SHRLI="srdi";
15221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom    $SIGNX="extsw";
16221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} else {
17221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom    $CMPLI="cmplwi";
18221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom    $SHRLI="srwi";
19221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom    $SIGNX="mr";
20221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom}
21221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
22221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code=<<___;
23221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.machine	"any"
24221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.text
25221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.globl	.OPENSSL_ppc64_probe
27221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	4
28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.OPENSSL_ppc64_probe:
29392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fcfid	f1,f1
30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	extrdi	r0,r0,32,0
31221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	blr
32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0
33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.byte	0,12,0x14,0,0,0,0,0
34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
35392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.globl	.OPENSSL_altivec_probe
36392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align	4
37392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.OPENSSL_altivec_probe:
38392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0x10000484	# vor	v0,v0,v0
39392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	blr
40392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0
41392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.byte	0,12,0x14,0,0,0,0,0
42221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
43221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl	.OPENSSL_wipe_cpu
44221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	4
45221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.OPENSSL_wipe_cpu:
46221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r0,r0,r0
47392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f0,f31
48392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f1,f31
49392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f2,f31
50221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	mr	r3,r1
51392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f3,f31
52221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r4,r4,r4
53392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f4,f31
54221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r5,r5,r5
55392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f5,f31
56221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r6,r6,r6
57392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f6,f31
58221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r7,r7,r7
59392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f7,f31
60221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r8,r8,r8
61392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f8,f31
62221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r9,r9,r9
63392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f9,f31
64221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r10,r10,r10
65392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f10,f31
66221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r11,r11,r11
67392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f11,f31
68221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xor	r12,r12,r12
69392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f12,f31
70392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	fmr	f13,f31
71221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	blr
72392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0
73392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.byte	0,12,0x14,0,0,0,0,0
74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl	.OPENSSL_atomic_add
76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	4
77221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.OPENSSL_atomic_add:
78392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromLadd:	lwarx	r5,0,r3
79221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	add	r0,r4,r5
80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	stwcx.	r0,0,r3
81392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bne-	Ladd
82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	$SIGNX	r3,r0
83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	blr
84392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0
85392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.byte	0,12,0x14,0,0,0,2,0
86392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0
87221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl	.OPENSSL_rdtsc
89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	4
90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.OPENSSL_rdtsc:
91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	mftb	r3
92221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	mftbu	r4
93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	blr
94392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0
95392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.byte	0,12,0x14,0,0,0,0,0
96221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
97221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl	.OPENSSL_cleanse
98221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	4
99221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.OPENSSL_cleanse:
100221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	$CMPLI	r4,7
101221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	li	r0,0
102221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	bge	Lot
103221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	$CMPLI	r4,0
104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	beqlr-
105221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromLittle:	mtctr	r4
106221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	stb	r0,0(r3)
107221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	addi	r3,r3,1
108eb16853f1084abf2770588727ef99c6a244abc50Brian Carlstrom	bdnz	\$-8
109221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	blr
110221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromLot:	andi.	r5,r3,3
111221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	beq	Laligned
112221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	stb	r0,0(r3)
113221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	subi	r4,r4,1
114221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	addi	r3,r3,1
115221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	b	Lot
116221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromLaligned:
117221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	$SHRLI	r5,r4,2
118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	mtctr	r5
119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	stw	r0,0(r3)
120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	addi	r3,r3,4
121eb16853f1084abf2770588727ef99c6a244abc50Brian Carlstrom	bdnz	\$-8
122221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	andi.	r4,r4,3
123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	bne	Little
124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	blr
125392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0
126392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.byte	0,12,0x14,0,0,0,2,0
127392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0
128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___
129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
130221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code =~ s/\`([^\`]*)\`/eval $1/gem;
131221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint $code;
132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromclose STDOUT;
133