1#! /usr/bin/env perl 2# Copyright 2008-2018 The OpenSSL Project Authors. All Rights Reserved. 3# 4# Licensed under the Apache License 2.0 (the "License"). You may not use 5# this file except in compliance with the License. You can obtain a copy 6# in the file LICENSE in the source distribution or at 7# https://www.openssl.org/source/license.html 8 9$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 10push(@INC, "${dir}.", "${dir}../crypto/perlasm"); 11require "x86asm.pl"; 12 13require "uplink-common.pl"; 14 15$output = pop and open STDOUT,">$output"; 16 17&asm_init($ARGV[0]); 18 19&external_label("OPENSSL_Uplink"); 20&public_label("OPENSSL_UplinkTable"); 21 22for ($i=1;$i<=$N;$i++) { 23&function_begin_B("_\$lazy${i}"); 24 &lea ("eax",&DWP(&label("OPENSSL_UplinkTable"))); 25 &push ($i); 26 &push ("eax"); 27 &call (&label("OPENSSL_Uplink")); 28 &pop ("eax"); 29 &add ("esp",4); 30 &jmp_ptr(&DWP(4*$i,"eax")); 31&function_end_B("_\$lazy${i}"); 32} 33 34&dataseg(); 35&align(4); 36&set_label("OPENSSL_UplinkTable"); 37&data_word($N); 38for ($i=1;$i<=$N;$i++) { 39&data_word(&label("_\$lazy${i}")); 40} 41&asm_finish(); 42 43close STDOUT; 44