| Index: src/arm/assembler-arm.cc
|
| ===================================================================
|
| --- src/arm/assembler-arm.cc (revision 3427)
|
| +++ src/arm/assembler-arm.cc (working copy)
|
| @@ -329,17 +329,26 @@
|
|
|
| // spare_buffer_
|
| static const int kMinimalBufferSize = 4*KB;
|
| -static byte* spare_buffer_ = NULL;
|
| +class AssemblerData:public BasicAssemblerData {
|
| + public:
|
| + // A previously allocated buffer of kMinimalBufferSize bytes, or NULL.
|
| + byte* spare_buffer_;
|
| + private:
|
| + AssemblerData() :spare_buffer_(NULL) {}
|
| + ~AssemblerData() { delete spare_buffer_; }
|
| + friend class Assembler;
|
| + DISALLOW_COPY_AND_ASSIGN(AssemblerData);
|
| +};
|
|
|
| Assembler::Assembler(void* buffer, int buffer_size) {
|
| if (buffer == NULL) {
|
| // do our own buffer management
|
| if (buffer_size <= kMinimalBufferSize) {
|
| buffer_size = kMinimalBufferSize;
|
| -
|
| - if (spare_buffer_ != NULL) {
|
| - buffer = spare_buffer_;
|
| - spare_buffer_ = NULL;
|
| + AssemblerData* const data = v8_context()->assembler_data_;
|
| + if (data->spare_buffer_ != NULL) {
|
| + buffer = data->spare_buffer_;
|
| + data->spare_buffer_ = NULL;
|
| }
|
| }
|
| if (buffer == NULL) {
|
| @@ -376,8 +385,9 @@
|
|
|
| Assembler::~Assembler() {
|
| if (own_buffer_) {
|
| - if (spare_buffer_ == NULL && buffer_size_ == kMinimalBufferSize) {
|
| - spare_buffer_ = buffer_;
|
| + AssemblerData* const data = v8_context()->assembler_data_;
|
| + if (data->spare_buffer_ == NULL && buffer_size_ == kMinimalBufferSize) {
|
| + data->spare_buffer_ = buffer_;
|
| } else {
|
| DeleteArray(buffer_);
|
| }
|
| @@ -1827,5 +1837,12 @@
|
| next_buffer_check_ = pc_offset() + kCheckConstInterval;
|
| }
|
|
|
| +void Assembler::PostConstruct() {
|
| + v8_context()->assembler_data_ = new AssemblerData();
|
| +}
|
|
|
| +void Assembler::PreDestroy() {
|
| + delete v8_context()->assembler_data_;
|
| +}
|
| +
|
| } } // namespace v8::internal
|
|
|