OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 | 147 |
148 #ifdef DEBUG | 148 #ifdef DEBUG |
149 if (strlen(FLAG_stop_at) > 0 && | 149 if (strlen(FLAG_stop_at) > 0 && |
150 info->function()->name()->IsEqualTo(CStrVector(FLAG_stop_at))) { | 150 info->function()->name()->IsEqualTo(CStrVector(FLAG_stop_at))) { |
151 frame_->SpillAll(); | 151 frame_->SpillAll(); |
152 __ int3(); | 152 __ int3(); |
153 } | 153 } |
154 #endif | 154 #endif |
155 | 155 |
156 // New scope to get automatic timing calculation. | 156 // New scope to get automatic timing calculation. |
157 { // NOLINT | 157 { HistogramTimerScope codegen_timer(&Counters::code_generation); |
158 HistogramTimerScope codegen_timer(&Counters::code_generation); | |
159 CodeGenState state(this); | 158 CodeGenState state(this); |
160 | 159 |
161 // Entry: | 160 // Entry: |
162 // Stack: receiver, arguments, return address. | 161 // Stack: receiver, arguments, return address. |
163 // ebp: caller's frame pointer | 162 // ebp: caller's frame pointer |
164 // esp: stack pointer | 163 // esp: stack pointer |
165 // edi: called JS function | 164 // edi: called JS function |
166 // esi: callee's context | 165 // esi: callee's context |
167 allocator_->Initialize(); | 166 allocator_->Initialize(); |
168 | 167 |
(...skipping 9634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9803 __ mov(eax, | 9802 __ mov(eax, |
9804 Immediate(ExternalReference::transcendental_cache_array_address())); | 9803 Immediate(ExternalReference::transcendental_cache_array_address())); |
9805 // Eax points to cache array. | 9804 // Eax points to cache array. |
9806 __ mov(eax, Operand(eax, type_ * sizeof(TranscendentalCache::caches_[0]))); | 9805 __ mov(eax, Operand(eax, type_ * sizeof(TranscendentalCache::caches_[0]))); |
9807 // Eax points to the cache for the type type_. | 9806 // Eax points to the cache for the type type_. |
9808 // If NULL, the cache hasn't been initialized yet, so go through runtime. | 9807 // If NULL, the cache hasn't been initialized yet, so go through runtime. |
9809 __ test(eax, Operand(eax)); | 9808 __ test(eax, Operand(eax)); |
9810 __ j(zero, &runtime_call_clear_stack); | 9809 __ j(zero, &runtime_call_clear_stack); |
9811 #ifdef DEBUG | 9810 #ifdef DEBUG |
9812 // Check that the layout of cache elements match expectations. | 9811 // Check that the layout of cache elements match expectations. |
9813 { // NOLINT - doesn't like a single brace on a line. | 9812 { TranscendentalCache::Element test_elem[2]; |
9814 TranscendentalCache::Element test_elem[2]; | |
9815 char* elem_start = reinterpret_cast<char*>(&test_elem[0]); | 9813 char* elem_start = reinterpret_cast<char*>(&test_elem[0]); |
9816 char* elem2_start = reinterpret_cast<char*>(&test_elem[1]); | 9814 char* elem2_start = reinterpret_cast<char*>(&test_elem[1]); |
9817 char* elem_in0 = reinterpret_cast<char*>(&(test_elem[0].in[0])); | 9815 char* elem_in0 = reinterpret_cast<char*>(&(test_elem[0].in[0])); |
9818 char* elem_in1 = reinterpret_cast<char*>(&(test_elem[0].in[1])); | 9816 char* elem_in1 = reinterpret_cast<char*>(&(test_elem[0].in[1])); |
9819 char* elem_out = reinterpret_cast<char*>(&(test_elem[0].output)); | 9817 char* elem_out = reinterpret_cast<char*>(&(test_elem[0].output)); |
9820 CHECK_EQ(12, elem2_start - elem_start); // Two uint_32's and a pointer. | 9818 CHECK_EQ(12, elem2_start - elem_start); // Two uint_32's and a pointer. |
9821 CHECK_EQ(0, elem_in0 - elem_start); | 9819 CHECK_EQ(0, elem_in0 - elem_start); |
9822 CHECK_EQ(kIntSize, elem_in1 - elem_start); | 9820 CHECK_EQ(kIntSize, elem_in1 - elem_start); |
9823 CHECK_EQ(2 * kIntSize, elem_out - elem_start); | 9821 CHECK_EQ(2 * kIntSize, elem_out - elem_start); |
9824 } | 9822 } |
(...skipping 3091 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12916 | 12914 |
12917 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) | 12915 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) |
12918 // tagged as a small integer. | 12916 // tagged as a small integer. |
12919 __ bind(&runtime); | 12917 __ bind(&runtime); |
12920 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); | 12918 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); |
12921 } | 12919 } |
12922 | 12920 |
12923 #undef __ | 12921 #undef __ |
12924 | 12922 |
12925 } } // namespace v8::internal | 12923 } } // namespace v8::internal |
OLD | NEW |