Changeset 99895 in webkit for trunk/Source/JavaScriptCore/dfg/DFGGPRInfo.h
- Timestamp:
- Nov 10, 2011, 1:41:04 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGGPRInfo.h
r98912 r99895 252 252 253 253 #if CPU(X86) 254 #define NUMBER_OF_ARGUMENT_REGISTERS 0 254 255 255 256 class GPRInfo { … … 258 259 static const unsigned numberOfRegisters = 5; 259 260 260 // These registers match the baseline JIT.261 static const GPRReg cachedResultRegister = X86Registers::eax;262 static const GPRReg cachedResultRegister2 = X86Registers::edx;263 static const GPRReg callFrameRegister = X86Registers::edi;264 261 // Temporary registers. 265 262 static const GPRReg regT0 = X86Registers::eax; … … 268 265 static const GPRReg regT3 = X86Registers::ebx; 269 266 static const GPRReg regT4 = X86Registers::esi; 267 // These registers match the baseline JIT. 268 static const GPRReg cachedResultRegister = regT0; 269 static const GPRReg cachedResultRegister2 = regT1; 270 static const GPRReg callFrameRegister = X86Registers::edi; 270 271 // These constants provide the names for the general purpose argument & return value registers. 271 272 static const GPRReg argumentGPR0 = X86Registers::ecx; // regT2 … … 311 312 312 313 #if CPU(X86_64) 314 #define NUMBER_OF_ARGUMENT_REGISTERS 6 313 315 314 316 class GPRInfo { … … 338 340 static const GPRReg argumentGPR2 = X86Registers::edx; // regT1 339 341 static const GPRReg argumentGPR3 = X86Registers::ecx; // regT2 342 static const GPRReg argumentGPR4 = X86Registers::r8; // regT6 343 static const GPRReg argumentGPR5 = X86Registers::r9; // regT7 340 344 static const GPRReg returnValueGPR = X86Registers::eax; // regT0 341 345 static const GPRReg returnValueGPR2 = X86Registers::edx; // regT1 … … 379 383 #endif 380 384 385 #if CPU(ARM_THUMB2) 386 #define NUMBER_OF_ARGUMENT_REGISTERS 4 387 388 class GPRInfo { 389 public: 390 typedef GPRReg RegisterType; 391 static const unsigned numberOfRegisters = 9; 392 393 // Temporary registers. 394 static const GPRReg regT0 = ARMRegisters::r0; 395 static const GPRReg regT1 = ARMRegisters::r1; 396 static const GPRReg regT2 = ARMRegisters::r2; 397 static const GPRReg regT3 = ARMRegisters::r4; 398 static const GPRReg regT4 = ARMRegisters::r7; 399 static const GPRReg regT5 = ARMRegisters::r8; 400 static const GPRReg regT6 = ARMRegisters::r9; 401 static const GPRReg regT7 = ARMRegisters::r10; 402 static const GPRReg regT8 = ARMRegisters::r11; 403 // These registers match the baseline JIT. 404 static const GPRReg cachedResultRegister = regT0; 405 static const GPRReg cachedResultRegister2 = regT1; 406 static const GPRReg callFrameRegister = ARMRegisters::r5; 407 // These constants provide the names for the general purpose argument & return value registers. 408 static const GPRReg argumentGPR0 = ARMRegisters::r0; // regT0 409 static const GPRReg argumentGPR1 = ARMRegisters::r1; // regT1 410 static const GPRReg argumentGPR2 = ARMRegisters::r2; // regT2 411 // FIXME: r3 is currently used be the MacroAssembler as a temporary - it seems 412 // This could threoretically be a problem if theis is used in code generation 413 // between the arguments being set up, and the call being made. That said, 414 // any change introducing a problem here is likely to be immediately apparent! 415 static const GPRReg argumentGPR3 = ARMRegisters::r3; // FIXME! 416 static const GPRReg returnValueGPR = ARMRegisters::r0; // regT0 417 static const GPRReg returnValueGPR2 = ARMRegisters::r1; // regT1 418 419 static GPRReg toRegister(unsigned index) 420 { 421 ASSERT(index < numberOfRegisters); 422 static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5, regT6, regT7, regT8 }; 423 return registerForIndex[index]; 424 } 425 426 static unsigned toIndex(GPRReg reg) 427 { 428 ASSERT(reg != InvalidGPRReg); 429 ASSERT(reg < 16); 430 static const unsigned indexForRegister[16] = { 0, 1, 2, InvalidIndex, 3, InvalidIndex, InvalidIndex, 4, 5, 6, 7, 8, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex }; 431 unsigned result = indexForRegister[reg]; 432 ASSERT(result != InvalidIndex); 433 return result; 434 } 435 436 #ifndef NDEBUG 437 static const char* debugName(GPRReg reg) 438 { 439 ASSERT(reg != InvalidGPRReg); 440 ASSERT(reg < 16); 441 static const char* nameForRegister[16] = { 442 "r0", "r1", "r2", "r3", 443 "r4", "r5", "r6", "r7", 444 "r8", "r9", "r10", "r11", 445 "r12", "r13", "r14", "r15" 446 }; 447 return nameForRegister[reg]; 448 } 449 #endif 450 private: 451 452 static const unsigned InvalidIndex = 0xffffffff; 453 }; 454 455 #endif 456 381 457 typedef RegisterBank<GPRInfo>::iterator gpr_iterator; 382 458
Note:
See TracChangeset
for help on using the changeset viewer.