Changeset 192409 in webkit
- Timestamp:
- Nov 12, 2015 10:13:11 PM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r192401 r192409 1 2015-11-12 Benjamin Poulain <bpoulain@apple.com> 2 3 [JSC] Do not generate an Add when adding a zero immediate to something 4 https://bugs.webkit.org/show_bug.cgi?id=151171 5 6 Reviewed by Geoffrey Garen. 7 8 Avoid generating an add if one of arguments is a zero immediate. 9 10 On x86, the add32/64() were also used internally for branchAdd32/64. 11 I split the code that sets flag to add32AndSetFlags() to make sure 12 we always force the flags before testing. 13 14 I could have used CMp to set the flags but I would gain nothing from 15 that, cmp is just a SUB. 16 17 * assembler/MacroAssemblerARM64.h: 18 (JSC::MacroAssemblerARM64::add32): 19 (JSC::MacroAssemblerARM64::add64): 20 * assembler/MacroAssemblerARMv7.h: 21 (JSC::MacroAssemblerARMv7::add32): 22 * assembler/MacroAssemblerX86.h: 23 (JSC::MacroAssemblerX86::add32): 24 * assembler/MacroAssemblerX86Common.h: 25 (JSC::MacroAssemblerX86Common::add32): 26 (JSC::MacroAssemblerX86Common::branchAdd32): 27 (JSC::MacroAssemblerX86Common::add32AndSetFlags): 28 * assembler/MacroAssemblerX86_64.h: 29 (JSC::MacroAssemblerX86_64::add32): 30 (JSC::MacroAssemblerX86_64::add64): 31 (JSC::MacroAssemblerX86_64::branchAdd64): 32 (JSC::MacroAssemblerX86_64::add64AndSetFlags): 33 1 34 2015-11-12 Geoffrey Garen <ggaren@apple.com> 2 35 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h
r191750 r192409 142 142 void add32(TrustedImm32 imm, RegisterID dest) 143 143 { 144 if (!imm.m_value) 145 return; 146 144 147 add32(imm, dest, dest); 145 148 } … … 147 150 void add32(TrustedImm32 imm, RegisterID src, RegisterID dest) 148 151 { 152 if (!imm.m_value) { 153 move(src, dest); 154 return; 155 } 156 149 157 if (isUInt12(imm.m_value)) 150 158 m_assembler.add<32>(dest, src, UInt12(imm.m_value)); … … 159 167 void add32(TrustedImm32 imm, Address address) 160 168 { 169 if (!imm.m_value) 170 return; 171 161 172 load32(address, getCachedDataTempRegisterIDAndInvalidate()); 162 173 … … 175 186 void add32(TrustedImm32 imm, AbsoluteAddress address) 176 187 { 188 if (!imm.m_value) 189 return; 190 177 191 load32(address.m_ptr, getCachedDataTempRegisterIDAndInvalidate()); 178 192 … … 210 224 void add64(TrustedImm32 imm, RegisterID dest) 211 225 { 226 if (!imm.m_value) 227 return; 228 212 229 if (isUInt12(imm.m_value)) { 213 230 m_assembler.add<64>(dest, dest, UInt12(imm.m_value)); … … 226 243 { 227 244 intptr_t immediate = imm.m_value; 245 if (!immediate) 246 return; 228 247 229 248 if (isUInt12(immediate)) { … … 242 261 void add64(TrustedImm32 imm, RegisterID src, RegisterID dest) 243 262 { 263 if (!imm.m_value) { 264 move(src, dest); 265 return; 266 } 267 244 268 if (isUInt12(imm.m_value)) { 245 269 m_assembler.add<64>(dest, src, UInt12(imm.m_value)); … … 257 281 void add64(TrustedImm32 imm, Address address) 258 282 { 283 if (!imm.m_value) 284 return; 285 259 286 load64(address, getCachedDataTempRegisterIDAndInvalidate()); 260 287 … … 273 300 void add64(TrustedImm32 imm, AbsoluteAddress address) 274 301 { 302 if (!imm.m_value) 303 return; 304 275 305 load64(address.m_ptr, getCachedDataTempRegisterIDAndInvalidate()); 276 306 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h
r191700 r192409 169 169 void add32(TrustedImm32 imm, RegisterID src, RegisterID dest) 170 170 { 171 if (!imm.m_value) { 172 move(src, dest); 173 return; 174 } 175 171 176 ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12OrEncodedImm(imm.m_value); 172 177 … … 188 193 void add32(TrustedImm32 imm, Address address) 189 194 { 195 if (!imm.m_value) 196 return; 197 190 198 load32(address, dataTempRegister); 191 199 … … 211 219 void add32(TrustedImm32 imm, AbsoluteAddress address) 212 220 { 221 if (!imm.m_value) 222 return; 223 213 224 load32(address.m_ptr, dataTempRegister); 214 225 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86.h
r190718 r192409 59 59 void add32(TrustedImm32 imm, RegisterID src, RegisterID dest) 60 60 { 61 if (!imm.m_value) { 62 move(src, dest); 63 return; 64 } 65 61 66 m_assembler.leal_mr(imm.m_value, src, dest); 62 67 } … … 64 69 void add32(TrustedImm32 imm, AbsoluteAddress address) 65 70 { 71 if (!imm.m_value) 72 return; 73 66 74 m_assembler.addl_im(imm.m_value, address.m_ptr); 67 75 } -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r192295 r192409 115 115 void add32(TrustedImm32 imm, Address address) 116 116 { 117 m_assembler.addl_im(imm.m_value, address.offset, address.base); 117 if (!imm.m_value) 118 return; 119 add32AndSetFlags(imm, address); 118 120 } 119 121 120 122 void add32(TrustedImm32 imm, RegisterID dest) 121 123 { 122 if (imm.m_value == 1) 123 m_assembler.inc_r(dest); 124 else 125 m_assembler.addl_ir(imm.m_value, dest); 124 if (!imm.m_value) 125 return; 126 add32AndSetFlags(imm, dest); 126 127 } 127 128 … … 138 139 void add32(TrustedImm32 imm, RegisterID src, RegisterID dest) 139 140 { 141 if (!imm.m_value) { 142 move(src, dest); 143 return; 144 } 145 140 146 m_assembler.leal_mr(imm.m_value, src, dest); 141 147 } … … 1401 1407 Jump branchAdd32(ResultCondition cond, TrustedImm32 imm, RegisterID dest) 1402 1408 { 1403 add32 (imm, dest);1409 add32AndSetFlags(imm, dest); 1404 1410 return Jump(m_assembler.jCC(x86Condition(cond))); 1405 1411 } … … 1407 1413 Jump branchAdd32(ResultCondition cond, TrustedImm32 src, Address dest) 1408 1414 { 1409 add32 (src, dest);1415 add32AndSetFlags(src, dest); 1410 1416 return Jump(m_assembler.jCC(x86Condition(cond))); 1411 1417 } … … 1683 1689 else 1684 1690 m_assembler.testl_i32m(mask.m_value, address.offset, address.base); 1691 } 1692 1693 void add32AndSetFlags(TrustedImm32 imm, RegisterID dest) 1694 { 1695 if (imm.m_value == 1) 1696 m_assembler.inc_r(dest); 1697 else 1698 m_assembler.addl_ir(imm.m_value, dest); 1699 } 1700 1701 void add32AndSetFlags(TrustedImm32 imm, Address address) 1702 { 1703 m_assembler.addl_im(imm.m_value, address.offset, address.base); 1685 1704 } 1686 1705 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h
r192400 r192409 58 58 void add32(TrustedImm32 imm, AbsoluteAddress address) 59 59 { 60 if (!imm.m_value) 61 return; 62 60 63 move(TrustedImmPtr(address.m_ptr), scratchRegister); 61 64 add32(imm, Address(scratchRegister)); … … 269 272 void add64(TrustedImm32 imm, RegisterID srcDest) 270 273 { 271 if (imm.m_value == 1) 272 m_assembler.incq_r(srcDest); 273 else 274 m_assembler.addq_ir(imm.m_value, srcDest); 275 } 276 277 void add64(TrustedImm64 imm, RegisterID dest) 278 { 279 if (imm.m_value == 1) 280 m_assembler.incq_r(dest); 281 else { 282 move(imm, scratchRegister); 283 add64(scratchRegister, dest); 284 } 274 if (!imm.m_value) 275 return; 276 add64AndSetFlags(imm, srcDest); 277 } 278 279 void add64(TrustedImm64 imm, RegisterID srcDest) 280 { 281 if (!imm.m_value) 282 return; 283 add64AndSetFlags(imm, srcDest); 285 284 } 286 285 287 286 void add64(TrustedImm32 imm, RegisterID src, RegisterID dest) 288 287 { 288 if (!imm.m_value) { 289 move(src, dest); 290 return; 291 } 292 289 293 m_assembler.leaq_mr(imm.m_value, src, dest); 290 294 } … … 292 296 void add64(TrustedImm32 imm, Address address) 293 297 { 298 if (!imm.m_value) 299 return; 300 294 301 if (imm.m_value == 1) 295 302 m_assembler.incq_m(address.offset, address.base); … … 300 307 void add64(TrustedImm32 imm, AbsoluteAddress address) 301 308 { 309 if (!imm.m_value) 310 return; 311 302 312 move(TrustedImmPtr(address.m_ptr), scratchRegister); 303 313 add64(imm, Address(scratchRegister)); … … 768 778 Jump branchAdd64(ResultCondition cond, TrustedImm32 imm, RegisterID dest) 769 779 { 770 add64 (imm, dest);780 add64AndSetFlags(imm, dest); 771 781 return Jump(m_assembler.jCC(x86Condition(cond))); 772 782 } … … 986 996 987 997 private: 998 void add64AndSetFlags(TrustedImm32 imm, RegisterID srcDest) 999 { 1000 if (imm.m_value == 1) 1001 m_assembler.incq_r(srcDest); 1002 else 1003 m_assembler.addq_ir(imm.m_value, srcDest); 1004 } 1005 1006 void add64AndSetFlags(TrustedImm64 imm, RegisterID dest) 1007 { 1008 if (imm.m_value == 1) 1009 m_assembler.incq_r(dest); 1010 else { 1011 move(imm, scratchRegister); 1012 add64(scratchRegister, dest); 1013 } 1014 } 1015 988 1016 friend class LinkBuffer; 989 1017
Note: See TracChangeset
for help on using the changeset viewer.