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