Changeset 215237 in webkit


Ignore:
Timestamp:
Apr 11, 2017 10:03:59 AM (7 years ago)
Author:
commit-queue@webkit.org
Message:

[jsc] Add missing MacroAssemblerMIPS::or32() implementation
https://bugs.webkit.org/show_bug.cgi?id=169714

Patch by Guillaume Emont <guijemont@igalia.com> on 2017-04-11
Reviewed by Michael Catanzaro.

  • assembler/MacroAssemblerMIPS.h:

(JSC::MacroAssemblerMIPS::or32):
Added or32(TrustedImm32, Address).

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r215235 r215237  
     12017-04-11  Guillaume Emont  <guijemont@igalia.com>
     2
     3        [jsc] Add missing MacroAssemblerMIPS::or32() implementation
     4        https://bugs.webkit.org/show_bug.cgi?id=169714
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        * assembler/MacroAssemblerMIPS.h:
     9        (JSC::MacroAssemblerMIPS::or32):
     10        Added or32(TrustedImm32, Address).
     11
    1122017-04-11  Joseph Pecoraro  <pecoraro@apple.com>
    213
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h

    r215226 r215237  
    442442        m_assembler.orInsn(dataTempRegister, dataTempRegister, src);
    443443        store32(dataTempRegister, dest.m_ptr);
     444    }
     445
     446    void or32(TrustedImm32 imm, Address address)
     447    {
     448        if (address.offset >= -32768 && address.offset <= 32767
     449            && !m_fixedWidth) {
     450            /*
     451              lw        dataTemp, offset(base)
     452              li        immTemp, imm
     453              or        dataTemp, dataTemp, immTemp
     454              sw        dataTemp, offset(base)
     455            */
     456            m_assembler.lw(dataTempRegister, address.base, address.offset);
     457            if (imm.m_value >= 0 && imm.m_value <= 65535 && !m_fixedWidth)
     458                m_assembler.ori(dataTempRegister, dataTempRegister, imm.m_value);
     459            else {
     460                move(imm, immTempRegister);
     461                m_assembler.orInsn(dataTempRegister, dataTempRegister, immTempRegister);
     462            }
     463            m_assembler.sw(dataTempRegister, address.base, address.offset);
     464        } else {
     465            /*
     466              lui       addrTemp, (offset + 0x8000) >> 16
     467              addu      addrTemp, addrTemp, base
     468              lw        dataTemp, (offset & 0xffff)(addrTemp)
     469              li        immtemp, imm
     470              or        dataTemp, dataTemp, immTemp
     471              sw        dataTemp, (offset & 0xffff)(addrTemp)
     472            */
     473            m_assembler.lui(addrTempRegister, (address.offset + 0x8000) >> 16);
     474            m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
     475            m_assembler.lw(dataTempRegister, addrTempRegister, address.offset);
     476
     477            if (imm.m_value >= 0 && imm.m_value <= 65535 && !m_fixedWidth)
     478                m_assembler.ori(dataTempRegister, dataTempRegister, imm.m_value);
     479            else {
     480                move(imm, immTempRegister);
     481                m_assembler.orInsn(dataTempRegister, dataTempRegister, immTempRegister);
     482            }
     483            m_assembler.sw(dataTempRegister, addrTempRegister, address.offset);
     484        }
    444485    }
    445486
Note: See TracChangeset for help on using the changeset viewer.