From 041d3b7a2f7a09568c90ad8b1b9a7ed4e7cc2fd9 Mon Sep 17 00:00:00 2001 From: Branislav Rankov Date: Tue, 15 Apr 2014 11:53:23 +0200 Subject: [PATCH] Bug 969375 - MIPS port: Added JS_CODEGEN_MIPS checks and includes. r=jandem --- js/src/jit/BaselineBailouts.cpp | 6 +++--- js/src/jit/BaselineCompiler.cpp | 2 ++ js/src/jit/BaselineCompiler.h | 6 +++++- js/src/jit/BaselineHelpers.h | 2 ++ js/src/jit/BaselineIC.cpp | 2 +- js/src/jit/BaselineIC.h | 5 ++++- js/src/jit/BaselineRegisters.h | 6 +++++- js/src/jit/CodeGenerator.h | 4 +++- js/src/jit/IonCaches.h | 9 +++++++-- js/src/jit/IonMacroAssembler.h | 4 ++++ js/src/jit/LIR.h | 4 ++++ js/src/jit/LOpcodes.h | 4 ++++ js/src/jit/Lowering.h | 4 +++- js/src/jit/MoveEmitter.h | 4 +++- js/src/jit/RegisterAllocator.h | 2 +- js/src/jit/RegisterSets.h | 2 +- js/src/jit/Registers.h | 4 ++++ js/src/jit/shared/Assembler-x86-shared.cpp | 4 ++-- js/src/jit/shared/CodeGenerator-shared.cpp | 2 +- js/src/jit/shared/MoveEmitter-x86-shared.h | 4 ++-- 20 files changed, 61 insertions(+), 19 deletions(-) diff --git a/js/src/jit/BaselineBailouts.cpp b/js/src/jit/BaselineBailouts.cpp index 6cf3c18ae870..e17f370fca7d 100644 --- a/js/src/jit/BaselineBailouts.cpp +++ b/js/src/jit/BaselineBailouts.cpp @@ -349,9 +349,9 @@ struct BaselineStackBuilder JS_ASSERT(BaselineFrameReg == FramePointer); priorOffset -= sizeof(void *); return virtualPointerAtStackOffset(priorOffset); -#elif defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_ARM) - // On X64 and ARM, the frame pointer save location depends on the caller of the - // the rectifier frame. +#elif defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) + // On X64, ARM and MIPS, the frame pointer save location depends on + // the caller of the rectifier frame. BufferPointer priorFrame = pointerAtStackOffset(priorOffset); FrameType priorType = priorFrame->prevType(); diff --git a/js/src/jit/BaselineCompiler.cpp b/js/src/jit/BaselineCompiler.cpp index 7f53635b6df6..8302faf9c61e 100644 --- a/js/src/jit/BaselineCompiler.cpp +++ b/js/src/jit/BaselineCompiler.cpp @@ -442,6 +442,8 @@ BaselineCompiler::emitOutOfLinePostBarrierSlot() // On ARM, save the link register before calling. It contains the return // address. The |masm.ret()| later will pop this into |pc| to return. masm.push(lr); +#elif defined(JS_CODEGEN_MIPS) + masm.push(ra); #endif masm.setupUnalignedABICall(2, scratch); diff --git a/js/src/jit/BaselineCompiler.h b/js/src/jit/BaselineCompiler.h index 809b319ce078..03dc9640a9a1 100644 --- a/js/src/jit/BaselineCompiler.h +++ b/js/src/jit/BaselineCompiler.h @@ -14,8 +14,12 @@ # include "jit/x86/BaselineCompiler-x86.h" #elif defined(JS_CODEGEN_X64) # include "jit/x64/BaselineCompiler-x64.h" -#else +#elif defined(JS_CODEGEN_ARM) # include "jit/arm/BaselineCompiler-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/BaselineCompiler-mips.h" +#else +# error "Unknown architecture!" #endif namespace js { diff --git a/js/src/jit/BaselineHelpers.h b/js/src/jit/BaselineHelpers.h index 895505646045..611069a0702e 100644 --- a/js/src/jit/BaselineHelpers.h +++ b/js/src/jit/BaselineHelpers.h @@ -15,6 +15,8 @@ # include "jit/x64/BaselineHelpers-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/BaselineHelpers-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/BaselineHelpers-mips.h" #else # error "Unknown architecture!" #endif diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index f68d5595c74d..190798853eab 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -760,7 +760,7 @@ ICStubCompiler::emitPostWriteBarrierSlot(MacroAssembler &masm, Register obj, Val masm.branchPtr(Assembler::AboveOrEqual, valReg, ImmWord(nursery.heapEnd()), &skipBarrier); // void PostWriteBarrier(JSRuntime *rt, JSObject *obj); -#ifdef JS_CODEGEN_ARM +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) saveRegs.add(BaselineTailCallReg); #endif saveRegs = GeneralRegisterSet::Intersect(saveRegs, GeneralRegisterSet::Volatile()); diff --git a/js/src/jit/BaselineIC.h b/js/src/jit/BaselineIC.h index 104c811839c2..2bf2525fee4e 100644 --- a/js/src/jit/BaselineIC.h +++ b/js/src/jit/BaselineIC.h @@ -1108,9 +1108,12 @@ class ICStubCompiler inline GeneralRegisterSet availableGeneralRegs(size_t numInputs) const { GeneralRegisterSet regs(GeneralRegisterSet::All()); JS_ASSERT(!regs.has(BaselineStackReg)); -#ifdef JS_CODEGEN_ARM +#if defined(JS_CODEGEN_ARM) JS_ASSERT(!regs.has(BaselineTailCallReg)); regs.take(BaselineSecondScratchReg); +#elif defined(JS_CODEGEN_MIPS) + JS_ASSERT(!regs.has(BaselineTailCallReg)); + JS_ASSERT(!regs.has(BaselineSecondScratchReg)); #endif regs.take(BaselineFrameReg); regs.take(BaselineStubReg); diff --git a/js/src/jit/BaselineRegisters.h b/js/src/jit/BaselineRegisters.h index b49ab639fe6e..83834918cf82 100644 --- a/js/src/jit/BaselineRegisters.h +++ b/js/src/jit/BaselineRegisters.h @@ -13,8 +13,12 @@ # include "jit/x86/BaselineRegisters-x86.h" #elif defined(JS_CODEGEN_X64) # include "jit/x64/BaselineRegisters-x64.h" -#else +#elif defined(JS_CODEGEN_ARM) # include "jit/arm/BaselineRegisters-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/BaselineRegisters-mips.h" +#else +# error "Unknown architecture!" #endif namespace js { diff --git a/js/src/jit/CodeGenerator.h b/js/src/jit/CodeGenerator.h index 4fd9567acb48..f9aafceca1e7 100644 --- a/js/src/jit/CodeGenerator.h +++ b/js/src/jit/CodeGenerator.h @@ -18,8 +18,10 @@ # include "jit/x64/CodeGenerator-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/CodeGenerator-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/CodeGenerator-mips.h" #else -#error "CPU Not Supported" +#error "Unknown architecture!" #endif namespace js { diff --git a/js/src/jit/IonCaches.h b/js/src/jit/IonCaches.h index 22046cc2d3d2..62127570250c 100644 --- a/js/src/jit/IonCaches.h +++ b/js/src/jit/IonCaches.h @@ -7,8 +7,10 @@ #ifndef jit_IonCaches_h #define jit_IonCaches_h -#ifdef JS_CODEGEN_ARM +#if defined(JS_CODEGEN_ARM) # include "jit/arm/Assembler-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/Assembler-mips.h" #endif #include "jit/Registers.h" #include "jit/shared/Assembler-shared.h" @@ -349,13 +351,16 @@ class RepatchIonCache : public IonCache // Offset from the initial jump to the rejoin label. #ifdef JS_CODEGEN_ARM static const size_t REJOIN_LABEL_OFFSET = 4; +#elif defined(JS_CODEGEN_MIPS) + // The size of jump created by MacroAssemblerMIPSCompat::jumpWithPatch. + static const size_t REJOIN_LABEL_OFFSET = 4 * sizeof(void *); #else static const size_t REJOIN_LABEL_OFFSET = 0; #endif CodeLocationLabel rejoinLabel() const { uint8_t *ptr = initialJump_.raw(); -#ifdef JS_CODEGEN_ARM +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) uint32_t i = 0; while (i < REJOIN_LABEL_OFFSET) ptr = Assembler::nextInstruction(ptr, &i); diff --git a/js/src/jit/IonMacroAssembler.h b/js/src/jit/IonMacroAssembler.h index 542f0418a757..d3f9b76f1ef0 100644 --- a/js/src/jit/IonMacroAssembler.h +++ b/js/src/jit/IonMacroAssembler.h @@ -17,6 +17,10 @@ # include "jit/x64/MacroAssembler-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/MacroAssembler-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/MacroAssembler-mips.h" +#else +# error "Unknown architecture!" #endif #include "jit/IonInstrumentation.h" #include "jit/JitCompartment.h" diff --git a/js/src/jit/LIR.h b/js/src/jit/LIR.h index f72cc78f33d9..8eec388a940a 100644 --- a/js/src/jit/LIR.h +++ b/js/src/jit/LIR.h @@ -1591,6 +1591,10 @@ LAllocation::toRegister() const # include "jit/shared/LIR-x86-shared.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/LIR-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/LIR-mips.h" +#else +# error "Unknown architecture!" #endif #undef LIR_HEADER diff --git a/js/src/jit/LOpcodes.h b/js/src/jit/LOpcodes.h index df17de367473..9e44dd99a967 100644 --- a/js/src/jit/LOpcodes.h +++ b/js/src/jit/LOpcodes.h @@ -306,6 +306,10 @@ # include "jit/x64/LOpcodes-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/LOpcodes-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/LOpcodes-mips.h" +#else +# error "Unknown architecture!" #endif #define LIR_OPCODE_LIST(_) \ diff --git a/js/src/jit/Lowering.h b/js/src/jit/Lowering.h index a94c8d358e81..e5f858387c63 100644 --- a/js/src/jit/Lowering.h +++ b/js/src/jit/Lowering.h @@ -17,8 +17,10 @@ # include "jit/x64/Lowering-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/Lowering-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/Lowering-mips.h" #else -# error "CPU!" +# error "Unknown architecture!" #endif namespace js { diff --git a/js/src/jit/MoveEmitter.h b/js/src/jit/MoveEmitter.h index 9b88c0391e27..91fbc35ee04e 100644 --- a/js/src/jit/MoveEmitter.h +++ b/js/src/jit/MoveEmitter.h @@ -11,8 +11,10 @@ # include "jit/shared/MoveEmitter-x86-shared.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/MoveEmitter-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/MoveEmitter-mips.h" #else -# error "CPU Not Supported" +# error "Unknown architecture!" #endif #endif /* jit_MoveEmitter_h */ diff --git a/js/src/jit/RegisterAllocator.h b/js/src/jit/RegisterAllocator.h index 6415262494a3..dfb3acbf2128 100644 --- a/js/src/jit/RegisterAllocator.h +++ b/js/src/jit/RegisterAllocator.h @@ -311,7 +311,7 @@ class RegisterAllocator #if defined(JS_CODEGEN_X64) if (mir->compilingAsmJS()) allRegisters_.take(AnyRegister(HeapReg)); -#elif defined(JS_CODEGEN_ARM) +#elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) if (mir->compilingAsmJS()) { allRegisters_.take(AnyRegister(HeapReg)); allRegisters_.take(AnyRegister(GlobalReg)); diff --git a/js/src/jit/RegisterSets.h b/js/src/jit/RegisterSets.h index 178857ace82f..072e62babc05 100644 --- a/js/src/jit/RegisterSets.h +++ b/js/src/jit/RegisterSets.h @@ -844,7 +844,7 @@ class AsmJSHeapAccess isFloat32Load_(false), loadedReg_(UINT8_MAX) {} -#elif defined(JS_CODEGEN_ARM) +#elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) explicit AsmJSHeapAccess(uint32_t offset) : offset_(offset) {} diff --git a/js/src/jit/Registers.h b/js/src/jit/Registers.h index 13746566db20..26b40345a3b3 100644 --- a/js/src/jit/Registers.h +++ b/js/src/jit/Registers.h @@ -16,6 +16,10 @@ # include "jit/x64/Architecture-x64.h" #elif defined(JS_CODEGEN_ARM) # include "jit/arm/Architecture-arm.h" +#elif defined(JS_CODEGEN_MIPS) +# include "jit/mips/Architecture-mips.h" +#else +# error "Unknown architecture!" #endif namespace js { diff --git a/js/src/jit/shared/Assembler-x86-shared.cpp b/js/src/jit/shared/Assembler-x86-shared.cpp index 3223319844b5..f6e3f3a0f7d9 100644 --- a/js/src/jit/shared/Assembler-x86-shared.cpp +++ b/js/src/jit/shared/Assembler-x86-shared.cpp @@ -10,8 +10,8 @@ # include "jit/x86/MacroAssembler-x86.h" #elif defined(JS_CODEGEN_X64) # include "jit/x64/MacroAssembler-x64.h" -#elif defined(JS_CODEGEN_ARM) -# include "jit/arm/MacroAssembler-arm.h" +#else +# error "Wrong architecture. Only x86 and x64 should build this file!" #endif using namespace js; diff --git a/js/src/jit/shared/CodeGenerator-shared.cpp b/js/src/jit/shared/CodeGenerator-shared.cpp index 5bccd201b17b..48484c185c71 100644 --- a/js/src/jit/shared/CodeGenerator-shared.cpp +++ b/js/src/jit/shared/CodeGenerator-shared.cpp @@ -67,7 +67,7 @@ CodeGeneratorShared::CodeGeneratorShared(MIRGenerator *gen, LIRGraph *graph, Mac // An MAsmJSCall does not align the stack pointer at calls sites but instead // relies on the a priori stack adjustment (in the prologue) on platforms // (like x64) which require the stack to be aligned. -#ifdef JS_CODEGEN_ARM +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_MIPS) bool forceAlign = true; #else bool forceAlign = false; diff --git a/js/src/jit/shared/MoveEmitter-x86-shared.h b/js/src/jit/shared/MoveEmitter-x86-shared.h index ccc673111283..a08f6b3b8316 100644 --- a/js/src/jit/shared/MoveEmitter-x86-shared.h +++ b/js/src/jit/shared/MoveEmitter-x86-shared.h @@ -11,8 +11,8 @@ # include "jit/x86/MacroAssembler-x86.h" #elif defined(JS_CODEGEN_X64) # include "jit/x64/MacroAssembler-x64.h" -#elif defined(JS_CODEGEN_ARM) -# include "jit/arm/MacroAssembler-arm.h" +#else +# error "Wrong architecture. Only x86 and x64 should build this file!" #endif #include "jit/MoveResolver.h"