You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.0 KiB
50 lines
1.0 KiB
#!/usr/bin/env perl |
|
|
|
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; |
|
push(@INC,"${dir}."); |
|
|
|
require "uplink-common.pl"; |
|
|
|
local $V=8; # max number of args uplink functions may accept... |
|
my $loc0 = "r".(32+$V); |
|
print <<___; |
|
.text |
|
.global OPENSSL_Uplink# |
|
.type OPENSSL_Uplink#,\@function |
|
|
|
___ |
|
for ($i=1;$i<=$N;$i++) { |
|
print <<___; |
|
.proc lazy$i# |
|
lazy$i: |
|
.prologue |
|
{ .mii; .save ar.pfs,$loc0 |
|
alloc loc0=ar.pfs,$V,3,2,0 |
|
.save b0,loc1 |
|
mov loc1=b0 |
|
addl loc2=\@ltoff(OPENSSL_UplinkTable#),gp };; |
|
.body |
|
{ .mmi; ld8 out0=[loc2] |
|
mov out1=$i };; |
|
{ .mib; add loc2=8*$i,out0 |
|
br.call.sptk.many b0=OPENSSL_Uplink# };; |
|
{ .mmi; ld8 r31=[loc2];; |
|
ld8 r30=[r31],8 };; |
|
{ .mii; ld8 gp=[r31] |
|
mov b6=r30 |
|
mov b0=loc1 };; |
|
{ .mib; mov ar.pfs=loc0 |
|
br.many b6 };; |
|
.endp lazy$i# |
|
|
|
___ |
|
} |
|
print <<___; |
|
.data |
|
.global OPENSSL_UplinkTable# |
|
OPENSSL_UplinkTable: data8 $N // amount of following entries |
|
___ |
|
for ($i=1;$i<=$N;$i++) { print " data8 \@fptr(lazy$i#)\n"; } |
|
print <<___; |
|
.size OPENSSL_UplinkTable,.-OPENSSL_UplinkTable# |
|
___
|
|
|