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[] = {r3, r4, r5, r6, r7};
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[] = {r3, r4, r5, r6, r7};
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 r3; }
41 const Register LoadDescriptor::ReceiverRegister() {
return r4; }
42 const Register LoadDescriptor::NameRegister() {
return r5; }
43 const Register LoadDescriptor::SlotRegister() {
return r3; }
45 const Register LoadWithVectorDescriptor::VectorRegister() {
return r6; }
47 const Register StoreDescriptor::ReceiverRegister() {
return r4; }
48 const Register StoreDescriptor::NameRegister() {
return r5; }
49 const Register StoreDescriptor::ValueRegister() {
return r3; }
50 const Register StoreDescriptor::SlotRegister() {
return r7; }
52 const Register StoreWithVectorDescriptor::VectorRegister() {
return r6; }
54 const Register StoreTransitionDescriptor::SlotRegister() {
return r7; }
55 const Register StoreTransitionDescriptor::VectorRegister() {
return r6; }
56 const Register StoreTransitionDescriptor::MapRegister() {
return r8; }
58 const Register ApiGetterDescriptor::HolderRegister() {
return r3; }
59 const Register ApiGetterDescriptor::CallbackRegister() {
return r6; }
61 const Register GrowArrayElementsDescriptor::ObjectRegister() {
return r3; }
62 const Register GrowArrayElementsDescriptor::KeyRegister() {
return r6; }
66 const Register TypeConversionDescriptor::ArgumentRegister() {
return r3; }
68 void TypeofDescriptor::InitializePlatformSpecific(
69 CallInterfaceDescriptorData* data) {
70 Register registers[] = {r6};
71 data->InitializePlatformSpecific(arraysize(registers), registers);
74 void CallFunctionDescriptor::InitializePlatformSpecific(
75 CallInterfaceDescriptorData* data) {
76 Register registers[] = {r4};
77 data->InitializePlatformSpecific(arraysize(registers), registers);
80 void CallTrampolineDescriptor::InitializePlatformSpecific(
81 CallInterfaceDescriptorData* data) {
84 Register registers[] = {r4, r3};
85 data->InitializePlatformSpecific(arraysize(registers), registers);
88 void CallVarargsDescriptor::InitializePlatformSpecific(
89 CallInterfaceDescriptorData* data) {
94 Register registers[] = {r4, r3, r7, r5};
95 data->InitializePlatformSpecific(arraysize(registers), registers);
98 void CallForwardVarargsDescriptor::InitializePlatformSpecific(
99 CallInterfaceDescriptorData* data) {
103 Register registers[] = {r4, r3, r5};
104 data->InitializePlatformSpecific(arraysize(registers), registers);
107 void CallWithSpreadDescriptor::InitializePlatformSpecific(
108 CallInterfaceDescriptorData* data) {
112 Register registers[] = {r4, r3, r5};
113 data->InitializePlatformSpecific(arraysize(registers), registers);
116 void CallWithArrayLikeDescriptor::InitializePlatformSpecific(
117 CallInterfaceDescriptorData* data) {
120 Register registers[] = {r4, r5};
121 data->InitializePlatformSpecific(arraysize(registers), registers);
124 void ConstructVarargsDescriptor::InitializePlatformSpecific(
125 CallInterfaceDescriptorData* data) {
131 Register registers[] = {r4, r6, r3, r7, r5};
132 data->InitializePlatformSpecific(arraysize(registers), registers);
135 void ConstructForwardVarargsDescriptor::InitializePlatformSpecific(
136 CallInterfaceDescriptorData* data) {
141 Register registers[] = {r4, r6, r3, r5};
142 data->InitializePlatformSpecific(arraysize(registers), registers);
145 void ConstructWithSpreadDescriptor::InitializePlatformSpecific(
146 CallInterfaceDescriptorData* data) {
151 Register registers[] = {r4, r6, r3, r5};
152 data->InitializePlatformSpecific(arraysize(registers), registers);
155 void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific(
156 CallInterfaceDescriptorData* data) {
160 Register registers[] = {r4, r6, r5};
161 data->InitializePlatformSpecific(arraysize(registers), registers);
164 void ConstructStubDescriptor::InitializePlatformSpecific(
165 CallInterfaceDescriptorData* data) {
170 Register registers[] = {r4, r6, r3, r5};
171 data->InitializePlatformSpecific(arraysize(registers), registers);
174 void AbortDescriptor::InitializePlatformSpecific(
175 CallInterfaceDescriptorData* data) {
176 Register registers[] = {r4};
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[] = {r4, r3};
188 data->InitializePlatformSpecific(arraysize(registers), registers);
192 void BinaryOpDescriptor::InitializePlatformSpecific(
193 CallInterfaceDescriptorData* data) {
194 Register registers[] = {r4, r3};
195 data->InitializePlatformSpecific(arraysize(registers), registers);
198 void ArgumentsAdaptorDescriptor::InitializePlatformSpecific(
199 CallInterfaceDescriptorData* data) {
200 Register registers[] = {
206 data->InitializePlatformSpecific(arraysize(registers), registers);
209 void ApiCallbackDescriptor::InitializePlatformSpecific(
210 CallInterfaceDescriptorData* data) {
211 Register registers[] = {
212 JavaScriptFrame::context_register(),
217 data->InitializePlatformSpecific(arraysize(registers), registers);
220 void InterpreterDispatchDescriptor::InitializePlatformSpecific(
221 CallInterfaceDescriptorData* data) {
222 Register registers[] = {
223 kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister,
224 kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister};
225 data->InitializePlatformSpecific(arraysize(registers), registers);
228 void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific(
229 CallInterfaceDescriptorData* data) {
230 Register registers[] = {
235 data->InitializePlatformSpecific(arraysize(registers), registers);
238 void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific(
239 CallInterfaceDescriptorData* data) {
240 Register registers[] = {
247 data->InitializePlatformSpecific(arraysize(registers), registers);
250 void ResumeGeneratorDescriptor::InitializePlatformSpecific(
251 CallInterfaceDescriptorData* data) {
252 Register registers[] = {
256 data->InitializePlatformSpecific(arraysize(registers), registers);
259 void FrameDropperTrampolineDescriptor::InitializePlatformSpecific(
260 CallInterfaceDescriptorData* data) {
261 Register registers[] = {
264 data->InitializePlatformSpecific(arraysize(registers), registers);
270 #endif // V8_TARGET_ARCH_PPC