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

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

Issue 1216823003: MIPS64: Fix hidden bug in relocations for j and jal. Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase. Created 5 years, 5 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 | « no previous file | src/mips64/assembler-mips64.h » ('j') | src/mips64/assembler-mips64.cc » ('J')
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 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 if (instr == 0) { 658 if (instr == 0) {
659 return kEndOfChain; 659 return kEndOfChain;
660 } else { 660 } else {
661 int32_t imm18 =((instr & static_cast<int32_t>(kImm16Mask)) << 16) >> 14; 661 int32_t imm18 =((instr & static_cast<int32_t>(kImm16Mask)) << 16) >> 14;
662 return (imm18 + pos); 662 return (imm18 + pos);
663 } 663 }
664 } 664 }
665 // Check we have a branch or jump instruction. 665 // Check we have a branch or jump instruction.
666 DCHECK(IsBranch(instr) || IsLui(instr)); 666 DCHECK(IsBranch(instr) || IsLui(instr));
667 // Do NOT change this to <<2. We rely on arithmetic shifts here, assuming 667 // Do NOT change this to <<2. We rely on arithmetic shifts here, assuming
668 // the compiler uses arithmectic shifts for signed integers. 668 // the compiler uses arithmetic shifts for signed integers.
669 if (IsBranch(instr)) { 669 if (IsBranch(instr)) {
670 int32_t imm18 = ((instr & static_cast<int32_t>(kImm16Mask)) << 16) >> 14; 670 int32_t imm18 = ((instr & static_cast<int32_t>(kImm16Mask)) << 16) >> 14;
671 671
672 if (imm18 == kEndOfChain) { 672 if (imm18 == kEndOfChain) {
673 // EndOfChain sentinel is returned directly, not relative to pc or pos. 673 // EndOfChain sentinel is returned directly, not relative to pc or pos.
674 return kEndOfChain; 674 return kEndOfChain;
675 } else { 675 } else {
676 return pos + kBranchPCOffset + imm18; 676 return pos + kBranchPCOffset + imm18;
677 } 677 }
678 } else if (IsLui(instr)) { 678 } else if (IsLui(instr)) {
(...skipping 2415 matching lines...) Expand 10 before | Expand all | Expand 10 after
3094 if (patched) { 3094 if (patched) {
3095 CpuFeatures::FlushICache(pc + 2, sizeof(Address)); 3095 CpuFeatures::FlushICache(pc + 2, sizeof(Address));
3096 } 3096 }
3097 } 3097 }
3098 3098
3099 3099
3100 } // namespace internal 3100 } // namespace internal
3101 } // namespace v8 3101 } // namespace v8
3102 3102
3103 #endif // V8_TARGET_ARCH_MIPS 3103 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « no previous file | src/mips64/assembler-mips64.h » ('j') | src/mips64/assembler-mips64.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698