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

Side by Side Diff: src/mips64/assembler-mips64.cc

Issue 1573953002: MIPS: Fix dd() implementations for compact branches. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Use Align(). Created 4 years, 11 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
« no previous file with comments | « src/mips64/assembler-mips64.h ('k') | src/mips64/assembler-mips64-inl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 3157 matching lines...) Expand 10 before | Expand all | Expand 10 after
3168 if (rmode == RelocInfo::INTERNAL_REFERENCE) { 3168 if (rmode == RelocInfo::INTERNAL_REFERENCE) {
3169 byte* p = reinterpret_cast<byte*>(it.rinfo()->pc()); 3169 byte* p = reinterpret_cast<byte*>(it.rinfo()->pc());
3170 RelocateInternalReference(rmode, p, pc_delta); 3170 RelocateInternalReference(rmode, p, pc_delta);
3171 } 3171 }
3172 } 3172 }
3173 DCHECK(!overflow()); 3173 DCHECK(!overflow());
3174 } 3174 }
3175 3175
3176 3176
3177 void Assembler::db(uint8_t data) { 3177 void Assembler::db(uint8_t data) {
3178 CheckBuffer(); 3178 CheckForEmitInForbiddenSlot();
3179 *reinterpret_cast<uint8_t*>(pc_) = data; 3179 EmitHelper(data);
3180 pc_ += sizeof(uint8_t);
3181 } 3180 }
3182 3181
3183 3182
3184 void Assembler::dd(uint32_t data) { 3183 void Assembler::dd(uint32_t data) {
3185 CheckBuffer(); 3184 CheckForEmitInForbiddenSlot();
3186 *reinterpret_cast<uint32_t*>(pc_) = data; 3185 EmitHelper(data);
3187 pc_ += sizeof(uint32_t);
3188 } 3186 }
3189 3187
3190 3188
3191 void Assembler::dq(uint64_t data) { 3189 void Assembler::dq(uint64_t data) {
3192 CheckBuffer(); 3190 CheckForEmitInForbiddenSlot();
3193 *reinterpret_cast<uint64_t*>(pc_) = data; 3191 EmitHelper(data);
3194 pc_ += sizeof(uint64_t);
3195 } 3192 }
3196 3193
3197 3194
3198 void Assembler::dd(Label* label) { 3195 void Assembler::dd(Label* label) {
3199 CheckBuffer();
3200 RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE);
3201 uint64_t data; 3196 uint64_t data;
3197 CheckForEmitInForbiddenSlot();
3202 if (label->is_bound()) { 3198 if (label->is_bound()) {
3203 data = reinterpret_cast<uint64_t>(buffer_ + label->pos()); 3199 data = reinterpret_cast<uint64_t>(buffer_ + label->pos());
3204 } else { 3200 } else {
3205 data = jump_address(label); 3201 data = jump_address(label);
3206 internal_reference_positions_.insert(label->pos()); 3202 internal_reference_positions_.insert(label->pos());
3207 } 3203 }
3208 *reinterpret_cast<uint64_t*>(pc_) = data; 3204 RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE);
3209 pc_ += sizeof(uint64_t); 3205 EmitHelper(data);
3210 } 3206 }
3211 3207
3212 3208
3213 void Assembler::emit_code_stub_address(Code* stub) {
3214 CheckBuffer();
3215 *reinterpret_cast<uint64_t*>(pc_) =
3216 reinterpret_cast<uint64_t>(stub->instruction_start());
3217 pc_ += sizeof(uint64_t);
3218 }
3219
3220
3221 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { 3209 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) {
3222 // We do not try to reuse pool constants. 3210 // We do not try to reuse pool constants.
3223 RelocInfo rinfo(isolate(), pc_, rmode, data, NULL); 3211 RelocInfo rinfo(isolate(), pc_, rmode, data, NULL);
3224 if (rmode >= RelocInfo::COMMENT && 3212 if (rmode >= RelocInfo::COMMENT &&
3225 rmode <= RelocInfo::DEBUG_BREAK_SLOT_AT_CALL) { 3213 rmode <= RelocInfo::DEBUG_BREAK_SLOT_AT_CALL) {
3226 // Adjust code for new modes. 3214 // Adjust code for new modes.
3227 DCHECK(RelocInfo::IsDebugBreakSlot(rmode) 3215 DCHECK(RelocInfo::IsDebugBreakSlot(rmode)
3228 || RelocInfo::IsComment(rmode) 3216 || RelocInfo::IsComment(rmode)
3229 || RelocInfo::IsPosition(rmode)); 3217 || RelocInfo::IsPosition(rmode));
3230 // These modes do not need an entry in the constant pool. 3218 // These modes do not need an entry in the constant pool.
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
3396 if (icache_flush_mode != SKIP_ICACHE_FLUSH) { 3384 if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
3397 Assembler::FlushICache(isolate, pc, 4 * Assembler::kInstrSize); 3385 Assembler::FlushICache(isolate, pc, 4 * Assembler::kInstrSize);
3398 } 3386 }
3399 } 3387 }
3400 3388
3401 3389
3402 } // namespace internal 3390 } // namespace internal
3403 } // namespace v8 3391 } // namespace v8
3404 3392
3405 #endif // V8_TARGET_ARCH_MIPS64 3393 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips64/assembler-mips64.h ('k') | src/mips64/assembler-mips64-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698