Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: src/codegen-ia32.cc

Issue 2957: Defer the writing of the source position data to the relocation information... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/codegen.cc ('k') | src/debug.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 2638 matching lines...) Expand 10 before | Expand all | Expand 10 after
2649 ExternalReference::address_of_stack_guard_limit(); 2649 ExternalReference::address_of_stack_guard_limit();
2650 __ cmp(esp, Operand::StaticVariable(stack_guard_limit)); 2650 __ cmp(esp, Operand::StaticVariable(stack_guard_limit));
2651 __ j(below, deferred->enter(), not_taken); 2651 __ j(below, deferred->enter(), not_taken);
2652 __ bind(deferred->exit()); 2652 __ bind(deferred->exit());
2653 } 2653 }
2654 } 2654 }
2655 2655
2656 2656
2657 void Ia32CodeGenerator::VisitBlock(Block* node) { 2657 void Ia32CodeGenerator::VisitBlock(Block* node) {
2658 Comment cmnt(masm_, "[ Block"); 2658 Comment cmnt(masm_, "[ Block");
2659 if (FLAG_debug_info) RecordStatementPosition(node); 2659 RecordStatementPosition(node);
2660 node->set_break_stack_height(break_stack_height_); 2660 node->set_break_stack_height(break_stack_height_);
2661 VisitStatements(node->statements()); 2661 VisitStatements(node->statements());
2662 __ bind(node->break_target()); 2662 __ bind(node->break_target());
2663 } 2663 }
2664 2664
2665 2665
2666 void Ia32CodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) { 2666 void Ia32CodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) {
2667 __ push(Immediate(pairs)); 2667 __ push(Immediate(pairs));
2668 __ push(Operand(esi)); 2668 __ push(Operand(esi));
2669 __ push(Immediate(Smi::FromInt(is_eval() ? 1 : 0))); 2669 __ push(Immediate(Smi::FromInt(is_eval() ? 1 : 0)));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2727 Load(val); 2727 Load(val);
2728 SetValue(&target); 2728 SetValue(&target);
2729 // Get rid of the assigned value (declarations are statements). 2729 // Get rid of the assigned value (declarations are statements).
2730 __ pop(eax); // Pop(no_reg); 2730 __ pop(eax); // Pop(no_reg);
2731 } 2731 }
2732 } 2732 }
2733 2733
2734 2734
2735 void Ia32CodeGenerator::VisitExpressionStatement(ExpressionStatement* node) { 2735 void Ia32CodeGenerator::VisitExpressionStatement(ExpressionStatement* node) {
2736 Comment cmnt(masm_, "[ ExpressionStatement"); 2736 Comment cmnt(masm_, "[ ExpressionStatement");
2737 if (FLAG_debug_info) RecordStatementPosition(node); 2737 RecordStatementPosition(node);
2738 Expression* expression = node->expression(); 2738 Expression* expression = node->expression();
2739 expression->MarkAsStatement(); 2739 expression->MarkAsStatement();
2740 Load(expression); 2740 Load(expression);
2741 __ pop(eax); // remove the lingering expression result from the top of stack 2741 __ pop(eax); // remove the lingering expression result from the top of stack
2742 } 2742 }
2743 2743
2744 2744
2745 void Ia32CodeGenerator::VisitEmptyStatement(EmptyStatement* node) { 2745 void Ia32CodeGenerator::VisitEmptyStatement(EmptyStatement* node) {
2746 Comment cmnt(masm_, "// EmptyStatement"); 2746 Comment cmnt(masm_, "// EmptyStatement");
2747 // nothing to do 2747 // nothing to do
2748 } 2748 }
2749 2749
2750 2750
2751 void Ia32CodeGenerator::VisitIfStatement(IfStatement* node) { 2751 void Ia32CodeGenerator::VisitIfStatement(IfStatement* node) {
2752 Comment cmnt(masm_, "[ IfStatement"); 2752 Comment cmnt(masm_, "[ IfStatement");
2753 // Generate different code depending on which 2753 // Generate different code depending on which
2754 // parts of the if statement are present or not. 2754 // parts of the if statement are present or not.
2755 bool has_then_stm = node->HasThenStatement(); 2755 bool has_then_stm = node->HasThenStatement();
2756 bool has_else_stm = node->HasElseStatement(); 2756 bool has_else_stm = node->HasElseStatement();
2757 2757
2758 if (FLAG_debug_info) RecordStatementPosition(node); 2758 RecordStatementPosition(node);
2759 Label exit; 2759 Label exit;
2760 if (has_then_stm && has_else_stm) { 2760 if (has_then_stm && has_else_stm) {
2761 Label then; 2761 Label then;
2762 Label else_; 2762 Label else_;
2763 // if (cond) 2763 // if (cond)
2764 LoadCondition(node->condition(), CodeGenState::LOAD, &then, &else_, true); 2764 LoadCondition(node->condition(), CodeGenState::LOAD, &then, &else_, true);
2765 Branch(false, &else_); 2765 Branch(false, &else_);
2766 // then 2766 // then
2767 __ bind(&then); 2767 __ bind(&then);
2768 Visit(node->then_statement()); 2768 Visit(node->then_statement());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2812 void Ia32CodeGenerator::CleanStack(int num_bytes) { 2812 void Ia32CodeGenerator::CleanStack(int num_bytes) {
2813 ASSERT(num_bytes >= 0); 2813 ASSERT(num_bytes >= 0);
2814 if (num_bytes > 0) { 2814 if (num_bytes > 0) {
2815 __ add(Operand(esp), Immediate(num_bytes)); 2815 __ add(Operand(esp), Immediate(num_bytes));
2816 } 2816 }
2817 } 2817 }
2818 2818
2819 2819
2820 void Ia32CodeGenerator::VisitContinueStatement(ContinueStatement* node) { 2820 void Ia32CodeGenerator::VisitContinueStatement(ContinueStatement* node) {
2821 Comment cmnt(masm_, "[ ContinueStatement"); 2821 Comment cmnt(masm_, "[ ContinueStatement");
2822 if (FLAG_debug_info) RecordStatementPosition(node); 2822 RecordStatementPosition(node);
2823 CleanStack(break_stack_height_ - node->target()->break_stack_height()); 2823 CleanStack(break_stack_height_ - node->target()->break_stack_height());
2824 __ jmp(node->target()->continue_target()); 2824 __ jmp(node->target()->continue_target());
2825 } 2825 }
2826 2826
2827 2827
2828 void Ia32CodeGenerator::VisitBreakStatement(BreakStatement* node) { 2828 void Ia32CodeGenerator::VisitBreakStatement(BreakStatement* node) {
2829 Comment cmnt(masm_, "[ BreakStatement"); 2829 Comment cmnt(masm_, "[ BreakStatement");
2830 if (FLAG_debug_info) RecordStatementPosition(node); 2830 RecordStatementPosition(node);
2831 CleanStack(break_stack_height_ - node->target()->break_stack_height()); 2831 CleanStack(break_stack_height_ - node->target()->break_stack_height());
2832 __ jmp(node->target()->break_target()); 2832 __ jmp(node->target()->break_target());
2833 } 2833 }
2834 2834
2835 2835
2836 void Ia32CodeGenerator::VisitReturnStatement(ReturnStatement* node) { 2836 void Ia32CodeGenerator::VisitReturnStatement(ReturnStatement* node) {
2837 Comment cmnt(masm_, "[ ReturnStatement"); 2837 Comment cmnt(masm_, "[ ReturnStatement");
2838 if (FLAG_debug_info) RecordStatementPosition(node); 2838 RecordStatementPosition(node);
2839 Load(node->expression()); 2839 Load(node->expression());
2840 2840
2841 // Move the function result into eax 2841 // Move the function result into eax
2842 __ pop(eax); 2842 __ pop(eax);
2843 2843
2844 // If we're inside a try statement or the return instruction 2844 // If we're inside a try statement or the return instruction
2845 // sequence has been generated, we just jump to that 2845 // sequence has been generated, we just jump to that
2846 // point. Otherwise, we generate the return instruction sequence and 2846 // point. Otherwise, we generate the return instruction sequence and
2847 // bind the function return label. 2847 // bind the function return label.
2848 if (is_inside_try_ || function_return_.is_bound()) { 2848 if (is_inside_try_ || function_return_.is_bound()) {
(...skipping 17 matching lines...) Expand all
2866 // Check that the size of the code used for returning matches what is 2866 // Check that the size of the code used for returning matches what is
2867 // expected by the debugger. 2867 // expected by the debugger.
2868 ASSERT_EQ(Debug::kIa32JSReturnSequenceLength, 2868 ASSERT_EQ(Debug::kIa32JSReturnSequenceLength,
2869 __ SizeOfCodeGeneratedSince(&check_exit_codesize)); 2869 __ SizeOfCodeGeneratedSince(&check_exit_codesize));
2870 } 2870 }
2871 } 2871 }
2872 2872
2873 2873
2874 void Ia32CodeGenerator::VisitWithEnterStatement(WithEnterStatement* node) { 2874 void Ia32CodeGenerator::VisitWithEnterStatement(WithEnterStatement* node) {
2875 Comment cmnt(masm_, "[ WithEnterStatement"); 2875 Comment cmnt(masm_, "[ WithEnterStatement");
2876 if (FLAG_debug_info) RecordStatementPosition(node); 2876 RecordStatementPosition(node);
2877 Load(node->expression()); 2877 Load(node->expression());
2878 __ CallRuntime(Runtime::kPushContext, 1); 2878 __ CallRuntime(Runtime::kPushContext, 1);
2879 2879
2880 if (kDebug) { 2880 if (kDebug) {
2881 Label verified_true; 2881 Label verified_true;
2882 // Verify eax and esi are the same in debug mode 2882 // Verify eax and esi are the same in debug mode
2883 __ cmp(eax, Operand(esi)); 2883 __ cmp(eax, Operand(esi));
2884 __ j(equal, &verified_true); 2884 __ j(equal, &verified_true);
2885 __ int3(); 2885 __ int3();
2886 __ bind(&verified_true); 2886 __ bind(&verified_true);
2887 } 2887 }
2888 2888
2889 // Update context local. 2889 // Update context local.
2890 __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), esi); 2890 __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), esi);
2891 } 2891 }
2892 2892
2893 2893
2894 void Ia32CodeGenerator::VisitWithExitStatement(WithExitStatement* node) { 2894 void Ia32CodeGenerator::VisitWithExitStatement(WithExitStatement* node) {
2895 Comment cmnt(masm_, "[ WithExitStatement"); 2895 Comment cmnt(masm_, "[ WithExitStatement");
2896 // Pop context. 2896 // Pop context.
2897 __ mov(esi, ContextOperand(esi, Context::PREVIOUS_INDEX)); 2897 __ mov(esi, ContextOperand(esi, Context::PREVIOUS_INDEX));
2898 // Update context local. 2898 // Update context local.
2899 __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), esi); 2899 __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), esi);
2900 } 2900 }
2901 2901
2902 2902
2903 void Ia32CodeGenerator::VisitSwitchStatement(SwitchStatement* node) { 2903 void Ia32CodeGenerator::VisitSwitchStatement(SwitchStatement* node) {
2904 Comment cmnt(masm_, "[ SwitchStatement"); 2904 Comment cmnt(masm_, "[ SwitchStatement");
2905 if (FLAG_debug_info) RecordStatementPosition(node); 2905 RecordStatementPosition(node);
2906 node->set_break_stack_height(break_stack_height_); 2906 node->set_break_stack_height(break_stack_height_);
2907 2907
2908 Load(node->tag()); 2908 Load(node->tag());
2909 2909
2910 Label next, fall_through, default_case; 2910 Label next, fall_through, default_case;
2911 ZoneList<CaseClause*>* cases = node->cases(); 2911 ZoneList<CaseClause*>* cases = node->cases();
2912 int length = cases->length(); 2912 int length = cases->length();
2913 2913
2914 for (int i = 0; i < length; i++) { 2914 for (int i = 0; i < length; i++) {
2915 CaseClause* clause = cases->at(i); 2915 CaseClause* clause = cases->at(i);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2959 __ pop(eax); 2959 __ pop(eax);
2960 } 2960 }
2961 2961
2962 __ bind(&fall_through); 2962 __ bind(&fall_through);
2963 __ bind(node->break_target()); 2963 __ bind(node->break_target());
2964 } 2964 }
2965 2965
2966 2966
2967 void Ia32CodeGenerator::VisitLoopStatement(LoopStatement* node) { 2967 void Ia32CodeGenerator::VisitLoopStatement(LoopStatement* node) {
2968 Comment cmnt(masm_, "[ LoopStatement"); 2968 Comment cmnt(masm_, "[ LoopStatement");
2969 if (FLAG_debug_info) RecordStatementPosition(node); 2969 RecordStatementPosition(node);
2970 node->set_break_stack_height(break_stack_height_); 2970 node->set_break_stack_height(break_stack_height_);
2971 2971
2972 // simple condition analysis 2972 // simple condition analysis
2973 enum { ALWAYS_TRUE, ALWAYS_FALSE, DONT_KNOW } info = DONT_KNOW; 2973 enum { ALWAYS_TRUE, ALWAYS_FALSE, DONT_KNOW } info = DONT_KNOW;
2974 if (node->cond() == NULL) { 2974 if (node->cond() == NULL) {
2975 ASSERT(node->type() == LoopStatement::FOR_LOOP); 2975 ASSERT(node->type() == LoopStatement::FOR_LOOP);
2976 info = ALWAYS_TRUE; 2976 info = ALWAYS_TRUE;
2977 } else { 2977 } else {
2978 Literal* lit = node->cond()->AsLiteral(); 2978 Literal* lit = node->cond()->AsLiteral();
2979 if (lit != NULL) { 2979 if (lit != NULL) {
(...skipping 20 matching lines...) Expand all
3000 __ bind(&loop); 3000 __ bind(&loop);
3001 CheckStack(); // TODO(1222600): ignore if body contains calls. 3001 CheckStack(); // TODO(1222600): ignore if body contains calls.
3002 Visit(node->body()); 3002 Visit(node->body());
3003 3003
3004 // next 3004 // next
3005 __ bind(node->continue_target()); 3005 __ bind(node->continue_target());
3006 if (node->next() != NULL) { 3006 if (node->next() != NULL) {
3007 // Record source position of the statement as this code which is after the 3007 // Record source position of the statement as this code which is after the
3008 // code for the body actually belongs to the loop statement and not the 3008 // code for the body actually belongs to the loop statement and not the
3009 // body. 3009 // body.
3010 if (FLAG_debug_info) __ RecordPosition(node->statement_pos()); 3010 RecordStatementPosition(node);
3011 __ RecordPosition(node->statement_pos());
3011 ASSERT(node->type() == LoopStatement::FOR_LOOP); 3012 ASSERT(node->type() == LoopStatement::FOR_LOOP);
3012 Visit(node->next()); 3013 Visit(node->next());
3013 } 3014 }
3014 3015
3015 // cond 3016 // cond
3016 __ bind(&entry); 3017 __ bind(&entry);
3017 switch (info) { 3018 switch (info) {
3018 case ALWAYS_TRUE: 3019 case ALWAYS_TRUE:
3019 __ jmp(&loop); 3020 __ jmp(&loop);
3020 break; 3021 break;
3021 case ALWAYS_FALSE: 3022 case ALWAYS_FALSE:
3022 break; 3023 break;
3023 case DONT_KNOW: 3024 case DONT_KNOW:
3024 LoadCondition(node->cond(), CodeGenState::LOAD, &loop, 3025 LoadCondition(node->cond(), CodeGenState::LOAD, &loop,
3025 node->break_target(), true); 3026 node->break_target(), true);
3026 Branch(true, &loop); 3027 Branch(true, &loop);
3027 break; 3028 break;
3028 } 3029 }
3029 3030
3030 // exit 3031 // exit
3031 __ bind(node->break_target()); 3032 __ bind(node->break_target());
3032 } 3033 }
3033 3034
3034 3035
3035 void Ia32CodeGenerator::VisitForInStatement(ForInStatement* node) { 3036 void Ia32CodeGenerator::VisitForInStatement(ForInStatement* node) {
3036 Comment cmnt(masm_, "[ ForInStatement"); 3037 Comment cmnt(masm_, "[ ForInStatement");
3037 if (FLAG_debug_info) RecordStatementPosition(node); 3038 RecordStatementPosition(node);
3038 3039
3039 // We keep stuff on the stack while the body is executing. 3040 // We keep stuff on the stack while the body is executing.
3040 // Record it, so that a break/continue crossing this statement 3041 // Record it, so that a break/continue crossing this statement
3041 // can restore the stack. 3042 // can restore the stack.
3042 const int kForInStackSize = 5 * kPointerSize; 3043 const int kForInStackSize = 5 * kPointerSize;
3043 break_stack_height_ += kForInStackSize; 3044 break_stack_height_ += kForInStackSize;
3044 node->set_break_stack_height(break_stack_height_); 3045 node->set_break_stack_height(break_stack_height_);
3045 3046
3046 Label loop, next, entry, cleanup, exit, primitive, jsobject; 3047 Label loop, next, entry, cleanup, exit, primitive, jsobject;
3047 Label end_del_check, fixed_array; 3048 Label end_del_check, fixed_array;
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
3439 __ push(eax); // undo pop from above 3440 __ push(eax); // undo pop from above
3440 __ CallRuntime(Runtime::kReThrow, 1); 3441 __ CallRuntime(Runtime::kReThrow, 1);
3441 3442
3442 // Done. 3443 // Done.
3443 __ bind(&exit); 3444 __ bind(&exit);
3444 } 3445 }
3445 3446
3446 3447
3447 void Ia32CodeGenerator::VisitDebuggerStatement(DebuggerStatement* node) { 3448 void Ia32CodeGenerator::VisitDebuggerStatement(DebuggerStatement* node) {
3448 Comment cmnt(masm_, "[ DebuggerStatement"); 3449 Comment cmnt(masm_, "[ DebuggerStatement");
3449 if (FLAG_debug_info) RecordStatementPosition(node); 3450 RecordStatementPosition(node);
3450 __ CallRuntime(Runtime::kDebugBreak, 1); 3451 __ CallRuntime(Runtime::kDebugBreak, 1);
3451 __ push(eax); 3452 __ push(eax);
3452 } 3453 }
3453 3454
3454 3455
3455 void Ia32CodeGenerator::InstantiateBoilerplate(Handle<JSFunction> boilerplate) { 3456 void Ia32CodeGenerator::InstantiateBoilerplate(Handle<JSFunction> boilerplate) {
3456 ASSERT(boilerplate->IsBoilerplate()); 3457 ASSERT(boilerplate->IsBoilerplate());
3457 3458
3458 // Push the boilerplate on the stack. 3459 // Push the boilerplate on the stack.
3459 __ push(Immediate(boilerplate)); 3460 __ push(Immediate(boilerplate));
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
3802 bool Ia32CodeGenerator::IsInlineSmi(Literal* literal) { 3803 bool Ia32CodeGenerator::IsInlineSmi(Literal* literal) {
3803 if (literal == NULL || !literal->handle()->IsSmi()) return false; 3804 if (literal == NULL || !literal->handle()->IsSmi()) return false;
3804 int int_value = Smi::cast(*literal->handle())->value(); 3805 int int_value = Smi::cast(*literal->handle())->value();
3805 return is_intn(int_value, kMaxSmiInlinedBits); 3806 return is_intn(int_value, kMaxSmiInlinedBits);
3806 } 3807 }
3807 3808
3808 3809
3809 void Ia32CodeGenerator::VisitAssignment(Assignment* node) { 3810 void Ia32CodeGenerator::VisitAssignment(Assignment* node) {
3810 Comment cmnt(masm_, "[ Assignment"); 3811 Comment cmnt(masm_, "[ Assignment");
3811 3812
3812 if (FLAG_debug_info) RecordStatementPosition(node); 3813 RecordStatementPosition(node);
3813 Reference target(this, node->target()); 3814 Reference target(this, node->target());
3814 if (target.is_illegal()) return; 3815 if (target.is_illegal()) return;
3815 3816
3816 if (node->op() == Token::ASSIGN || 3817 if (node->op() == Token::ASSIGN ||
3817 node->op() == Token::INIT_VAR || 3818 node->op() == Token::INIT_VAR ||
3818 node->op() == Token::INIT_CONST) { 3819 node->op() == Token::INIT_CONST) {
3819 Load(node->value()); 3820 Load(node->value());
3820 3821
3821 } else { 3822 } else {
3822 GetValue(&target); 3823 GetValue(&target);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
3870 GetValue(&property); 3871 GetValue(&property);
3871 } 3872 }
3872 } 3873 }
3873 3874
3874 3875
3875 void Ia32CodeGenerator::VisitCall(Call* node) { 3876 void Ia32CodeGenerator::VisitCall(Call* node) {
3876 Comment cmnt(masm_, "[ Call"); 3877 Comment cmnt(masm_, "[ Call");
3877 3878
3878 ZoneList<Expression*>* args = node->arguments(); 3879 ZoneList<Expression*>* args = node->arguments();
3879 3880
3880 if (FLAG_debug_info) RecordStatementPosition(node); 3881 RecordStatementPosition(node);
3881 3882
3882 // Check if the function is a variable or a property. 3883 // Check if the function is a variable or a property.
3883 Expression* function = node->expression(); 3884 Expression* function = node->expression();
3884 Variable* var = function->AsVariableProxy()->AsVariable(); 3885 Variable* var = function->AsVariableProxy()->AsVariable();
3885 Property* property = function->AsProperty(); 3886 Property* property = function->AsProperty();
3886 3887
3887 // ------------------------------------------------------------------------ 3888 // ------------------------------------------------------------------------
3888 // Fast-case: Use inline caching. 3889 // Fast-case: Use inline caching.
3889 // --- 3890 // ---
3890 // According to ECMA-262, section 11.2.3, page 44, the function to call 3891 // According to ECMA-262, section 11.2.3, page 44, the function to call
(...skipping 1508 matching lines...) Expand 10 before | Expand all | Expand 10 after
5399 bool is_eval) { 5400 bool is_eval) {
5400 Handle<Code> code = Ia32CodeGenerator::MakeCode(fun, script, is_eval); 5401 Handle<Code> code = Ia32CodeGenerator::MakeCode(fun, script, is_eval);
5401 if (!code.is_null()) { 5402 if (!code.is_null()) {
5402 Counters::total_compiled_code_size.Increment(code->instruction_size()); 5403 Counters::total_compiled_code_size.Increment(code->instruction_size());
5403 } 5404 }
5404 return code; 5405 return code;
5405 } 5406 }
5406 5407
5407 5408
5408 } } // namespace v8::internal 5409 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/codegen.cc ('k') | src/debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698