diff options
author | Carol Eidt <carol.eidt@microsoft.com> | 2018-01-19 15:17:18 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-19 15:17:18 -0800 |
commit | 5fa59e3919366b35ea99a6268197f8d23140f38f (patch) | |
tree | 7e94e48edd1a564543257476c498c4228e0d36fe /src | |
parent | 48ee74a9e7990f1ca535a58af18dd42c62c384c7 (diff) | |
parent | 37f018815bdc8bac0680eb8fe0cb082a5d919a2e (diff) | |
download | coreclr-5fa59e3919366b35ea99a6268197f8d23140f38f.tar.gz coreclr-5fa59e3919366b35ea99a6268197f8d23140f38f.tar.bz2 coreclr-5fa59e3919366b35ea99a6268197f8d23140f38f.zip |
Merge pull request #15933 from sdmaclea/PR-ARM64-EMIT-COMPARE-ZERO
[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 4e07087541..46782aefb3 100644 --- a/src/jit/emitarm64.cpp +++ b/src/jit/emitarm64.cpp @@ -4224,6 +4224,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; |