1#! /usr/bin/env perl 2# Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. 3# 4# Licensed under the Apache License 2.0 (the "License"). You may not use 5# this file except in compliance with the License. You can obtain a copy 6# in the file LICENSE in the source distribution or at 7# https://www.openssl.org/source/license.html 8 9 10$output = pop and open STDOUT,">$output"; 11 12print <<'___'; 13.text 14 15.set noat 16 17.globl OPENSSL_cpuid_setup 18.ent OPENSSL_cpuid_setup 19OPENSSL_cpuid_setup: 20 .frame $30,0,$26 21 .prologue 0 22 ret ($26) 23.end OPENSSL_cpuid_setup 24 25.globl OPENSSL_atomic_add 26.ent OPENSSL_atomic_add 27OPENSSL_atomic_add: 28 .frame $30,0,$26 29 .prologue 0 301: ldl_l $0,0($16) 31 addl $0,$17,$1 32 stl_c $1,0($16) 33 beq $1,1b 34 addl $0,$17,$0 35 ret ($26) 36.end OPENSSL_atomic_add 37 38.globl OPENSSL_rdtsc 39.ent OPENSSL_rdtsc 40OPENSSL_rdtsc: 41 .frame $30,0,$26 42 .prologue 0 43 rpcc $0 44 ret ($26) 45.end OPENSSL_rdtsc 46 47.globl OPENSSL_cleanse 48.ent OPENSSL_cleanse 49OPENSSL_cleanse: 50 .frame $30,0,$26 51 .prologue 0 52 beq $17,.Ldone 53 and $16,7,$0 54 bic $17,7,$at 55 beq $at,.Little 56 beq $0,.Laligned 57 58.Little: 59 subq $0,8,$0 60 ldq_u $1,0($16) 61 mov $16,$2 62.Lalign: 63 mskbl $1,$16,$1 64 lda $16,1($16) 65 subq $17,1,$17 66 addq $0,1,$0 67 beq $17,.Lout 68 bne $0,.Lalign 69.Lout: stq_u $1,0($2) 70 beq $17,.Ldone 71 bic $17,7,$at 72 beq $at,.Little 73 74.Laligned: 75 stq $31,0($16) 76 subq $17,8,$17 77 lda $16,8($16) 78 bic $17,7,$at 79 bne $at,.Laligned 80 bne $17,.Little 81.Ldone: ret ($26) 82.end OPENSSL_cleanse 83 84.globl CRYPTO_memcmp 85.ent CRYPTO_memcmp 86CRYPTO_memcmp: 87 .frame $30,0,$26 88 .prologue 0 89 xor $0,$0,$0 90 beq $18,.Lno_data 91 92 xor $1,$1,$1 93 nop 94.Loop_cmp: 95 ldq_u $2,0($16) 96 subq $18,1,$18 97 ldq_u $3,0($17) 98 extbl $2,$16,$2 99 lda $16,1($16) 100 extbl $3,$17,$3 101 lda $17,1($17) 102 xor $3,$2,$2 103 or $2,$0,$0 104 bne $18,.Loop_cmp 105 106 subq $31,$0,$0 107 srl $0,63,$0 108.Lno_data: 109 ret ($26) 110.end CRYPTO_memcmp 111___ 112{ 113my ($out,$cnt,$max)=("\$16","\$17","\$18"); 114my ($tick,$lasttick)=("\$19","\$20"); 115my ($diff,$lastdiff)=("\$21","\$22"); 116my ($v0,$ra,$sp,$zero)=("\$0","\$26","\$30","\$31"); 117 118print <<___; 119.globl OPENSSL_instrument_bus 120.ent OPENSSL_instrument_bus 121OPENSSL_instrument_bus: 122 .frame $sp,0,$ra 123 .prologue 0 124 mov $cnt,$v0 125 126 rpcc $lasttick 127 mov 0,$diff 128 129 ecb ($out) 130 ldl_l $tick,0($out) 131 addl $diff,$tick,$tick 132 mov $tick,$diff 133 stl_c $tick,0($out) 134 stl $diff,0($out) 135 136.Loop: rpcc $tick 137 subq $tick,$lasttick,$diff 138 mov $tick,$lasttick 139 140 ecb ($out) 141 ldl_l $tick,0($out) 142 addl $diff,$tick,$tick 143 mov $tick,$diff 144 stl_c $tick,0($out) 145 stl $diff,0($out) 146 147 subl $cnt,1,$cnt 148 lda $out,4($out) 149 bne $cnt,.Loop 150 151 ret ($ra) 152.end OPENSSL_instrument_bus 153 154.globl OPENSSL_instrument_bus2 155.ent OPENSSL_instrument_bus2 156OPENSSL_instrument_bus2: 157 .frame $sp,0,$ra 158 .prologue 0 159 mov $cnt,$v0 160 161 rpcc $lasttick 162 mov 0,$diff 163 164 ecb ($out) 165 ldl_l $tick,0($out) 166 addl $diff,$tick,$tick 167 mov $tick,$diff 168 stl_c $tick,0($out) 169 stl $diff,0($out) 170 171 rpcc $tick 172 subq $tick,$lasttick,$diff 173 mov $tick,$lasttick 174 mov $diff,$lastdiff 175.Loop2: 176 ecb ($out) 177 ldl_l $tick,0($out) 178 addl $diff,$tick,$tick 179 mov $tick,$diff 180 stl_c $tick,0($out) 181 stl $diff,0($out) 182 183 subl $max,1,$max 184 beq $max,.Ldone2 185 186 rpcc $tick 187 subq $tick,$lasttick,$diff 188 mov $tick,$lasttick 189 subq $lastdiff,$diff,$tick 190 mov $diff,$lastdiff 191 cmovne $tick,1,$tick 192 subl $cnt,$tick,$cnt 193 s4addq $tick,$out,$out 194 bne $cnt,.Loop2 195 196.Ldone2: 197 subl $v0,$cnt,$v0 198 ret ($ra) 199.end OPENSSL_instrument_bus2 200___ 201} 202 203close STDOUT or die "error closing STDOUT: $!"; 204