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

Side by Side Diff: src/arm/code-stubs-arm.cc

Issue 14109010: ARM: Enable VFP default NaN mode (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address review comments Created 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/arm/constants-arm.h » ('j') | src/arm/simulator-arm.cc » ('J')
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 3479 matching lines...) Expand 10 before | Expand all | Expand 10 after
3490 // already at '+ 8' from the current instruction but return is after three 3490 // already at '+ 8' from the current instruction but return is after three
3491 // instructions so add another 4 to pc to get the return address. 3491 // instructions so add another 4 to pc to get the return address.
3492 { 3492 {
3493 // Prevent literal pool emission before return address. 3493 // Prevent literal pool emission before return address.
3494 Assembler::BlockConstPoolScope block_const_pool(masm); 3494 Assembler::BlockConstPoolScope block_const_pool(masm);
3495 masm->add(lr, pc, Operand(4)); 3495 masm->add(lr, pc, Operand(4));
3496 __ str(lr, MemOperand(sp, 0)); 3496 __ str(lr, MemOperand(sp, 0));
3497 masm->Jump(r5); 3497 masm->Jump(r5);
3498 } 3498 }
3499 3499
3500 __ VFPEnsureFPSCRState(r2);
3501
3500 if (always_allocate) { 3502 if (always_allocate) {
3501 // It's okay to clobber r2 and r3 here. Don't mess with r0 and r1 3503 // It's okay to clobber r2 and r3 here. Don't mess with r0 and r1
3502 // though (contain the result). 3504 // though (contain the result).
3503 __ mov(r2, Operand(scope_depth)); 3505 __ mov(r2, Operand(scope_depth));
3504 __ ldr(r3, MemOperand(r2)); 3506 __ ldr(r3, MemOperand(r2));
3505 __ sub(r3, r3, Operand(1)); 3507 __ sub(r3, r3, Operand(1));
3506 __ str(r3, MemOperand(r2)); 3508 __ str(r3, MemOperand(r2));
3507 } 3509 }
3508 3510
3509 // check for failure result 3511 // check for failure result
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
3651 3653
3652 // Called from C, so do not pop argc and args on exit (preserve sp) 3654 // Called from C, so do not pop argc and args on exit (preserve sp)
3653 // No need to save register-passed args 3655 // No need to save register-passed args
3654 // Save callee-saved registers (incl. cp and fp), sp, and lr 3656 // Save callee-saved registers (incl. cp and fp), sp, and lr
3655 __ stm(db_w, sp, kCalleeSaved | lr.bit()); 3657 __ stm(db_w, sp, kCalleeSaved | lr.bit());
3656 3658
3657 // Save callee-saved vfp registers. 3659 // Save callee-saved vfp registers.
3658 __ vstm(db_w, sp, kFirstCalleeSavedDoubleReg, kLastCalleeSavedDoubleReg); 3660 __ vstm(db_w, sp, kFirstCalleeSavedDoubleReg, kLastCalleeSavedDoubleReg);
3659 // Set up the reserved register for 0.0. 3661 // Set up the reserved register for 0.0.
3660 __ vmov(kDoubleRegZero, 0.0); 3662 __ vmov(kDoubleRegZero, 0.0);
3663 __ VFPEnsureFPSCRState(r4);
3661 3664
3662 // Get address of argv, see stm above. 3665 // Get address of argv, see stm above.
3663 // r0: code entry 3666 // r0: code entry
3664 // r1: function 3667 // r1: function
3665 // r2: receiver 3668 // r2: receiver
3666 // r3: argc 3669 // r3: argc
3667 3670
3668 // Set up argv in r4. 3671 // Set up argv in r4.
3669 int offset_to_argv = (kNumCalleeSaved + 1) * kPointerSize; 3672 int offset_to_argv = (kNumCalleeSaved + 1) * kPointerSize;
3670 offset_to_argv += kNumDoubleCalleeSaved * kDoubleSize; 3673 offset_to_argv += kNumDoubleCalleeSaved * kDoubleSize;
(...skipping 3161 matching lines...) Expand 10 before | Expand all | Expand 10 after
6832 6835
6833 // Push return address (accessible to GC through exit frame pc). 6836 // Push return address (accessible to GC through exit frame pc).
6834 // Note that using pc with str is deprecated. 6837 // Note that using pc with str is deprecated.
6835 Label start; 6838 Label start;
6836 __ bind(&start); 6839 __ bind(&start);
6837 __ add(ip, pc, Operand(Assembler::kInstrSize)); 6840 __ add(ip, pc, Operand(Assembler::kInstrSize));
6838 __ str(ip, MemOperand(sp, 0)); 6841 __ str(ip, MemOperand(sp, 0));
6839 __ Jump(target); // Call the C++ function. 6842 __ Jump(target); // Call the C++ function.
6840 ASSERT_EQ(Assembler::kInstrSize + Assembler::kPcLoadDelta, 6843 ASSERT_EQ(Assembler::kInstrSize + Assembler::kPcLoadDelta,
6841 masm->SizeOfCodeGeneratedSince(&start)); 6844 masm->SizeOfCodeGeneratedSince(&start));
6845 __ VFPEnsureFPSCRState(r2);
6842 } 6846 }
6843 6847
6844 6848
6845 void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm, 6849 void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
6846 Label* miss, 6850 Label* miss,
6847 Label* done, 6851 Label* done,
6848 Register receiver, 6852 Register receiver,
6849 Register properties, 6853 Register properties,
6850 Handle<Name> name, 6854 Handle<Name> name,
6851 Register scratch0) { 6855 Register scratch0) {
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
7432 __ ldr(r5, FieldMemOperand(r1, JSObject::kElementsOffset)); 7436 __ ldr(r5, FieldMemOperand(r1, JSObject::kElementsOffset));
7433 __ add(r6, r5, Operand(r3, LSL, kPointerSizeLog2 - kSmiTagSize)); 7437 __ add(r6, r5, Operand(r3, LSL, kPointerSizeLog2 - kSmiTagSize));
7434 __ str(r0, FieldMemOperand(r6, FixedArray::kHeaderSize)); 7438 __ str(r0, FieldMemOperand(r6, FixedArray::kHeaderSize));
7435 __ Ret(); 7439 __ Ret();
7436 7440
7437 // Array literal has ElementsKind of FAST_DOUBLE_ELEMENTS. 7441 // Array literal has ElementsKind of FAST_DOUBLE_ELEMENTS.
7438 __ bind(&double_elements); 7442 __ bind(&double_elements);
7439 __ ldr(r5, FieldMemOperand(r1, JSObject::kElementsOffset)); 7443 __ ldr(r5, FieldMemOperand(r1, JSObject::kElementsOffset));
7440 __ StoreNumberToDoubleElements(r0, r3, 7444 __ StoreNumberToDoubleElements(r0, r3,
7441 // Overwrites all regs after this. 7445 // Overwrites all regs after this.
7442 r5, r6, r7, r9, r2, 7446 r5, r9, r6, r7, r2,
7443 &slow_elements); 7447 &slow_elements);
7444 __ Ret(); 7448 __ Ret();
7445 } 7449 }
7446 7450
7447 7451
7448 void StubFailureTrampolineStub::Generate(MacroAssembler* masm) { 7452 void StubFailureTrampolineStub::Generate(MacroAssembler* masm) {
7449 CEntryStub ces(1, fp_registers_ ? kSaveFPRegs : kDontSaveFPRegs); 7453 CEntryStub ces(1, fp_registers_ ? kSaveFPRegs : kDontSaveFPRegs);
7450 __ Call(ces.GetCode(masm->isolate()), RelocInfo::CODE_TARGET); 7454 __ Call(ces.GetCode(masm->isolate()), RelocInfo::CODE_TARGET);
7451 int parameter_count_offset = 7455 int parameter_count_offset =
7452 StubFailureTrampolineFrame::kCallerStackParameterCountFrameOffset; 7456 StubFailureTrampolineFrame::kCallerStackParameterCountFrameOffset;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
7518 7522
7519 __ Pop(lr, r5, r1); 7523 __ Pop(lr, r5, r1);
7520 __ Ret(); 7524 __ Ret();
7521 } 7525 }
7522 7526
7523 #undef __ 7527 #undef __
7524 7528
7525 } } // namespace v8::internal 7529 } } // namespace v8::internal
7526 7530
7527 #endif // V8_TARGET_ARCH_ARM 7531 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm/constants-arm.h » ('j') | src/arm/simulator-arm.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698