]> WPIA git - cassiopeia.git/blobdiff - lib/openssl/crypto/ppccpuid.pl
add: execute openssl fetcher to fetch openssl 1.0.1j
[cassiopeia.git] / lib / openssl / crypto / ppccpuid.pl
diff --git a/lib/openssl/crypto/ppccpuid.pl b/lib/openssl/crypto/ppccpuid.pl
new file mode 100755 (executable)
index 0000000..4ba736a
--- /dev/null
@@ -0,0 +1,132 @@
+#!/usr/bin/env perl
+
+$flavour = shift;
+
+$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";
+
+open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
+
+if ($flavour=~/64/) {
+    $CMPLI="cmpldi";
+    $SHRLI="srdi";
+    $SIGNX="extsw";
+} else {
+    $CMPLI="cmplwi";
+    $SHRLI="srwi";
+    $SIGNX="mr";
+}
+
+$code=<<___;
+.machine       "any"
+.text
+
+.globl .OPENSSL_ppc64_probe
+.align 4
+.OPENSSL_ppc64_probe:
+       fcfid   f1,f1
+       extrdi  r0,r0,32,0
+       blr
+       .long   0
+       .byte   0,12,0x14,0,0,0,0,0
+
+.globl .OPENSSL_altivec_probe
+.align 4
+.OPENSSL_altivec_probe:
+       .long   0x10000484      # vor   v0,v0,v0
+       blr
+       .long   0
+       .byte   0,12,0x14,0,0,0,0,0
+
+.globl .OPENSSL_wipe_cpu
+.align 4
+.OPENSSL_wipe_cpu:
+       xor     r0,r0,r0
+       fmr     f0,f31
+       fmr     f1,f31
+       fmr     f2,f31
+       mr      r3,r1
+       fmr     f3,f31
+       xor     r4,r4,r4
+       fmr     f4,f31
+       xor     r5,r5,r5
+       fmr     f5,f31
+       xor     r6,r6,r6
+       fmr     f6,f31
+       xor     r7,r7,r7
+       fmr     f7,f31
+       xor     r8,r8,r8
+       fmr     f8,f31
+       xor     r9,r9,r9
+       fmr     f9,f31
+       xor     r10,r10,r10
+       fmr     f10,f31
+       xor     r11,r11,r11
+       fmr     f11,f31
+       xor     r12,r12,r12
+       fmr     f12,f31
+       fmr     f13,f31
+       blr
+       .long   0
+       .byte   0,12,0x14,0,0,0,0,0
+
+.globl .OPENSSL_atomic_add
+.align 4
+.OPENSSL_atomic_add:
+Ladd:  lwarx   r5,0,r3
+       add     r0,r4,r5
+       stwcx.  r0,0,r3
+       bne-    Ladd
+       $SIGNX  r3,r0
+       blr
+       .long   0
+       .byte   0,12,0x14,0,0,0,2,0
+       .long   0
+
+.globl .OPENSSL_rdtsc
+.align 4
+.OPENSSL_rdtsc:
+       mftb    r3
+       mftbu   r4
+       blr
+       .long   0
+       .byte   0,12,0x14,0,0,0,0,0
+
+.globl .OPENSSL_cleanse
+.align 4
+.OPENSSL_cleanse:
+       $CMPLI  r4,7
+       li      r0,0
+       bge     Lot
+       $CMPLI  r4,0
+       beqlr-
+Little:        mtctr   r4
+       stb     r0,0(r3)
+       addi    r3,r3,1
+       bdnz    \$-8
+       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
+       bdnz    \$-8
+       andi.   r4,r4,3
+       bne     Little
+       blr
+       .long   0
+       .byte   0,12,0x14,0,0,0,2,0
+       .long   0
+___
+
+$code =~ s/\`([^\`]*)\`/eval $1/gem;
+print $code;
+close STDOUT;