poly1305/asm/poly1305-mips.pl: adhere to standard frame layout.
[openssl.git] / crypto / poly1305 / asm / poly1305-mips.pl
index cb0531f05e4a8fe6bd507c79a2bf796c1290480c..d2b3e90d93f0456399c267e144667f01256a8cf2 100755 (executable)
@@ -1,4 +1,11 @@
-#!/usr/bin/env perl
+#! /usr/bin/env perl
+# Copyright 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
+
 
 # ====================================================================
 # Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
@@ -163,20 +170,27 @@ $code.=<<___;
 poly1305_blocks:
        .set    noreorder
        dsrl    $len,4                  # number of complete blocks
-       beqz    $len,.Lno_data
+       bnez    $len,poly1305_blocks_internal
        nop
+       jr      $ra
+       nop
+.end   poly1305_blocks
 
-       .frame  $sp,8*8,$ra
+.align 5
+.ent   poly1305_blocks_internal
+poly1305_blocks_internal:
+       .frame  $sp,6*8,$ra
        .mask   $SAVED_REGS_MASK,-8
-       dsub    $sp,8*8
-       sd      $s5,0($sp)
-       sd      $s4,8($sp)
+       .set    noreorder
+       dsub    $sp,6*8
+       sd      $s5,40($sp)
+       sd      $s4,32($sp)
 ___
 $code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
-       sd      $s3,16($sp)
-       sd      $s2,24($sp)
-       sd      $s1,32($sp)
-       sd      $s0,40($sp)
+       sd      $s3,24($sp)
+       sd      $s2,16($sp)
+       sd      $s1,8($sp)
+       sd      $s0,0($sp)
 ___
 $code.=<<___;
        .set    reorder
@@ -304,22 +318,19 @@ $code.=<<___;
        sd      $h2,16($ctx)
 
        .set    noreorder
-       ld      $s5,0($sp)              # epilogue
-       ld      $s4,8($sp)
+       ld      $s5,40($sp)             # epilogue
+       ld      $s4,32($sp)
 ___
 $code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi epilogue
-       ld      $s3,16($sp)
-       ld      $s2,24($sp)
-       ld      $s1,32($sp)
-       ld      $s0,40($sp)
+       ld      $s3,24($sp)
+       ld      $s2,16($sp)
+       ld      $s1,8($sp)
+       ld      $s0,0($sp)
 ___
 $code.=<<___;
-       dadd    $sp,8*8
-
-.Lno_data:
        jr      $ra
-       nop
-.end   poly1305_blocks
+       dadd    $sp,6*8
+.end   poly1305_blocks_internal
 ___
 }
 {