math/big: implement addMulVVW on arm64
math/big: implement addMulVVW on arm64

The lack of proper addMulVVW implementation for arm64 hurts RSA performance.

This assembly implementation is optimized for arm64 based servers.

name                  old time/op    new time/op     delta
pkg:math/big goos:linux goarch:arm64
AddMulVVW/1             55.2ns ± 0%     11.9ns ± 1%    -78.37%  (p=0.000 n=8+10)
AddMulVVW/2             67.0ns ± 0%     11.2ns ± 0%    -83.28%  (p=0.000 n=7+10)
AddMulVVW/3             93.2ns ± 0%     13.2ns ± 0%    -85.84%  (p=0.000 n=10+10)
AddMulVVW/4              126ns ± 0%       13ns ± 1%    -89.82%  (p=0.000 n=10+10)
AddMulVVW/5              151ns ± 0%       17ns ± 0%    -88.87%  (p=0.000 n=10+9)
AddMulVVW/10             323ns ± 0%       25ns ± 0%    -92.20%  (p=0.000 n=10+10)
AddMulVVW/100           3.28µs ± 0%     0.14µs ± 0%    -95.82%  (p=0.000 n=10+10)
AddMulVVW/1000          31.7µs ± 0%      1.3µs ± 0%    -96.00%  (p=0.000 n=10+8)
AddMulVVW/10000          313µs ± 0%       13µs ± 0%    -95.98%  (p=0.000 n=10+10)
AddMulVVW/100000        3.24ms ± 0%     0.13ms ± 1%    -96.13%  (p=0.000 n=9+9)
pkg:crypto/rsa goos:linux goarch:arm64
RSA2048Decrypt          44.7ms ± 0%      4.0ms ± 6%    -91.08%  (p=0.000 n=8+10)
RSA2048Sign             46.3ms ± 0%      5.0ms ± 0%    -89.29%  (p=0.000 n=9+10)
3PrimeRSA2048Decrypt    22.3ms ± 0%      2.4ms ± 0%    -89.26%  (p=0.000 n=10+10)

Change-Id: I295f0bd5c51a4442d02c44ece1f6026d30dff0bc
Reviewed-on: https://go-review.googlesource.com/76270
Reviewed-by: Vlad Krasnov <85d5c8dcb7db39358916efb7e6f840502f547b2c@cloudflare.com>
Reviewed-by: Cherry Zhang <d62e63aa42ce272d7b6a5055d97e942b33a34679@google.com>
Run-TryBot: Vlad Krasnov <85d5c8dcb7db39358916efb7e6f840502f547b2c@cloudflare.com>
TryBot-Result: Gobot Gobot <66cb808b70d30c07676d5e946fee83fd561249e5@golang.org>

josharian/go,cloudflare/go,josharian/go,josharian/go,nawawi/go,CAFxX/go,akutz/go,golang/go,codestation/go,CAFxX/go,Cofyc/go,cloudflare/go,nawawi/go,golang/go,golang/go,golang/go,CAFxX/go,Cofyc/go,golang/go,CAFxX/go,codestation/go,josharian/go,akutz/go,codestation/go,cloudflare/go,akutz/go,nawawi/go,josharian/go,CAFxX/go,Cofyc/go,golang/go,codestation/go,CAFxX/go,Cofyc/go,akutz/go,CAFxX/go,codestation/go,cloudflare/go,codestation/go,nawawi/go,golang/go,cloudflare/go,akutz/go,Cofyc/go,cloudflare/go,akutz/go,Cofyc/go,nawawi/go,josharian/go,nawawi/go,josharian/go,Cofyc/go,nawawi/go,CAFxX/go,nawawi/go,cloudflare/go,cloudflare/go,codestation/go,golang/go,codestation/go,akutz/go,josharian/go,Cofyc/go,akutz/go