1238384Sjkim#!/usr/bin/env perl 2238384Sjkim 3238384Sjkim$flavour = shift; 4238384Sjkim 5238384Sjkim$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 6238384Sjkim( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or 7238384Sjkim( $xlate="${dir}perlasm/ppc-xlate.pl" and -f $xlate) or 8238384Sjkimdie "can't locate ppc-xlate.pl"; 9238384Sjkim 10238384Sjkimopen STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!"; 11238384Sjkim 12238384Sjkimif ($flavour=~/64/) { 13238384Sjkim $CMPLI="cmpldi"; 14238384Sjkim $SHRLI="srdi"; 15238384Sjkim $SIGNX="extsw"; 16238384Sjkim} else { 17238384Sjkim $CMPLI="cmplwi"; 18238384Sjkim $SHRLI="srwi"; 19238384Sjkim $SIGNX="mr"; 20238384Sjkim} 21238384Sjkim 22238384Sjkim$code=<<___; 23238384Sjkim.machine "any" 24238384Sjkim.text 25238384Sjkim 26238384Sjkim.globl .OPENSSL_ppc64_probe 27238384Sjkim.align 4 28238384Sjkim.OPENSSL_ppc64_probe: 29238384Sjkim fcfid f1,f1 30238384Sjkim extrdi r0,r0,32,0 31238384Sjkim blr 32238384Sjkim .long 0 33238384Sjkim .byte 0,12,0x14,0,0,0,0,0 34238384Sjkim 35238384Sjkim.globl .OPENSSL_altivec_probe 36238384Sjkim.align 4 37238384Sjkim.OPENSSL_altivec_probe: 38238384Sjkim .long 0x10000484 # vor v0,v0,v0 39238384Sjkim blr 40238384Sjkim .long 0 41238384Sjkim .byte 0,12,0x14,0,0,0,0,0 42238384Sjkim 43238384Sjkim.globl .OPENSSL_wipe_cpu 44238384Sjkim.align 4 45238384Sjkim.OPENSSL_wipe_cpu: 46238384Sjkim xor r0,r0,r0 47238384Sjkim fmr f0,f31 48238384Sjkim fmr f1,f31 49238384Sjkim fmr f2,f31 50238384Sjkim mr r3,r1 51238384Sjkim fmr f3,f31 52238384Sjkim xor r4,r4,r4 53238384Sjkim fmr f4,f31 54238384Sjkim xor r5,r5,r5 55238384Sjkim fmr f5,f31 56238384Sjkim xor r6,r6,r6 57238384Sjkim fmr f6,f31 58238384Sjkim xor r7,r7,r7 59238384Sjkim fmr f7,f31 60238384Sjkim xor r8,r8,r8 61238384Sjkim fmr f8,f31 62238384Sjkim xor r9,r9,r9 63238384Sjkim fmr f9,f31 64238384Sjkim xor r10,r10,r10 65238384Sjkim fmr f10,f31 66238384Sjkim xor r11,r11,r11 67238384Sjkim fmr f11,f31 68238384Sjkim xor r12,r12,r12 69238384Sjkim fmr f12,f31 70238384Sjkim fmr f13,f31 71238384Sjkim blr 72238384Sjkim .long 0 73238384Sjkim .byte 0,12,0x14,0,0,0,0,0 74238384Sjkim 75238384Sjkim.globl .OPENSSL_atomic_add 76238384Sjkim.align 4 77238384Sjkim.OPENSSL_atomic_add: 78238384SjkimLadd: lwarx r5,0,r3 79238384Sjkim add r0,r4,r5 80238384Sjkim stwcx. r0,0,r3 81238384Sjkim bne- Ladd 82238384Sjkim $SIGNX r3,r0 83238384Sjkim blr 84238384Sjkim .long 0 85238384Sjkim .byte 0,12,0x14,0,0,0,2,0 86238384Sjkim .long 0 87238384Sjkim 88238384Sjkim.globl .OPENSSL_rdtsc 89238384Sjkim.align 4 90238384Sjkim.OPENSSL_rdtsc: 91238384Sjkim mftb r3 92238384Sjkim mftbu r4 93238384Sjkim blr 94238384Sjkim .long 0 95238384Sjkim .byte 0,12,0x14,0,0,0,0,0 96238384Sjkim 97238384Sjkim.globl .OPENSSL_cleanse 98238384Sjkim.align 4 99238384Sjkim.OPENSSL_cleanse: 100238384Sjkim $CMPLI r4,7 101238384Sjkim li r0,0 102238384Sjkim bge Lot 103238384Sjkim $CMPLI r4,0 104238384Sjkim beqlr- 105238384SjkimLittle: mtctr r4 106238384Sjkim stb r0,0(r3) 107238384Sjkim addi r3,r3,1 108238384Sjkim bdnz \$-8 109238384Sjkim blr 110238384SjkimLot: andi. r5,r3,3 111238384Sjkim beq Laligned 112238384Sjkim stb r0,0(r3) 113238384Sjkim subi r4,r4,1 114238384Sjkim addi r3,r3,1 115238384Sjkim b Lot 116238384SjkimLaligned: 117238384Sjkim $SHRLI r5,r4,2 118238384Sjkim mtctr r5 119238384Sjkim stw r0,0(r3) 120238384Sjkim addi r3,r3,4 121238384Sjkim bdnz \$-8 122238384Sjkim andi. r4,r4,3 123238384Sjkim bne Little 124238384Sjkim blr 125238384Sjkim .long 0 126238384Sjkim .byte 0,12,0x14,0,0,0,2,0 127238384Sjkim .long 0 128238384Sjkim___ 129238384Sjkim 130238384Sjkim$code =~ s/\`([^\`]*)\`/eval $1/gem; 131238384Sjkimprint $code; 132238384Sjkimclose STDOUT; 133