Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals

types.h

Go to the documentation of this file.
00001 /*
00002  * PSP Software Development Kit - http://www.pspdev.org
00003  * -----------------------------------------------------------------------
00004  * Licensed under the BSD license, see LICENSE in PSPSDK root for details.
00005  *
00006  * types.h - Definition of basic cross platform types.
00007  *
00008  * Copyright (c) 2005 James Forshaw <tyranid@gmail.com>
00009  *
00010  * $Id: types.h 1095 2005-09-27 21:02:16Z jim $
00011  */
00012 
00013 #ifndef __TYPES_H__
00014 #define __TYPES_H__
00015 
00016 #include "config.h"
00017 #ifdef HAVE_STDINT_H
00018 #include <stdint.h>
00019 #else
00020 #ifdef HAVE_INTTYPES_H
00021 #include <inttypes.h>
00022 #else
00023 #include <sys/types.h>
00024 #define uint8_t u_int8_t
00025 #define uint16_t u_int16_t
00026 #define uint32_t u_int32_t
00027 #define uint64_t u_int64_t
00028 #endif
00029 #endif
00030 
00031 /* Re-define some system types */
00032 typedef uint8_t         u8;
00033 typedef uint16_t        u16;
00034 typedef uint32_t        u32;
00035 typedef uint64_t        u64;
00036 typedef int8_t          s8;
00037 typedef int16_t         s16;
00038 typedef int32_t         s32;
00039 typedef int64_t         s64;
00040 
00041 #ifdef WORDS_BIGENDIAN
00042 inline u32 lw_le(u32 data)
00043 {
00044         u8 *ptr;
00045         u32 val;
00046 
00047         ptr = (u8*) &data;
00048 
00049         val = ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24);
00050 
00051         return val;
00052 }
00053 
00054 inline u16 lh_le(u16 data)
00055 {
00056         u8 *ptr;
00057         u16 val;
00058 
00059         ptr = (u8*) &data;
00060 
00061         val = ptr[0] | (ptr[1] << 8);
00062 
00063         return val;
00064 }
00065 
00066 #define LW_LE(x) (lw_le((x)))
00067 #define LW_BE(x) (x)
00068 #define LH_LE(x) (lh_le((x)))
00069 #define LH_BE(x) (x)
00070 
00071 #else
00072 
00073 inline u32 lw_be(u32 data)
00074 {
00075         u8 *ptr;
00076         u32 val;
00077 
00078         ptr = (u8*) &data;
00079 
00080         val = (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | ptr[3];
00081 
00082         return val;
00083 }
00084 
00085 inline u16 lh_be(u16 data)
00086 {
00087         u8 *ptr;
00088         u16 val;
00089 
00090         ptr = (u8*) &data;
00091 
00092         val = (ptr[0] << 16) | ptr[1];
00093 
00094         return val;
00095 }
00096 
00097 #define LW_LE(x) (x)
00098 #define LW_BE(x) (lw_be((x)))
00099 #define LH_LE(x) (x)
00100 #define LH_BE(x) (lh_be((x)))
00101 
00102 #endif
00103 
00104 #define LW(x) (LW_LE(x))
00105 #define LH(x) (LH_LE(x))
00106 
00107 
00108 #ifdef WORDS_BIGENDIAN
00109 inline void sw_le(u32 *data, u32 val)
00110 {
00111         u8* ptr = (u8*) data;
00112 
00113         ptr[0] = (u8) (val & 0xFF);
00114         ptr[1] = (u8) ((val >> 8) & 0xFF);
00115         ptr[2] = (u8) ((val >> 16) & 0xFF);
00116         ptr[3] = (u8) ((val >> 24) & 0xFF);
00117 }
00118 
00119 inline void sh_le(u16 *data, u16 val)
00120 {
00121         u8 *ptr = (u8*) data;
00122 
00123         ptr[0] = (u8) (val & 0xFF);
00124         ptr[1] = (u8) ((val >> 8) & 0xFF);
00125 }
00126 
00127 #define SW_LE(x, v) (sw_le((x), (v)))
00128 #define SW_BE(x, v) ((x) = (v))
00129 #define SH_LE(x, v) (sh_le((x), (v)))
00130 #define SH_BE(x, v) ((x) = (v))
00131 
00132 #else
00133 
00134 inline void sw_be(u32 *data, u32 val)
00135 {
00136         u8 *ptr = (u8*) data;
00137 
00138         ptr[0] = (u8) ((val >> 24) & 0xFF);
00139         ptr[1] = (u8) ((val >> 16) & 0xFF);
00140         ptr[2] = (u8) ((val >> 8) & 0xFF);
00141         ptr[3] = (u8) (val & 0xFF);
00142 }
00143 
00144 inline void sh_be(u16 *data, u16 val)
00145 {
00146         u8* ptr = (u8*) data;
00147 
00148         ptr[0] = (u8) ((val >> 8) & 0xFF);
00149         ptr[1] = (u8) (val & 0xFF);
00150 }
00151 
00152 #define SW_LE(x, v) (*(x) = (v))
00153 #define SW_BE(x, v) (sw_be((x), (v)))
00154 #define SH_LE(x, v) (*(x) = (v))
00155 #define SH_BE(x, v) (sh_be((x), (v)))
00156 
00157 #endif
00158 
00159 #define SW(x, v) (SW_LE(x, v))
00160 #define SH(x, v) (SH_LE(x, v))
00161 
00162 #endif

Generated on Wed Sep 28 07:52:09 2005 for pspsdk-1.0+beta by  doxygen 1.4.4