Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
constants_ia32.h
Go to the documentation of this file.
1// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#ifndef RUNTIME_VM_CONSTANTS_IA32_H_
6#define RUNTIME_VM_CONSTANTS_IA32_H_
7
8#ifndef RUNTIME_VM_CONSTANTS_H_
9#error Do not include constants_ia32.h directly; use constants.h instead.
10#endif
11
12#include "platform/assert.h"
13#include "platform/globals.h"
14#include "platform/utils.h"
15
16#include "vm/constants_base.h"
17
18namespace dart {
19
20#define R(reg) (1 << (reg))
21
23 EAX = 0,
24 ECX = 1,
25 EDX = 2,
26 EBX = 3,
27 ESP = 4, // SP
28 EBP = 5, // FP
29 ESI = 6, // THR
30 EDI = 7,
32 kNoRegister = -1, // Signals an illegal register.
33};
34
35// Low and high bytes registers of the first four general purpose registers.
36// The other four general purpose registers do not have byte registers.
38 AL = 0,
39 CL = 1,
40 DL = 2,
41 BL = 3,
42 AH = 4,
43 CH = 5,
44 DH = 6,
45 BH = 7,
47 kNoByteRegister = -1 // Signals an illegal register.
48};
49
51 // This only works for EAX, ECX, EDX, EBX.
52 // Remaining Register values map to high byte of the above registers.
53 RELEASE_ASSERT(reg == Register::EAX || reg == Register::ECX ||
54 reg == Register::EDX || reg == Register::EBX);
55 return static_cast<ByteRegister>(reg);
56}
57
59 XMM0 = 0,
60 XMM1 = 1,
61 XMM2 = 2,
62 XMM3 = 3,
63 XMM4 = 4,
64 XMM5 = 5,
65 XMM6 = 6,
66 XMM7 = 7,
68 kNoXmmRegister = -1 // Signals an illegal register.
69};
70
71// Architecture independent aliases.
73const FpuRegister FpuTMP = XMM7;
74const int kFpuRegisterSize = 16;
75typedef simd128_value_t fpu_register_t;
78
79extern const char* const cpu_reg_names[kNumberOfCpuRegisters];
80extern const char* const cpu_reg_abi_names[kNumberOfCpuRegisters];
81extern const char* const cpu_reg_byte_names[kNumberOfByteRegisters];
82extern const char* const fpu_reg_names[kNumberOfXmmRegisters];
83
84// Register aliases.
85const Register TMP = kNoRegister; // No scratch register used by assembler.
86const Register TMP2 = kNoRegister; // No second assembler scratch register.
87const Register CODE_REG = EDI;
88// Set when calling Dart functions in JIT mode, used by LazyCompileStub.
90const Register PP = kNoRegister; // No object pool pointer.
91const Register SPREG = ESP; // Stack pointer register.
92const Register FPREG = EBP; // Frame pointer register.
93const Register IC_DATA_REG = ECX; // ICData/MegamorphicCache register.
94const Register ARGS_DESC_REG = EDX; // Arguments descriptor register.
95const Register THR = ESI; // Caches current thread in generated code.
98
99// ABI for catch-clause entry point.
102
103// ABI for write barrier stub.
107
108// Common ABI for shared slow path stubs.
109struct SharedSlowPathStubABI {
110 static constexpr Register kResultReg = EAX;
111};
112
113// ABI for instantiation stubs.
114struct InstantiationABI {
116 static constexpr Register kInstantiatorTypeArgumentsReg = EDX;
117 static constexpr Register kFunctionTypeArgumentsReg = ECX;
118 static constexpr Register kResultTypeArgumentsReg = EAX;
119 static constexpr Register kResultTypeReg = EAX;
120 static constexpr Register kScratchReg =
121 EDI; // On ia32 we don't use CODE_REG.
122};
123
124// Registers in addition to those listed in InstantiationABI used inside the
125// implementation of the InstantiateTypeArguments stubs.
126struct InstantiateTAVInternalRegs {
127 // On IA32, we don't do hash cache checks in the stub. We only define
128 // kSavedRegisters to avoid needing to #ifdef uses of it.
129 static constexpr intptr_t kSavedRegisters = 0;
130};
131
132// Calling convention when calling SubtypeTestCacheStub.
133// Although ia32 uses a stack-based calling convention, we keep the same
134// 'TypeTestABI' name for symmetry with other architectures with a proper ABI.
135// Note that ia32 has no support for type testing stubs.
136struct TypeTestABI {
137 static constexpr Register kInstanceReg = EAX;
138 static constexpr Register kDstTypeReg = EBX;
139 static constexpr Register kInstantiatorTypeArgumentsReg = EDX;
140 static constexpr Register kFunctionTypeArgumentsReg = ECX;
141 static constexpr Register kSubtypeTestCacheReg =
142 EDI; // On ia32 we don't use CODE_REG.
143
144 // For call to InstanceOfStub.
145 static constexpr Register kInstanceOfResultReg = kInstanceReg;
146 // For call to SubtypeNTestCacheStub.
147 static constexpr Register kSubtypeTestCacheResultReg =
149};
150
151// Calling convention when calling kSubtypeCheckRuntimeEntry, to match other
152// architectures. We don't generate a call to the AssertSubtypeStub because we
153// need CODE_REG to store a fifth argument.
154struct AssertSubtypeABI {
155 static constexpr Register kSubTypeReg = EAX;
156 static constexpr Register kSuperTypeReg = EBX;
157 static constexpr Register kInstantiatorTypeArgumentsReg = EDX;
158 static constexpr Register kFunctionTypeArgumentsReg = ECX;
159 static constexpr Register kDstNameReg =
160 EDI; /// On ia32 we don't use CODE_REG.
161
162 // No result register, as AssertSubtype is only run for side effect
163 // (throws if the subtype check fails).
164};
165
166// For calling the ia32-specific AssertAssignableStub
168 static constexpr Register kDstNameReg = EBX;
169 static constexpr Register kSubtypeTestReg = ECX;
170
171 static constexpr intptr_t kInstanceSlotFromFp = 2 + 3;
172 static constexpr intptr_t kDstTypeSlotFromFp = 2 + 2;
173 static constexpr intptr_t kInstantiatorTAVSlotFromFp = 2 + 1;
174 static constexpr intptr_t kFunctionTAVSlotFromFp = 2 + 0;
175};
176
177// ABI for InitStaticFieldStub.
178struct InitStaticFieldABI {
179 static constexpr Register kFieldReg = EDX;
180 static constexpr Register kResultReg = EAX;
181};
182
183// Registers used inside the implementation of InitLateStaticFieldStub.
184struct InitLateStaticFieldInternalRegs {
185 static constexpr Register kAddressReg = ECX;
186 static constexpr Register kScratchReg = EDI;
187};
188
189// ABI for InitInstanceFieldStub.
190struct InitInstanceFieldABI {
191 static constexpr Register kInstanceReg = EBX;
192 static constexpr Register kFieldReg = EDX;
193 static constexpr Register kResultReg = EAX;
194};
195
196// Registers used inside the implementation of InitLateInstanceFieldStub.
197struct InitLateInstanceFieldInternalRegs {
198 static constexpr Register kAddressReg = ECX;
199 static constexpr Register kScratchReg = EDI;
200};
201
202// ABI for LateInitializationError stubs.
203struct LateInitializationErrorABI {
204 static constexpr Register kFieldReg = EDI;
205};
206
207// ABI for ThrowStub.
208struct ThrowABI {
209 static constexpr Register kExceptionReg = EAX;
210};
211
212// ABI for ReThrowStub.
213struct ReThrowABI {
214 static constexpr Register kExceptionReg = EAX;
215 static constexpr Register kStackTraceReg = EBX;
216};
217
218// ABI for AssertBooleanStub.
219struct AssertBooleanABI {
220 static constexpr Register kObjectReg = EAX;
221};
222
223// ABI for RangeErrorStub.
224struct RangeErrorABI {
225 static constexpr Register kLengthReg = EAX;
226 static constexpr Register kIndexReg = EBX;
227};
228
229// ABI for AllocateObjectStub.
230struct AllocateObjectABI {
231 static constexpr Register kResultReg = EAX;
232 static constexpr Register kTypeArgumentsReg = EDX;
233 static constexpr Register kTagsReg = kNoRegister; // Not used.
234};
235
236// ABI for Allocate{Mint,Double,Float32x4,Float64x2}Stub.
237struct AllocateBoxABI {
239 static constexpr Register kTempReg = EBX;
240};
241
242// ABI for AllocateClosureStub.
243struct AllocateClosureABI {
245 static constexpr Register kFunctionReg = EBX;
246 static constexpr Register kContextReg = ECX;
247 static constexpr Register kInstantiatorTypeArgsReg = EDI;
248 static constexpr Register kScratchReg = EDX;
249};
250
251// ABI for AllocateArrayStub.
252struct AllocateArrayABI {
254 static constexpr Register kLengthReg = EDX;
255 static constexpr Register kTypeArgumentsReg = ECX;
256};
257
258// ABI for AllocateRecordStub.
259struct AllocateRecordABI {
261 static constexpr Register kShapeReg = EDX;
262 static constexpr Register kTemp1Reg = EBX;
263 static constexpr Register kTemp2Reg = EDI;
264};
265
266// ABI for AllocateSmallRecordStub (AllocateRecord2, AllocateRecord2Named,
267// AllocateRecord3, AllocateRecord3Named).
268struct AllocateSmallRecordABI {
270 static constexpr Register kShapeReg = EBX;
271 static constexpr Register kValue0Reg = ECX;
272 static constexpr Register kValue1Reg = EDX;
273 static constexpr Register kValue2Reg = kNoRegister;
274 static constexpr Register kTempReg = EDI;
275};
276
277// ABI for AllocateTypedDataArrayStub.
278struct AllocateTypedDataArrayABI {
280 static constexpr Register kLengthReg = kResultReg;
281};
282
283// ABI for BoxDoubleStub.
284struct BoxDoubleStubABI {
285 static constexpr FpuRegister kValueReg = XMM0;
286 static constexpr Register kTempReg = EBX;
287 static constexpr Register kResultReg = EAX;
288};
289
290// ABI for DoubleToIntegerStub.
291struct DoubleToIntegerStubABI {
292 static constexpr FpuRegister kInputReg = XMM0;
293 static constexpr Register kRecognizedKindReg = EAX;
294 static constexpr Register kResultReg = EAX;
295};
296
297// ABI for SuspendStub (AwaitStub, AwaitWithTypeCheckStub, YieldAsyncStarStub,
298// SuspendSyncStarAtStartStub, SuspendSyncStarAtYieldStub).
299struct SuspendStubABI {
300 static constexpr Register kArgumentReg = EAX;
301 static constexpr Register kTypeArgsReg = EDX; // Can be the same as kTempReg
302 static constexpr Register kTempReg = EDX;
303 static constexpr Register kFrameSizeReg = ECX;
304 static constexpr Register kSuspendStateReg = EBX;
305 static constexpr Register kFunctionDataReg = EDI;
306 // Can reuse THR.
307 static constexpr Register kSrcFrameReg = ESI;
308 // Can reuse kFunctionDataReg.
309 static constexpr Register kDstFrameReg = EDI;
310
311 // Number of bytes to skip after
312 // suspend stub return address in order to resume.
313 // IA32: mov esp, ebp; pop ebp; ret
314 static constexpr intptr_t kResumePcDistance = 4;
315};
316
317// ABI for InitSuspendableFunctionStub (InitAsyncStub, InitAsyncStarStub,
318// InitSyncStarStub).
320 static constexpr Register kTypeArgsReg = EAX;
321};
322
323// ABI for ResumeStub
324struct ResumeStubABI {
325 static constexpr Register kSuspendStateReg = EBX;
326 static constexpr Register kTempReg = EDX;
327 // Registers for the frame copying (the 1st part).
328 static constexpr Register kFrameSizeReg = ECX;
329 // Can reuse THR.
330 static constexpr Register kSrcFrameReg = ESI;
331 // Can reuse CODE_REG.
332 static constexpr Register kDstFrameReg = EDI;
333 // Registers for control transfer.
334 // (the 2nd part, can reuse registers from the 1st part)
335 static constexpr Register kResumePcReg = ECX;
336 // Can also reuse kSuspendStateReg but should not conflict with CODE_REG.
337 static constexpr Register kExceptionReg = EAX;
338 static constexpr Register kStackTraceReg = EBX;
339};
340
341// ABI for ReturnStub (ReturnAsyncStub, ReturnAsyncNotFutureStub,
342// ReturnAsyncStarStub).
343struct ReturnStubABI {
344 static constexpr Register kSuspendStateReg = EBX;
345};
346
347// ABI for AsyncExceptionHandlerStub.
348struct AsyncExceptionHandlerStubABI {
349 static constexpr Register kSuspendStateReg = EBX;
350};
351
352// ABI for CloneSuspendStateStub.
353struct CloneSuspendStateStubABI {
354 static constexpr Register kSourceReg = EAX;
355 static constexpr Register kDestinationReg = EBX;
356 static constexpr Register kTempReg = EDX;
357 static constexpr Register kFrameSizeReg = ECX;
358 // Can reuse THR.
359 static constexpr Register kSrcFrameReg = ESI;
360 static constexpr Register kDstFrameReg = EDI;
361};
362
363// ABI for FfiAsyncCallbackSendStub.
364struct FfiAsyncCallbackSendStubABI {
365 static constexpr Register kArgsReg = EAX;
366};
367
368// ABI for DispatchTableNullErrorStub and consequently for all dispatch
369// table calls (though normal functions will not expect or use this
370// register). This ABI is added to distinguish memory corruption errors from
371// null errors.
372// Note: dispatch table calls are never actually generated on IA32, this
373// declaration is only added for completeness.
374struct DispatchTableNullErrorABI {
375 static constexpr Register kClassIdReg = EAX;
376};
377
378typedef uint32_t RegList;
379const RegList kAllCpuRegistersList = 0xFF;
381
382const intptr_t kReservedCpuRegisters = (1 << SPREG) | (1 << FPREG) | (1 << THR);
383constexpr intptr_t kNumberOfReservedCpuRegisters =
385// CPU registers available to Dart allocator.
387 kAllCpuRegistersList & ~kReservedCpuRegisters;
388constexpr int kNumberOfDartAvailableCpuRegs =
390// No reason to prefer certain registers on IA32.
391constexpr int kRegisterAllocationBias = 0;
392constexpr int kStoreBufferWrapperSize = 11;
393
394const RegList kAbiPreservedCpuRegs = (1 << EDI) | (1 << ESI) | (1 << EBX);
395
396// Registers available to Dart that are not preserved by runtime calls.
398 kDartAvailableCpuRegs & ~kAbiPreservedCpuRegs;
399
401
402#undef R
403
405 TIMES_1 = 0,
406 TIMES_2 = 1,
407 TIMES_4 = 2,
408 TIMES_8 = 3,
409 TIMES_16 = 4,
410// We can't include vm/compiler/runtime_api.h, so just be explicit instead
411// of using (dart::)kWordSizeLog2.
412#if defined(TARGET_ARCH_IS_32_BIT)
413 // Used for Smi-boxed indices.
414 TIMES_HALF_WORD_SIZE = kInt32SizeLog2 - 1,
415 // Used for unboxed indices.
416 TIMES_WORD_SIZE = kInt32SizeLog2,
417#else
418#error "Unexpected word size"
419#endif
420#if !defined(DART_COMPRESSED_POINTERS)
421 TIMES_COMPRESSED_WORD_SIZE = TIMES_WORD_SIZE,
422#else
423#error Cannot compress IA32
424#endif
425 // Used for Smi-boxed indices.
427};
428
429class Instr {
430 public:
431 static constexpr uint8_t kHltInstruction = 0xF4;
432 // We prefer not to use the int3 instruction since it conflicts with gdb.
433 static constexpr uint8_t kBreakPointInstruction = kHltInstruction;
434 static constexpr int kBreakPointInstructionSize = 1;
435
438 return (*reinterpret_cast<const uint8_t*>(this)) == kBreakPointInstruction;
439 }
440
441 // Instructions are read out of a code stream. The only way to get a
442 // reference to an instruction is to convert a pointer. There is no way
443 // to allocate or create instances of class Instr.
444 // Use the At(pc) function to create references to Instr.
445 static Instr* At(uword pc) { return reinterpret_cast<Instr*>(pc); }
446
447 private:
448 DISALLOW_ALLOCATION();
449 // We need to prevent the creation of instances of class Instr.
451};
452
453// The largest multibyte nop we will emit. This could go up to 15 if it
454// becomes important to us.
455const int MAX_NOP_SIZE = 8;
456
457class CallingConventions {
458 public:
459 static const Register ArgumentRegisters[];
460 static constexpr intptr_t kArgumentRegisters = 0;
461 static constexpr intptr_t kFpuArgumentRegisters = 0;
462 static constexpr intptr_t kNumArgRegs = 0;
464
466 static constexpr intptr_t kXmmArgumentRegisters = 0;
467 static constexpr intptr_t kNumFpuArgRegs = 0;
468
469 static constexpr intptr_t kCalleeSaveCpuRegisters = kAbiPreservedCpuRegs;
470
471 static constexpr bool kArgumentIntRegXorFpuReg = false;
472
473 static constexpr Register kReturnReg = EAX;
474 static constexpr Register kSecondReturnReg = EDX;
476
477 // Whether the callee uses `ret 4` instead of `ret` to return with struct
478 // return values.
479 // See: https://c9x.me/x86/html/file_module_x86_id_280.html
480#if defined(_WIN32)
481 static constexpr bool kUsesRet4 = false;
482#else
483 static constexpr bool kUsesRet4 = true;
484#endif
485
486 // Floating point values are returned on the "FPU stack" (in "ST" registers).
487 // However, we use XMM0 in our compiler pipeline as the location.
488 // The move from and to ST is done in FfiCallInstr::EmitNativeCode and
489 // NativeReturnInstr::EmitNativeCode.
490 static constexpr XmmRegister kReturnFpuReg = XMM0;
491
492 static constexpr Register kFfiAnyNonAbiRegister = EBX;
493 static constexpr Register kFirstNonArgumentRegister = EAX;
494 static constexpr Register kSecondNonArgumentRegister = ECX;
495 static constexpr Register kStackPointerRegister = SPREG;
496
497 // Whether larger than wordsize arguments are aligned to even registers.
502
503 // How stack arguments are aligned.
508
509 // How fields in compounds are aligned.
510#if defined(DART_TARGET_OS_WINDOWS)
512#else
513 static constexpr AlignmentStrategy kFieldAlignment =
515#endif
516
517 // Whether 1 or 2 byte-sized arguments or return values are passed extended
518 // to 4 bytes.
522};
523
524// Register based calling convention used for Dart functions.
525//
526// See |compiler::ComputeCallingConvention| for more details.
528 static constexpr Register kCpuRegistersForArgs[] = {kNoRegister};
529 static constexpr FpuRegister kFpuRegistersForArgs[] = {kNoFpuRegister};
530};
531
532const uword kBreakInstructionFiller = 0xCCCCCCCC;
533
534// Prioritize code size over performance.
535const intptr_t kPreferredLoopAlignment = 1;
536
537} // namespace dart
538
539#endif // RUNTIME_VM_CONSTANTS_IA32_H_
#define RELEASE_ASSERT(cond)
Definition assert.h:327
static constexpr ExtensionStrategy kArgumentStackExtension
static constexpr Register kSecondReturnReg
static constexpr intptr_t kCalleeSaveCpuRegisters
static constexpr AlignmentStrategy kArgumentRegisterAlignmentVarArgs
static constexpr AlignmentStrategy kFieldAlignment
static const FpuRegister FpuArgumentRegisters[]
static constexpr intptr_t kXmmArgumentRegisters
static const Register ArgumentRegisters[]
static constexpr bool kArgumentIntRegXorFpuReg
static constexpr intptr_t kFpuArgumentRegisters
static constexpr FpuRegister kReturnFpuReg
static constexpr intptr_t kNumFpuArgRegs
static constexpr Register kPointerToReturnStructRegisterCall
static constexpr Register kFirstNonArgumentRegister
static constexpr Register kFfiAnyNonAbiRegister
static constexpr AlignmentStrategy kArgumentStackAlignmentVarArgs
static constexpr Register kPointerToReturnStructRegisterReturn
static constexpr AlignmentStrategy kArgumentRegisterAlignment
static constexpr ExtensionStrategy kReturnRegisterExtension
static constexpr Register kStackPointerRegister
static constexpr Register kReturnReg
static constexpr intptr_t kArgumentRegisters
static constexpr Register kSecondNonArgumentRegister
static constexpr ExtensionStrategy kArgumentRegisterExtension
static constexpr intptr_t kNumArgRegs
static constexpr AlignmentStrategy kArgumentStackAlignment
static constexpr bool kUsesRet4
static Instr * At(uword pc)
static constexpr int32_t kBreakPointInstruction
static constexpr int kBreakPointInstructionSize
static constexpr uint8_t kHltInstruction
bool IsBreakPoint()
static constexpr int CountOneBits32(uint32_t x)
Definition utils.h:145
#define ASSERT(E)
ExtensionStrategy
@ kExtendedTo4
@ kNotExtended
const FpuRegister kNoFpuRegister
const Register kWriteBarrierSlotReg
@ TIMES_COMPRESSED_HALF_WORD_SIZE
@ TIMES_COMPRESSED_WORD_SIZE
const Register THR
const Register kExceptionObjectReg
const RegList kReservedCpuRegisters
const Register kWriteBarrierObjectReg
const RegList kAllFpuRegistersList
const Register kWriteBarrierValueReg
uint16_t RegList
const char *const fpu_reg_names[kNumberOfFpuRegisters]
constexpr intptr_t kInt32SizeLog2
Definition globals.h:449
const FpuRegister FpuTMP
const Register CALLEE_SAVED_TEMP
uintptr_t uword
Definition globals.h:501
const Register CODE_REG
constexpr uword kBreakInstructionFiller
const Register TMP2
const Register ARGS_DESC_REG
@ kNumberOfCpuRegisters
@ kNoRegister
const int kNumberOfFpuRegisters
const RegList kAbiPreservedCpuRegs
constexpr RegList kDartAvailableCpuRegs
const Register TMP
const RegList kDartVolatileCpuRegs
const Register FPREG
const intptr_t kStoreBufferWrapperSize
constexpr int kRegisterAllocationBias
const int MAX_NOP_SIZE
const Register FUNCTION_REG
constexpr intptr_t kNumberOfReservedCpuRegisters
const Register IC_DATA_REG
const char *const cpu_reg_names[kNumberOfCpuRegisters]
const Register PP
@ kNoByteRegister
@ kNumberOfByteRegisters
QRegister FpuRegister
const Register kStackTraceObjectReg
const RegList kAllCpuRegistersList
const intptr_t kPreferredLoopAlignment
simd128_value_t fpu_register_t
const char *const cpu_reg_byte_names[kNumberOfByteRegisters]
const RegList kAbiVolatileFpuRegs
const Register CALLEE_SAVED_TEMP2
const Register SPREG
AlignmentStrategy
@ kAlignedToValueSizeBut8AlignedTo4
@ kAlignedToValueSize
@ kAlignedToWordSize
const char *const cpu_reg_abi_names[kNumberOfCpuRegisters]
const int kFpuRegisterSize
constexpr int kNumberOfDartAvailableCpuRegs
ByteRegister ByteRegisterOf(Register reg)
@ kNumberOfXmmRegisters
@ kNoXmmRegister
#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName)
Definition globals.h:593
static constexpr Register kResultReg
static constexpr Register kLengthReg
static constexpr Register kTypeArgumentsReg
static constexpr Register kResultReg
static constexpr Register kTempReg
static constexpr Register kFunctionReg
static constexpr Register kContextReg
static constexpr Register kResultReg
static constexpr Register kInstantiatorTypeArgsReg
static constexpr Register kScratchReg
static constexpr Register kTypeArgumentsReg
static constexpr Register kResultReg
static constexpr Register kTagsReg
static constexpr Register kShapeReg
static constexpr Register kResultReg
static constexpr Register kTemp1Reg
static constexpr Register kTemp2Reg
static constexpr Register kResultReg
static constexpr Register kShapeReg
static constexpr Register kValue2Reg
static constexpr Register kValue0Reg
static constexpr Register kTempReg
static constexpr Register kValue1Reg
static constexpr Register kLengthReg
static constexpr Register kResultReg
static constexpr Register kDstNameReg
static constexpr intptr_t kFunctionTAVSlotFromFp
static constexpr intptr_t kDstTypeSlotFromFp
static constexpr Register kSubtypeTestReg
static constexpr intptr_t kInstanceSlotFromFp
static constexpr intptr_t kInstantiatorTAVSlotFromFp
static constexpr Register kObjectReg
static constexpr Register kSubTypeReg
static constexpr Register kSuperTypeReg
static constexpr Register kFunctionTypeArgumentsReg
static constexpr Register kInstantiatorTypeArgumentsReg
static constexpr Register kDstNameReg
static constexpr Register kSuspendStateReg
static constexpr Register kTempReg
static constexpr Register kResultReg
static constexpr FpuRegister kValueReg
static constexpr Register kDestinationReg
static constexpr Register kSrcFrameReg
static constexpr Register kFrameSizeReg
static constexpr Register kSourceReg
static constexpr Register kTempReg
static constexpr Register kDstFrameReg
static constexpr Register kCpuRegistersForArgs[]
static constexpr FpuRegister kFpuRegistersForArgs[]
static constexpr Register kClassIdReg
static constexpr Register kResultReg
static constexpr Register kRecognizedKindReg
static constexpr FpuRegister kInputReg
static constexpr Register kArgsReg
static constexpr Register kFieldReg
static constexpr Register kResultReg
static constexpr Register kInstanceReg
static constexpr Register kAddressReg
static constexpr Register kScratchReg
static constexpr Register kAddressReg
static constexpr Register kScratchReg
static constexpr Register kResultReg
static constexpr Register kFieldReg
static constexpr Register kTypeArgsReg
static constexpr intptr_t kSavedRegisters
static constexpr Register kInstantiatorTypeArgumentsReg
static constexpr Register kScratchReg
static constexpr Register kResultTypeReg
static constexpr Register kUninstantiatedTypeArgumentsReg
static constexpr Register kResultTypeArgumentsReg
static constexpr Register kFunctionTypeArgumentsReg
static constexpr Register kFieldReg
static constexpr Register kLengthReg
static constexpr Register kIndexReg
static constexpr Register kStackTraceReg
static constexpr Register kExceptionReg
static constexpr Register kSrcFrameReg
static constexpr Register kDstFrameReg
static constexpr Register kFrameSizeReg
static constexpr Register kSuspendStateReg
static constexpr Register kExceptionReg
static constexpr Register kTempReg
static constexpr Register kResumePcReg
static constexpr Register kStackTraceReg
static constexpr Register kSuspendStateReg
static constexpr Register kResultReg
static constexpr Register kSrcFrameReg
static constexpr Register kFunctionDataReg
static constexpr Register kSuspendStateReg
static constexpr intptr_t kResumePcDistance
static constexpr Register kTempReg
static constexpr Register kArgumentReg
static constexpr Register kDstFrameReg
static constexpr Register kTypeArgsReg
static constexpr Register kFrameSizeReg
static constexpr Register kExceptionReg
static constexpr Register kSubtypeTestCacheReg
static constexpr Register kDstTypeReg
static constexpr Register kInstanceReg
static constexpr Register kFunctionTypeArgumentsReg
static constexpr Register kInstantiatorTypeArgumentsReg
static constexpr Register kSubtypeTestCacheResultReg
static constexpr Register kInstanceOfResultReg