13b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Copyright 2015 the V8 project authors. All rights reserved.
23b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
33b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// found in the LICENSE file.
43b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
53b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#if V8_TARGET_ARCH_S390
63b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
73b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include "src/interface-descriptors.h"
83b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
93b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochnamespace v8 {
103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochnamespace internal {
113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register CallInterfaceDescriptor::ContextRegister() { return cp; }
133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
1413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochvoid CallInterfaceDescriptor::DefaultInitializePlatformSpecific(
1513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch    CallInterfaceDescriptorData* data, int register_parameter_count) {
1613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch  const Register default_stub_registers[] = {r2, r3, r4, r5, r6};
1713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch  CHECK_LE(static_cast<size_t>(register_parameter_count),
1813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch           arraysize(default_stub_registers));
1913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch  data->InitializePlatformSpecific(register_parameter_count,
2013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch                                   default_stub_registers);
2113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch}
2213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch
23f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochconst Register FastNewFunctionContextDescriptor::FunctionRegister() {
24f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  return r3;
25f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}
26f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochconst Register FastNewFunctionContextDescriptor::SlotsRegister() { return r2; }
27f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register LoadDescriptor::ReceiverRegister() { return r3; }
293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register LoadDescriptor::NameRegister() { return r4; }
303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register LoadDescriptor::SlotRegister() { return r2; }
313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register LoadWithVectorDescriptor::VectorRegister() { return r5; }
333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
34c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdochconst Register LoadICProtoArrayDescriptor::HandlerRegister() { return r6; }
35c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch
363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register StoreDescriptor::ReceiverRegister() { return r3; }
373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register StoreDescriptor::NameRegister() { return r4; }
383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register StoreDescriptor::ValueRegister() { return r2; }
39f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochconst Register StoreDescriptor::SlotRegister() { return r6; }
403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
41f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochconst Register StoreWithVectorDescriptor::VectorRegister() { return r5; }
423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
43f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochconst Register StoreTransitionDescriptor::SlotRegister() { return r6; }
44f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochconst Register StoreTransitionDescriptor::VectorRegister() { return r5; }
45f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochconst Register StoreTransitionDescriptor::MapRegister() { return r7; }
463b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
473b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register StringCompareDescriptor::LeftRegister() { return r3; }
483b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register StringCompareDescriptor::RightRegister() { return r2; }
493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
50bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochconst Register ApiGetterDescriptor::HolderRegister() { return r2; }
51bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochconst Register ApiGetterDescriptor::CallbackRegister() { return r5; }
523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register MathPowTaggedDescriptor::exponent() { return r4; }
543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register MathPowIntegerDescriptor::exponent() {
563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  return MathPowTaggedDescriptor::exponent();
573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register GrowArrayElementsDescriptor::ObjectRegister() { return r2; }
603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register GrowArrayElementsDescriptor::KeyRegister() { return r5; }
613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid FastNewClosureDescriptor::InitializePlatformSpecific(
633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
6462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  Register registers[] = {r3, r4, r5};
653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch// static
693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register TypeConversionDescriptor::ArgumentRegister() { return r2; }
703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid TypeofDescriptor::InitializePlatformSpecific(
723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r5};
743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid FastCloneRegExpDescriptor::InitializePlatformSpecific(
783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r5, r4, r3, r2};
803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid FastCloneShallowArrayDescriptor::InitializePlatformSpecific(
843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r5, r4, r3};
863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid FastCloneShallowObjectDescriptor::InitializePlatformSpecific(
903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r5, r4, r3, r2};
923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid CreateAllocationSiteDescriptor::InitializePlatformSpecific(
963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r4, r5};
983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
1013b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid CreateWeakCellDescriptor::InitializePlatformSpecific(
1023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
1033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r4, r5, r3};
1043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
1073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid CallFunctionDescriptor::InitializePlatformSpecific(
1083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
1093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r3};
1103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
11362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid CallICTrampolineDescriptor::InitializePlatformSpecific(
1143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
11562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  Register registers[] = {r3, r2, r5};
1163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
11962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid CallICDescriptor::InitializePlatformSpecific(
1203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
121c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch  Register registers[] = {r3, r2, r5, r4};
1223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
1253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid CallConstructDescriptor::InitializePlatformSpecific(
1263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
1273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r2 : number of arguments
1283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r3 : the function to call
1293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r4 : feedback vector
1303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r5 : slot in feedback vector (Smi, for RecordCallTarget)
1313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r6 : new target (for IsSuperConstructorCall)
1323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // TODO(turbofan): So far we don't gather type feedback and hence skip the
1333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // slot parameter, but ArrayConstructStub needs the vector to be undefined.
1343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r2, r3, r6, r4};
1353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
1383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid CallTrampolineDescriptor::InitializePlatformSpecific(
1393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
1403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r2 : number of arguments
1413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r3 : the target to call
1423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r3, r2};
1433b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1443b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1453b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
14662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid CallForwardVarargsDescriptor::InitializePlatformSpecific(
14762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch    CallInterfaceDescriptorData* data) {
14862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  // r4 : start index (to support rest parameters)
14962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  // r3 : the target to call
15062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  Register registers[] = {r3, r4};
15162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
15262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch}
15362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch
1543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid ConstructStubDescriptor::InitializePlatformSpecific(
1553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
1563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r2 : number of arguments
1573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r3 : the target to call
1583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r5 : the new target
1593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r4 : allocation site or undefined
1603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r3, r5, r2, r4};
1613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
1643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid ConstructTrampolineDescriptor::InitializePlatformSpecific(
1653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
1663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r2 : number of arguments
1673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r3 : the target to call
1683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r5 : the new target
1693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r3, r5, r2};
1703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
1733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid TransitionElementsKindDescriptor::InitializePlatformSpecific(
1743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
1753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r2, r3};
1763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
1793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid AllocateHeapNumberDescriptor::InitializePlatformSpecific(
1803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
1813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(0, nullptr, nullptr);
1823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
1833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
18462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid ArrayConstructorDescriptor::InitializePlatformSpecific(
18562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch    CallInterfaceDescriptorData* data) {
18662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  // kTarget, kNewTarget, kActualArgumentsCount, kAllocationSite
18762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  Register registers[] = {r3, r5, r2, r4};
18862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers, NULL);
18962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch}
1903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
191bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochvoid ArrayNoArgumentConstructorDescriptor::InitializePlatformSpecific(
1923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
193bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  // register state
194bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  // r2 -- number of arguments
195bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  // r3 -- function
196bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  // r4 -- allocation site with elements kind
197bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  Register registers[] = {r3, r4, r2};
1983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
1993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
20113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochvoid ArraySingleArgumentConstructorDescriptor::InitializePlatformSpecific(
2023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // register state
2043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r2 -- number of arguments
2053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r3 -- function
2063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // r4 -- allocation site with elements kind
2073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r3, r4, r2};
20813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers, NULL);
2093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
21113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochvoid ArrayNArgumentsConstructorDescriptor::InitializePlatformSpecific(
2123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // stack param count needs (constructor pointer, and single argument)
21413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch  Register registers[] = {r3, r4, r2};
2153b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2163b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
21813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochvoid VarArgFunctionDescriptor::InitializePlatformSpecific(
2193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  // stack param count needs (arg count)
2213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r2};
2223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
2253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid CompareDescriptor::InitializePlatformSpecific(
2263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r3, r2};
2283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
2313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid BinaryOpDescriptor::InitializePlatformSpecific(
2323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r3, r2};
2343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2363b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
2373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid BinaryOpWithAllocationSiteDescriptor::InitializePlatformSpecific(
2383b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r4, r3, r2};
2403b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2423b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
243f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochvoid BinaryOpWithVectorDescriptor::InitializePlatformSpecific(
244f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    CallInterfaceDescriptorData* data) {
245f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  // register state
246f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  // r3 -- lhs
247f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  // r2 -- rhs
248f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  // r6 -- slot id
249f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  // r5 -- vector
250f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  Register registers[] = {r3, r2, r6, r5};
251f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
252f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}
253f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch
254bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochvoid CountOpDescriptor::InitializePlatformSpecific(
255bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch    CallInterfaceDescriptorData* data) {
256bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  Register registers[] = {r4};
257bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
258bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch}
259bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch
2603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid StringAddDescriptor::InitializePlatformSpecific(
2613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {r3, r2};
2633b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2643b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2653b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
2663b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid KeyedDescriptor::InitializePlatformSpecific(
2673b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2683b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {
2693b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r4,  // key
2703b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  };
2713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
2743b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid NamedDescriptor::InitializePlatformSpecific(
2753b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2763b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {
2773b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r4,  // name
2783b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  };
2793b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2803b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
2823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid CallHandlerDescriptor::InitializePlatformSpecific(
2833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {
2853b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r2,  // receiver
2863b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  };
2873b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2883b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
2893b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
2903b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid ArgumentAdaptorDescriptor::InitializePlatformSpecific(
2913b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
2923b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {
2933b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r3,  // JSFunction
2943b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r5,  // the new target
2953b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r2,  // actual number of arguments
2963b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r4,  // expected number of arguments
2973b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  };
2983b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
2993b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
3003b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
301f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochvoid ApiCallbackDescriptor::InitializePlatformSpecific(
3023b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
3033b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {
3043b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r2,  // callee
3053b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r6,  // call_data
3063b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r4,  // holder
3073b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r3,  // api_function_address
3083b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  };
3093b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
3103b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
3113b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
3123b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid InterpreterDispatchDescriptor::InitializePlatformSpecific(
3133b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
3143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {
315bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch      kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister,
316bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch      kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister};
3173b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
3183b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
3193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
3203b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid InterpreterPushArgsAndCallDescriptor::InitializePlatformSpecific(
3213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
3223b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {
3233b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r2,  // argument count (not including receiver)
3243b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r4,  // address of first argument
3253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r3   // the target callable to be call
3263b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  };
3273b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
3283b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
3293b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
3303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid InterpreterPushArgsAndConstructDescriptor::InitializePlatformSpecific(
3313b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
3323b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {
3333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r2,  // argument count (not including receiver)
3343b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r5,  // new target
3353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r3,  // constructor to call
336f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch      r4,  // allocation site feedback if available, undefined otherwise
337f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch      r6   // address of the first argument
338f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  };
339f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
340f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch}
341f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch
342f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochvoid InterpreterPushArgsAndConstructArrayDescriptor::InitializePlatformSpecific(
343f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch    CallInterfaceDescriptorData* data) {
344f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch  Register registers[] = {
345f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch      r2,  // argument count (not including receiver)
346f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch      r3,  // target to call checked to be Array function
347f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch      r4,  // allocation site feedback if available, undefined otherwise
348f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch      r5   // address of the first argument
3493b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  };
3503b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
3513b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
3523b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
3533b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid InterpreterCEntryDescriptor::InitializePlatformSpecific(
3543b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    CallInterfaceDescriptorData* data) {
3553b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  Register registers[] = {
3563b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r2,  // argument count (argc)
3573b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r4,  // address of first argument (argv)
3583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      r3   // the runtime function to call
3593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  };
3603b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
3613b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}
3623b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
363bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochvoid ResumeGeneratorDescriptor::InitializePlatformSpecific(
364bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch    CallInterfaceDescriptorData* data) {
365bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  Register registers[] = {
366bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch      r2,  // the value to pass to the generator
367bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch      r3,  // the JSGeneratorObject to resume
368bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch      r4   // the resume mode (tagged)
369bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  };
370bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
371bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch}
372bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch
37362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid FrameDropperTrampolineDescriptor::InitializePlatformSpecific(
37462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch    CallInterfaceDescriptorData* data) {
37562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  Register registers[] = {
37662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch      r3,  // loaded new FP
37762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  };
37862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch  data->InitializePlatformSpecific(arraysize(registers), registers);
37962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch}
38062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch
3813b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}  // namespace internal
3823b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch}  // namespace v8
3833b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch
3843b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#endif  // V8_TARGET_ARCH_S390
385