Fix ecdsatest.c.
[openssl.git] / crypto / pariscid.pl
index c411b7175dc3327d2ea51eb3f23fbb1b46b570d0..477ec9b87dd7d36ccb190001ec5bd4d00d9d6b26 100644 (file)
@@ -23,6 +23,17 @@ $code=<<___;
        .SPACE  \$TEXT\$
        .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
 
+       .EXPORT OPENSSL_cpuid_setup,ENTRY
+       .ALIGN  8
+OPENSSL_cpuid_setup
+       .PROC
+       .CALLINFO       NO_CALLS
+       .ENTRY
+       bv      ($rp)
+       .EXIT
+       nop
+       .PROCEND
+
        .EXPORT OPENSSL_rdtsc,ENTRY
        .ALIGN  8
 OPENSSL_rdtsc
@@ -76,8 +87,8 @@ OPENSSL_wipe_cpu
        .PROCEND
 ___
 {
-$inp="%r26";
-$len="%r25";
+my $inp="%r26";
+my $len="%r25";
 
 $code.=<<___;
        .EXPORT OPENSSL_cleanse,ENTRY,ARGW0=GR,ARGW1=GR
@@ -86,7 +97,9 @@ OPENSSL_cleanse
        .PROC
        .CALLINFO       NO_CALLS
        .ENTRY
-       cmpib,*>>       15,$len,Little
+       cmpib,*=        0,$len,Ldone
+       nop
+       cmpib,*>>=      15,$len,Little
        ldi             $SIZE_T-1,%r1
 
 Lalign
@@ -99,16 +112,16 @@ Lalign
 
 Laligned
        andcm           $len,%r1,%r28
-Loop
+Lot
        $ST             %r0,0($inp)
-       addib,*vnz      -$SIZE_T,%r28,Loop
+       addib,*<>       -$SIZE_T,%r28,Lot
        ldo             $SIZE_T($inp),$inp
 
        and,*<>         $len,%r1,$len
        b,n             Ldone
 Little
        stb             %r0,0($inp)
-       addib,*vnz      -1,$len,Little
+       addib,*<>       -1,$len,Little
        ldo             1($inp),$inp
 Ldone
        bv              ($rp)
@@ -117,7 +130,93 @@ Ldone
        .PROCEND
 ___
 }
+{
+my ($out,$cnt,$max)=("%r26","%r25","%r24");
+my ($tick,$lasttick)=("%r23","%r22");
+my ($diff,$lastdiff)=("%r21","%r20");
+
+$code.=<<___;
+       .EXPORT OPENSSL_instrument_bus,ENTRY,ARGW0=GR,ARGW1=GR
+       .ALIGN  8
+OPENSSL_instrument_bus
+       .PROC
+       .CALLINFO       NO_CALLS
+       .ENTRY
+       copy            $cnt,$rv
+       mfctl           %cr16,$tick
+       copy            $tick,$lasttick
+       ldi             0,$diff
+
+       fdc             0($out)
+       ldw             0($out),$tick
+       add             $diff,$tick,$tick
+       stw             $tick,0($out)
+Loop
+       mfctl           %cr16,$tick
+       sub             $tick,$lasttick,$diff
+       copy            $tick,$lasttick
+
+       fdc             0($out)
+       ldw             0($out),$tick
+       add             $diff,$tick,$tick
+       stw             $tick,0($out)
 
+       addib,<>        -1,$cnt,Loop
+       addi            4,$out,$out
+
+       bv              ($rp)
+       .EXIT
+       sub             $rv,$cnt,$rv
+       .PROCEND
+
+       .EXPORT OPENSSL_instrument_bus2,ENTRY,ARGW0=GR,ARGW1=GR
+       .ALIGN  8
+OPENSSL_instrument_bus2
+       .PROC
+       .CALLINFO       NO_CALLS
+       .ENTRY
+       copy            $cnt,$rv
+       sub             %r0,$cnt,$cnt
+
+       mfctl           %cr16,$tick
+       copy            $tick,$lasttick
+       ldi             0,$diff
+
+       fdc             0($out)
+       ldw             0($out),$tick
+       add             $diff,$tick,$tick
+       stw             $tick,0($out)
+
+       mfctl           %cr16,$tick
+       sub             $tick,$lasttick,$diff
+       copy            $tick,$lasttick
+Loop2
+       copy            $diff,$lastdiff
+       fdc             0($out)
+       ldw             0($out),$tick
+       add             $diff,$tick,$tick
+       stw             $tick,0($out)
+
+       addib,=         -1,$max,Ldone2
+       nop
+
+       mfctl           %cr16,$tick
+       sub             $tick,$lasttick,$diff
+       copy            $tick,$lasttick
+       cmpclr,<>       $lastdiff,$diff,$tick
+       ldi             1,$tick
+
+       ldi             1,%r1
+       xor             %r1,$tick,$tick
+       addb,<>         $tick,$cnt,Loop2
+       shladd,l        $tick,2,$out,$out
+Ldone2
+       bv              ($rp)
+       .EXIT
+       add             $rv,$cnt,$rv
+       .PROCEND
+___
+}
 $code =~ s/cmpib,\*/comib,/gm if ($SIZE_T==4);
 $code =~ s/,\*/,/gm if ($SIZE_T==4);
 print $code;