diff options
author | Steve MacLean <sdmaclea.qdt@qualcommdatacenter.com> | 2018-01-18 16:45:25 -0500 |
---|---|---|
committer | Steve MacLean <sdmaclea.qdt@qualcommdatacenter.com> | 2018-01-19 14:20:15 -0500 |
commit | 37f018815bdc8bac0680eb8fe0cb082a5d919a2e (patch) | |
tree | 18519d95e3032746cf6b260826627003f1ce1b9c /src | |
parent | f1c732878777092468ef8da8cd61aa8ec0922948 (diff) | |
download | coreclr-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.cpp | 52 |
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; |