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

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

Issue 430503007: Rename ASSERT* to DCHECK*. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: REBASE and fixes Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « src/x87/assembler-x87.h ('k') | src/x87/assembler-x87-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 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are 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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 58
59 59
60 void CpuFeatures::PrintTarget() { } 60 void CpuFeatures::PrintTarget() { }
61 void CpuFeatures::PrintFeatures() { } 61 void CpuFeatures::PrintFeatures() { }
62 62
63 63
64 // ----------------------------------------------------------------------------- 64 // -----------------------------------------------------------------------------
65 // Implementation of Displacement 65 // Implementation of Displacement
66 66
67 void Displacement::init(Label* L, Type type) { 67 void Displacement::init(Label* L, Type type) {
68 ASSERT(!L->is_bound()); 68 DCHECK(!L->is_bound());
69 int next = 0; 69 int next = 0;
70 if (L->is_linked()) { 70 if (L->is_linked()) {
71 next = L->pos(); 71 next = L->pos();
72 ASSERT(next > 0); // Displacements must be at positions > 0 72 DCHECK(next > 0); // Displacements must be at positions > 0
73 } 73 }
74 // Ensure that we _never_ overflow the next field. 74 // Ensure that we _never_ overflow the next field.
75 ASSERT(NextField::is_valid(Assembler::kMaximalBufferSize)); 75 DCHECK(NextField::is_valid(Assembler::kMaximalBufferSize));
76 data_ = NextField::encode(next) | TypeField::encode(type); 76 data_ = NextField::encode(next) | TypeField::encode(type);
77 } 77 }
78 78
79 79
80 // ----------------------------------------------------------------------------- 80 // -----------------------------------------------------------------------------
81 // Implementation of RelocInfo 81 // Implementation of RelocInfo
82 82
83 83
84 const int RelocInfo::kApplyMask = 84 const int RelocInfo::kApplyMask =
85 RelocInfo::kCodeTargetMask | 1 << RelocInfo::RUNTIME_ENTRY | 85 RelocInfo::kCodeTargetMask | 1 << RelocInfo::RUNTIME_ENTRY |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 // Add a label for checking the size of the code used for returning. 125 // Add a label for checking the size of the code used for returning.
126 #ifdef DEBUG 126 #ifdef DEBUG
127 Label check_codesize; 127 Label check_codesize;
128 patcher.masm()->bind(&check_codesize); 128 patcher.masm()->bind(&check_codesize);
129 #endif 129 #endif
130 130
131 // Patch the code. 131 // Patch the code.
132 patcher.masm()->call(target, RelocInfo::NONE32); 132 patcher.masm()->call(target, RelocInfo::NONE32);
133 133
134 // Check that the size of the code generated is as expected. 134 // Check that the size of the code generated is as expected.
135 ASSERT_EQ(kCallCodeSize, 135 DCHECK_EQ(kCallCodeSize,
136 patcher.masm()->SizeOfCodeGeneratedSince(&check_codesize)); 136 patcher.masm()->SizeOfCodeGeneratedSince(&check_codesize));
137 137
138 // Add the requested number of int3 instructions after the call. 138 // Add the requested number of int3 instructions after the call.
139 ASSERT_GE(guard_bytes, 0); 139 DCHECK_GE(guard_bytes, 0);
140 for (int i = 0; i < guard_bytes; i++) { 140 for (int i = 0; i < guard_bytes; i++) {
141 patcher.masm()->int3(); 141 patcher.masm()->int3();
142 } 142 }
143 } 143 }
144 144
145 145
146 // ----------------------------------------------------------------------------- 146 // -----------------------------------------------------------------------------
147 // Implementation of Operand 147 // Implementation of Operand
148 148
149 Operand::Operand(Register base, int32_t disp, RelocInfo::Mode rmode) { 149 Operand::Operand(Register base, int32_t disp, RelocInfo::Mode rmode) {
(...skipping 14 matching lines...) Expand all
164 set_dispr(disp, rmode); 164 set_dispr(disp, rmode);
165 } 165 }
166 } 166 }
167 167
168 168
169 Operand::Operand(Register base, 169 Operand::Operand(Register base,
170 Register index, 170 Register index,
171 ScaleFactor scale, 171 ScaleFactor scale,
172 int32_t disp, 172 int32_t disp,
173 RelocInfo::Mode rmode) { 173 RelocInfo::Mode rmode) {
174 ASSERT(!index.is(esp)); // illegal addressing mode 174 DCHECK(!index.is(esp)); // illegal addressing mode
175 // [base + index*scale + disp/r] 175 // [base + index*scale + disp/r]
176 if (disp == 0 && RelocInfo::IsNone(rmode) && !base.is(ebp)) { 176 if (disp == 0 && RelocInfo::IsNone(rmode) && !base.is(ebp)) {
177 // [base + index*scale] 177 // [base + index*scale]
178 set_modrm(0, esp); 178 set_modrm(0, esp);
179 set_sib(scale, index, base); 179 set_sib(scale, index, base);
180 } else if (is_int8(disp) && RelocInfo::IsNone(rmode)) { 180 } else if (is_int8(disp) && RelocInfo::IsNone(rmode)) {
181 // [base + index*scale + disp8] 181 // [base + index*scale + disp8]
182 set_modrm(1, esp); 182 set_modrm(1, esp);
183 set_sib(scale, index, base); 183 set_sib(scale, index, base);
184 set_disp8(disp); 184 set_disp8(disp);
185 } else { 185 } else {
186 // [base + index*scale + disp/r] 186 // [base + index*scale + disp/r]
187 set_modrm(2, esp); 187 set_modrm(2, esp);
188 set_sib(scale, index, base); 188 set_sib(scale, index, base);
189 set_dispr(disp, rmode); 189 set_dispr(disp, rmode);
190 } 190 }
191 } 191 }
192 192
193 193
194 Operand::Operand(Register index, 194 Operand::Operand(Register index,
195 ScaleFactor scale, 195 ScaleFactor scale,
196 int32_t disp, 196 int32_t disp,
197 RelocInfo::Mode rmode) { 197 RelocInfo::Mode rmode) {
198 ASSERT(!index.is(esp)); // illegal addressing mode 198 DCHECK(!index.is(esp)); // illegal addressing mode
199 // [index*scale + disp/r] 199 // [index*scale + disp/r]
200 set_modrm(0, esp); 200 set_modrm(0, esp);
201 set_sib(scale, index, ebp); 201 set_sib(scale, index, ebp);
202 set_dispr(disp, rmode); 202 set_dispr(disp, rmode);
203 } 203 }
204 204
205 205
206 bool Operand::is_reg(Register reg) const { 206 bool Operand::is_reg(Register reg) const {
207 return ((buf_[0] & 0xF8) == 0xC0) // addressing mode is register only. 207 return ((buf_[0] & 0xF8) == 0xC0) // addressing mode is register only.
208 && ((buf_[0] & 0x07) == reg.code()); // register codes match. 208 && ((buf_[0] & 0x07) == reg.code()); // register codes match.
209 } 209 }
210 210
211 211
212 bool Operand::is_reg_only() const { 212 bool Operand::is_reg_only() const {
213 return (buf_[0] & 0xF8) == 0xC0; // Addressing mode is register only. 213 return (buf_[0] & 0xF8) == 0xC0; // Addressing mode is register only.
214 } 214 }
215 215
216 216
217 Register Operand::reg() const { 217 Register Operand::reg() const {
218 ASSERT(is_reg_only()); 218 DCHECK(is_reg_only());
219 return Register::from_code(buf_[0] & 0x07); 219 return Register::from_code(buf_[0] & 0x07);
220 } 220 }
221 221
222 222
223 // ----------------------------------------------------------------------------- 223 // -----------------------------------------------------------------------------
224 // Implementation of Assembler. 224 // Implementation of Assembler.
225 225
226 // Emit a single byte. Must always be inlined. 226 // Emit a single byte. Must always be inlined.
227 #define EMIT(x) \ 227 #define EMIT(x) \
228 *pc_++ = (x) 228 *pc_++ = (x)
(...skipping 19 matching lines...) Expand all
248 248
249 #ifdef GENERATED_CODE_COVERAGE 249 #ifdef GENERATED_CODE_COVERAGE
250 InitCoverageLog(); 250 InitCoverageLog();
251 #endif 251 #endif
252 } 252 }
253 253
254 254
255 void Assembler::GetCode(CodeDesc* desc) { 255 void Assembler::GetCode(CodeDesc* desc) {
256 // Finalize code (at this point overflow() may be true, but the gap ensures 256 // Finalize code (at this point overflow() may be true, but the gap ensures
257 // that we are still not overlapping instructions and relocation info). 257 // that we are still not overlapping instructions and relocation info).
258 ASSERT(pc_ <= reloc_info_writer.pos()); // No overlap. 258 DCHECK(pc_ <= reloc_info_writer.pos()); // No overlap.
259 // Set up code descriptor. 259 // Set up code descriptor.
260 desc->buffer = buffer_; 260 desc->buffer = buffer_;
261 desc->buffer_size = buffer_size_; 261 desc->buffer_size = buffer_size_;
262 desc->instr_size = pc_offset(); 262 desc->instr_size = pc_offset();
263 desc->reloc_size = (buffer_ + buffer_size_) - reloc_info_writer.pos(); 263 desc->reloc_size = (buffer_ + buffer_size_) - reloc_info_writer.pos();
264 desc->origin = this; 264 desc->origin = this;
265 } 265 }
266 266
267 267
268 void Assembler::Align(int m) { 268 void Assembler::Align(int m) {
269 ASSERT(IsPowerOf2(m)); 269 DCHECK(IsPowerOf2(m));
270 int mask = m - 1; 270 int mask = m - 1;
271 int addr = pc_offset(); 271 int addr = pc_offset();
272 Nop((m - (addr & mask)) & mask); 272 Nop((m - (addr & mask)) & mask);
273 } 273 }
274 274
275 275
276 bool Assembler::IsNop(Address addr) { 276 bool Assembler::IsNop(Address addr) {
277 Address a = addr; 277 Address a = addr;
278 while (*a == 0x66) a++; 278 while (*a == 0x66) a++;
279 if (*a == 0x90) return true; 279 if (*a == 0x90) return true;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 356
357 357
358 void Assembler::push(const Operand& src) { 358 void Assembler::push(const Operand& src) {
359 EnsureSpace ensure_space(this); 359 EnsureSpace ensure_space(this);
360 EMIT(0xFF); 360 EMIT(0xFF);
361 emit_operand(esi, src); 361 emit_operand(esi, src);
362 } 362 }
363 363
364 364
365 void Assembler::pop(Register dst) { 365 void Assembler::pop(Register dst) {
366 ASSERT(reloc_info_writer.last_pc() != NULL); 366 DCHECK(reloc_info_writer.last_pc() != NULL);
367 EnsureSpace ensure_space(this); 367 EnsureSpace ensure_space(this);
368 EMIT(0x58 | dst.code()); 368 EMIT(0x58 | dst.code());
369 } 369 }
370 370
371 371
372 void Assembler::pop(const Operand& dst) { 372 void Assembler::pop(const Operand& dst) {
373 EnsureSpace ensure_space(this); 373 EnsureSpace ensure_space(this);
374 EMIT(0x8F); 374 EMIT(0x8F);
375 emit_operand(eax, dst); 375 emit_operand(eax, dst);
376 } 376 }
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 595
596 596
597 void Assembler::add(const Operand& dst, Register src) { 597 void Assembler::add(const Operand& dst, Register src) {
598 EnsureSpace ensure_space(this); 598 EnsureSpace ensure_space(this);
599 EMIT(0x01); 599 EMIT(0x01);
600 emit_operand(src, dst); 600 emit_operand(src, dst);
601 } 601 }
602 602
603 603
604 void Assembler::add(const Operand& dst, const Immediate& x) { 604 void Assembler::add(const Operand& dst, const Immediate& x) {
605 ASSERT(reloc_info_writer.last_pc() != NULL); 605 DCHECK(reloc_info_writer.last_pc() != NULL);
606 EnsureSpace ensure_space(this); 606 EnsureSpace ensure_space(this);
607 emit_arith(0, dst, x); 607 emit_arith(0, dst, x);
608 } 608 }
609 609
610 610
611 void Assembler::and_(Register dst, int32_t imm32) { 611 void Assembler::and_(Register dst, int32_t imm32) {
612 and_(dst, Immediate(imm32)); 612 and_(dst, Immediate(imm32));
613 } 613 }
614 614
615 615
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 661
662 void Assembler::cmpb(Register reg, const Operand& op) { 662 void Assembler::cmpb(Register reg, const Operand& op) {
663 CHECK(reg.is_byte_register()); 663 CHECK(reg.is_byte_register());
664 EnsureSpace ensure_space(this); 664 EnsureSpace ensure_space(this);
665 EMIT(0x3A); 665 EMIT(0x3A);
666 emit_operand(reg, op); 666 emit_operand(reg, op);
667 } 667 }
668 668
669 669
670 void Assembler::cmpw(const Operand& op, Immediate imm16) { 670 void Assembler::cmpw(const Operand& op, Immediate imm16) {
671 ASSERT(imm16.is_int16()); 671 DCHECK(imm16.is_int16());
672 EnsureSpace ensure_space(this); 672 EnsureSpace ensure_space(this);
673 EMIT(0x66); 673 EMIT(0x66);
674 EMIT(0x81); 674 EMIT(0x81);
675 emit_operand(edi, op); 675 emit_operand(edi, op);
676 emit_w(imm16); 676 emit_w(imm16);
677 } 677 }
678 678
679 679
680 void Assembler::cmp(Register reg, int32_t imm32) { 680 void Assembler::cmp(Register reg, int32_t imm32) {
681 EnsureSpace ensure_space(this); 681 EnsureSpace ensure_space(this);
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 881
882 void Assembler::or_(const Operand& dst, Register src) { 882 void Assembler::or_(const Operand& dst, Register src) {
883 EnsureSpace ensure_space(this); 883 EnsureSpace ensure_space(this);
884 EMIT(0x09); 884 EMIT(0x09);
885 emit_operand(src, dst); 885 emit_operand(src, dst);
886 } 886 }
887 887
888 888
889 void Assembler::rcl(Register dst, uint8_t imm8) { 889 void Assembler::rcl(Register dst, uint8_t imm8) {
890 EnsureSpace ensure_space(this); 890 EnsureSpace ensure_space(this);
891 ASSERT(is_uint5(imm8)); // illegal shift count 891 DCHECK(is_uint5(imm8)); // illegal shift count
892 if (imm8 == 1) { 892 if (imm8 == 1) {
893 EMIT(0xD1); 893 EMIT(0xD1);
894 EMIT(0xD0 | dst.code()); 894 EMIT(0xD0 | dst.code());
895 } else { 895 } else {
896 EMIT(0xC1); 896 EMIT(0xC1);
897 EMIT(0xD0 | dst.code()); 897 EMIT(0xD0 | dst.code());
898 EMIT(imm8); 898 EMIT(imm8);
899 } 899 }
900 } 900 }
901 901
902 902
903 void Assembler::rcr(Register dst, uint8_t imm8) { 903 void Assembler::rcr(Register dst, uint8_t imm8) {
904 EnsureSpace ensure_space(this); 904 EnsureSpace ensure_space(this);
905 ASSERT(is_uint5(imm8)); // illegal shift count 905 DCHECK(is_uint5(imm8)); // illegal shift count
906 if (imm8 == 1) { 906 if (imm8 == 1) {
907 EMIT(0xD1); 907 EMIT(0xD1);
908 EMIT(0xD8 | dst.code()); 908 EMIT(0xD8 | dst.code());
909 } else { 909 } else {
910 EMIT(0xC1); 910 EMIT(0xC1);
911 EMIT(0xD8 | dst.code()); 911 EMIT(0xD8 | dst.code());
912 EMIT(imm8); 912 EMIT(imm8);
913 } 913 }
914 } 914 }
915 915
916 916
917 void Assembler::ror(Register dst, uint8_t imm8) { 917 void Assembler::ror(Register dst, uint8_t imm8) {
918 EnsureSpace ensure_space(this); 918 EnsureSpace ensure_space(this);
919 ASSERT(is_uint5(imm8)); // illegal shift count 919 DCHECK(is_uint5(imm8)); // illegal shift count
920 if (imm8 == 1) { 920 if (imm8 == 1) {
921 EMIT(0xD1); 921 EMIT(0xD1);
922 EMIT(0xC8 | dst.code()); 922 EMIT(0xC8 | dst.code());
923 } else { 923 } else {
924 EMIT(0xC1); 924 EMIT(0xC1);
925 EMIT(0xC8 | dst.code()); 925 EMIT(0xC8 | dst.code());
926 EMIT(imm8); 926 EMIT(imm8);
927 } 927 }
928 } 928 }
929 929
930 930
931 void Assembler::ror_cl(Register dst) { 931 void Assembler::ror_cl(Register dst) {
932 EnsureSpace ensure_space(this); 932 EnsureSpace ensure_space(this);
933 EMIT(0xD3); 933 EMIT(0xD3);
934 EMIT(0xC8 | dst.code()); 934 EMIT(0xC8 | dst.code());
935 } 935 }
936 936
937 937
938 void Assembler::sar(const Operand& dst, uint8_t imm8) { 938 void Assembler::sar(const Operand& dst, uint8_t imm8) {
939 EnsureSpace ensure_space(this); 939 EnsureSpace ensure_space(this);
940 ASSERT(is_uint5(imm8)); // illegal shift count 940 DCHECK(is_uint5(imm8)); // illegal shift count
941 if (imm8 == 1) { 941 if (imm8 == 1) {
942 EMIT(0xD1); 942 EMIT(0xD1);
943 emit_operand(edi, dst); 943 emit_operand(edi, dst);
944 } else { 944 } else {
945 EMIT(0xC1); 945 EMIT(0xC1);
946 emit_operand(edi, dst); 946 emit_operand(edi, dst);
947 EMIT(imm8); 947 EMIT(imm8);
948 } 948 }
949 } 949 }
950 950
(...skipping 15 matching lines...) Expand all
966 void Assembler::shld(Register dst, const Operand& src) { 966 void Assembler::shld(Register dst, const Operand& src) {
967 EnsureSpace ensure_space(this); 967 EnsureSpace ensure_space(this);
968 EMIT(0x0F); 968 EMIT(0x0F);
969 EMIT(0xA5); 969 EMIT(0xA5);
970 emit_operand(dst, src); 970 emit_operand(dst, src);
971 } 971 }
972 972
973 973
974 void Assembler::shl(const Operand& dst, uint8_t imm8) { 974 void Assembler::shl(const Operand& dst, uint8_t imm8) {
975 EnsureSpace ensure_space(this); 975 EnsureSpace ensure_space(this);
976 ASSERT(is_uint5(imm8)); // illegal shift count 976 DCHECK(is_uint5(imm8)); // illegal shift count
977 if (imm8 == 1) { 977 if (imm8 == 1) {
978 EMIT(0xD1); 978 EMIT(0xD1);
979 emit_operand(esp, dst); 979 emit_operand(esp, dst);
980 } else { 980 } else {
981 EMIT(0xC1); 981 EMIT(0xC1);
982 emit_operand(esp, dst); 982 emit_operand(esp, dst);
983 EMIT(imm8); 983 EMIT(imm8);
984 } 984 }
985 } 985 }
986 986
987 987
988 void Assembler::shl_cl(const Operand& dst) { 988 void Assembler::shl_cl(const Operand& dst) {
989 EnsureSpace ensure_space(this); 989 EnsureSpace ensure_space(this);
990 EMIT(0xD3); 990 EMIT(0xD3);
991 emit_operand(esp, dst); 991 emit_operand(esp, dst);
992 } 992 }
993 993
994 994
995 void Assembler::shrd(Register dst, const Operand& src) { 995 void Assembler::shrd(Register dst, const Operand& src) {
996 EnsureSpace ensure_space(this); 996 EnsureSpace ensure_space(this);
997 EMIT(0x0F); 997 EMIT(0x0F);
998 EMIT(0xAD); 998 EMIT(0xAD);
999 emit_operand(dst, src); 999 emit_operand(dst, src);
1000 } 1000 }
1001 1001
1002 1002
1003 void Assembler::shr(const Operand& dst, uint8_t imm8) { 1003 void Assembler::shr(const Operand& dst, uint8_t imm8) {
1004 EnsureSpace ensure_space(this); 1004 EnsureSpace ensure_space(this);
1005 ASSERT(is_uint5(imm8)); // illegal shift count 1005 DCHECK(is_uint5(imm8)); // illegal shift count
1006 if (imm8 == 1) { 1006 if (imm8 == 1) {
1007 EMIT(0xD1); 1007 EMIT(0xD1);
1008 emit_operand(ebp, dst); 1008 emit_operand(ebp, dst);
1009 } else { 1009 } else {
1010 EMIT(0xC1); 1010 EMIT(0xC1);
1011 emit_operand(ebp, dst); 1011 emit_operand(ebp, dst);
1012 EMIT(imm8); 1012 EMIT(imm8);
1013 } 1013 }
1014 } 1014 }
1015 1015
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1182 1182
1183 1183
1184 void Assembler::nop() { 1184 void Assembler::nop() {
1185 EnsureSpace ensure_space(this); 1185 EnsureSpace ensure_space(this);
1186 EMIT(0x90); 1186 EMIT(0x90);
1187 } 1187 }
1188 1188
1189 1189
1190 void Assembler::ret(int imm16) { 1190 void Assembler::ret(int imm16) {
1191 EnsureSpace ensure_space(this); 1191 EnsureSpace ensure_space(this);
1192 ASSERT(is_uint16(imm16)); 1192 DCHECK(is_uint16(imm16));
1193 if (imm16 == 0) { 1193 if (imm16 == 0) {
1194 EMIT(0xC3); 1194 EMIT(0xC3);
1195 } else { 1195 } else {
1196 EMIT(0xC2); 1196 EMIT(0xC2);
1197 EMIT(imm16 & 0xFF); 1197 EMIT(imm16 & 0xFF);
1198 EMIT((imm16 >> 8) & 0xFF); 1198 EMIT((imm16 >> 8) & 0xFF);
1199 } 1199 }
1200 } 1200 }
1201 1201
1202 1202
(...skipping 24 matching lines...) Expand all
1227 disp.next(&l); 1227 disp.next(&l);
1228 } 1228 }
1229 } else { 1229 } else {
1230 PrintF("label in inconsistent state (pos = %d)\n", L->pos_); 1230 PrintF("label in inconsistent state (pos = %d)\n", L->pos_);
1231 } 1231 }
1232 } 1232 }
1233 1233
1234 1234
1235 void Assembler::bind_to(Label* L, int pos) { 1235 void Assembler::bind_to(Label* L, int pos) {
1236 EnsureSpace ensure_space(this); 1236 EnsureSpace ensure_space(this);
1237 ASSERT(0 <= pos && pos <= pc_offset()); // must have a valid binding position 1237 DCHECK(0 <= pos && pos <= pc_offset()); // must have a valid binding position
1238 while (L->is_linked()) { 1238 while (L->is_linked()) {
1239 Displacement disp = disp_at(L); 1239 Displacement disp = disp_at(L);
1240 int fixup_pos = L->pos(); 1240 int fixup_pos = L->pos();
1241 if (disp.type() == Displacement::CODE_RELATIVE) { 1241 if (disp.type() == Displacement::CODE_RELATIVE) {
1242 // Relative to Code* heap object pointer. 1242 // Relative to Code* heap object pointer.
1243 long_at_put(fixup_pos, pos + Code::kHeaderSize - kHeapObjectTag); 1243 long_at_put(fixup_pos, pos + Code::kHeaderSize - kHeapObjectTag);
1244 } else { 1244 } else {
1245 if (disp.type() == Displacement::UNCONDITIONAL_JUMP) { 1245 if (disp.type() == Displacement::UNCONDITIONAL_JUMP) {
1246 ASSERT(byte_at(fixup_pos - 1) == 0xE9); // jmp expected 1246 DCHECK(byte_at(fixup_pos - 1) == 0xE9); // jmp expected
1247 } 1247 }
1248 // Relative address, relative to point after address. 1248 // Relative address, relative to point after address.
1249 int imm32 = pos - (fixup_pos + sizeof(int32_t)); 1249 int imm32 = pos - (fixup_pos + sizeof(int32_t));
1250 long_at_put(fixup_pos, imm32); 1250 long_at_put(fixup_pos, imm32);
1251 } 1251 }
1252 disp.next(L); 1252 disp.next(L);
1253 } 1253 }
1254 while (L->is_near_linked()) { 1254 while (L->is_near_linked()) {
1255 int fixup_pos = L->near_link_pos(); 1255 int fixup_pos = L->near_link_pos();
1256 int offset_to_next = 1256 int offset_to_next =
1257 static_cast<int>(*reinterpret_cast<int8_t*>(addr_at(fixup_pos))); 1257 static_cast<int>(*reinterpret_cast<int8_t*>(addr_at(fixup_pos)));
1258 ASSERT(offset_to_next <= 0); 1258 DCHECK(offset_to_next <= 0);
1259 // Relative address, relative to point after address. 1259 // Relative address, relative to point after address.
1260 int disp = pos - fixup_pos - sizeof(int8_t); 1260 int disp = pos - fixup_pos - sizeof(int8_t);
1261 CHECK(0 <= disp && disp <= 127); 1261 CHECK(0 <= disp && disp <= 127);
1262 set_byte_at(fixup_pos, disp); 1262 set_byte_at(fixup_pos, disp);
1263 if (offset_to_next < 0) { 1263 if (offset_to_next < 0) {
1264 L->link_to(fixup_pos + offset_to_next, Label::kNear); 1264 L->link_to(fixup_pos + offset_to_next, Label::kNear);
1265 } else { 1265 } else {
1266 L->UnuseNear(); 1266 L->UnuseNear();
1267 } 1267 }
1268 } 1268 }
1269 L->bind_to(pos); 1269 L->bind_to(pos);
1270 } 1270 }
1271 1271
1272 1272
1273 void Assembler::bind(Label* L) { 1273 void Assembler::bind(Label* L) {
1274 EnsureSpace ensure_space(this); 1274 EnsureSpace ensure_space(this);
1275 ASSERT(!L->is_bound()); // label can only be bound once 1275 DCHECK(!L->is_bound()); // label can only be bound once
1276 bind_to(L, pc_offset()); 1276 bind_to(L, pc_offset());
1277 } 1277 }
1278 1278
1279 1279
1280 void Assembler::call(Label* L) { 1280 void Assembler::call(Label* L) {
1281 positions_recorder()->WriteRecordedPositions(); 1281 positions_recorder()->WriteRecordedPositions();
1282 EnsureSpace ensure_space(this); 1282 EnsureSpace ensure_space(this);
1283 if (L->is_bound()) { 1283 if (L->is_bound()) {
1284 const int long_size = 5; 1284 const int long_size = 5;
1285 int offs = L->pos() - pc_offset(); 1285 int offs = L->pos() - pc_offset();
1286 ASSERT(offs <= 0); 1286 DCHECK(offs <= 0);
1287 // 1110 1000 #32-bit disp. 1287 // 1110 1000 #32-bit disp.
1288 EMIT(0xE8); 1288 EMIT(0xE8);
1289 emit(offs - long_size); 1289 emit(offs - long_size);
1290 } else { 1290 } else {
1291 // 1110 1000 #32-bit disp. 1291 // 1110 1000 #32-bit disp.
1292 EMIT(0xE8); 1292 EMIT(0xE8);
1293 emit_disp(L, Displacement::OTHER); 1293 emit_disp(L, Displacement::OTHER);
1294 } 1294 }
1295 } 1295 }
1296 1296
1297 1297
1298 void Assembler::call(byte* entry, RelocInfo::Mode rmode) { 1298 void Assembler::call(byte* entry, RelocInfo::Mode rmode) {
1299 positions_recorder()->WriteRecordedPositions(); 1299 positions_recorder()->WriteRecordedPositions();
1300 EnsureSpace ensure_space(this); 1300 EnsureSpace ensure_space(this);
1301 ASSERT(!RelocInfo::IsCodeTarget(rmode)); 1301 DCHECK(!RelocInfo::IsCodeTarget(rmode));
1302 EMIT(0xE8); 1302 EMIT(0xE8);
1303 if (RelocInfo::IsRuntimeEntry(rmode)) { 1303 if (RelocInfo::IsRuntimeEntry(rmode)) {
1304 emit(reinterpret_cast<uint32_t>(entry), rmode); 1304 emit(reinterpret_cast<uint32_t>(entry), rmode);
1305 } else { 1305 } else {
1306 emit(entry - (pc_ + sizeof(int32_t)), rmode); 1306 emit(entry - (pc_ + sizeof(int32_t)), rmode);
1307 } 1307 }
1308 } 1308 }
1309 1309
1310 1310
1311 int Assembler::CallSize(const Operand& adr) { 1311 int Assembler::CallSize(const Operand& adr) {
(...skipping 13 matching lines...) Expand all
1325 int Assembler::CallSize(Handle<Code> code, RelocInfo::Mode rmode) { 1325 int Assembler::CallSize(Handle<Code> code, RelocInfo::Mode rmode) {
1326 return 1 /* EMIT */ + sizeof(uint32_t) /* emit */; 1326 return 1 /* EMIT */ + sizeof(uint32_t) /* emit */;
1327 } 1327 }
1328 1328
1329 1329
1330 void Assembler::call(Handle<Code> code, 1330 void Assembler::call(Handle<Code> code,
1331 RelocInfo::Mode rmode, 1331 RelocInfo::Mode rmode,
1332 TypeFeedbackId ast_id) { 1332 TypeFeedbackId ast_id) {
1333 positions_recorder()->WriteRecordedPositions(); 1333 positions_recorder()->WriteRecordedPositions();
1334 EnsureSpace ensure_space(this); 1334 EnsureSpace ensure_space(this);
1335 ASSERT(RelocInfo::IsCodeTarget(rmode) 1335 DCHECK(RelocInfo::IsCodeTarget(rmode)
1336 || rmode == RelocInfo::CODE_AGE_SEQUENCE); 1336 || rmode == RelocInfo::CODE_AGE_SEQUENCE);
1337 EMIT(0xE8); 1337 EMIT(0xE8);
1338 emit(code, rmode, ast_id); 1338 emit(code, rmode, ast_id);
1339 } 1339 }
1340 1340
1341 1341
1342 void Assembler::jmp(Label* L, Label::Distance distance) { 1342 void Assembler::jmp(Label* L, Label::Distance distance) {
1343 EnsureSpace ensure_space(this); 1343 EnsureSpace ensure_space(this);
1344 if (L->is_bound()) { 1344 if (L->is_bound()) {
1345 const int short_size = 2; 1345 const int short_size = 2;
1346 const int long_size = 5; 1346 const int long_size = 5;
1347 int offs = L->pos() - pc_offset(); 1347 int offs = L->pos() - pc_offset();
1348 ASSERT(offs <= 0); 1348 DCHECK(offs <= 0);
1349 if (is_int8(offs - short_size)) { 1349 if (is_int8(offs - short_size)) {
1350 // 1110 1011 #8-bit disp. 1350 // 1110 1011 #8-bit disp.
1351 EMIT(0xEB); 1351 EMIT(0xEB);
1352 EMIT((offs - short_size) & 0xFF); 1352 EMIT((offs - short_size) & 0xFF);
1353 } else { 1353 } else {
1354 // 1110 1001 #32-bit disp. 1354 // 1110 1001 #32-bit disp.
1355 EMIT(0xE9); 1355 EMIT(0xE9);
1356 emit(offs - long_size); 1356 emit(offs - long_size);
1357 } 1357 }
1358 } else if (distance == Label::kNear) { 1358 } else if (distance == Label::kNear) {
1359 EMIT(0xEB); 1359 EMIT(0xEB);
1360 emit_near_disp(L); 1360 emit_near_disp(L);
1361 } else { 1361 } else {
1362 // 1110 1001 #32-bit disp. 1362 // 1110 1001 #32-bit disp.
1363 EMIT(0xE9); 1363 EMIT(0xE9);
1364 emit_disp(L, Displacement::UNCONDITIONAL_JUMP); 1364 emit_disp(L, Displacement::UNCONDITIONAL_JUMP);
1365 } 1365 }
1366 } 1366 }
1367 1367
1368 1368
1369 void Assembler::jmp(byte* entry, RelocInfo::Mode rmode) { 1369 void Assembler::jmp(byte* entry, RelocInfo::Mode rmode) {
1370 EnsureSpace ensure_space(this); 1370 EnsureSpace ensure_space(this);
1371 ASSERT(!RelocInfo::IsCodeTarget(rmode)); 1371 DCHECK(!RelocInfo::IsCodeTarget(rmode));
1372 EMIT(0xE9); 1372 EMIT(0xE9);
1373 if (RelocInfo::IsRuntimeEntry(rmode)) { 1373 if (RelocInfo::IsRuntimeEntry(rmode)) {
1374 emit(reinterpret_cast<uint32_t>(entry), rmode); 1374 emit(reinterpret_cast<uint32_t>(entry), rmode);
1375 } else { 1375 } else {
1376 emit(entry - (pc_ + sizeof(int32_t)), rmode); 1376 emit(entry - (pc_ + sizeof(int32_t)), rmode);
1377 } 1377 }
1378 } 1378 }
1379 1379
1380 1380
1381 void Assembler::jmp(const Operand& adr) { 1381 void Assembler::jmp(const Operand& adr) {
1382 EnsureSpace ensure_space(this); 1382 EnsureSpace ensure_space(this);
1383 EMIT(0xFF); 1383 EMIT(0xFF);
1384 emit_operand(esp, adr); 1384 emit_operand(esp, adr);
1385 } 1385 }
1386 1386
1387 1387
1388 void Assembler::jmp(Handle<Code> code, RelocInfo::Mode rmode) { 1388 void Assembler::jmp(Handle<Code> code, RelocInfo::Mode rmode) {
1389 EnsureSpace ensure_space(this); 1389 EnsureSpace ensure_space(this);
1390 ASSERT(RelocInfo::IsCodeTarget(rmode)); 1390 DCHECK(RelocInfo::IsCodeTarget(rmode));
1391 EMIT(0xE9); 1391 EMIT(0xE9);
1392 emit(code, rmode); 1392 emit(code, rmode);
1393 } 1393 }
1394 1394
1395 1395
1396 void Assembler::j(Condition cc, Label* L, Label::Distance distance) { 1396 void Assembler::j(Condition cc, Label* L, Label::Distance distance) {
1397 EnsureSpace ensure_space(this); 1397 EnsureSpace ensure_space(this);
1398 ASSERT(0 <= cc && static_cast<int>(cc) < 16); 1398 DCHECK(0 <= cc && static_cast<int>(cc) < 16);
1399 if (L->is_bound()) { 1399 if (L->is_bound()) {
1400 const int short_size = 2; 1400 const int short_size = 2;
1401 const int long_size = 6; 1401 const int long_size = 6;
1402 int offs = L->pos() - pc_offset(); 1402 int offs = L->pos() - pc_offset();
1403 ASSERT(offs <= 0); 1403 DCHECK(offs <= 0);
1404 if (is_int8(offs - short_size)) { 1404 if (is_int8(offs - short_size)) {
1405 // 0111 tttn #8-bit disp 1405 // 0111 tttn #8-bit disp
1406 EMIT(0x70 | cc); 1406 EMIT(0x70 | cc);
1407 EMIT((offs - short_size) & 0xFF); 1407 EMIT((offs - short_size) & 0xFF);
1408 } else { 1408 } else {
1409 // 0000 1111 1000 tttn #32-bit disp 1409 // 0000 1111 1000 tttn #32-bit disp
1410 EMIT(0x0F); 1410 EMIT(0x0F);
1411 EMIT(0x80 | cc); 1411 EMIT(0x80 | cc);
1412 emit(offs - long_size); 1412 emit(offs - long_size);
1413 } 1413 }
1414 } else if (distance == Label::kNear) { 1414 } else if (distance == Label::kNear) {
1415 EMIT(0x70 | cc); 1415 EMIT(0x70 | cc);
1416 emit_near_disp(L); 1416 emit_near_disp(L);
1417 } else { 1417 } else {
1418 // 0000 1111 1000 tttn #32-bit disp 1418 // 0000 1111 1000 tttn #32-bit disp
1419 // Note: could eliminate cond. jumps to this jump if condition 1419 // Note: could eliminate cond. jumps to this jump if condition
1420 // is the same however, seems to be rather unlikely case. 1420 // is the same however, seems to be rather unlikely case.
1421 EMIT(0x0F); 1421 EMIT(0x0F);
1422 EMIT(0x80 | cc); 1422 EMIT(0x80 | cc);
1423 emit_disp(L, Displacement::OTHER); 1423 emit_disp(L, Displacement::OTHER);
1424 } 1424 }
1425 } 1425 }
1426 1426
1427 1427
1428 void Assembler::j(Condition cc, byte* entry, RelocInfo::Mode rmode) { 1428 void Assembler::j(Condition cc, byte* entry, RelocInfo::Mode rmode) {
1429 EnsureSpace ensure_space(this); 1429 EnsureSpace ensure_space(this);
1430 ASSERT((0 <= cc) && (static_cast<int>(cc) < 16)); 1430 DCHECK((0 <= cc) && (static_cast<int>(cc) < 16));
1431 // 0000 1111 1000 tttn #32-bit disp. 1431 // 0000 1111 1000 tttn #32-bit disp.
1432 EMIT(0x0F); 1432 EMIT(0x0F);
1433 EMIT(0x80 | cc); 1433 EMIT(0x80 | cc);
1434 if (RelocInfo::IsRuntimeEntry(rmode)) { 1434 if (RelocInfo::IsRuntimeEntry(rmode)) {
1435 emit(reinterpret_cast<uint32_t>(entry), rmode); 1435 emit(reinterpret_cast<uint32_t>(entry), rmode);
1436 } else { 1436 } else {
1437 emit(entry - (pc_ + sizeof(int32_t)), rmode); 1437 emit(entry - (pc_ + sizeof(int32_t)), rmode);
1438 } 1438 }
1439 } 1439 }
1440 1440
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 1547
1548 1548
1549 void Assembler::fistp_s(const Operand& adr) { 1549 void Assembler::fistp_s(const Operand& adr) {
1550 EnsureSpace ensure_space(this); 1550 EnsureSpace ensure_space(this);
1551 EMIT(0xDB); 1551 EMIT(0xDB);
1552 emit_operand(ebx, adr); 1552 emit_operand(ebx, adr);
1553 } 1553 }
1554 1554
1555 1555
1556 void Assembler::fisttp_s(const Operand& adr) { 1556 void Assembler::fisttp_s(const Operand& adr) {
1557 ASSERT(IsEnabled(SSE3)); 1557 DCHECK(IsEnabled(SSE3));
1558 EnsureSpace ensure_space(this); 1558 EnsureSpace ensure_space(this);
1559 EMIT(0xDB); 1559 EMIT(0xDB);
1560 emit_operand(ecx, adr); 1560 emit_operand(ecx, adr);
1561 } 1561 }
1562 1562
1563 1563
1564 void Assembler::fisttp_d(const Operand& adr) { 1564 void Assembler::fisttp_d(const Operand& adr) {
1565 ASSERT(IsEnabled(SSE3)); 1565 DCHECK(IsEnabled(SSE3));
1566 EnsureSpace ensure_space(this); 1566 EnsureSpace ensure_space(this);
1567 EMIT(0xDD); 1567 EMIT(0xDD);
1568 emit_operand(ecx, adr); 1568 emit_operand(ecx, adr);
1569 } 1569 }
1570 1570
1571 1571
1572 void Assembler::fist_s(const Operand& adr) { 1572 void Assembler::fist_s(const Operand& adr) {
1573 EnsureSpace ensure_space(this); 1573 EnsureSpace ensure_space(this);
1574 EMIT(0xDB); 1574 EMIT(0xDB);
1575 emit_operand(edx, adr); 1575 emit_operand(edx, adr);
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1832 } 1832 }
1833 1833
1834 1834
1835 void Assembler::sahf() { 1835 void Assembler::sahf() {
1836 EnsureSpace ensure_space(this); 1836 EnsureSpace ensure_space(this);
1837 EMIT(0x9E); 1837 EMIT(0x9E);
1838 } 1838 }
1839 1839
1840 1840
1841 void Assembler::setcc(Condition cc, Register reg) { 1841 void Assembler::setcc(Condition cc, Register reg) {
1842 ASSERT(reg.is_byte_register()); 1842 DCHECK(reg.is_byte_register());
1843 EnsureSpace ensure_space(this); 1843 EnsureSpace ensure_space(this);
1844 EMIT(0x0F); 1844 EMIT(0x0F);
1845 EMIT(0x90 | cc); 1845 EMIT(0x90 | cc);
1846 EMIT(0xC0 | reg.code()); 1846 EMIT(0xC0 | reg.code());
1847 } 1847 }
1848 1848
1849 1849
1850 void Assembler::Print() { 1850 void Assembler::Print() {
1851 Disassembler::Decode(isolate(), stdout, buffer_, pc_); 1851 Disassembler::Decode(isolate(), stdout, buffer_, pc_);
1852 } 1852 }
(...skipping 15 matching lines...) Expand all
1868 1868
1869 void Assembler::RecordComment(const char* msg, bool force) { 1869 void Assembler::RecordComment(const char* msg, bool force) {
1870 if (FLAG_code_comments || force) { 1870 if (FLAG_code_comments || force) {
1871 EnsureSpace ensure_space(this); 1871 EnsureSpace ensure_space(this);
1872 RecordRelocInfo(RelocInfo::COMMENT, reinterpret_cast<intptr_t>(msg)); 1872 RecordRelocInfo(RelocInfo::COMMENT, reinterpret_cast<intptr_t>(msg));
1873 } 1873 }
1874 } 1874 }
1875 1875
1876 1876
1877 void Assembler::GrowBuffer() { 1877 void Assembler::GrowBuffer() {
1878 ASSERT(buffer_overflow()); 1878 DCHECK(buffer_overflow());
1879 if (!own_buffer_) FATAL("external code buffer is too small"); 1879 if (!own_buffer_) FATAL("external code buffer is too small");
1880 1880
1881 // Compute new buffer size. 1881 // Compute new buffer size.
1882 CodeDesc desc; // the new buffer 1882 CodeDesc desc; // the new buffer
1883 if (buffer_size_ < 4*KB) { 1883 if (buffer_size_ < 4*KB) {
1884 desc.buffer_size = 4*KB; 1884 desc.buffer_size = 4*KB;
1885 } else { 1885 } else {
1886 desc.buffer_size = 2*buffer_size_; 1886 desc.buffer_size = 2*buffer_size_;
1887 } 1887 }
1888 // Some internal data structures overflow for very large buffers, 1888 // Some internal data structures overflow for very large buffers,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1927 for (RelocIterator it(desc); !it.done(); it.next()) { 1927 for (RelocIterator it(desc); !it.done(); it.next()) {
1928 RelocInfo::Mode rmode = it.rinfo()->rmode(); 1928 RelocInfo::Mode rmode = it.rinfo()->rmode();
1929 if (rmode == RelocInfo::INTERNAL_REFERENCE) { 1929 if (rmode == RelocInfo::INTERNAL_REFERENCE) {
1930 int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc()); 1930 int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc());
1931 if (*p != 0) { // 0 means uninitialized. 1931 if (*p != 0) { // 0 means uninitialized.
1932 *p += pc_delta; 1932 *p += pc_delta;
1933 } 1933 }
1934 } 1934 }
1935 } 1935 }
1936 1936
1937 ASSERT(!buffer_overflow()); 1937 DCHECK(!buffer_overflow());
1938 } 1938 }
1939 1939
1940 1940
1941 void Assembler::emit_arith_b(int op1, int op2, Register dst, int imm8) { 1941 void Assembler::emit_arith_b(int op1, int op2, Register dst, int imm8) {
1942 ASSERT(is_uint8(op1) && is_uint8(op2)); // wrong opcode 1942 DCHECK(is_uint8(op1) && is_uint8(op2)); // wrong opcode
1943 ASSERT(is_uint8(imm8)); 1943 DCHECK(is_uint8(imm8));
1944 ASSERT((op1 & 0x01) == 0); // should be 8bit operation 1944 DCHECK((op1 & 0x01) == 0); // should be 8bit operation
1945 EMIT(op1); 1945 EMIT(op1);
1946 EMIT(op2 | dst.code()); 1946 EMIT(op2 | dst.code());
1947 EMIT(imm8); 1947 EMIT(imm8);
1948 } 1948 }
1949 1949
1950 1950
1951 void Assembler::emit_arith(int sel, Operand dst, const Immediate& x) { 1951 void Assembler::emit_arith(int sel, Operand dst, const Immediate& x) {
1952 ASSERT((0 <= sel) && (sel <= 7)); 1952 DCHECK((0 <= sel) && (sel <= 7));
1953 Register ireg = { sel }; 1953 Register ireg = { sel };
1954 if (x.is_int8()) { 1954 if (x.is_int8()) {
1955 EMIT(0x83); // using a sign-extended 8-bit immediate. 1955 EMIT(0x83); // using a sign-extended 8-bit immediate.
1956 emit_operand(ireg, dst); 1956 emit_operand(ireg, dst);
1957 EMIT(x.x_ & 0xFF); 1957 EMIT(x.x_ & 0xFF);
1958 } else if (dst.is_reg(eax)) { 1958 } else if (dst.is_reg(eax)) {
1959 EMIT((sel << 3) | 0x05); // short form if the destination is eax. 1959 EMIT((sel << 3) | 0x05); // short form if the destination is eax.
1960 emit(x); 1960 emit(x);
1961 } else { 1961 } else {
1962 EMIT(0x81); // using a literal 32-bit immediate. 1962 EMIT(0x81); // using a literal 32-bit immediate.
1963 emit_operand(ireg, dst); 1963 emit_operand(ireg, dst);
1964 emit(x); 1964 emit(x);
1965 } 1965 }
1966 } 1966 }
1967 1967
1968 1968
1969 void Assembler::emit_operand(Register reg, const Operand& adr) { 1969 void Assembler::emit_operand(Register reg, const Operand& adr) {
1970 const unsigned length = adr.len_; 1970 const unsigned length = adr.len_;
1971 ASSERT(length > 0); 1971 DCHECK(length > 0);
1972 1972
1973 // Emit updated ModRM byte containing the given register. 1973 // Emit updated ModRM byte containing the given register.
1974 pc_[0] = (adr.buf_[0] & ~0x38) | (reg.code() << 3); 1974 pc_[0] = (adr.buf_[0] & ~0x38) | (reg.code() << 3);
1975 1975
1976 // Emit the rest of the encoded operand. 1976 // Emit the rest of the encoded operand.
1977 for (unsigned i = 1; i < length; i++) pc_[i] = adr.buf_[i]; 1977 for (unsigned i = 1; i < length; i++) pc_[i] = adr.buf_[i];
1978 pc_ += length; 1978 pc_ += length;
1979 1979
1980 // Emit relocation information if necessary. 1980 // Emit relocation information if necessary.
1981 if (length >= sizeof(int32_t) && !RelocInfo::IsNone(adr.rmode_)) { 1981 if (length >= sizeof(int32_t) && !RelocInfo::IsNone(adr.rmode_)) {
1982 pc_ -= sizeof(int32_t); // pc_ must be *at* disp32 1982 pc_ -= sizeof(int32_t); // pc_ must be *at* disp32
1983 RecordRelocInfo(adr.rmode_); 1983 RecordRelocInfo(adr.rmode_);
1984 pc_ += sizeof(int32_t); 1984 pc_ += sizeof(int32_t);
1985 } 1985 }
1986 } 1986 }
1987 1987
1988 1988
1989 void Assembler::emit_farith(int b1, int b2, int i) { 1989 void Assembler::emit_farith(int b1, int b2, int i) {
1990 ASSERT(is_uint8(b1) && is_uint8(b2)); // wrong opcode 1990 DCHECK(is_uint8(b1) && is_uint8(b2)); // wrong opcode
1991 ASSERT(0 <= i && i < 8); // illegal stack offset 1991 DCHECK(0 <= i && i < 8); // illegal stack offset
1992 EMIT(b1); 1992 EMIT(b1);
1993 EMIT(b2 + i); 1993 EMIT(b2 + i);
1994 } 1994 }
1995 1995
1996 1996
1997 void Assembler::db(uint8_t data) { 1997 void Assembler::db(uint8_t data) {
1998 EnsureSpace ensure_space(this); 1998 EnsureSpace ensure_space(this);
1999 EMIT(data); 1999 EMIT(data);
2000 } 2000 }
2001 2001
2002 2002
2003 void Assembler::dd(uint32_t data) { 2003 void Assembler::dd(uint32_t data) {
2004 EnsureSpace ensure_space(this); 2004 EnsureSpace ensure_space(this);
2005 emit(data); 2005 emit(data);
2006 } 2006 }
2007 2007
2008 2008
2009 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { 2009 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) {
2010 ASSERT(!RelocInfo::IsNone(rmode)); 2010 DCHECK(!RelocInfo::IsNone(rmode));
2011 // Don't record external references unless the heap will be serialized. 2011 // Don't record external references unless the heap will be serialized.
2012 if (rmode == RelocInfo::EXTERNAL_REFERENCE && 2012 if (rmode == RelocInfo::EXTERNAL_REFERENCE &&
2013 !serializer_enabled() && !emit_debug_code()) { 2013 !serializer_enabled() && !emit_debug_code()) {
2014 return; 2014 return;
2015 } 2015 }
2016 RelocInfo rinfo(pc_, rmode, data, NULL); 2016 RelocInfo rinfo(pc_, rmode, data, NULL);
2017 reloc_info_writer.Write(&rinfo); 2017 reloc_info_writer.Write(&rinfo);
2018 } 2018 }
2019 2019
2020 2020
2021 Handle<ConstantPoolArray> Assembler::NewConstantPool(Isolate* isolate) { 2021 Handle<ConstantPoolArray> Assembler::NewConstantPool(Isolate* isolate) {
2022 // No out-of-line constant pool support. 2022 // No out-of-line constant pool support.
2023 ASSERT(!FLAG_enable_ool_constant_pool); 2023 DCHECK(!FLAG_enable_ool_constant_pool);
2024 return isolate->factory()->empty_constant_pool_array(); 2024 return isolate->factory()->empty_constant_pool_array();
2025 } 2025 }
2026 2026
2027 2027
2028 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) { 2028 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) {
2029 // No out-of-line constant pool support. 2029 // No out-of-line constant pool support.
2030 ASSERT(!FLAG_enable_ool_constant_pool); 2030 DCHECK(!FLAG_enable_ool_constant_pool);
2031 return; 2031 return;
2032 } 2032 }
2033 2033
2034 2034
2035 #ifdef GENERATED_CODE_COVERAGE 2035 #ifdef GENERATED_CODE_COVERAGE
2036 static FILE* coverage_log = NULL; 2036 static FILE* coverage_log = NULL;
2037 2037
2038 2038
2039 static void InitCoverageLog() { 2039 static void InitCoverageLog() {
2040 char* file_name = getenv("V8_GENERATED_CODE_COVERAGE_LOG"); 2040 char* file_name = getenv("V8_GENERATED_CODE_COVERAGE_LOG");
(...skipping 12 matching lines...) Expand all
2053 fprintf(coverage_log, "%s\n", file_line); 2053 fprintf(coverage_log, "%s\n", file_line);
2054 fflush(coverage_log); 2054 fflush(coverage_log);
2055 } 2055 }
2056 } 2056 }
2057 2057
2058 #endif 2058 #endif
2059 2059
2060 } } // namespace v8::internal 2060 } } // namespace v8::internal
2061 2061
2062 #endif // V8_TARGET_ARCH_X87 2062 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « src/x87/assembler-x87.h ('k') | src/x87/assembler-x87-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698