| 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 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 if (kDebug && own_buffer_) { | 309 if (kDebug && own_buffer_) { |
| 310 memset(buffer_, 0xCC, buffer_size); // int3 | 310 memset(buffer_, 0xCC, buffer_size); // int3 |
| 311 } | 311 } |
| 312 | 312 |
| 313 // setup buffer pointers | 313 // setup buffer pointers |
| 314 ASSERT(buffer_ != NULL); | 314 ASSERT(buffer_ != NULL); |
| 315 pc_ = buffer_; | 315 pc_ = buffer_; |
| 316 reloc_info_writer.Reposition(buffer_ + buffer_size, pc_); | 316 reloc_info_writer.Reposition(buffer_ + buffer_size, pc_); |
| 317 | 317 |
| 318 last_pc_ = NULL; | 318 last_pc_ = NULL; |
| 319 last_position_ = RelocInfo::kNoPosition; | 319 current_statement_position_ = RelocInfo::kNoPosition; |
| 320 last_statement_position_ = RelocInfo::kNoPosition; | 320 current_position_ = RelocInfo::kNoPosition; |
| 321 written_statement_position_ = current_statement_position_; |
| 322 written_position_ = current_position_; |
| 321 } | 323 } |
| 322 | 324 |
| 323 | 325 |
| 324 Assembler::~Assembler() { | 326 Assembler::~Assembler() { |
| 325 if (own_buffer_) { | 327 if (own_buffer_) { |
| 326 if (spare_buffer_ == NULL && buffer_size_ == kMinimalBufferSize) { | 328 if (spare_buffer_ == NULL && buffer_size_ == kMinimalBufferSize) { |
| 327 spare_buffer_ = buffer_; | 329 spare_buffer_ = buffer_; |
| 328 } else { | 330 } else { |
| 329 DeleteArray(buffer_); | 331 DeleteArray(buffer_); |
| 330 } | 332 } |
| (...skipping 1650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1981 | 1983 |
| 1982 void Assembler::RecordComment(const char* msg) { | 1984 void Assembler::RecordComment(const char* msg) { |
| 1983 if (FLAG_debug_code) { | 1985 if (FLAG_debug_code) { |
| 1984 EnsureSpace ensure_space(this); | 1986 EnsureSpace ensure_space(this); |
| 1985 RecordRelocInfo(RelocInfo::COMMENT, reinterpret_cast<intptr_t>(msg)); | 1987 RecordRelocInfo(RelocInfo::COMMENT, reinterpret_cast<intptr_t>(msg)); |
| 1986 } | 1988 } |
| 1987 } | 1989 } |
| 1988 | 1990 |
| 1989 | 1991 |
| 1990 void Assembler::RecordPosition(int pos) { | 1992 void Assembler::RecordPosition(int pos) { |
| 1991 if (pos == RelocInfo::kNoPosition) return; | 1993 ASSERT(pos != RelocInfo::kNoPosition); |
| 1992 ASSERT(pos >= 0); | 1994 ASSERT(pos >= 0); |
| 1993 last_position_ = pos; | 1995 current_position_ = pos; |
| 1994 } | 1996 } |
| 1995 | 1997 |
| 1996 | 1998 |
| 1997 void Assembler::RecordStatementPosition(int pos) { | 1999 void Assembler::RecordStatementPosition(int pos) { |
| 1998 if (pos == RelocInfo::kNoPosition) return; | 2000 ASSERT(pos != RelocInfo::kNoPosition); |
| 1999 ASSERT(pos >= 0); | 2001 ASSERT(pos >= 0); |
| 2000 last_statement_position_ = pos; | 2002 current_statement_position_ = pos; |
| 2001 } | 2003 } |
| 2002 | 2004 |
| 2003 | 2005 |
| 2004 void Assembler::WriteRecordedPositions() { | 2006 void Assembler::WriteRecordedPositions() { |
| 2005 if (last_statement_position_ != RelocInfo::kNoPosition) { | 2007 // Write the statement position if it is different from what was written last |
| 2008 // time. |
| 2009 if (current_statement_position_ != written_statement_position_) { |
| 2006 EnsureSpace ensure_space(this); | 2010 EnsureSpace ensure_space(this); |
| 2007 RecordRelocInfo(RelocInfo::STATEMENT_POSITION, last_statement_position_); | 2011 RecordRelocInfo(RelocInfo::STATEMENT_POSITION, current_statement_position_); |
| 2012 written_statement_position_ = current_statement_position_; |
| 2008 } | 2013 } |
| 2009 if ((last_position_ != RelocInfo::kNoPosition) && | 2014 |
| 2010 (last_position_ != last_statement_position_)) { | 2015 // Write the position if it is different from what was written last time and |
| 2016 // also diferent from the written statement position. |
| 2017 if (current_position_ != written_position_ && |
| 2018 current_position_ != written_statement_position_) { |
| 2011 EnsureSpace ensure_space(this); | 2019 EnsureSpace ensure_space(this); |
| 2012 RecordRelocInfo(RelocInfo::POSITION, last_position_); | 2020 RecordRelocInfo(RelocInfo::POSITION, current_position_); |
| 2021 written_position_ = current_position_; |
| 2013 } | 2022 } |
| 2014 last_statement_position_ = RelocInfo::kNoPosition; | |
| 2015 last_position_ = RelocInfo::kNoPosition; | |
| 2016 } | 2023 } |
| 2017 | 2024 |
| 2018 | 2025 |
| 2019 void Assembler::GrowBuffer() { | 2026 void Assembler::GrowBuffer() { |
| 2020 ASSERT(overflow()); // should not call this otherwise | 2027 ASSERT(overflow()); // should not call this otherwise |
| 2021 if (!own_buffer_) FATAL("external code buffer is too small"); | 2028 if (!own_buffer_) FATAL("external code buffer is too small"); |
| 2022 | 2029 |
| 2023 // compute new buffer size | 2030 // compute new buffer size |
| 2024 CodeDesc desc; // the new buffer | 2031 CodeDesc desc; // the new buffer |
| 2025 if (buffer_size_ < 4*KB) { | 2032 if (buffer_size_ < 4*KB) { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2156 ASSERT(bound_label.is_bound()); | 2163 ASSERT(bound_label.is_bound()); |
| 2157 ASSERT(0 <= position); | 2164 ASSERT(0 <= position); |
| 2158 ASSERT(position + static_cast<int>(sizeof(uint32_t)) <= pc_offset()); | 2165 ASSERT(position + static_cast<int>(sizeof(uint32_t)) <= pc_offset()); |
| 2159 ASSERT(long_at(position) == 0); // only initialize once! | 2166 ASSERT(long_at(position) == 0); // only initialize once! |
| 2160 | 2167 |
| 2161 uint32_t label_loc = reinterpret_cast<uint32_t>(addr_at(bound_label.pos())); | 2168 uint32_t label_loc = reinterpret_cast<uint32_t>(addr_at(bound_label.pos())); |
| 2162 long_at_put(position, label_loc); | 2169 long_at_put(position, label_loc); |
| 2163 } | 2170 } |
| 2164 | 2171 |
| 2165 } } // namespace v8::internal | 2172 } } // namespace v8::internal |
| OLD | NEW |