blob: c97d6692ce94760506ac52af13e7f88b58066e6e [file] [log] [blame]
/* -*- 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 */