Unify all assembler file generators
[openssl.git] / crypto / bn / asm / mips-mont.pl
index 3bccdf6931deb9affb00c0ed963e4969d299c0f9..c0b46291842cee8d0425694117f5859259ebe455 100644 (file)
@@ -1,4 +1,11 @@
-#!/usr/bin/env perl
+#! /usr/bin/env perl
+# Copyright 2010-2018 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@openssl.org> for the OpenSSL
 # ($t0,$t1,$t2,$t3,$t8,$t9)=map("\$$_",(12..15,24,25));
 # ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
 # ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
-#
-$flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64
+
+# $output is the last argument if it looks like a file (it has an extension)
+# $flavour is the first argument if it doesn't look like a file
+$output = $#ARGV >= 0 && $ARGV[$#ARGV] =~ m|\.\w+$| ? pop : undef;
+# supported flavours are o32,n32,64,nubi32,nubi64, default is o32
+$flavour = $#ARGV >= 0 && $ARGV[0] !~ m|\.| ? shift : "o32";
 
 if ($flavour =~ /64|n32/i) {
-       $PTR_ADD="dadd";        # incidentally works even on n32
-       $PTR_SUB="dsub";        # incidentally works even on n32
+       $PTR_ADD="daddu";       # incidentally works even on n32
+       $PTR_SUB="dsubu";       # incidentally works even on n32
        $REG_S="sd";
        $REG_L="ld";
        $SZREG=8;
 } else {
-       $PTR_ADD="add";
-       $PTR_SUB="sub";
+       $PTR_ADD="addu";
+       $PTR_SUB="subu";
        $REG_S="sw";
        $REG_L="lw";
        $SZREG=4;
@@ -67,8 +78,7 @@ $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? 0x00fff000 : 0x00ff0000;
 #
 ######################################################################
 
-while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
-open STDOUT,">$output";
+$output and open STDOUT,">$output";
 
 if ($flavour =~ /64|n32/i) {
        $LD="ld";
@@ -114,6 +124,8 @@ $m1=$s11;
 $FRAMESIZE=14;
 
 $code=<<___;
+#include "mips_arch.h"
+
 .text
 
 .set   noat
@@ -176,27 +188,27 @@ $code.=<<___;
        $PTR_SUB $sp,$num
        and     $sp,$at
 
-       $MULTU  $aj,$bi
-       $LD     $alo,$BNSZ($ap)
-       $LD     $nlo,$BNSZ($np)
-       mflo    $lo0
-       mfhi    $hi0
-       $MULTU  $lo0,$n0
-       mflo    $m1
-
-       $MULTU  $alo,$bi
-       mflo    $alo
-       mfhi    $ahi
-
-       $MULTU  $nj,$m1
-       mflo    $lo1
-       mfhi    $hi1
-       $MULTU  $nlo,$m1
+       $MULTU  ($aj,$bi)
+       $LD     $ahi,$BNSZ($ap)
+       $LD     $nhi,$BNSZ($np)
+       mflo    ($lo0,$aj,$bi)
+       mfhi    ($hi0,$aj,$bi)
+       $MULTU  ($lo0,$n0)
+       mflo    ($m1,$lo0,$n0)
+
+       $MULTU  ($ahi,$bi)
+       mflo    ($alo,$ahi,$bi)
+       mfhi    ($ahi,$ahi,$bi)
+
+       $MULTU  ($nj,$m1)
+       mflo    ($lo1,$nj,$m1)
+       mfhi    ($hi1,$nj,$m1)
+       $MULTU  ($nhi,$m1)
        $ADDU   $lo1,$lo0
        sltu    $at,$lo1,$lo0
        $ADDU   $hi1,$at
-       mflo    $nlo
-       mfhi    $nhi
+       mflo    ($nlo,$nhi,$m1)
+       mfhi    ($nhi,$nhi,$m1)
 
        move    $tp,$sp
        li      $j,2*$BNSZ
@@ -208,25 +220,25 @@ $code.=<<___;
        $LD     $aj,($aj)
        $LD     $nj,($nj)
 
-       $MULTU  $aj,$bi
+       $MULTU  ($aj,$bi)
        $ADDU   $lo0,$alo,$hi0
        $ADDU   $lo1,$nlo,$hi1
        sltu    $at,$lo0,$hi0
        sltu    $t0,$lo1,$hi1
        $ADDU   $hi0,$ahi,$at
        $ADDU   $hi1,$nhi,$t0
-       mflo    $alo
-       mfhi    $ahi
+       mflo    ($alo,$aj,$bi)
+       mfhi    ($ahi,$aj,$bi)
 
        $ADDU   $lo1,$lo0
        sltu    $at,$lo1,$lo0
-       $MULTU  $nj,$m1
+       $MULTU  ($nj,$m1)
        $ADDU   $hi1,$at
        addu    $j,$BNSZ
        $ST     $lo1,($tp)
        sltu    $t0,$j,$num
-       mflo    $nlo
-       mfhi    $nhi
+       mflo    ($nlo,$nj,$m1)
+       mfhi    ($nhi,$nj,$m1)
 
        bnez    $t0,.L1st
        $PTR_ADD $tp,$BNSZ
@@ -256,34 +268,34 @@ $code.=<<___;
        $PTR_ADD $bi,$bp,$i
        $LD     $bi,($bi)
        $LD     $aj,($ap)
-       $LD     $alo,$BNSZ($ap)
+       $LD     $ahi,$BNSZ($ap)
        $LD     $tj,($sp)
 
-       $MULTU  $aj,$bi
+       $MULTU  ($aj,$bi)
        $LD     $nj,($np)
-       $LD     $nlo,$BNSZ($np)
-       mflo    $lo0
-       mfhi    $hi0
+       $LD     $nhi,$BNSZ($np)
+       mflo    ($lo0,$aj,$bi)
+       mfhi    ($hi0,$aj,$bi)
        $ADDU   $lo0,$tj
-       $MULTU  $lo0,$n0
+       $MULTU  ($lo0,$n0)
        sltu    $at,$lo0,$tj
        $ADDU   $hi0,$at
-       mflo    $m1
+       mflo    ($m1,$lo0,$n0)
 
-       $MULTU  $alo,$bi
-       mflo    $alo
-       mfhi    $ahi
+       $MULTU  ($ahi,$bi)
+       mflo    ($alo,$ahi,$bi)
+       mfhi    ($ahi,$ahi,$bi)
 
-       $MULTU  $nj,$m1
-       mflo    $lo1
-       mfhi    $hi1
+       $MULTU  ($nj,$m1)
+       mflo    ($lo1,$nj,$m1)
+       mfhi    ($hi1,$nj,$m1)
 
-       $MULTU  $nlo,$m1
+       $MULTU  ($nhi,$m1)
        $ADDU   $lo1,$lo0
        sltu    $at,$lo1,$lo0
        $ADDU   $hi1,$at
-       mflo    $nlo
-       mfhi    $nhi
+       mflo    ($nlo,$nhi,$m1)
+       mfhi    ($nhi,$nhi,$m1)
 
        move    $tp,$sp
        li      $j,2*$BNSZ
@@ -296,19 +308,19 @@ $code.=<<___;
        $LD     $aj,($aj)
        $LD     $nj,($nj)
 
-       $MULTU  $aj,$bi
+       $MULTU  ($aj,$bi)
        $ADDU   $lo0,$alo,$hi0
        $ADDU   $lo1,$nlo,$hi1
        sltu    $at,$lo0,$hi0
        sltu    $t0,$lo1,$hi1
        $ADDU   $hi0,$ahi,$at
        $ADDU   $hi1,$nhi,$t0
-       mflo    $alo
-       mfhi    $ahi
+       mflo    ($alo,$aj,$bi)
+       mfhi    ($ahi,$aj,$bi)
 
        $ADDU   $lo0,$tj
        addu    $j,$BNSZ
-       $MULTU  $nj,$m1
+       $MULTU  ($nj,$m1)
        sltu    $at,$lo0,$tj
        $ADDU   $lo1,$lo0
        $ADDU   $hi0,$at
@@ -316,8 +328,8 @@ $code.=<<___;
        $LD     $tj,2*$BNSZ($tp)
        $ADDU   $hi1,$t0
        sltu    $at,$j,$num
-       mflo    $nlo
-       mfhi    $nhi
+       mflo    ($nlo,$nj,$m1)
+       mfhi    ($nhi,$nj,$m1)
        $ST     $lo1,($tp)
        bnez    $at,.Linner
        $PTR_ADD $tp,$BNSZ
@@ -377,15 +389,13 @@ $code.=<<___;
        $PTR_SUB $rp,$num       # restore rp
        not     $hi1,$hi0
 
-       and     $ap,$hi0,$sp
-       and     $bp,$hi1,$rp
-       or      $ap,$ap,$bp     # ap=borrow?tp:rp
-
-.align 4
-.Lcopy:        $LD     $aj,($ap)
-       $PTR_ADD $ap,$BNSZ
+.Lcopy:        $LD     $nj,($tp)       # conditional move
+       $LD     $aj,($rp)
        $ST     $zero,($tp)
        $PTR_ADD $tp,$BNSZ
+       and     $nj,$hi0
+       and     $aj,$hi1
+       or      $aj,$nj
        sltu    $at,$tp,$tj
        $ST     $aj,($rp)
        bnez    $at,.Lcopy