| OLD | NEW |
| 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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 | 63 |
| 64 | 64 |
| 65 void CpuFeatures::PrintTarget() { } | 65 void CpuFeatures::PrintTarget() { } |
| 66 void CpuFeatures::PrintFeatures() { } | 66 void CpuFeatures::PrintFeatures() { } |
| 67 | 67 |
| 68 | 68 |
| 69 // ----------------------------------------------------------------------------- | 69 // ----------------------------------------------------------------------------- |
| 70 // Implementation of Displacement | 70 // Implementation of Displacement |
| 71 | 71 |
| 72 void Displacement::init(Label* L, Type type) { | 72 void Displacement::init(Label* L, Type type) { |
| 73 ASSERT(!L->is_bound()); | 73 DCHECK(!L->is_bound()); |
| 74 int next = 0; | 74 int next = 0; |
| 75 if (L->is_linked()) { | 75 if (L->is_linked()) { |
| 76 next = L->pos(); | 76 next = L->pos(); |
| 77 ASSERT(next > 0); // Displacements must be at positions > 0 | 77 DCHECK(next > 0); // Displacements must be at positions > 0 |
| 78 } | 78 } |
| 79 // Ensure that we _never_ overflow the next field. | 79 // Ensure that we _never_ overflow the next field. |
| 80 ASSERT(NextField::is_valid(Assembler::kMaximalBufferSize)); | 80 DCHECK(NextField::is_valid(Assembler::kMaximalBufferSize)); |
| 81 data_ = NextField::encode(next) | TypeField::encode(type); | 81 data_ = NextField::encode(next) | TypeField::encode(type); |
| 82 } | 82 } |
| 83 | 83 |
| 84 | 84 |
| 85 // ----------------------------------------------------------------------------- | 85 // ----------------------------------------------------------------------------- |
| 86 // Implementation of RelocInfo | 86 // Implementation of RelocInfo |
| 87 | 87 |
| 88 | 88 |
| 89 const int RelocInfo::kApplyMask = | 89 const int RelocInfo::kApplyMask = |
| 90 RelocInfo::kCodeTargetMask | 1 << RelocInfo::RUNTIME_ENTRY | | 90 RelocInfo::kCodeTargetMask | 1 << RelocInfo::RUNTIME_ENTRY | |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 // Add a label for checking the size of the code used for returning. | 130 // Add a label for checking the size of the code used for returning. |
| 131 #ifdef DEBUG | 131 #ifdef DEBUG |
| 132 Label check_codesize; | 132 Label check_codesize; |
| 133 patcher.masm()->bind(&check_codesize); | 133 patcher.masm()->bind(&check_codesize); |
| 134 #endif | 134 #endif |
| 135 | 135 |
| 136 // Patch the code. | 136 // Patch the code. |
| 137 patcher.masm()->call(target, RelocInfo::NONE32); | 137 patcher.masm()->call(target, RelocInfo::NONE32); |
| 138 | 138 |
| 139 // Check that the size of the code generated is as expected. | 139 // Check that the size of the code generated is as expected. |
| 140 ASSERT_EQ(kCallCodeSize, | 140 DCHECK_EQ(kCallCodeSize, |
| 141 patcher.masm()->SizeOfCodeGeneratedSince(&check_codesize)); | 141 patcher.masm()->SizeOfCodeGeneratedSince(&check_codesize)); |
| 142 | 142 |
| 143 // Add the requested number of int3 instructions after the call. | 143 // Add the requested number of int3 instructions after the call. |
| 144 ASSERT_GE(guard_bytes, 0); | 144 DCHECK_GE(guard_bytes, 0); |
| 145 for (int i = 0; i < guard_bytes; i++) { | 145 for (int i = 0; i < guard_bytes; i++) { |
| 146 patcher.masm()->int3(); | 146 patcher.masm()->int3(); |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 | 149 |
| 150 | 150 |
| 151 // ----------------------------------------------------------------------------- | 151 // ----------------------------------------------------------------------------- |
| 152 // Implementation of Operand | 152 // Implementation of Operand |
| 153 | 153 |
| 154 Operand::Operand(Register base, int32_t disp, RelocInfo::Mode rmode) { | 154 Operand::Operand(Register base, int32_t disp, RelocInfo::Mode rmode) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 169 set_dispr(disp, rmode); | 169 set_dispr(disp, rmode); |
| 170 } | 170 } |
| 171 } | 171 } |
| 172 | 172 |
| 173 | 173 |
| 174 Operand::Operand(Register base, | 174 Operand::Operand(Register base, |
| 175 Register index, | 175 Register index, |
| 176 ScaleFactor scale, | 176 ScaleFactor scale, |
| 177 int32_t disp, | 177 int32_t disp, |
| 178 RelocInfo::Mode rmode) { | 178 RelocInfo::Mode rmode) { |
| 179 ASSERT(!index.is(esp)); // illegal addressing mode | 179 DCHECK(!index.is(esp)); // illegal addressing mode |
| 180 // [base + index*scale + disp/r] | 180 // [base + index*scale + disp/r] |
| 181 if (disp == 0 && RelocInfo::IsNone(rmode) && !base.is(ebp)) { | 181 if (disp == 0 && RelocInfo::IsNone(rmode) && !base.is(ebp)) { |
| 182 // [base + index*scale] | 182 // [base + index*scale] |
| 183 set_modrm(0, esp); | 183 set_modrm(0, esp); |
| 184 set_sib(scale, index, base); | 184 set_sib(scale, index, base); |
| 185 } else if (is_int8(disp) && RelocInfo::IsNone(rmode)) { | 185 } else if (is_int8(disp) && RelocInfo::IsNone(rmode)) { |
| 186 // [base + index*scale + disp8] | 186 // [base + index*scale + disp8] |
| 187 set_modrm(1, esp); | 187 set_modrm(1, esp); |
| 188 set_sib(scale, index, base); | 188 set_sib(scale, index, base); |
| 189 set_disp8(disp); | 189 set_disp8(disp); |
| 190 } else { | 190 } else { |
| 191 // [base + index*scale + disp/r] | 191 // [base + index*scale + disp/r] |
| 192 set_modrm(2, esp); | 192 set_modrm(2, esp); |
| 193 set_sib(scale, index, base); | 193 set_sib(scale, index, base); |
| 194 set_dispr(disp, rmode); | 194 set_dispr(disp, rmode); |
| 195 } | 195 } |
| 196 } | 196 } |
| 197 | 197 |
| 198 | 198 |
| 199 Operand::Operand(Register index, | 199 Operand::Operand(Register index, |
| 200 ScaleFactor scale, | 200 ScaleFactor scale, |
| 201 int32_t disp, | 201 int32_t disp, |
| 202 RelocInfo::Mode rmode) { | 202 RelocInfo::Mode rmode) { |
| 203 ASSERT(!index.is(esp)); // illegal addressing mode | 203 DCHECK(!index.is(esp)); // illegal addressing mode |
| 204 // [index*scale + disp/r] | 204 // [index*scale + disp/r] |
| 205 set_modrm(0, esp); | 205 set_modrm(0, esp); |
| 206 set_sib(scale, index, ebp); | 206 set_sib(scale, index, ebp); |
| 207 set_dispr(disp, rmode); | 207 set_dispr(disp, rmode); |
| 208 } | 208 } |
| 209 | 209 |
| 210 | 210 |
| 211 bool Operand::is_reg(Register reg) const { | 211 bool Operand::is_reg(Register reg) const { |
| 212 return ((buf_[0] & 0xF8) == 0xC0) // addressing mode is register only. | 212 return ((buf_[0] & 0xF8) == 0xC0) // addressing mode is register only. |
| 213 && ((buf_[0] & 0x07) == reg.code()); // register codes match. | 213 && ((buf_[0] & 0x07) == reg.code()); // register codes match. |
| 214 } | 214 } |
| 215 | 215 |
| 216 | 216 |
| 217 bool Operand::is_reg_only() const { | 217 bool Operand::is_reg_only() const { |
| 218 return (buf_[0] & 0xF8) == 0xC0; // Addressing mode is register only. | 218 return (buf_[0] & 0xF8) == 0xC0; // Addressing mode is register only. |
| 219 } | 219 } |
| 220 | 220 |
| 221 | 221 |
| 222 Register Operand::reg() const { | 222 Register Operand::reg() const { |
| 223 ASSERT(is_reg_only()); | 223 DCHECK(is_reg_only()); |
| 224 return Register::from_code(buf_[0] & 0x07); | 224 return Register::from_code(buf_[0] & 0x07); |
| 225 } | 225 } |
| 226 | 226 |
| 227 | 227 |
| 228 // ----------------------------------------------------------------------------- | 228 // ----------------------------------------------------------------------------- |
| 229 // Implementation of Assembler. | 229 // Implementation of Assembler. |
| 230 | 230 |
| 231 // Emit a single byte. Must always be inlined. | 231 // Emit a single byte. Must always be inlined. |
| 232 #define EMIT(x) \ | 232 #define EMIT(x) \ |
| 233 *pc_++ = (x) | 233 *pc_++ = (x) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 253 | 253 |
| 254 #ifdef GENERATED_CODE_COVERAGE | 254 #ifdef GENERATED_CODE_COVERAGE |
| 255 InitCoverageLog(); | 255 InitCoverageLog(); |
| 256 #endif | 256 #endif |
| 257 } | 257 } |
| 258 | 258 |
| 259 | 259 |
| 260 void Assembler::GetCode(CodeDesc* desc) { | 260 void Assembler::GetCode(CodeDesc* desc) { |
| 261 // Finalize code (at this point overflow() may be true, but the gap ensures | 261 // Finalize code (at this point overflow() may be true, but the gap ensures |
| 262 // that we are still not overlapping instructions and relocation info). | 262 // that we are still not overlapping instructions and relocation info). |
| 263 ASSERT(pc_ <= reloc_info_writer.pos()); // No overlap. | 263 DCHECK(pc_ <= reloc_info_writer.pos()); // No overlap. |
| 264 // Set up code descriptor. | 264 // Set up code descriptor. |
| 265 desc->buffer = buffer_; | 265 desc->buffer = buffer_; |
| 266 desc->buffer_size = buffer_size_; | 266 desc->buffer_size = buffer_size_; |
| 267 desc->instr_size = pc_offset(); | 267 desc->instr_size = pc_offset(); |
| 268 desc->reloc_size = (buffer_ + buffer_size_) - reloc_info_writer.pos(); | 268 desc->reloc_size = (buffer_ + buffer_size_) - reloc_info_writer.pos(); |
| 269 desc->origin = this; | 269 desc->origin = this; |
| 270 } | 270 } |
| 271 | 271 |
| 272 | 272 |
| 273 void Assembler::Align(int m) { | 273 void Assembler::Align(int m) { |
| 274 ASSERT(IsPowerOf2(m)); | 274 DCHECK(IsPowerOf2(m)); |
| 275 int mask = m - 1; | 275 int mask = m - 1; |
| 276 int addr = pc_offset(); | 276 int addr = pc_offset(); |
| 277 Nop((m - (addr & mask)) & mask); | 277 Nop((m - (addr & mask)) & mask); |
| 278 } | 278 } |
| 279 | 279 |
| 280 | 280 |
| 281 bool Assembler::IsNop(Address addr) { | 281 bool Assembler::IsNop(Address addr) { |
| 282 Address a = addr; | 282 Address a = addr; |
| 283 while (*a == 0x66) a++; | 283 while (*a == 0x66) a++; |
| 284 if (*a == 0x90) return true; | 284 if (*a == 0x90) return true; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 | 414 |
| 415 | 415 |
| 416 void Assembler::push(const Operand& src) { | 416 void Assembler::push(const Operand& src) { |
| 417 EnsureSpace ensure_space(this); | 417 EnsureSpace ensure_space(this); |
| 418 EMIT(0xFF); | 418 EMIT(0xFF); |
| 419 emit_operand(esi, src); | 419 emit_operand(esi, src); |
| 420 } | 420 } |
| 421 | 421 |
| 422 | 422 |
| 423 void Assembler::pop(Register dst) { | 423 void Assembler::pop(Register dst) { |
| 424 ASSERT(reloc_info_writer.last_pc() != NULL); | 424 DCHECK(reloc_info_writer.last_pc() != NULL); |
| 425 EnsureSpace ensure_space(this); | 425 EnsureSpace ensure_space(this); |
| 426 EMIT(0x58 | dst.code()); | 426 EMIT(0x58 | dst.code()); |
| 427 } | 427 } |
| 428 | 428 |
| 429 | 429 |
| 430 void Assembler::pop(const Operand& dst) { | 430 void Assembler::pop(const Operand& dst) { |
| 431 EnsureSpace ensure_space(this); | 431 EnsureSpace ensure_space(this); |
| 432 EMIT(0x8F); | 432 EMIT(0x8F); |
| 433 emit_operand(eax, dst); | 433 emit_operand(eax, dst); |
| 434 } | 434 } |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 | 662 |
| 663 | 663 |
| 664 void Assembler::add(const Operand& dst, Register src) { | 664 void Assembler::add(const Operand& dst, Register src) { |
| 665 EnsureSpace ensure_space(this); | 665 EnsureSpace ensure_space(this); |
| 666 EMIT(0x01); | 666 EMIT(0x01); |
| 667 emit_operand(src, dst); | 667 emit_operand(src, dst); |
| 668 } | 668 } |
| 669 | 669 |
| 670 | 670 |
| 671 void Assembler::add(const Operand& dst, const Immediate& x) { | 671 void Assembler::add(const Operand& dst, const Immediate& x) { |
| 672 ASSERT(reloc_info_writer.last_pc() != NULL); | 672 DCHECK(reloc_info_writer.last_pc() != NULL); |
| 673 EnsureSpace ensure_space(this); | 673 EnsureSpace ensure_space(this); |
| 674 emit_arith(0, dst, x); | 674 emit_arith(0, dst, x); |
| 675 } | 675 } |
| 676 | 676 |
| 677 | 677 |
| 678 void Assembler::and_(Register dst, int32_t imm32) { | 678 void Assembler::and_(Register dst, int32_t imm32) { |
| 679 and_(dst, Immediate(imm32)); | 679 and_(dst, Immediate(imm32)); |
| 680 } | 680 } |
| 681 | 681 |
| 682 | 682 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 | 728 |
| 729 void Assembler::cmpb(Register reg, const Operand& op) { | 729 void Assembler::cmpb(Register reg, const Operand& op) { |
| 730 CHECK(reg.is_byte_register()); | 730 CHECK(reg.is_byte_register()); |
| 731 EnsureSpace ensure_space(this); | 731 EnsureSpace ensure_space(this); |
| 732 EMIT(0x3A); | 732 EMIT(0x3A); |
| 733 emit_operand(reg, op); | 733 emit_operand(reg, op); |
| 734 } | 734 } |
| 735 | 735 |
| 736 | 736 |
| 737 void Assembler::cmpw(const Operand& op, Immediate imm16) { | 737 void Assembler::cmpw(const Operand& op, Immediate imm16) { |
| 738 ASSERT(imm16.is_int16()); | 738 DCHECK(imm16.is_int16()); |
| 739 EnsureSpace ensure_space(this); | 739 EnsureSpace ensure_space(this); |
| 740 EMIT(0x66); | 740 EMIT(0x66); |
| 741 EMIT(0x81); | 741 EMIT(0x81); |
| 742 emit_operand(edi, op); | 742 emit_operand(edi, op); |
| 743 emit_w(imm16); | 743 emit_w(imm16); |
| 744 } | 744 } |
| 745 | 745 |
| 746 | 746 |
| 747 void Assembler::cmp(Register reg, int32_t imm32) { | 747 void Assembler::cmp(Register reg, int32_t imm32) { |
| 748 EnsureSpace ensure_space(this); | 748 EnsureSpace ensure_space(this); |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 | 948 |
| 949 void Assembler::or_(const Operand& dst, Register src) { | 949 void Assembler::or_(const Operand& dst, Register src) { |
| 950 EnsureSpace ensure_space(this); | 950 EnsureSpace ensure_space(this); |
| 951 EMIT(0x09); | 951 EMIT(0x09); |
| 952 emit_operand(src, dst); | 952 emit_operand(src, dst); |
| 953 } | 953 } |
| 954 | 954 |
| 955 | 955 |
| 956 void Assembler::rcl(Register dst, uint8_t imm8) { | 956 void Assembler::rcl(Register dst, uint8_t imm8) { |
| 957 EnsureSpace ensure_space(this); | 957 EnsureSpace ensure_space(this); |
| 958 ASSERT(is_uint5(imm8)); // illegal shift count | 958 DCHECK(is_uint5(imm8)); // illegal shift count |
| 959 if (imm8 == 1) { | 959 if (imm8 == 1) { |
| 960 EMIT(0xD1); | 960 EMIT(0xD1); |
| 961 EMIT(0xD0 | dst.code()); | 961 EMIT(0xD0 | dst.code()); |
| 962 } else { | 962 } else { |
| 963 EMIT(0xC1); | 963 EMIT(0xC1); |
| 964 EMIT(0xD0 | dst.code()); | 964 EMIT(0xD0 | dst.code()); |
| 965 EMIT(imm8); | 965 EMIT(imm8); |
| 966 } | 966 } |
| 967 } | 967 } |
| 968 | 968 |
| 969 | 969 |
| 970 void Assembler::rcr(Register dst, uint8_t imm8) { | 970 void Assembler::rcr(Register dst, uint8_t imm8) { |
| 971 EnsureSpace ensure_space(this); | 971 EnsureSpace ensure_space(this); |
| 972 ASSERT(is_uint5(imm8)); // illegal shift count | 972 DCHECK(is_uint5(imm8)); // illegal shift count |
| 973 if (imm8 == 1) { | 973 if (imm8 == 1) { |
| 974 EMIT(0xD1); | 974 EMIT(0xD1); |
| 975 EMIT(0xD8 | dst.code()); | 975 EMIT(0xD8 | dst.code()); |
| 976 } else { | 976 } else { |
| 977 EMIT(0xC1); | 977 EMIT(0xC1); |
| 978 EMIT(0xD8 | dst.code()); | 978 EMIT(0xD8 | dst.code()); |
| 979 EMIT(imm8); | 979 EMIT(imm8); |
| 980 } | 980 } |
| 981 } | 981 } |
| 982 | 982 |
| 983 | 983 |
| 984 void Assembler::ror(Register dst, uint8_t imm8) { | 984 void Assembler::ror(Register dst, uint8_t imm8) { |
| 985 EnsureSpace ensure_space(this); | 985 EnsureSpace ensure_space(this); |
| 986 ASSERT(is_uint5(imm8)); // illegal shift count | 986 DCHECK(is_uint5(imm8)); // illegal shift count |
| 987 if (imm8 == 1) { | 987 if (imm8 == 1) { |
| 988 EMIT(0xD1); | 988 EMIT(0xD1); |
| 989 EMIT(0xC8 | dst.code()); | 989 EMIT(0xC8 | dst.code()); |
| 990 } else { | 990 } else { |
| 991 EMIT(0xC1); | 991 EMIT(0xC1); |
| 992 EMIT(0xC8 | dst.code()); | 992 EMIT(0xC8 | dst.code()); |
| 993 EMIT(imm8); | 993 EMIT(imm8); |
| 994 } | 994 } |
| 995 } | 995 } |
| 996 | 996 |
| 997 | 997 |
| 998 void Assembler::ror_cl(Register dst) { | 998 void Assembler::ror_cl(Register dst) { |
| 999 EnsureSpace ensure_space(this); | 999 EnsureSpace ensure_space(this); |
| 1000 EMIT(0xD3); | 1000 EMIT(0xD3); |
| 1001 EMIT(0xC8 | dst.code()); | 1001 EMIT(0xC8 | dst.code()); |
| 1002 } | 1002 } |
| 1003 | 1003 |
| 1004 | 1004 |
| 1005 void Assembler::sar(const Operand& dst, uint8_t imm8) { | 1005 void Assembler::sar(const Operand& dst, uint8_t imm8) { |
| 1006 EnsureSpace ensure_space(this); | 1006 EnsureSpace ensure_space(this); |
| 1007 ASSERT(is_uint5(imm8)); // illegal shift count | 1007 DCHECK(is_uint5(imm8)); // illegal shift count |
| 1008 if (imm8 == 1) { | 1008 if (imm8 == 1) { |
| 1009 EMIT(0xD1); | 1009 EMIT(0xD1); |
| 1010 emit_operand(edi, dst); | 1010 emit_operand(edi, dst); |
| 1011 } else { | 1011 } else { |
| 1012 EMIT(0xC1); | 1012 EMIT(0xC1); |
| 1013 emit_operand(edi, dst); | 1013 emit_operand(edi, dst); |
| 1014 EMIT(imm8); | 1014 EMIT(imm8); |
| 1015 } | 1015 } |
| 1016 } | 1016 } |
| 1017 | 1017 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1033 void Assembler::shld(Register dst, const Operand& src) { | 1033 void Assembler::shld(Register dst, const Operand& src) { |
| 1034 EnsureSpace ensure_space(this); | 1034 EnsureSpace ensure_space(this); |
| 1035 EMIT(0x0F); | 1035 EMIT(0x0F); |
| 1036 EMIT(0xA5); | 1036 EMIT(0xA5); |
| 1037 emit_operand(dst, src); | 1037 emit_operand(dst, src); |
| 1038 } | 1038 } |
| 1039 | 1039 |
| 1040 | 1040 |
| 1041 void Assembler::shl(const Operand& dst, uint8_t imm8) { | 1041 void Assembler::shl(const Operand& dst, uint8_t imm8) { |
| 1042 EnsureSpace ensure_space(this); | 1042 EnsureSpace ensure_space(this); |
| 1043 ASSERT(is_uint5(imm8)); // illegal shift count | 1043 DCHECK(is_uint5(imm8)); // illegal shift count |
| 1044 if (imm8 == 1) { | 1044 if (imm8 == 1) { |
| 1045 EMIT(0xD1); | 1045 EMIT(0xD1); |
| 1046 emit_operand(esp, dst); | 1046 emit_operand(esp, dst); |
| 1047 } else { | 1047 } else { |
| 1048 EMIT(0xC1); | 1048 EMIT(0xC1); |
| 1049 emit_operand(esp, dst); | 1049 emit_operand(esp, dst); |
| 1050 EMIT(imm8); | 1050 EMIT(imm8); |
| 1051 } | 1051 } |
| 1052 } | 1052 } |
| 1053 | 1053 |
| 1054 | 1054 |
| 1055 void Assembler::shl_cl(const Operand& dst) { | 1055 void Assembler::shl_cl(const Operand& dst) { |
| 1056 EnsureSpace ensure_space(this); | 1056 EnsureSpace ensure_space(this); |
| 1057 EMIT(0xD3); | 1057 EMIT(0xD3); |
| 1058 emit_operand(esp, dst); | 1058 emit_operand(esp, dst); |
| 1059 } | 1059 } |
| 1060 | 1060 |
| 1061 | 1061 |
| 1062 void Assembler::shrd(Register dst, const Operand& src) { | 1062 void Assembler::shrd(Register dst, const Operand& src) { |
| 1063 EnsureSpace ensure_space(this); | 1063 EnsureSpace ensure_space(this); |
| 1064 EMIT(0x0F); | 1064 EMIT(0x0F); |
| 1065 EMIT(0xAD); | 1065 EMIT(0xAD); |
| 1066 emit_operand(dst, src); | 1066 emit_operand(dst, src); |
| 1067 } | 1067 } |
| 1068 | 1068 |
| 1069 | 1069 |
| 1070 void Assembler::shr(const Operand& dst, uint8_t imm8) { | 1070 void Assembler::shr(const Operand& dst, uint8_t imm8) { |
| 1071 EnsureSpace ensure_space(this); | 1071 EnsureSpace ensure_space(this); |
| 1072 ASSERT(is_uint5(imm8)); // illegal shift count | 1072 DCHECK(is_uint5(imm8)); // illegal shift count |
| 1073 if (imm8 == 1) { | 1073 if (imm8 == 1) { |
| 1074 EMIT(0xD1); | 1074 EMIT(0xD1); |
| 1075 emit_operand(ebp, dst); | 1075 emit_operand(ebp, dst); |
| 1076 } else { | 1076 } else { |
| 1077 EMIT(0xC1); | 1077 EMIT(0xC1); |
| 1078 emit_operand(ebp, dst); | 1078 emit_operand(ebp, dst); |
| 1079 EMIT(imm8); | 1079 EMIT(imm8); |
| 1080 } | 1080 } |
| 1081 } | 1081 } |
| 1082 | 1082 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1249 | 1249 |
| 1250 | 1250 |
| 1251 void Assembler::nop() { | 1251 void Assembler::nop() { |
| 1252 EnsureSpace ensure_space(this); | 1252 EnsureSpace ensure_space(this); |
| 1253 EMIT(0x90); | 1253 EMIT(0x90); |
| 1254 } | 1254 } |
| 1255 | 1255 |
| 1256 | 1256 |
| 1257 void Assembler::ret(int imm16) { | 1257 void Assembler::ret(int imm16) { |
| 1258 EnsureSpace ensure_space(this); | 1258 EnsureSpace ensure_space(this); |
| 1259 ASSERT(is_uint16(imm16)); | 1259 DCHECK(is_uint16(imm16)); |
| 1260 if (imm16 == 0) { | 1260 if (imm16 == 0) { |
| 1261 EMIT(0xC3); | 1261 EMIT(0xC3); |
| 1262 } else { | 1262 } else { |
| 1263 EMIT(0xC2); | 1263 EMIT(0xC2); |
| 1264 EMIT(imm16 & 0xFF); | 1264 EMIT(imm16 & 0xFF); |
| 1265 EMIT((imm16 >> 8) & 0xFF); | 1265 EMIT((imm16 >> 8) & 0xFF); |
| 1266 } | 1266 } |
| 1267 } | 1267 } |
| 1268 | 1268 |
| 1269 | 1269 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1294 disp.next(&l); | 1294 disp.next(&l); |
| 1295 } | 1295 } |
| 1296 } else { | 1296 } else { |
| 1297 PrintF("label in inconsistent state (pos = %d)\n", L->pos_); | 1297 PrintF("label in inconsistent state (pos = %d)\n", L->pos_); |
| 1298 } | 1298 } |
| 1299 } | 1299 } |
| 1300 | 1300 |
| 1301 | 1301 |
| 1302 void Assembler::bind_to(Label* L, int pos) { | 1302 void Assembler::bind_to(Label* L, int pos) { |
| 1303 EnsureSpace ensure_space(this); | 1303 EnsureSpace ensure_space(this); |
| 1304 ASSERT(0 <= pos && pos <= pc_offset()); // must have a valid binding position | 1304 DCHECK(0 <= pos && pos <= pc_offset()); // must have a valid binding position |
| 1305 while (L->is_linked()) { | 1305 while (L->is_linked()) { |
| 1306 Displacement disp = disp_at(L); | 1306 Displacement disp = disp_at(L); |
| 1307 int fixup_pos = L->pos(); | 1307 int fixup_pos = L->pos(); |
| 1308 if (disp.type() == Displacement::CODE_RELATIVE) { | 1308 if (disp.type() == Displacement::CODE_RELATIVE) { |
| 1309 // Relative to Code* heap object pointer. | 1309 // Relative to Code* heap object pointer. |
| 1310 long_at_put(fixup_pos, pos + Code::kHeaderSize - kHeapObjectTag); | 1310 long_at_put(fixup_pos, pos + Code::kHeaderSize - kHeapObjectTag); |
| 1311 } else { | 1311 } else { |
| 1312 if (disp.type() == Displacement::UNCONDITIONAL_JUMP) { | 1312 if (disp.type() == Displacement::UNCONDITIONAL_JUMP) { |
| 1313 ASSERT(byte_at(fixup_pos - 1) == 0xE9); // jmp expected | 1313 DCHECK(byte_at(fixup_pos - 1) == 0xE9); // jmp expected |
| 1314 } | 1314 } |
| 1315 // Relative address, relative to point after address. | 1315 // Relative address, relative to point after address. |
| 1316 int imm32 = pos - (fixup_pos + sizeof(int32_t)); | 1316 int imm32 = pos - (fixup_pos + sizeof(int32_t)); |
| 1317 long_at_put(fixup_pos, imm32); | 1317 long_at_put(fixup_pos, imm32); |
| 1318 } | 1318 } |
| 1319 disp.next(L); | 1319 disp.next(L); |
| 1320 } | 1320 } |
| 1321 while (L->is_near_linked()) { | 1321 while (L->is_near_linked()) { |
| 1322 int fixup_pos = L->near_link_pos(); | 1322 int fixup_pos = L->near_link_pos(); |
| 1323 int offset_to_next = | 1323 int offset_to_next = |
| 1324 static_cast<int>(*reinterpret_cast<int8_t*>(addr_at(fixup_pos))); | 1324 static_cast<int>(*reinterpret_cast<int8_t*>(addr_at(fixup_pos))); |
| 1325 ASSERT(offset_to_next <= 0); | 1325 DCHECK(offset_to_next <= 0); |
| 1326 // Relative address, relative to point after address. | 1326 // Relative address, relative to point after address. |
| 1327 int disp = pos - fixup_pos - sizeof(int8_t); | 1327 int disp = pos - fixup_pos - sizeof(int8_t); |
| 1328 CHECK(0 <= disp && disp <= 127); | 1328 CHECK(0 <= disp && disp <= 127); |
| 1329 set_byte_at(fixup_pos, disp); | 1329 set_byte_at(fixup_pos, disp); |
| 1330 if (offset_to_next < 0) { | 1330 if (offset_to_next < 0) { |
| 1331 L->link_to(fixup_pos + offset_to_next, Label::kNear); | 1331 L->link_to(fixup_pos + offset_to_next, Label::kNear); |
| 1332 } else { | 1332 } else { |
| 1333 L->UnuseNear(); | 1333 L->UnuseNear(); |
| 1334 } | 1334 } |
| 1335 } | 1335 } |
| 1336 L->bind_to(pos); | 1336 L->bind_to(pos); |
| 1337 } | 1337 } |
| 1338 | 1338 |
| 1339 | 1339 |
| 1340 void Assembler::bind(Label* L) { | 1340 void Assembler::bind(Label* L) { |
| 1341 EnsureSpace ensure_space(this); | 1341 EnsureSpace ensure_space(this); |
| 1342 ASSERT(!L->is_bound()); // label can only be bound once | 1342 DCHECK(!L->is_bound()); // label can only be bound once |
| 1343 bind_to(L, pc_offset()); | 1343 bind_to(L, pc_offset()); |
| 1344 } | 1344 } |
| 1345 | 1345 |
| 1346 | 1346 |
| 1347 void Assembler::call(Label* L) { | 1347 void Assembler::call(Label* L) { |
| 1348 positions_recorder()->WriteRecordedPositions(); | 1348 positions_recorder()->WriteRecordedPositions(); |
| 1349 EnsureSpace ensure_space(this); | 1349 EnsureSpace ensure_space(this); |
| 1350 if (L->is_bound()) { | 1350 if (L->is_bound()) { |
| 1351 const int long_size = 5; | 1351 const int long_size = 5; |
| 1352 int offs = L->pos() - pc_offset(); | 1352 int offs = L->pos() - pc_offset(); |
| 1353 ASSERT(offs <= 0); | 1353 DCHECK(offs <= 0); |
| 1354 // 1110 1000 #32-bit disp. | 1354 // 1110 1000 #32-bit disp. |
| 1355 EMIT(0xE8); | 1355 EMIT(0xE8); |
| 1356 emit(offs - long_size); | 1356 emit(offs - long_size); |
| 1357 } else { | 1357 } else { |
| 1358 // 1110 1000 #32-bit disp. | 1358 // 1110 1000 #32-bit disp. |
| 1359 EMIT(0xE8); | 1359 EMIT(0xE8); |
| 1360 emit_disp(L, Displacement::OTHER); | 1360 emit_disp(L, Displacement::OTHER); |
| 1361 } | 1361 } |
| 1362 } | 1362 } |
| 1363 | 1363 |
| 1364 | 1364 |
| 1365 void Assembler::call(byte* entry, RelocInfo::Mode rmode) { | 1365 void Assembler::call(byte* entry, RelocInfo::Mode rmode) { |
| 1366 positions_recorder()->WriteRecordedPositions(); | 1366 positions_recorder()->WriteRecordedPositions(); |
| 1367 EnsureSpace ensure_space(this); | 1367 EnsureSpace ensure_space(this); |
| 1368 ASSERT(!RelocInfo::IsCodeTarget(rmode)); | 1368 DCHECK(!RelocInfo::IsCodeTarget(rmode)); |
| 1369 EMIT(0xE8); | 1369 EMIT(0xE8); |
| 1370 if (RelocInfo::IsRuntimeEntry(rmode)) { | 1370 if (RelocInfo::IsRuntimeEntry(rmode)) { |
| 1371 emit(reinterpret_cast<uint32_t>(entry), rmode); | 1371 emit(reinterpret_cast<uint32_t>(entry), rmode); |
| 1372 } else { | 1372 } else { |
| 1373 emit(entry - (pc_ + sizeof(int32_t)), rmode); | 1373 emit(entry - (pc_ + sizeof(int32_t)), rmode); |
| 1374 } | 1374 } |
| 1375 } | 1375 } |
| 1376 | 1376 |
| 1377 | 1377 |
| 1378 int Assembler::CallSize(const Operand& adr) { | 1378 int Assembler::CallSize(const Operand& adr) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1392 int Assembler::CallSize(Handle<Code> code, RelocInfo::Mode rmode) { | 1392 int Assembler::CallSize(Handle<Code> code, RelocInfo::Mode rmode) { |
| 1393 return 1 /* EMIT */ + sizeof(uint32_t) /* emit */; | 1393 return 1 /* EMIT */ + sizeof(uint32_t) /* emit */; |
| 1394 } | 1394 } |
| 1395 | 1395 |
| 1396 | 1396 |
| 1397 void Assembler::call(Handle<Code> code, | 1397 void Assembler::call(Handle<Code> code, |
| 1398 RelocInfo::Mode rmode, | 1398 RelocInfo::Mode rmode, |
| 1399 TypeFeedbackId ast_id) { | 1399 TypeFeedbackId ast_id) { |
| 1400 positions_recorder()->WriteRecordedPositions(); | 1400 positions_recorder()->WriteRecordedPositions(); |
| 1401 EnsureSpace ensure_space(this); | 1401 EnsureSpace ensure_space(this); |
| 1402 ASSERT(RelocInfo::IsCodeTarget(rmode) | 1402 DCHECK(RelocInfo::IsCodeTarget(rmode) |
| 1403 || rmode == RelocInfo::CODE_AGE_SEQUENCE); | 1403 || rmode == RelocInfo::CODE_AGE_SEQUENCE); |
| 1404 EMIT(0xE8); | 1404 EMIT(0xE8); |
| 1405 emit(code, rmode, ast_id); | 1405 emit(code, rmode, ast_id); |
| 1406 } | 1406 } |
| 1407 | 1407 |
| 1408 | 1408 |
| 1409 void Assembler::jmp(Label* L, Label::Distance distance) { | 1409 void Assembler::jmp(Label* L, Label::Distance distance) { |
| 1410 EnsureSpace ensure_space(this); | 1410 EnsureSpace ensure_space(this); |
| 1411 if (L->is_bound()) { | 1411 if (L->is_bound()) { |
| 1412 const int short_size = 2; | 1412 const int short_size = 2; |
| 1413 const int long_size = 5; | 1413 const int long_size = 5; |
| 1414 int offs = L->pos() - pc_offset(); | 1414 int offs = L->pos() - pc_offset(); |
| 1415 ASSERT(offs <= 0); | 1415 DCHECK(offs <= 0); |
| 1416 if (is_int8(offs - short_size)) { | 1416 if (is_int8(offs - short_size)) { |
| 1417 // 1110 1011 #8-bit disp. | 1417 // 1110 1011 #8-bit disp. |
| 1418 EMIT(0xEB); | 1418 EMIT(0xEB); |
| 1419 EMIT((offs - short_size) & 0xFF); | 1419 EMIT((offs - short_size) & 0xFF); |
| 1420 } else { | 1420 } else { |
| 1421 // 1110 1001 #32-bit disp. | 1421 // 1110 1001 #32-bit disp. |
| 1422 EMIT(0xE9); | 1422 EMIT(0xE9); |
| 1423 emit(offs - long_size); | 1423 emit(offs - long_size); |
| 1424 } | 1424 } |
| 1425 } else if (distance == Label::kNear) { | 1425 } else if (distance == Label::kNear) { |
| 1426 EMIT(0xEB); | 1426 EMIT(0xEB); |
| 1427 emit_near_disp(L); | 1427 emit_near_disp(L); |
| 1428 } else { | 1428 } else { |
| 1429 // 1110 1001 #32-bit disp. | 1429 // 1110 1001 #32-bit disp. |
| 1430 EMIT(0xE9); | 1430 EMIT(0xE9); |
| 1431 emit_disp(L, Displacement::UNCONDITIONAL_JUMP); | 1431 emit_disp(L, Displacement::UNCONDITIONAL_JUMP); |
| 1432 } | 1432 } |
| 1433 } | 1433 } |
| 1434 | 1434 |
| 1435 | 1435 |
| 1436 void Assembler::jmp(byte* entry, RelocInfo::Mode rmode) { | 1436 void Assembler::jmp(byte* entry, RelocInfo::Mode rmode) { |
| 1437 EnsureSpace ensure_space(this); | 1437 EnsureSpace ensure_space(this); |
| 1438 ASSERT(!RelocInfo::IsCodeTarget(rmode)); | 1438 DCHECK(!RelocInfo::IsCodeTarget(rmode)); |
| 1439 EMIT(0xE9); | 1439 EMIT(0xE9); |
| 1440 if (RelocInfo::IsRuntimeEntry(rmode)) { | 1440 if (RelocInfo::IsRuntimeEntry(rmode)) { |
| 1441 emit(reinterpret_cast<uint32_t>(entry), rmode); | 1441 emit(reinterpret_cast<uint32_t>(entry), rmode); |
| 1442 } else { | 1442 } else { |
| 1443 emit(entry - (pc_ + sizeof(int32_t)), rmode); | 1443 emit(entry - (pc_ + sizeof(int32_t)), rmode); |
| 1444 } | 1444 } |
| 1445 } | 1445 } |
| 1446 | 1446 |
| 1447 | 1447 |
| 1448 void Assembler::jmp(const Operand& adr) { | 1448 void Assembler::jmp(const Operand& adr) { |
| 1449 EnsureSpace ensure_space(this); | 1449 EnsureSpace ensure_space(this); |
| 1450 EMIT(0xFF); | 1450 EMIT(0xFF); |
| 1451 emit_operand(esp, adr); | 1451 emit_operand(esp, adr); |
| 1452 } | 1452 } |
| 1453 | 1453 |
| 1454 | 1454 |
| 1455 void Assembler::jmp(Handle<Code> code, RelocInfo::Mode rmode) { | 1455 void Assembler::jmp(Handle<Code> code, RelocInfo::Mode rmode) { |
| 1456 EnsureSpace ensure_space(this); | 1456 EnsureSpace ensure_space(this); |
| 1457 ASSERT(RelocInfo::IsCodeTarget(rmode)); | 1457 DCHECK(RelocInfo::IsCodeTarget(rmode)); |
| 1458 EMIT(0xE9); | 1458 EMIT(0xE9); |
| 1459 emit(code, rmode); | 1459 emit(code, rmode); |
| 1460 } | 1460 } |
| 1461 | 1461 |
| 1462 | 1462 |
| 1463 void Assembler::j(Condition cc, Label* L, Label::Distance distance) { | 1463 void Assembler::j(Condition cc, Label* L, Label::Distance distance) { |
| 1464 EnsureSpace ensure_space(this); | 1464 EnsureSpace ensure_space(this); |
| 1465 ASSERT(0 <= cc && static_cast<int>(cc) < 16); | 1465 DCHECK(0 <= cc && static_cast<int>(cc) < 16); |
| 1466 if (L->is_bound()) { | 1466 if (L->is_bound()) { |
| 1467 const int short_size = 2; | 1467 const int short_size = 2; |
| 1468 const int long_size = 6; | 1468 const int long_size = 6; |
| 1469 int offs = L->pos() - pc_offset(); | 1469 int offs = L->pos() - pc_offset(); |
| 1470 ASSERT(offs <= 0); | 1470 DCHECK(offs <= 0); |
| 1471 if (is_int8(offs - short_size)) { | 1471 if (is_int8(offs - short_size)) { |
| 1472 // 0111 tttn #8-bit disp | 1472 // 0111 tttn #8-bit disp |
| 1473 EMIT(0x70 | cc); | 1473 EMIT(0x70 | cc); |
| 1474 EMIT((offs - short_size) & 0xFF); | 1474 EMIT((offs - short_size) & 0xFF); |
| 1475 } else { | 1475 } else { |
| 1476 // 0000 1111 1000 tttn #32-bit disp | 1476 // 0000 1111 1000 tttn #32-bit disp |
| 1477 EMIT(0x0F); | 1477 EMIT(0x0F); |
| 1478 EMIT(0x80 | cc); | 1478 EMIT(0x80 | cc); |
| 1479 emit(offs - long_size); | 1479 emit(offs - long_size); |
| 1480 } | 1480 } |
| 1481 } else if (distance == Label::kNear) { | 1481 } else if (distance == Label::kNear) { |
| 1482 EMIT(0x70 | cc); | 1482 EMIT(0x70 | cc); |
| 1483 emit_near_disp(L); | 1483 emit_near_disp(L); |
| 1484 } else { | 1484 } else { |
| 1485 // 0000 1111 1000 tttn #32-bit disp | 1485 // 0000 1111 1000 tttn #32-bit disp |
| 1486 // Note: could eliminate cond. jumps to this jump if condition | 1486 // Note: could eliminate cond. jumps to this jump if condition |
| 1487 // is the same however, seems to be rather unlikely case. | 1487 // is the same however, seems to be rather unlikely case. |
| 1488 EMIT(0x0F); | 1488 EMIT(0x0F); |
| 1489 EMIT(0x80 | cc); | 1489 EMIT(0x80 | cc); |
| 1490 emit_disp(L, Displacement::OTHER); | 1490 emit_disp(L, Displacement::OTHER); |
| 1491 } | 1491 } |
| 1492 } | 1492 } |
| 1493 | 1493 |
| 1494 | 1494 |
| 1495 void Assembler::j(Condition cc, byte* entry, RelocInfo::Mode rmode) { | 1495 void Assembler::j(Condition cc, byte* entry, RelocInfo::Mode rmode) { |
| 1496 EnsureSpace ensure_space(this); | 1496 EnsureSpace ensure_space(this); |
| 1497 ASSERT((0 <= cc) && (static_cast<int>(cc) < 16)); | 1497 DCHECK((0 <= cc) && (static_cast<int>(cc) < 16)); |
| 1498 // 0000 1111 1000 tttn #32-bit disp. | 1498 // 0000 1111 1000 tttn #32-bit disp. |
| 1499 EMIT(0x0F); | 1499 EMIT(0x0F); |
| 1500 EMIT(0x80 | cc); | 1500 EMIT(0x80 | cc); |
| 1501 if (RelocInfo::IsRuntimeEntry(rmode)) { | 1501 if (RelocInfo::IsRuntimeEntry(rmode)) { |
| 1502 emit(reinterpret_cast<uint32_t>(entry), rmode); | 1502 emit(reinterpret_cast<uint32_t>(entry), rmode); |
| 1503 } else { | 1503 } else { |
| 1504 emit(entry - (pc_ + sizeof(int32_t)), rmode); | 1504 emit(entry - (pc_ + sizeof(int32_t)), rmode); |
| 1505 } | 1505 } |
| 1506 } | 1506 } |
| 1507 | 1507 |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 | 1614 |
| 1615 | 1615 |
| 1616 void Assembler::fistp_s(const Operand& adr) { | 1616 void Assembler::fistp_s(const Operand& adr) { |
| 1617 EnsureSpace ensure_space(this); | 1617 EnsureSpace ensure_space(this); |
| 1618 EMIT(0xDB); | 1618 EMIT(0xDB); |
| 1619 emit_operand(ebx, adr); | 1619 emit_operand(ebx, adr); |
| 1620 } | 1620 } |
| 1621 | 1621 |
| 1622 | 1622 |
| 1623 void Assembler::fisttp_s(const Operand& adr) { | 1623 void Assembler::fisttp_s(const Operand& adr) { |
| 1624 ASSERT(IsEnabled(SSE3)); | 1624 DCHECK(IsEnabled(SSE3)); |
| 1625 EnsureSpace ensure_space(this); | 1625 EnsureSpace ensure_space(this); |
| 1626 EMIT(0xDB); | 1626 EMIT(0xDB); |
| 1627 emit_operand(ecx, adr); | 1627 emit_operand(ecx, adr); |
| 1628 } | 1628 } |
| 1629 | 1629 |
| 1630 | 1630 |
| 1631 void Assembler::fisttp_d(const Operand& adr) { | 1631 void Assembler::fisttp_d(const Operand& adr) { |
| 1632 ASSERT(IsEnabled(SSE3)); | 1632 DCHECK(IsEnabled(SSE3)); |
| 1633 EnsureSpace ensure_space(this); | 1633 EnsureSpace ensure_space(this); |
| 1634 EMIT(0xDD); | 1634 EMIT(0xDD); |
| 1635 emit_operand(ecx, adr); | 1635 emit_operand(ecx, adr); |
| 1636 } | 1636 } |
| 1637 | 1637 |
| 1638 | 1638 |
| 1639 void Assembler::fist_s(const Operand& adr) { | 1639 void Assembler::fist_s(const Operand& adr) { |
| 1640 EnsureSpace ensure_space(this); | 1640 EnsureSpace ensure_space(this); |
| 1641 EMIT(0xDB); | 1641 EMIT(0xDB); |
| 1642 emit_operand(edx, adr); | 1642 emit_operand(edx, adr); |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1899 } | 1899 } |
| 1900 | 1900 |
| 1901 | 1901 |
| 1902 void Assembler::sahf() { | 1902 void Assembler::sahf() { |
| 1903 EnsureSpace ensure_space(this); | 1903 EnsureSpace ensure_space(this); |
| 1904 EMIT(0x9E); | 1904 EMIT(0x9E); |
| 1905 } | 1905 } |
| 1906 | 1906 |
| 1907 | 1907 |
| 1908 void Assembler::setcc(Condition cc, Register reg) { | 1908 void Assembler::setcc(Condition cc, Register reg) { |
| 1909 ASSERT(reg.is_byte_register()); | 1909 DCHECK(reg.is_byte_register()); |
| 1910 EnsureSpace ensure_space(this); | 1910 EnsureSpace ensure_space(this); |
| 1911 EMIT(0x0F); | 1911 EMIT(0x0F); |
| 1912 EMIT(0x90 | cc); | 1912 EMIT(0x90 | cc); |
| 1913 EMIT(0xC0 | reg.code()); | 1913 EMIT(0xC0 | reg.code()); |
| 1914 } | 1914 } |
| 1915 | 1915 |
| 1916 | 1916 |
| 1917 void Assembler::cvttss2si(Register dst, const Operand& src) { | 1917 void Assembler::cvttss2si(Register dst, const Operand& src) { |
| 1918 EnsureSpace ensure_space(this); | 1918 EnsureSpace ensure_space(this); |
| 1919 EMIT(0xF3); | 1919 EMIT(0xF3); |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2126 void Assembler::ucomisd(XMMRegister dst, const Operand& src) { | 2126 void Assembler::ucomisd(XMMRegister dst, const Operand& src) { |
| 2127 EnsureSpace ensure_space(this); | 2127 EnsureSpace ensure_space(this); |
| 2128 EMIT(0x66); | 2128 EMIT(0x66); |
| 2129 EMIT(0x0F); | 2129 EMIT(0x0F); |
| 2130 EMIT(0x2E); | 2130 EMIT(0x2E); |
| 2131 emit_sse_operand(dst, src); | 2131 emit_sse_operand(dst, src); |
| 2132 } | 2132 } |
| 2133 | 2133 |
| 2134 | 2134 |
| 2135 void Assembler::roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode) { | 2135 void Assembler::roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode) { |
| 2136 ASSERT(IsEnabled(SSE4_1)); | 2136 DCHECK(IsEnabled(SSE4_1)); |
| 2137 EnsureSpace ensure_space(this); | 2137 EnsureSpace ensure_space(this); |
| 2138 EMIT(0x66); | 2138 EMIT(0x66); |
| 2139 EMIT(0x0F); | 2139 EMIT(0x0F); |
| 2140 EMIT(0x3A); | 2140 EMIT(0x3A); |
| 2141 EMIT(0x0B); | 2141 EMIT(0x0B); |
| 2142 emit_sse_operand(dst, src); | 2142 emit_sse_operand(dst, src); |
| 2143 // Mask precision exeption. | 2143 // Mask precision exeption. |
| 2144 EMIT(static_cast<byte>(mode) | 0x8); | 2144 EMIT(static_cast<byte>(mode) | 0x8); |
| 2145 } | 2145 } |
| 2146 | 2146 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2183 | 2183 |
| 2184 void Assembler::movaps(XMMRegister dst, XMMRegister src) { | 2184 void Assembler::movaps(XMMRegister dst, XMMRegister src) { |
| 2185 EnsureSpace ensure_space(this); | 2185 EnsureSpace ensure_space(this); |
| 2186 EMIT(0x0F); | 2186 EMIT(0x0F); |
| 2187 EMIT(0x28); | 2187 EMIT(0x28); |
| 2188 emit_sse_operand(dst, src); | 2188 emit_sse_operand(dst, src); |
| 2189 } | 2189 } |
| 2190 | 2190 |
| 2191 | 2191 |
| 2192 void Assembler::shufps(XMMRegister dst, XMMRegister src, byte imm8) { | 2192 void Assembler::shufps(XMMRegister dst, XMMRegister src, byte imm8) { |
| 2193 ASSERT(is_uint8(imm8)); | 2193 DCHECK(is_uint8(imm8)); |
| 2194 EnsureSpace ensure_space(this); | 2194 EnsureSpace ensure_space(this); |
| 2195 EMIT(0x0F); | 2195 EMIT(0x0F); |
| 2196 EMIT(0xC6); | 2196 EMIT(0xC6); |
| 2197 emit_sse_operand(dst, src); | 2197 emit_sse_operand(dst, src); |
| 2198 EMIT(imm8); | 2198 EMIT(imm8); |
| 2199 } | 2199 } |
| 2200 | 2200 |
| 2201 | 2201 |
| 2202 void Assembler::movdqa(const Operand& dst, XMMRegister src) { | 2202 void Assembler::movdqa(const Operand& dst, XMMRegister src) { |
| 2203 EnsureSpace ensure_space(this); | 2203 EnsureSpace ensure_space(this); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2229 void Assembler::movdqu(XMMRegister dst, const Operand& src) { | 2229 void Assembler::movdqu(XMMRegister dst, const Operand& src) { |
| 2230 EnsureSpace ensure_space(this); | 2230 EnsureSpace ensure_space(this); |
| 2231 EMIT(0xF3); | 2231 EMIT(0xF3); |
| 2232 EMIT(0x0F); | 2232 EMIT(0x0F); |
| 2233 EMIT(0x6F); | 2233 EMIT(0x6F); |
| 2234 emit_sse_operand(dst, src); | 2234 emit_sse_operand(dst, src); |
| 2235 } | 2235 } |
| 2236 | 2236 |
| 2237 | 2237 |
| 2238 void Assembler::movntdqa(XMMRegister dst, const Operand& src) { | 2238 void Assembler::movntdqa(XMMRegister dst, const Operand& src) { |
| 2239 ASSERT(IsEnabled(SSE4_1)); | 2239 DCHECK(IsEnabled(SSE4_1)); |
| 2240 EnsureSpace ensure_space(this); | 2240 EnsureSpace ensure_space(this); |
| 2241 EMIT(0x66); | 2241 EMIT(0x66); |
| 2242 EMIT(0x0F); | 2242 EMIT(0x0F); |
| 2243 EMIT(0x38); | 2243 EMIT(0x38); |
| 2244 EMIT(0x2A); | 2244 EMIT(0x2A); |
| 2245 emit_sse_operand(dst, src); | 2245 emit_sse_operand(dst, src); |
| 2246 } | 2246 } |
| 2247 | 2247 |
| 2248 | 2248 |
| 2249 void Assembler::movntdq(const Operand& dst, XMMRegister src) { | 2249 void Assembler::movntdq(const Operand& dst, XMMRegister src) { |
| 2250 EnsureSpace ensure_space(this); | 2250 EnsureSpace ensure_space(this); |
| 2251 EMIT(0x66); | 2251 EMIT(0x66); |
| 2252 EMIT(0x0F); | 2252 EMIT(0x0F); |
| 2253 EMIT(0xE7); | 2253 EMIT(0xE7); |
| 2254 emit_sse_operand(src, dst); | 2254 emit_sse_operand(src, dst); |
| 2255 } | 2255 } |
| 2256 | 2256 |
| 2257 | 2257 |
| 2258 void Assembler::prefetch(const Operand& src, int level) { | 2258 void Assembler::prefetch(const Operand& src, int level) { |
| 2259 ASSERT(is_uint2(level)); | 2259 DCHECK(is_uint2(level)); |
| 2260 EnsureSpace ensure_space(this); | 2260 EnsureSpace ensure_space(this); |
| 2261 EMIT(0x0F); | 2261 EMIT(0x0F); |
| 2262 EMIT(0x18); | 2262 EMIT(0x18); |
| 2263 // Emit hint number in Reg position of RegR/M. | 2263 // Emit hint number in Reg position of RegR/M. |
| 2264 XMMRegister code = XMMRegister::from_code(level); | 2264 XMMRegister code = XMMRegister::from_code(level); |
| 2265 emit_sse_operand(code, src); | 2265 emit_sse_operand(code, src); |
| 2266 } | 2266 } |
| 2267 | 2267 |
| 2268 | 2268 |
| 2269 void Assembler::movsd(const Operand& dst, XMMRegister src ) { | 2269 void Assembler::movsd(const Operand& dst, XMMRegister src ) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2314 void Assembler::movd(const Operand& dst, XMMRegister src) { | 2314 void Assembler::movd(const Operand& dst, XMMRegister src) { |
| 2315 EnsureSpace ensure_space(this); | 2315 EnsureSpace ensure_space(this); |
| 2316 EMIT(0x66); | 2316 EMIT(0x66); |
| 2317 EMIT(0x0F); | 2317 EMIT(0x0F); |
| 2318 EMIT(0x7E); | 2318 EMIT(0x7E); |
| 2319 emit_sse_operand(src, dst); | 2319 emit_sse_operand(src, dst); |
| 2320 } | 2320 } |
| 2321 | 2321 |
| 2322 | 2322 |
| 2323 void Assembler::extractps(Register dst, XMMRegister src, byte imm8) { | 2323 void Assembler::extractps(Register dst, XMMRegister src, byte imm8) { |
| 2324 ASSERT(IsEnabled(SSE4_1)); | 2324 DCHECK(IsEnabled(SSE4_1)); |
| 2325 ASSERT(is_uint8(imm8)); | 2325 DCHECK(is_uint8(imm8)); |
| 2326 EnsureSpace ensure_space(this); | 2326 EnsureSpace ensure_space(this); |
| 2327 EMIT(0x66); | 2327 EMIT(0x66); |
| 2328 EMIT(0x0F); | 2328 EMIT(0x0F); |
| 2329 EMIT(0x3A); | 2329 EMIT(0x3A); |
| 2330 EMIT(0x17); | 2330 EMIT(0x17); |
| 2331 emit_sse_operand(src, dst); | 2331 emit_sse_operand(src, dst); |
| 2332 EMIT(imm8); | 2332 EMIT(imm8); |
| 2333 } | 2333 } |
| 2334 | 2334 |
| 2335 | 2335 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2354 void Assembler::por(XMMRegister dst, XMMRegister src) { | 2354 void Assembler::por(XMMRegister dst, XMMRegister src) { |
| 2355 EnsureSpace ensure_space(this); | 2355 EnsureSpace ensure_space(this); |
| 2356 EMIT(0x66); | 2356 EMIT(0x66); |
| 2357 EMIT(0x0F); | 2357 EMIT(0x0F); |
| 2358 EMIT(0xEB); | 2358 EMIT(0xEB); |
| 2359 emit_sse_operand(dst, src); | 2359 emit_sse_operand(dst, src); |
| 2360 } | 2360 } |
| 2361 | 2361 |
| 2362 | 2362 |
| 2363 void Assembler::ptest(XMMRegister dst, XMMRegister src) { | 2363 void Assembler::ptest(XMMRegister dst, XMMRegister src) { |
| 2364 ASSERT(IsEnabled(SSE4_1)); | 2364 DCHECK(IsEnabled(SSE4_1)); |
| 2365 EnsureSpace ensure_space(this); | 2365 EnsureSpace ensure_space(this); |
| 2366 EMIT(0x66); | 2366 EMIT(0x66); |
| 2367 EMIT(0x0F); | 2367 EMIT(0x0F); |
| 2368 EMIT(0x38); | 2368 EMIT(0x38); |
| 2369 EMIT(0x17); | 2369 EMIT(0x17); |
| 2370 emit_sse_operand(dst, src); | 2370 emit_sse_operand(dst, src); |
| 2371 } | 2371 } |
| 2372 | 2372 |
| 2373 | 2373 |
| 2374 void Assembler::psllq(XMMRegister reg, int8_t shift) { | 2374 void Assembler::psllq(XMMRegister reg, int8_t shift) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2413 EnsureSpace ensure_space(this); | 2413 EnsureSpace ensure_space(this); |
| 2414 EMIT(0x66); | 2414 EMIT(0x66); |
| 2415 EMIT(0x0F); | 2415 EMIT(0x0F); |
| 2416 EMIT(0x70); | 2416 EMIT(0x70); |
| 2417 emit_sse_operand(dst, src); | 2417 emit_sse_operand(dst, src); |
| 2418 EMIT(shuffle); | 2418 EMIT(shuffle); |
| 2419 } | 2419 } |
| 2420 | 2420 |
| 2421 | 2421 |
| 2422 void Assembler::pextrd(const Operand& dst, XMMRegister src, int8_t offset) { | 2422 void Assembler::pextrd(const Operand& dst, XMMRegister src, int8_t offset) { |
| 2423 ASSERT(IsEnabled(SSE4_1)); | 2423 DCHECK(IsEnabled(SSE4_1)); |
| 2424 EnsureSpace ensure_space(this); | 2424 EnsureSpace ensure_space(this); |
| 2425 EMIT(0x66); | 2425 EMIT(0x66); |
| 2426 EMIT(0x0F); | 2426 EMIT(0x0F); |
| 2427 EMIT(0x3A); | 2427 EMIT(0x3A); |
| 2428 EMIT(0x16); | 2428 EMIT(0x16); |
| 2429 emit_sse_operand(src, dst); | 2429 emit_sse_operand(src, dst); |
| 2430 EMIT(offset); | 2430 EMIT(offset); |
| 2431 } | 2431 } |
| 2432 | 2432 |
| 2433 | 2433 |
| 2434 void Assembler::pinsrd(XMMRegister dst, const Operand& src, int8_t offset) { | 2434 void Assembler::pinsrd(XMMRegister dst, const Operand& src, int8_t offset) { |
| 2435 ASSERT(IsEnabled(SSE4_1)); | 2435 DCHECK(IsEnabled(SSE4_1)); |
| 2436 EnsureSpace ensure_space(this); | 2436 EnsureSpace ensure_space(this); |
| 2437 EMIT(0x66); | 2437 EMIT(0x66); |
| 2438 EMIT(0x0F); | 2438 EMIT(0x0F); |
| 2439 EMIT(0x3A); | 2439 EMIT(0x3A); |
| 2440 EMIT(0x22); | 2440 EMIT(0x22); |
| 2441 emit_sse_operand(dst, src); | 2441 emit_sse_operand(dst, src); |
| 2442 EMIT(offset); | 2442 EMIT(offset); |
| 2443 } | 2443 } |
| 2444 | 2444 |
| 2445 | 2445 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2485 | 2485 |
| 2486 void Assembler::RecordComment(const char* msg, bool force) { | 2486 void Assembler::RecordComment(const char* msg, bool force) { |
| 2487 if (FLAG_code_comments || force) { | 2487 if (FLAG_code_comments || force) { |
| 2488 EnsureSpace ensure_space(this); | 2488 EnsureSpace ensure_space(this); |
| 2489 RecordRelocInfo(RelocInfo::COMMENT, reinterpret_cast<intptr_t>(msg)); | 2489 RecordRelocInfo(RelocInfo::COMMENT, reinterpret_cast<intptr_t>(msg)); |
| 2490 } | 2490 } |
| 2491 } | 2491 } |
| 2492 | 2492 |
| 2493 | 2493 |
| 2494 void Assembler::GrowBuffer() { | 2494 void Assembler::GrowBuffer() { |
| 2495 ASSERT(buffer_overflow()); | 2495 DCHECK(buffer_overflow()); |
| 2496 if (!own_buffer_) FATAL("external code buffer is too small"); | 2496 if (!own_buffer_) FATAL("external code buffer is too small"); |
| 2497 | 2497 |
| 2498 // Compute new buffer size. | 2498 // Compute new buffer size. |
| 2499 CodeDesc desc; // the new buffer | 2499 CodeDesc desc; // the new buffer |
| 2500 if (buffer_size_ < 4*KB) { | 2500 if (buffer_size_ < 4*KB) { |
| 2501 desc.buffer_size = 4*KB; | 2501 desc.buffer_size = 4*KB; |
| 2502 } else { | 2502 } else { |
| 2503 desc.buffer_size = 2*buffer_size_; | 2503 desc.buffer_size = 2*buffer_size_; |
| 2504 } | 2504 } |
| 2505 // Some internal data structures overflow for very large buffers, | 2505 // Some internal data structures overflow for very large buffers, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2544 for (RelocIterator it(desc); !it.done(); it.next()) { | 2544 for (RelocIterator it(desc); !it.done(); it.next()) { |
| 2545 RelocInfo::Mode rmode = it.rinfo()->rmode(); | 2545 RelocInfo::Mode rmode = it.rinfo()->rmode(); |
| 2546 if (rmode == RelocInfo::INTERNAL_REFERENCE) { | 2546 if (rmode == RelocInfo::INTERNAL_REFERENCE) { |
| 2547 int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc()); | 2547 int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc()); |
| 2548 if (*p != 0) { // 0 means uninitialized. | 2548 if (*p != 0) { // 0 means uninitialized. |
| 2549 *p += pc_delta; | 2549 *p += pc_delta; |
| 2550 } | 2550 } |
| 2551 } | 2551 } |
| 2552 } | 2552 } |
| 2553 | 2553 |
| 2554 ASSERT(!buffer_overflow()); | 2554 DCHECK(!buffer_overflow()); |
| 2555 } | 2555 } |
| 2556 | 2556 |
| 2557 | 2557 |
| 2558 void Assembler::emit_arith_b(int op1, int op2, Register dst, int imm8) { | 2558 void Assembler::emit_arith_b(int op1, int op2, Register dst, int imm8) { |
| 2559 ASSERT(is_uint8(op1) && is_uint8(op2)); // wrong opcode | 2559 DCHECK(is_uint8(op1) && is_uint8(op2)); // wrong opcode |
| 2560 ASSERT(is_uint8(imm8)); | 2560 DCHECK(is_uint8(imm8)); |
| 2561 ASSERT((op1 & 0x01) == 0); // should be 8bit operation | 2561 DCHECK((op1 & 0x01) == 0); // should be 8bit operation |
| 2562 EMIT(op1); | 2562 EMIT(op1); |
| 2563 EMIT(op2 | dst.code()); | 2563 EMIT(op2 | dst.code()); |
| 2564 EMIT(imm8); | 2564 EMIT(imm8); |
| 2565 } | 2565 } |
| 2566 | 2566 |
| 2567 | 2567 |
| 2568 void Assembler::emit_arith(int sel, Operand dst, const Immediate& x) { | 2568 void Assembler::emit_arith(int sel, Operand dst, const Immediate& x) { |
| 2569 ASSERT((0 <= sel) && (sel <= 7)); | 2569 DCHECK((0 <= sel) && (sel <= 7)); |
| 2570 Register ireg = { sel }; | 2570 Register ireg = { sel }; |
| 2571 if (x.is_int8()) { | 2571 if (x.is_int8()) { |
| 2572 EMIT(0x83); // using a sign-extended 8-bit immediate. | 2572 EMIT(0x83); // using a sign-extended 8-bit immediate. |
| 2573 emit_operand(ireg, dst); | 2573 emit_operand(ireg, dst); |
| 2574 EMIT(x.x_ & 0xFF); | 2574 EMIT(x.x_ & 0xFF); |
| 2575 } else if (dst.is_reg(eax)) { | 2575 } else if (dst.is_reg(eax)) { |
| 2576 EMIT((sel << 3) | 0x05); // short form if the destination is eax. | 2576 EMIT((sel << 3) | 0x05); // short form if the destination is eax. |
| 2577 emit(x); | 2577 emit(x); |
| 2578 } else { | 2578 } else { |
| 2579 EMIT(0x81); // using a literal 32-bit immediate. | 2579 EMIT(0x81); // using a literal 32-bit immediate. |
| 2580 emit_operand(ireg, dst); | 2580 emit_operand(ireg, dst); |
| 2581 emit(x); | 2581 emit(x); |
| 2582 } | 2582 } |
| 2583 } | 2583 } |
| 2584 | 2584 |
| 2585 | 2585 |
| 2586 void Assembler::emit_operand(Register reg, const Operand& adr) { | 2586 void Assembler::emit_operand(Register reg, const Operand& adr) { |
| 2587 const unsigned length = adr.len_; | 2587 const unsigned length = adr.len_; |
| 2588 ASSERT(length > 0); | 2588 DCHECK(length > 0); |
| 2589 | 2589 |
| 2590 // Emit updated ModRM byte containing the given register. | 2590 // Emit updated ModRM byte containing the given register. |
| 2591 pc_[0] = (adr.buf_[0] & ~0x38) | (reg.code() << 3); | 2591 pc_[0] = (adr.buf_[0] & ~0x38) | (reg.code() << 3); |
| 2592 | 2592 |
| 2593 // Emit the rest of the encoded operand. | 2593 // Emit the rest of the encoded operand. |
| 2594 for (unsigned i = 1; i < length; i++) pc_[i] = adr.buf_[i]; | 2594 for (unsigned i = 1; i < length; i++) pc_[i] = adr.buf_[i]; |
| 2595 pc_ += length; | 2595 pc_ += length; |
| 2596 | 2596 |
| 2597 // Emit relocation information if necessary. | 2597 // Emit relocation information if necessary. |
| 2598 if (length >= sizeof(int32_t) && !RelocInfo::IsNone(adr.rmode_)) { | 2598 if (length >= sizeof(int32_t) && !RelocInfo::IsNone(adr.rmode_)) { |
| 2599 pc_ -= sizeof(int32_t); // pc_ must be *at* disp32 | 2599 pc_ -= sizeof(int32_t); // pc_ must be *at* disp32 |
| 2600 RecordRelocInfo(adr.rmode_); | 2600 RecordRelocInfo(adr.rmode_); |
| 2601 pc_ += sizeof(int32_t); | 2601 pc_ += sizeof(int32_t); |
| 2602 } | 2602 } |
| 2603 } | 2603 } |
| 2604 | 2604 |
| 2605 | 2605 |
| 2606 void Assembler::emit_farith(int b1, int b2, int i) { | 2606 void Assembler::emit_farith(int b1, int b2, int i) { |
| 2607 ASSERT(is_uint8(b1) && is_uint8(b2)); // wrong opcode | 2607 DCHECK(is_uint8(b1) && is_uint8(b2)); // wrong opcode |
| 2608 ASSERT(0 <= i && i < 8); // illegal stack offset | 2608 DCHECK(0 <= i && i < 8); // illegal stack offset |
| 2609 EMIT(b1); | 2609 EMIT(b1); |
| 2610 EMIT(b2 + i); | 2610 EMIT(b2 + i); |
| 2611 } | 2611 } |
| 2612 | 2612 |
| 2613 | 2613 |
| 2614 void Assembler::db(uint8_t data) { | 2614 void Assembler::db(uint8_t data) { |
| 2615 EnsureSpace ensure_space(this); | 2615 EnsureSpace ensure_space(this); |
| 2616 EMIT(data); | 2616 EMIT(data); |
| 2617 } | 2617 } |
| 2618 | 2618 |
| 2619 | 2619 |
| 2620 void Assembler::dd(uint32_t data) { | 2620 void Assembler::dd(uint32_t data) { |
| 2621 EnsureSpace ensure_space(this); | 2621 EnsureSpace ensure_space(this); |
| 2622 emit(data); | 2622 emit(data); |
| 2623 } | 2623 } |
| 2624 | 2624 |
| 2625 | 2625 |
| 2626 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { | 2626 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { |
| 2627 ASSERT(!RelocInfo::IsNone(rmode)); | 2627 DCHECK(!RelocInfo::IsNone(rmode)); |
| 2628 // Don't record external references unless the heap will be serialized. | 2628 // Don't record external references unless the heap will be serialized. |
| 2629 if (rmode == RelocInfo::EXTERNAL_REFERENCE && | 2629 if (rmode == RelocInfo::EXTERNAL_REFERENCE && |
| 2630 !serializer_enabled() && !emit_debug_code()) { | 2630 !serializer_enabled() && !emit_debug_code()) { |
| 2631 return; | 2631 return; |
| 2632 } | 2632 } |
| 2633 RelocInfo rinfo(pc_, rmode, data, NULL); | 2633 RelocInfo rinfo(pc_, rmode, data, NULL); |
| 2634 reloc_info_writer.Write(&rinfo); | 2634 reloc_info_writer.Write(&rinfo); |
| 2635 } | 2635 } |
| 2636 | 2636 |
| 2637 | 2637 |
| 2638 Handle<ConstantPoolArray> Assembler::NewConstantPool(Isolate* isolate) { | 2638 Handle<ConstantPoolArray> Assembler::NewConstantPool(Isolate* isolate) { |
| 2639 // No out-of-line constant pool support. | 2639 // No out-of-line constant pool support. |
| 2640 ASSERT(!FLAG_enable_ool_constant_pool); | 2640 DCHECK(!FLAG_enable_ool_constant_pool); |
| 2641 return isolate->factory()->empty_constant_pool_array(); | 2641 return isolate->factory()->empty_constant_pool_array(); |
| 2642 } | 2642 } |
| 2643 | 2643 |
| 2644 | 2644 |
| 2645 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) { | 2645 void Assembler::PopulateConstantPool(ConstantPoolArray* constant_pool) { |
| 2646 // No out-of-line constant pool support. | 2646 // No out-of-line constant pool support. |
| 2647 ASSERT(!FLAG_enable_ool_constant_pool); | 2647 DCHECK(!FLAG_enable_ool_constant_pool); |
| 2648 return; | 2648 return; |
| 2649 } | 2649 } |
| 2650 | 2650 |
| 2651 | 2651 |
| 2652 #ifdef GENERATED_CODE_COVERAGE | 2652 #ifdef GENERATED_CODE_COVERAGE |
| 2653 static FILE* coverage_log = NULL; | 2653 static FILE* coverage_log = NULL; |
| 2654 | 2654 |
| 2655 | 2655 |
| 2656 static void InitCoverageLog() { | 2656 static void InitCoverageLog() { |
| 2657 char* file_name = getenv("V8_GENERATED_CODE_COVERAGE_LOG"); | 2657 char* file_name = getenv("V8_GENERATED_CODE_COVERAGE_LOG"); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2670 fprintf(coverage_log, "%s\n", file_line); | 2670 fprintf(coverage_log, "%s\n", file_line); |
| 2671 fflush(coverage_log); | 2671 fflush(coverage_log); |
| 2672 } | 2672 } |
| 2673 } | 2673 } |
| 2674 | 2674 |
| 2675 #endif | 2675 #endif |
| 2676 | 2676 |
| 2677 } } // namespace v8::internal | 2677 } } // namespace v8::internal |
| 2678 | 2678 |
| 2679 #endif // V8_TARGET_ARCH_IA32 | 2679 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |