1 /******************************************************************************* 2 * * 3 * Define size independent data types and operations. * 4 * * 5 * The following types must be supported by all platforms: * 6 * * 7 * UINT8 - Unsigned 8-bit Integer INT8 - Signed 8-bit integer * 8 * UINT16 - Unsigned 16-bit Integer INT16 - Signed 16-bit integer * 9 * UINT32 - Unsigned 32-bit Integer INT32 - Signed 32-bit integer * 10 * UINT64 - Unsigned 64-bit Integer INT64 - Signed 64-bit integer * 11 * * 12 * * 13 * The macro names for the artithmatic operations are composed as follows: * 14 * * 15 * XXX_R_A_B, where XXX - 3 letter operation code (ADD, SUB, etc.) * 16 * R - The type of the result * 17 * A - The type of operand 1 * 18 * B - The type of operand 2 (if binary operation) * 19 * * 20 * Each type is one of: U8,8,U16,16,U32,32,U64,64 * 21 * * 22 *******************************************************************************/ 23 24 25 #ifndef OSD_CPU_H 26 #define OSD_CPU_H 27 28 typedef unsigned char UINT8; 29 typedef unsigned short UINT16; 30 typedef unsigned int UINT32; 31 typedef unsigned long long UINT64; 32 typedef signed char INT8; 33 typedef signed short INT16; 34 typedef signed int INT32; 35 typedef signed long long INT64; 36 37 /* Combine two 32-bit integers into a 64-bit integer */ 38 #define COMBINE_64_32_32(A,B) ((((UINT64)(A))<<32) | (UINT32)(B)) 39 #define COMBINE_U64_U32_U32(A,B) COMBINE_64_32_32(A,B) 40 41 /* Return upper 32 bits of a 64-bit integer */ 42 #define HI32_32_64(A) (((UINT64)(A)) >> 32) 43 #define HI32_U32_U64(A) HI32_32_64(A) 44 45 /* Return lower 32 bits of a 64-bit integer */ 46 #define LO32_32_64(A) ((A) & 0xffffffff) 47 #define LO32_U32_U64(A) LO32_32_64(A) 48 49 #define DIV_64_64_32(A,B) ((A)/(B)) 50 #define DIV_U64_U64_U32(A,B) ((A)/(UINT32)(B)) 51 52 #define MOD_32_64_32(A,B) ((A)%(B)) 53 #define MOD_U32_U64_U32(A,B) ((A)%(UINT32)(B)) 54 55 #define MUL_64_32_32(A,B) ((A)*(INT64)(B)) 56 #define MUL_U64_U32_U32(A,B) ((A)*(UINT64)(UINT32)(B)) 57 58 59 /****************************************************************************** 60 * Union of UINT8, UINT16 and UINT32 in native endianess of the target 61 * This is used to access bytes and words in a machine independent manner. 62 * The upper bytes h2 and h3 normally contain zero (16 bit CPU cores) 63 * thus PAIR.d can be used to pass arguments to the memory system 64 * which expects 'int' really. 65 ******************************************************************************/ 66 typedef union { 67 #ifdef MSB_FIRST 68 struct { UINT8 h3,h2,h,l; } b; 69 struct { UINT16 h,l; } w; 70 #else 71 struct { UINT8 l,h,h2,h3; } b; 72 struct { UINT16 l,h; } w; 73 #endif 74 UINT32 d; 75 } PAIR; 76 77 #endif /* defined OSD_CPU_H */ 78