8135231: aarch64: add support for vectorizing double precision sqrt

Reviewed-by: roland, aph
This commit is contained in:
Ed Nevill 2015-09-23 12:39:30 -04:00
parent 660dad780b
commit cb8cff7e6e
3 changed files with 19 additions and 1 deletions

View File

@ -15209,6 +15209,20 @@ instruct vdiv2D(vecX dst, vecX src1, vecX src2)
ins_pipe(pipe_class_default);
%}
// --------------------------------- SQRT -------------------------------------
instruct vsqrt2D(vecX dst, vecX src)
%{
predicate(n->as_Vector()->length() == 2);
match(Set dst (SqrtVD src));
format %{ "fsqrt $dst, $src\t# vector (2D)" %}
ins_encode %{
__ fsqrt(as_FloatRegister($dst$$reg), __ T2D,
as_FloatRegister($src$$reg));
%}
ins_pipe(pipe_class_default);
%}
// --------------------------------- AND --------------------------------------
instruct vand8B(vecD dst, vecD src1, vecD src2)

View File

@ -2311,6 +2311,10 @@ public:
#define MSG "invalid arrangement"
#define ASSERTION (T == T2S || T == T4S || T == T2D)
INSN(fsqrt, 1, 0b11111);
#undef ASSERTION
#define ASSERTION (T == T8B || T == T16B || T == T4H || T == T8H || T == T2S || T == T4S)
INSN(rev64, 0, 0b00000);
#undef ASSERTION

View File

@ -26,7 +26,7 @@
* @test
* @bug 8135028
* @summary Add C2 x86 Superword support for scalar sum reduction optimizations : double sqrt test
* @requires os.arch=="x86" | os.arch=="amd64" | os.arch=="x86_64"
* @requires os.arch=="x86" | os.arch=="amd64" | os.arch=="x86_64" | os.arch=="aarch64"
*
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=2 -XX:CompileThresholdScaling=0.1 SumRedSqrt_Double
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-SuperWordReductions -XX:LoopUnrollLimit=250 -XX:LoopMaxUnroll=2 -XX:CompileThresholdScaling=0.1 SumRedSqrt_Double