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

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

Issue 2072963003: Simplify AssemblerPositionsRecorder. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 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 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 #include "src/x64/assembler-x64.h" 5 #include "src/x64/assembler-x64.h"
6 6
7 #include <cstring> 7 #include <cstring>
8 8
9 #if V8_TARGET_ARCH_X64 9 #if V8_TARGET_ARCH_X64
10 10
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 void Assembler::bsfq(Register dst, const Operand& src) { 859 void Assembler::bsfq(Register dst, const Operand& src) {
860 EnsureSpace ensure_space(this); 860 EnsureSpace ensure_space(this);
861 emit_rex_64(dst, src); 861 emit_rex_64(dst, src);
862 emit(0x0F); 862 emit(0x0F);
863 emit(0xBC); 863 emit(0xBC);
864 emit_operand(dst, src); 864 emit_operand(dst, src);
865 } 865 }
866 866
867 867
868 void Assembler::call(Label* L) { 868 void Assembler::call(Label* L) {
869 positions_recorder()->WriteRecordedPositions();
870 EnsureSpace ensure_space(this); 869 EnsureSpace ensure_space(this);
871 // 1110 1000 #32-bit disp. 870 // 1110 1000 #32-bit disp.
872 emit(0xE8); 871 emit(0xE8);
873 if (L->is_bound()) { 872 if (L->is_bound()) {
874 int offset = L->pos() - pc_offset() - sizeof(int32_t); 873 int offset = L->pos() - pc_offset() - sizeof(int32_t);
875 DCHECK(offset <= 0); 874 DCHECK(offset <= 0);
876 emitl(offset); 875 emitl(offset);
877 } else if (L->is_linked()) { 876 } else if (L->is_linked()) {
878 emitl(L->pos()); 877 emitl(L->pos());
879 L->link_to(pc_offset() - sizeof(int32_t)); 878 L->link_to(pc_offset() - sizeof(int32_t));
880 } else { 879 } else {
881 DCHECK(L->is_unused()); 880 DCHECK(L->is_unused());
882 int32_t current = pc_offset(); 881 int32_t current = pc_offset();
883 emitl(current); 882 emitl(current);
884 L->link_to(current); 883 L->link_to(current);
885 } 884 }
886 } 885 }
887 886
888 887
889 void Assembler::call(Address entry, RelocInfo::Mode rmode) { 888 void Assembler::call(Address entry, RelocInfo::Mode rmode) {
890 DCHECK(RelocInfo::IsRuntimeEntry(rmode)); 889 DCHECK(RelocInfo::IsRuntimeEntry(rmode));
891 positions_recorder()->WriteRecordedPositions();
892 EnsureSpace ensure_space(this); 890 EnsureSpace ensure_space(this);
893 // 1110 1000 #32-bit disp. 891 // 1110 1000 #32-bit disp.
894 emit(0xE8); 892 emit(0xE8);
895 emit_runtime_entry(entry, rmode); 893 emit_runtime_entry(entry, rmode);
896 } 894 }
897 895
898 896
899 void Assembler::call(Handle<Code> target, 897 void Assembler::call(Handle<Code> target,
900 RelocInfo::Mode rmode, 898 RelocInfo::Mode rmode,
901 TypeFeedbackId ast_id) { 899 TypeFeedbackId ast_id) {
902 positions_recorder()->WriteRecordedPositions();
903 EnsureSpace ensure_space(this); 900 EnsureSpace ensure_space(this);
904 // 1110 1000 #32-bit disp. 901 // 1110 1000 #32-bit disp.
905 emit(0xE8); 902 emit(0xE8);
906 emit_code_target(target, rmode, ast_id); 903 emit_code_target(target, rmode, ast_id);
907 } 904 }
908 905
909 906
910 void Assembler::call(Register adr) { 907 void Assembler::call(Register adr) {
911 positions_recorder()->WriteRecordedPositions();
912 EnsureSpace ensure_space(this); 908 EnsureSpace ensure_space(this);
913 // Opcode: FF /2 r64. 909 // Opcode: FF /2 r64.
914 emit_optional_rex_32(adr); 910 emit_optional_rex_32(adr);
915 emit(0xFF); 911 emit(0xFF);
916 emit_modrm(0x2, adr); 912 emit_modrm(0x2, adr);
917 } 913 }
918 914
919 915
920 void Assembler::call(const Operand& op) { 916 void Assembler::call(const Operand& op) {
921 positions_recorder()->WriteRecordedPositions();
922 EnsureSpace ensure_space(this); 917 EnsureSpace ensure_space(this);
923 // Opcode: FF /2 m64. 918 // Opcode: FF /2 m64.
924 emit_optional_rex_32(op); 919 emit_optional_rex_32(op);
925 emit(0xFF); 920 emit(0xFF);
926 emit_operand(0x2, op); 921 emit_operand(0x2, op);
927 } 922 }
928 923
929 924
930 // Calls directly to the given address using a relative offset. 925 // Calls directly to the given address using a relative offset.
931 // Should only ever be used in Code objects for calls within the 926 // Should only ever be used in Code objects for calls within the
932 // same Code object. Should not be used when generating new code (use labels), 927 // same Code object. Should not be used when generating new code (use labels),
933 // but only when patching existing code. 928 // but only when patching existing code.
934 void Assembler::call(Address target) { 929 void Assembler::call(Address target) {
935 positions_recorder()->WriteRecordedPositions();
936 EnsureSpace ensure_space(this); 930 EnsureSpace ensure_space(this);
937 // 1110 1000 #32-bit disp. 931 // 1110 1000 #32-bit disp.
938 emit(0xE8); 932 emit(0xE8);
939 Address source = pc_ + 4; 933 Address source = pc_ + 4;
940 intptr_t displacement = target - source; 934 intptr_t displacement = target - source;
941 DCHECK(is_int32(displacement)); 935 DCHECK(is_int32(displacement));
942 emitl(static_cast<int32_t>(displacement)); 936 emitl(static_cast<int32_t>(displacement));
943 } 937 }
944 938
945 939
(...skipping 3660 matching lines...) Expand 10 before | Expand all | Expand 10 after
4606 4600
4607 bool RelocInfo::IsInConstantPool() { 4601 bool RelocInfo::IsInConstantPool() {
4608 return false; 4602 return false;
4609 } 4603 }
4610 4604
4611 4605
4612 } // namespace internal 4606 } // namespace internal
4613 } // namespace v8 4607 } // namespace v8
4614 4608
4615 #endif // V8_TARGET_ARCH_X64 4609 #endif // V8_TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698