1221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#!/usr/bin/env perl 2221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 3221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$flavour = shift; 4221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 5221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 6221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or 7221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom( $xlate="${dir}perlasm/ppc-xlate.pl" and -f $xlate) or 8221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromdie "can't locate ppc-xlate.pl"; 9221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 10221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromopen STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!"; 11221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 12221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromif ($flavour=~/64/) { 13221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $CMPLI="cmpldi"; 14221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $SHRLI="srdi"; 15221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $SIGNX="extsw"; 16221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} else { 17221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $CMPLI="cmplwi"; 18221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $SHRLI="srwi"; 19221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $SIGNX="mr"; 20221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 21221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 22221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code=<<___; 23221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.machine "any" 24221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.text 25221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.globl .OPENSSL_ppc64_probe 27221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.OPENSSL_ppc64_probe: 29392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fcfid f1,f1 30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom extrdi r0,r0,32,0 31221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom blr 32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .long 0 33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .byte 0,12,0x14,0,0,0,0,0 34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 35392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.globl .OPENSSL_altivec_probe 36392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align 4 37392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.OPENSSL_altivec_probe: 38392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .long 0x10000484 # vor v0,v0,v0 39392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom blr 40392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .long 0 41392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .byte 0,12,0x14,0,0,0,0,0 42221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 43221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl .OPENSSL_wipe_cpu 44221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 45221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.OPENSSL_wipe_cpu: 46221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r0,r0,r0 47392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f0,f31 48392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f1,f31 49392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f2,f31 50221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mr r3,r1 51392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f3,f31 52221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r4,r4,r4 53392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f4,f31 54221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r5,r5,r5 55392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f5,f31 56221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r6,r6,r6 57392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f6,f31 58221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r7,r7,r7 59392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f7,f31 60221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r8,r8,r8 61392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f8,f31 62221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r9,r9,r9 63392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f9,f31 64221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r10,r10,r10 65392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f10,f31 66221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r11,r11,r11 67392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f11,f31 68221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor r12,r12,r12 69392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f12,f31 70392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom fmr f13,f31 71221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom blr 72392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .long 0 73392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .byte 0,12,0x14,0,0,0,0,0 74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl .OPENSSL_atomic_add 76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 77221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.OPENSSL_atomic_add: 78392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromLadd: lwarx r5,0,r3 79221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add r0,r4,r5 80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stwcx. r0,0,r3 81392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom bne- Ladd 82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $SIGNX r3,r0 83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom blr 84392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .long 0 85392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .byte 0,12,0x14,0,0,0,2,0 86392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .long 0 87221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl .OPENSSL_rdtsc 89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.OPENSSL_rdtsc: 91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mftb r3 92221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mftbu r4 93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom blr 94392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .long 0 95392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .byte 0,12,0x14,0,0,0,0,0 96221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 97221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl .OPENSSL_cleanse 98221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 99221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.OPENSSL_cleanse: 100221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $CMPLI r4,7 101221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom li r0,0 102221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bge Lot 103221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $CMPLI r4,0 104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom beqlr- 105221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromLittle: mtctr r4 106221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stb r0,0(r3) 107221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom addi r3,r3,1 108eb16853f1084abf2770588727ef99c6a244abc50Brian Carlstrom bdnz \$-8 109221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom blr 110221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromLot: andi. r5,r3,3 111221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom beq Laligned 112221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stb r0,0(r3) 113221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom subi r4,r4,1 114221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom addi r3,r3,1 115221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom b Lot 116221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromLaligned: 117221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom $SHRLI r5,r4,2 118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mtctr r5 119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stw r0,0(r3) 120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom addi r3,r3,4 121eb16853f1084abf2770588727ef99c6a244abc50Brian Carlstrom bdnz \$-8 122221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom andi. r4,r4,3 123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne Little 124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom blr 125392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .long 0 126392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .byte 0,12,0x14,0,0,0,2,0 127392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .long 0 128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 130221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code =~ s/\`([^\`]*)\`/eval $1/gem; 131221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint $code; 132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromclose STDOUT; 133