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 8die "can't locate ppc-xlate.pl"; 9 10open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!"; 11 12if ($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_ppc64_probe 27.align 4 28.OPENSSL_ppc64_probe: 29 fcfid f1,f1 30 extrdi r0,r0,32,0 31 blr 32 .long 0 33 .byte 0,12,0x14,0,0,0,0,0 34 35.globl .OPENSSL_altivec_probe 36.align 4 37.OPENSSL_altivec_probe: 38 .long 0x10000484 # vor v0,v0,v0 39 blr 40 .long 0 41 .byte 0,12,0x14,0,0,0,0,0 42 43.globl .OPENSSL_wipe_cpu 44.align 4 45.OPENSSL_wipe_cpu: 46 xor r0,r0,r0 47 fmr f0,f31 48 fmr f1,f31 49 fmr f2,f31 50 mr r3,r1 51 fmr f3,f31 52 xor r4,r4,r4 53 fmr f4,f31 54 xor r5,r5,r5 55 fmr f5,f31 56 xor r6,r6,r6 57 fmr f6,f31 58 xor r7,r7,r7 59 fmr f7,f31 60 xor r8,r8,r8 61 fmr f8,f31 62 xor r9,r9,r9 63 fmr f9,f31 64 xor r10,r10,r10 65 fmr f10,f31 66 xor r11,r11,r11 67 fmr f11,f31 68 xor r12,r12,r12 69 fmr f12,f31 70 fmr f13,f31 71 blr 72 .long 0 73 .byte 0,12,0x14,0,0,0,0,0 74 75.globl .OPENSSL_atomic_add 76.align 4 77.OPENSSL_atomic_add: 78Ladd: lwarx r5,0,r3 79 add r0,r4,r5 80 stwcx. r0,0,r3 81 bne- Ladd 82 $SIGNX r3,r0 83 blr 84 .long 0 85 .byte 0,12,0x14,0,0,0,2,0 86 .long 0 87 88.globl .OPENSSL_rdtsc 89.align 4 90.OPENSSL_rdtsc: 91Lrdtsc: 92 mftb r5 93 mftbu r4 94 mftb r3 95 cmplw r3,r5 96 bne Lrdtsc 97 blr 98 .long 0 99 .byte 0,12,0x14,0,0,0,0,0 100 101.globl .OPENSSL_cleanse 102.align 4 103.OPENSSL_cleanse: 104 $CMPLI r4,7 105 li r0,0 106 bge Lot 107 $CMPLI r4,0 108 beqlr- 109Little: mtctr r4 110 stb r0,0(r3) 111 addi r3,r3,1 112 bdnz \$-8 113 blr 114Lot: andi. r5,r3,3 115 beq Laligned 116 stb r0,0(r3) 117 subi r4,r4,1 118 addi r3,r3,1 119 b Lot 120Laligned: 121 $SHRLI r5,r4,2 122 mtctr r5 123 stw r0,0(r3) 124 addi r3,r3,4 125 bdnz \$-8 126 andi. r4,r4,3 127 bne Little 128 blr 129 .long 0 130 .byte 0,12,0x14,0,0,0,2,0 131 .long 0 132___ 133 134$code =~ s/\`([^\`]*)\`/eval $1/gem; 135print $code; 136close STDOUT; 137