OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 2847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2858 rmode == RelocInfo::INTERNAL_REFERENCE) { | 2858 rmode == RelocInfo::INTERNAL_REFERENCE) { |
2859 byte* p = reinterpret_cast<byte*>(it.rinfo()->pc()); | 2859 byte* p = reinterpret_cast<byte*>(it.rinfo()->pc()); |
2860 RelocateInternalReference(rmode, p, pc_delta); | 2860 RelocateInternalReference(rmode, p, pc_delta); |
2861 } | 2861 } |
2862 } | 2862 } |
2863 DCHECK(!overflow()); | 2863 DCHECK(!overflow()); |
2864 } | 2864 } |
2865 | 2865 |
2866 | 2866 |
2867 void Assembler::db(uint8_t data) { | 2867 void Assembler::db(uint8_t data) { |
2868 CheckBuffer(); | 2868 CheckForEmitInForbiddenSlot(); |
2869 *reinterpret_cast<uint8_t*>(pc_) = data; | 2869 EmitHelper(data); |
2870 pc_ += sizeof(uint8_t); | |
2871 } | 2870 } |
2872 | 2871 |
2873 | 2872 |
2874 void Assembler::dd(uint32_t data) { | 2873 void Assembler::dd(uint32_t data) { |
2875 CheckBuffer(); | 2874 CheckForEmitInForbiddenSlot(); |
2876 *reinterpret_cast<uint32_t*>(pc_) = data; | 2875 EmitHelper(data); |
2877 pc_ += sizeof(uint32_t); | |
2878 } | 2876 } |
2879 | 2877 |
2880 | 2878 |
2881 void Assembler::dq(uint64_t data) { | 2879 void Assembler::dq(uint64_t data) { |
2882 CheckBuffer(); | 2880 CheckForEmitInForbiddenSlot(); |
2883 *reinterpret_cast<uint64_t*>(pc_) = data; | 2881 EmitHelper(data); |
2884 pc_ += sizeof(uint64_t); | |
2885 } | 2882 } |
2886 | 2883 |
2887 | 2884 |
2888 void Assembler::dd(Label* label) { | 2885 void Assembler::dd(Label* label) { |
2889 CheckBuffer(); | |
2890 RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE); | |
2891 uint32_t data; | 2886 uint32_t data; |
| 2887 CheckForEmitInForbiddenSlot(); |
2892 if (label->is_bound()) { | 2888 if (label->is_bound()) { |
2893 data = reinterpret_cast<uint32_t>(buffer_ + label->pos()); | 2889 data = reinterpret_cast<uint32_t>(buffer_ + label->pos()); |
2894 } else { | 2890 } else { |
2895 data = jump_address(label); | 2891 data = jump_address(label); |
2896 internal_reference_positions_.insert(label->pos()); | 2892 internal_reference_positions_.insert(label->pos()); |
2897 } | 2893 } |
2898 *reinterpret_cast<uint32_t*>(pc_) = data; | 2894 RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE); |
2899 pc_ += sizeof(uint32_t); | 2895 EmitHelper(data); |
2900 } | 2896 } |
2901 | 2897 |
2902 | 2898 |
2903 void Assembler::emit_code_stub_address(Code* stub) { | |
2904 CheckBuffer(); | |
2905 *reinterpret_cast<uint32_t*>(pc_) = | |
2906 reinterpret_cast<uint32_t>(stub->instruction_start()); | |
2907 pc_ += sizeof(uint32_t); | |
2908 } | |
2909 | |
2910 | |
2911 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { | 2899 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { |
2912 // We do not try to reuse pool constants. | 2900 // We do not try to reuse pool constants. |
2913 RelocInfo rinfo(isolate(), pc_, rmode, data, NULL); | 2901 RelocInfo rinfo(isolate(), pc_, rmode, data, NULL); |
2914 if (rmode >= RelocInfo::COMMENT && | 2902 if (rmode >= RelocInfo::COMMENT && |
2915 rmode <= RelocInfo::DEBUG_BREAK_SLOT_AT_CALL) { | 2903 rmode <= RelocInfo::DEBUG_BREAK_SLOT_AT_CALL) { |
2916 // Adjust code for new modes. | 2904 // Adjust code for new modes. |
2917 DCHECK(RelocInfo::IsDebugBreakSlot(rmode) | 2905 DCHECK(RelocInfo::IsDebugBreakSlot(rmode) |
2918 || RelocInfo::IsComment(rmode) | 2906 || RelocInfo::IsComment(rmode) |
2919 || RelocInfo::IsPosition(rmode)); | 2907 || RelocInfo::IsPosition(rmode)); |
2920 // These modes do not need an entry in the constant pool. | 2908 // These modes do not need an entry in the constant pool. |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3063 | 3051 |
3064 if (icache_flush_mode != SKIP_ICACHE_FLUSH) { | 3052 if (icache_flush_mode != SKIP_ICACHE_FLUSH) { |
3065 Assembler::FlushICache(isolate, pc, 2 * sizeof(int32_t)); | 3053 Assembler::FlushICache(isolate, pc, 2 * sizeof(int32_t)); |
3066 } | 3054 } |
3067 } | 3055 } |
3068 | 3056 |
3069 } // namespace internal | 3057 } // namespace internal |
3070 } // namespace v8 | 3058 } // namespace v8 |
3071 | 3059 |
3072 #endif // V8_TARGET_ARCH_MIPS | 3060 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |