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

Side by Side Diff: src/arm/macro-assembler-arm.cc

Issue 6778018: Only pass isolate parameter to C helper functions that need it. (Closed)
Patch Set: Created 9 years, 8 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
« no previous file with comments | « src/arm/full-codegen-arm.cc ('k') | src/arm/regexp-macro-assembler-arm.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 1781 matching lines...) Expand 10 before | Expand all | Expand 10 after
1792 0, 1792 0,
1793 1); 1793 1);
1794 if (result->IsFailure()) { 1794 if (result->IsFailure()) {
1795 return result; 1795 return result;
1796 } 1796 }
1797 1797
1798 // HandleScope limit has changed. Delete allocated extensions. 1798 // HandleScope limit has changed. Delete allocated extensions.
1799 bind(&delete_allocated_handles); 1799 bind(&delete_allocated_handles);
1800 str(r5, MemOperand(r7, kLimitOffset)); 1800 str(r5, MemOperand(r7, kLimitOffset));
1801 mov(r4, r0); 1801 mov(r4, r0);
1802 PrepareCallCFunction(0, r5); 1802 PrepareCallCFunction(1, r5);
1803 mov(r0, Operand(ExternalReference::isolate_address()));
1803 CallCFunction( 1804 CallCFunction(
1804 ExternalReference::delete_handle_scope_extensions(isolate()), 0); 1805 ExternalReference::delete_handle_scope_extensions(isolate()), 1);
1805 mov(r0, r4); 1806 mov(r0, r4);
1806 jmp(&leave_exit_frame); 1807 jmp(&leave_exit_frame);
1807 1808
1808 return result; 1809 return result;
1809 } 1810 }
1810 1811
1811 1812
1812 void MacroAssembler::IllegalOperation(int num_arguments) { 1813 void MacroAssembler::IllegalOperation(int num_arguments) {
1813 if (num_arguments > 0) { 1814 if (num_arguments > 0) {
1814 add(sp, sp, Operand(num_arguments * kPointerSize)); 1815 add(sp, sp, Operand(num_arguments * kPointerSize));
(...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after
2790 and_(scratch, type, Operand(kFlatAsciiStringMask)); 2791 and_(scratch, type, Operand(kFlatAsciiStringMask));
2791 cmp(scratch, Operand(kFlatAsciiStringTag)); 2792 cmp(scratch, Operand(kFlatAsciiStringTag));
2792 b(ne, failure); 2793 b(ne, failure);
2793 } 2794 }
2794 2795
2795 static const int kRegisterPassedArguments = 4; 2796 static const int kRegisterPassedArguments = 4;
2796 2797
2797 void MacroAssembler::PrepareCallCFunction(int num_arguments, Register scratch) { 2798 void MacroAssembler::PrepareCallCFunction(int num_arguments, Register scratch) {
2798 int frame_alignment = ActivationFrameAlignment(); 2799 int frame_alignment = ActivationFrameAlignment();
2799 2800
2800 // Reserve space for Isolate address which is always passed as last parameter
2801 num_arguments += 1;
2802
2803 // Up to four simple arguments are passed in registers r0..r3. 2801 // Up to four simple arguments are passed in registers r0..r3.
2804 int stack_passed_arguments = (num_arguments <= kRegisterPassedArguments) ? 2802 int stack_passed_arguments = (num_arguments <= kRegisterPassedArguments) ?
2805 0 : num_arguments - kRegisterPassedArguments; 2803 0 : num_arguments - kRegisterPassedArguments;
2806 if (frame_alignment > kPointerSize) { 2804 if (frame_alignment > kPointerSize) {
2807 // Make stack end at alignment and make room for num_arguments - 4 words 2805 // Make stack end at alignment and make room for num_arguments - 4 words
2808 // and the original value of sp. 2806 // and the original value of sp.
2809 mov(scratch, sp); 2807 mov(scratch, sp);
2810 sub(sp, sp, Operand((stack_passed_arguments + 1) * kPointerSize)); 2808 sub(sp, sp, Operand((stack_passed_arguments + 1) * kPointerSize));
2811 ASSERT(IsPowerOf2(frame_alignment)); 2809 ASSERT(IsPowerOf2(frame_alignment));
2812 and_(sp, sp, Operand(-frame_alignment)); 2810 and_(sp, sp, Operand(-frame_alignment));
(...skipping 16 matching lines...) Expand all
2829 ExternalReference::the_hole_value_location(isolate()), 2827 ExternalReference::the_hole_value_location(isolate()),
2830 scratch, 2828 scratch,
2831 num_arguments); 2829 num_arguments);
2832 } 2830 }
2833 2831
2834 2832
2835 void MacroAssembler::CallCFunctionHelper(Register function, 2833 void MacroAssembler::CallCFunctionHelper(Register function,
2836 ExternalReference function_reference, 2834 ExternalReference function_reference,
2837 Register scratch, 2835 Register scratch,
2838 int num_arguments) { 2836 int num_arguments) {
2839 // Push Isolate address as the last argument.
2840 if (num_arguments < kRegisterPassedArguments) {
2841 Register arg_to_reg[] = {r0, r1, r2, r3};
2842 Register r = arg_to_reg[num_arguments];
2843 mov(r, Operand(ExternalReference::isolate_address()));
2844 } else {
2845 int stack_passed_arguments = num_arguments - kRegisterPassedArguments;
2846 // Push Isolate address on the stack after the arguments.
2847 mov(scratch, Operand(ExternalReference::isolate_address()));
2848 str(scratch, MemOperand(sp, stack_passed_arguments * kPointerSize));
2849 }
2850 num_arguments += 1;
2851
2852 // Make sure that the stack is aligned before calling a C function unless 2837 // Make sure that the stack is aligned before calling a C function unless
2853 // running in the simulator. The simulator has its own alignment check which 2838 // running in the simulator. The simulator has its own alignment check which
2854 // provides more information. 2839 // provides more information.
2855 #if defined(V8_HOST_ARCH_ARM) 2840 #if defined(V8_HOST_ARCH_ARM)
2856 if (emit_debug_code()) { 2841 if (emit_debug_code()) {
2857 int frame_alignment = OS::ActivationFrameAlignment(); 2842 int frame_alignment = OS::ActivationFrameAlignment();
2858 int frame_alignment_mask = frame_alignment - 1; 2843 int frame_alignment_mask = frame_alignment - 1;
2859 if (frame_alignment > kPointerSize) { 2844 if (frame_alignment > kPointerSize) {
2860 ASSERT(IsPowerOf2(frame_alignment)); 2845 ASSERT(IsPowerOf2(frame_alignment));
2861 Label alignment_as_expected; 2846 Label alignment_as_expected;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
2942 void CodePatcher::EmitCondition(Condition cond) { 2927 void CodePatcher::EmitCondition(Condition cond) {
2943 Instr instr = Assembler::instr_at(masm_.pc_); 2928 Instr instr = Assembler::instr_at(masm_.pc_);
2944 instr = (instr & ~kCondMask) | cond; 2929 instr = (instr & ~kCondMask) | cond;
2945 masm_.emit(instr); 2930 masm_.emit(instr);
2946 } 2931 }
2947 2932
2948 2933
2949 } } // namespace v8::internal 2934 } } // namespace v8::internal
2950 2935
2951 #endif // V8_TARGET_ARCH_ARM 2936 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/full-codegen-arm.cc ('k') | src/arm/regexp-macro-assembler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698