1/* 2 * Copyright (C) 2013, 2014 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef FTLInlineCacheDescriptor_h 27#define FTLInlineCacheDescriptor_h 28 29#if ENABLE(FTL_JIT) 30 31#include "CodeOrigin.h" 32#include "JITInlineCacheGenerator.h" 33#include "MacroAssembler.h" 34#include <wtf/text/StringImpl.h> 35 36namespace JSC { namespace FTL { 37 38class InlineCacheDescriptor { 39public: 40 InlineCacheDescriptor() { } 41 42 InlineCacheDescriptor(unsigned stackmapID, CodeOrigin codeOrigin, StringImpl* uid) 43 : m_stackmapID(stackmapID) 44 , m_codeOrigin(codeOrigin) 45 , m_uid(uid) 46 { 47 } 48 49 unsigned stackmapID() const { return m_stackmapID; } 50 CodeOrigin codeOrigin() const { return m_codeOrigin; } 51 StringImpl* uid() const { return m_uid; } 52 53private: 54 unsigned m_stackmapID; 55 CodeOrigin m_codeOrigin; 56 StringImpl* m_uid; 57 58public: 59 Vector<MacroAssembler::Jump> m_slowPathDone; 60}; 61 62class GetByIdDescriptor : public InlineCacheDescriptor { 63public: 64 GetByIdDescriptor() { } 65 66 GetByIdDescriptor(unsigned stackmapID, CodeOrigin codeOrigin, StringImpl* uid) 67 : InlineCacheDescriptor(stackmapID, codeOrigin, uid) 68 { 69 } 70 71 Vector<JITGetByIdGenerator> m_generators; 72}; 73 74class PutByIdDescriptor : public InlineCacheDescriptor { 75public: 76 PutByIdDescriptor() { } 77 78 PutByIdDescriptor( 79 unsigned stackmapID, CodeOrigin codeOrigin, StringImpl* uid, 80 ECMAMode ecmaMode, PutKind putKind) 81 : InlineCacheDescriptor(stackmapID, codeOrigin, uid) 82 , m_ecmaMode(ecmaMode) 83 , m_putKind(putKind) 84 { 85 } 86 87 Vector<JITPutByIdGenerator> m_generators; 88 89 ECMAMode ecmaMode() const { return m_ecmaMode; } 90 PutKind putKind() const { return m_putKind; } 91 92private: 93 ECMAMode m_ecmaMode; 94 PutKind m_putKind; 95}; 96 97} } // namespace JSC::FTL 98 99#endif // ENABLE(FTL_JIT) 100 101#endif // FTLInlineCacheDescriptor_h 102 103