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 34290207Sjkim.size .OPENSSL_ppc64_probe,.-.OPENSSL_ppc64_probe 35238384Sjkim 36238384Sjkim.globl .OPENSSL_altivec_probe 37238384Sjkim.align 4 38238384Sjkim.OPENSSL_altivec_probe: 39238384Sjkim .long 0x10000484 # vor v0,v0,v0 40238384Sjkim blr 41238384Sjkim .long 0 42238384Sjkim .byte 0,12,0x14,0,0,0,0,0 43290207Sjkim.size .OPENSSL_altivec_probe,.-..OPENSSL_altivec_probe 44238384Sjkim 45290207Sjkim.globl .OPENSSL_crypto207_probe 46290207Sjkim.align 4 47290207Sjkim.OPENSSL_crypto207_probe: 48290207Sjkim lvx_u v0,0,r1 49290207Sjkim vcipher v0,v0,v0 50290207Sjkim blr 51290207Sjkim .long 0 52290207Sjkim .byte 0,12,0x14,0,0,0,0,0 53290207Sjkim.size .OPENSSL_crypto207_probe,.-.OPENSSL_crypto207_probe 54290207Sjkim 55238384Sjkim.globl .OPENSSL_wipe_cpu 56238384Sjkim.align 4 57238384Sjkim.OPENSSL_wipe_cpu: 58238384Sjkim xor r0,r0,r0 59238384Sjkim fmr f0,f31 60238384Sjkim fmr f1,f31 61238384Sjkim fmr f2,f31 62238384Sjkim mr r3,r1 63238384Sjkim fmr f3,f31 64238384Sjkim xor r4,r4,r4 65238384Sjkim fmr f4,f31 66238384Sjkim xor r5,r5,r5 67238384Sjkim fmr f5,f31 68238384Sjkim xor r6,r6,r6 69238384Sjkim fmr f6,f31 70238384Sjkim xor r7,r7,r7 71238384Sjkim fmr f7,f31 72238384Sjkim xor r8,r8,r8 73238384Sjkim fmr f8,f31 74238384Sjkim xor r9,r9,r9 75238384Sjkim fmr f9,f31 76238384Sjkim xor r10,r10,r10 77238384Sjkim fmr f10,f31 78238384Sjkim xor r11,r11,r11 79238384Sjkim fmr f11,f31 80238384Sjkim xor r12,r12,r12 81238384Sjkim fmr f12,f31 82238384Sjkim fmr f13,f31 83238384Sjkim blr 84238384Sjkim .long 0 85238384Sjkim .byte 0,12,0x14,0,0,0,0,0 86290207Sjkim.size .OPENSSL_wipe_cpu,.-.OPENSSL_wipe_cpu 87238384Sjkim 88238384Sjkim.globl .OPENSSL_atomic_add 89238384Sjkim.align 4 90238384Sjkim.OPENSSL_atomic_add: 91238384SjkimLadd: lwarx r5,0,r3 92238384Sjkim add r0,r4,r5 93238384Sjkim stwcx. r0,0,r3 94238384Sjkim bne- Ladd 95238384Sjkim $SIGNX r3,r0 96238384Sjkim blr 97238384Sjkim .long 0 98238384Sjkim .byte 0,12,0x14,0,0,0,2,0 99238384Sjkim .long 0 100290207Sjkim.size .OPENSSL_atomic_add,.-.OPENSSL_atomic_add 101238384Sjkim 102238384Sjkim.globl .OPENSSL_rdtsc 103238384Sjkim.align 4 104238384Sjkim.OPENSSL_rdtsc: 105238384Sjkim mftb r3 106238384Sjkim mftbu r4 107238384Sjkim blr 108238384Sjkim .long 0 109238384Sjkim .byte 0,12,0x14,0,0,0,0,0 110290207Sjkim.size .OPENSSL_rdtsc,.-.OPENSSL_rdtsc 111238384Sjkim 112238384Sjkim.globl .OPENSSL_cleanse 113238384Sjkim.align 4 114238384Sjkim.OPENSSL_cleanse: 115238384Sjkim $CMPLI r4,7 116238384Sjkim li r0,0 117238384Sjkim bge Lot 118238384Sjkim $CMPLI r4,0 119238384Sjkim beqlr- 120238384SjkimLittle: mtctr r4 121238384Sjkim stb r0,0(r3) 122238384Sjkim addi r3,r3,1 123238384Sjkim bdnz \$-8 124238384Sjkim blr 125238384SjkimLot: andi. r5,r3,3 126238384Sjkim beq Laligned 127238384Sjkim stb r0,0(r3) 128238384Sjkim subi r4,r4,1 129238384Sjkim addi r3,r3,1 130238384Sjkim b Lot 131238384SjkimLaligned: 132238384Sjkim $SHRLI r5,r4,2 133238384Sjkim mtctr r5 134238384Sjkim stw r0,0(r3) 135238384Sjkim addi r3,r3,4 136238384Sjkim bdnz \$-8 137238384Sjkim andi. r4,r4,3 138238384Sjkim bne Little 139238384Sjkim blr 140238384Sjkim .long 0 141238384Sjkim .byte 0,12,0x14,0,0,0,2,0 142238384Sjkim .long 0 143290207Sjkim.size .OPENSSL_cleanse,.-.OPENSSL_cleanse 144238384Sjkim___ 145238384Sjkim 146238384Sjkim$code =~ s/\`([^\`]*)\`/eval $1/gem; 147238384Sjkimprint $code; 148238384Sjkimclose STDOUT; 149