runtime: Bitstring implementation for subtype checking (4/4).

Integrate the previous CLs into ART Runtime. Subsequent CLs to add
optimizing compiler support.

Use spare 24-bits from "Class#status_" field to
implement faster subtype checking in the runtime. Does not incur any extra memory overhead,
and (when in compiled code) this is always as fast or faster than the original check.

The new subtype checking is O(1) of the form:

  src <: target :=
    (*src).status >> #imm_target_mask == #imm_target_shifted

Based on the original prototype CL by Zhengkai Wu:
https://android-review.googlesource.com/#/c/platform/art/+/440996/

Test: art/test.py -b -j32 --host
Bug: 64692057
Change-Id: Iec3c54af529055a7f6147eebe5611d9ecd46942b
diff --git a/runtime/mirror/class.h b/runtime/mirror/class.h
index 148273b..bf49f51 100644
--- a/runtime/mirror/class.h
+++ b/runtime/mirror/class.h
@@ -101,9 +101,10 @@
 
   template<VerifyObjectFlags kVerifyFlags = kDefaultVerifyFlags>
   Status GetStatus() REQUIRES_SHARED(Locks::mutator_lock_) {
-    static_assert(sizeof(Status) == sizeof(uint32_t), "Size of status not equal to uint32");
-    return static_cast<Status>(
-        GetField32Volatile<kVerifyFlags>(OFFSET_OF_OBJECT_MEMBER(Class, status_)));
+    // Avoid including "subtype_check_bits_and_status.h" to get the field.
+    // The ClassStatus is always in the least-significant bits of status_.
+    return static_cast<Status>(static_cast<uint8_t>(
+        static_cast<uint32_t>(GetField32Volatile<kVerifyFlags>(StatusOffset())) & 0xff));
   }
 
   // This is static because 'this' may be moved by GC.
@@ -111,7 +112,7 @@
       REQUIRES_SHARED(Locks::mutator_lock_) REQUIRES(!Roles::uninterruptible_);
 
   static MemberOffset StatusOffset() {
-    return OFFSET_OF_OBJECT_MEMBER(Class, status_);
+    return MemberOffset(OFFSET_OF_OBJECT_MEMBER(Class, status_));
   }
 
   // Returns true if the class has been retired.
@@ -1481,8 +1482,9 @@
   // Bitmap of offsets of ifields.
   uint32_t reference_instance_offsets_;
 
-  // State of class initialization.
-  Status status_;
+  // See the real definition in subtype_check_bits_and_status.h
+  // typeof(status_) is actually SubtypeCheckBitsAndStatus.
+  uint32_t status_;
 
   // The offset of the first virtual method that is copied from an interface. This includes miranda,
   // default, and default-conflict methods. Having a hard limit of ((2 << 16) - 1) for methods