summaryrefslogtreecommitdiffstats
path: root/JavaScriptCore/assembler/MacroAssemblerMIPS.h
diff options
context:
space:
mode:
Diffstat (limited to 'JavaScriptCore/assembler/MacroAssemblerMIPS.h')
-rw-r--r--JavaScriptCore/assembler/MacroAssemblerMIPS.h44
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) {