| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "v8.h" | 5 #include "v8.h" | 
| 6 | 6 | 
| 7 #if V8_TARGET_ARCH_IA32 | 7 #if V8_TARGET_ARCH_IA32 | 
| 8 | 8 | 
| 9 #include "bootstrapper.h" | 9 #include "bootstrapper.h" | 
| 10 #include "codegen.h" | 10 #include "codegen.h" | 
| (...skipping 2161 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2172   ASSERT(argc >= 1 && generating_stub()); | 2172   ASSERT(argc >= 1 && generating_stub()); | 
| 2173   ret((argc - 1) * kPointerSize); | 2173   ret((argc - 1) * kPointerSize); | 
| 2174 } | 2174 } | 
| 2175 | 2175 | 
| 2176 | 2176 | 
| 2177 bool MacroAssembler::AllowThisStubCall(CodeStub* stub) { | 2177 bool MacroAssembler::AllowThisStubCall(CodeStub* stub) { | 
| 2178   return has_frame_ || !stub->SometimesSetsUpAFrame(); | 2178   return has_frame_ || !stub->SometimesSetsUpAFrame(); | 
| 2179 } | 2179 } | 
| 2180 | 2180 | 
| 2181 | 2181 | 
| 2182 void MacroAssembler::IllegalOperation(int num_arguments) { |  | 
| 2183   if (num_arguments > 0) { |  | 
| 2184     add(esp, Immediate(num_arguments * kPointerSize)); |  | 
| 2185   } |  | 
| 2186   mov(eax, Immediate(isolate()->factory()->undefined_value())); |  | 
| 2187 } |  | 
| 2188 |  | 
| 2189 |  | 
| 2190 void MacroAssembler::IndexFromHash(Register hash, Register index) { | 2182 void MacroAssembler::IndexFromHash(Register hash, Register index) { | 
| 2191   // The assert checks that the constants for the maximum number of digits | 2183   // The assert checks that the constants for the maximum number of digits | 
| 2192   // for an array index cached in the hash field and the number of bits | 2184   // for an array index cached in the hash field and the number of bits | 
| 2193   // reserved for it does not conflict. | 2185   // reserved for it does not conflict. | 
| 2194   ASSERT(TenToThe(String::kMaxCachedArrayIndexLength) < | 2186   ASSERT(TenToThe(String::kMaxCachedArrayIndexLength) < | 
| 2195          (1 << String::kArrayIndexValueBits)); | 2187          (1 << String::kArrayIndexValueBits)); | 
| 2196   // We want the smi-tagged index in key.  kArrayIndexValueMask has zeros in | 2188   // We want the smi-tagged index in key.  kArrayIndexValueMask has zeros in | 
| 2197   // the low kHashShift bits. | 2189   // the low kHashShift bits. | 
| 2198   and_(hash, String::kArrayIndexValueMask); | 2190   and_(hash, String::kArrayIndexValueMask); | 
| 2199   STATIC_ASSERT(String::kHashShift >= kSmiTagSize && kSmiTag == 0); | 2191   STATIC_ASSERT(String::kHashShift >= kSmiTagSize && kSmiTag == 0); | 
| 2200   if (String::kHashShift > kSmiTagSize) { | 2192   if (String::kHashShift > kSmiTagSize) { | 
| 2201     shr(hash, String::kHashShift - kSmiTagSize); | 2193     shr(hash, String::kHashShift - kSmiTagSize); | 
| 2202   } | 2194   } | 
| 2203   if (!index.is(hash)) { | 2195   if (!index.is(hash)) { | 
| 2204     mov(index, hash); | 2196     mov(index, hash); | 
| 2205   } | 2197   } | 
| 2206 } | 2198 } | 
| 2207 | 2199 | 
| 2208 | 2200 | 
| 2209 void MacroAssembler::CallRuntime(const Runtime::Function* f, | 2201 void MacroAssembler::CallRuntime(const Runtime::Function* f, | 
| 2210                                  int num_arguments, | 2202                                  int num_arguments, | 
| 2211                                  SaveFPRegsMode save_doubles) { | 2203                                  SaveFPRegsMode save_doubles) { | 
| 2212   // If the expected number of arguments of the runtime function is | 2204   // If the expected number of arguments of the runtime function is | 
| 2213   // constant, we check that the actual number of arguments match the | 2205   // constant, we check that the actual number of arguments match the | 
| 2214   // expectation. | 2206   // expectation. | 
| 2215   if (f->nargs >= 0 && f->nargs != num_arguments) { | 2207   CHECK(f->nargs < 0 || f->nargs == num_arguments); | 
| 2216     IllegalOperation(num_arguments); |  | 
| 2217     return; |  | 
| 2218   } |  | 
| 2219 | 2208 | 
| 2220   // TODO(1236192): Most runtime routines don't need the number of | 2209   // TODO(1236192): Most runtime routines don't need the number of | 
| 2221   // arguments passed in because it is constant. At some point we | 2210   // arguments passed in because it is constant. At some point we | 
| 2222   // should remove this need and make the runtime routine entry code | 2211   // should remove this need and make the runtime routine entry code | 
| 2223   // smarter. | 2212   // smarter. | 
| 2224   Move(eax, Immediate(num_arguments)); | 2213   Move(eax, Immediate(num_arguments)); | 
| 2225   mov(ebx, Immediate(ExternalReference(f, isolate()))); | 2214   mov(ebx, Immediate(ExternalReference(f, isolate()))); | 
| 2226   CEntryStub ces(isolate(), | 2215   CEntryStub ces(isolate(), | 
| 2227                  1, | 2216                  1, | 
| 2228                  CpuFeatures::IsSupported(SSE2) ? save_doubles | 2217                  CpuFeatures::IsSupported(SSE2) ? save_doubles | 
| (...skipping 1394 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3623   if (ms.shift() > 0) sar(edx, ms.shift()); | 3612   if (ms.shift() > 0) sar(edx, ms.shift()); | 
| 3624   mov(eax, dividend); | 3613   mov(eax, dividend); | 
| 3625   shr(eax, 31); | 3614   shr(eax, 31); | 
| 3626   add(edx, eax); | 3615   add(edx, eax); | 
| 3627 } | 3616 } | 
| 3628 | 3617 | 
| 3629 | 3618 | 
| 3630 } }  // namespace v8::internal | 3619 } }  // namespace v8::internal | 
| 3631 | 3620 | 
| 3632 #endif  // V8_TARGET_ARCH_IA32 | 3621 #endif  // V8_TARGET_ARCH_IA32 | 
| OLD | NEW | 
|---|