5 #if V8_TARGET_ARCH_ARM64 7 #include "src/interface-descriptors.h" 8 #include "src/macro-assembler.h" 13 const Register CallInterfaceDescriptor::ContextRegister() {
return cp; }
15 void CallInterfaceDescriptor::DefaultInitializePlatformSpecific(
16 CallInterfaceDescriptorData* data,
int register_parameter_count) {
17 const Register default_stub_registers[] = {x0, x1, x2, x3, x4};
18 CHECK_LE(static_cast<size_t>(register_parameter_count),
19 arraysize(default_stub_registers));
20 data->InitializePlatformSpecific(register_parameter_count,
21 default_stub_registers);
24 void RecordWriteDescriptor::InitializePlatformSpecific(
25 CallInterfaceDescriptorData* data) {
26 const Register default_stub_registers[] = {x0, x1, x2, x3, x4};
28 data->RestrictAllocatableRegisters(default_stub_registers,
29 arraysize(default_stub_registers));
31 CHECK_LE(static_cast<size_t>(kParameterCount),
32 arraysize(default_stub_registers));
33 data->InitializePlatformSpecific(kParameterCount, default_stub_registers);
36 const Register FastNewFunctionContextDescriptor::ScopeInfoRegister() {
39 const Register FastNewFunctionContextDescriptor::SlotsRegister() {
return x0; }
41 const Register LoadDescriptor::ReceiverRegister() {
return x1; }
42 const Register LoadDescriptor::NameRegister() {
return x2; }
43 const Register LoadDescriptor::SlotRegister() {
return x0; }
45 const Register LoadWithVectorDescriptor::VectorRegister() {
return x3; }
47 const Register StoreDescriptor::ReceiverRegister() {
return x1; }
48 const Register StoreDescriptor::NameRegister() {
return x2; }
49 const Register StoreDescriptor::ValueRegister() {
return x0; }
50 const Register StoreDescriptor::SlotRegister() {
return x4; }
52 const Register StoreWithVectorDescriptor::VectorRegister() {
return x3; }
54 const Register StoreTransitionDescriptor::SlotRegister() {
return x4; }
55 const Register StoreTransitionDescriptor::VectorRegister() {
return x3; }
56 const Register StoreTransitionDescriptor::MapRegister() {
return x5; }
58 const Register ApiGetterDescriptor::HolderRegister() {
return x0; }
59 const Register ApiGetterDescriptor::CallbackRegister() {
return x3; }
61 const Register GrowArrayElementsDescriptor::ObjectRegister() {
return x0; }
62 const Register GrowArrayElementsDescriptor::KeyRegister() {
return x3; }
66 const Register TypeConversionDescriptor::ArgumentRegister() {
return x0; }
68 void TypeofDescriptor::InitializePlatformSpecific(
69 CallInterfaceDescriptorData* data) {
70 Register registers[] = {x3};
71 data->InitializePlatformSpecific(arraysize(registers), registers);
74 void CallFunctionDescriptor::InitializePlatformSpecific(
75 CallInterfaceDescriptorData* data) {
77 Register registers[] = {x1};
78 data->InitializePlatformSpecific(arraysize(registers), registers);
81 void CallTrampolineDescriptor::InitializePlatformSpecific(
82 CallInterfaceDescriptorData* data) {
85 Register registers[] = {x1, x0};
86 data->InitializePlatformSpecific(arraysize(registers), registers);
89 void CallVarargsDescriptor::InitializePlatformSpecific(
90 CallInterfaceDescriptorData* data) {
95 Register registers[] = {x1, x0, x4, x2};
96 data->InitializePlatformSpecific(arraysize(registers), registers);
99 void CallForwardVarargsDescriptor::InitializePlatformSpecific(
100 CallInterfaceDescriptorData* data) {
104 Register registers[] = {x1, x0, x2};
105 data->InitializePlatformSpecific(arraysize(registers), registers);
108 void CallWithSpreadDescriptor::InitializePlatformSpecific(
109 CallInterfaceDescriptorData* data) {
113 Register registers[] = {x1, x0, x2};
114 data->InitializePlatformSpecific(arraysize(registers), registers);
117 void CallWithArrayLikeDescriptor::InitializePlatformSpecific(
118 CallInterfaceDescriptorData* data) {
121 Register registers[] = {x1, x2};
122 data->InitializePlatformSpecific(arraysize(registers), registers);
125 void ConstructVarargsDescriptor::InitializePlatformSpecific(
126 CallInterfaceDescriptorData* data) {
132 Register registers[] = {x1, x3, x0, x4, x2};
133 data->InitializePlatformSpecific(arraysize(registers), registers);
136 void ConstructForwardVarargsDescriptor::InitializePlatformSpecific(
137 CallInterfaceDescriptorData* data) {
142 Register registers[] = {x1, x3, x0, x2};
143 data->InitializePlatformSpecific(arraysize(registers), registers);
146 void ConstructWithSpreadDescriptor::InitializePlatformSpecific(
147 CallInterfaceDescriptorData* data) {
152 Register registers[] = {x1, x3, x0, x2};
153 data->InitializePlatformSpecific(arraysize(registers), registers);
156 void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific(
157 CallInterfaceDescriptorData* data) {
161 Register registers[] = {x1, x3, x2};
162 data->InitializePlatformSpecific(arraysize(registers), registers);
165 void ConstructStubDescriptor::InitializePlatformSpecific(
166 CallInterfaceDescriptorData* data) {
171 Register registers[] = {x1, x3, x0, x2};
172 data->InitializePlatformSpecific(arraysize(registers), registers);
175 void AbortDescriptor::InitializePlatformSpecific(
176 CallInterfaceDescriptorData* data) {
177 Register registers[] = {x1};
178 data->InitializePlatformSpecific(arraysize(registers), registers);
181 void AllocateHeapNumberDescriptor::InitializePlatformSpecific(
182 CallInterfaceDescriptorData* data) {
183 data->InitializePlatformSpecific(0,
nullptr);
186 void CompareDescriptor::InitializePlatformSpecific(
187 CallInterfaceDescriptorData* data) {
190 Register registers[] = {x1, x0};
191 data->InitializePlatformSpecific(arraysize(registers), registers);
194 void BinaryOpDescriptor::InitializePlatformSpecific(
195 CallInterfaceDescriptorData* data) {
198 Register registers[] = {x1, x0};
199 data->InitializePlatformSpecific(arraysize(registers), registers);
202 void ArgumentsAdaptorDescriptor::InitializePlatformSpecific(
203 CallInterfaceDescriptorData* data) {
204 Register registers[] = {
210 data->InitializePlatformSpecific(arraysize(registers), registers);
213 void ApiCallbackDescriptor::InitializePlatformSpecific(
214 CallInterfaceDescriptorData* data) {
215 Register registers[] = {
216 JavaScriptFrame::context_register(),
221 data->InitializePlatformSpecific(arraysize(registers), registers);
224 void InterpreterDispatchDescriptor::InitializePlatformSpecific(
225 CallInterfaceDescriptorData* data) {
226 Register registers[] = {
227 kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister,
228 kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister};
229 data->InitializePlatformSpecific(arraysize(registers), registers);
232 void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific(
233 CallInterfaceDescriptorData* data) {
234 Register registers[] = {
239 data->InitializePlatformSpecific(arraysize(registers), registers);
242 void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific(
243 CallInterfaceDescriptorData* data) {
244 Register registers[] = {
251 data->InitializePlatformSpecific(arraysize(registers), registers);
254 void ResumeGeneratorDescriptor::InitializePlatformSpecific(
255 CallInterfaceDescriptorData* data) {
256 Register registers[] = {
260 data->InitializePlatformSpecific(arraysize(registers), registers);
263 void FrameDropperTrampolineDescriptor::InitializePlatformSpecific(
264 CallInterfaceDescriptorData* data) {
265 Register registers[] = {
268 data->InitializePlatformSpecific(arraysize(registers), registers);
274 #endif // V8_TARGET_ARCH_ARM64