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

Side by Side Diff: runtime/vm/stub_code_ia32.cc

Issue 140743010: Get rid of dynamic call debug stub (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 11 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" 5 #include "vm/globals.h"
6 #if defined(TARGET_ARCH_IA32) 6 #if defined(TARGET_ARCH_IA32)
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/compiler.h" 9 #include "vm/compiler.h"
10 #include "vm/dart_entry.h" 10 #include "vm/dart_entry.h"
(...skipping 1843 matching lines...) Expand 10 before | Expand all | Expand 10 after
1854 __ pushl(raw_null); // Room for result. 1854 __ pushl(raw_null); // Room for result.
1855 __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); 1855 __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0);
1856 __ popl(EAX); // Address of original stub. 1856 __ popl(EAX); // Address of original stub.
1857 __ popl(EDX); // Restore arguments. 1857 __ popl(EDX); // Restore arguments.
1858 __ popl(ECX); 1858 __ popl(ECX);
1859 __ LeaveFrame(); 1859 __ LeaveFrame();
1860 __ jmp(EAX); // Jump to original stub. 1860 __ jmp(EAX); // Jump to original stub.
1861 } 1861 }
1862 1862
1863 1863
1864 // ECX: Inline cache data array.
1865 // TOS(0): return address (Dart code).
1866 void StubCode::GenerateBreakpointDynamicStub(Assembler* assembler) {
1867 // Create a stub frame as we are pushing some objects on the stack before
1868 // calling into the runtime.
1869 __ EnterStubFrame();
1870 __ pushl(ECX);
1871 __ CallRuntime(kBreakpointDynamicHandlerRuntimeEntry, 0);
1872 __ popl(ECX);
1873 __ LeaveFrame();
1874
1875 // Find out which dispatch stub to call.
1876 Label test_two, test_three, test_four;
1877 __ movl(EBX, FieldAddress(ECX, ICData::num_args_tested_offset()));
1878 __ cmpl(EBX, Immediate(1));
1879 __ j(NOT_EQUAL, &test_two, Assembler::kNearJump);
1880 __ jmp(&StubCode::OneArgCheckInlineCacheLabel());
1881 __ Bind(&test_two);
1882 __ cmpl(EBX, Immediate(2));
1883 __ j(NOT_EQUAL, &test_three, Assembler::kNearJump);
1884 __ jmp(&StubCode::TwoArgsCheckInlineCacheLabel());
1885 __ Bind(&test_three);
1886 __ cmpl(EBX, Immediate(3));
1887 __ j(NOT_EQUAL, &test_four, Assembler::kNearJump);
1888 __ jmp(&StubCode::ThreeArgsCheckInlineCacheLabel());
1889 __ Bind(&test_four);
1890 __ Stop("Unsupported number of arguments tested.");
1891 }
1892
1893
1894 // Called only from unoptimized code. 1864 // Called only from unoptimized code.
1895 void StubCode::GenerateDebugStepCheckStub(Assembler* assembler) { 1865 void StubCode::GenerateDebugStepCheckStub(Assembler* assembler) {
1896 // Check single stepping. 1866 // Check single stepping.
1897 Label not_stepping; 1867 Label not_stepping;
1898 __ movl(EAX, FieldAddress(CTX, Context::isolate_offset())); 1868 __ movl(EAX, FieldAddress(CTX, Context::isolate_offset()));
1899 __ movzxb(EAX, Address(EAX, Isolate::single_step_offset())); 1869 __ movzxb(EAX, Address(EAX, Isolate::single_step_offset()));
1900 __ cmpl(EAX, Immediate(0)); 1870 __ cmpl(EAX, Immediate(0));
1901 __ j(EQUAL, &not_stepping, Assembler::kNearJump); 1871 __ j(EQUAL, &not_stepping, Assembler::kNearJump);
1902 1872
1903 __ EnterStubFrame(); 1873 __ EnterStubFrame();
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
2180 const Register temp = ECX; 2150 const Register temp = ECX;
2181 __ movl(left, Address(ESP, 2 * kWordSize)); 2151 __ movl(left, Address(ESP, 2 * kWordSize));
2182 __ movl(right, Address(ESP, 1 * kWordSize)); 2152 __ movl(right, Address(ESP, 1 * kWordSize));
2183 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp); 2153 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp);
2184 __ ret(); 2154 __ ret();
2185 } 2155 }
2186 2156
2187 } // namespace dart 2157 } // namespace dart
2188 2158
2189 #endif // defined TARGET_ARCH_IA32 2159 #endif // defined TARGET_ARCH_IA32
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698