Changeset 50595 in webkit for trunk/JavaScriptCore/assembler
- Timestamp:
- Nov 6, 2009, 1:35:03 AM (16 years ago)
- Location:
- trunk/JavaScriptCore/assembler
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/MacroAssembler.h
r48525 r50595 180 180 } 181 181 182 void rshiftPtr(RegisterID shift_amount, RegisterID dest)183 {184 rshift32(shift_amount, dest);185 }186 187 void rshiftPtr(Imm32 imm, RegisterID dest)188 {189 rshift32(imm, dest);190 }191 192 182 void subPtr(RegisterID src, RegisterID dest) 193 183 { -
trunk/JavaScriptCore/assembler/MacroAssemblerARM.h
r50593 r50595 119 119 } 120 120 121 void lshift32(RegisterID shift_amount, RegisterID dest) 122 { 123 ARMWord w = m_assembler.getImm(0x1f, ARMRegisters::S0, true); 124 ASSERT(!(w & ARMAssembler::OP2_INV_IMM)); 125 m_assembler.ands_r(ARMRegisters::S0, shift_amount, w); 126 127 m_assembler.movs_r(dest, m_assembler.lsl_r(dest, ARMRegisters::S0)); 128 } 129 121 130 void lshift32(Imm32 imm, RegisterID dest) 122 131 { 123 132 m_assembler.movs_r(dest, m_assembler.lsl(dest, imm.m_value & 0x1f)); 124 }125 126 void lshift32(RegisterID shift_amount, RegisterID dest)127 {128 m_assembler.movs_r(dest, m_assembler.lsl_r(dest, shift_amount));129 133 } 130 134 … … 161 165 void rshift32(RegisterID shift_amount, RegisterID dest) 162 166 { 163 m_assembler.movs_r(dest, m_assembler.asr_r(dest, shift_amount)); 167 ARMWord w = m_assembler.getImm(0x1f, ARMRegisters::S0, true); 168 ASSERT(!(w & ARMAssembler::OP2_INV_IMM)); 169 m_assembler.ands_r(ARMRegisters::S0, shift_amount, w); 170 171 m_assembler.movs_r(dest, m_assembler.asr_r(dest, ARMRegisters::S0)); 164 172 } 165 173 -
trunk/JavaScriptCore/assembler/MacroAssemblerARMv7.h
r50541 r50595 198 198 } 199 199 200 void lshift32(RegisterID shift_amount, RegisterID dest) 201 { 202 // Clamp the shift to the range 0..31 203 ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(0x1f); 204 ASSERT(armImm.isValid()); 205 m_assembler.ARM_and(dataTempRegister, shift_amount, armImm); 206 207 m_assembler.lsl(dest, dest, dataTempRegister); 208 } 209 200 210 void lshift32(Imm32 imm, RegisterID dest) 201 211 { 202 m_assembler.lsl(dest, dest, imm.m_value); 203 } 204 205 void lshift32(RegisterID shift_amount, RegisterID dest) 206 { 207 m_assembler.lsl(dest, dest, shift_amount); 212 m_assembler.lsl(dest, dest, imm.m_value & 0x1f); 208 213 } 209 214 … … 242 247 void rshift32(RegisterID shift_amount, RegisterID dest) 243 248 { 244 m_assembler.asr(dest, dest, shift_amount); 249 // Clamp the shift to the range 0..31 250 ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(0x1f); 251 ASSERT(armImm.isValid()); 252 m_assembler.ARM_and(dataTempRegister, shift_amount, armImm); 253 254 m_assembler.asr(dest, dest, dataTempRegister); 245 255 } 246 256 247 257 void rshift32(Imm32 imm, RegisterID dest) 248 258 { 249 m_assembler.asr(dest, dest, imm.m_value );259 m_assembler.asr(dest, dest, imm.m_value & 0x1f); 250 260 } 251 261 -
trunk/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r50531 r50595 559 559 void swap(RegisterID reg1, RegisterID reg2) 560 560 { 561 m_assembler.xchgq_rr(reg1, reg2); 561 if (reg1 != reg2) 562 m_assembler.xchgq_rr(reg1, reg2); 562 563 } 563 564 -
trunk/JavaScriptCore/assembler/MacroAssemblerX86_64.h
r47802 r50595 193 193 } 194 194 195 void rshiftPtr(RegisterID shift_amount, RegisterID dest)196 {197 // On x86 we can only shift by ecx; if asked to shift by another register we'll198 // need rejig the shift amount into ecx first, and restore the registers afterwards.199 if (shift_amount != X86Registers::ecx) {200 swap(shift_amount, X86Registers::ecx);201 202 // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx"203 if (dest == shift_amount)204 m_assembler.sarq_CLr(X86Registers::ecx);205 // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx"206 else if (dest == X86Registers::ecx)207 m_assembler.sarq_CLr(shift_amount);208 // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx"209 else210 m_assembler.sarq_CLr(dest);211 212 swap(shift_amount, X86Registers::ecx);213 } else214 m_assembler.sarq_CLr(dest);215 }216 217 void rshiftPtr(Imm32 imm, RegisterID dest)218 {219 m_assembler.sarq_i8r(imm.m_value, dest);220 }221 222 195 void subPtr(RegisterID src, RegisterID dest) 223 196 {
Note:
See TracChangeset
for help on using the changeset viewer.