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

Side by Side Diff: runtime/vm/intrinsifier_x64.cc

Issue 562333004: Recognize Bigint setters and getters. This code will be removed when/if we change the fields to be … (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 3 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64.
6 #if defined(TARGET_ARCH_X64) 6 #if defined(TARGET_ARCH_X64)
7 7
8 #include "vm/intrinsifier.h" 8 #include "vm/intrinsifier.h"
9 9
10 #include "vm/assembler.h" 10 #include "vm/assembler.h"
(...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 __ andq(RAX, Immediate(~kSmiTagMask)); // Remove inverted smi-tag. 790 __ andq(RAX, Immediate(~kSmiTagMask)); // Remove inverted smi-tag.
791 __ ret(); 791 __ ret();
792 } 792 }
793 793
794 794
795 void Intrinsifier::Smi_bitLength(Assembler* assembler) { 795 void Intrinsifier::Smi_bitLength(Assembler* assembler) {
796 // TODO(sra): Implement using bsrq. 796 // TODO(sra): Implement using bsrq.
797 } 797 }
798 798
799 799
800 void Intrinsifier::Bigint_getNeg(Assembler* assembler) {
801 __ movq(RAX, Address(RSP, + 1 * kWordSize));
802 __ movq(RAX, FieldAddress(RAX, Bigint::neg_offset()));
803 __ ret();
804 }
805
806
807 void Intrinsifier::Bigint_setNeg(Assembler* assembler) { 800 void Intrinsifier::Bigint_setNeg(Assembler* assembler) {
808 __ movq(RAX, Address(RSP, + 1 * kWordSize)); 801 __ movq(RAX, Address(RSP, + 1 * kWordSize));
809 __ movq(RCX, Address(RSP, + 2 * kWordSize)); 802 __ movq(RCX, Address(RSP, + 2 * kWordSize));
810 __ StoreIntoObject(RCX, FieldAddress(RCX, Bigint::neg_offset()), RAX, false); 803 __ StoreIntoObject(RCX, FieldAddress(RCX, Bigint::neg_offset()), RAX, false);
811 __ ret(); 804 __ ret();
812 } 805 }
813 806
814 807
815 void Intrinsifier::Bigint_getUsed(Assembler* assembler) {
816 __ movq(RAX, Address(RSP, + 1 * kWordSize));
817 __ movq(RAX, FieldAddress(RAX, Bigint::used_offset()));
818 __ ret();
819 }
820
821
822 void Intrinsifier::Bigint_setUsed(Assembler* assembler) { 808 void Intrinsifier::Bigint_setUsed(Assembler* assembler) {
823 __ movq(RAX, Address(RSP, + 1 * kWordSize)); 809 __ movq(RAX, Address(RSP, + 1 * kWordSize));
824 __ movq(RCX, Address(RSP, + 2 * kWordSize)); 810 __ movq(RCX, Address(RSP, + 2 * kWordSize));
825 __ StoreIntoObject(RCX, FieldAddress(RCX, Bigint::used_offset()), RAX); 811 __ StoreIntoObject(RCX, FieldAddress(RCX, Bigint::used_offset()), RAX);
826 __ ret(); 812 __ ret();
827 } 813 }
828 814
829 815
830 void Intrinsifier::Bigint_getDigits(Assembler* assembler) {
831 __ movq(RAX, Address(RSP, + 1 * kWordSize));
832 __ movq(RAX, FieldAddress(RAX, Bigint::digits_offset()));
833 __ ret();
834 }
835
836
837 void Intrinsifier::Bigint_setDigits(Assembler* assembler) { 816 void Intrinsifier::Bigint_setDigits(Assembler* assembler) {
838 __ movq(RAX, Address(RSP, + 1 * kWordSize)); 817 __ movq(RAX, Address(RSP, + 1 * kWordSize));
839 __ movq(RCX, Address(RSP, + 2 * kWordSize)); 818 __ movq(RCX, Address(RSP, + 2 * kWordSize));
840 __ StoreIntoObject(RCX, 819 __ StoreIntoObject(RCX,
841 FieldAddress(RCX, Bigint::digits_offset()), RAX, false); 820 FieldAddress(RCX, Bigint::digits_offset()), RAX, false);
842 __ ret(); 821 __ ret();
843 } 822 }
844 823
845 824
846 // Check if the last argument is a double, jump to label 'is_smi' if smi 825 // Check if the last argument is a double, jump to label 'is_smi' if smi
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
1570 // Set return value to Isolate::current_tag_. 1549 // Set return value to Isolate::current_tag_.
1571 __ movq(RAX, Address(RBX, Isolate::current_tag_offset())); 1550 __ movq(RAX, Address(RBX, Isolate::current_tag_offset()));
1572 __ ret(); 1551 __ ret();
1573 } 1552 }
1574 1553
1575 #undef __ 1554 #undef __
1576 1555
1577 } // namespace dart 1556 } // namespace dart
1578 1557
1579 #endif // defined TARGET_ARCH_X64 1558 #endif // defined TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698