jitcraft/Spaces.cpp
changeset 51 fb324242a675
parent 50 5e3c49013064
child 53 13bd3a8df334
     1.1 --- a/jitcraft/Spaces.cpp	Fri Jul 06 18:57:27 2012 -0400
     1.2 +++ b/jitcraft/Spaces.cpp	Fri Jul 06 19:24:22 2012 -0400
     1.3 @@ -23,29 +23,22 @@
     1.4  using namespace jc;
     1.5  
     1.6  HeapStack::HeapStack()
     1.7 -  : buffer_(NULL),
     1.8 -    pos_(NULL),
     1.9 -    end_(NULL)
    1.10 +  : chunk_(NULL),
    1.11 +    cursor_(NULL)
    1.12  {
    1.13  }
    1.14  
    1.15  HeapStack::~HeapStack()
    1.16  {
    1.17 -    if (buffer_)
    1.18 -        OS::UnmapAlignedMemory(map_.base(), map_.size());
    1.19 +    if (chunk_)
    1.20 +        HeapChunk::Destroy(chunk_);
    1.21  }
    1.22  
    1.23  bool
    1.24  HeapStack::initialize()
    1.25  {
    1.26 -    map_ = OS::MapAlignedMemory(kStackSize, kStackSize, OS::Map_Commit);
    1.27 -    if (!map_.base())
    1.28 -        return false;
    1.29 -
    1.30 -    buffer_ = map_.aligned();
    1.31 -    pos_ = buffer_;
    1.32 -    end_ = buffer_ + kStackSize;
    1.33 -    mask_ = kStackSize - 1;
    1.34 +    chunk_ = HeapChunk::New(NULL, kStackSize);
    1.35 +    cursor_ = chunk_->first();
    1.36      return true;
    1.37  }
    1.38  
    1.39 @@ -61,7 +54,6 @@
    1.40      HeapChunk *chunk = reinterpret_cast<HeapChunk *>(map.aligned());
    1.41      chunk->base_ = map.base();
    1.42      chunk->end_ = map.base() + map.size();
    1.43 -    chunk->cursor_ = chunk->first();
    1.44      if (prev)
    1.45          prev->next_ = chunk;
    1.46  
    1.47 @@ -85,6 +77,7 @@
    1.48  {
    1.49      first_ = HeapChunk::New(first_, HeapChunk::kDefaultSize);
    1.50      last_ = first_;
    1.51 +    cursor_ = first_->first();
    1.52  
    1.53      return !!first_;
    1.54  }
    1.55 @@ -96,7 +89,14 @@
    1.56      if (!chunk)
    1.57          return NULL;
    1.58  
    1.59 -    return chunk->allocate(nbytes);
    1.60 +    last_ = chunk;
    1.61 +    cursor_ = chunk->first();
    1.62 +
    1.63 +    assert(cursor_ + nbytes <= chunk->end());
    1.64 +
    1.65 +    Address address = cursor_;
    1.66 +    cursor_ += nbytes;
    1.67 +    return address;
    1.68  }
    1.69  
    1.70  OldSpace::~OldSpace()
    1.71 @@ -143,9 +143,6 @@
    1.72          first_ = chunk;
    1.73      last_ = chunk;
    1.74  
    1.75 -    Address address = chunk->allocate(nbytes);
    1.76 -    assert(address);
    1.77 -
    1.78 -    return address;
    1.79 +    return chunk->first();
    1.80  }
    1.81