[Lldb-commits] [lldb] r223174 - Mark the armv7 q0-q3 and q8-q15 registers as volatile (not callee

Jason Molenda jmolenda at apple.com
Tue Dec 2 15:21:05 PST 2014


Author: jmolenda
Date: Tue Dec  2 17:21:05 2014
New Revision: 223174

URL: http://llvm.org/viewvc/llvm-project?rev=223174&view=rev
Log:
Mark the armv7 q0-q3 and q8-q15 registers as volatile (not callee
preserved) in the ABI.

Realistically lldb isn't able to track register saves of any of
the neon regs right now so we should probably mark all of the 
regs as unavailable when you're not on stack frame 0...

<rdar://problem/19115127> 

Modified:
    lldb/trunk/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp

Modified: lldb/trunk/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp?rev=223174&r1=223173&r2=223174&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp (original)
+++ lldb/trunk/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp Tue Dec  2 17:21:05 2014
@@ -801,6 +801,36 @@ ABIMacOSX_arm::RegisterIsVolatile (const
                     break;
             }
         }
+        else if (name[0] == 'q')
+        {
+            switch (name[1])
+            {
+                case '1':
+                    switch (name[2])
+                    {
+                        case '\0':
+                            return true;  // q1 is volatile
+                        case '0':
+                        case '1':
+                        case '2':
+                        case '3':
+                        case '4':
+                        case '5':
+                            return true; // q10-q15 are volatile
+                        default:
+                            break;
+                    };
+                case '0': 
+                case '2': 
+                case '3': 
+                    return name[2] == '\0'; // q0-q3 are volatile
+                case '8':
+                case '9':
+                    return name[2] == '\0'; // q8-q9 are volatile
+                default:
+                    break;
+            }
+        }
         else if (name[0] == 's' && name[1] == 'p' && name[2] == '\0')
             return true;
     }





More information about the lldb-commits mailing list