]>
git.saurik.com Git - apple/javascriptcore.git/blob - wtf/symbian/BlockAllocatorSymbian.h
21422f6208c555044c66f62ad868b37569ffced3
2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #ifndef BlockAllocatorSymbian_h
30 #define BlockAllocatorSymbian_h
37 #define SYMBIAN_PAGESIZE(x) (HAL::Get(HALData::EMemoryPageSize, x));
38 #define SYMBIAN_FREERAM(x) (HAL::Get(HALData::EMemoryRAMFree, x));
39 #define SYMBIAN_ROUNDUPTOMULTIPLE(x, multipleof) ( (x + multipleof - 1) & ~(multipleof - 1) )
41 // Set sane defaults if -D<flagname=value> wasn't provided via compiler args
42 #ifndef JSCCOLLECTOR_VIRTUALMEM_RESERVATION
44 // Emulator has limited virtual address space
45 #define JSCCOLLECTOR_VIRTUALMEM_RESERVATION (4*1024*1024)
47 // HW has plenty of virtual addresses
48 #define JSCCOLLECTOR_VIRTUALMEM_RESERVATION (128*1024*1024)
55 * Allocates contiguous region of size blockSize with blockSize-aligned address.
56 * blockSize must be a multiple of system page size (typically 4K on Symbian/ARM)
58 * @param reservationSize Virtual address range to be reserved upon creation of chunk (bytes).
59 * @param blockSize Size of a single allocation. Returned address will also be blockSize-aligned.
61 class AlignedBlockAllocator
{
63 AlignedBlockAllocator(TUint32 reservationSize
, TUint32 blockSize
);
64 ~AlignedBlockAllocator();
67 void free(void* data
);
70 RChunk m_chunk
; // Symbian chunk that lets us reserve/commit/decommit
71 TUint m_offset
; // offset of first committed region from base
72 TInt m_pageSize
; // cached value of system page size, typically 4K on Symbian
73 TUint32 m_reservation
;
76 // Tracks comitted/decommitted state of a blockSize region
79 TUint32
*bits
; // array of bit flags
80 TUint32 numBits
; // number of regions to keep track of
82 bool get(TUint32 n
) const
84 return !!(bits
[n
>> 5] & (1 << (n
& 0x1F)));
89 bits
[n
>> 5] |= (1 << (n
& 0x1F));
94 bits
[n
>> 5] &= ~(1 << (n
& 0x1F));
99 for (TUint32 i
= 0; i
< numBits
; i
++)
103 TInt
findFree() const
105 for (TUint32 i
= 0; i
< numBits
; i
++) {
118 #endif // end of BlockAllocatorSymbian_h