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

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

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
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 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 DCHECK((o & 3) == 0); // Assert the offset is aligned. 474 DCHECK((o & 3) == 0); // Assert the offset is aligned.
475 return o >> 2; 475 return o >> 2;
476 } 476 }
477 int32_t shifted_branch_offset_compact(Label* L, 477 int32_t shifted_branch_offset_compact(Label* L,
478 bool jump_elimination_allowed) { 478 bool jump_elimination_allowed) {
479 int32_t o = branch_offset_compact(L, jump_elimination_allowed); 479 int32_t o = branch_offset_compact(L, jump_elimination_allowed);
480 DCHECK((o & 3) == 0); // Assert the offset is aligned. 480 DCHECK((o & 3) == 0); // Assert the offset is aligned.
481 return o >> 2; 481 return o >> 2;
482 } 482 }
483 uint64_t jump_address(Label* L); 483 uint64_t jump_address(Label* L);
484 uint64_t jump_offset(Label* L);
484 485
485 // Puts a labels target address at the given position. 486 // Puts a labels target address at the given position.
486 // The high 8 bits are set to zero. 487 // The high 8 bits are set to zero.
487 void label_at_put(Label* L, int at_offset); 488 void label_at_put(Label* L, int at_offset);
488 489
489 // Read/Modify the code target address in the branch/call instruction at pc. 490 // Read/Modify the code target address in the branch/call instruction at pc.
490 static Address target_address_at(Address pc); 491 static Address target_address_at(Address pc);
491 static void set_target_address_at(Address pc, 492 static void set_target_address_at(Address pc,
492 Address target, 493 Address target,
493 ICacheFlushMode icache_flush_mode = 494 ICacheFlushMode icache_flush_mode =
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 void bnvc(Register rs, Register rt, Label* L) { 727 void bnvc(Register rs, Register rt, Label* L) {
727 bnvc(rs, rt, branch_offset_compact(L, false)>>2); 728 bnvc(rs, rt, branch_offset_compact(L, false)>>2);
728 } 729 }
729 730
730 // Never use the int16_t b(l)cond version with a branch offset 731 // Never use the int16_t b(l)cond version with a branch offset
731 // instead of using the Label* version. 732 // instead of using the Label* version.
732 733
733 // Jump targets must be in the current 256 MB-aligned region. i.e. 28 bits. 734 // Jump targets must be in the current 256 MB-aligned region. i.e. 28 bits.
734 void j(int64_t target); 735 void j(int64_t target);
735 void jal(int64_t target); 736 void jal(int64_t target);
737 void j(Label* target);
738 void jal(Label* target);
736 void jalr(Register rs, Register rd = ra); 739 void jalr(Register rs, Register rd = ra);
737 void jr(Register target); 740 void jr(Register target);
738 void jic(Register rt, int16_t offset); 741 void jic(Register rt, int16_t offset);
739 void jialc(Register rt, int16_t offset); 742 void jialc(Register rt, int16_t offset);
740 743
741 744
742 // -------Data-processing-instructions--------- 745 // -------Data-processing-instructions---------
743 746
744 // Arithmetic. 747 // Arithmetic.
745 void addu(Register rd, Register rs, Register rt); 748 void addu(Register rd, Register rs, Register rt);
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 class EnsureSpace BASE_EMBEDDED { 1492 class EnsureSpace BASE_EMBEDDED {
1490 public: 1493 public:
1491 explicit EnsureSpace(Assembler* assembler) { 1494 explicit EnsureSpace(Assembler* assembler) {
1492 assembler->CheckBuffer(); 1495 assembler->CheckBuffer();
1493 } 1496 }
1494 }; 1497 };
1495 1498
1496 } } // namespace v8::internal 1499 } } // namespace v8::internal
1497 1500
1498 #endif // V8_ARM_ASSEMBLER_MIPS_H_ 1501 #endif // V8_ARM_ASSEMBLER_MIPS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698