diff options
Diffstat (limited to 'JavaScriptCore/assembler/MacroAssemblerMIPS.h')
| -rw-r--r-- | JavaScriptCore/assembler/MacroAssemblerMIPS.h | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/JavaScriptCore/assembler/MacroAssemblerMIPS.h b/JavaScriptCore/assembler/MacroAssemblerMIPS.h index 9853c34..88132f7 100644 --- a/JavaScriptCore/assembler/MacroAssemblerMIPS.h +++ b/JavaScriptCore/assembler/MacroAssemblerMIPS.h @@ -319,6 +319,16 @@ public: m_assembler.sra(dest, dest, imm.m_value); } + void urshift32(RegisterID shiftAmount, RegisterID dest) + { + m_assembler.srlv(dest, dest, shiftAmount); + } + + void urshift32(Imm32 imm, RegisterID dest) + { + m_assembler.srl(dest, dest, imm.m_value); + } + void sub32(RegisterID src, RegisterID dest) { m_assembler.subu(dest, dest, src); @@ -435,6 +445,11 @@ public: m_assembler.xorInsn(dest, dest, immTempRegister); } + void sqrtDouble(FPRegisterID src, FPRegisterID dst) + { + m_assembler.sqrtd(dst, src); + } + // Memory access operations: // // Loads are of the form load(address, destination) and stores of the form @@ -610,6 +625,24 @@ public: } /* Need to use zero-extened load half-word for load16. */ + void load16(ImplicitAddress address, RegisterID dest) + { + if (address.offset >= -32768 && address.offset <= 32767 + && !m_fixedWidth) + m_assembler.lhu(dest, address.base, address.offset); + else { + /* + lui addrTemp, (offset + 0x8000) >> 16 + addu addrTemp, addrTemp, base + lhu dest, (offset & 0xffff)(addrTemp) + */ + m_assembler.lui(addrTempRegister, (address.offset + 0x8000) >> 16); + m_assembler.addu(addrTempRegister, addrTempRegister, address.base); + m_assembler.lhu(dest, addrTempRegister, address.offset); + } + } + + /* Need to use zero-extened load half-word for load16. */ void load16(BaseIndex address, RegisterID dest) { if (address.offset >= -32768 && address.offset <= 32767 @@ -779,6 +812,15 @@ public: #endif } + bool supportsFloatingPointSqrt() const + { +#if WTF_MIPS_DOUBLE_FLOAT && WTF_MIPS_ISA_AT_LEAST(2) + return true; +#else + return false; +#endif + } + // Stack manipulation operations: // // The ABI is assumed to provide a stack abstraction to memory, @@ -1632,7 +1674,7 @@ public: return branchFalse(); // false } if (cond == DoubleGreaterThanOrEqual) { - m_assembler.cnged(right, left); + m_assembler.cnged(left, right); return branchFalse(); // false } if (cond == DoubleLessThan) { |
