/*
 * Copyright (c) 2018-2021 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

#ifndef PAS_INTERNAL_CONFIG_H
#define PAS_INTERNAL_CONFIG_H

#include "pas_config.h"

#define PAS_SUBPAGE_SIZE                 4096

#define PAS_USE_SMALL_SEGREGATED_OVERRIDE     true
#define PAS_USE_MEDIUM_SEGREGATED_OVERRIDE    true
#define PAS_USE_SMALL_BITFIT_OVERRIDE         true
#define PAS_USE_MEDIUM_BITFIT_OVERRIDE        true
#define PAS_USE_MARGE_BITFIT_OVERRIDE         true

/* The OS may have a smaller page size. That's OK. */
#define PAS_SMALL_PAGE_DEFAULT_SHIFT     14
#define PAS_SMALL_PAGE_DEFAULT_SIZE      ((size_t)1 << PAS_SMALL_PAGE_DEFAULT_SHIFT)

#define PAS_SMALL_BITFIT_PAGE_DEFAULT_SHIFT   14
#define PAS_SMALL_BITFIT_PAGE_DEFAULT_SIZE    ((size_t)1 << PAS_SMALL_BITFIT_PAGE_DEFAULT_SHIFT)

#define PAS_MEDIUM_PAGE_DEFAULT_SHIFT    17
#define PAS_MEDIUM_PAGE_DEFAULT_SIZE     ((size_t)1 << PAS_MEDIUM_PAGE_DEFAULT_SHIFT)

#define PAS_MARGE_PAGE_DEFAULT_SHIFT     22
#define PAS_MARGE_PAGE_DEFAULT_SIZE      ((size_t)1 << PAS_MARGE_PAGE_DEFAULT_SHIFT)

#if PAS_ARM64
#define PAS_GRANULE_DEFAULT_SHIFT        14
#else
#define PAS_GRANULE_DEFAULT_SHIFT        12
#endif
#define PAS_GRANULE_DEFAULT_SIZE         ((size_t)1 << PAS_GRANULE_DEFAULT_SHIFT)

#define PAS_FAST_MEGAPAGE_SHIFT          24
#define PAS_FAST_MEGAPAGE_SIZE           ((size_t)1 << PAS_FAST_MEGAPAGE_SHIFT)

#define PAS_MEDIUM_MEGAPAGE_SHIFT        24
#define PAS_MEDIUM_MEGAPAGE_SIZE         ((size_t)1 << PAS_MEDIUM_MEGAPAGE_SHIFT)

#define PAS_MIN_ALIGN_SHIFT              4
#define PAS_MIN_ALIGN                    ((size_t)1 << PAS_MIN_ALIGN_SHIFT)

/* This is the same as PAS_BITVECTOR_WORD_SHIFT, which is a nice performance optimization but
   isn't necessary. It's a performance optimization because there are specialized fast code
   paths for sharing_shift == PAS_BITVECTOR_WORD_SHIFT. */
#define PAS_SMALL_SHARING_SHIFT          5

#define PAS_APPROXIMATE_LARGE_SIZE_SHIFT 10
#define PAS_APPROXIMATE_LARGE_SIZE       ((size_t)1 << PAS_APPROXIMATE_LARGE_SIZE_SHIFT)

/* This is the minimum object size in small allocators and we rely on this to lay out alloc
   bits. */
#define PAS_MIN_OBJECT_SIZE_SHIFT        4
#define PAS_MIN_OBJECT_SIZE              ((size_t)1 << PAS_MIN_OBJECT_SIZE_SHIFT)

#define PAS_MIN_MEDIUM_ALIGN_SHIFT       9
#define PAS_MIN_MEDIUM_ALIGN             ((size_t)1 << PAS_MIN_MEDIUM_ALIGN_SHIFT)

#define PAS_MIN_MARGE_ALIGN_SHIFT        12
#define PAS_MIN_MARGE_ALIGN              ((size_t)1 << PAS_MIN_MARGE_ALIGN_SHIFT)

#define PAS_MEDIUM_SHARING_SHIFT         3

#define PAS_SMALL_SIZE_AWARE_LOGGING     false
#define PAS_MEDIUM_SIZE_AWARE_LOGGING    true

#define PAS_MIN_OBJECTS_PER_PAGE         6

/* Expresses the probability using integers in the range 0..UINT_MAX (inclusive) */
#define PAS_PROBABILITY_OF_SHARED_PAGE_INELIGIBILITY 0x1fffffff

#ifdef PAS_LIBMALLOC
#define PAS_DEALLOCATION_LOG_SIZE        10
#define PAS_DEALLOCATION_LOG_MAX_BYTES   1000
#else
#define PAS_DEALLOCATION_LOG_SIZE        1000
#define PAS_DEALLOCATION_LOG_MAX_BYTES   50000
#endif

#define PAS_NUM_STATIC_FAST_MEGAPAGE_TABLES   0
#define PAS_USE_DYNAMIC_FAST_MEGAPAGE_TABLE   1

#define PAS_NUM_FAST_FAST_MEGAPAGE_BITS  524288

#define PAS_MAX_OBJECT_SIZE(payload_size) ((size_t)(payload_size) / (size_t)PAS_MIN_OBJECTS_PER_PAGE)

#define PAS_INTRINSIC_SMALL_LOOKUP_SIZE_UPPER_BOUND 10000
#define PAS_SMALL_LOOKUP_SIZE_UPPER_BOUND 500
#define PAS_UTILITY_LOOKUP_SIZE_UPPER_BOUND 1400

#define PAS_NUM_INTRINSIC_SIZE_CLASSES \
    ((PAS_INTRINSIC_SMALL_LOOKUP_SIZE_UPPER_BOUND >> PAS_MIN_ALIGN_SHIFT) + 1)

#define PAS_NUM_UTILITY_SIZE_CLASSES \
    ((PAS_UTILITY_LOOKUP_SIZE_UPPER_BOUND >> PAS_INTERNAL_MIN_ALIGN_SHIFT) + 1)

#define PAS_SIZE_CLASS_PROGRESSION       1.3

#define PAS_SMALL_PAGE_HANDICAP          1.
#define PAS_MEDIUM_PAGE_HANDICAP         1.05

#define PAS_SMALL_BITFIT_PAGE_HANDICAP   1.
#define PAS_MEDIUM_BITFIT_PAGE_HANDICAP  1.05

#define PAS_MAX_LARGE_ALIGNMENT_WASTEAGE 1.3

#define PAS_BITS_TTL                     16

#define PAS_NUM_BASELINE_ALLOCATORS      32u

#define PAS_MAX_OBJECTS_PER_PAGE         2048

#define PAS_MADVISE_SYMMETRIC            0

#ifdef PAS_LIBMALLOC
#define PAS_PAGE_BALANCING_ENABLED            true
#else
#define PAS_PAGE_BALANCING_ENABLED            false
#endif

#define PAS_SMALL_SHARED_PAGE_LOG_SHIFT     0
#define PAS_MEDIUM_SHARED_PAGE_LOG_SHIFT    1

#define PAS_UTILITY_BOUND_FOR_PARTIAL_VIEWS                     0
#define PAS_UTILITY_BOUND_FOR_BASELINE_ALLOCATORS               0
#define PAS_UTILITY_BOUND_FOR_NO_VIEW_CACHE                     UINT_MAX
#define PAS_UTILITY_MAX_SEGREGATED_OBJECT_SIZE                  UINT_MAX
#define PAS_UTILITY_MAX_BITFIT_OBJECT_SIZE                      0

/* Intrinsic heaps are for global, singleton, process-wide heaps -- so the "not isoheaped" heap, the
   thing you get from regular malloc. */
#define PAS_INTRINSIC_BOUND_FOR_PARTIAL_VIEWS                   0
#define PAS_INTRINSIC_BOUND_FOR_BASELINE_ALLOCATORS             0
#define PAS_INTRINSIC_BOUND_FOR_NO_VIEW_CACHE                   0
#define PAS_INTRINSIC_MAX_SEGREGATED_OBJECT_SIZE                UINT_MAX
#define PAS_INTRINSIC_MAX_BITFIT_OBJECT_SIZE                    UINT_MAX

/* This is for heaps that hold primitives but should be kept separate from the main heap. So, the
   tuning has to be such that we are efficient for lots of small heaps. But, there's no restriction
   on whether the data in the heap is reused in any particular way -- we run this with a type size
   of 1. */
#define PAS_PRIMITIVE_BOUND_FOR_PARTIAL_VIEWS                   0
#define PAS_PRIMITIVE_BOUND_FOR_BASELINE_ALLOCATORS             0
#define PAS_PRIMITIVE_BOUND_FOR_NO_VIEW_CACHE                   UINT_MAX
#define PAS_PRIMITIVE_MAX_SEGREGATED_OBJECT_SIZE                UINT_MAX
#define PAS_PRIMITIVE_MAX_BITFIT_OBJECT_SIZE                    UINT_MAX

/* This is for heaps that hold typed objects. These objects have a certain size. We may allocate
   arrays of these objects. The type may tell us an alignment requirement in addition to a size.
   The alignment requirement is taken together with the minalign argument (the allocator uses
   whichever is bigger), but it's a bit more optimal to convey alignment using the alignment part
   of the type than by passing it to minalign. */
#define PAS_TYPED_BOUND_FOR_PARTIAL_VIEWS                       10
#define PAS_TYPED_BOUND_FOR_BASELINE_ALLOCATORS                 0
#define PAS_TYPED_BOUND_FOR_NO_VIEW_CACHE                       UINT_MAX
#define PAS_TYPED_MAX_SEGREGATED_OBJECT_SIZE                    UINT_MAX
#define PAS_TYPED_MAX_BITFIT_OBJECT_SIZE                        0

/* This is for heaps of flexible array member objects. These are variable-sized objects of a certain
   type. We should assume that different-sized instances can only be overlapped at the header.
   Implementing these as segregated heaps is valid since sizes get segregated and different-sized
   objects will only overlap at the header. However, FIXME: we need flex heaps to use a large heap
   that won't overlap objects in these heaps as if they were arrays. */
#define PAS_FLEX_BOUND_FOR_PARTIAL_VIEWS                        10
#define PAS_FLEX_BOUND_FOR_BASELINE_ALLOCATORS                  10
#define PAS_FLEX_BOUND_FOR_NO_VIEW_CACHE                        UINT_MAX
#define PAS_FLEX_MAX_SEGREGATED_OBJECT_SIZE                     UINT_MAX
#define PAS_FLEX_MAX_BITFIT_OBJECT_SIZE                         0

#endif /* PAS_INTERNAL_CONFIG_H */

