1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#if V8_TARGET_ARCH_MIPS64 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/interface-descriptors.h" 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace internal { 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Register CallInterfaceDescriptor::ContextRegister() { return cp; } 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochvoid CallInterfaceDescriptor::DefaultInitializePlatformSpecific( 1513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch CallInterfaceDescriptorData* data, int register_parameter_count) { 1613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch const Register default_stub_registers[] = {a0, a1, a2, a3, a4}; 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} 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 23f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochconst Register FastNewFunctionContextDescriptor::FunctionRegister() { 24f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch return a1; 25f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 26f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochconst Register FastNewFunctionContextDescriptor::SlotsRegister() { return a0; } 27f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Register LoadDescriptor::ReceiverRegister() { return a1; } 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Register LoadDescriptor::NameRegister() { return a2; } 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Register LoadDescriptor::SlotRegister() { return a0; } 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Register LoadWithVectorDescriptor::VectorRegister() { return a3; } 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 34c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdochconst Register LoadICProtoArrayDescriptor::HandlerRegister() { return a4; } 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Register StoreDescriptor::ReceiverRegister() { return a1; } 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Register StoreDescriptor::NameRegister() { return a2; } 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Register StoreDescriptor::ValueRegister() { return a0; } 39f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochconst Register StoreDescriptor::SlotRegister() { return a4; } 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 41f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochconst Register StoreWithVectorDescriptor::VectorRegister() { return a3; } 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 43f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochconst Register StoreTransitionDescriptor::SlotRegister() { return a4; } 44f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochconst Register StoreTransitionDescriptor::VectorRegister() { return a3; } 45f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochconst Register StoreTransitionDescriptor::MapRegister() { return a5; } 46958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Register StringCompareDescriptor::LeftRegister() { return a1; } 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Register StringCompareDescriptor::RightRegister() { return a0; } 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 50bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochconst Register ApiGetterDescriptor::HolderRegister() { return a0; } 51bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochconst Register ApiGetterDescriptor::CallbackRegister() { return a3; } 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Register MathPowTaggedDescriptor::exponent() { return a2; } 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst Register MathPowIntegerDescriptor::exponent() { 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return MathPowTaggedDescriptor::exponent(); 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Register GrowArrayElementsDescriptor::ObjectRegister() { return a0; } 62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst Register GrowArrayElementsDescriptor::KeyRegister() { return a3; } 63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 65014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastNewClosureDescriptor::InitializePlatformSpecific( 66014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 6762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Register registers[] = {a1, a2, a3}; 68014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 69014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 70014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 71014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// static 723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochconst Register TypeConversionDescriptor::ArgumentRegister() { return a0; } 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 74014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid TypeofDescriptor::InitializePlatformSpecific( 75014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 76014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a3}; 77014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 78b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 81014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastCloneRegExpDescriptor::InitializePlatformSpecific( 82014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 83014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a3, a2, a1, a0}; 84014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 88014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastCloneShallowArrayDescriptor::InitializePlatformSpecific( 89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptorData* data) { 90014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a3, a2, a1}; 91014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 94b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 95014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastCloneShallowObjectDescriptor::InitializePlatformSpecific( 96b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptorData* data) { 97014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a3, a2, a1, a0}; 98014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 99b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 100b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 101b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 102014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid CreateAllocationSiteDescriptor::InitializePlatformSpecific( 103b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptorData* data) { 104014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a2, a3}; 105014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 109014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid CreateWeakCellDescriptor::InitializePlatformSpecific( 110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptorData* data) { 111014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a2, a3, a1}; 112014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 11562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid CallICTrampolineDescriptor::InitializePlatformSpecific( 116014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 11762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Register registers[] = {a1, a0, a3}; 118014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 12162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid CallICDescriptor::InitializePlatformSpecific( 122014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 123c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch Register registers[] = {a1, a0, a3, a2}; 124014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 125014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 126014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 127014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 128014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid CallFunctionDescriptor::InitializePlatformSpecific( 129014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 130014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a1}; 131014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 132014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 133014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 134014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 135014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid CallConstructDescriptor::InitializePlatformSpecific( 136014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // a0 : number of arguments 138b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // a1 : the function to call 139b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // a2 : feedback vector 140014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a3 : slot in feedback vector (Smi, for RecordCallTarget) 141014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a4 : new target (for IsSuperConstructorCall) 142b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // TODO(turbofan): So far we don't gather type feedback and hence skip the 143b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // slot parameter, but ArrayConstructStub needs the vector to be undefined. 144014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a0, a1, a4, a2}; 145014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 148b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 149014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid CallTrampolineDescriptor::InitializePlatformSpecific( 150b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptorData* data) { 151014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a1: target 152014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a0: number of arguments 153014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a1, a0}; 154014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 155b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 156b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 15762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid CallForwardVarargsDescriptor::InitializePlatformSpecific( 15862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch CallInterfaceDescriptorData* data) { 15962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // a1: the target to call 16062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // a2: start index (to support rest parameters) 16162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Register registers[] = {a1, a2}; 16262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 16362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch} 164b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 165014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid ConstructStubDescriptor::InitializePlatformSpecific( 166b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptorData* data) { 167014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a1: target 168014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a3: new target 169014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a0: number of arguments 170014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a2: allocation site or undefined 171014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a1, a3, a0, a2}; 172014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 173b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 174b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 175b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 176014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid ConstructTrampolineDescriptor::InitializePlatformSpecific( 177014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 178014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a1: target 179014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a3: new target 180014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // a0: number of arguments 181014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a1, a3, a0}; 182014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 183014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 184014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 185014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 186014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid TransitionElementsKindDescriptor::InitializePlatformSpecific( 187014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 188014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a0, a1}; 189014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 190014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 191014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 192014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 193014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid AllocateHeapNumberDescriptor::InitializePlatformSpecific( 194958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CallInterfaceDescriptorData* data) { 195958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // register state 196014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(0, nullptr, nullptr); 197014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 198014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 19962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid ArrayConstructorDescriptor::InitializePlatformSpecific( 20062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch CallInterfaceDescriptorData* data) { 20162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // kTarget, kNewTarget, kActualArgumentsCount, kAllocationSite 20262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Register registers[] = {a1, a3, a0, a2}; 20362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 20462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch} 205014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 206bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochvoid ArrayNoArgumentConstructorDescriptor::InitializePlatformSpecific( 207014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 208bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch // register state 209bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch // a0 -- number of arguments 210bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch // a1 -- function 211bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch // a2 -- allocation site with elements kind 212bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch Register registers[] = {a1, a2, a0}; 213bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 214958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 215958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 21613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochvoid ArraySingleArgumentConstructorDescriptor::InitializePlatformSpecific( 217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptorData* data) { 218b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // register state 219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // a0 -- number of arguments 220b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // a1 -- function 221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // a2 -- allocation site with elements kind 222014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a1, a2, a0}; 223014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 224b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 225b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 22613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochvoid ArrayNArgumentsConstructorDescriptor::InitializePlatformSpecific( 227b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptorData* data) { 228b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // stack param count needs (constructor pointer, and single argument) 22913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch Register registers[] = {a1, a2, a0}; 230014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 231b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 232b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 23313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochvoid VarArgFunctionDescriptor::InitializePlatformSpecific( 234014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 2353b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch // stack param count needs (arg count) 236014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a0}; 2373b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 238b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 2393b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid CompareDescriptor::InitializePlatformSpecific( 240014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 2413b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch Register registers[] = {a1, a0}; 242014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 243b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 244b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 245b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 246014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid BinaryOpDescriptor::InitializePlatformSpecific( 247b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CallInterfaceDescriptorData* data) { 248014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a1, a0}; 249014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 250b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 251b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 252b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 253014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid BinaryOpWithAllocationSiteDescriptor::InitializePlatformSpecific( 254014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 255014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a2, a1, a0}; 256014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 257b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 258b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 259f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochvoid BinaryOpWithVectorDescriptor::InitializePlatformSpecific( 260f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch CallInterfaceDescriptorData* data) { 261f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch // register state 262f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch // a1 -- lhs 263f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch // a0 -- rhs 264f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch // a4 -- slot id 265f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch // a3 -- vector 266f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Register registers[] = {a1, a0, a4, a3}; 267f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 268f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 269f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch 270bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochvoid CountOpDescriptor::InitializePlatformSpecific( 271bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch CallInterfaceDescriptorData* data) { 272bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch Register registers[] = {a1}; 273bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 274bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch} 275b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 276014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid StringAddDescriptor::InitializePlatformSpecific( 277014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 278014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = {a1, a0}; 279014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers, NULL); 280014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 281014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 282014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 283014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid KeyedDescriptor::InitializePlatformSpecific( 284014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 285b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Register registers[] = { 286b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a2, // key 287b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }; 288014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 289b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 290b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 291b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 292014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid NamedDescriptor::InitializePlatformSpecific( 293014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 294b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Register registers[] = { 295b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a2, // name 296b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }; 297014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 298b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 299b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 300b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 301014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid CallHandlerDescriptor::InitializePlatformSpecific( 302014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 303b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Register registers[] = { 304b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a0, // receiver 305b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }; 306014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 307b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 308b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 309b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 310014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid ArgumentAdaptorDescriptor::InitializePlatformSpecific( 311014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 312b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Register registers[] = { 313b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a1, // JSFunction 314014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a3, // the new target 315b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a0, // actual number of arguments 316b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a2, // expected number of arguments 317b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }; 318014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 319014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 320014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 321f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochvoid ApiCallbackDescriptor::InitializePlatformSpecific( 322014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 323b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Register registers[] = { 324b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a0, // callee 325b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a4, // call_data 326b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a2, // holder 327b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a1, // api_function_address 328b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }; 329014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 330014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 331014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 332109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdochvoid InterpreterDispatchDescriptor::InitializePlatformSpecific( 333109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch CallInterfaceDescriptorData* data) { 334109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch Register registers[] = { 335bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, 336bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; 337109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 338109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch} 339014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 340014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid InterpreterPushArgsAndCallDescriptor::InitializePlatformSpecific( 341014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 342014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = { 343014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a0, // argument count (not including receiver) 344014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a2, // address of first argument 345014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a1 // the target callable to be call 346014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 347014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 348014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 349014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 350014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid InterpreterPushArgsAndConstructDescriptor::InitializePlatformSpecific( 351014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 352014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = { 353014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a0, // argument count (not including receiver) 354014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a3, // new target 355014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a1, // constructor to call 356f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch a2, // allocation site feedback if available, undefined otherwise. 357f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch a4 // address of the first argument 358f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch }; 359f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 360f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch} 361f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 362f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochvoid InterpreterPushArgsAndConstructArrayDescriptor::InitializePlatformSpecific( 363f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch CallInterfaceDescriptorData* data) { 364f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch Register registers[] = { 365f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch a0, // argument count (not including receiver) 366f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch a1, // the target to call verified to be Array function 367f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch a2, // allocation site feedback 368f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch a3, // address of first argument 369b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }; 370014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 371b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 372014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 373014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid InterpreterCEntryDescriptor::InitializePlatformSpecific( 374014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallInterfaceDescriptorData* data) { 375014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Register registers[] = { 376014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a0, // argument count (argc) 377014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a2, // address of first argument (argv) 378014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch a1 // the runtime function to call 379014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch }; 380014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 381b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 382014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 383bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdochvoid ResumeGeneratorDescriptor::InitializePlatformSpecific( 384bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch CallInterfaceDescriptorData* data) { 385bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch Register registers[] = { 386bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch v0, // the value to pass to the generator 387bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch a1, // the JSGeneratorObject to resume 388bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch a2 // the resume mode (tagged) 389bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch }; 390bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 391bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch} 392bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch 39362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochvoid FrameDropperTrampolineDescriptor::InitializePlatformSpecific( 39462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch CallInterfaceDescriptorData* data) { 39562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Register registers[] = { 39662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch a1, // loaded new FP 39762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch }; 39862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch data->InitializePlatformSpecific(arraysize(registers), registers); 39962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch} 40062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 401014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 402014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 403b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 404b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif // V8_TARGET_ARCH_MIPS64 405