]> git.saurik.com Git - apple/objc4.git/blobdiff - runtime/isa.h
objc4-818.2.tar.gz
[apple/objc4.git] / runtime / isa.h
index b4741cb352f7e34f857bf685378e3185cc02cdc8..8b552c2f3737bbfb6272895a80cfac47e8d725dd 100644 (file)
     // uintptr_t extraBytes : 1;  // allocated with extra bytes
 
 # if __arm64__
-#   define ISA_MASK        0x0000000ffffffff8ULL
-#   define ISA_MAGIC_MASK  0x000003f000000001ULL
-#   define ISA_MAGIC_VALUE 0x000001a000000001ULL
-#   define ISA_BITFIELD                                                      \
-      uintptr_t nonpointer        : 1;                                       \
-      uintptr_t has_assoc         : 1;                                       \
-      uintptr_t has_cxx_dtor      : 1;                                       \
-      uintptr_t shiftcls          : 33; /*MACH_VM_MAX_ADDRESS 0x1000000000*/ \
-      uintptr_t magic             : 6;                                       \
-      uintptr_t weakly_referenced : 1;                                       \
-      uintptr_t deallocating      : 1;                                       \
-      uintptr_t has_sidetable_rc  : 1;                                       \
-      uintptr_t extra_rc          : 19
-#   define RC_ONE   (1ULL<<45)
-#   define RC_HALF  (1ULL<<18)
+// ARM64 simulators have a larger address space, so use the ARM64e
+// scheme even when simulators build for ARM64-not-e.
+#   if __has_feature(ptrauth_calls) || TARGET_OS_SIMULATOR
+#     define ISA_MASK        0x007ffffffffffff8ULL
+#     define ISA_MAGIC_MASK  0x0000000000000001ULL
+#     define ISA_MAGIC_VALUE 0x0000000000000001ULL
+#     define ISA_HAS_CXX_DTOR_BIT 0
+#     define ISA_BITFIELD                                                      \
+        uintptr_t nonpointer        : 1;                                       \
+        uintptr_t has_assoc         : 1;                                       \
+        uintptr_t weakly_referenced : 1;                                       \
+        uintptr_t shiftcls_and_sig  : 52;                                      \
+        uintptr_t has_sidetable_rc  : 1;                                       \
+        uintptr_t extra_rc          : 8
+#     define RC_ONE   (1ULL<<56)
+#     define RC_HALF  (1ULL<<7)
+#   else
+#     define ISA_MASK        0x0000000ffffffff8ULL
+#     define ISA_MAGIC_MASK  0x000003f000000001ULL
+#     define ISA_MAGIC_VALUE 0x000001a000000001ULL
+#     define ISA_HAS_CXX_DTOR_BIT 1
+#     define ISA_BITFIELD                                                      \
+        uintptr_t nonpointer        : 1;                                       \
+        uintptr_t has_assoc         : 1;                                       \
+        uintptr_t has_cxx_dtor      : 1;                                       \
+        uintptr_t shiftcls          : 33; /*MACH_VM_MAX_ADDRESS 0x1000000000*/ \
+        uintptr_t magic             : 6;                                       \
+        uintptr_t weakly_referenced : 1;                                       \
+        uintptr_t unused            : 1;                                       \
+        uintptr_t has_sidetable_rc  : 1;                                       \
+        uintptr_t extra_rc          : 19
+#     define RC_ONE   (1ULL<<45)
+#     define RC_HALF  (1ULL<<18)
+#   endif
 
 # elif __x86_64__
 #   define ISA_MASK        0x00007ffffffffff8ULL
 #   define ISA_MAGIC_MASK  0x001f800000000001ULL
 #   define ISA_MAGIC_VALUE 0x001d800000000001ULL
+#   define ISA_HAS_CXX_DTOR_BIT 1
 #   define ISA_BITFIELD                                                        \
       uintptr_t nonpointer        : 1;                                         \
       uintptr_t has_assoc         : 1;                                         \
       uintptr_t shiftcls          : 44; /*MACH_VM_MAX_ADDRESS 0x7fffffe00000*/ \
       uintptr_t magic             : 6;                                         \
       uintptr_t weakly_referenced : 1;                                         \
-      uintptr_t deallocating      : 1;                                         \
+      uintptr_t unused            : 1;                                         \
       uintptr_t has_sidetable_rc  : 1;                                         \
       uintptr_t extra_rc          : 8
 #   define RC_ONE   (1ULL<<56)
 #   define ISA_INDEX_COUNT       (1 << ISA_INDEX_BITS)
 #   define ISA_INDEX_MAGIC_MASK  0x001E0001
 #   define ISA_INDEX_MAGIC_VALUE 0x001C0001
+#   define ISA_HAS_CXX_DTOR_BIT  1
 #   define ISA_BITFIELD                         \
       uintptr_t nonpointer        : 1;          \
       uintptr_t has_assoc         : 1;          \
       uintptr_t magic             : 4;          \
       uintptr_t has_cxx_dtor      : 1;          \
       uintptr_t weakly_referenced : 1;          \
-      uintptr_t deallocating      : 1;          \
+      uintptr_t unused            : 1;          \
       uintptr_t has_sidetable_rc  : 1;          \
       uintptr_t extra_rc          : 7
 #   define RC_ONE   (1ULL<<25)