Changeset 50981 in webkit for trunk/JavaScriptCore/jit
- Timestamp:
- Nov 13, 2009, 4:44:42 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/jit
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JIT.cpp
r50254 r50981 38 38 #include "Interpreter.h" 39 39 #include "JITInlineMethods.h" 40 #include "JITStubs.h"41 40 #include "JITStubCall.h" 42 41 #include "JSArray.h" -
trunk/JavaScriptCore/jit/JIT.h
r50255 r50981 466 466 static const int patchOffsetMethodCheckProtoStruct = 18; 467 467 static const int patchOffsetMethodCheckPutFunction = 29; 468 #elif PLATFORM(ARM_TRADITIONAL) 469 // patchOffset... values should go here; JIT optimizations currently not supported on ARM with JSVALUE32_64. 468 470 #else 469 471 #error "JSVALUE32_64 not supported on this platform." -
trunk/JavaScriptCore/jit/JITOpcodes.cpp
r50540 r50981 139 139 jump(regT0); 140 140 141 #if PLATFORM(X86) 141 #if PLATFORM(X86) || PLATFORM(ARM_TRADITIONAL) 142 142 Label nativeCallThunk = align(); 143 143 preserveReturnAddressAfterCall(regT0); … … 150 150 emitPutToCallFrameHeader(regT1, RegisterFile::ScopeChain); 151 151 152 #if PLATFORM(X86) 152 153 emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0); 153 154 … … 248 249 // so pull them off now 249 250 addPtr(Imm32(NativeCallFrameSize - sizeof(NativeFunctionCalleeSignature)), stackPointerRegister); 251 252 #elif PLATFORM(ARM_TRADITIONAL) 253 emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0); 254 255 // Allocate stack space for our arglist 256 COMPILE_ASSERT((sizeof(ArgList) & 0x7) == 0 && sizeof(JSValue) == 8 && sizeof(Register) == 8, ArgList_should_by_8byte_aligned); 257 subPtr(Imm32(sizeof(ArgList)), stackPointerRegister); 258 259 // Set up arguments 260 subPtr(Imm32(1), regT0); // Don't include 'this' in argcount 261 262 // Push argcount 263 storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_argCount))); 264 265 // Calculate the start of the callframe header, and store in regT1 266 move(callFrameRegister, regT1); 267 sub32(Imm32(RegisterFile::CallFrameHeaderSize * (int32_t)sizeof(Register)), regT1); 268 269 // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT1) 270 mul32(Imm32(sizeof(Register)), regT0, regT0); 271 subPtr(regT0, regT1); 272 273 // push pointer to arguments 274 storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_args))); 275 276 // Argument passing method: 277 // r0 - points to return value 278 // r1 - callFrame 279 // r2 - callee 280 // stack: this(JSValue) and a pointer to ArgList 281 282 move(stackPointerRegister, regT3); 283 subPtr(Imm32(8), stackPointerRegister); 284 move(stackPointerRegister, regT0); 285 subPtr(Imm32(8 + 4 + 4 /* padding */), stackPointerRegister); 286 287 // Setup arg4: 288 storePtr(regT3, Address(stackPointerRegister, 8)); 289 290 // Setup arg3 291 // regT1 currently points to the first argument, regT1-sizeof(Register) points to 'this' 292 load32(Address(regT1, -(int32_t)sizeof(void*) * 2), regT3); 293 storePtr(regT3, Address(stackPointerRegister, 0)); 294 load32(Address(regT1, -(int32_t)sizeof(void*)), regT3); 295 storePtr(regT3, Address(stackPointerRegister, 4)); 296 297 // Setup arg2: 298 emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT2); 299 300 // Setup arg1: 301 move(callFrameRegister, regT1); 302 303 call(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_data))); 304 305 // Load return value 306 load32(Address(stackPointerRegister, 16), regT0); 307 load32(Address(stackPointerRegister, 20), regT1); 308 309 addPtr(Imm32(sizeof(ArgList) + 16 + 8), stackPointerRegister); 310 #endif 250 311 251 312 // Check for an exception -
trunk/JavaScriptCore/jit/JITStubs.cpp
r50874 r50981 57 57 #include "Register.h" 58 58 #include "SamplingTool.h" 59 #include <wtf/StdLibExtras.h> 59 60 #include <stdarg.h> 60 61 #include <stdio.h> … … 269 270 "add sp, sp, #0x3c" "\n" 270 271 "bx lr" "\n" 272 ); 273 274 #elif COMPILER(GCC) && PLATFORM(ARM_TRADITIONAL) 275 276 asm volatile ( 277 ".globl " SYMBOL_STRING(ctiTrampoline) "\n" 278 SYMBOL_STRING(ctiTrampoline) ":" "\n" 279 "stmdb sp!, {r1-r3}" "\n" 280 "stmdb sp!, {r4-r8, lr}" "\n" 281 "sub sp, sp, #68" "\n" 282 "mov r4, r2" "\n" 283 "mov r5, #512" "\n" 284 // r0 contains the code 285 "mov lr, pc" "\n" 286 "mov pc, r0" "\n" 287 "add sp, sp, #68" "\n" 288 "ldmia sp!, {r4-r8, lr}" "\n" 289 "add sp, sp, #12" "\n" 290 "mov pc, lr" "\n" 291 ); 292 293 asm volatile ( 294 ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" 295 SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" 296 "mov r0, sp" "\n" 297 "bl " SYMBOL_STRING(cti_vm_throw) "\n" 298 299 // Both has the same return sequence 300 ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" 301 SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" 302 "add sp, sp, #68" "\n" 303 "ldmia sp!, {r4-r8, lr}" "\n" 304 "add sp, sp, #12" "\n" 305 "mov pc, lr" "\n" 271 306 ); 272 307 … … 907 942 #elif PLATFORM(ARM_TRADITIONAL) && COMPILER(GCC) 908 943 944 #if USE(JSVALUE32_64) 945 #define THUNK_RETURN_ADDRESS_OFFSET 64 946 #else 947 #define THUNK_RETURN_ADDRESS_OFFSET 32 948 #endif 949 950 COMPILE_ASSERT(offsetof(struct JITStackFrame, thunkReturnAddress) == THUNK_RETURN_ADDRESS_OFFSET, JITStackFrame_thunkReturnAddress_offset_mismatch); 951 909 952 #define DEFINE_STUB_FUNCTION(rtype, op) \ 910 953 extern "C" { \ … … 914 957 ".globl " SYMBOL_STRING(cti_##op) "\n" \ 915 958 SYMBOL_STRING(cti_##op) ":" "\n" \ 916 "str lr, [sp, # 32]" "\n" \959 "str lr, [sp, #" STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "]" "\n" \ 917 960 "bl " SYMBOL_STRING(JITStubThunked_##op) "\n" \ 918 "ldr lr, [sp, # 32]" "\n" \961 "ldr lr, [sp, #" STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "]" "\n" \ 919 962 "mov pc, lr" "\n" \ 920 963 ); \
Note:
See TracChangeset
for help on using the changeset viewer.