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