Changeset 201651 in webkit


Ignore:
Timestamp:
Jun 3, 2016 11:42:11 AM (8 years ago)
Author:
mark.lam@apple.com
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:
Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r201646 r201651  
     12016-06-03  Mark Lam  <mark.lam@apple.com>
     2
     3        ARMv7 vstm and vldm instructions can only operate on a maximum of 16 registers.
     4        https://bugs.webkit.org/show_bug.cgi?id=158349
     5
     6        Reviewed by Filip Pizlo.
     7
     8        According to the ARM Assembler Reference, the vstm and vldm instructions can only
     9        operate on a maximum of 16 registers.  See
     10        http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s03s02.html
     11        and http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s03s02.html.
     12
     13        The ARMv7 probe code was wrongly using these instructions to store and load all
     14        32 'd' registers.  This is now fixed.
     15
     16        * assembler/MacroAssemblerARMv7.cpp:
     17
    1182016-06-03  Mark Lam  <mark.lam@apple.com>
    219
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp

    r191191 r201651  
    225225
    226226    "add       ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D0_OFFSET) "\n"
    227     "vstmia.64 ip, { d0-d31 }" "\n"
     227    "vstmia.64 ip!, { d0-d15 }" "\n"
     228    "vstmia.64 ip!, { d16-d31 }" "\n"
    228229
    229230    "mov       fp, sp" "\n" // Save the ProbeContext*.
     
    239240
    240241    "add       ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D31_OFFSET + FPREG_SIZE) "\n"
    241     "vldmdb.64 ip!, { d0-d31 }" "\n"
     242    "vldmdb.64 ip!, { d16-d31 }" "\n"
     243    "vldmdb.64 ip!, { d0-d15 }" "\n"
     244
    242245    "add       ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_R11_OFFSET + GPREG_SIZE) "\n"
    243246    "ldmdb     ip, { r0-r11 }" "\n"
Note: See TracChangeset for help on using the changeset viewer.