| #!/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(); |