1#! /usr/bin/env perl 2# Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. 3# 4# Licensed under the OpenSSL license (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; 11open STDOUT,">$output"; 12 13print <<'___'; 14.text 15 16.set noat 17 18.globl OPENSSL_cpuid_setup 19.ent OPENSSL_cpuid_setup 20OPENSSL_cpuid_setup: 21 .frame $30,0,$26 22 .prologue 0 23 ret ($26) 24.end OPENSSL_cpuid_setup 25 26.globl OPENSSL_wipe_cpu 27.ent OPENSSL_wipe_cpu 28OPENSSL_wipe_cpu: 29 .frame $30,0,$26 30 .prologue 0 31 clr $1 32 clr $2 33 clr $3 34 clr $4 35 clr $5 36 clr $6 37 clr $7 38 clr $8 39 clr $16 40 clr $17 41 clr $18 42 clr $19 43 clr $20 44 clr $21 45 clr $22 46 clr $23 47 clr $24 48 clr $25 49 clr $27 50 clr $at 51 clr $29 52 fclr $f0 53 fclr $f1 54 fclr $f10 55 fclr $f11 56 fclr $f12 57 fclr $f13 58 fclr $f14 59 fclr $f15 60 fclr $f16 61 fclr $f17 62 fclr $f18 63 fclr $f19 64 fclr $f20 65 fclr $f21 66 fclr $f22 67 fclr $f23 68 fclr $f24 69 fclr $f25 70 fclr $f26 71 fclr $f27 72 fclr $f28 73 fclr $f29 74 fclr $f30 75 mov $sp,$0 76 ret ($26) 77.end OPENSSL_wipe_cpu 78 79.globl OPENSSL_atomic_add 80.ent OPENSSL_atomic_add 81OPENSSL_atomic_add: 82 .frame $30,0,$26 83 .prologue 0 841: ldl_l $0,0($16) 85 addl $0,$17,$1 86 stl_c $1,0($16) 87 beq $1,1b 88 addl $0,$17,$0 89 ret ($26) 90.end OPENSSL_atomic_add 91 92.globl OPENSSL_rdtsc 93.ent OPENSSL_rdtsc 94OPENSSL_rdtsc: 95 .frame $30,0,$26 96 .prologue 0 97 rpcc $0 98 ret ($26) 99.end OPENSSL_rdtsc 100 101.globl OPENSSL_cleanse 102.ent OPENSSL_cleanse 103OPENSSL_cleanse: 104 .frame $30,0,$26 105 .prologue 0 106 beq $17,.Ldone 107 and $16,7,$0 108 bic $17,7,$at 109 beq $at,.Little 110 beq $0,.Laligned 111 112.Little: 113 subq $0,8,$0 114 ldq_u $1,0($16) 115 mov $16,$2 116.Lalign: 117 mskbl $1,$16,$1 118 lda $16,1($16) 119 subq $17,1,$17 120 addq $0,1,$0 121 beq $17,.Lout 122 bne $0,.Lalign 123.Lout: stq_u $1,0($2) 124 beq $17,.Ldone 125 bic $17,7,$at 126 beq $at,.Little 127 128.Laligned: 129 stq $31,0($16) 130 subq $17,8,$17 131 lda $16,8($16) 132 bic $17,7,$at 133 bne $at,.Laligned 134 bne $17,.Little 135.Ldone: ret ($26) 136.end OPENSSL_cleanse 137 138.globl CRYPTO_memcmp 139.ent CRYPTO_memcmp 140CRYPTO_memcmp: 141 .frame $30,0,$26 142 .prologue 0 143 xor $0,$0,$0 144 beq $18,.Lno_data 145 146 xor $1,$1,$1 147 nop 148.Loop_cmp: 149 ldq_u $2,0($16) 150 subq $18,1,$18 151 ldq_u $3,0($17) 152 extbl $2,$16,$2 153 lda $16,1($16) 154 extbl $3,$17,$3 155 lda $17,1($17) 156 xor $3,$2,$2 157 or $2,$0,$0 158 bne $18,.Loop_cmp 159 160 subq $31,$0,$0 161 srl $0,63,$0 162.Lno_data: 163 ret ($26) 164.end CRYPTO_memcmp 165___ 166{ 167my ($out,$cnt,$max)=("\$16","\$17","\$18"); 168my ($tick,$lasttick)=("\$19","\$20"); 169my ($diff,$lastdiff)=("\$21","\$22"); 170my ($v0,$ra,$sp,$zero)=("\$0","\$26","\$30","\$31"); 171 172print <<___; 173.globl OPENSSL_instrument_bus 174.ent OPENSSL_instrument_bus 175OPENSSL_instrument_bus: 176 .frame $sp,0,$ra 177 .prologue 0 178 mov $cnt,$v0 179 180 rpcc $lasttick 181 mov 0,$diff 182 183 ecb ($out) 184 ldl_l $tick,0($out) 185 addl $diff,$tick,$tick 186 mov $tick,$diff 187 stl_c $tick,0($out) 188 stl $diff,0($out) 189 190.Loop: rpcc $tick 191 subq $tick,$lasttick,$diff 192 mov $tick,$lasttick 193 194 ecb ($out) 195 ldl_l $tick,0($out) 196 addl $diff,$tick,$tick 197 mov $tick,$diff 198 stl_c $tick,0($out) 199 stl $diff,0($out) 200 201 subl $cnt,1,$cnt 202 lda $out,4($out) 203 bne $cnt,.Loop 204 205 ret ($ra) 206.end OPENSSL_instrument_bus 207 208.globl OPENSSL_instrument_bus2 209.ent OPENSSL_instrument_bus2 210OPENSSL_instrument_bus2: 211 .frame $sp,0,$ra 212 .prologue 0 213 mov $cnt,$v0 214 215 rpcc $lasttick 216 mov 0,$diff 217 218 ecb ($out) 219 ldl_l $tick,0($out) 220 addl $diff,$tick,$tick 221 mov $tick,$diff 222 stl_c $tick,0($out) 223 stl $diff,0($out) 224 225 rpcc $tick 226 subq $tick,$lasttick,$diff 227 mov $tick,$lasttick 228 mov $diff,$lastdiff 229.Loop2: 230 ecb ($out) 231 ldl_l $tick,0($out) 232 addl $diff,$tick,$tick 233 mov $tick,$diff 234 stl_c $tick,0($out) 235 stl $diff,0($out) 236 237 subl $max,1,$max 238 beq $max,.Ldone2 239 240 rpcc $tick 241 subq $tick,$lasttick,$diff 242 mov $tick,$lasttick 243 subq $lastdiff,$diff,$tick 244 mov $diff,$lastdiff 245 cmovne $tick,1,$tick 246 subl $cnt,$tick,$cnt 247 s4addq $tick,$out,$out 248 bne $cnt,.Loop2 249 250.Ldone2: 251 subl $v0,$cnt,$v0 252 ret ($ra) 253.end OPENSSL_instrument_bus2 254___ 255} 256 257close STDOUT or die "error closing STDOUT: $!"; 258