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

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

Issue 27197013: Tweak Math.log on ia32/x64 (Closed) Base URL: git://github.com/v8/v8.git@master
Patch Set: addressed comments Created 7 years, 2 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/ia32/codegen-ia32.cc ('k') | src/ia32/full-codegen-ia32.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 const int kNumberOfRegisters = Register::kNumRegisters; 243 const int kNumberOfRegisters = Register::kNumRegisters;
244 244
245 const int kDoubleRegsSize = kDoubleSize * 245 const int kDoubleRegsSize = kDoubleSize *
246 XMMRegister::kNumAllocatableRegisters; 246 XMMRegister::kNumAllocatableRegisters;
247 __ sub(esp, Immediate(kDoubleRegsSize)); 247 __ sub(esp, Immediate(kDoubleRegsSize));
248 if (CpuFeatures::IsSupported(SSE2)) { 248 if (CpuFeatures::IsSupported(SSE2)) {
249 CpuFeatureScope scope(masm(), SSE2); 249 CpuFeatureScope scope(masm(), SSE2);
250 for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; ++i) { 250 for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; ++i) {
251 XMMRegister xmm_reg = XMMRegister::FromAllocationIndex(i); 251 XMMRegister xmm_reg = XMMRegister::FromAllocationIndex(i);
252 int offset = i * kDoubleSize; 252 int offset = i * kDoubleSize;
253 __ movdbl(Operand(esp, offset), xmm_reg); 253 __ movsd(Operand(esp, offset), xmm_reg);
254 } 254 }
255 } 255 }
256 256
257 __ pushad(); 257 __ pushad();
258 258
259 const int kSavedRegistersAreaSize = kNumberOfRegisters * kPointerSize + 259 const int kSavedRegistersAreaSize = kNumberOfRegisters * kPointerSize +
260 kDoubleRegsSize; 260 kDoubleRegsSize;
261 261
262 // Get the bailout id from the stack. 262 // Get the bailout id from the stack.
263 __ mov(ebx, Operand(esp, kSavedRegistersAreaSize)); 263 __ mov(ebx, Operand(esp, kSavedRegistersAreaSize));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 __ pop(Operand(ebx, offset)); 295 __ pop(Operand(ebx, offset));
296 } 296 }
297 297
298 int double_regs_offset = FrameDescription::double_registers_offset(); 298 int double_regs_offset = FrameDescription::double_registers_offset();
299 if (CpuFeatures::IsSupported(SSE2)) { 299 if (CpuFeatures::IsSupported(SSE2)) {
300 CpuFeatureScope scope(masm(), SSE2); 300 CpuFeatureScope scope(masm(), SSE2);
301 // Fill in the double input registers. 301 // Fill in the double input registers.
302 for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; ++i) { 302 for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; ++i) {
303 int dst_offset = i * kDoubleSize + double_regs_offset; 303 int dst_offset = i * kDoubleSize + double_regs_offset;
304 int src_offset = i * kDoubleSize; 304 int src_offset = i * kDoubleSize;
305 __ movdbl(xmm0, Operand(esp, src_offset)); 305 __ movsd(xmm0, Operand(esp, src_offset));
306 __ movdbl(Operand(ebx, dst_offset), xmm0); 306 __ movsd(Operand(ebx, dst_offset), xmm0);
307 } 307 }
308 } 308 }
309 309
310 // Clear FPU all exceptions. 310 // Clear FPU all exceptions.
311 // TODO(ulan): Find out why the TOP register is not zero here in some cases, 311 // TODO(ulan): Find out why the TOP register is not zero here in some cases,
312 // and check that the generated code never deoptimizes with unbalanced stack. 312 // and check that the generated code never deoptimizes with unbalanced stack.
313 __ fnclex(); 313 __ fnclex();
314 314
315 // Remove the bailout id, return address and the double registers. 315 // Remove the bailout id, return address and the double registers.
316 __ add(esp, Immediate(kDoubleRegsSize + 2 * kPointerSize)); 316 __ add(esp, Immediate(kDoubleRegsSize + 2 * kPointerSize));
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 __ bind(&outer_loop_header); 381 __ bind(&outer_loop_header);
382 __ cmp(eax, edx); 382 __ cmp(eax, edx);
383 __ j(below, &outer_push_loop); 383 __ j(below, &outer_push_loop);
384 384
385 // In case of a failed STUB, we have to restore the XMM registers. 385 // In case of a failed STUB, we have to restore the XMM registers.
386 if (CpuFeatures::IsSupported(SSE2)) { 386 if (CpuFeatures::IsSupported(SSE2)) {
387 CpuFeatureScope scope(masm(), SSE2); 387 CpuFeatureScope scope(masm(), SSE2);
388 for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; ++i) { 388 for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; ++i) {
389 XMMRegister xmm_reg = XMMRegister::FromAllocationIndex(i); 389 XMMRegister xmm_reg = XMMRegister::FromAllocationIndex(i);
390 int src_offset = i * kDoubleSize + double_regs_offset; 390 int src_offset = i * kDoubleSize + double_regs_offset;
391 __ movdbl(xmm_reg, Operand(ebx, src_offset)); 391 __ movsd(xmm_reg, Operand(ebx, src_offset));
392 } 392 }
393 } 393 }
394 394
395 // Push state, pc, and continuation from the last output frame. 395 // Push state, pc, and continuation from the last output frame.
396 __ push(Operand(ebx, FrameDescription::state_offset())); 396 __ push(Operand(ebx, FrameDescription::state_offset()));
397 __ push(Operand(ebx, FrameDescription::pc_offset())); 397 __ push(Operand(ebx, FrameDescription::pc_offset()));
398 __ push(Operand(ebx, FrameDescription::continuation_offset())); 398 __ push(Operand(ebx, FrameDescription::continuation_offset()));
399 399
400 400
401 // Push the registers from the last output frame. 401 // Push the registers from the last output frame.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 SetFrameSlot(offset, value); 435 SetFrameSlot(offset, value);
436 } 436 }
437 437
438 438
439 #undef __ 439 #undef __
440 440
441 441
442 } } // namespace v8::internal 442 } } // namespace v8::internal
443 443
444 #endif // V8_TARGET_ARCH_IA32 444 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/codegen-ia32.cc ('k') | src/ia32/full-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698