1f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy/*
27ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization
3f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy  dedicated to making software imaging solutions freely available.
4f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy
5f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy  You may not use this file except in compliance with the License.
6f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy  obtain a copy of the License at
7f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy
8f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy    http://www.imagemagick.org/script/license.php
9f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy
10f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy  Unless required by applicable law or agreed to in writing, software
11f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy  distributed under the License is distributed on an "AS IS" BASIS,
12f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy  See the License for the specific language governing permissions and
14f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy  limitations under the License.
15f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy
16f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy  MagickCore private memory methods.
17f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy*/
1883bceaa5d7a1196e05c1ccba443f90f4b032fca6Cristy#ifndef MAGICKCORE_MEMORY_PRIVATE_H
1983bceaa5d7a1196e05c1ccba443f90f4b032fca6Cristy#define MAGICKCORE_MEMORY_PRIVATE_H
20f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy
21f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy#if defined(__cplusplus) || defined(c_plusplus)
22f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristyextern "C" {
23f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy#endif
24f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy
25e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy
269dd0b6f29886ec1a40d509ed1638005568b64828cristy#if defined(MAGICK_TARGET_CPU) && (MAGICK_TARGET_CPU == powerpc)
27e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy#  define CACHE_LINE_SIZE  128
289dd0b6f29886ec1a40d509ed1638005568b64828cristy#else
29e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy#  define CACHE_LINE_SIZE  64
309dd0b6f29886ec1a40d509ed1638005568b64828cristy#endif
31e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy
32f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy#define CacheAlign(size)  ((size) < CACHE_LINE_SIZE ? CACHE_LINE_SIZE : (size))
33f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy
3420c26b1c3af28d335e2d16964e9f1639088d25b9cristy#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 6))
3524be3bfe878eb60f274a64e4400bc2f908775427cristy#if !defined(__ICC)
36e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy#define MagickAssumeAligned(address) \
37e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy  __builtin_assume_aligned((address),CACHE_LINE_SIZE)
38e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy#else
39e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy#define MagickAssumeAligned(address)  (address)
40e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy#endif
4124be3bfe878eb60f274a64e4400bc2f908775427cristy#else
4224be3bfe878eb60f274a64e4400bc2f908775427cristy#define MagickAssumeAligned(address)  (address)
4324be3bfe878eb60f274a64e4400bc2f908775427cristy#endif
44e42639a7b750e7b86ae59f3ba8f5972fee9e85d3cristy
45e45e48b881038487d0bc94d92a16c1537616cc0aCristyMagickExport MagickBooleanType
46e45e48b881038487d0bc94d92a16c1537616cc0aCristy  HeapOverflowSanityCheck(const size_t,const size_t) magick_alloc_sizes(1,2);
47e45e48b881038487d0bc94d92a16c1537616cc0aCristy
48f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy#if defined(__cplusplus) || defined(c_plusplus)
49f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy}
50f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy#endif
51f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy
52f0cda9a3e4c29ed1e9b6177d7874b1489b13938fcristy#endif
53