X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fpariscid.pl;h=477ec9b87dd7d36ccb190001ec5bd4d00d9d6b26;hb=1a9d60d2e3b02d5e1954fc71c92bf3a6af691495;hp=bf470ac510acbd451ab297e43960506d14f27b17;hpb=3fc2efd241bdded36dbc099d5d8016ed39311753;p=oweals%2Fopenssl.git diff --git a/crypto/pariscid.pl b/crypto/pariscid.pl index bf470ac510..477ec9b87d 100644 --- a/crypto/pariscid.pl +++ b/crypto/pariscid.pl @@ -87,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 @@ -97,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 @@ -110,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) @@ -128,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;