X-Git-Url: https://git.openssl.org/?a=blobdiff_plain;f=crypto%2Falphacpuid.pl;h=6c7fd4c9dd3dd1dbd19a9c93141f44e6e6295716;hb=4e585e720195788c9546a9ce71d63dafdfd2aaf1;hp=c9474ff497521ed7e42c149ce73d80ba969b5c7f;hpb=f8927c89d00f42c4aee239cd8224fc4c7a84bd99;p=openssl.git diff --git a/crypto/alphacpuid.pl b/crypto/alphacpuid.pl index c9474ff497..6c7fd4c9dd 100644 --- a/crypto/alphacpuid.pl +++ b/crypto/alphacpuid.pl @@ -1,4 +1,15 @@ -#!/usr/bin/env perl +#! /usr/bin/env perl +# Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +$output = pop; +open STDOUT,">$output"; + print <<'___'; .text @@ -99,19 +110,19 @@ OPENSSL_cleanse: beq $0,.Laligned .Little: + subq $0,8,$0 ldq_u $1,0($16) mov $16,$2 .Lalign: mskbl $1,$16,$1 lda $16,1($16) subq $17,1,$17 - subq $0,1,$0 + addq $0,1,$0 beq $17,.Lout bne $0,.Lalign .Lout: stq_u $1,0($2) beq $17,.Ldone bic $17,7,$at - mov $17,$0 beq $at,.Little .Laligned: @@ -120,9 +131,127 @@ OPENSSL_cleanse: lda $16,8($16) bic $17,7,$at bne $at,.Laligned - beq $17,.Ldone - mov $17,$0 - br .Little + bne $17,.Little .Ldone: ret ($26) .end OPENSSL_cleanse + +.globl CRYPTO_memcmp +.ent CRYPTO_memcmp +CRYPTO_memcmp: + .frame $30,0,$26 + .prologue 0 + xor $0,$0,$0 + beq $18,.Lno_data + + xor $1,$1,$1 + nop +.Loop_cmp: + ldq_u $2,0($16) + subq $18,1,$18 + ldq_u $3,0($17) + extbl $2,$16,$2 + lda $16,1($16) + extbl $3,$17,$3 + lda $17,1($17) + xor $3,$2,$2 + or $2,$0,$0 + bne $18,.Loop_cmp + + subq $31,$0,$0 + srl $0,63,$0 +.Lno_data: + ret ($26) +.end CRYPTO_memcmp ___ +{ +my ($out,$cnt,$max)=("\$16","\$17","\$18"); +my ($tick,$lasttick)=("\$19","\$20"); +my ($diff,$lastdiff)=("\$21","\$22"); +my ($v0,$ra,$sp,$zero)=("\$0","\$26","\$30","\$31"); + +print <<___; +.globl OPENSSL_instrument_bus +.ent OPENSSL_instrument_bus +OPENSSL_instrument_bus: + .frame $sp,0,$ra + .prologue 0 + mov $cnt,$v0 + + rpcc $lasttick + mov 0,$diff + + ecb ($out) + ldl_l $tick,0($out) + addl $diff,$tick,$tick + mov $tick,$diff + stl_c $tick,0($out) + stl $diff,0($out) + +.Loop: rpcc $tick + subq $tick,$lasttick,$diff + mov $tick,$lasttick + + ecb ($out) + ldl_l $tick,0($out) + addl $diff,$tick,$tick + mov $tick,$diff + stl_c $tick,0($out) + stl $diff,0($out) + + subl $cnt,1,$cnt + lda $out,4($out) + bne $cnt,.Loop + + ret ($ra) +.end OPENSSL_instrument_bus + +.globl OPENSSL_instrument_bus2 +.ent OPENSSL_instrument_bus2 +OPENSSL_instrument_bus2: + .frame $sp,0,$ra + .prologue 0 + mov $cnt,$v0 + + rpcc $lasttick + mov 0,$diff + + ecb ($out) + ldl_l $tick,0($out) + addl $diff,$tick,$tick + mov $tick,$diff + stl_c $tick,0($out) + stl $diff,0($out) + + rpcc $tick + subq $tick,$lasttick,$diff + mov $tick,$lasttick + mov $diff,$lastdiff +.Loop2: + ecb ($out) + ldl_l $tick,0($out) + addl $diff,$tick,$tick + mov $tick,$diff + stl_c $tick,0($out) + stl $diff,0($out) + + subl $max,1,$max + beq $max,.Ldone2 + + rpcc $tick + subq $tick,$lasttick,$diff + mov $tick,$lasttick + subq $lastdiff,$diff,$tick + mov $diff,$lastdiff + cmovne $tick,1,$tick + subl $cnt,$tick,$cnt + s4addq $tick,$out,$out + bne $cnt,.Loop2 + +.Ldone2: + subl $v0,$cnt,$v0 + ret ($ra) +.end OPENSSL_instrument_bus2 +___ +} + +close STDOUT;