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