Modified: trunk/Source/_javascript_Core/ChangeLog (215236 => 215237)
--- trunk/Source/_javascript_Core/ChangeLog 2017-04-11 17:00:29 UTC (rev 215236)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-04-11 17:03:59 UTC (rev 215237)
@@ -1,3 +1,14 @@
+2017-04-11 Guillaume Emont <[email protected]>
+
+ [jsc] Add missing MacroAssemblerMIPS::or32() implementation
+ https://bugs.webkit.org/show_bug.cgi?id=169714
+
+ Reviewed by Michael Catanzaro.
+
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::or32):
+ Added or32(TrustedImm32, Address).
+
2017-04-11 Joseph Pecoraro <[email protected]>
test262: test262/test/annexB/language/comments/multi-line-html-close.js
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h (215236 => 215237)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h 2017-04-11 17:00:29 UTC (rev 215236)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h 2017-04-11 17:03:59 UTC (rev 215237)
@@ -443,6 +443,47 @@
store32(dataTempRegister, dest.m_ptr);
}
+ void or32(TrustedImm32 imm, Address address)
+ {
+ if (address.offset >= -32768 && address.offset <= 32767
+ && !m_fixedWidth) {
+ /*
+ lw dataTemp, offset(base)
+ li immTemp, imm
+ or dataTemp, dataTemp, immTemp
+ sw dataTemp, offset(base)
+ */
+ m_assembler.lw(dataTempRegister, address.base, address.offset);
+ if (imm.m_value >= 0 && imm.m_value <= 65535 && !m_fixedWidth)
+ m_assembler.ori(dataTempRegister, dataTempRegister, imm.m_value);
+ else {
+ move(imm, immTempRegister);
+ m_assembler.orInsn(dataTempRegister, dataTempRegister, immTempRegister);
+ }
+ m_assembler.sw(dataTempRegister, address.base, address.offset);
+ } else {
+ /*
+ lui addrTemp, (offset + 0x8000) >> 16
+ addu addrTemp, addrTemp, base
+ lw dataTemp, (offset & 0xffff)(addrTemp)
+ li immtemp, imm
+ or dataTemp, dataTemp, immTemp
+ sw dataTemp, (offset & 0xffff)(addrTemp)
+ */
+ m_assembler.lui(addrTempRegister, (address.offset + 0x8000) >> 16);
+ m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
+ m_assembler.lw(dataTempRegister, addrTempRegister, address.offset);
+
+ if (imm.m_value >= 0 && imm.m_value <= 65535 && !m_fixedWidth)
+ m_assembler.ori(dataTempRegister, dataTempRegister, imm.m_value);
+ else {
+ move(imm, immTempRegister);
+ m_assembler.orInsn(dataTempRegister, dataTempRegister, immTempRegister);
+ }
+ m_assembler.sw(dataTempRegister, addrTempRegister, address.offset);
+ }
+ }
+
void rshift32(RegisterID shiftAmount, RegisterID dest)
{
m_assembler.srav(dest, dest, shiftAmount);