1 #! /usr/bin/env perl 2 # Copyright 2008-2016 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 $output = pop and open STDOUT,">$output"; 10 11 $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 12 push(@INC,"${dir}."); 13 14 require "uplink-common.pl"; 15 16 local $V=8; # max number of args uplink functions may accept... 17 my $loc0 = "r".(32+$V); 18 print <<___; 19 .text 20 .global OPENSSL_Uplink# 21 .type OPENSSL_Uplink#,\@function 22 23 ___ 24 for ($i=1;$i<=$N;$i++) { 25 print <<___; 26 .proc lazy$i# 27 lazy$i: 28 .prologue 29 { .mii; .save ar.pfs,$loc0 30 alloc loc0=ar.pfs,$V,3,2,0 31 .save b0,loc1 32 mov loc1=b0 33 addl loc2=\@ltoff(OPENSSL_UplinkTable#),gp };; 34 .body 35 { .mmi; ld8 out0=[loc2] 36 mov out1=$i };; 37 { .mib; add loc2=8*$i,out0 38 br.call.sptk.many b0=OPENSSL_Uplink# };; 39 { .mmi; ld8 r31=[loc2];; 40 ld8 r30=[r31],8 };; 41 { .mii; ld8 gp=[r31] 42 mov b6=r30 43 mov b0=loc1 };; 44 { .mib; mov ar.pfs=loc0 45 br.many b6 };; 46 .endp lazy$i# 47 48 ___ 49 } 50 print <<___; 51 .data 52 .global OPENSSL_UplinkTable# 53 OPENSSL_UplinkTable: data8 $N // amount of following entries 54 ___ 55 for ($i=1;$i<=$N;$i++) { print " data8 \@fptr(lazy$i#)\n"; } 56 print <<___; 57 .size OPENSSL_UplinkTable,.-OPENSSL_UplinkTable# 58 ___ 59 60 close STDOUT; 61