Blame ms/uplink-ia64.pl

Packit c4476c
#! /usr/bin/env perl
Packit c4476c
# Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
#
Packit c4476c
# Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
# this file except in compliance with the License.  You can obtain a copy
Packit c4476c
# in the file LICENSE in the source distribution or at
Packit c4476c
# https://www.openssl.org/source/license.html
Packit c4476c
Packit c4476c
$output = pop;
Packit c4476c
open STDOUT,">$output";
Packit c4476c
Packit c4476c
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
Packit c4476c
push(@INC,"${dir}.");
Packit c4476c
Packit c4476c
require "uplink-common.pl";
Packit c4476c
Packit c4476c
local $V=8;	# max number of args uplink functions may accept...
Packit c4476c
my $loc0 = "r".(32+$V);
Packit c4476c
print <<___;
Packit c4476c
.text
Packit c4476c
.global	OPENSSL_Uplink#
Packit c4476c
.type	OPENSSL_Uplink#,\@function
Packit c4476c
Packit c4476c
___
Packit c4476c
for ($i=1;$i<=$N;$i++) {
Packit c4476c
print <<___;
Packit c4476c
.proc	lazy$i#
Packit c4476c
lazy$i:
Packit c4476c
	.prologue
Packit c4476c
{ .mii;	.save	ar.pfs,$loc0
Packit c4476c
	alloc	loc0=ar.pfs,$V,3,2,0
Packit c4476c
	.save	b0,loc1
Packit c4476c
	mov	loc1=b0
Packit c4476c
	addl	loc2=\@ltoff(OPENSSL_UplinkTable#),gp	};;
Packit c4476c
	.body
Packit c4476c
{ .mmi;	ld8	out0=[loc2]
Packit c4476c
	mov	out1=$i					};;
Packit c4476c
{ .mib;	add	loc2=8*$i,out0
Packit c4476c
	br.call.sptk.many	b0=OPENSSL_Uplink#	};;
Packit c4476c
{ .mmi;	ld8	r31=[loc2];;
Packit c4476c
	ld8	r30=[r31],8				};;
Packit c4476c
{ .mii;	ld8	gp=[r31]
Packit c4476c
	mov	b6=r30
Packit c4476c
	mov	b0=loc1					};;
Packit c4476c
{ .mib;	mov	ar.pfs=loc0
Packit c4476c
	br.many	b6					};;
Packit c4476c
.endp	lazy$i#
Packit c4476c
Packit c4476c
___
Packit c4476c
}
Packit c4476c
print <<___;
Packit c4476c
.data
Packit c4476c
.global OPENSSL_UplinkTable#
Packit c4476c
OPENSSL_UplinkTable:    data8   $N      // amount of following entries
Packit c4476c
___
Packit c4476c
for ($i=1;$i<=$N;$i++) {   print "      data8   \@fptr(lazy$i#)\n";   }
Packit c4476c
print <<___;
Packit c4476c
.size   OPENSSL_UplinkTable,.-OPENSSL_UplinkTable#
Packit c4476c
___
Packit c4476c
Packit c4476c
close STDOUT;