Add the ability to change sp and pc to the ARM64 JIT probe.
authormark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 26 Jul 2017 18:31:02 +0000 (18:31 +0000)
committermark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 26 Jul 2017 18:31:02 +0000 (18:31 +0000)
commit9d9c5b2094161c9d39b89059b4caa8e4dcce1427
tree30ee7a34efa6d9afb7554d1af33952f8dae861b0
parent2378963f31fa178bf4f3d7e79357e82d19148923
Add the ability to change sp and pc to the ARM64 JIT probe.
https://bugs.webkit.org/show_bug.cgi?id=174697
<rdar://problem/33436965>

Reviewed by JF Bastien.

This patch implements the following:

1. The ARM64 probe now supports modifying the pc and sp.

   However, lr is not preserved when modifying the pc because it is used as the
   scratch register for the indirect jump. Hence, the probe handler function
   may not modify both lr and pc in the same probe invocation.

2. Fix probe tests to use bitwise comparison when comparing double register
   values. Otherwise, equivalent nan values will be interpreted as not equivalent.

3. Change the minimum offset increment in testProbeModifiesStackPointer to be
   16 bytes for ARM64.  This is because the ARM64 probe now uses the ldp and stp
   instructions which require 16 byte alignment for their memory access.

* assembler/MacroAssemblerARM64.cpp:
(JSC::arm64ProbeError):
(JSC::MacroAssembler::probe):
(JSC::arm64ProbeTrampoline): Deleted.
* assembler/testmasm.cpp:
(JSC::isSpecialGPR):
(JSC::testProbeReadsArgumentRegisters):
(JSC::testProbeWritesArgumentRegisters):
(JSC::testProbePreservesGPRS):
(JSC::testProbeModifiesStackPointer):
(JSC::testProbeModifiesStackPointerToInsideProbeContextOnStack):
(JSC::testProbeModifiesStackPointerToNBytesBelowSP):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@219951 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/assembler/MacroAssemblerARM64.cpp
Source/JavaScriptCore/assembler/testmasm.cpp