Revert commit dfca51c6
authorMikhail Skvortcov <m.skvortcov@partner.samsung.com>
Tue, 23 May 2017 12:12:22 +0000 (15:12 +0300)
committerMikhail Skvortcov <m.skvortcov@partner.samsung.com>
Mon, 5 Jun 2017 07:23:47 +0000 (10:23 +0300)
src/jit/emitarm.cpp
src/jit/lsraarmarch.cpp

index 4f3f5e629a64e0da55fbb51874e92087de81a096..89c2df022a48206ed00401e88b193b6c48755a41 100644 (file)
@@ -7575,7 +7575,6 @@ void emitter::emitInsLoadStoreOp(instruction ins, emitAttr attr, regNumber dataR
             {
                 regNumber tmpReg = indir->GetSingleTempReg();
 
-                NYI_IF(varTypeIsFloating(indir), "vldr/vstr encoding is not available.");
                 if (emitIns_valid_imm_for_add(offset, INS_FLAGS_DONT_CARE))
                 {
                     if (lsl > 0)
@@ -7616,54 +7615,18 @@ void emitter::emitInsLoadStoreOp(instruction ins, emitAttr attr, regNumber dataR
                 if (lsl > 0)
                 {
                     // Then load/store dataReg from/to [memBase + index*scale]
-                    if (varTypeIsFloating(indir))
-                    {
-                        // We require a tmpReg to hold memBase + index*scale
-                        regNumber tmpReg = indir->GetSingleTempReg();
-
-                        // add tmpReg, memBase, index << lsl
-                        emitIns_R_R_R_I(INS_add, EA_PTRSIZE, tmpReg, memBase->gtRegNum, index->gtRegNum, lsl,
-                                        INS_FLAGS_DONT_CARE, INS_OPTS_LSL);
-
-                        // vldr/vstr
-                        assert(ins == INS_vldr || ins == INS_vstr);
-                        emitIns_R_R(ins, attr, dataReg, tmpReg);
-                    }
-                    else
-                    {
-                        emitIns_R_R_R_I(ins, attr, dataReg, memBase->gtRegNum, index->gtRegNum, lsl,
-                                        INS_FLAGS_DONT_CARE, INS_OPTS_LSL);
-                    }
+                    emitIns_R_R_R_I(ins, attr, dataReg, memBase->gtRegNum, index->gtRegNum, lsl, INS_FLAGS_DONT_CARE,
+                                    INS_OPTS_LSL);
                 }
                 else // no scale
                 {
                     // Then load/store dataReg from/to [memBase + index]
-                    if (varTypeIsFloating(indir))
-                    {
-                        NYI_ARM("vldr/vstr not test yet!"); // Not tested yet! Please remove it and verify
-                                                            // implemenation.
-
-                        // We require a tmpReg to hold memBase + index*scale
-                        regNumber tmpReg = indir->GetSingleTempReg();
-
-                        // add tmpReg, memBase, index
-                        emitIns_R_R_R(INS_add, EA_PTRSIZE, tmpReg, memBase->gtRegNum, index->gtRegNum,
-                                      INS_FLAGS_DONT_CARE);
-
-                        // vldr/vstr
-                        assert(ins == INS_vldr || ins == INS_vstr);
-                        emitIns_R_R(ins, attr, dataReg, tmpReg);
-                    }
-                    else
-                    {
-                        emitIns_R_R_R(ins, attr, dataReg, memBase->gtRegNum, index->gtRegNum);
-                    }
+                    emitIns_R_R_R(ins, attr, dataReg, memBase->gtRegNum, index->gtRegNum);
                 }
             }
         }
         else // no Index
         {
-            NYI_IF(varTypeIsFloating(indir), "vldr/vstr encoding is not available.");
             if (emitIns_valid_imm_for_ldst_offset(offset, attr))
             {
                 // Then load/store dataReg from/to [memBase + offset]
index d33eb30f8c23e6f07565994997bd296c45dc2f22..e9a69bec8b22f3e3625eb3898fb41e7a35993d84 100644 (file)
@@ -305,14 +305,6 @@ void Lowering::TreeNodeInfoInitIndir(GenTreePtr indirTree)
         // This offset can't be contained in the ldr/str instruction, so we need an internal register
         info->internalIntCount = 1;
     }
-    else if (varTypeIsFloating(indirTree))
-    {
-        // TODO-ARM: We can narrow the condition where an internal register is really required.
-        //           For example, we don't need an internal regsiter where offset can be contained.
-
-        // For float ldr/str(vldr/vstr), we need an internal register to compute address.
-        info->internalIntCount = 1;
-    }
 }
 
 //------------------------------------------------------------------------