WebKit Bugzilla
Attachment 339960 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
mips32r2.diff (text/plain), 24.22 KB, created by
Srdjan Lazarevic
on 2018-05-09 06:37:12 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Srdjan Lazarevic
Created:
2018-05-09 06:37:12 PDT
Size:
24.22 KB
patch
obsolete
>diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index 169d17c..6e1c47f 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,38 @@ >+2018-05-09 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): >+ * 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-08 Dominik Infuehr <dinfuehr@igalia.com> > > [MIPS] Collect callee-saved register using inline assembly >diff --git a/Source/JavaScriptCore/assembler/MIPSAssembler.h b/Source/JavaScriptCore/assembler/MIPSAssembler.h >index ce0f69b..e3e5490 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)); >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..f7db1e3 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 >@@ -103,6 +113,11 @@ public: > DoubleLessThanOrEqualOrUnordered > }; > >+ enum class LoadAddressMode { >+ ScaleAndAddOffsetIfOffsetIsOutOfBounds, >+ Scale >+ }; >+ > static const RegisterID stackPointerRegister = MIPSRegisters::sp; > static const RegisterID framePointerRegister = MIPSRegisters::fp; > static const RegisterID returnAddressRegister = MIPSRegisters::ra; >@@ -310,10 +325,37 @@ public: > m_assembler.sw(dataTempRegister, addrTempRegister, 4); > } > >+ void loadAddress(BaseIndex address, LoadAddressMode mode) >+ { >+ if (mode == LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds) { >+ 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); >+ } >+ } 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); >+ } >+ } >+ } >+ > 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 +887,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.lbu(dest, addrTempRegister, address.offset); > } else { > /* >@@ -867,12 +898,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 +946,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.lb(dest, addrTempRegister, address.offset); > } else { > /* >@@ -941,12 +957,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 +1006,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.lw(dest, addrTempRegister, address.offset); > } else { > /* >@@ -1035,8 +1036,7 @@ public: > sll dest, dest, 8 > or dest, dest, immTemp > */ >- m_assembler.sll(addrTempRegister, address.index, address.scale); >- m_assembler.addu(addrTempRegister, addrTempRegister, address.base); >+ loadAddress(address, LoadAddressMode::Scale); > #if CPU(BIG_ENDIAN) > m_assembler.lbu(immTempRegister, addrTempRegister, address.offset + 1); > m_assembler.lbu(dest, addrTempRegister, address.offset); >@@ -1089,8 +1089,7 @@ public: > 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); >+ loadAddress(address, LoadAddressMode::Scale); > #if CPU(BIG_ENDIAN) > m_assembler.lwl(dest, addrTempRegister, address.offset); > m_assembler.lwr(dest, addrTempRegister, address.offset + 3); >@@ -1189,15 +1188,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.lhu(dest, addrTempRegister, address.offset); > } else { > /* >@@ -1217,15 +1209,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.lh(dest, addrTempRegister, address.offset); > } else { > /* >@@ -1262,19 +1247,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.sb(src, addrTempRegister, address.offset); > } else { > /* >@@ -1284,12 +1258,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 +1354,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.sh(src, addrTempRegister, address.offset); > } else { > /* >@@ -1429,19 +1392,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.sw(src, addrTempRegister, address.offset); > } else { > /* >@@ -1488,18 +1440,8 @@ public: > > 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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > if (!imm.m_value) > m_assembler.sw(MIPSRegisters::zero, addrTempRegister, address.offset); > else { >@@ -1518,12 +1460,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 +1835,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) { >@@ -2763,15 +2718,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.lwc1(dest, addrTempRegister, address.offset); > } else { > /* >@@ -2839,16 +2787,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.lwc1(dest, addrTempRegister, address.offset); > m_assembler.lwc1(FPRegisterID(dest + 1), addrTempRegister, address.offset + 4); > } else { >@@ -2868,15 +2808,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.ldc1(dest, addrTempRegister, address.offset); > } else { > /* >@@ -2924,15 +2857,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.swc1(src, addrTempRegister, address.offset); > } else { > /* >@@ -3000,16 +2926,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > m_assembler.swc1(src, addrTempRegister, address.offset); > m_assembler.swc1(FPRegisterID(src + 1), addrTempRegister, address.offset + 4); > } else { >@@ -3029,15 +2947,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, LoadAddressMode::ScaleAndAddOffsetIfOffsetIsOutOfBounds); > 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
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 184584
:
337882
|
339717
|
339958
| 339960 |
339962