Changeset 58562 in webkit for trunk/JavaScriptCore/assembler/MacroAssemblerX86Common.h
- Timestamp:
- Apr 30, 2010, 12:56:38 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r58469 r58562 249 249 { 250 250 m_assembler.sarl_i8r(imm.m_value, dest); 251 } 252 253 void urshift32(RegisterID shift_amount, RegisterID dest) 254 { 255 // On x86 we can only shift by ecx; if asked to shift by another register we'll 256 // need rejig the shift amount into ecx first, and restore the registers afterwards. 257 if (shift_amount != X86Registers::ecx) { 258 swap(shift_amount, X86Registers::ecx); 259 260 // E.g. transform "shrl %eax, %eax" -> "xchgl %eax, %ecx; shrl %ecx, %ecx; xchgl %eax, %ecx" 261 if (dest == shift_amount) 262 m_assembler.shrl_CLr(X86Registers::ecx); 263 // E.g. transform "shrl %eax, %ecx" -> "xchgl %eax, %ecx; shrl %ecx, %eax; xchgl %eax, %ecx" 264 else if (dest == X86Registers::ecx) 265 m_assembler.shrl_CLr(shift_amount); 266 // E.g. transform "shrl %eax, %ebx" -> "xchgl %eax, %ecx; shrl %ecx, %ebx; xchgl %eax, %ecx" 267 else 268 m_assembler.shrl_CLr(dest); 269 270 swap(shift_amount, X86Registers::ecx); 271 } else 272 m_assembler.shrl_CLr(dest); 273 } 274 275 void urshift32(Imm32 imm, RegisterID dest) 276 { 277 m_assembler.shrl_i8r(imm.m_value, dest); 251 278 } 252 279
Note:
See TracChangeset
for help on using the changeset viewer.