[webkit-dev] ARM JIT for WinCE

Patrick Roland Gansterer paroga at paroga.com
Wed Jan 6 11:37:59 PST 2010


Hi Gabor,

Thanks for your prompt reply.

> Make sure your assembler does not break ctiVMThrowTrampoline
> and ctiOpThrowNotCaught functions. This approach requires that the
> ctiVMThrowTrampoline fall-backs to ctiOpThrowNotCaught
> after 'bl cti_vm_throw' call. Or you can simply copy the body of
> ctiOpThrowNotCaught into ctiVMThrowTrampoline after the
> call.
I've copied it, but I think it's unnecessary (see disassembly)

> Did you do anything with DEFINE_STUB_FUNCTION macro?
I've done it like for the RVCT compiler. (e.g. see cti_op_end in disassembly)

When I run "jsc.exe tests\mozilla\ecma_2\shell.js" it crashes with the 
following callstack:
0x00000000
jsc.EXE!JSC::JSCell::inherits(JSC::ClassInfo* info = 0x00189818) Line: 335, 
Byte Offsets: 0x2c
jsc.EXE!JSC::JSValue::inherits(JSC::ClassInfo* classInfo = 0x00189818) Line: 
345, Byte Offsets: 0x40
jsc.EXE!JSC::dateProtoFuncGetTimezoneOffset(JSC::ExecState* exec = 0x00601b60, 
JSC::JSObject* __formal = 0x00601b40, JSC::JSValue thisValue = {...}, 
JSC::ArgList& __formal = {...}) Line: 764, Byte Offsets: 0x1c
0x003e01d4

Is there a better javascript file to start with? When I enter a simple "1+2+3" 
into the interactive jsc.exe it prints the correct result.

Here are some parts of the disassembly:

        // Execute the code!
        inline JSValue execute(RegisterFile* registerFile, CallFrame* 
callFrame, JSGlobalData* globalData, JSValue* exception)
        {
000A7868  mov         r12, sp 
000A786C  stmdb       sp!, {r0 - r3} 
000A7870  stmdb       sp!, {r12, lr} 
000A7874  sub         sp, sp, #0x20 
            return 
JSValue::decode(ctiTrampoline(m_ref.m_code.executableAddress(), registerFile, 
callFrame, exception, Profiler::enabledProfilerReference(), globalData));
000A7878  bl          |JSC::Profiler::enabledProfilerReference ( 1b2e0h )| 
000A787C  str         r0, [sp, #0x14] 
000A7880  ldr         r0, this 
000A7884  bl          |WTF::RefPtr<JSC::Profile>::operator-> ( d2e3ch )| 
000A7888  str         r0, [sp, #0x18] 
000A788C  ldr         r3, globalData 
000A7890  str         r3, [sp, #4] 
000A7894  ldr         r3, [sp, #0x14] 
000A7898  str         r3, [sp] 
000A789C  ldr         r3, exception 
000A78A0  ldr         r2, callFrame 
000A78A4  ldr         r1, registerFile 
000A78A8  ldr         r0, [sp, #0x18] 
000A78AC  bl          0014A000 
000A78B0  str         r0, [sp, #0x1C] 
000A78B4  ldr         r1, [sp, #0x1C] 
000A78B8  ldr         r0, [sp, #0x2C] 
000A78BC  bl          |JSC::JSValue::decode ( 1b94ch )| 
000A78C0  ldr         r3, [sp, #0x2C] 
000A78C4  str         r3, [sp, #0x10] 
        }
000A78C8  ldr         r0, [sp, #0x10] 
000A78CC  add         sp, sp, #0x20 
000A78D0  ldmia       sp, {sp, pc} 

================================================================================

ctiTrampoline:
0014A000  stmdb       sp!, {r1 - r3} 
0014A004  stmdb       sp!, {r4 - r8, lr} 
0014A008  sub         sp, sp, #0x24 
0014A00C  mov         r4, r2 
0014A010  mov         r5, #2, 24 
0014A014  mov         lr, pc 
0014A018  bx          r0                        // r0 = 0x003e0270
0014A01C  add         sp, sp, #0x24 
0014A020  ldmia       sp!, {r4 - r8, lr} 
0014A024  add         sp, sp, #0xC 
0014A028  bx          lr   
ctiVMThrowTrampoline:
0014A02C  mov         r0, sp 
0014A030  bl          0014A6D4 
0014A034  add         sp, sp, #0x24 
0014A038  ldmia       sp!, {r4 - r8, lr} 
0014A03C  add         sp, sp, #0xC 
0014A040  bx          lr   
ctiOpThrowNotCaught:
0014A044  add         sp, sp, #0x24 
0014A048  ldmia       sp!, {r4 - r8, lr} 
0014A04C  add         sp, sp, #0xC 
0014A050  bx          lr   
cti_op_convert_this:
0014A054  str         lr, [sp, #0x20] 
0014A058  bl          |JITStubThunked_op_convert_this ( ae718h )| 
0014A05C  ldr         lr, [sp, #0x20] 
0014A060  bx          lr   
cti_op_end:
0014A064  str         lr, [sp, #0x20] 
0014A068  bl          |JITStubThunked_op_end ( ae878h )| 
0014A06C  ldr         lr, [sp, #0x20] 
0014A070  bx          lr   

================================================================================

003E017C  mov         pc, r0 
003E0180  mov         r0, lr 
003E0184  str         r0, [r4, #-0x14] 
003E0188  ldr         r1, [r4, #-0x18] 
003E018C  ldr         r1, [r1, #-0x1C] 
003E0190  str         r1, [r4, #-0x1C] 
003E0194  ldr         r0, [r4, #-0xC] 
003E0198  subs        sp, sp, #8 
003E019C  subs        r0, r0, #1 
003E01A0  str         r0, [sp, #4] 
003E01A4  mov         r1, r4 
003E01A8  subs        r1, r1, #0x20 
003E01AC  mov         r3, #4 
003E01B0  muls        r0, r3, r0 
003E01B4  subs        r1, r1, r0 
003E01B8  str         r1, [sp] 
003E01BC  ldr         r2, [r1, #-4] 
003E01C0  ldr         r1, [r4, #-8] 
003E01C4  mov         r0, r4 
003E01C8  mov         r3, sp 
003E01CC  mov         lr, pc 
003E01D0  ldr         pc, [r1, #0x1C] 
003E01D4  adds        sp, sp, #8 
003E01D8  ldr         r3, [pc, #0x7C] 
003E01DC  ldr         r2, [r3] 
003E01E0  bics        r3, r2, #0 
003E01E4  bne         003E01F8 
003E01E8  ldr         r1, [r4, #-0x14] 
003E01EC  ldr         r4, [r4, #-0x18] 
003E01F0  mov         lr, r1 
003E01F4  mov         pc, lr 
003E01F8  ldr         r1, [r4, #-0x14] 
003E01FC  ldr         r2, [pc, #0x60] 
003E0200  str         r1, [r2] 
003E0204  ldr         r2, [pc, #0x5C] 
003E0208  ldr         r4, [r4, #-0x18] 
003E020C  str         r4, [sp, #0x40] 
003E0210  mov         lr, r2 
003E0214  mov         pc, lr 

================================================================================

003E0258  andeq       r0, r0, r0 
003E025C  eoreq       r0, r11, r8, ror #30 
003E0260  streqd      r0, [r0], -r8 
003E0264  eoreq       r0, r11, r12, ror #30 
003E0268  andeqs      r10, r4, r12, lsr #32 
003E026C  ldr         r3, [r3, -r3] 
003E0270  mov         r2, lr 
003E0274  str         r2, [r4, #-0x14] 
003E0278  ldr         r8, [pc, #0x400] 
003E027C  str         r8, [sp, #4] 
003E0280  mov         r0, sp 
003E0284  str         r4, [sp, #0x40] 
003E0288  mov         lr, pc 
003E028C  ldr         pc, [pc, #0x3F0] 
003E0290  str         r0, [r4, #-0x3C] 
003E0294  ldr         r8, [pc, #0x3EC] 
003E0298  str         r8, [sp, #4] 
003E029C  mov         r0, sp 
003E02A0  str         r4, [sp, #0x40] 
003E02A4  mov         lr, pc 
003E02A8  ldr         pc, [pc, #0x3DC] 
003E02AC  str         r0, [r4, #-0x40] 
003E02B0  ldr         r8, [pc, #0x3D8] 
003E02B4  str         r8, [sp, #4] 
003E02B8  mov         r0, sp 
003E02BC  str         r4, [sp, #0x40] 
003E02C0  mov         lr, pc 
003E02C4  ldr         pc, [pc, #0x3C8] 
003E02C8  str         r0, [r4, #-0x44] 
003E02CC  ldr         r8, [pc, #0x3C4] 
003E02D0  str         r8, [sp, #4] 
003E02D4  mov         r0, sp 
003E02D8  str         r4, [sp, #0x40] 
003E02DC  mov         lr, pc 
003E02E0  ldr         pc, [pc, #0x3B4] 
003E02E4  str         r0, [r4, #-0x48] 
003E02E8  ldr         r8, [pc, #0x3B0] 
003E02EC  str         r8, [sp, #4] 

- Patrick


More information about the webkit-dev mailing list