| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- |
| * vim: set ts=8 sts=4 et sw=4 tw=99: |
| * This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #ifndef jit_x86_CodeGenerator_x86_h |
| #define jit_x86_CodeGenerator_x86_h |
| |
| #include "Assembler-x86.h" |
| #include "jit/shared/CodeGenerator-x86-shared.h" |
| |
| namespace js { |
| namespace jit { |
| |
| class OutOfLineLoadTypedArrayOutOfBounds; |
| class OutOfLineTruncate; |
| |
| class CodeGeneratorX86 : public CodeGeneratorX86Shared |
| { |
| private: |
| CodeGeneratorX86 *thisFromCtor() { |
| return this; |
| } |
| |
| protected: |
| ValueOperand ToValue(LInstruction *ins, size_t pos); |
| ValueOperand ToOutValue(LInstruction *ins); |
| ValueOperand ToTempValue(LInstruction *ins, size_t pos); |
| |
| void loadViewTypeElement(ArrayBufferView::ViewType vt, const Address &srcAddr, |
| const LDefinition *out); |
| void storeViewTypeElement(ArrayBufferView::ViewType vt, const LAllocation *value, |
| const Address &dstAddr); |
| void storeElementTyped(const LAllocation *value, MIRType valueType, MIRType elementType, |
| const Register &elements, const LAllocation *index); |
| |
| public: |
| CodeGeneratorX86(MIRGenerator *gen, LIRGraph *graph, MacroAssembler *masm); |
| |
| public: |
| bool visitBox(LBox *box); |
| bool visitBoxDouble(LBoxDouble *box); |
| bool visitUnbox(LUnbox *unbox); |
| bool visitValue(LValue *value); |
| bool visitOsrValue(LOsrValue *value); |
| bool visitLoadSlotV(LLoadSlotV *load); |
| bool visitLoadSlotT(LLoadSlotT *load); |
| bool visitStoreSlotT(LStoreSlotT *store); |
| bool visitLoadElementT(LLoadElementT *load); |
| bool visitImplicitThis(LImplicitThis *lir); |
| bool visitInterruptCheck(LInterruptCheck *lir); |
| bool visitCompareB(LCompareB *lir); |
| bool visitCompareBAndBranch(LCompareBAndBranch *lir); |
| bool visitCompareV(LCompareV *lir); |
| bool visitCompareVAndBranch(LCompareVAndBranch *lir); |
| bool visitUInt32ToDouble(LUInt32ToDouble *lir); |
| bool visitTruncateDToInt32(LTruncateDToInt32 *ins); |
| bool visitLoadTypedArrayElementStatic(LLoadTypedArrayElementStatic *ins); |
| bool visitStoreTypedArrayElementStatic(LStoreTypedArrayElementStatic *ins); |
| bool visitAsmJSLoadHeap(LAsmJSLoadHeap *ins); |
| bool visitAsmJSStoreHeap(LAsmJSStoreHeap *ins); |
| bool visitAsmJSLoadGlobalVar(LAsmJSLoadGlobalVar *ins); |
| bool visitAsmJSStoreGlobalVar(LAsmJSStoreGlobalVar *ins); |
| bool visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr *ins); |
| bool visitAsmJSLoadFFIFunc(LAsmJSLoadFFIFunc *ins); |
| |
| bool visitOutOfLineLoadTypedArrayOutOfBounds(OutOfLineLoadTypedArrayOutOfBounds *ool); |
| bool visitOutOfLineTruncate(OutOfLineTruncate *ool); |
| |
| void postAsmJSCall(LAsmJSCall *lir); |
| }; |
| |
| typedef CodeGeneratorX86 CodeGeneratorSpecific; |
| |
| } // namespace jit |
| } // namespace js |
| |
| #endif /* jit_x86_CodeGenerator_x86_h */ |