2009/5/28 Søren Gjesse <[email protected]>:
> The flag is --print-code which will print all code generated, and the flag
> in only available for a debug build. When your first functions are compiled
> you will see compilation of some internal stuff, and as a lot of the
> builtins as lazily compiled you will see auxiliary code generation first
> time some builtins are used. E.g. the function 'function
> f(){"sss".indexOf('s')}' when run for the first time will cause parts of the
> String implementation to get compiled as well (large parts of the String
> implementation is in JavaScript). To avoid this and to see the code for your
> functions "immediately" you can add the --nolazy flag as well to turn off
> lazy compilation. Without lazy compilation all functions will be egerly
> compiled when added and not on first use.
>

Thank you. Soren.
I open v8_shell using '-print-code -nolazy' options.  And I just enter
'function f(){"sss".indexOf('s')}' at the d8 prompt.

BUt why do I see 3 'Raw source' output below?
--- Raw source ---
(){"sss".indexOf('s')}

--- Raw source ---
function f(){"sss".indexOf('s')}


--- Raw source ---
({"seq":3,"type":"event","event":"afterCompile","success":true,"body":{"script":{"handle":1,"type":"script","name":"(d8)","id":27,"lineOffset":0,"columnOffset":0,"lineCount":1,"source":"function
f(){\"sss\".indexOf('s')}\n","sourceLength":33,"scriptType":2,"context":{"ref":0},"text":"(d8)
(lines: 1)"}},"refs":[{"handle":0,"type":"context","text":"#<a
ContextMirror>"}],"running":true})



d8> function f(){"sss".indexOf('s')}
--- Raw source ---
(){"sss".indexOf('s')}


--- Code ---
kind = FUNCTION
name = f
Instructions (size = 124)
0x182a7c0     0  f7c701000000   test edi,0x1
0x182a7c6     6  0f850d000000   jnz 25  (0x182a7d9)
0x182a7cc    12  50             push eax
0x182a7cd    13  6828d82000     push 0x20d828
0x182a7d2    18  6a00           push 0x0
0x182a7d4    20  e827d7c4fe     call 0x477f00                ;; debug:
statement 10
                                                             ;; code:
STUB, Runtime, RuntimeStub_Abort
0x182a7d9    25  8b47ff         mov eax,[edi+0xff]
0x182a7dc    28  8078079d       cmpb [eax+0x7],0x9d
0x182a7e0    32  0f840d000000   jz 51  (0x182a7f3)
0x182a7e6    38  50             push eax
0x182a7e7    39  6864d82000     push 0x20d864
0x182a7ec    44  6a00           push 0x0
0x182a7ee    46  e80dd7c4fe     call 0x477f00                ;; code:
STUB, Runtime, RuntimeStub_Abort
0x182a7f3    51  55             push ebp
0x182a7f4    52  8bec           mov ebp,esp
0x182a7f6    54  56             push esi
0x182a7f7    55  57             push edi
0x182a7f8    56  3b25e8b32600   cmp esp,[0x26b3e8]
0x182a7fe    62  0f822e000000   jc 114  (0x182a832)
0x182a804    68  83ec0c         sub esp,0xc
0x182a807    71  c745f47d1f6001 mov [ebp+0xf4],0x1601f7d     ;;
object: 0x1601f7d <String[7]: indexOf>
0x182a80e    78  c745f07de86001 mov [ebp+0xf0],0x160e87d     ;;
object: 0x160e87d <String[3]: sss>
0x182a815    85  c745ecc5106001 mov [ebp+0xec],0x16010c5     ;;
object: 0x16010c5 <String[1]: s>
0x182a81c    92  e8ffd8c4fe     call 0x478120                ;; debug:
statement 13
                                                             ;; debug:
position 19
                                                             ;; code:
CALL_IC, UNINITIALIZED, argc = 1
0x182a821    97  8b75fc         mov esi,[ebp+0xfc]
0x182a824   100  83c404         add esp,0x4
0x182a827   103  b835016001     mov eax,0x1600135            ;;
object: 0x1600135 <undefined>
0x182a82c   108  8be5           mov esp,ebp                  ;; debug:
statement 32
                                                             ;; js return
0x182a82e   110  5d             pop ebp
0x182a82f   111  c20400         ret 0x4
0x182a832   114  e829dcc4fe     call 0x478460                ;; debug:
statement 10
                                                             ;; code:
STUB, StackCheck, minor: 0
0x182a837   119  8b7df8         mov edi,[ebp+0xf8]
0x182a83a   122  ebc8           jmp 68  (0x182a804)

RelocInfo (size = 20)
0x182a7d4  statement position  (10)
0x182a7d5  code target (STUB)  (0x477f00)
0x182a7ef  code target (STUB)  (0x477f00)
0x182a80a  embedded object  (0x1601f7d <String[7]: indexOf>)
0x182a811  embedded object  (0x160e87d <String[3]: sss>)
0x182a818  embedded object  (0x16010c5 <String[1]: s>)
0x182a81c  statement position  (13)
0x182a81c  position  (19)
0x182a81d  code target (CALL_IC)  (0x478120)
0x182a828  embedded object  (0x1600135 <undefined>)
0x182a82c  statement position  (32)
0x182a82c  js return
0x182a832  statement position  (10)
0x182a833  code target (STUB)  (0x478460)

--- Raw source ---
function f(){"sss".indexOf('s')}


--- Code ---
kind = FUNCTION
Instructions (size = 99)
0x182a8a0     0  f7c701000000   test edi,0x1
0x182a8a6     6  0f850d000000   jnz 25  (0x182a8b9)
0x182a8ac    12  50             push eax
0x182a8ad    13  6828d82000     push 0x20d828
0x182a8b2    18  6a00           push 0x0
0x182a8b4    20  e847d6c4fe     call 0x477f00                ;; debug:
statement 0
                                                             ;; code:
STUB, Runtime, RuntimeStub_Abort
0x182a8b9    25  8b47ff         mov eax,[edi+0xff]
0x182a8bc    28  8078079d       cmpb [eax+0x7],0x9d
0x182a8c0    32  0f840d000000   jz 51  (0x182a8d3)
0x182a8c6    38  50             push eax
0x182a8c7    39  6864d82000     push 0x20d864
0x182a8cc    44  6a00           push 0x0
0x182a8ce    46  e82dd6c4fe     call 0x477f00                ;; code:
STUB, Runtime, RuntimeStub_Abort
0x182a8d3    51  55             push ebp
0x182a8d4    52  8bec           mov ebp,esp
0x182a8d6    54  56             push esi
0x182a8d7    55  57             push edi
0x182a8d8    56  6879084501     push 0x1450879               ;;
object: 0x1450879 <FixedArray[2]>
0x182a8dd    61  56             push esi
0x182a8de    62  6a00           push 0x0
0x182a8e0    64  e83b3ec5fe     call 0x47e720                ;; code:
STUB, Runtime, RuntimeStub_DeclareGlobals
0x182a8e5    69  3b25e8b32600   cmp esp,[0x26b3e8]
0x182a8eb    75  0f820b000000   jc 92  (0x182a8fc)
0x182a8f1    81  b835016001     mov eax,0x1600135            ;;
object: 0x1600135 <undefined>
0x182a8f6    86  8be5           mov esp,ebp                  ;; debug:
statement 33
                                                             ;; js return
0x182a8f8    88  5d             pop ebp
0x182a8f9    89  c20400         ret 0x4
0x182a8fc    92  e85fdbc4fe     call 0x478460                ;; debug:
statement 0
                                                             ;; code:
STUB, StackCheck, minor: 0
0x182a901    97  ebee           jmp 81  (0x182a8f1)

RelocInfo (size = 14)
0x182a8b4  statement position  (0)
0x182a8b5  code target (STUB)  (0x477f00)
0x182a8cf  code target (STUB)  (0x477f00)
0x182a8d9  embedded object  (0x1450879 <FixedArray[2]>)
0x182a8e1  code target (STUB)  (0x47e720)
0x182a8f2  embedded object  (0x1600135 <undefined>)
0x182a8f6  statement position  (33)
0x182a8f6  js return
0x182a8fc  statement position  (0)
0x182a8fd  code target (STUB)  (0x478460)

--- Raw source ---
({"seq":3,"type":"event","event":"afterCompile","success":true,"body":{"script":{"handle":1,"type":"script","name":"(d8)","id":27,"lineOffset":0,"columnOffset":0,"lineCount":1,"source":"function
f(){\"sss\".indexOf('s')}\n","sourceLength":33,"scriptType":2,"context":{"ref":0},"text":"(d8)
(lines: 1)"}},"refs":[{"handle":0,"type":"context","text":"#<a
ContextMirror>"}],"running":true})

--- Code ---
kind = FUNCTION
Instructions (size = 148)
0x182a960     0  f7c701000000   test edi,0x1
0x182a966     6  0f850d000000   jnz 25  (0x182a979)
0x182a96c    12  50             push eax
0x182a96d    13  6828d82000     push 0x20d828
0x182a972    18  6a00           push 0x0
0x182a974    20  e887d5c4fe     call 0x477f00                ;; debug:
statement 0
                                                             ;; code:
STUB, Runtime, RuntimeStub_Abort
0x182a979    25  8b47ff         mov eax,[edi+0xff]
0x182a97c    28  8078079d       cmpb [eax+0x7],0x9d
0x182a980    32  0f840d000000   jz 51  (0x182a993)
0x182a986    38  50             push eax
0x182a987    39  6864d82000     push 0x20d864
0x182a98c    44  6a00           push 0x0
0x182a98e    46  e86dd5c4fe     call 0x477f00                ;; code:
STUB, Runtime, RuntimeStub_Abort
0x182a993    51  55             push ebp
0x182a994    52  8bec           mov ebp,esp
0x182a996    54  56             push esi
0x182a997    55  57             push edi
0x182a998    56  b835016001     mov eax,0x1600135            ;;
object: 0x1600135 <undefined>
0x182a99d    61  50             push eax
0x182a99e    62  3b25e8b32600   cmp esp,[0x26b3e8]
0x182a9a4    68  0f8240000000   jc 138  (0x182a9ea)
0x182a9aa    74  8b7f17         mov edi,[edi+0x17]
0x182a9ad    77  8b471f         mov eax,[edi+0x1f]
0x182a9b0    80  3d35016001     cmp eax, 0x1600135           ;;
object: 0x1600135 <undefined>
0x182a9b5    85  0f8414000000   jz 111  (0x182a9cf)
0x182a9bb    91  83ec04         sub esp,0x4
0x182a9be    94  8945f0         mov [ebp+0xf0],eax
0x182a9c1    97  e8fab5c6fe     call 0x495fc0                ;; code:
STUB, Runtime, RuntimeStub_CloneLiteralBoilerplate
0x182a9c6   102  8945f4         mov [ebp+0xf4],eax
0x182a9c9   105  8be5           mov esp,ebp                  ;; js return
0x182a9cb   107  5d             pop ebp
0x182a9cc   108  c20400         ret 0x4
0x182a9cf   111  83ec0c         sub esp,0xc
0x182a9d2   114  897df0         mov [ebp+0xf0],edi
0x182a9d5   117  c745ec0c000000 mov [ebp+0xec],0xc
0x182a9dc   124  c745e8d9d54601 mov [ebp+0xe8],0x146d5d9     ;;
object: 0x146d5d9 <FixedArray[14]>
0x182a9e3   131  e878a2c5fe     call 0x484c60                ;; code:
STUB, Runtime, RuntimeStub_CreateObjectLiteralBoilerplate
0x182a9e8   136  ebd1           jmp 91  (0x182a9bb)
0x182a9ea   138  e871dac4fe     call 0x478460                ;; code:
STUB, StackCheck, minor: 0
0x182a9ef   143  8b7df8         mov edi,[ebp+0xf8]
0x182a9f2   146  ebb6           jmp 74  (0x182a9aa)

RelocInfo (size = 12)
0x182a974  statement position  (0)
0x182a975  code target (STUB)  (0x477f00)
0x182a98f  code target (STUB)  (0x477f00)
0x182a999  embedded object  (0x1600135 <undefined>)
0x182a9b1  embedded object  (0x1600135 <undefined>)
0x182a9c2  code target (STUB)  (0x495fc0)
0x182a9c9  js return
0x182a9df  embedded object  (0x146d5d9 <FixedArray[14]>)
0x182a9e4  code target (STUB)  (0x484c60)
0x182a9eb  code target (STUB)  (0x478460)

d8>




> Regards,
> Søren
>
> On Wed, May 27, 2009 at 19:13, Mikhail Naganov <[email protected]> wrote:
>>
>> Actually, I don't see any switch in shell to print disassembler dump,
>> but you can look into test/cctest/test-log-ia32.cc to see how it can
>> be programmed.
>>
>> In a debug build, you can do the following:
>>
>>  v8::internal::Handle<v8::internal::JSFunction> func =
>> CompileFunction(<your code>);
>>  v8::internal::Code* func_code = func->code();
>>  func_code->Print();
>>
>> But remember that functions are compiled lazily. If you've declared a
>> function, it doesn't get compiled until the first call to it. Put all
>> your code into top-level script if you want it to be compiled
>> immediately.
>>
>> On Wed, May 27, 2009 at 20:22, silverburgh <[email protected]>
>> wrote:
>> >
>> >
>> > In here,
>> > http://code.google.com/apis/v8/design.html
>> > it dumps the machine code for 'point.x'.
>> >
>> > How can I dump the machine code for my JS file that I give to V8?
>> >
>> > Thank you.
>> >
>> >
>> >
>> > >
>> >
>>
>> >>
>
>

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to