Added an explicit yield (OP_SLEEP) to QUIC testing for cooperative threading.
[openssl.git] / crypto / aes / asm / aes-sparcv9.pl
index 095711ca710dae03d423063e7a62c8de086bf517..d15640e3d76b12a099a17837300dde4e708d171c 100755 (executable)
@@ -1,9 +1,16 @@
-#!/usr/bin/env perl
+#! /usr/bin/env perl
+# Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (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
+
 #
 # ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
 # project. Rights for redistribution and usage in source and binary
-# forms are granted according to the OpenSSL license.
+# forms are granted according to the License.
 # ====================================================================
 #
 # Version 1.1
 # optimal decrypt procedure]. Compared to GNU C generated code both
 # procedures are more than 60% faster:-)
 
-$bits=32;
-for (@ARGV)    { $bits=64 if (/\-m64/ || /\-xarch\=v9/); }
-if ($bits==64) { $bias=2047; $frame=192; }
-else           { $bias=0;    $frame=112; }
+$output = pop and open STDOUT,">$output";
+
+$frame="STACK_FRAME";
+$bias="STACK_BIAS";
 $locals=16;
 
 $acc0="%l0";
@@ -74,11 +81,16 @@ sub _data_word()
     while(defined($i=shift)) { $code.=sprintf"\t.long\t0x%08x,0x%08x\n",$i,$i; }
 }
 
-$code.=<<___ if ($bits==64);
+$code.=<<___;
+#ifndef __ASSEMBLER__
+# define __ASSEMBLER__ 1
+#endif
+#include "crypto/sparc_arch.h"
+
+#ifdef  __arch64__
 .register      %g2,#scratch
 .register      %g3,#scratch
-___
-$code.=<<___;
+#endif
 .section       ".text",#alloc,#execinstr
 
 .align 256
@@ -522,10 +534,10 @@ AES_encrypt:
        ld      [%i0+8],%o2
        ld      [%i0+12],%o3
 
+1:     call    .+8
+       add     %o7,AES_Te-1b,%o4
+       call    _sparcv9_AES_encrypt
        mov     %i2,%o5
-       nop
-1:     call    _sparcv9_AES_encrypt
-       sub     %o7,1b-AES_Te,%o4
 
        st      %o0,[%i1+0]
        st      %o1,[%i1+4]
@@ -582,10 +594,10 @@ AES_encrypt:
        or      %l7,%l6,%l6
        or      %l4,%l6,%o3
 
+1:     call    .+8
+       add     %o7,AES_Te-1b,%o4
+       call    _sparcv9_AES_encrypt
        mov     %i2,%o5
-       nop
-1:     call    _sparcv9_AES_encrypt
-       sub     %o7,1b-AES_Te,%o4
 
        srl     %o0,24,%l0
        srl     %o0,16,%l1
@@ -1068,10 +1080,10 @@ AES_decrypt:
        ld      [%i0+8],%o2
        ld      [%i0+12],%o3
 
+1:     call    .+8
+       add     %o7,AES_Td-1b,%o4
+       call    _sparcv9_AES_decrypt
        mov     %i2,%o5
-       nop
-1:     call    _sparcv9_AES_decrypt
-       sub     %o7,1b-AES_Td,%o4
 
        st      %o0,[%i1+0]
        st      %o1,[%i1+4]
@@ -1128,10 +1140,10 @@ AES_decrypt:
        or      %l7,%l6,%l6
        or      %l4,%l6,%o3
 
+1:     call    .+8
+       add     %o7,AES_Td-1b,%o4
+       call    _sparcv9_AES_decrypt
        mov     %i2,%o5
-       nop
-1:     call    _sparcv9_AES_decrypt
-       sub     %o7,1b-AES_Td,%o4
 
        srl     %o0,24,%l0
        srl     %o0,16,%l1
@@ -1176,6 +1188,7 @@ ___
 # As UltraSPARC T1, a.k.a. Niagara, has shared FPU, FP nops can have
 # undesired effect, so just omit them and sacrifice some portion of
 # percent in performance...
-$code =~ s/fmovs.*$//gem;
+$code =~ s/fmovs.*$//gm;
 
 print $code;
+close STDOUT or die "error closing STDOUT: $!";        # ensure flush