5 #if V8_TARGET_ARCH_S390 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[] = {r2, r3, r4, r5, r6};
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[] = {r2, r3, r4, r5, r6};
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 r2; }
41 const Register LoadDescriptor::ReceiverRegister() {
return r3; }
42 const Register LoadDescriptor::NameRegister() {
return r4; }
43 const Register LoadDescriptor::SlotRegister() {
return r2; }
45 const Register LoadWithVectorDescriptor::VectorRegister() {
return r5; }
47 const Register StoreDescriptor::ReceiverRegister() {
return r3; }
48 const Register StoreDescriptor::NameRegister() {
return r4; }
49 const Register StoreDescriptor::ValueRegister() {
return r2; }
50 const Register StoreDescriptor::SlotRegister() {
return r6; }
52 const Register StoreWithVectorDescriptor::VectorRegister() {
return r5; }
54 const Register StoreTransitionDescriptor::SlotRegister() {
return r6; }
55 const Register StoreTransitionDescriptor::VectorRegister() {
return r5; }
56 const Register StoreTransitionDescriptor::MapRegister() {
return r7; }
58 const Register ApiGetterDescriptor::HolderRegister() {
return r2; }
59 const Register ApiGetterDescriptor::CallbackRegister() {
return r5; }
61 const Register GrowArrayElementsDescriptor::ObjectRegister() {
return r2; }
62 const Register GrowArrayElementsDescriptor::KeyRegister() {
return r5; }
65 const Register TypeConversionDescriptor::ArgumentRegister() {
return r2; }
67 void TypeofDescriptor::InitializePlatformSpecific(
68 CallInterfaceDescriptorData* data) {
69 Register registers[] = {r5};
70 data->InitializePlatformSpecific(arraysize(registers), registers);
73 void CallFunctionDescriptor::InitializePlatformSpecific(
74 CallInterfaceDescriptorData* data) {
75 Register registers[] = {r3};
76 data->InitializePlatformSpecific(arraysize(registers), registers);
79 void CallTrampolineDescriptor::InitializePlatformSpecific(
80 CallInterfaceDescriptorData* data) {
83 Register registers[] = {r3, r2};
84 data->InitializePlatformSpecific(arraysize(registers), registers);
87 void CallVarargsDescriptor::InitializePlatformSpecific(
88 CallInterfaceDescriptorData* data) {
93 Register registers[] = {r3, r2, r6, r4};
94 data->InitializePlatformSpecific(arraysize(registers), registers);
97 void CallForwardVarargsDescriptor::InitializePlatformSpecific(
98 CallInterfaceDescriptorData* data) {
102 Register registers[] = {r3, r2, r4};
103 data->InitializePlatformSpecific(arraysize(registers), registers);
106 void CallWithSpreadDescriptor::InitializePlatformSpecific(
107 CallInterfaceDescriptorData* data) {
111 Register registers[] = {r3, r2, r4};
112 data->InitializePlatformSpecific(arraysize(registers), registers);
115 void CallWithArrayLikeDescriptor::InitializePlatformSpecific(
116 CallInterfaceDescriptorData* data) {
119 Register registers[] = {r3, r4};
120 data->InitializePlatformSpecific(arraysize(registers), registers);
123 void ConstructVarargsDescriptor::InitializePlatformSpecific(
124 CallInterfaceDescriptorData* data) {
130 Register registers[] = {r3, r5, r2, r6, r4};
131 data->InitializePlatformSpecific(arraysize(registers), registers);
134 void ConstructForwardVarargsDescriptor::InitializePlatformSpecific(
135 CallInterfaceDescriptorData* data) {
140 Register registers[] = {r3, r5, r2, r4};
141 data->InitializePlatformSpecific(arraysize(registers), registers);
144 void ConstructWithSpreadDescriptor::InitializePlatformSpecific(
145 CallInterfaceDescriptorData* data) {
150 Register registers[] = {r3, r5, r2, r4};
151 data->InitializePlatformSpecific(arraysize(registers), registers);
154 void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific(
155 CallInterfaceDescriptorData* data) {
159 Register registers[] = {r3, r5, r4};
160 data->InitializePlatformSpecific(arraysize(registers), registers);
163 void ConstructStubDescriptor::InitializePlatformSpecific(
164 CallInterfaceDescriptorData* data) {
169 Register registers[] = {r3, r5, r2, r4};
170 data->InitializePlatformSpecific(arraysize(registers), registers);
173 void AbortDescriptor::InitializePlatformSpecific(
174 CallInterfaceDescriptorData* data) {
175 Register registers[] = {r3};
176 data->InitializePlatformSpecific(arraysize(registers), registers);
179 void AllocateHeapNumberDescriptor::InitializePlatformSpecific(
180 CallInterfaceDescriptorData* data) {
181 data->InitializePlatformSpecific(0,
nullptr);
184 void CompareDescriptor::InitializePlatformSpecific(
185 CallInterfaceDescriptorData* data) {
186 Register registers[] = {r3, r2};
187 data->InitializePlatformSpecific(arraysize(registers), registers);
190 void BinaryOpDescriptor::InitializePlatformSpecific(
191 CallInterfaceDescriptorData* data) {
192 Register registers[] = {r3, r2};
193 data->InitializePlatformSpecific(arraysize(registers), registers);
196 void ArgumentsAdaptorDescriptor::InitializePlatformSpecific(
197 CallInterfaceDescriptorData* data) {
198 Register registers[] = {
204 data->InitializePlatformSpecific(arraysize(registers), registers);
207 void ApiCallbackDescriptor::InitializePlatformSpecific(
208 CallInterfaceDescriptorData* data) {
209 Register registers[] = {
210 JavaScriptFrame::context_register(),
215 data->InitializePlatformSpecific(arraysize(registers), registers);
218 void InterpreterDispatchDescriptor::InitializePlatformSpecific(
219 CallInterfaceDescriptorData* data) {
220 Register registers[] = {
221 kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister,
222 kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister};
223 data->InitializePlatformSpecific(arraysize(registers), registers);
226 void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific(
227 CallInterfaceDescriptorData* data) {
228 Register registers[] = {
233 data->InitializePlatformSpecific(arraysize(registers), registers);
236 void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific(
237 CallInterfaceDescriptorData* data) {
238 Register registers[] = {
245 data->InitializePlatformSpecific(arraysize(registers), registers);
248 void ResumeGeneratorDescriptor::InitializePlatformSpecific(
249 CallInterfaceDescriptorData* data) {
250 Register registers[] = {
254 data->InitializePlatformSpecific(arraysize(registers), registers);
257 void FrameDropperTrampolineDescriptor::InitializePlatformSpecific(
258 CallInterfaceDescriptorData* data) {
259 Register registers[] = {
262 data->InitializePlatformSpecific(arraysize(registers), registers);
268 #endif // V8_TARGET_ARCH_S390