Commit 19100841 authored by eric@webkit.org's avatar eric@webkit.org
Browse files

2010-03-03 Chao-ying Fu <fu@mips.com>

        Reviewed by Gavin Barraclough.

        MIPS JIT Supports
        https://bugs.webkit.org/show_bug.cgi?id=30144

        The following changes enable MIPS YARR and YARR_JIT.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Imm32::Imm32):
        * assembler/MIPSAssembler.h: Added.
        (JSC::MIPSRegisters::):
        (JSC::MIPSAssembler::MIPSAssembler):
        (JSC::MIPSAssembler::):
        (JSC::MIPSAssembler::JmpSrc::JmpSrc):
        (JSC::MIPSAssembler::JmpDst::JmpDst):
        (JSC::MIPSAssembler::JmpDst::isUsed):
        (JSC::MIPSAssembler::JmpDst::used):
        (JSC::MIPSAssembler::emitInst):
        (JSC::MIPSAssembler::nop):
        (JSC::MIPSAssembler::loadDelayNop):
        (JSC::MIPSAssembler::copDelayNop):
        (JSC::MIPSAssembler::move):
        (JSC::MIPSAssembler::li):
        (JSC::MIPSAssembler::lui):
        (JSC::MIPSAssembler::addiu):
        (JSC::MIPSAssembler::addu):
        (JSC::MIPSAssembler::subu):
        (JSC::MIPSAssembler::mult):
        (JSC::MIPSAssembler::mfhi):
        (JSC::MIPSAssembler::mflo):
        (JSC::MIPSAssembler::mul):
        (JSC::MIPSAssembler::andInsn):
        (JSC::MIPSAssembler::andi):
        (JSC::MIPSAssembler::nor):
        (JSC::MIPSAssembler::orInsn):
        (JSC::MIPSAssembler::ori):
        (JSC::MIPSAssembler::xorInsn):
        (JSC::MIPSAssembler::xori):
        (JSC::MIPSAssembler::slt):
        (JSC::MIPSAssembler::sltu):
        (JSC::MIPSAssembler::sltiu):
        (JSC::MIPSAssembler::sll):
        (JSC::MIPSAssembler::sllv):
        (JSC::MIPSAssembler::sra):
        (JSC::MIPSAssembler::srav):
        (JSC::MIPSAssembler::lw):
        (JSC::MIPSAssembler::lwl):
        (JSC::MIPSAssembler::lwr):
        (JSC::MIPSAssembler::lhu):
        (JSC::MIPSAssembler::sw):
        (JSC::MIPSAssembler::jr):
        (JSC::MIPSAssembler::jalr):
        (JSC::MIPSAssembler::jal):
        (JSC::MIPSAssembler::bkpt):
        (JSC::MIPSAssembler::bgez):
        (JSC::MIPSAssembler::bltz):
        (JSC::MIPSAssembler::beq):
        (JSC::MIPSAssembler::bne):
        (JSC::MIPSAssembler::bc1t):
        (JSC::MIPSAssembler::bc1f):
        (JSC::MIPSAssembler::newJmpSrc):
        (JSC::MIPSAssembler::appendJump):
        (JSC::MIPSAssembler::addd):
        (JSC::MIPSAssembler::subd):
        (JSC::MIPSAssembler::muld):
        (JSC::MIPSAssembler::lwc1):
        (JSC::MIPSAssembler::ldc1):
        (JSC::MIPSAssembler::swc1):
        (JSC::MIPSAssembler::sdc1):
        (JSC::MIPSAssembler::mtc1):
        (JSC::MIPSAssembler::mfc1):
        (JSC::MIPSAssembler::truncwd):
        (JSC::MIPSAssembler::cvtdw):
        (JSC::MIPSAssembler::ceqd):
        (JSC::MIPSAssembler::cngtd):
        (JSC::MIPSAssembler::cnged):
        (JSC::MIPSAssembler::cltd):
        (JSC::MIPSAssembler::cled):
        (JSC::MIPSAssembler::cueqd):
        (JSC::MIPSAssembler::coled):
        (JSC::MIPSAssembler::coltd):
        (JSC::MIPSAssembler::culed):
        (JSC::MIPSAssembler::cultd):
        (JSC::MIPSAssembler::label):
        (JSC::MIPSAssembler::align):
        (JSC::MIPSAssembler::getRelocatedAddress):
        (JSC::MIPSAssembler::getDifferenceBetweenLabels):
        (JSC::MIPSAssembler::size):
        (JSC::MIPSAssembler::executableCopy):
        (JSC::MIPSAssembler::getCallReturnOffset):
        (JSC::MIPSAssembler::linkJump):
        (JSC::MIPSAssembler::linkCall):
        (JSC::MIPSAssembler::linkPointer):
        (JSC::MIPSAssembler::relinkJump):
        (JSC::MIPSAssembler::relinkCall):
        (JSC::MIPSAssembler::repatchInt32):
        (JSC::MIPSAssembler::repatchPointer):
        (JSC::MIPSAssembler::repatchLoadPtrToLEA):
        (JSC::MIPSAssembler::relocateJumps):
        (JSC::MIPSAssembler::linkWithOffset):
        (JSC::MIPSAssembler::linkCallInternal):
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerMIPS.h: Added.
        (JSC::MacroAssemblerMIPS::MacroAssemblerMIPS):
        (JSC::MacroAssemblerMIPS::):
        (JSC::MacroAssemblerMIPS::add32):
        (JSC::MacroAssemblerMIPS::and32):
        (JSC::MacroAssemblerMIPS::lshift32):
        (JSC::MacroAssemblerMIPS::mul32):
        (JSC::MacroAssemblerMIPS::not32):
        (JSC::MacroAssemblerMIPS::or32):
        (JSC::MacroAssemblerMIPS::rshift32):
        (JSC::MacroAssemblerMIPS::sub32):
        (JSC::MacroAssemblerMIPS::xor32):
        (JSC::MacroAssemblerMIPS::load32):
        (JSC::MacroAssemblerMIPS::load32WithUnalignedHalfWords):
        (JSC::MacroAssemblerMIPS::load32WithAddressOffsetPatch):
        (JSC::MacroAssemblerMIPS::loadPtrWithPatchToLEA):
        (JSC::MacroAssemblerMIPS::loadPtrWithAddressOffsetPatch):
        (JSC::MacroAssemblerMIPS::load16):
        (JSC::MacroAssemblerMIPS::store32WithAddressOffsetPatch):
        (JSC::MacroAssemblerMIPS::store32):
        (JSC::MacroAssemblerMIPS::supportsFloatingPoint):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerMIPS::pop):
        (JSC::MacroAssemblerMIPS::push):
        (JSC::MacroAssemblerMIPS::move):
        (JSC::MacroAssemblerMIPS::swap):
        (JSC::MacroAssemblerMIPS::signExtend32ToPtr):
        (JSC::MacroAssemblerMIPS::zeroExtend32ToPtr):
        (JSC::MacroAssemblerMIPS::branch32):
        (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerMIPS::branch16):
        (JSC::MacroAssemblerMIPS::branchTest32):
        (JSC::MacroAssemblerMIPS::jump):
        (JSC::MacroAssemblerMIPS::branchAdd32):
        (JSC::MacroAssemblerMIPS::branchMul32):
        (JSC::MacroAssemblerMIPS::branchSub32):
        (JSC::MacroAssemblerMIPS::breakpoint):
        (JSC::MacroAssemblerMIPS::nearCall):
        (JSC::MacroAssemblerMIPS::call):
        (JSC::MacroAssemblerMIPS::ret):
        (JSC::MacroAssemblerMIPS::set32):
        (JSC::MacroAssemblerMIPS::setTest32):
        (JSC::MacroAssemblerMIPS::moveWithPatch):
        (JSC::MacroAssemblerMIPS::branchPtrWithPatch):
        (JSC::MacroAssemblerMIPS::storePtrWithPatch):
        (JSC::MacroAssemblerMIPS::tailRecursiveCall):
        (JSC::MacroAssemblerMIPS::makeTailRecursiveCall):
        (JSC::MacroAssemblerMIPS::loadDouble):
        (JSC::MacroAssemblerMIPS::storeDouble):
        (JSC::MacroAssemblerMIPS::addDouble):
        (JSC::MacroAssemblerMIPS::subDouble):
        (JSC::MacroAssemblerMIPS::mulDouble):
        (JSC::MacroAssemblerMIPS::convertInt32ToDouble):
        (JSC::MacroAssemblerMIPS::insertRelaxationWords):
        (JSC::MacroAssemblerMIPS::branchTrue):
        (JSC::MacroAssemblerMIPS::branchFalse):
        (JSC::MacroAssemblerMIPS::branchEqual):
        (JSC::MacroAssemblerMIPS::branchNotEqual):
        (JSC::MacroAssemblerMIPS::branchDouble):
        (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
        (JSC::MacroAssemblerMIPS::linkCall):
        (JSC::MacroAssemblerMIPS::repatchCall):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):
        * wtf/Platform.h:
        * yarr/RegexJIT.cpp:
        (JSC::Yarr::RegexGenerator::generateEnter):
        (JSC::Yarr::RegexGenerator::generateReturn):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@55500 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent 1d30efea
2010-03-03 Chao-ying Fu <fu@mips.com>
Reviewed by Gavin Barraclough.
MIPS JIT Supports
https://bugs.webkit.org/show_bug.cgi?id=30144
The following changes enable MIPS YARR and YARR_JIT.
* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::Imm32::Imm32):
* assembler/MIPSAssembler.h: Added.
(JSC::MIPSRegisters::):
(JSC::MIPSAssembler::MIPSAssembler):
(JSC::MIPSAssembler::):
(JSC::MIPSAssembler::JmpSrc::JmpSrc):
(JSC::MIPSAssembler::JmpDst::JmpDst):
(JSC::MIPSAssembler::JmpDst::isUsed):
(JSC::MIPSAssembler::JmpDst::used):
(JSC::MIPSAssembler::emitInst):
(JSC::MIPSAssembler::nop):
(JSC::MIPSAssembler::loadDelayNop):
(JSC::MIPSAssembler::copDelayNop):
(JSC::MIPSAssembler::move):
(JSC::MIPSAssembler::li):
(JSC::MIPSAssembler::lui):
(JSC::MIPSAssembler::addiu):
(JSC::MIPSAssembler::addu):
(JSC::MIPSAssembler::subu):
(JSC::MIPSAssembler::mult):
(JSC::MIPSAssembler::mfhi):
(JSC::MIPSAssembler::mflo):
(JSC::MIPSAssembler::mul):
(JSC::MIPSAssembler::andInsn):
(JSC::MIPSAssembler::andi):
(JSC::MIPSAssembler::nor):
(JSC::MIPSAssembler::orInsn):
(JSC::MIPSAssembler::ori):
(JSC::MIPSAssembler::xorInsn):
(JSC::MIPSAssembler::xori):
(JSC::MIPSAssembler::slt):
(JSC::MIPSAssembler::sltu):
(JSC::MIPSAssembler::sltiu):
(JSC::MIPSAssembler::sll):
(JSC::MIPSAssembler::sllv):
(JSC::MIPSAssembler::sra):
(JSC::MIPSAssembler::srav):
(JSC::MIPSAssembler::lw):
(JSC::MIPSAssembler::lwl):
(JSC::MIPSAssembler::lwr):
(JSC::MIPSAssembler::lhu):
(JSC::MIPSAssembler::sw):
(JSC::MIPSAssembler::jr):
(JSC::MIPSAssembler::jalr):
(JSC::MIPSAssembler::jal):
(JSC::MIPSAssembler::bkpt):
(JSC::MIPSAssembler::bgez):
(JSC::MIPSAssembler::bltz):
(JSC::MIPSAssembler::beq):
(JSC::MIPSAssembler::bne):
(JSC::MIPSAssembler::bc1t):
(JSC::MIPSAssembler::bc1f):
(JSC::MIPSAssembler::newJmpSrc):
(JSC::MIPSAssembler::appendJump):
(JSC::MIPSAssembler::addd):
(JSC::MIPSAssembler::subd):
(JSC::MIPSAssembler::muld):
(JSC::MIPSAssembler::lwc1):
(JSC::MIPSAssembler::ldc1):
(JSC::MIPSAssembler::swc1):
(JSC::MIPSAssembler::sdc1):
(JSC::MIPSAssembler::mtc1):
(JSC::MIPSAssembler::mfc1):
(JSC::MIPSAssembler::truncwd):
(JSC::MIPSAssembler::cvtdw):
(JSC::MIPSAssembler::ceqd):
(JSC::MIPSAssembler::cngtd):
(JSC::MIPSAssembler::cnged):
(JSC::MIPSAssembler::cltd):
(JSC::MIPSAssembler::cled):
(JSC::MIPSAssembler::cueqd):
(JSC::MIPSAssembler::coled):
(JSC::MIPSAssembler::coltd):
(JSC::MIPSAssembler::culed):
(JSC::MIPSAssembler::cultd):
(JSC::MIPSAssembler::label):
(JSC::MIPSAssembler::align):
(JSC::MIPSAssembler::getRelocatedAddress):
(JSC::MIPSAssembler::getDifferenceBetweenLabels):
(JSC::MIPSAssembler::size):
(JSC::MIPSAssembler::executableCopy):
(JSC::MIPSAssembler::getCallReturnOffset):
(JSC::MIPSAssembler::linkJump):
(JSC::MIPSAssembler::linkCall):
(JSC::MIPSAssembler::linkPointer):
(JSC::MIPSAssembler::relinkJump):
(JSC::MIPSAssembler::relinkCall):
(JSC::MIPSAssembler::repatchInt32):
(JSC::MIPSAssembler::repatchPointer):
(JSC::MIPSAssembler::repatchLoadPtrToLEA):
(JSC::MIPSAssembler::relocateJumps):
(JSC::MIPSAssembler::linkWithOffset):
(JSC::MIPSAssembler::linkCallInternal):
* assembler/MacroAssembler.h:
* assembler/MacroAssemblerMIPS.h: Added.
(JSC::MacroAssemblerMIPS::MacroAssemblerMIPS):
(JSC::MacroAssemblerMIPS::):
(JSC::MacroAssemblerMIPS::add32):
(JSC::MacroAssemblerMIPS::and32):
(JSC::MacroAssemblerMIPS::lshift32):
(JSC::MacroAssemblerMIPS::mul32):
(JSC::MacroAssemblerMIPS::not32):
(JSC::MacroAssemblerMIPS::or32):
(JSC::MacroAssemblerMIPS::rshift32):
(JSC::MacroAssemblerMIPS::sub32):
(JSC::MacroAssemblerMIPS::xor32):
(JSC::MacroAssemblerMIPS::load32):
(JSC::MacroAssemblerMIPS::load32WithUnalignedHalfWords):
(JSC::MacroAssemblerMIPS::load32WithAddressOffsetPatch):
(JSC::MacroAssemblerMIPS::loadPtrWithPatchToLEA):
(JSC::MacroAssemblerMIPS::loadPtrWithAddressOffsetPatch):
(JSC::MacroAssemblerMIPS::load16):
(JSC::MacroAssemblerMIPS::store32WithAddressOffsetPatch):
(JSC::MacroAssemblerMIPS::store32):
(JSC::MacroAssemblerMIPS::supportsFloatingPoint):
(JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
(JSC::MacroAssemblerMIPS::pop):
(JSC::MacroAssemblerMIPS::push):
(JSC::MacroAssemblerMIPS::move):
(JSC::MacroAssemblerMIPS::swap):
(JSC::MacroAssemblerMIPS::signExtend32ToPtr):
(JSC::MacroAssemblerMIPS::zeroExtend32ToPtr):
(JSC::MacroAssemblerMIPS::branch32):
(JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords):
(JSC::MacroAssemblerMIPS::branch16):
(JSC::MacroAssemblerMIPS::branchTest32):
(JSC::MacroAssemblerMIPS::jump):
(JSC::MacroAssemblerMIPS::branchAdd32):
(JSC::MacroAssemblerMIPS::branchMul32):
(JSC::MacroAssemblerMIPS::branchSub32):
(JSC::MacroAssemblerMIPS::breakpoint):
(JSC::MacroAssemblerMIPS::nearCall):
(JSC::MacroAssemblerMIPS::call):
(JSC::MacroAssemblerMIPS::ret):
(JSC::MacroAssemblerMIPS::set32):
(JSC::MacroAssemblerMIPS::setTest32):
(JSC::MacroAssemblerMIPS::moveWithPatch):
(JSC::MacroAssemblerMIPS::branchPtrWithPatch):
(JSC::MacroAssemblerMIPS::storePtrWithPatch):
(JSC::MacroAssemblerMIPS::tailRecursiveCall):
(JSC::MacroAssemblerMIPS::makeTailRecursiveCall):
(JSC::MacroAssemblerMIPS::loadDouble):
(JSC::MacroAssemblerMIPS::storeDouble):
(JSC::MacroAssemblerMIPS::addDouble):
(JSC::MacroAssemblerMIPS::subDouble):
(JSC::MacroAssemblerMIPS::mulDouble):
(JSC::MacroAssemblerMIPS::convertInt32ToDouble):
(JSC::MacroAssemblerMIPS::insertRelaxationWords):
(JSC::MacroAssemblerMIPS::branchTrue):
(JSC::MacroAssemblerMIPS::branchFalse):
(JSC::MacroAssemblerMIPS::branchEqual):
(JSC::MacroAssemblerMIPS::branchNotEqual):
(JSC::MacroAssemblerMIPS::branchDouble):
(JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
(JSC::MacroAssemblerMIPS::linkCall):
(JSC::MacroAssemblerMIPS::repatchCall):
* jit/ExecutableAllocator.h:
(JSC::ExecutableAllocator::cacheFlush):
* wtf/Platform.h:
* yarr/RegexJIT.cpp:
(JSC::Yarr::RegexGenerator::generateEnter):
(JSC::Yarr::RegexGenerator::generateReturn):
2010-03-03 Steve Falkenburg <sfalken@apple.com>
 
Windows build fix.
......
......@@ -173,7 +173,7 @@ public:
struct Imm32 {
explicit Imm32(int32_t value)
: m_value(value)
#if CPU(ARM)
#if CPU(ARM) || CPU(MIPS)
, m_isPointer(false)
#endif
{
......@@ -182,7 +182,7 @@ public:
#if !CPU(X86_64)
explicit Imm32(ImmPtr ptr)
: m_value(ptr.asIntptr())
#if CPU(ARM)
#if CPU(ARM) || CPU(MIPS)
, m_isPointer(true)
#endif
{
......@@ -190,13 +190,14 @@ public:
#endif
int32_t m_value;
#if CPU(ARM)
#if CPU(ARM) || CPU(MIPS)
// We rely on being able to regenerate code to recover exception handling
// information. Since ARMv7 supports 16-bit immediates there is a danger
// that if pointer values change the layout of the generated code will change.
// To avoid this problem, always generate pointers (and thus Imm32s constructed
// from ImmPtrs) with a code sequence that is able to represent any pointer
// value - don't use a more compact form in these cases.
// Same for MIPS.
bool m_isPointer;
#endif
};
......
This diff is collapsed.
......@@ -38,6 +38,12 @@ namespace JSC { typedef MacroAssemblerARMv7 MacroAssemblerBase; };
#include "MacroAssemblerARM.h"
namespace JSC { typedef MacroAssemblerARM MacroAssemblerBase; };
#elif CPU(MIPS)
#include "MacroAssemblerMIPS.h"
namespace JSC {
typedef MacroAssemblerMIPS MacroAssemblerBase;
};
#elif CPU(X86)
#include "MacroAssemblerX86.h"
namespace JSC { typedef MacroAssemblerX86 MacroAssemblerBase; };
......
This diff is collapsed.
......@@ -43,6 +43,10 @@
#include <e32std.h>
#endif
#if CPU(MIPS) && OS(LINUX)
#include <sys/cachectl.h>
#endif
#if OS(WINCE)
// From pkfuncs.h (private header file from the Platform Builder)
#define CACHE_SYNC_ALL 0x07F
......@@ -190,6 +194,32 @@ public:
static void cacheFlush(void*, size_t)
{
}
#elif CPU(MIPS)
static void cacheFlush(void* code, size_t size)
{
#if COMPILER(GCC) && (GCC_VERSION >= 40300)
#if WTF_MIPS_ISA_REV(2) && (GCC_VERSION < 40403)
int lineSize;
asm("rdhwr %0, $1" : "=r" (lineSize));
//
// Modify "start" and "end" to avoid GCC 4.3.0-4.4.2 bug in
// mips_expand_synci_loop that may execute synci one more time.
// "start" points to the fisrt byte of the cache line.
// "end" points to the last byte of the line before the last cache line.
// Because size is always a multiple of 4, this is safe to set
// "end" to the last byte.
//
intptr_t start = reinterpret_cast<intptr_t>(code) & (-lineSize);
intptr_t end = ((reinterpret_cast<intptr_t>(code) + size - 1) & (-lineSize)) - 1;
__builtin___clear_cache(reinterpret_cast<char*>(start), reinterpret_cast<char*>(end));
#else
intptr_t end = reinterpret_cast<intptr_t>(code) + size;
__builtin___clear_cache(reinterpret_cast<char*>(code), reinterpret_cast<char*>(end));
#endif
#else
_flush_cache(reinterpret_cast<char*>(code), size, BCACHE);
#endif
}
#elif CPU(ARM_THUMB2) && OS(IPHONE_OS)
static void cacheFlush(void* code, size_t size)
{
......
......@@ -104,6 +104,23 @@
#define WTF_CPU_IA64 1
#endif
/* CPU(MIPS) - MIPS 32-bit */
/* Note: Only O32 ABI is tested, so we enable it for O32 ABI for now. */
#if (defined(mips) || defined(__mips__)) \
&& defined(_ABIO32)
#define WTF_CPU_MIPS 1
#if defined(__MIPSEB__)
#define WTF_CPU_BIG_ENDIAN 1
#endif
#define WTF_MIPS_PIC (defined __PIC__)
#define WTF_MIPS_ARCH __mips
#define WTF_MIPS_ISA(v) (defined WTF_MIPS_ARCH && WTF_MIPS_ARCH == v)
#define WTF_MIPS_ISA_AT_LEAST(v) (defined WTF_MIPS_ARCH && WTF_MIPS_ARCH >= v)
#define WTF_MIPS_ARCH_REV __mips_isa_rev
#define WTF_MIPS_ISA_REV(v) (defined WTF_MIPS_ARCH_REV && WTF_MIPS_ARCH_REV == v)
#define WTF_MIPS_DOUBLE_FLOAT (defined __mips_hard_float && !defined __mips_single_float)
#endif /* MIPS */
/* CPU(PPC) - PowerPC 32-bit */
#if defined(__ppc__) \
|| defined(__PPC__) \
......@@ -830,7 +847,7 @@
#if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64)
#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS))) || CPU(IA64) || CPU(ALPHA)
#define WTF_USE_JSVALUE64 1
#elif CPU(ARM) || CPU(PPC64)
#elif CPU(ARM) || CPU(PPC64) || CPU(MIPS)
#define WTF_USE_JSVALUE32 1
#elif OS(WINDOWS) && COMPILER(MINGW)
/* Using JSVALUE32_64 causes padding/alignement issues for JITStubArg
......@@ -950,7 +967,8 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
|| (CPU(X86) && OS(WINDOWS) && COMPILER(MSVC)) \
|| (CPU(X86) && OS(LINUX) && GCC_VERSION >= 40100) \
|| (CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100) \
|| (CPU(ARM_TRADITIONAL) && OS(LINUX))
|| (CPU(ARM_TRADITIONAL) && OS(LINUX)) \
|| (CPU(MIPS) && OS(LINUX))
#define ENABLE_YARR 1
#define ENABLE_YARR_JIT 1
#endif
......
......@@ -54,6 +54,16 @@ class RegexGenerator : private MacroAssembler {
static const RegisterID regT1 = ARMRegisters::r6;
static const RegisterID returnRegister = ARMRegisters::r0;
#elif CPU(MIPS)
static const RegisterID input = MIPSRegisters::a0;
static const RegisterID index = MIPSRegisters::a1;
static const RegisterID length = MIPSRegisters::a2;
static const RegisterID output = MIPSRegisters::a3;
static const RegisterID regT0 = MIPSRegisters::t4;
static const RegisterID regT1 = MIPSRegisters::t5;
static const RegisterID returnRegister = MIPSRegisters::v0;
#elif CPU(X86)
static const RegisterID input = X86Registers::eax;
static const RegisterID index = X86Registers::edx;
......@@ -1313,6 +1323,8 @@ class RegexGenerator : private MacroAssembler {
push(ARMRegisters::r5);
push(ARMRegisters::r6);
move(ARMRegisters::r3, output);
#elif CPU(MIPS)
// Do nothing.
#endif
}
......@@ -1330,6 +1342,8 @@ class RegexGenerator : private MacroAssembler {
pop(ARMRegisters::r6);
pop(ARMRegisters::r5);
pop(ARMRegisters::r4);
#elif CPU(MIPS)
// Do nothing
#endif
ret();
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment