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