Changeset 58469 in webkit for trunk/JavaScriptCore/jit/JSInterfaceJIT.h
- Timestamp:
- Apr 28, 2010, 8:57:16 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JSInterfaceJIT.h
r58283 r58469 69 69 static const FPRegisterID fpRegT1 = X86Registers::xmm1; 70 70 static const FPRegisterID fpRegT2 = X86Registers::xmm2; 71 static const FPRegisterID fpRegT3 = X86Registers::xmm3; 71 72 #elif CPU(X86) 72 73 static const RegisterID returnValueRegister = X86Registers::eax; … … 87 88 static const FPRegisterID fpRegT1 = X86Registers::xmm1; 88 89 static const FPRegisterID fpRegT2 = X86Registers::xmm2; 90 static const FPRegisterID fpRegT3 = X86Registers::xmm3; 89 91 #elif CPU(ARM_THUMB2) 90 92 static const RegisterID returnValueRegister = ARMRegisters::r0; … … 103 105 static const FPRegisterID fpRegT1 = ARMRegisters::d1; 104 106 static const FPRegisterID fpRegT2 = ARMRegisters::d2; 107 static const FPRegisterID fpRegT3 = ARMRegisters::d3; 105 108 #elif CPU(ARM_TRADITIONAL) 106 109 static const RegisterID returnValueRegister = ARMRegisters::r0; … … 127 130 static const FPRegisterID fpRegT1 = ARMRegisters::d1; 128 131 static const FPRegisterID fpRegT2 = ARMRegisters::d2; 132 static const FPRegisterID fpRegT3 = ARMRegisters::d3; 129 133 #elif CPU(MIPS) 130 134 static const RegisterID returnValueRegister = MIPSRegisters::v0; … … 149 153 static const FPRegisterID fpRegT1 = MIPSRegisters::f6; 150 154 static const FPRegisterID fpRegT2 = MIPSRegisters::f8; 155 static const FPRegisterID fpRegT2 = MIPSRegisters::f10; 151 156 #else 152 157 #error "JIT not supported on this platform." … … 155 160 inline Jump emitLoadJSCell(unsigned virtualRegisterIndex, RegisterID payload); 156 161 inline Jump emitLoadInt32(unsigned virtualRegisterIndex, RegisterID dst); 162 inline Jump emitLoadDouble(unsigned virtualRegisterIndex, FPRegisterID dst, RegisterID scratch); 157 163 158 164 #if USE(JSVALUE32_64) … … 160 166 inline Address tagFor(unsigned index, RegisterID base = callFrameRegister); 161 167 #endif 168 169 #if USE(JSVALUE32) || USE(JSVALUE64) 170 Jump emitJumpIfImmediateNumber(RegisterID reg); 171 Jump emitJumpIfNotImmediateNumber(RegisterID reg); 172 #endif 173 162 174 inline Address payloadFor(unsigned index, RegisterID base = callFrameRegister); 163 175 inline Address addressFor(unsigned index, RegisterID base = callFrameRegister); 164 176 }; 165 177 166 178 #if USE(JSVALUE32_64) 167 179 inline JSInterfaceJIT::Jump JSInterfaceJIT::emitLoadJSCell(unsigned virtualRegisterIndex, RegisterID payload) … … 191 203 return Address(base, (index * sizeof(Register)) + OBJECT_OFFSETOF(JSValue, u.asBits.payload)); 192 204 } 205 206 inline JSInterfaceJIT::Jump JSInterfaceJIT::emitLoadDouble(unsigned virtualRegisterIndex, FPRegisterID dst, RegisterID scratch) 207 { 208 loadPtr(tagFor(virtualRegisterIndex), scratch); 209 Jump isDouble = branch32(Below, scratch, Imm32(JSValue::LowestTag)); 210 Jump notInt = branch32(NotEqual, scratch, Imm32(JSValue::Int32Tag)); 211 loadPtr(payloadFor(virtualRegisterIndex), scratch); 212 convertInt32ToDouble(scratch, dst); 213 Jump done = jump(); 214 isDouble.link(this); 215 loadDouble(addressFor(virtualRegisterIndex), dst); 216 done.link(this); 217 return notInt; 218 } 193 219 #endif 194 220 195 221 #if USE(JSVALUE64) 222 ALWAYS_INLINE JSInterfaceJIT::Jump JSInterfaceJIT::emitJumpIfImmediateNumber(RegisterID reg) 223 { 224 return branchTestPtr(NonZero, reg, tagTypeNumberRegister); 225 } 226 ALWAYS_INLINE JSInterfaceJIT::Jump JSInterfaceJIT::emitJumpIfNotImmediateNumber(RegisterID reg) 227 { 228 return branchTestPtr(Zero, reg, tagTypeNumberRegister); 229 } 196 230 inline JSInterfaceJIT::Jump JSInterfaceJIT::emitLoadJSCell(unsigned virtualRegisterIndex, RegisterID dst) 197 231 { … … 207 241 return result; 208 242 } 243 244 inline JSInterfaceJIT::Jump JSInterfaceJIT::emitLoadDouble(unsigned virtualRegisterIndex, FPRegisterID dst, RegisterID scratch) 245 { 246 loadPtr(addressFor(virtualRegisterIndex), scratch); 247 Jump notNumber = emitJumpIfNotImmediateNumber(scratch); 248 Jump notInt = branchPtr(Below, scratch, tagTypeNumberRegister); 249 convertInt32ToDouble(scratch, dst); 250 Jump done = jump(); 251 notInt.link(this); 252 addPtr(tagTypeNumberRegister, scratch); 253 movePtrToDouble(scratch, dst); 254 done.link(this); 255 return notNumber; 256 } 257 209 258 #endif 210 259 … … 222 271 rshift32(Imm32(JSImmediate::IntegerPayloadShift), dst); 223 272 return result; 224 } 273 } 274 275 inline JSInterfaceJIT::Jump JSInterfaceJIT::emitLoadDouble(unsigned, FPRegisterID, RegisterID) 276 { 277 ASSERT_NOT_REACHED(); 278 return jump(); 279 } 225 280 #endif 226 281
Note:
See TracChangeset
for help on using the changeset viewer.