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 #ifndef V8_X87_MACRO_ASSEMBLER_X87_H_ | 5 #ifndef V8_X87_MACRO_ASSEMBLER_X87_H_ |
6 #define V8_X87_MACRO_ASSEMBLER_X87_H_ | 6 #define V8_X87_MACRO_ASSEMBLER_X87_H_ |
7 | 7 |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
10 #include "src/frames.h" | 10 #include "src/frames.h" |
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 void FastAllocate(Register object_size, Register result, Register result_end, | 595 void FastAllocate(Register object_size, Register result, Register result_end, |
596 AllocationFlags flags); | 596 AllocationFlags flags); |
597 | 597 |
598 // Allocate a heap number in new space with undefined value. The | 598 // Allocate a heap number in new space with undefined value. The |
599 // register scratch2 can be passed as no_reg; the others must be | 599 // register scratch2 can be passed as no_reg; the others must be |
600 // valid registers. Returns tagged pointer in result register, or | 600 // valid registers. Returns tagged pointer in result register, or |
601 // jumps to gc_required if new space is full. | 601 // jumps to gc_required if new space is full. |
602 void AllocateHeapNumber(Register result, Register scratch1, Register scratch2, | 602 void AllocateHeapNumber(Register result, Register scratch1, Register scratch2, |
603 Label* gc_required, MutableMode mode = IMMUTABLE); | 603 Label* gc_required, MutableMode mode = IMMUTABLE); |
604 | 604 |
605 // Allocate a sequential string. All the header fields of the string object | |
606 // are initialized. | |
607 void AllocateTwoByteString(Register result, Register length, | |
608 Register scratch1, Register scratch2, | |
609 Register scratch3, Label* gc_required); | |
610 void AllocateOneByteString(Register result, Register length, | |
611 Register scratch1, Register scratch2, | |
612 Register scratch3, Label* gc_required); | |
613 void AllocateOneByteString(Register result, int length, Register scratch1, | |
614 Register scratch2, Label* gc_required); | |
615 | |
616 // Allocate a raw cons string object. Only the map field of the result is | |
617 // initialized. | |
618 void AllocateTwoByteConsString(Register result, Register scratch1, | |
619 Register scratch2, Label* gc_required); | |
620 void AllocateOneByteConsString(Register result, Register scratch1, | |
621 Register scratch2, Label* gc_required); | |
622 | |
623 // Allocate a raw sliced string object. Only the map field of the result is | |
624 // initialized. | |
625 void AllocateTwoByteSlicedString(Register result, Register scratch1, | |
626 Register scratch2, Label* gc_required); | |
627 void AllocateOneByteSlicedString(Register result, Register scratch1, | |
628 Register scratch2, Label* gc_required); | |
629 | |
630 // Allocate and initialize a JSValue wrapper with the specified {constructor} | 605 // Allocate and initialize a JSValue wrapper with the specified {constructor} |
631 // and {value}. | 606 // and {value}. |
632 void AllocateJSValue(Register result, Register constructor, Register value, | 607 void AllocateJSValue(Register result, Register constructor, Register value, |
633 Register scratch, Label* gc_required); | 608 Register scratch, Label* gc_required); |
634 | 609 |
635 // Initialize fields with filler values. Fields starting at |current_address| | 610 // Initialize fields with filler values. Fields starting at |current_address| |
636 // not including |end_address| are overwritten with the value in |filler|. At | 611 // not including |end_address| are overwritten with the value in |filler|. At |
637 // the end the loop, |current_address| takes the value of |end_address|. | 612 // the end the loop, |current_address| takes the value of |end_address|. |
638 void InitializeFieldsWithFiller(Register current_address, | 613 void InitializeFieldsWithFiller(Register current_address, |
639 Register end_address, Register filler); | 614 Register end_address, Register filler); |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
834 // Verify restrictions about code generated in stubs. | 809 // Verify restrictions about code generated in stubs. |
835 void set_generating_stub(bool value) { generating_stub_ = value; } | 810 void set_generating_stub(bool value) { generating_stub_ = value; } |
836 bool generating_stub() { return generating_stub_; } | 811 bool generating_stub() { return generating_stub_; } |
837 void set_has_frame(bool value) { has_frame_ = value; } | 812 void set_has_frame(bool value) { has_frame_ = value; } |
838 bool has_frame() { return has_frame_; } | 813 bool has_frame() { return has_frame_; } |
839 inline bool AllowThisStubCall(CodeStub* stub); | 814 inline bool AllowThisStubCall(CodeStub* stub); |
840 | 815 |
841 // --------------------------------------------------------------------------- | 816 // --------------------------------------------------------------------------- |
842 // String utilities. | 817 // String utilities. |
843 | 818 |
844 // Check whether the instance type represents a flat one-byte string. Jump to | |
845 // the label if not. If the instance type can be scratched specify same | |
846 // register for both instance type and scratch. | |
847 void JumpIfInstanceTypeIsNotSequentialOneByte( | |
848 Register instance_type, Register scratch, | |
849 Label* on_not_flat_one_byte_string); | |
850 | |
851 // Checks if both objects are sequential one-byte strings, and jumps to label | 819 // Checks if both objects are sequential one-byte strings, and jumps to label |
852 // if either is not. | 820 // if either is not. |
853 void JumpIfNotBothSequentialOneByteStrings( | 821 void JumpIfNotBothSequentialOneByteStrings( |
854 Register object1, Register object2, Register scratch1, Register scratch2, | 822 Register object1, Register object2, Register scratch1, Register scratch2, |
855 Label* on_not_flat_one_byte_strings); | 823 Label* on_not_flat_one_byte_strings); |
856 | 824 |
857 // Checks if the given register or operand is a unique name | 825 // Checks if the given register or operand is a unique name |
858 void JumpIfNotUniqueNameInstanceType(Register reg, Label* not_unique_name, | 826 void JumpIfNotUniqueNameInstanceType(Register reg, Label* not_unique_name, |
859 Label::Distance distance = Label::kFar) { | 827 Label::Distance distance = Label::kFar) { |
860 JumpIfNotUniqueNameInstanceType(Operand(reg), not_unique_name, distance); | 828 JumpIfNotUniqueNameInstanceType(Operand(reg), not_unique_name, distance); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
991 inline Operand NativeContextOperand() { | 959 inline Operand NativeContextOperand() { |
992 return ContextOperand(esi, Context::NATIVE_CONTEXT_INDEX); | 960 return ContextOperand(esi, Context::NATIVE_CONTEXT_INDEX); |
993 } | 961 } |
994 | 962 |
995 #define ACCESS_MASM(masm) masm-> | 963 #define ACCESS_MASM(masm) masm-> |
996 | 964 |
997 } // namespace internal | 965 } // namespace internal |
998 } // namespace v8 | 966 } // namespace v8 |
999 | 967 |
1000 #endif // V8_X87_MACRO_ASSEMBLER_X87_H_ | 968 #endif // V8_X87_MACRO_ASSEMBLER_X87_H_ |
OLD | NEW |