You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
10 KiB
288 lines
10 KiB
/****************************************************************************** |
|
* |
|
* Copyright (C) 2014 The Android Open Source Project |
|
* Copyright 2002 - 2004 Open Interface North America, Inc. All rights |
|
* reserved. |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at: |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* |
|
******************************************************************************/ |
|
#ifndef _OI_CPU_DEP_H |
|
#define _OI_CPU_DEP_H |
|
|
|
#include <stdint.h> |
|
|
|
/** |
|
* @file |
|
* This file contains definitions for characteristics of the target CPU and |
|
* compiler, including primitive data types and endianness. |
|
* |
|
* This file defines the byte order and primitive data types for various |
|
* CPU families. The preprocessor symbol 'CPU' must be defined to be an |
|
* appropriate value or this header will generate a compile-time error. |
|
* |
|
* @note The documentation for this header file uses the x86 family of |
|
* processors as an illustrative example for CPU/compiler-dependent data type |
|
* definitions. Go to the source code of this header file to see the details of |
|
* primitive type definitions for each platform. |
|
* |
|
* Additional information is available in the @ref data_types_docpage section. |
|
*/ |
|
|
|
/******************************************************************************* |
|
$Revision: #1 $ |
|
******************************************************************************/ |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/** \addtogroup Misc Miscellaneous APIs */ |
|
/**@{*/ |
|
|
|
/** @name Definitions indicating family of target OI_CPU_TYPE |
|
* @{ |
|
*/ |
|
|
|
#define OI_CPU_X86 1 /**< x86 processor family */ |
|
#define OI_CPU_ARM \ |
|
2 /**< ARM processor family. \ |
|
@deprecated Use #OI_CPU_ARM7_LEND or \ |
|
#OI_CPU_ARM7_BEND. */ |
|
#define OI_CPU_ARC \ |
|
3 /**< ARC processor family. \ |
|
@deprecated Use #OI_CPU_ARC_LEND or \ |
|
#OI_CPU_ARC_BEND. */ |
|
#define OI_CPU_SH3 4 /**< Hitachi SH-3 processor family */ |
|
#define OI_CPU_H8 5 /**< Hitachi H8 processor family */ |
|
#define OI_CPU_MIPS 6 /**< MIPS processor family */ |
|
#define OI_CPU_SPARC 7 /**< SPARC processor family */ |
|
#define OI_CPU_M68000 8 /**< Motorola M68000 processor family */ |
|
#define OI_CPU_PPC 9 /**< PowerPC (PPC) processor family */ |
|
#define OI_CPU_SH4_7750 \ |
|
10 /**< Hitachi SH7750 series in SH-4 processor family */ |
|
#define OI_CPU_SH2 11 /**< Hitachi SH-2 processor family */ |
|
#define OI_CPU_ARM7_LEND 12 /**< ARM7, little-endian */ |
|
#define OI_CPU_ARM7_BEND 13 /**< ARM7, big-endian */ |
|
#define OI_CPU_GDM1202 14 /**< GCT GDM1202 */ |
|
#define OI_CPU_ARC_LEND 15 /**< ARC processor family, little-endian */ |
|
#define OI_CPU_ARC_BEND 16 /**< ARC processor family, big-endian */ |
|
#define OI_CPU_M30833F 17 /**< Mitsubishi M308 processor family */ |
|
#define OI_CPU_CR16C 18 /**< National Semiconductor 16 bit processor family */ |
|
#define OI_CPU_M64111 19 /**< Renesas M64111 processor (M32R family) */ |
|
#define OI_CPU_ARMV5_LEND 20 //*< ARM5, little-endian */ |
|
|
|
#define OI_CPU_TYPE 12 |
|
|
|
#ifndef OI_CPU_TYPE |
|
#error "OI_CPU_TYPE type not defined" |
|
#endif |
|
|
|
/**@}*/ |
|
|
|
/** @name Definitions indicating byte-wise endianness of target CPU |
|
* @{ |
|
*/ |
|
|
|
#define OI_BIG_ENDIAN_BYTE_ORDER \ |
|
0 /**< Multiple-byte values are stored in memory beginning with the most \ |
|
significant byte at the lowest address. */ |
|
#define OI_LITTLE_ENDIAN_BYTE_ORDER \ |
|
1 /**< Multiple-byte values are stored in memory beginning with the least \ |
|
significant byte at the lowest address. */ |
|
|
|
/**@}*/ |
|
|
|
/** @name CPU/compiler-independent primitive data type definitions |
|
* @{ |
|
*/ |
|
|
|
typedef int |
|
OI_BOOL; /**< Boolean values use native integer data type for target CPU. */ |
|
typedef int |
|
OI_INT; /**< Integer values use native integer data type for target CPU. */ |
|
typedef unsigned int OI_UINT; /**< Unsigned integer values use native unsigned |
|
integer data type for target CPU. */ |
|
typedef unsigned char OI_BYTE; /**< Raw bytes type uses native character data |
|
type for target CPU. */ |
|
typedef uint32_t OI_ELEMENT_UNION; /**< Type for first element of a union to |
|
support all data types up to pointer |
|
width. */ |
|
|
|
/**@}*/ |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_X86 |
|
|
|
#define OI_CPU_BYTE_ORDER \ |
|
OI_LITTLE_ENDIAN_BYTE_ORDER /**< x86 platform byte ordering is little-endian \ |
|
*/ |
|
|
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_ARM |
|
/* This CPU type is deprecated (removed from use). Instead, use OI_CPU_ARM7_LEND |
|
* or OI_CPU_ARM7_BEND for little-endian or big-endian configurations of the |
|
* ARM7, respectively. */ |
|
#error OI_CPU_ARM is deprecated |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_ARC |
|
/* This CPU type is deprecated (removed from use). Instead, use OI_CPU_ARC_LEND |
|
* or OI_CPU_ARC_BEND for little-endian or big-endian configurations of the |
|
* ARC, respectively. */ |
|
#error OI_CPU_ARC is deprecated |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_SH3 |
|
/* The Hitachi SH C compiler defines _LIT or _BIG, depending on the endianness |
|
specified to the compiler on the command line. */ |
|
#if defined(_LIT) |
|
#define OI_CPU_BYTE_ORDER \ |
|
OI_LITTLE_ENDIAN_BYTE_ORDER /**< If _LIT is defined, SH-3 platform byte \ |
|
ordering is little-endian. */ |
|
#elif defined(_BIG) |
|
#define OI_CPU_BYTE_ORDER \ |
|
OI_BIG_ENDIAN_BYTE_ORDER /**< If _BIG is defined, SH-3 platform byte \ |
|
ordering is big-endian. */ |
|
#else |
|
#error SH compiler endianness undefined |
|
#endif |
|
|
|
#endif |
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_SH2 |
|
|
|
#define OI_CPU_BYTE_ORDER \ |
|
OI_BIG_ENDIAN_BYTE_ORDER /**< SH-2 platform byte ordering is big-endian. */ |
|
|
|
#endif |
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_H8 |
|
#define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER |
|
#error basic types not defined |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_MIPS |
|
#define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_SPARC |
|
#define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER |
|
#error basic types not defined |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_M68000 |
|
#define OI_CPU_BYTE_ORDER \ |
|
OI_BIG_ENDIAN_BYTE_ORDER /**< M68000 platform byte ordering is big-endian. \ |
|
*/ |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_PPC |
|
#define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_SH4_7750 |
|
#define OI_CPU_BYTE_ORDER \ |
|
OI_BIG_ENDIAN_BYTE_ORDER /**< SH7750 platform byte ordering is big-endian. \ |
|
*/ |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_ARM7_LEND |
|
#define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_ARM7_BEND |
|
#define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_GDM1202 |
|
#define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_ARC_LEND |
|
|
|
#define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_ARC_BEND |
|
#define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_M30833F |
|
#define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_CR16C |
|
#define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_M64111 |
|
#define OI_CPU_BYTE_ORDER OI_BIG_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#if OI_CPU_TYPE == OI_CPU_ARMV5_LEND |
|
#define OI_CPU_BYTE_ORDER OI_LITTLE_ENDIAN_BYTE_ORDER |
|
#endif |
|
|
|
/******************************************************************************/ |
|
|
|
#ifndef OI_CPU_BYTE_ORDER |
|
#error "Byte order (endian-ness) not defined" |
|
#endif |
|
|
|
/**@}*/ |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
/******************************************************************************/ |
|
#endif /* _OI_CPU_DEP_H */
|
|
|