Changeset 56000 in webkit for trunk/JavaScriptCore/jit/JITStubs.cpp
- Timestamp:
- Mar 15, 2010, 9:33:24 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITStubs.cpp
r55833 r56000 240 240 #endif 241 241 242 asm volatile ( 243 ".text" "\n" 244 ".align 2" "\n" 245 ".globl " SYMBOL_STRING(ctiTrampoline) "\n" 246 HIDE_SYMBOL(ctiTrampoline) "\n" 247 ".thumb" "\n" 248 ".thumb_func " THUMB_FUNC_PARAM(ctiTrampoline) "\n" 249 SYMBOL_STRING(ctiTrampoline) ":" "\n" 250 "sub sp, sp, #0x3c" "\n" 251 "str lr, [sp, #0x20]" "\n" 252 "str r4, [sp, #0x24]" "\n" 253 "str r5, [sp, #0x28]" "\n" 254 "str r6, [sp, #0x2c]" "\n" 255 "str r1, [sp, #0x30]" "\n" 256 "str r2, [sp, #0x34]" "\n" 257 "str r3, [sp, #0x38]" "\n" 258 "cpy r5, r2" "\n" 259 "mov r6, #512" "\n" 260 "blx r0" "\n" 261 "ldr r6, [sp, #0x2c]" "\n" 262 "ldr r5, [sp, #0x28]" "\n" 263 "ldr r4, [sp, #0x24]" "\n" 264 "ldr lr, [sp, #0x20]" "\n" 265 "add sp, sp, #0x3c" "\n" 266 "bx lr" "\n" 267 ); 268 269 asm volatile ( 270 ".text" "\n" 271 ".align 2" "\n" 272 ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" 273 HIDE_SYMBOL(ctiVMThrowTrampoline) "\n" 274 ".thumb" "\n" 275 ".thumb_func " THUMB_FUNC_PARAM(ctiVMThrowTrampoline) "\n" 276 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" 277 "cpy r0, sp" "\n" 278 "bl " SYMBOL_STRING_RELOCATION(cti_vm_throw) "\n" 279 "ldr r6, [sp, #0x2c]" "\n" 280 "ldr r5, [sp, #0x28]" "\n" 281 "ldr r4, [sp, #0x24]" "\n" 282 "ldr lr, [sp, #0x20]" "\n" 283 "add sp, sp, #0x3c" "\n" 284 "bx lr" "\n" 285 ); 286 287 asm volatile ( 288 ".text" "\n" 289 ".align 2" "\n" 290 ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" 291 ".thumb" "\n" 292 ".thumb_func " THUMB_FUNC_PARAM(ctiOpThrowNotCaught) "\n" 293 SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" 294 "ldr r6, [sp, #0x2c]" "\n" 295 "ldr r5, [sp, #0x28]" "\n" 296 "ldr r4, [sp, #0x24]" "\n" 297 "ldr lr, [sp, #0x20]" "\n" 298 "add sp, sp, #0x3c" "\n" 299 "bx lr" "\n" 300 ); 242 #define THUNK_RETURN_ADDRESS_OFFSET 0x3C 243 #define PRESERVED_RETURN_ADDRESS_OFFSET 0x40 244 #define PRESERVED_R4_OFFSET 0x44 245 #define PRESERVED_R5_OFFSET 0x48 246 #define PRESERVED_R6_OFFSET 0x4C 247 #define REGISTER_FILE_OFFSET 0x50 248 #define CALLFRAME_OFFSET 0x54 249 #define EXCEPTION_OFFSET 0x58 250 #define ENABLE_PROFILER_REFERENCE_OFFSET 0x64 301 251 302 252 #elif COMPILER(GCC) && CPU(ARM_TRADITIONAL) 303 253 304 asm volatile ( 305 ".globl " SYMBOL_STRING(ctiTrampoline) "\n" 306 SYMBOL_STRING(ctiTrampoline) ":" "\n" 307 "stmdb sp!, {r1-r3}" "\n" 308 "stmdb sp!, {r4-r8, lr}" "\n" 309 "sub sp, sp, #68" "\n" 310 "mov r4, r2" "\n" 311 "mov r5, #512" "\n" 312 // r0 contains the code 313 "mov lr, pc" "\n" 314 "mov pc, r0" "\n" 315 "add sp, sp, #68" "\n" 316 "ldmia sp!, {r4-r8, lr}" "\n" 317 "add sp, sp, #12" "\n" 318 "mov pc, lr" "\n" 319 ); 320 321 asm volatile ( 322 ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" 323 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" 324 "mov r0, sp" "\n" 325 "bl " SYMBOL_STRING(cti_vm_throw) "\n" 326 327 // Both has the same return sequence 328 ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" 329 SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" 330 "add sp, sp, #68" "\n" 331 "ldmia sp!, {r4-r8, lr}" "\n" 332 "add sp, sp, #12" "\n" 333 "mov pc, lr" "\n" 334 ); 254 #define THUNK_RETURN_ADDRESS_OFFSET 64 255 #define PRESERVEDR4_OFFSET 68 335 256 336 257 #elif COMPILER(MSVC) && CPU(X86) … … 545 466 #endif 546 467 547 asm volatile ( 548 ".text" "\n" 549 ".align 2" "\n" 550 ".globl " SYMBOL_STRING(ctiTrampoline) "\n" 551 HIDE_SYMBOL(ctiTrampoline) "\n" 552 ".thumb" "\n" 553 ".thumb_func " THUMB_FUNC_PARAM(ctiTrampoline) "\n" 554 SYMBOL_STRING(ctiTrampoline) ":" "\n" 555 "sub sp, sp, #0x40" "\n" 556 "str lr, [sp, #0x20]" "\n" 557 "str r4, [sp, #0x24]" "\n" 558 "str r5, [sp, #0x28]" "\n" 559 "str r6, [sp, #0x2c]" "\n" 560 "str r1, [sp, #0x30]" "\n" 561 "str r2, [sp, #0x34]" "\n" 562 "str r3, [sp, #0x38]" "\n" 563 "cpy r5, r2" "\n" 564 "mov r6, #512" "\n" 565 "blx r0" "\n" 566 "ldr r6, [sp, #0x2c]" "\n" 567 "ldr r5, [sp, #0x28]" "\n" 568 "ldr r4, [sp, #0x24]" "\n" 569 "ldr lr, [sp, #0x20]" "\n" 570 "add sp, sp, #0x40" "\n" 571 "bx lr" "\n" 572 ); 573 574 asm volatile ( 575 ".text" "\n" 576 ".align 2" "\n" 577 ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" 578 HIDE_SYMBOL(ctiVMThrowTrampoline) "\n" 579 ".thumb" "\n" 580 ".thumb_func " THUMB_FUNC_PARAM(ctiVMThrowTrampoline) "\n" 581 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" 582 "cpy r0, sp" "\n" 583 "bl " SYMBOL_STRING_RELOCATION(cti_vm_throw) "\n" 584 "ldr r6, [sp, #0x2c]" "\n" 585 "ldr r5, [sp, #0x28]" "\n" 586 "ldr r4, [sp, #0x24]" "\n" 587 "ldr lr, [sp, #0x20]" "\n" 588 "add sp, sp, #0x40" "\n" 589 "bx lr" "\n" 590 ); 591 592 asm volatile ( 593 ".text" "\n" 594 ".align 2" "\n" 595 ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" 596 HIDE_SYMBOL(ctiOpThrowNotCaught) "\n" 597 ".thumb" "\n" 598 ".thumb_func " THUMB_FUNC_PARAM(ctiOpThrowNotCaught) "\n" 599 SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" 600 "ldr r6, [sp, #0x2c]" "\n" 601 "ldr r5, [sp, #0x28]" "\n" 602 "ldr r4, [sp, #0x24]" "\n" 603 "ldr lr, [sp, #0x20]" "\n" 604 "add sp, sp, #0x40" "\n" 605 "bx lr" "\n" 606 ); 468 #define THUNK_RETURN_ADDRESS_OFFSET 0x1C 469 #define PRESERVED_RETURN_ADDRESS_OFFSET 0x20 470 #define PRESERVED_R4_OFFSET 0x24 471 #define PRESERVED_R5_OFFSET 0x28 472 #define PRESERVED_R6_OFFSET 0x2C 473 #define REGISTER_FILE_OFFSET 0x30 474 #define CALLFRAME_OFFSET 0x34 475 #define EXCEPTION_OFFSET 0x38 476 #define ENABLE_PROFILER_REFERENCE_OFFSET 0x40 607 477 608 478 #elif COMPILER(GCC) && CPU(ARM_TRADITIONAL) 609 479 610 asm volatile ( 611 ".text\n" 612 ".globl " SYMBOL_STRING(ctiTrampoline) "\n" 613 HIDE_SYMBOL(ctiTrampoline) "\n" 614 SYMBOL_STRING(ctiTrampoline) ":" "\n" 615 "stmdb sp!, {r1-r3}" "\n" 616 "stmdb sp!, {r4-r8, lr}" "\n" 617 "sub sp, sp, #36" "\n" 618 "mov r4, r2" "\n" 619 "mov r5, #512" "\n" 620 "mov lr, pc" "\n" 621 "mov pc, r0" "\n" 622 "add sp, sp, #36" "\n" 623 "ldmia sp!, {r4-r8, lr}" "\n" 624 "add sp, sp, #12" "\n" 625 "mov pc, lr" "\n" 626 ); 627 628 asm volatile ( 629 ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" 630 HIDE_SYMBOL(ctiVMThrowTrampoline) "\n" 631 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" 632 "mov r0, sp" "\n" 633 "bl " SYMBOL_STRING_RELOCATION(cti_vm_throw) "\n" 634 635 // Both has the same return sequence 636 ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" 637 HIDE_SYMBOL(ctiOpThrowNotCaught) "\n" 638 SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" 639 "add sp, sp, #36" "\n" 640 "ldmia sp!, {r4-r8, lr}" "\n" 641 "add sp, sp, #12" "\n" 642 "mov pc, lr" "\n" 643 ); 480 #define THUNK_RETURN_ADDRESS_OFFSET 32 481 #define PRESERVEDR4_OFFSET 36 644 482 645 483 #elif COMPILER(RVCT) && CPU(ARM_TRADITIONAL) … … 751 589 #endif // USE(JSVALUE32_64) 752 590 591 #if COMPILER(GCC) && CPU(ARM_THUMB2) 592 593 asm volatile( 594 ".text" "\n" 595 ".align 2" "\n" 596 ".globl " SYMBOL_STRING(ctiTrampoline) "\n" 597 HIDE_SYMBOL(ctiTrampoline) "\n" 598 ".thumb" "\n" 599 ".thumb_func " THUMB_FUNC_PARAM(ctiTrampoline) "\n" 600 SYMBOL_STRING(ctiTrampoline) ":" "\n" 601 "sub sp, sp, #" STRINGIZE_VALUE_OF(ENABLE_PROFILER_REFERENCE_OFFSET) "\n" 602 "str lr, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "]" "\n" 603 "str r4, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R4_OFFSET) "]" "\n" 604 "str r5, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R5_OFFSET) "]" "\n" 605 "str r6, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R6_OFFSET) "]" "\n" 606 "str r1, [sp, #" STRINGIZE_VALUE_OF(REGISTER_FILE_OFFSET) "]" "\n" 607 "str r2, [sp, #" STRINGIZE_VALUE_OF(CALLFRAME_OFFSET) "]" "\n" 608 "str r3, [sp, #" STRINGIZE_VALUE_OF(EXCEPTION_OFFSET) "]" "\n" 609 "cpy r5, r2" "\n" 610 "mov r6, #512" "\n" 611 "blx r0" "\n" 612 "ldr r6, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R6_OFFSET) "]" "\n" 613 "ldr r5, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R5_OFFSET) "]" "\n" 614 "ldr r4, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R4_OFFSET) "]" "\n" 615 "ldr lr, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "]" "\n" 616 "add sp, sp, #" STRINGIZE_VALUE_OF(ENABLE_PROFILER_REFERENCE_OFFSET) "\n" 617 "bx lr" "\n" 618 ); 619 620 asm volatile( 621 ".text" "\n" 622 ".align 2" "\n" 623 ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" 624 HIDE_SYMBOL(ctiVMThrowTrampoline) "\n" 625 ".thumb" "\n" 626 ".thumb_func " THUMB_FUNC_PARAM(ctiVMThrowTrampoline) "\n" 627 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" 628 "cpy r0, sp" "\n" 629 "bl " SYMBOL_STRING_RELOCATION(cti_vm_throw) "\n" 630 "ldr r6, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R6_OFFSET) "]" "\n" 631 "ldr r5, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R5_OFFSET) "]" "\n" 632 "ldr r4, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R4_OFFSET) "]" "\n" 633 "ldr lr, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "]" "\n" 634 "add sp, sp, #" STRINGIZE_VALUE_OF(ENABLE_PROFILER_REFERENCE_OFFSET) "\n" 635 "bx lr" "\n" 636 ); 637 638 asm volatile( 639 ".text" "\n" 640 ".align 2" "\n" 641 ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" 642 HIDE_SYMBOL(ctiOpThrowNotCaught) "\n" 643 ".thumb" "\n" 644 ".thumb_func " THUMB_FUNC_PARAM(ctiOpThrowNotCaught) "\n" 645 SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" 646 "ldr r6, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R6_OFFSET) "]" "\n" 647 "ldr r5, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R5_OFFSET) "]" "\n" 648 "ldr r4, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_R4_OFFSET) "]" "\n" 649 "ldr lr, [sp, #" STRINGIZE_VALUE_OF(PRESERVED_RETURN_ADDRESS_OFFSET) "]" "\n" 650 "add sp, sp, #" STRINGIZE_VALUE_OF(ENABLE_PROFILER_REFERENCE_OFFSET) "\n" 651 "bx lr" "\n" 652 ); 653 654 #elif COMPILER(GCC) && CPU(ARM_TRADITIONAL) 655 656 asm volatile( 657 ".globl " SYMBOL_STRING(ctiTrampoline) "\n" 658 HIDE_SYMBOL(ctiTrampoline) "\n" 659 SYMBOL_STRING(ctiTrampoline) ":" "\n" 660 "stmdb sp!, {r1-r3}" "\n" 661 "stmdb sp!, {r4-r8, lr}" "\n" 662 "sub sp, sp, #" STRINGIZE_VALUE_OF(PRESERVEDR4_OFFSET) "\n" 663 "mov r4, r2" "\n" 664 "mov r5, #512" "\n" 665 // r0 contains the code 666 "mov lr, pc" "\n" 667 "mov pc, r0" "\n" 668 "add sp, sp, #" STRINGIZE_VALUE_OF(PRESERVEDR4_OFFSET) "\n" 669 "ldmia sp!, {r4-r8, lr}" "\n" 670 "add sp, sp, #12" "\n" 671 "mov pc, lr" "\n" 672 ); 673 674 asm volatile( 675 ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" 676 HIDE_SYMBOL(ctiVMThrowTrampoline) "\n" 677 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" 678 "mov r0, sp" "\n" 679 "bl " SYMBOL_STRING(cti_vm_throw) "\n" 680 681 // Both has the same return sequence 682 ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" 683 HIDE_SYMBOL(ctiOpThrowNotCaught) "\n" 684 SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" 685 "add sp, sp, #" STRINGIZE_VALUE_OF(PRESERVEDR4_OFFSET) "\n" 686 "ldmia sp!, {r4-r8, lr}" "\n" 687 "add sp, sp, #12" "\n" 688 "mov pc, lr" "\n" 689 ); 690 691 #endif 692 753 693 #if ENABLE(OPCODE_SAMPLING) 754 694 #define CTI_SAMPLER stackFrame.globalData->interpreter->sampler() … … 765 705 // and the OBJECT_OFFSETOF macro does not appear constantish enough for it to be happy with its use in COMPILE_ASSERT 766 706 // macros. 767 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedReturnAddress) == 0x20);768 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR4) == 0x24);769 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR5) == 0x28);770 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR6) == 0x2c);771 772 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, registerFile) == 0x30);773 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, callFrame) == 0x34);774 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, exception) == 0x38);707 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedReturnAddress) == PRESERVED_RETURN_ADDRESS_OFFSET); 708 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR4) == PRESERVED_R4_OFFSET); 709 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR5) == PRESERVED_R5_OFFSET); 710 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR6) == PRESERVED_R6_OFFSET); 711 712 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, registerFile) == REGISTER_FILE_OFFSET); 713 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, callFrame) == CALLFRAME_OFFSET); 714 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, exception) == EXCEPTION_OFFSET); 775 715 // The fifth argument is the first item already on the stack. 776 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, enabledProfilerReference) == 0x40); 777 778 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, thunkReturnAddress) == 0x1C); 716 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, enabledProfilerReference) == ENABLE_PROFILER_REFERENCE_OFFSET); 717 718 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, thunkReturnAddress) == THUNK_RETURN_ADDRESS_OFFSET); 719 720 #elif CPU(ARM_TRADITIONAL) 721 722 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, thunkReturnAddress) == THUNK_RETURN_ADDRESS_OFFSET); 723 ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR4) == PRESERVEDR4_OFFSET); 724 779 725 #endif 780 726 } … … 1028 974 ".thumb_func " THUMB_FUNC_PARAM(cti_##op) "\n" \ 1029 975 SYMBOL_STRING(cti_##op) ":" "\n" \ 1030 "str lr, [sp, # 0x1c]" "\n" \976 "str lr, [sp, #" STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "]" "\n" \ 1031 977 "bl " SYMBOL_STRING(JITStubThunked_##op) "\n" \ 1032 "ldr lr, [sp, # 0x1c]" "\n" \978 "ldr lr, [sp, #" STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "]" "\n" \ 1033 979 "bx lr" "\n" \ 1034 980 ); \ … … 1036 982 1037 983 #elif CPU(ARM_TRADITIONAL) && COMPILER(GCC) 1038 1039 #if USE(JSVALUE32_64)1040 #define THUNK_RETURN_ADDRESS_OFFSET 641041 #else1042 #define THUNK_RETURN_ADDRESS_OFFSET 321043 #endif1044 1045 COMPILE_ASSERT(offsetof(struct JITStackFrame, thunkReturnAddress) == THUNK_RETURN_ADDRESS_OFFSET, JITStackFrame_thunkReturnAddress_offset_mismatch);1046 984 1047 985 #define DEFINE_STUB_FUNCTION(rtype, op) \
Note:
See TracChangeset
for help on using the changeset viewer.