Implement SIMD support for the Vector2/3/4 classes in System.Numerics. (#3765)
authorZoltan Varga <vargaz@gmail.com>
Sun, 20 Nov 2016 15:57:07 +0000 (10:57 -0500)
committerGitHub <noreply@github.com>
Sun, 20 Nov 2016 15:57:07 +0000 (10:57 -0500)
commit98aa3fd560646d0fac8be990deaa8003e677662a
tree5bcca58acd96396ebd1514cbbda67d84cd972353
parent82dccb8444973f2aeab7a8c2568a9aef983fc4f9
Implement SIMD support for the Vector2/3/4 classes in System.Numerics. (#3765)

* [simd] Rename SimdIntrinsc->SimdIntrinsic.

* [ji] Add beginnings of support for the SIMD types in the System.Numerics assembly.

Add intrinsics for the methods marked [JitIntrinsic] in the System.Numerics.Vector2 class. Generalize some code in simd-intrinsic.c
so it works both with System.Numerics and Mono.Simd types.

* [jit] Add support for System.Numerics.Vector4.

* [jit] Add support for System.Numerics.Vector3.

* [jit] Add tests for the JIT intrinsics in System.Numerics.Vectors.

* [jit] Implement System.Numerics.Vector.IsHardwareAccelerated intrinsics.

* [jit] Fix the implementation of System.Numerics.Vector.IsHardwareAccelerated, it should return true.

* [jit] Implement some support for the SIMD intrinsics in System.Numerics.Vector<T>.

* [jit] Disable the usage of the Vector SIMD intrinsics when using r4fp until support for it is implemented.

* [jit] Fix llvm support for the Vector<T> intrinsics.

* [jit] Disable the Vector<T> tests since they don't compile yet.

* [jit] Add an optimization for the typeof(T)==typeof(<concrete type>) construct common in some generics code.

* [simd] Only return true from IsHardwareAccelerated () if simd_supported_versions is non-zero.

* [simd] Add support for add/sub/mul/div operations on Vector<T>.
16 files changed:
mono/metadata/class.c
mono/mini/Makefile.am.in
mono/mini/basic-vectors.cs [new file with mode: 0644]
mono/mini/cfold.c
mono/mini/cpu-amd64.md
mono/mini/ir-emit.h
mono/mini/local-propagation.c
mono/mini/method-to-ir.c
mono/mini/mini-amd64.c
mono/mini/mini-codegen.c
mono/mini/mini-llvm.c
mono/mini/mini-ops.h
mono/mini/mini.c
mono/mini/mini.h
mono/mini/simd-intrinsics.c
mono/mini/simd-methods.h