Ignore:
Timestamp:
Jun 3, 2016, 11:42:11 AM (9 years ago)
Author:
[email protected]
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:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.