144f0eee88ff00398ff7f715fab053374d808c90dSteve Block// Copyright 2011 the V8 project authors. All rights reserved. 23100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Redistribution and use in source and binary forms, with or without 33100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// modification, are permitted provided that the following conditions are 43100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// met: 53100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// 63100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// * Redistributions of source code must retain the above copyright 73100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// notice, this list of conditions and the following disclaimer. 83100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// * Redistributions in binary form must reproduce the above 93100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// copyright notice, this list of conditions and the following 103100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// disclaimer in the documentation and/or other materials provided 113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// with the distribution. 123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// * Neither the name of Google Inc. nor the names of its 133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// contributors may be used to endorse or promote products derived 143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// from this software without specific prior written permission. 153100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// 163100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 283100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 293100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 303100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu#ifndef V8_MIPS_FRAMES_MIPS_H_ 313100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu#define V8_MIPS_FRAMES_MIPS_H_ 323100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 333100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescunamespace v8 { 343100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescunamespace internal { 353100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 363100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Register lists. 373100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Note that the bit values must match those used in actual instruction 383100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// encoding. 393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst int kNumRegs = 32; 403100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst RegList kJSCallerSaved = 42589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 2 | // v0 43589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 3 | // v1 44589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 4 | // a0 45589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 5 | // a1 46589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 6 | // a2 47589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 7 | // a3 48589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 8 | // t0 49589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 9 | // t1 50589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 10 | // t2 51589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 11 | // t3 52589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 12 | // t4 53589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 13 | // t5 54589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 14 | // t6 55589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 15; // t7 56589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst int kNumJSCallerSaved = 14; 583100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 593100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 603100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Return the code of the n-th caller-saved register available to JavaScript 6144f0eee88ff00398ff7f715fab053374d808c90dSteve Block// e.g. JSCallerSavedReg(0) returns a0.code() == 4. 623100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuint JSCallerSavedCode(int n); 633100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 643100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 653100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Callee-saved registers preserved when switching from C to JavaScript. 663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst RegList kCalleeSaved = 67589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 16 | // s0 68589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 17 | // s1 69589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 18 | // s2 70589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 19 | // s3 71589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 20 | // s4 72589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 21 | // s5 73589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 22 | // s6 (roots in Javascript code) 74589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 23 | // s7 (cp in Javascript code) 75589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 30; // fp/s8 763100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst int kNumCalleeSaved = 9; 783100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst RegList kCalleeSavedFPU = 80589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 20 | // f20 81589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 22 | // f22 82589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 24 | // f24 83589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 26 | // f26 84589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 28 | // f28 85589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1 << 30; // f30 863100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst int kNumCalleeSavedFPU = 6; 883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst RegList kCallerSavedFPU = 903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 0 | // f0 913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 2 | // f2 923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 4 | // f4 933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 6 | // f6 943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 8 | // f8 953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 10 | // f10 963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 12 | // f12 973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 14 | // f14 983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 16 | // f16 993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1 << 18; // f18 1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 10244f0eee88ff00398ff7f715fab053374d808c90dSteve Block// Number of registers for which space is reserved in safepoints. Must be a 10344f0eee88ff00398ff7f715fab053374d808c90dSteve Block// multiple of 8. 1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst int kNumSafepointRegisters = 24; 10544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 10644f0eee88ff00398ff7f715fab053374d808c90dSteve Block// Define the list of registers actually saved at safepoints. 10744f0eee88ff00398ff7f715fab053374d808c90dSteve Block// Note that the number of saved registers may be smaller than the reserved 10844f0eee88ff00398ff7f715fab053374d808c90dSteve Block// space, i.e. kNumSafepointSavedRegisters <= kNumSafepointRegisters. 1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst RegList kSafepointSavedRegisters = kJSCallerSaved | kCalleeSaved; 1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst int kNumSafepointSavedRegisters = 11144f0eee88ff00398ff7f715fab053374d808c90dSteve Block kNumJSCallerSaved + kNumCalleeSaved; 11244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 1133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescutypedef Object* JSCallerSavedBuffer[kNumJSCallerSaved]; 1143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst int kUndefIndex = -1; 116257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch// Map with indexes on stack that corresponds to codes of saved registers. 1173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochconst int kSafepointRegisterStackIndexMap[kNumRegs] = { 118589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch kUndefIndex, // zero_reg 119589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch kUndefIndex, // at 120589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 0, // v0 121589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 1, // v1 122589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 2, // a0 123589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 3, // a1 124589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 4, // a2 125589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 5, // a3 126589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 6, // t0 127589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 7, // t1 128589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 8, // t2 129589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 9, // t3 130589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 10, // t4 131589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 11, // t5 132589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 12, // t6 133589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 13, // t7 134589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 14, // s0 135589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 15, // s1 136589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 16, // s2 137589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 17, // s3 138589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 18, // s4 139589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 19, // s5 140589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 20, // s6 141589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 21, // s7 142589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch kUndefIndex, // t8 143589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch kUndefIndex, // t9 144589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch kUndefIndex, // k0 145589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch kUndefIndex, // k1 146589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch kUndefIndex, // gp 147589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch kUndefIndex, // sp 148589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 22, // fp 149257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch kUndefIndex 150257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch}; 151257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1523100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1533100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ---------------------------------------------------- 1543100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuclass StackHandlerConstants : public AllStatic { 1563100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu public: 1573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch static const int kNextOffset = 0 * kPointerSize; 1583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch static const int kCodeOffset = 1 * kPointerSize; 1593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch static const int kStateOffset = 2 * kPointerSize; 1603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch static const int kContextOffset = 3 * kPointerSize; 1613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch static const int kFPOffset = 4 * kPointerSize; 1623100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch static const int kSize = kFPOffset + kPointerSize; 1643100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}; 1653100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1663100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1673100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuclass EntryFrameConstants : public AllStatic { 1683100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu public: 1693100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kCallerFPOffset = -3 * kPointerSize; 1703100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}; 1713100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1723100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1733100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuclass ExitFrameConstants : public AllStatic { 1743100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu public: 175257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // See some explanation in MacroAssembler::EnterExitFrame. 176257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // This marks the top of the extra allocated stack space. 177257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch static const int kStackSpaceOffset = -3 * kPointerSize; 1783100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 179257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch static const int kCodeOffset = -2 * kPointerSize; 180257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 181257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch static const int kSPOffset = -1 * kPointerSize; 1823100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1833100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu // The caller fields are below the frame pointer on the stack. 1843100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kCallerFPOffset = +0 * kPointerSize; 1853100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu // The calling JS function is between FP and PC. 1863100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kCallerPCOffset = +1 * kPointerSize; 1873100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 188257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // MIPS-specific: a pointer to the old sp to avoid unnecessary calculations. 189257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch static const int kCallerSPOffset = +2 * kPointerSize; 190257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 1913100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu // FP-relative displacement of the caller's SP. 192257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch static const int kCallerSPDisplacement = +2 * kPointerSize; 1933100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}; 1943100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1953100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 1963100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuclass StandardFrameConstants : public AllStatic { 1973100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu public: 1983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Fixed part of the frame consists of return address, caller fp, 1993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // context and function. 2003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch static const int kFixedFrameSize = 4 * kPointerSize; 2013100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kExpressionsOffset = -3 * kPointerSize; 2023100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kMarkerOffset = -2 * kPointerSize; 2033100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kContextOffset = -1 * kPointerSize; 2043100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kCallerFPOffset = 0 * kPointerSize; 2053100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kCallerPCOffset = +1 * kPointerSize; 2063100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kCallerSPOffset = +2 * kPointerSize; 2073100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2083100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu // Size of the MIPS 4 32-bit argument slots. 2093100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu // This is just an alias with a shorter name. Use it from now on. 2103100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kRArgsSlotsSize = 4 * kPointerSize; 2113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kRegularArgsSlotsSize = kRArgsSlotsSize; 2123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu // JS argument slots size. 2143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kJSArgsSlotsSize = 0 * kPointerSize; 21544f0eee88ff00398ff7f715fab053374d808c90dSteve Block // Assembly builtins argument slots size. 21644f0eee88ff00398ff7f715fab053374d808c90dSteve Block static const int kBArgsSlotsSize = 0 * kPointerSize; 2173100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}; 2183100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2193100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2203100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuclass JavaScriptFrameConstants : public AllStatic { 2213100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu public: 2223100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu // FP-relative. 2233100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kLocal0Offset = StandardFrameConstants::kExpressionsOffset; 2248b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch static const int kLastParameterOffset = +2 * kPointerSize; 2253100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kFunctionOffset = StandardFrameConstants::kMarkerOffset; 2263100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2273100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu // Caller SP-relative. 2283100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kParam0Offset = -2 * kPointerSize; 2293100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kReceiverOffset = -1 * kPointerSize; 2303100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}; 2313100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2323100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2333100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuclass ArgumentsAdaptorFrameConstants : public AllStatic { 2343100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu public: 2353100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kLengthOffset = StandardFrameConstants::kExpressionsOffset; 2363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch static const int kFrameSize = 2373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch StandardFrameConstants::kFixedFrameSize + kPointerSize; 2383100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}; 2393100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2403100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2413100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuclass InternalFrameConstants : public AllStatic { 2423100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu public: 2433100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu static const int kCodeOffset = StandardFrameConstants::kExpressionsOffset; 2443100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}; 2453100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2463100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2473100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuinline Object* JavaScriptFrame::function_slot_object() const { 2483100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu const int offset = JavaScriptFrameConstants::kFunctionOffset; 2493100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu return Memory::Object_at(fp() + offset); 2503100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu} 2513100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 25244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 2533100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu} } // namespace v8::internal 2543100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu 2553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu#endif 256