aboutsummaryrefslogtreecommitdiff
path: root/openssl/ms/uplink-x86.pl
diff options
context:
space:
mode:
Diffstat (limited to 'openssl/ms/uplink-x86.pl')
-rw-r--r--openssl/ms/uplink-x86.pl33
1 files changed, 33 insertions, 0 deletions
diff --git a/openssl/ms/uplink-x86.pl b/openssl/ms/uplink-x86.pl
new file mode 100644
index 000000000..0dffc14fc
--- /dev/null
+++ b/openssl/ms/uplink-x86.pl
@@ -0,0 +1,33 @@
+#!/usr/bin/env perl
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+push(@INC, "${dir}.", "${dir}../crypto/perlasm");
+require "x86asm.pl";
+
+require "uplink-common.pl";
+
+&asm_init($ARGV[0],"uplink-x86");
+
+&external_label("OPENSSL_Uplink");
+&public_label("OPENSSL_UplinkTable");
+
+for ($i=1;$i<=$N;$i++) {
+&function_begin_B("_\$lazy${i}");
+ &lea ("eax",&DWP(&label("OPENSSL_UplinkTable")));
+ &push ("eax");
+ &push ($i);
+ &call (&label("OPENSSL_Uplink"));
+ &add ("esp",8);
+ &pop ("eax");
+ &jmp_ptr(&DWP(4*$i,"eax"));
+&function_end_B("_\$lazy${i}");
+}
+
+&dataseg();
+&align(4);
+&set_label("OPENSSL_UplinkTable");
+&data_word($N);
+for ($i=1;$i<=$N;$i++) {
+&data_word(&label("_\$lazy${i}"));
+}
+&asm_finish();