• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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