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[] = {r0, r1, r2, r3, r4};
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[] = {r0, r1, r2, r3, r4};
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 r0; }
41 const Register LoadDescriptor::ReceiverRegister() {
return r1; }
42 const Register LoadDescriptor::NameRegister() {
return r2; }
43 const Register LoadDescriptor::SlotRegister() {
return r0; }
45 const Register LoadWithVectorDescriptor::VectorRegister() {
return r3; }
47 const Register StoreDescriptor::ReceiverRegister() {
return r1; }
48 const Register StoreDescriptor::NameRegister() {
return r2; }
49 const Register StoreDescriptor::ValueRegister() {
return r0; }
50 const Register StoreDescriptor::SlotRegister() {
return r4; }
52 const Register StoreWithVectorDescriptor::VectorRegister() {
return r3; }
54 const Register StoreTransitionDescriptor::SlotRegister() {
return r4; }
55 const Register StoreTransitionDescriptor::VectorRegister() {
return r3; }
56 const Register StoreTransitionDescriptor::MapRegister() {
return r5; }
58 const Register ApiGetterDescriptor::HolderRegister() {
return r0; }
59 const Register ApiGetterDescriptor::CallbackRegister() {
return r3; }
61 const Register GrowArrayElementsDescriptor::ObjectRegister() {
return r0; }
62 const Register GrowArrayElementsDescriptor::KeyRegister() {
return r3; }
66 const Register TypeConversionDescriptor::ArgumentRegister() {
return r0; }
68 void TypeofDescriptor::InitializePlatformSpecific(
69 CallInterfaceDescriptorData* data) {
70 Register registers[] = {r3};
71 data->InitializePlatformSpecific(arraysize(registers), registers);
74 void CallFunctionDescriptor::InitializePlatformSpecific(
75 CallInterfaceDescriptorData* data) {
76 Register registers[] = {r1};
77 data->InitializePlatformSpecific(arraysize(registers), registers);
80 void CallTrampolineDescriptor::InitializePlatformSpecific(
81 CallInterfaceDescriptorData* data) {
84 Register registers[] = {r1, r0};
85 data->InitializePlatformSpecific(arraysize(registers), registers);
88 void CallVarargsDescriptor::InitializePlatformSpecific(
89 CallInterfaceDescriptorData* data) {
94 Register registers[] = {r1, r0, r4, r2};
95 data->InitializePlatformSpecific(arraysize(registers), registers);
98 void CallForwardVarargsDescriptor::InitializePlatformSpecific(
99 CallInterfaceDescriptorData* data) {
103 Register registers[] = {r1, r0, r2};
104 data->InitializePlatformSpecific(arraysize(registers), registers);
107 void CallWithSpreadDescriptor::InitializePlatformSpecific(
108 CallInterfaceDescriptorData* data) {
112 Register registers[] = {r1, r0, r2};
113 data->InitializePlatformSpecific(arraysize(registers), registers);
116 void CallWithArrayLikeDescriptor::InitializePlatformSpecific(
117 CallInterfaceDescriptorData* data) {
120 Register registers[] = {r1, r2};
121 data->InitializePlatformSpecific(arraysize(registers), registers);
124 void ConstructVarargsDescriptor::InitializePlatformSpecific(
125 CallInterfaceDescriptorData* data) {
131 Register registers[] = {r1, r3, r0, r4, r2};
132 data->InitializePlatformSpecific(arraysize(registers), registers);
135 void ConstructForwardVarargsDescriptor::InitializePlatformSpecific(
136 CallInterfaceDescriptorData* data) {
141 Register registers[] = {r1, r3, r0, r2};
142 data->InitializePlatformSpecific(arraysize(registers), registers);
145 void ConstructWithSpreadDescriptor::InitializePlatformSpecific(
146 CallInterfaceDescriptorData* data) {
151 Register registers[] = {r1, r3, r0, r2};
152 data->InitializePlatformSpecific(arraysize(registers), registers);
155 void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific(
156 CallInterfaceDescriptorData* data) {
160 Register registers[] = {r1, r3, r2};
161 data->InitializePlatformSpecific(arraysize(registers), registers);
164 void ConstructStubDescriptor::InitializePlatformSpecific(
165 CallInterfaceDescriptorData* data) {
170 Register registers[] = {r1, r3, r0, r2};
171 data->InitializePlatformSpecific(arraysize(registers), registers);
174 void AbortDescriptor::InitializePlatformSpecific(
175 CallInterfaceDescriptorData* data) {
176 Register registers[] = {r1};
177 data->InitializePlatformSpecific(arraysize(registers), registers);
180 void AllocateHeapNumberDescriptor::InitializePlatformSpecific(
181 CallInterfaceDescriptorData* data) {
182 data->InitializePlatformSpecific(0,
nullptr);
185 void CompareDescriptor::InitializePlatformSpecific(
186 CallInterfaceDescriptorData* data) {
187 Register registers[] = {r1, r0};
188 data->InitializePlatformSpecific(arraysize(registers), registers);
191 void BinaryOpDescriptor::InitializePlatformSpecific(
192 CallInterfaceDescriptorData* data) {
193 Register registers[] = {r1, r0};
194 data->InitializePlatformSpecific(arraysize(registers), registers);
197 void ArgumentsAdaptorDescriptor::InitializePlatformSpecific(
198 CallInterfaceDescriptorData* data) {
199 Register registers[] = {
205 data->InitializePlatformSpecific(arraysize(registers), registers);
208 void ApiCallbackDescriptor::InitializePlatformSpecific(
209 CallInterfaceDescriptorData* data) {
210 Register registers[] = {
211 JavaScriptFrame::context_register(),
216 data->InitializePlatformSpecific(arraysize(registers), registers);
219 void InterpreterDispatchDescriptor::InitializePlatformSpecific(
220 CallInterfaceDescriptorData* data) {
221 Register registers[] = {
222 kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister,
223 kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister};
224 data->InitializePlatformSpecific(arraysize(registers), registers);
227 void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific(
228 CallInterfaceDescriptorData* data) {
229 Register registers[] = {
234 data->InitializePlatformSpecific(arraysize(registers), registers);
237 void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific(
238 CallInterfaceDescriptorData* data) {
239 Register registers[] = {
246 data->InitializePlatformSpecific(arraysize(registers), registers);
249 void ResumeGeneratorDescriptor::InitializePlatformSpecific(
250 CallInterfaceDescriptorData* data) {
251 Register registers[] = {
255 data->InitializePlatformSpecific(arraysize(registers), registers);
258 void FrameDropperTrampolineDescriptor::InitializePlatformSpecific(
259 CallInterfaceDescriptorData* data) {
260 Register registers[] = {
263 data->InitializePlatformSpecific(arraysize(registers), registers);
269 #endif // V8_TARGET_ARCH_ARM