Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 : * vim: set ts=8 sts=4 et sw=4 tw=99:
3 : * This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef jit_x86_shared_Lowering_x86_shared_h
8 : #define jit_x86_shared_Lowering_x86_shared_h
9 :
10 : #include "jit/shared/Lowering-shared.h"
11 :
12 : namespace js {
13 : namespace jit {
14 :
15 : class LIRGeneratorX86Shared : public LIRGeneratorShared
16 : {
17 : protected:
18 8 : LIRGeneratorX86Shared(MIRGenerator* gen, MIRGraph& graph, LIRGraph& lirGraph)
19 8 : : LIRGeneratorShared(gen, graph, lirGraph)
20 8 : {}
21 :
22 : LTableSwitch* newLTableSwitch(const LAllocation& in, const LDefinition& inputCopy,
23 : MTableSwitch* ins);
24 : LTableSwitchV* newLTableSwitchV(MTableSwitch* ins);
25 :
26 : void visitGuardShape(MGuardShape* ins);
27 : void visitGuardObjectGroup(MGuardObjectGroup* ins);
28 : void visitPowHalf(MPowHalf* ins);
29 : void lowerForShift(LInstructionHelper<1, 2, 0>* ins, MDefinition* mir, MDefinition* lhs,
30 : MDefinition* rhs);
31 : void lowerForALU(LInstructionHelper<1, 1, 0>* ins, MDefinition* mir, MDefinition* input);
32 : void lowerForALU(LInstructionHelper<1, 2, 0>* ins, MDefinition* mir, MDefinition* lhs,
33 : MDefinition* rhs);
34 :
35 : template<size_t Temps>
36 : void lowerForShiftInt64(LInstructionHelper<INT64_PIECES, INT64_PIECES + 1, Temps>* ins,
37 : MDefinition* mir, MDefinition* lhs, MDefinition* rhs);
38 :
39 : template<size_t Temps>
40 : void lowerForFPU(LInstructionHelper<1, 2, Temps>* ins, MDefinition* mir, MDefinition* lhs,
41 : MDefinition* rhs);
42 : void lowerForCompIx4(LSimdBinaryCompIx4* ins, MSimdBinaryComp* mir,
43 : MDefinition* lhs, MDefinition* rhs);
44 : void lowerForCompFx4(LSimdBinaryCompFx4* ins, MSimdBinaryComp* mir,
45 : MDefinition* lhs, MDefinition* rhs);
46 : void lowerForBitAndAndBranch(LBitAndAndBranch* baab, MInstruction* mir,
47 : MDefinition* lhs, MDefinition* rhs);
48 : void visitWasmNeg(MWasmNeg* ins);
49 : void visitWasmSelect(MWasmSelect* ins);
50 : void lowerMulI(MMul* mul, MDefinition* lhs, MDefinition* rhs);
51 : void lowerDivI(MDiv* div);
52 : void lowerModI(MMod* mod);
53 : void lowerUDiv(MDiv* div);
54 : void lowerUMod(MMod* mod);
55 : void lowerUrshD(MUrsh* mir);
56 : void lowerTruncateDToInt32(MTruncateToInt32* ins);
57 : void lowerTruncateFToInt32(MTruncateToInt32* ins);
58 : void visitSimdInsertElement(MSimdInsertElement* ins);
59 : void visitSimdExtractElement(MSimdExtractElement* ins);
60 : void visitSimdBinaryArith(MSimdBinaryArith* ins);
61 : void visitSimdBinarySaturating(MSimdBinarySaturating* ins);
62 : void visitSimdSelect(MSimdSelect* ins);
63 : void visitSimdSplat(MSimdSplat* ins);
64 : void visitSimdSwizzle(MSimdSwizzle* ins);
65 : void visitSimdShuffle(MSimdShuffle* ins);
66 : void visitSimdGeneralShuffle(MSimdGeneralShuffle* ins);
67 : void visitSimdValueX4(MSimdValueX4* ins);
68 : void lowerCompareExchangeTypedArrayElement(MCompareExchangeTypedArrayElement* ins,
69 : bool useI386ByteRegisters);
70 : void lowerAtomicExchangeTypedArrayElement(MAtomicExchangeTypedArrayElement* ins,
71 : bool useI386ByteRegisters);
72 : void lowerAtomicTypedArrayElementBinop(MAtomicTypedArrayElementBinop* ins,
73 : bool useI386ByteRegisters);
74 : void visitCopySign(MCopySign* ins);
75 : };
76 :
77 : } // namespace jit
78 : } // namespace js
79 :
80 : #endif /* jit_x86_shared_Lowering_x86_shared_h */
|