Title: [201651] trunk/Source/_javascript_Core
Revision
201651
Author
[email protected]
Date
2016-06-03 11:42:11 -0700 (Fri, 03 Jun 2016)

Log Message

ARMv7 vstm and vldm instructions can only operate on a maximum of 16 registers.
https://bugs.webkit.org/show_bug.cgi?id=158349

Reviewed by Filip Pizlo.

According to the ARM Assembler Reference, the vstm and vldm instructions can only
operate on a maximum of 16 registers.  See
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s03s02.html
and http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s03s02.html.

The ARMv7 probe code was wrongly using these instructions to store and load all
32 'd' registers.  This is now fixed.

* assembler/MacroAssemblerARMv7.cpp:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (201650 => 201651)


--- trunk/Source/_javascript_Core/ChangeLog	2016-06-03 18:36:13 UTC (rev 201650)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-06-03 18:42:11 UTC (rev 201651)
@@ -1,5 +1,22 @@
 2016-06-03  Mark Lam  <[email protected]>
 
+        ARMv7 vstm and vldm instructions can only operate on a maximum of 16 registers.
+        https://bugs.webkit.org/show_bug.cgi?id=158349
+
+        Reviewed by Filip Pizlo.
+
+        According to the ARM Assembler Reference, the vstm and vldm instructions can only
+        operate on a maximum of 16 registers.  See
+        http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s03s02.html
+        and http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s03s02.html.
+
+        The ARMv7 probe code was wrongly using these instructions to store and load all
+        32 'd' registers.  This is now fixed.
+
+        * assembler/MacroAssemblerARMv7.cpp:
+
+2016-06-03  Mark Lam  <[email protected]>
+
         Gardening: CLOOP build fix (needs a #include).
 
         Not reviewed.

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.cpp (201650 => 201651)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.cpp	2016-06-03 18:36:13 UTC (rev 201650)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.cpp	2016-06-03 18:42:11 UTC (rev 201651)
@@ -224,7 +224,8 @@
     "ldr       lr, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_PC_OFFSET) "]" "\n"
 
     "add       ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D0_OFFSET) "\n"
-    "vstmia.64 ip, { d0-d31 }" "\n"
+    "vstmia.64 ip!, { d0-d15 }" "\n"
+    "vstmia.64 ip!, { d16-d31 }" "\n"
 
     "mov       fp, sp" "\n" // Save the ProbeContext*.
 
@@ -238,7 +239,9 @@
     // out of the ProbeContext before returning.
 
     "add       ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D31_OFFSET + FPREG_SIZE) "\n"
-    "vldmdb.64 ip!, { d0-d31 }" "\n"
+    "vldmdb.64 ip!, { d16-d31 }" "\n"
+    "vldmdb.64 ip!, { d0-d15 }" "\n"
+
     "add       ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_R11_OFFSET + GPREG_SIZE) "\n"
     "ldmdb     ip, { r0-r11 }" "\n"
     "ldr       ip, [sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_FPSCR_OFFSET) "]" "\n"
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to