Index: openssl/ms/uplink-x86.pl |
=================================================================== |
--- openssl/ms/uplink-x86.pl (revision 0) |
+++ openssl/ms/uplink-x86.pl (revision 0) |
@@ -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(); |