1/** 2 * Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved. 3 */ 4 5DEFINE_VALUE(SLOT_SIZE, PointerSize(RUNTIME_ARCH)) 6 7// File offsets 8DEFINE_VALUE(FILE_BASE_OFFSET, panda::panda_file::File::GetFileBaseOffset()) 9 10// Method offsets 11DEFINE_VALUE(METHOD_ACCESS_FLAGS_OFFSET, Method::GetAccessFlagsOffset()) 12DEFINE_VALUE(METHOD_V_TABLE_INDEX_OFFSET, Method::GetVTableIndexOffset()) 13DEFINE_VALUE(METHOD_NUM_ARGS_OFFSET, Method::GetNumArgsOffset()) 14DEFINE_VALUE(METHOD_HOTNESS_COUNTER_OFFSET, Method::GetHotnessCounterOffset()) 15DEFINE_VALUE(METHOD_CLASS_OFFSET, Method::GetClassOffset()) 16DEFINE_VALUE(METHOD_COMPILED_ENTRY_POINT_OFFSET, Method::GetCompiledEntryPointOffset()) 17DEFINE_VALUE(METHOD_PANDA_FILE_OFFSET, Method::GetPandaFileOffset()) 18DEFINE_VALUE(METHOD_NATIVE_POINTER_OFFSET, Method::GetNativePointerOffset()) 19DEFINE_VALUE(METHOD_SHORTY_OFFSET, Method::GetShortyOffset()) 20 21// Frame offsets 22DEFINE_VALUE(FRAME_METHOD_OFFSET, Frame::GetMethodOffset()) 23DEFINE_VALUE(FRAME_PREV_FRAME_OFFSET, Frame::GetPrevFrameOffset()) 24DEFINE_VALUE(FRAME_NUM_VREGS_OFFSET, Frame::GetNumVregsOffset()) 25DEFINE_VALUE(FRAME_ACC_OFFSET, Frame::GetAccOffset()) 26DEFINE_VALUE(FRAME_ACC_MIRROR_OFFSET, interpreter::AccVRegister::GetMirrorOffset()) 27DEFINE_VALUE(FRAME_VREGS_OFFSET, Frame::GetVregsOffset()) 28 29DEFINE_VALUE(FRAME_VREGISTER_SIZE, sizeof(interpreter::VRegister)) 30DEFINE_VALUE(FRAME_VREGISTER_VALUE_OFFSET, interpreter::VRegister::GetValueOffset()) 31DEFINE_VALUE(FRAME_VREGISTER_PRIMITIVE_TAG, 0) // TODO(runtime): find a way to get primitive tag from vreg 32DEFINE_VALUE(FRAME_VREGISTER_OBJECT_TAG, 1) // TODO(runtime): find a way to get object tag from vreg 33DEFINE_VALUE(FRAME_SLOT_OFFSET, panda::Frame::GetVregsOffset() + interpreter::VRegister::GetValueOffset()) 34 35DEFINE_VALUE(CFRAME_LR_SLOT, CFrameReturnAddr::Start()) 36DEFINE_VALUE(CFRAME_STACK_START_SLOT, CFrameSlots::Start()) 37DEFINE_VALUE(CFRAME_CALLEE_REGS_START_SLOT, CFrameLayout::RegsRegion::Start()) 38DEFINE_VALUE(CFRAME_LOCALS_COUNT, (CFrameSlots::Start() - CFrameData::Start())) 39DEFINE_VALUE(CFRAME_HEADER_SIZE, (CFrameFlags::End() - CFrameReturnAddr::Start())) 40DEFINE_VALUE(CFRAME_FLAGS_SLOT, (CFrameFlags::Start())) 41DEFINE_VALUE(CFRAME_LOCALS_START_SLOT, (CFrameLocals::Start())) 42DEFINE_VALUE(CFRAME_KIND_OSR, (helpers::ToUnderlying(CFrameLayout::FrameKind::OSR) << CFrameLayout::FrameKindField::START_BIT)) 43DEFINE_VALUE(CFRAME_KIND_NATIVE, (helpers::ToUnderlying(CFrameLayout::FrameKind::NATIVE) << CFrameLayout::FrameKindField::START_BIT)) 44DEFINE_VALUE(CFRAME_HAS_FLOAT_REGS_FLAG_MASK, (1U << CFrameLayout::HasFloatRegsFlag::START_BIT)) 45DEFINE_VALUE(CFRAME_HAS_FLOAT_REGS_FLAG_BIT, (CFrameLayout::HasFloatRegsFlag::START_BIT)) 46 47// Thread offsets 48DEFINE_VALUE(MANAGED_THREAD_FRAME_KIND_OFFSET, ManagedThread::GetFrameKindOffset()) 49DEFINE_VALUE(MANAGED_THREAD_FLAG_OFFSET, ManagedThread::GetFlagOffset()) 50DEFINE_VALUE(MANAGED_THREAD_ENTRYPOINTS_OFFSET, ManagedThread::GetEntrypointsOffset()) 51DEFINE_VALUE(MANAGED_THREAD_OBJECT_OFFSET, ManagedThread::GetObjectOffset()) 52DEFINE_VALUE(MANAGED_THREAD_FRAME_OFFSET, ManagedThread::GetFrameOffset()) 53DEFINE_VALUE(MANAGED_THREAD_EXCEPTION_OFFSET, ManagedThread::GetExceptionOffset()) 54DEFINE_VALUE(MANAGED_THREAD_NATIVE_PC_OFFSET, ManagedThread::GetNativePcOffset()) 55 56DEFINE_VALUE(MANAGED_THREAD_TLAB_OFFSET, ManagedThread::GetTLABOffset()) 57DEFINE_VALUE(MANAGED_THREAD_CARD_TABLE_ADDR_OFFSET, ManagedThread::GetTlsCardTableAddrOffset()) 58DEFINE_VALUE(MANAGED_THREAD_CARD_TABLE_MIN_ADDR_OFFSET, ManagedThread::GetTlsCardTableMinAddrOffset()) 59DEFINE_VALUE(MANAGED_THREAD_CONCURRENT_MARKING_ADDR_OFFSET, ManagedThread::GetTlsConcurrentMarkingAddrOffset()) 60DEFINE_VALUE(MANAGED_THREAD_STRING_CLASS_PTR_OFFSET, ManagedThread::GetTlsStringClassPointerOffset()) 61DEFINE_VALUE(MANAGED_THREAD_PRE_BUFF_OFFSET, ManagedThread::GetPreBuffOffset()) 62DEFINE_VALUE(MANAGED_THREAD_LANGUAGE_EXTENSION_DATA_OFFSET, ManagedThread::GetLanguageExtensionsDataOffset()) 63DEFINE_VALUE(MANAGED_THREAD_INTERNAL_ID_OFFSET, ManagedThread::GetInternalIdOffset()) 64DEFINE_VALUE(MANAGED_THREAD_RUNTIME_CALL_ENABLED_OFFSET, ManagedThread::GetRuntimeCallEnabledOffset()) 65 66DEFINE_VALUE(MT_MANAGED_THREAD_LOCKED_OBJECT_CAPACITY_OFFSET, MTManagedThread::GetLockedObjectCapacityOffset()) 67DEFINE_VALUE(MT_MANAGED_THREAD_LOCKED_OBJECT_SIZE_OFFSET, MTManagedThread::GetLockedObjectSizeOffset()) 68DEFINE_VALUE(MT_MANAGED_THREAD_LOCKED_OBJECT_DATA_OFFSET, MTManagedThread::GetLockedObjectDataOffset()) 69 70DEFINE_VALUE(LOCKED_OBJECT_INFO_SIZE, sizeof(LockedObjectInfo)) 71DEFINE_VALUE(LOCKED_OBJECT_INFO_MONITOR_OFFSET, LockedObjectInfo::GetMonitorOffset()) 72DEFINE_VALUE(LOCKED_OBJECT_INFO_STACK_OFFSET, LockedObjectInfo::GetStackOffset()) 73 74// Array offsets 75DEFINE_VALUE(CORETYPES_ARRAY_DATA_OFFSET, coretypes::Array::GetDataOffset()) 76DEFINE_VALUE(CORETYPES_ARRAY_LENGTH_OFFSET, coretypes::Array::GetLengthOffset()) 77DEFINE_VALUE(CORETYPES_ARRAY_CLASS_SIZE, sizeof(panda::coretypes::Array)) 78 79// String offsets 80DEFINE_VALUE(CORETYPES_STRING_DATA_OFFSET, coretypes::String::GetDataOffset()) 81DEFINE_VALUE(CORETYPES_STRING_LENGTH_OFFSET, coretypes::String::GetLengthOffset()) 82DEFINE_VALUE(CORETYPES_STRING_CLASS_SIZE, sizeof(coretypes::String)) 83DEFINE_VALUE(CORETYPES_STRING_MUTF8_1B_MAX, utf::MUTF8_1B_MAX) 84 85// TLAB offsets 86DEFINE_VALUE(TLAB_MEMORY_START_ADDR_OFFSET, mem::TLAB::TLABStartAddrOffset()) 87DEFINE_VALUE(TLAB_CUR_FREE_POSITION_OFFSET, mem::TLAB::TLABFreePointerOffset()) 88DEFINE_VALUE(TLAB_MEMORY_END_ADDR_OFFSET, mem::TLAB::TLABEndAddrOffset()) 89DEFINE_VALUE(TLAB_ALIGNMENT, DEFAULT_ALIGNMENT_IN_BYTES) 90 91// ObjectHeader offsets 92DEFINE_VALUE(OBJECT_HEADER_CLASS_POINTER_OFFSET, panda::ObjectHeader::GetClassOffset()) 93DEFINE_VALUE(OBJECT_HEADER_MARK_WORD_OFFSET, panda::ObjectHeader::GetMarkWordOffset()) 94 95// Class offsets 96DEFINE_VALUE(BASE_CLASS_MANAGED_OBJECT_OFFSET, BaseClass::GetManagedObjectOffset()) 97DEFINE_VALUE(BASE_CLASS_FLAGS_OFFSET, BaseClass::GetFlagsOffset()) 98DEFINE_VALUE(CLASS_VTABLE_OFFSET, panda::Class::GetVTableOffset()) 99DEFINE_VALUE(CLASS_BASE_OFFSET, panda::Class::GetBaseOffset()) 100DEFINE_VALUE(CLASS_METHODS_OFFSET, panda::Class::GetMethodsOffset()) 101DEFINE_VALUE(CLASS_COMPONENT_TYPE_OFFSET, panda::Class::GetComponentTypeOffset()) 102DEFINE_VALUE(CLASS_TYPE_OFFSET, panda::Class::GetTypeOffset()) 103DEFINE_VALUE(CLASS_STATE_OFFSET, panda::Class::GetStateOffset()) 104 105DEFINE_VALUE(CLASS_IS_CLONEABLE, panda::Class::IS_CLONEABLE) 106DEFINE_VALUE(CLASS_ISARRAY_OFFSET, panda::Class::GetComponentTypeOffset()) 107DEFINE_VALUE(CLASS_ARRAY_ELEMENT_TYPE_OFFSET, panda::Class::GetTypeOffset()) 108DEFINE_VALUE(CLASS_ITABLE_OFFSET, panda::Class::GetITableOffset()) 109DEFINE_VALUE(CLASS_ITABLE_ENTRY_SIZE, panda::ITable::GetEntrySize()) 110DEFINE_VALUE(CLASS_ITABLE_ENTRIES_DATA_OFFSET, panda::ITable::GetEntriesDataOffset()) 111DEFINE_VALUE(CLASS_ITABLE_ENTRIES_SIZE_OFFSET, panda::ITable::GetEntriesSizeOffset()) 112DEFINE_VALUE(CLASS_ITABLE_ENTRY_INTERFACE_OFFSET, panda::ITable::Entry::GetInterfaceOffset()) 113 114// Field offsets 115DEFINE_VALUE(FIELD_CLASS_OFFSET, Field::GetClassOffset()) 116DEFINE_VALUE(FIELD_OFFSET_OFFSET, Field::GetOffsetOffset()) 117 118// NativePointer offsets 119DEFINE_VALUE(CORETYPES_NATIVE_POINTER_EXTERNAL_POINTER_OFFSET, coretypes::NativePointer::GetExternalPointerOffset()) 120 121DEFINE_VALUE(ACCESS_STATIC, ACC_STATIC) 122DEFINE_VALUE(CALLEE_SAVED_SIZE, (GetCalleeRegsCount(RUNTIME_ARCH, false) + GetCalleeRegsCount(RUNTIME_ARCH, true)) * 123 PointerSize(RUNTIME_ARCH)) 124 125DEFINE_VALUE(BRIDGE_FRAME_SIZE, AlignUp( 126 (static_cast<size_t>(CFrameLayout::HEADER_SIZE) + GetCalleeRegsCount(RUNTIME_ARCH, false) + GetCalleeRegsCount(RUNTIME_ARCH, true)) * 127 PointerSize(RUNTIME_ARCH), 128 16)) 129 130DEFINE_VALUE(CALLER_REG0_OFFSET, (CFrameLayout(RUNTIME_ARCH, 0).GetCallerRegsStartSlot() + 131 GetCallerRegsCount(RUNTIME_ARCH, false) - 1) * CFrameLayout(RUNTIME_ARCH, 0).GetSlotSize()) 132DEFINE_VALUE(CALLER_VREG0_OFFSET, (CFrameLayout(RUNTIME_ARCH, 0).GetCallerRegsStartSlot() + 133 GetCallerRegsCount(RUNTIME_ARCH, false) + GetCallerRegsCount(RUNTIME_ARCH, true) - 1) * CFrameLayout(RUNTIME_ARCH, 0).GetSlotSize()) 134DEFINE_VALUE(CALLEE_REG0_OFFSET, ((CFrameLayout::HEADER_SIZE + GetCalleeRegsCount(RUNTIME_ARCH, false)) * CFrameLayout(RUNTIME_ARCH, 0).GetSlotSize())) 135DEFINE_VALUE(CALLEE_VREG0_OFFSET, ((CFrameLayout::HEADER_SIZE + GetCalleeRegsCount(RUNTIME_ARCH, false) + GetCalleeRegsCount(RUNTIME_ARCH, true)) * CFrameLayout(RUNTIME_ARCH, 0).GetSlotSize())) 136 137DEFINE_VALUE(INTERPRETER_TO_COMPILED_CODE_BRIDGE, FrameBridgeKind::INTERPRETER_TO_COMPILED_CODE) 138DEFINE_VALUE(COMPILED_CODE_TO_INTERPRETER_BRIDGE, FrameBridgeKind::COMPILED_CODE_TO_INTERPRETER) 139DEFINE_VALUE(BYPASS_BRIDGE, FrameBridgeKind::BYPASS) 140 141// Interpreter to compiler bridge consts 142DEFINE_VALUE(INT_METHOD_OFFSET, BoundaryFrame<FrameKind::INTERPRETER>::METHOD_OFFSET) 143DEFINE_VALUE(INT_FP_OFFSET, BoundaryFrame<FrameKind::INTERPRETER>::FP_OFFSET) 144DEFINE_VALUE(INT_RETURN_OFFSET, BoundaryFrame<FrameKind::INTERPRETER>::RETURN_OFFSET) 145DEFINE_VALUE(INT_CALLEES_OFFSET, BoundaryFrame<FrameKind::INTERPRETER>::CALLEES_OFFSET) 146 147// Compiler to interpreter bridge consts 148DEFINE_VALUE(COMP_METHOD_OFFSET, BoundaryFrame<FrameKind::COMPILER>::METHOD_OFFSET) 149DEFINE_VALUE(COMP_FP_OFFSET, BoundaryFrame<FrameKind::COMPILER>::FP_OFFSET) 150DEFINE_VALUE(COMP_RETURN_OFFSET, BoundaryFrame<FrameKind::COMPILER>::RETURN_OFFSET) 151DEFINE_VALUE(COMP_CALLEES_OFFSET, BoundaryFrame<FrameKind::COMPILER>::CALLEES_OFFSET) 152 153DEFINE_VALUE(CLASS_STATE_INITIALIZED, static_cast<std::underlying_type_t<panda::Class::State>>(panda::Class::State::INITIALIZED)) 154 155DEFINE_VALUE(ELEMENT_TYPE_U1, (int)panda::panda_file::Type::TypeId::U1) 156DEFINE_VALUE(ELEMENT_TYPE_I8, (int)panda::panda_file::Type::TypeId::I8) 157DEFINE_VALUE(ELEMENT_TYPE_U8, (int)panda::panda_file::Type::TypeId::U8) 158DEFINE_VALUE(ELEMENT_TYPE_I16, (int)panda::panda_file::Type::TypeId::I16) 159DEFINE_VALUE(ELEMENT_TYPE_U16, (int)panda::panda_file::Type::TypeId::U16) 160DEFINE_VALUE(ELEMENT_TYPE_I32, (int)panda::panda_file::Type::TypeId::I32) 161DEFINE_VALUE(ELEMENT_TYPE_U32, (int)panda::panda_file::Type::TypeId::U32) 162DEFINE_VALUE(ELEMENT_TYPE_F32, (int)panda::panda_file::Type::TypeId::F32) 163DEFINE_VALUE(ELEMENT_TYPE_F64, (int)panda::panda_file::Type::TypeId::F64) 164DEFINE_VALUE(ELEMENT_TYPE_I64, (int)panda::panda_file::Type::TypeId::I64) 165DEFINE_VALUE(ELEMENT_TYPE_U64, (int)panda::panda_file::Type::TypeId::U64) 166DEFINE_VALUE(ELEMENT_TYPE_REFERENCE, (int)panda::panda_file::Type::TypeId::REFERENCE) 167 168DEFINE_VALUE(RUNTIME_MODE_DEFAULT, 0) 169DEFINE_VALUE(RUNTIME_MODE_STUB, 1) 170DEFINE_VALUE(RUNTIME_MODE_SLOW_PATH, 2) 171 172DEFINE_VALUE(MIN_PREFIX_OPCODE_INDEX, BytecodeInstruction::GetMinPrefixOpcodeIndex()) 173DEFINE_VALUE(TAGGED_VALUE_UNDEFINED, TaggedValue::VALUE_UNDEFINED) 174 175DEFINE_VALUE(IS_NOT_STUB_CALL, 0) 176DEFINE_VALUE(IS_STUB_CALL, 1) 177 178#include "plugins_asm_defines.def" 179