poly1305/asm/poly1305-x86_64.pl: switch to vpermdd in table expansion.
[openssl.git] / crypto / des / asm / des-586.pl
index 147d2ab816b441e8883705f6d6a31afcaeb120a6..d45102c1da5aadfb30623c3c4ecb54d8df9e665e 100644 (file)
@@ -1,10 +1,16 @@
-#!/usr/local/bin/perl
+#! /usr/bin/env perl
+# Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
 #
+# Licensed under the OpenSSL license (the "License").  You may not use
+# this file except in compliance with the License.  You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
 # The inner loop instruction sequence and the IP/FP modifications are from
 # Svend Olaf Mikkelsen <svolaf@inet.uni-c.dk>
-#
 
-push(@INC,"perlasm","../../perlasm");
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+push(@INC,"${dir}","${dir}../../perlasm");
 require "x86asm.pl";
 require "cbc.pl";
 require "desboth.pl";
@@ -14,6 +20,9 @@ require "desboth.pl";
 # format.
 #
 
+$output=pop;
+open STDOUT,">$output";
+
 &asm_init($ARGV[0],"des-586.pl");
 
 $L="edi";
@@ -23,7 +32,9 @@ $small_footprint=1 if (grep(/\-DOPENSSL_SMALL_FOOTPRINT/,@ARGV));
 # one can discuss setting this variable to 1 unconditionally, as
 # the folded loop is only 3% slower than unrolled, but >7 times smaller
 
-&external_label("DES_SPtrans");
+&public_label("DES_SPtrans");
+&static_label("des_sptrans");
+
 &DES_encrypt_internal();
 &DES_decrypt_internal();
 &DES_encrypt("DES_encrypt1",1);
@@ -36,6 +47,8 @@ $small_footprint=1 if (grep(/\-DOPENSSL_SMALL_FOOTPRINT/,@ARGV));
 
 &asm_finish();
 
+close STDOUT;
+
 sub DES_encrypt_internal()
        {
        &function_begin_B("_x86_DES_encrypt");
@@ -72,7 +85,7 @@ sub DES_encrypt_internal()
 
        &function_end_B("_x86_DES_encrypt");
        }
-       
+
 sub DES_decrypt_internal()
        {
        &function_begin_B("_x86_DES_decrypt");
@@ -109,12 +122,12 @@ sub DES_decrypt_internal()
 
        &function_end_B("_x86_DES_decrypt");
        }
-       
+
 sub DES_encrypt
        {
        local($name,$do_ip)=@_;
 
-       &function_begin_B($name,"EXTRN   _DES_SPtrans:DWORD");
+       &function_begin_B($name);
 
        &push("esi");
        &push("edi");
@@ -153,7 +166,10 @@ sub DES_encrypt
                }
 
        # PIC-ification:-)
-       &picmeup($trans,"DES_SPtrans");
+       &call   (&label("pic_point"));
+       &set_label("pic_point");
+       &blindpop($trans);
+       &lea    ($trans,&DWP(&label("des_sptrans")."-".&label("pic_point"),$trans));
 
        &mov(   "ecx",  &wparam(1)      );
 
@@ -267,7 +283,7 @@ sub IP_new
        &R_PERM_OP($l,$tt,$r,14,"0x33333333",$r);
        &R_PERM_OP($tt,$r,$l,22,"0x03fc03fc",$r);
        &R_PERM_OP($l,$r,$tt, 9,"0xaaaaaaaa",$r);
-       
+
        if ($lr != 3)
                {
                if (($lr-3) < 0)
@@ -309,8 +325,8 @@ sub FP_new
 
 sub DES_SPtrans
        {
-       &public_label("DES_SPtrans");
        &set_label("DES_SPtrans",64);
+       &set_label("des_sptrans");
        &data_word(0x02080800, 0x00080000, 0x02000002, 0x02080802);
        &data_word(0x02000000, 0x00080802, 0x00080002, 0x02000002);
        &data_word(0x00080802, 0x02080800, 0x02080000, 0x00000802);