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

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

Issue 22914034: Delete dead FloatingPointHelper functions (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 4 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 | « src/ia32/code-stubs-ia32.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 public: 553 public:
554 enum ConvertUndefined { 554 enum ConvertUndefined {
555 CONVERT_UNDEFINED_TO_ZERO, 555 CONVERT_UNDEFINED_TO_ZERO,
556 BAILOUT_ON_UNDEFINED 556 BAILOUT_ON_UNDEFINED
557 }; 557 };
558 // Load the operands from rdx and rax into xmm0 and xmm1, as doubles. 558 // Load the operands from rdx and rax into xmm0 and xmm1, as doubles.
559 // If the operands are not both numbers, jump to not_numbers. 559 // If the operands are not both numbers, jump to not_numbers.
560 // Leaves rdx and rax unchanged. SmiOperands assumes both are smis. 560 // Leaves rdx and rax unchanged. SmiOperands assumes both are smis.
561 // NumberOperands assumes both are smis or heap numbers. 561 // NumberOperands assumes both are smis or heap numbers.
562 static void LoadSSE2SmiOperands(MacroAssembler* masm); 562 static void LoadSSE2SmiOperands(MacroAssembler* masm);
563 static void LoadSSE2NumberOperands(MacroAssembler* masm);
564 static void LoadSSE2UnknownOperands(MacroAssembler* masm, 563 static void LoadSSE2UnknownOperands(MacroAssembler* masm,
565 Label* not_numbers); 564 Label* not_numbers);
566 565
567 // Takes the operands in rdx and rax and loads them as integers in rax 566 // Takes the operands in rdx and rax and loads them as integers in rax
568 // and rcx. 567 // and rcx.
569 static void LoadAsIntegers(MacroAssembler* masm, 568 static void LoadAsIntegers(MacroAssembler* masm,
570 Label* operand_conversion_failure, 569 Label* operand_conversion_failure,
571 Register heap_number_map); 570 Register heap_number_map);
572 // As above, but we know the operands to be numbers. In that case,
573 // conversion can't fail.
574 static void LoadNumbersAsIntegers(MacroAssembler* masm);
575 571
576 // Tries to convert two values to smis losslessly. 572 // Tries to convert two values to smis losslessly.
577 // This fails if either argument is not a Smi nor a HeapNumber, 573 // This fails if either argument is not a Smi nor a HeapNumber,
578 // or if it's a HeapNumber with a value that can't be converted 574 // or if it's a HeapNumber with a value that can't be converted
579 // losslessly to a Smi. In that case, control transitions to the 575 // losslessly to a Smi. In that case, control transitions to the
580 // on_not_smis label. 576 // on_not_smis label.
581 // On success, either control goes to the on_success label (if one is 577 // On success, either control goes to the on_success label (if one is
582 // provided), or it falls through at the end of the code (if on_success 578 // provided), or it falls through at the end of the code (if on_success
583 // is NULL). 579 // is NULL).
584 // On success, both first and second holds Smi tagged values. 580 // On success, both first and second holds Smi tagged values.
(...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 ASSERT(type == TranscendentalCache::LOG); 1537 ASSERT(type == TranscendentalCache::LOG);
1542 __ fldln2(); 1538 __ fldln2();
1543 __ fxch(); 1539 __ fxch();
1544 __ fyl2x(); 1540 __ fyl2x();
1545 } 1541 }
1546 } 1542 }
1547 1543
1548 1544
1549 // Input: rdx, rax are the left and right objects of a bit op. 1545 // Input: rdx, rax are the left and right objects of a bit op.
1550 // Output: rax, rcx are left and right integers for a bit op. 1546 // Output: rax, rcx are left and right integers for a bit op.
1551 void FloatingPointHelper::LoadNumbersAsIntegers(MacroAssembler* masm) {
1552 // Check float operands.
1553 Label done;
1554 Label rax_is_smi;
1555 Label rax_is_object;
1556 Label rdx_is_object;
1557
1558 __ JumpIfNotSmi(rdx, &rdx_is_object);
1559 __ SmiToInteger32(rdx, rdx);
1560 __ JumpIfSmi(rax, &rax_is_smi);
1561
1562 __ bind(&rax_is_object);
1563 DoubleToIStub stub1(rax, rcx, HeapNumber::kValueOffset - kHeapObjectTag,
1564 true);
1565 __ call(stub1.GetCode(masm->isolate()), RelocInfo::CODE_TARGET);
1566
1567 __ jmp(&done);
1568
1569 __ bind(&rdx_is_object);
1570 DoubleToIStub stub2(rdx, rdx, HeapNumber::kValueOffset - kHeapObjectTag,
1571 true);
1572 __ call(stub1.GetCode(masm->isolate()), RelocInfo::CODE_TARGET);
Jakob Kummerow 2013/08/23 08:31:48 This was actually a bug: should have read "stub2".
1573 __ JumpIfNotSmi(rax, &rax_is_object);
1574
1575 __ bind(&rax_is_smi);
1576 __ SmiToInteger32(rcx, rax);
1577
1578 __ bind(&done);
1579 __ movl(rax, rdx);
1580 }
1581
1582
1583 // Input: rdx, rax are the left and right objects of a bit op.
1584 // Output: rax, rcx are left and right integers for a bit op.
1585 // Jump to conversion_failure: rdx and rax are unchanged. 1547 // Jump to conversion_failure: rdx and rax are unchanged.
1586 void FloatingPointHelper::LoadAsIntegers(MacroAssembler* masm, 1548 void FloatingPointHelper::LoadAsIntegers(MacroAssembler* masm,
1587 Label* conversion_failure, 1549 Label* conversion_failure,
1588 Register heap_number_map) { 1550 Register heap_number_map) {
1589 // Check float operands. 1551 // Check float operands.
1590 Label arg1_is_object, check_undefined_arg1; 1552 Label arg1_is_object, check_undefined_arg1;
1591 Label arg2_is_object, check_undefined_arg2; 1553 Label arg2_is_object, check_undefined_arg2;
1592 Label load_arg2, done; 1554 Label load_arg2, done;
1593 1555
1594 __ JumpIfNotSmi(rdx, &arg1_is_object); 1556 __ JumpIfNotSmi(rdx, &arg1_is_object);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1638 1600
1639 1601
1640 void FloatingPointHelper::LoadSSE2SmiOperands(MacroAssembler* masm) { 1602 void FloatingPointHelper::LoadSSE2SmiOperands(MacroAssembler* masm) {
1641 __ SmiToInteger32(kScratchRegister, rdx); 1603 __ SmiToInteger32(kScratchRegister, rdx);
1642 __ cvtlsi2sd(xmm0, kScratchRegister); 1604 __ cvtlsi2sd(xmm0, kScratchRegister);
1643 __ SmiToInteger32(kScratchRegister, rax); 1605 __ SmiToInteger32(kScratchRegister, rax);
1644 __ cvtlsi2sd(xmm1, kScratchRegister); 1606 __ cvtlsi2sd(xmm1, kScratchRegister);
1645 } 1607 }
1646 1608
1647 1609
1648 void FloatingPointHelper::LoadSSE2NumberOperands(MacroAssembler* masm) {
1649 Label load_smi_rdx, load_nonsmi_rax, load_smi_rax, done;
1650 // Load operand in rdx into xmm0.
1651 __ JumpIfSmi(rdx, &load_smi_rdx);
1652 __ movsd(xmm0, FieldOperand(rdx, HeapNumber::kValueOffset));
1653 // Load operand in rax into xmm1.
1654 __ JumpIfSmi(rax, &load_smi_rax);
1655 __ bind(&load_nonsmi_rax);
1656 __ movsd(xmm1, FieldOperand(rax, HeapNumber::kValueOffset));
1657 __ jmp(&done);
1658
1659 __ bind(&load_smi_rdx);
1660 __ SmiToInteger32(kScratchRegister, rdx);
1661 __ cvtlsi2sd(xmm0, kScratchRegister);
1662 __ JumpIfNotSmi(rax, &load_nonsmi_rax);
1663
1664 __ bind(&load_smi_rax);
1665 __ SmiToInteger32(kScratchRegister, rax);
1666 __ cvtlsi2sd(xmm1, kScratchRegister);
1667
1668 __ bind(&done);
1669 }
1670
1671
1672 void FloatingPointHelper::LoadSSE2UnknownOperands(MacroAssembler* masm, 1610 void FloatingPointHelper::LoadSSE2UnknownOperands(MacroAssembler* masm,
1673 Label* not_numbers) { 1611 Label* not_numbers) {
1674 Label load_smi_rdx, load_nonsmi_rax, load_smi_rax, load_float_rax, done; 1612 Label load_smi_rdx, load_nonsmi_rax, load_smi_rax, load_float_rax, done;
1675 // Load operand in rdx into xmm0, or branch to not_numbers. 1613 // Load operand in rdx into xmm0, or branch to not_numbers.
1676 __ LoadRoot(rcx, Heap::kHeapNumberMapRootIndex); 1614 __ LoadRoot(rcx, Heap::kHeapNumberMapRootIndex);
1677 __ JumpIfSmi(rdx, &load_smi_rdx); 1615 __ JumpIfSmi(rdx, &load_smi_rdx);
1678 __ cmpq(FieldOperand(rdx, HeapObject::kMapOffset), rcx); 1616 __ cmpq(FieldOperand(rdx, HeapObject::kMapOffset), rcx);
1679 __ j(not_equal, not_numbers); // Argument in rdx is not a number. 1617 __ j(not_equal, not_numbers); // Argument in rdx is not a number.
1680 __ movsd(xmm0, FieldOperand(rdx, HeapNumber::kValueOffset)); 1618 __ movsd(xmm0, FieldOperand(rdx, HeapNumber::kValueOffset));
1681 // Load operand in rax into xmm1, or branch to not_numbers. 1619 // Load operand in rax into xmm1, or branch to not_numbers.
(...skipping 5118 matching lines...) Expand 10 before | Expand all | Expand 10 after
6800 __ bind(&fast_elements_case); 6738 __ bind(&fast_elements_case);
6801 GenerateCase(masm, FAST_ELEMENTS); 6739 GenerateCase(masm, FAST_ELEMENTS);
6802 } 6740 }
6803 6741
6804 6742
6805 #undef __ 6743 #undef __
6806 6744
6807 } } // namespace v8::internal 6745 } } // namespace v8::internal
6808 6746
6809 #endif // V8_TARGET_ARCH_X64 6747 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/ia32/code-stubs-ia32.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698