Chromium Code Reviews| Index: src/IceAssembler.h |
| diff --git a/src/IceAssembler.h b/src/IceAssembler.h |
| index 69faa95f98809635ecb66ffede847d95310957a4..252deeb1bad16f2baa47c89f64f2e94677573bc2 100644 |
| --- a/src/IceAssembler.h |
| +++ b/src/IceAssembler.h |
| @@ -63,49 +63,45 @@ public: |
| intptr_t size() const { return Cursor - Contents; } |
| uintptr_t contents() const { return Contents; } |
| -// To emit an instruction to the assembler buffer, the EnsureCapacity helper |
| -// must be used to guarantee that the underlying data area is big enough to |
| -// hold the emitted instruction. Usage: |
| -// |
| -// AssemblerBuffer buffer; |
| -// AssemblerBuffer::EnsureCapacity ensured(&buffer); |
| -// ... emit bytes for single instruction ... |
| + // To emit an instruction to the assembler buffer, the EnsureCapacity helper |
| + // must be used to guarantee that the underlying data area is big enough to |
| + // hold the emitted instruction. Usage: |
| + // |
| + // AssemblerBuffer buffer; |
| + // AssemblerBuffer::EnsureCapacity ensured(&buffer); |
| + // ... emit bytes for single instruction ... |
| -#ifndef NDEBUG |
| class EnsureCapacity { |
| EnsureCapacity(const EnsureCapacity &) = delete; |
| EnsureCapacity &operator=(const EnsureCapacity &) = delete; |
| public: |
| - explicit EnsureCapacity(AssemblerBuffer *Buffer); |
| + explicit EnsureCapacity(AssemblerBuffer *Buffer) : Buffer(Buffer), Gap(0) { |
| + if (Buffer->cursor() >= Buffer->limit()) |
| + Buffer->extendCapacity(); |
| +#ifdef NDEBUG |
|
Karl
2015/06/22 15:41:06
Why not create a boolean (inline) function in IceD
John
2015/06/22 17:13:46
I agree with Karl on this one. Perhaps IceDefs cou
Jim Stichnoth
2015/06/23 21:42:07
Did both, in IceDefs.h:
constexpr bool buildAllo
|
| + return; |
| +#endif // NDEBUG |
| + validate(Buffer); |
| + } |
| ~EnsureCapacity(); |
| private: |
| AssemblerBuffer *Buffer; |
| intptr_t Gap; |
| + void validate(AssemblerBuffer *Buffer); |
| intptr_t computeGap() { return Buffer->capacity() - Buffer->size(); } |
| }; |
| bool HasEnsuredCapacity; |
| - bool hasEnsuredCapacity() const { return HasEnsuredCapacity; } |
| -#else // NDEBUG |
| - class EnsureCapacity { |
| - EnsureCapacity(const EnsureCapacity &) = delete; |
| - EnsureCapacity &operator=(const EnsureCapacity &) = delete; |
| - |
| - public: |
| - explicit EnsureCapacity(AssemblerBuffer *Buffer) { |
| - if (Buffer->cursor() >= Buffer->limit()) |
| - Buffer->extendCapacity(); |
| - } |
| - }; |
| - |
| - // When building the C++ tests, assertion code is enabled. To allow |
| - // asserting that the user of the assembler buffer has ensured the |
| - // capacity needed for emitting, we add a dummy method in non-debug mode. |
| - bool hasEnsuredCapacity() const { return true; } |
| + bool hasEnsuredCapacity() const { |
| +#ifdef NDEBUG |
|
Karl
2015/06/22 15:41:06
same here.
John
2015/06/22 17:13:46
This makes me nervous that, with NDEBUG, some comp
|
| + // Disable the actual check in non-debug mode. |
| + return true; |
| #endif // NDEBUG |
| + return HasEnsuredCapacity; |
| + } |
| // Returns the position in the instruction stream. |
| intptr_t getPosition() const { return Cursor - Contents; } |
| @@ -124,7 +120,7 @@ private: |
| // The limit is set to kMinimumGap bytes before the end of the data area. |
| // This leaves enough space for the longest possible instruction and allows |
| // for a single, fast space check per instruction. |
| - static const intptr_t kMinimumGap = 32; |
| + static constexpr intptr_t kMinimumGap = 32; |
| uintptr_t Contents; |
| uintptr_t Cursor; |