WebKit Bugzilla
Attachment 339717 Details for
Bug 184584
: [MIPS] Optimize generated JIT code using mips32r2 instructions
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
mips32.diff (text/plain), 26.24 KB, created by
Srdjan Lazarevic
on 2018-05-07 07:13:28 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Srdjan Lazarevic
Created:
2018-05-07 07:13:28 PDT
Size:
26.24 KB
patch
obsolete
>diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index fb2176f..339a226 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,39 @@ >+2018-05-07 Srdjan Lazarevic <srdjan.lazarevic@rt-rk.com> >+ >+ [MIPS] Optimize generated JIT code using r2 >+ https://bugs.webkit.org/show_bug.cgi?id=184584 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ EXT and MFHC1 instructions from MIPSR2 implemented and used where it is possible. >+ Also, done some code size optimizations that were discovered in meantime. >+ >+ * assembler/MIPSAssembler.h: >+ (JSC::MIPSAssembler::ext): >+ (JSC::MIPSAssembler::mfhc1): >+ (JSC::MIPSAssembler::vmov): >+ * assembler/MacroAssemblerMIPS.cpp: >+ * assembler/MacroAssemblerMIPS.h: >+ (JSC::MacroAssemblerMIPS::isPowerOf2): >+ (JSC::MacroAssemblerMIPS::bitPosition): >+ (JSC::MacroAssemblerMIPS::loadAddress): >+ (JSC::MacroAssemblerMIPS::getEffectiveAddress): >+ (JSC::MacroAssemblerMIPS::load8): >+ (JSC::MacroAssemblerMIPS::load8SignedExtendTo32): >+ (JSC::MacroAssemblerMIPS::load32): >+ (JSC::MacroAssemblerMIPS::load16Unaligned): >+ (JSC::MacroAssemblerMIPS::load32WithUnalignedHalfWords): >+ (JSC::MacroAssemblerMIPS::load16): >+ (JSC::MacroAssemblerMIPS::load16SignedExtendTo32): >+ (JSC::MacroAssemblerMIPS::store8): >+ (JSC::MacroAssemblerMIPS::store16): >+ (JSC::MacroAssemblerMIPS::store32): >+ (JSC::MacroAssemblerMIPS::branchTest32): >+ (JSC::MacroAssemblerMIPS::loadFloat): >+ (JSC::MacroAssemblerMIPS::loadDouble): >+ (JSC::MacroAssemblerMIPS::storeFloat): >+ (JSC::MacroAssemblerMIPS::storeDouble): >+ > 2018-05-06 Yusuke Suzuki <utatane.tea@gmail.com> > > [JSC] Remove "using namespace std;" from JSC, bmalloc, WTF >diff --git a/Source/JavaScriptCore/assembler/MIPSAssembler.h b/Source/JavaScriptCore/assembler/MIPSAssembler.h >index ce0f69b..f879423 100644 >--- a/Source/JavaScriptCore/assembler/MIPSAssembler.h >+++ b/Source/JavaScriptCore/assembler/MIPSAssembler.h >@@ -238,7 +238,9 @@ public: > OP_SH_CODE = 16, > OP_SH_FD = 6, > OP_SH_FS = 11, >- OP_SH_FT = 16 >+ OP_SH_FT = 16, >+ OP_SH_MSB = 11, >+ OP_SH_LSB = 6 > }; > > // FCSR Bits >@@ -319,6 +321,17 @@ public: > } > } > >+ void ext(RegisterID rt, RegisterID rs, int pos, int size) >+ { >+ int msb = size - 1; >+ emitInst(0x7c000000 | (rt << OP_SH_RT) | (rs << OP_SH_RS) | (pos << OP_SH_LSB) | (msb << OP_SH_MSB)); >+ } >+ >+ void mfhc1(RegisterID rt, FPRegisterID fs) >+ { >+ emitInst(0x4460000 | (rt << OP_SH_RT) | (fs << OP_SH_FS)); >+ } >+ > void lui(RegisterID rt, int imm) > { > emitInst(0x3c000000 | (rt << OP_SH_RT) | (imm & 0xffff)); >@@ -807,7 +820,7 @@ public: > // Assembly helpers for moving data between fp and registers. > void vmov(RegisterID rd1, RegisterID rd2, FPRegisterID rn) > { >-#if WTF_MIPS_ISA_REV(2) && WTF_MIPS_FP64 >+#if WTF_MIPS_ISA_REV(2) > mfc1(rd1, rn); > mfhc1(rd2, rn); > #else >@@ -818,7 +831,7 @@ public: > > void vmov(FPRegisterID rd, RegisterID rn1, RegisterID rn2) > { >-#if WTF_MIPS_ISA_REV(2) && WTF_MIPS_FP64 >+#if WTF_MIPS_ISA_REV(2) > mtc1(rn1, rd); > mthc1(rn2, rd); > #else >diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.cpp b/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.cpp >index ada67d5..058c5b6 100644 >--- a/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.cpp >+++ b/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.cpp >@@ -30,6 +30,7 @@ > > #include "ProbeContext.h" > #include <wtf/InlineASM.h> >+#include <wtf/MathExtras.h> > > namespace JSC { > >diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h b/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h >index 7b19838..b841cb9 100644 >--- a/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h >+++ b/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h >@@ -51,6 +51,16 @@ public: > return value >= -2147483647 - 1 && value <= 2147483647; > } > >+ inline bool isPowerOf2(int32_t v) >+ { >+ return hasOneBitSet(v); >+ } >+ >+ inline int bitPosition(int32_t v) >+ { >+ return getLSBSet(v); >+ } >+ > static const Scale ScalePtr = TimesFour; > > // For storing immediate number >@@ -310,10 +320,41 @@ public: > m_assembler.sw(dataTempRegister, addrTempRegister, 4); > } > >+ void loadAddress(BaseIndex address, bool loadTrail = true) >+ { >+ if (loadTrail) { >+ if (!address.scale) >+ m_assembler.addu(addrTempRegister, address.index, address.base); >+ else { >+ m_assembler.sll(addrTempRegister, address.index, address.scale); >+ m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ } >+ if (address.offset < -32768 || address.offset > 32767) { >+ m_assembler.lui(immTempRegister, address.offset >> 16); >+ m_assembler.ori(immTempRegister, immTempRegister, address.offset); >+ m_assembler.addu(addrTempRegister, addrTempRegister, immTempRegister); >+ } >+ } else { >+ if (!address.scale) >+ m_assembler.addu(addrTempRegister, address.index, address.base); >+ else { >+ m_assembler.sll(addrTempRegister, address.index, address.scale); >+ m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ } >+ if (address.offset < -32768 || address.offset > 32767) { >+ m_assembler.lui(immTempRegister, (address.offset + 0x8000) >> 16); >+ m_assembler.addu(addrTempRegister, addrTempRegister, immTempRegister); >+ } >+ } >+ } > void getEffectiveAddress(BaseIndex address, RegisterID dest) > { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(dest, addrTempRegister, address.base); >+ if (!address.scale && !m_fixedWidth) >+ m_assembler.addu(dest, address.index, address.base); >+ else { >+ m_assembler.sll(addrTempRegister, address.index, address.scale); >+ m_assembler.addu(dest, addrTempRegister, address.base); >+ } > if (address.offset) > add32(TrustedImm32(address.offset), dest); > } >@@ -845,19 +886,8 @@ public: > > void load8(BaseIndex address, RegisterID dest) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- lbu dest, address.offset(addrTemp) >- */ >- if (!address.scale) >- m_assembler.addu(addrTempRegister, address.index, address.base); >- else { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- } >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.lbu(dest, addrTempRegister, address.offset); > } else { > /* >@@ -867,12 +897,8 @@ public: > addu addrTemp, addrTemp, immTemp > lbu dest, (address.offset & 0xffff)(at) > */ >- if (!address.scale && !m_fixedWidth) >- m_assembler.addu(addrTempRegister, address.index, address.base); >- else { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- } >+ m_assembler.sll(addrTempRegister, address.index, address.scale); >+ m_assembler.addu(addrTempRegister, addrTempRegister, address.base); > m_assembler.lui(immTempRegister, (address.offset + 0x8000) >> 16); > m_assembler.addu(addrTempRegister, addrTempRegister, immTempRegister); > m_assembler.lbu(dest, addrTempRegister, address.offset); >@@ -919,19 +945,8 @@ public: > > void load8SignedExtendTo32(BaseIndex address, RegisterID dest) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- lb dest, address.offset(addrTemp) >- */ >- if (!address.scale) >- m_assembler.addu(addrTempRegister, address.index, address.base); >- else { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- } >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.lb(dest, addrTempRegister, address.offset); > } else { > /* >@@ -941,12 +956,8 @@ public: > addu addrTemp, addrTemp, immTemp > lb dest, (address.offset & 0xffff)(at) > */ >- if (!address.scale && !m_fixedWidth) >- m_assembler.addu(addrTempRegister, address.index, address.base); >- else { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- } >+ m_assembler.sll(addrTempRegister, address.index, address.scale); >+ m_assembler.addu(addrTempRegister, addrTempRegister, address.base); > m_assembler.lui(immTempRegister, (address.offset + 0x8000) >> 16); > m_assembler.addu(addrTempRegister, addrTempRegister, immTempRegister); > m_assembler.lb(dest, addrTempRegister, address.offset); >@@ -994,19 +1005,8 @@ public: > > void load32(BaseIndex address, RegisterID dest) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- lw dest, address.offset(addrTemp) >- */ >- if (!address.scale) >- m_assembler.addu(addrTempRegister, address.index, address.base); >- else { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- } >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.lw(dest, addrTempRegister, address.offset); > } else { > /* >@@ -1026,17 +1026,8 @@ public: > > void load16Unaligned(BaseIndex address, RegisterID dest) > { >- if (address.offset >= -32768 && address.offset <= 32767 && !m_fixedWidth) { >- /* >- sll addrtemp, address.index, address.scale >- addu addrtemp, addrtemp, address.base >- lbu immTemp, address.offset+x(addrtemp) (x=0 for LE, x=1 for BE) >- lbu dest, address.offset+x(addrtemp) (x=1 for LE, x=0 for BE) >- sll dest, dest, 8 >- or dest, dest, immTemp >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address); > #if CPU(BIG_ENDIAN) > m_assembler.lbu(immTempRegister, addrTempRegister, address.offset + 1); > m_assembler.lbu(dest, addrTempRegister, address.offset); >@@ -1077,20 +1068,8 @@ public: > > void load32WithUnalignedHalfWords(BaseIndex address, RegisterID dest) > { >- if (address.offset >= -32768 && address.offset <= 32764 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- (Big-Endian) >- lwl dest, address.offset(addrTemp) >- lwr dest, address.offset+3(addrTemp) >- (Little-Endian) >- lwl dest, address.offset+3(addrTemp) >- lwr dest, address.offset(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address); > #if CPU(BIG_ENDIAN) > m_assembler.lwl(dest, addrTempRegister, address.offset); > m_assembler.lwr(dest, addrTempRegister, address.offset + 3); >@@ -1189,15 +1168,8 @@ public: > /* Need to use zero-extened load half-word for load16. */ > void load16(BaseIndex address, RegisterID dest) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- lhu dest, address.offset(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.lhu(dest, addrTempRegister, address.offset); > } else { > /* >@@ -1217,15 +1189,8 @@ public: > > void load16SignedExtendTo32(BaseIndex address, RegisterID dest) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- lh dest, address.offset(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.lh(dest, addrTempRegister, address.offset); > } else { > /* >@@ -1262,19 +1227,8 @@ public: > > void store8(RegisterID src, BaseIndex address) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- sb src, address.offset(addrTemp) >- */ >- if (!address.scale) >- m_assembler.addu(addrTempRegister, address.index, address.base); >- else { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- } >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.sb(src, addrTempRegister, address.offset); > } else { > /* >@@ -1284,12 +1238,8 @@ public: > addu addrTemp, addrTemp, immTemp > sb src, (address.offset & 0xffff)(at) > */ >- if (!address.scale && !m_fixedWidth) >- m_assembler.addu(addrTempRegister, address.index, address.base); >- else { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- } >+ m_assembler.sll(addrTempRegister, address.index, address.scale); >+ m_assembler.addu(addrTempRegister, addrTempRegister, address.base); > m_assembler.lui(immTempRegister, (address.offset + 0x8000) >> 16); > m_assembler.addu(addrTempRegister, addrTempRegister, immTempRegister); > m_assembler.sb(src, addrTempRegister, address.offset); >@@ -1384,15 +1334,8 @@ public: > > void store16(RegisterID src, BaseIndex address) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- sh src, address.offset(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.sh(src, addrTempRegister, address.offset); > } else { > /* >@@ -1429,19 +1372,8 @@ public: > > void store32(RegisterID src, BaseIndex address) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- sw src, address.offset(addrTemp) >- */ >- if (!address.scale) >- m_assembler.addu(addrTempRegister, address.index, address.base); >- else { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- } >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.sw(src, addrTempRegister, address.offset); > } else { > /* >@@ -1461,8 +1393,11 @@ public: > > void store32(TrustedImm32 imm, ImplicitAddress address) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >+ if (!m_fixedWidth) { >+ if (address.offset < -32768 || address.offset > 32767) { >+ m_assembler.lui(immTempRegister, (address.offset + 0x8000) >> 16); >+ m_assembler.addu(addrTempRegister, addrTempRegister, immTempRegister); >+ } > if (!imm.m_value) > m_assembler.sw(MIPSRegisters::zero, address.base, address.offset); > else { >@@ -1477,29 +1412,15 @@ public: > */ > m_assembler.lui(addrTempRegister, (address.offset + 0x8000) >> 16); > m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- if (!imm.m_value && !m_fixedWidth) >- m_assembler.sw(MIPSRegisters::zero, addrTempRegister, address.offset); >- else { >- move(imm, immTempRegister); >- m_assembler.sw(immTempRegister, addrTempRegister, address.offset); >- } >+ move(imm, immTempRegister); >+ m_assembler.sw(immTempRegister, addrTempRegister, address.offset); > } > } > > void store32(TrustedImm32 imm, BaseIndex address) > { >- if (address.offset >= -32768 && address.offset <= 32767 && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- sw src, address.offset(addrTemp) >- */ >- if (!address.scale) >- m_assembler.addu(addrTempRegister, address.index, address.base); >- else { >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >- } >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > if (!imm.m_value) > m_assembler.sw(MIPSRegisters::zero, addrTempRegister, address.offset); > else { >@@ -1518,12 +1439,8 @@ public: > m_assembler.addu(addrTempRegister, addrTempRegister, address.base); > m_assembler.lui(immTempRegister, (address.offset + 0x8000) >> 16); > m_assembler.addu(addrTempRegister, addrTempRegister, immTempRegister); >- if (!imm.m_value && !m_fixedWidth) >- m_assembler.sw(MIPSRegisters::zero, addrTempRegister, address.offset); >- else { >- move(imm, immTempRegister); >- m_assembler.sw(immTempRegister, addrTempRegister, address.offset); >- } >+ move(imm, immTempRegister); >+ m_assembler.sw(immTempRegister, addrTempRegister, address.offset); > } > } > >@@ -1897,6 +1814,23 @@ public: > RELEASE_ASSERT_NOT_REACHED(); > } > } >+#if WTF_MIPS_ISA_REV(2) >+ if (isPowerOf2(mask.m_value)) { >+ uint16_t pos= bitPosition(mask.m_value); >+ m_assembler.ext(cmpTempRegister, reg, pos, 1); >+ switch (cond) { >+ case Zero: >+ return branchEqual(cmpTempRegister, MIPSRegisters::zero); >+ case NonZero: >+ return branchNotEqual(cmpTempRegister, MIPSRegisters::zero); >+ case Signed: >+ m_assembler.slt(cmpTempRegister, cmpTempRegister, MIPSRegisters::zero); >+ return branchNotEqual(cmpTempRegister, MIPSRegisters::zero); >+ default: >+ RELEASE_ASSERT_NOT_REACHED(); >+ } >+ } >+#endif > if (mask.m_value >= 0 && mask.m_value <= 65535) { > m_assembler.andi(cmpTempRegister, reg, mask.m_value); > switch (cond) { >@@ -1912,6 +1846,7 @@ public: > } > } > } >+ > move(mask, immTempRegister); > return branchTest32(cond, reg, immTempRegister); > } >@@ -2763,15 +2698,8 @@ public: > > void loadFloat(BaseIndex address, FPRegisterID dest) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- lwc1 dest, address.offset(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.lwc1(dest, addrTempRegister, address.offset); > } else { > /* >@@ -2839,16 +2767,8 @@ public: > void loadDouble(BaseIndex address, FPRegisterID dest) > { > #if WTF_MIPS_ISA(1) >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- lwc1 dest, address.offset(addrTemp) >- lwc1 dest+1, (address.offset+4)(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.lwc1(dest, addrTempRegister, address.offset); > m_assembler.lwc1(FPRegisterID(dest + 1), addrTempRegister, address.offset + 4); > } else { >@@ -2868,15 +2788,8 @@ public: > m_assembler.lwc1(FPRegisterID(dest + 1), addrTempRegister, address.offset + 4); > } > #else >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- ldc1 dest, address.offset(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.ldc1(dest, addrTempRegister, address.offset); > } else { > /* >@@ -2924,15 +2837,8 @@ public: > > void storeFloat(FPRegisterID src, BaseIndex address) > { >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- swc1 src, address.offset(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.swc1(src, addrTempRegister, address.offset); > } else { > /* >@@ -3000,16 +2906,8 @@ public: > void storeDouble(FPRegisterID src, BaseIndex address) > { > #if WTF_MIPS_ISA(1) >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- swc1 src, address.offset(addrTemp) >- swc1 src+1, (address.offset + 4)(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.swc1(src, addrTempRegister, address.offset); > m_assembler.swc1(FPRegisterID(src + 1), addrTempRegister, address.offset + 4); > } else { >@@ -3029,15 +2927,8 @@ public: > m_assembler.swc1(FPRegisterID(src + 1), addrTempRegister, address.offset + 4); > } > #else >- if (address.offset >= -32768 && address.offset <= 32767 >- && !m_fixedWidth) { >- /* >- sll addrTemp, address.index, address.scale >- addu addrTemp, addrTemp, address.base >- sdc1 src, address.offset(addrTemp) >- */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ if (!m_fixedWidth) { >+ loadAddress(address, false); > m_assembler.sdc1(src, addrTempRegister, address.offset); > } else { > /*
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
ysuzuki
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 184584
:
337882
| 339717 |
339958
|
339960
|
339962