uplink-x86.pl revision 1.1.1.1
1353944Sdim#!/usr/bin/env perl
2353944Sdim
3353944Sdim$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
4353944Sdimpush(@INC, "${dir}.", "${dir}../crypto/perlasm");
5353944Sdimrequire "x86asm.pl";
6353944Sdim
7353944Sdimrequire "uplink-common.pl";
8353944Sdim
9353944Sdim&asm_init($ARGV[0],"uplink-x86");
10353944Sdim
11353944Sdim&external_label("OPENSSL_Uplink");
12353944Sdim&public_label("OPENSSL_UplinkTable");
13353944Sdim
14353944Sdimfor ($i=1;$i<=$N;$i++) {
15353944Sdim&function_begin_B("_\$lazy${i}");
16353944Sdim	&lea	("eax",&DWP(&label("OPENSSL_UplinkTable")));
17353944Sdim	&push	($i);
18353944Sdim	&push	("eax");
19353944Sdim	&call	(&label("OPENSSL_Uplink"));
20353944Sdim	&pop	("eax");
21353944Sdim	&add	("esp",4);
22353944Sdim	&jmp_ptr(&DWP(4*$i,"eax"));
23353944Sdim&function_end_B("_\$lazy${i}");
24353944Sdim}
25353944Sdim
26353944Sdim&dataseg();
27353944Sdim&align(4);
28353944Sdim&set_label("OPENSSL_UplinkTable");
29353944Sdim&data_word($N);
30353944Sdimfor ($i=1;$i<=$N;$i++) {
31353944Sdim&data_word(&label("_\$lazy${i}"));
32353944Sdim}
33353944Sdim&asm_finish();
34353944Sdim