1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* -----------------------------------------------------------------*-C-*- 2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. 3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Copyright (C) 2007 Free Software Foundation, Inc 4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Target configuration macros for PowerPC. 5a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 6a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Permission is hereby granted, free of charge, to any person obtaining 7a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project a copy of this software and associated documentation files (the 8a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ``Software''), to deal in the Software without restriction, including 9a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project without limitation the rights to use, copy, modify, merge, publish, 10a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project distribute, sublicense, and/or sell copies of the Software, and to 11a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project permit persons to whom the Software is furnished to do so, subject to 12a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project the following conditions: 13a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 14a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project The above copyright notice and this permission notice shall be included 15a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project in all copies or substantial portions of the Software. 16a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 17a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, 18a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 21a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 22a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project DEALINGS IN THE SOFTWARE. 25a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 26a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ----------------------------------------------------------------------- */ 27a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 28a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifndef LIBFFI_TARGET_H 29a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define LIBFFI_TARGET_H 30a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 31a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ---- System specific configurations ----------------------------------- */ 32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if defined (POWERPC) && defined (__powerpc64__) 34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define POWERPC64 35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifndef LIBFFI_ASM 38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef unsigned long ffi_arg; 39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef signed long ffi_sarg; 40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef enum ffi_abi { 42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_FIRST_ABI = 0, 43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef POWERPC 45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_SYSV, 46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_GCC_SYSV, 47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_LINUX64, 48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_LINUX, 49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_LINUX_SOFT_FLOAT, 50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# ifdef POWERPC64 51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_DEFAULT_ABI = FFI_LINUX64, 52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# else 53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# if (!defined(__NO_FPRS__) && (__LDBL_MANT_DIG__ == 106)) 54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_DEFAULT_ABI = FFI_LINUX, 55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# else 56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# ifdef __NO_FPRS__ 57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_DEFAULT_ABI = FFI_LINUX_SOFT_FLOAT, 58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# else 59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_DEFAULT_ABI = FFI_GCC_SYSV, 60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# endif 61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# endif 62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# endif 63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef POWERPC_AIX 66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_AIX, 67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_DARWIN, 68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_DEFAULT_ABI = FFI_AIX, 69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef POWERPC_DARWIN 72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_AIX, 73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_DARWIN, 74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_DEFAULT_ABI = FFI_DARWIN, 75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef POWERPC_FREEBSD 78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_SYSV, 79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_GCC_SYSV, 80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_LINUX64, 81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_DEFAULT_ABI = FFI_SYSV, 82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project FFI_LAST_ABI 85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project} ffi_abi; 86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ---- Definitions for closures ----------------------------------------- */ 89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_CLOSURES 1 91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_NATIVE_RAW_API 0 92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* For additional types like the below, take care about the order in 94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ppc_closures.S. They must follow after the FFI_TYPE_LAST. */ 95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Needed for soft-float long-double-128 support. */ 97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_TYPE_UINT128 (FFI_TYPE_LAST + 1) 98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Needed for FFI_SYSV small structure returns. */ 100a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2) 101a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 102a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if defined(POWERPC64) || defined(POWERPC_AIX) 103a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_TRAMPOLINE_SIZE 24 104a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else /* POWERPC || POWERPC_AIX */ 105a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_TRAMPOLINE_SIZE 40 106a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 107a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 108a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifndef LIBFFI_ASM 109a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if defined(POWERPC_DARWIN) || defined(POWERPC_AIX) 110a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectstruct ffi_aix_trampoline_struct { 111a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project void * code_pointer; /* Pointer to ffi_closure_ASM */ 112a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project void * toc; /* TOC */ 113a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project void * static_chain; /* Pointer to closure */ 114a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project}; 115a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 116a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 117a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 118a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 119