blob: 369e1d0df932c66022b970db3f61d117385e2574 [file] [log] [blame]
Alexandre Savard1b09e312012-08-07 20:33:29 -04001#!/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
Alexandre Savard75410672012-08-08 09:50:01 -040026.globl .OPENSSL_cpuid_setup
Alexandre Savard1b09e312012-08-07 20:33:29 -040027.align 4
Alexandre Savard75410672012-08-08 09:50:01 -040028.OPENSSL_cpuid_setup:
Alexandre Savard1b09e312012-08-07 20:33:29 -040029 blr
Alexandre Savard1b09e312012-08-07 20:33:29 -040030
31.globl .OPENSSL_wipe_cpu
32.align 4
33.OPENSSL_wipe_cpu:
34 xor r0,r0,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -040035 mr r3,r1
Alexandre Savard1b09e312012-08-07 20:33:29 -040036 xor r4,r4,r4
Alexandre Savard1b09e312012-08-07 20:33:29 -040037 xor r5,r5,r5
Alexandre Savard1b09e312012-08-07 20:33:29 -040038 xor r6,r6,r6
Alexandre Savard1b09e312012-08-07 20:33:29 -040039 xor r7,r7,r7
Alexandre Savard1b09e312012-08-07 20:33:29 -040040 xor r8,r8,r8
Alexandre Savard1b09e312012-08-07 20:33:29 -040041 xor r9,r9,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -040042 xor r10,r10,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -040043 xor r11,r11,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -040044 xor r12,r12,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -040045 blr
Alexandre Savard1b09e312012-08-07 20:33:29 -040046
47.globl .OPENSSL_atomic_add
48.align 4
49.OPENSSL_atomic_add:
Alexandre Savard75410672012-08-08 09:50:01 -040050Loop: lwarx r5,0,r3
Alexandre Savard1b09e312012-08-07 20:33:29 -040051 add r0,r4,r5
52 stwcx. r0,0,r3
Alexandre Savard75410672012-08-08 09:50:01 -040053 bne- Loop
Alexandre Savard1b09e312012-08-07 20:33:29 -040054 $SIGNX r3,r0
55 blr
Alexandre Savard1b09e312012-08-07 20:33:29 -040056
57.globl .OPENSSL_rdtsc
58.align 4
59.OPENSSL_rdtsc:
60 mftb r3
61 mftbu r4
62 blr
Alexandre Savard1b09e312012-08-07 20:33:29 -040063
64.globl .OPENSSL_cleanse
65.align 4
66.OPENSSL_cleanse:
67 $CMPLI r4,7
68 li r0,0
69 bge Lot
70 $CMPLI r4,0
71 beqlr-
72Little: mtctr r4
73 stb r0,0(r3)
74 addi r3,r3,1
Alexandre Savard75410672012-08-08 09:50:01 -040075 bdnz- \$-8
Alexandre Savard1b09e312012-08-07 20:33:29 -040076 blr
77Lot: andi. r5,r3,3
78 beq Laligned
79 stb r0,0(r3)
80 subi r4,r4,1
81 addi r3,r3,1
82 b Lot
83Laligned:
84 $SHRLI r5,r4,2
85 mtctr r5
86 stw r0,0(r3)
87 addi r3,r3,4
Alexandre Savard75410672012-08-08 09:50:01 -040088 bdnz- \$-8
Alexandre Savard1b09e312012-08-07 20:33:29 -040089 andi. r4,r4,3
90 bne Little
91 blr
Alexandre Savard1b09e312012-08-07 20:33:29 -040092___
93
94$code =~ s/\`([^\`]*)\`/eval $1/gem;
95print $code;
96close STDOUT;