summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSteve MacLean <sdmaclea.qdt@qualcommdatacenter.com>2018-01-18 16:45:25 -0500
committerSteve MacLean <sdmaclea.qdt@qualcommdatacenter.com>2018-01-19 14:20:15 -0500
commit37f018815bdc8bac0680eb8fe0cb082a5d919a2e (patch)
tree18519d95e3032746cf6b260826627003f1ce1b9c /src
parentf1c732878777092468ef8da8cd61aa8ec0922948 (diff)
downloadcoreclr-37f018815bdc8bac0680eb8fe0cb082a5d919a2e.tar.gz
coreclr-37f018815bdc8bac0680eb8fe0cb082a5d919a2e.tar.bz2
coreclr-37f018815bdc8bac0680eb8fe0cb082a5d919a2e.zip
[Arm64] Add compare vector to zero emitters
Diffstat (limited to 'src')
-rw-r--r--src/jit/emitarm64.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/jit/emitarm64.cpp b/src/jit/emitarm64.cpp
index cd5d0fefd4..d9ce9d9a1e 100644
--- a/src/jit/emitarm64.cpp
+++ b/src/jit/emitarm64.cpp
@@ -4234,6 +4234,58 @@ void emitter::emitIns_R_R(
fmt = IF_DV_2J;
break;
+ case INS_cmeq:
+ case INS_cmge:
+ case INS_cmgt:
+ case INS_cmle:
+ case INS_cmlt:
+ assert(isVectorRegister(reg1));
+ assert(isVectorRegister(reg2));
+
+ if (isValidVectorDatasize(size))
+ {
+ // Vector operation
+ assert(insOptsAnyArrangement(opt));
+ assert(isValidArrangement(size, opt));
+ elemsize = optGetElemsize(opt);
+ fmt = IF_DV_2M;
+ }
+ else
+ {
+ NYI("Untested");
+ // Scalar operation
+ assert(size == EA_8BYTE); // Only Double supported
+ fmt = IF_DV_2L;
+ }
+ break;
+
+ case INS_fcmeq:
+ case INS_fcmge:
+ case INS_fcmgt:
+ case INS_fcmle:
+ case INS_fcmlt:
+ assert(isVectorRegister(reg1));
+ assert(isVectorRegister(reg2));
+
+ if (isValidVectorDatasize(size))
+ {
+ // Vector operation
+ assert(insOptsAnyArrangement(opt));
+ assert(isValidArrangement(size, opt));
+ elemsize = optGetElemsize(opt);
+ assert((elemsize == EA_8BYTE) || (elemsize == EA_4BYTE)); // Only Double/Float supported
+ assert(opt != INS_OPTS_1D); // Reserved encoding
+ fmt = IF_DV_2A;
+ }
+ else
+ {
+ NYI("Untested");
+ // Scalar operation
+ assert((size == EA_8BYTE) || (size == EA_4BYTE)); // Only Double/Float supported
+ fmt = IF_DV_2G;
+ }
+ break;
+
default:
unreached();
break;