Use constexpr instead of const in symbol definitions that are obviously constexpr.
[WebKit-https.git] / Source / JavaScriptCore / assembler / MacroAssemblerARM64E.h
index 9803bd5..aa97f38 100644 (file)
@@ -39,6 +39,9 @@ using Assembler = TARGET_ASSEMBLER;
 
 class MacroAssemblerARM64E : public MacroAssemblerARM64 {
 public:
+    static constexpr unsigned numberOfPACBits = 25;
+    static constexpr uintptr_t nonPACBitsMask = (1ull << (64 - numberOfPACBits)) - 1;
+
     ALWAYS_INLINE void tagReturnAddress()
     {
         tagPtr(ARM64Registers::sp, ARM64Registers::lr);
@@ -82,7 +85,29 @@ public:
         m_assembler.xpaci(target);
     }
 
-    static const RegisterID InvalidGPR  = static_cast<RegisterID>(-1);
+    ALWAYS_INLINE void tagArrayPtr(RegisterID length, RegisterID target)
+    {
+        m_assembler.pacdb(target, length);
+    }
+
+    ALWAYS_INLINE void untagArrayPtr(RegisterID length, RegisterID target)
+    {
+        m_assembler.autdb(target, length);
+    }
+
+    ALWAYS_INLINE void untagArrayPtr(Address length, RegisterID target)
+    {
+        auto lengthGPR = getCachedDataTempRegisterIDAndInvalidate();
+        load32(length, lengthGPR);
+        m_assembler.autdb(target, lengthGPR);
+    }
+
+    ALWAYS_INLINE void removeArrayPtrTag(RegisterID target)
+    {
+        m_assembler.xpacd(target);
+    }
+
+    static constexpr RegisterID InvalidGPR  = static_cast<RegisterID>(-1);
 
     enum class CallSignatureType {
         CFunctionCall,
@@ -165,27 +190,27 @@ public:
 
     ALWAYS_INLINE Jump jump() { return MacroAssemblerARM64::jump(); }
 
-    void jump(RegisterID target, PtrTag tag)
+    void farJump(RegisterID target, PtrTag tag)
     {
         if (tag == NoPtrTag)
-            return MacroAssemblerARM64::jump(target, tag);
+            return MacroAssemblerARM64::farJump(target, tag);
 
         ASSERT(tag != CFunctionPtrTag);
         RegisterID diversityGPR = getCachedDataTempRegisterIDAndInvalidate();
         move(TrustedImm64(tag), diversityGPR);
-        jump(target, diversityGPR);
+        farJump(target, diversityGPR);
     }
 
-    void jump(RegisterID target, RegisterID tag)
+    void farJump(RegisterID target, RegisterID tag)
     {
         ASSERT(tag != target);
         m_assembler.brab(target, tag);
     }
 
-    void jump(Address address, PtrTag tag)
+    void farJump(Address address, PtrTag tag)
     {
         if (tag == NoPtrTag)
-            return MacroAssemblerARM64::jump(address, tag);
+            return MacroAssemblerARM64::farJump(address, tag);
 
         ASSERT(tag != CFunctionPtrTag);
         RegisterID targetGPR = getCachedDataTempRegisterIDAndInvalidate();
@@ -195,7 +220,7 @@ public:
         m_assembler.brab(targetGPR, diversityGPR);
     }
 
-    void jump(Address address, RegisterID tag)
+    void farJump(Address address, RegisterID tag)
     {
         RegisterID targetGPR = getCachedDataTempRegisterIDAndInvalidate();
         ASSERT(tag != targetGPR);
@@ -203,10 +228,10 @@ public:
         m_assembler.brab(targetGPR, tag);
     }
 
-    void jump(BaseIndex address, PtrTag tag)
+    void farJump(BaseIndex address, PtrTag tag)
     {
         if (tag == NoPtrTag)
-            return MacroAssemblerARM64::jump(address, tag);
+            return MacroAssemblerARM64::farJump(address, tag);
 
         ASSERT(tag != CFunctionPtrTag);
         RegisterID targetGPR = getCachedDataTempRegisterIDAndInvalidate();
@@ -216,7 +241,7 @@ public:
         m_assembler.brab(targetGPR, diversityGPR);
     }
 
-    void jump(BaseIndex address, RegisterID tag)
+    void farJump(BaseIndex address, RegisterID tag)
     {
         RegisterID targetGPR = getCachedDataTempRegisterIDAndInvalidate();
         ASSERT(tag != targetGPR);
@@ -224,10 +249,10 @@ public:
         m_assembler.brab(targetGPR, tag);
     }
 
-    void jump(AbsoluteAddress address, PtrTag tag)
+    void farJump(AbsoluteAddress address, PtrTag tag)
     {
         if (tag == NoPtrTag)
-            return MacroAssemblerARM64::jump(address, tag);
+            return MacroAssemblerARM64::farJump(address, tag);
 
         RegisterID targetGPR = getCachedDataTempRegisterIDAndInvalidate();
         RegisterID diversityGPR = getCachedMemoryTempRegisterIDAndInvalidate();
@@ -237,7 +262,7 @@ public:
         m_assembler.brab(targetGPR, diversityGPR);
     }
 
-    void jump(AbsoluteAddress address, RegisterID tag)
+    void farJump(AbsoluteAddress address, RegisterID tag)
     {
         RegisterID targetGPR = getCachedDataTempRegisterIDAndInvalidate();
         ASSERT(tag != targetGPR);
@@ -245,6 +270,11 @@ public:
         load64(Address(targetGPR), targetGPR);
         m_assembler.brab(targetGPR, tag);
     }
+
+    ALWAYS_INLINE void ret()
+    {
+        m_assembler.retab();
+    }
 };
 
 } // namespace JSC