Home | History | Annotate | Download | only in crypto
      1 #!/usr/bin/env perl
      2 
      3 $flavour = shift;
      4 
      5 $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
      6 ( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
      7 ( $xlate="${dir}perlasm/ppc-xlate.pl" and -f $xlate) or
      8 die "can't locate ppc-xlate.pl";
      9 
     10 open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
     11 
     12 if ($flavour=~/64/) {
     13     $CMPLI="cmpldi";
     14     $SHRLI="srdi";
     15     $SIGNX="extsw";
     16 } else {
     17     $CMPLI="cmplwi";
     18     $SHRLI="srwi";
     19     $SIGNX="mr";
     20 }
     21 
     22 $code=<<___;
     23 .machine	"any"
     24 .text
     25 
     26 .globl	.OPENSSL_cpuid_setup
     27 .align	4
     28 .OPENSSL_cpuid_setup:
     29 	blr
     30 
     31 .globl	.OPENSSL_wipe_cpu
     32 .align	4
     33 .OPENSSL_wipe_cpu:
     34 	xor	r0,r0,r0
     35 	mr	r3,r1
     36 	xor	r4,r4,r4
     37 	xor	r5,r5,r5
     38 	xor	r6,r6,r6
     39 	xor	r7,r7,r7
     40 	xor	r8,r8,r8
     41 	xor	r9,r9,r9
     42 	xor	r10,r10,r10
     43 	xor	r11,r11,r11
     44 	xor	r12,r12,r12
     45 	blr
     46 
     47 .globl	.OPENSSL_atomic_add
     48 .align	4
     49 .OPENSSL_atomic_add:
     50 Loop:	lwarx	r5,0,r3
     51 	add	r0,r4,r5
     52 	stwcx.	r0,0,r3
     53 	bne-	Loop
     54 	$SIGNX	r3,r0
     55 	blr
     56 
     57 .globl	.OPENSSL_rdtsc
     58 .align	4
     59 .OPENSSL_rdtsc:
     60 	mftb	r3
     61 	mftbu	r4
     62 	blr
     63 
     64 .globl	.OPENSSL_cleanse
     65 .align	4
     66 .OPENSSL_cleanse:
     67 	$CMPLI	r4,7
     68 	li	r0,0
     69 	bge	Lot
     70 	$CMPLI	r4,0
     71 	beqlr-
     72 Little:	mtctr	r4
     73 	stb	r0,0(r3)
     74 	addi	r3,r3,1
     75 	bdnz-	\$-8
     76 	blr
     77 Lot:	andi.	r5,r3,3
     78 	beq	Laligned
     79 	stb	r0,0(r3)
     80 	subi	r4,r4,1
     81 	addi	r3,r3,1
     82 	b	Lot
     83 Laligned:
     84 	$SHRLI	r5,r4,2
     85 	mtctr	r5
     86 	stw	r0,0(r3)
     87 	addi	r3,r3,4
     88 	bdnz-	\$-8
     89 	andi.	r4,r4,3
     90 	bne	Little
     91 	blr
     92 ___
     93 
     94 $code =~ s/\`([^\`]*)\`/eval $1/gem;
     95 print $code;
     96 close STDOUT;
     97