6#if defined(TARGET_ARCH_X64)
35 uint8_t* bytes =
reinterpret_cast<uint8_t*
>(pc);
38 if ((bytes[0] == 0x49) || (bytes[0] == 0x4d)) {
39 if ((bytes[1] == 0x8b) || (bytes[1] == 0x3b)) {
40 if ((bytes[2] & 0xc7) == (0x80 | (
THR & 7))) {
44 if ((bytes[2] & 0xc7) == (0x40 | (
THR & 7))) {
45 uint8_t
offset = *
reinterpret_cast<uint8_t*
>(pc + 3);
51 if (((bytes[0] == 0x41) && (bytes[1] == 0xff) && (bytes[2] == 0x76))) {
53 uint8_t
offset = *
reinterpret_cast<uint8_t*
>(pc + 3);
58 if ((bytes[0] == 0x49) || (bytes[0] == 0x4d)) {
59 if ((bytes[1] == 0x8b) || (bytes[1] == 0x3b)) {
60 if ((bytes[2] & 0xc7) == (0x80 | (
PP & 7))) {
64 if ((bytes[2] & 0xc7) == (0x40 | (
PP & 7))) {
75 static int16_t indirect_call_pattern[] = {
78 static int16_t direct_call_pattern[] = {
81 static int16_t pattern_disp8[] = {
84 static int16_t pattern_disp32[] = {
85 0x4d, 0x8b, 0x8f, -1, -1, -1, -1,
96 FATAL(
"Failed to decode at %" Px, pc_);
104 FATAL(
"Failed to decode at %" Px, pc);
static intptr_t IndexFromOffset(intptr_t offset)
static bool ObjectAtOffset(intptr_t offset, Object *object)
intptr_t GetSubtypeTestCachePoolIndex()
bool ObjectAtPoolIndex(const Code &code, intptr_t index, Object *obj)
bool MatchesPattern(uword end, const int16_t *pattern, intptr_t size)
bool DecodeLoadObjectFromPoolOrThread(uword pc, const Code &code, Object *obj)
static T LoadUnaligned(const T *ptr)
intptr_t IndexFromPPLoadDisp32(uword start)
intptr_t IndexFromPPLoadDisp8(uword start)
COMPILE_ASSERT(kUnreachableReference==WeakTable::kNoValue)
#define ARRAY_SIZE(array)