00001
00002
00003
00004
00005 #ifndef __BASE_H__
00006 #define __BASE_H__
00007
00008 #include "SSEPlus_platform.h"
00009
00010 #include <xmmintrin.h>
00011 #include <emmintrin.h>
00012
00013
00014
00015
00016
00017 typedef signed char ssp_s8;
00018 typedef unsigned char ssp_u8;
00019
00020 typedef signed short ssp_s16;
00021 typedef unsigned short ssp_u16;
00022
00023 typedef signed int ssp_s32;
00024 typedef unsigned int ssp_u32;
00025
00026 typedef float ssp_f32;
00027 typedef double ssp_f64;
00028
00029 typedef signed long long ssp_s64;
00030 typedef unsigned long long ssp_u64;
00031
00032 typedef union
00033 {
00034 __m128 f;
00035 __m128d d;
00036 __m128i i;
00037 __m64 m64[ 2];
00038 ssp_u64 u64[ 2];
00039 ssp_s64 s64[ 2];
00040 ssp_f64 f64[ 2];
00041 ssp_u32 u32[ 4];
00042 ssp_s32 s32[ 4];
00043 ssp_f32 f32[ 4];
00044 ssp_u16 u16[ 8];
00045 ssp_s16 s16[ 8];
00046 ssp_u8 u8 [16];
00047 ssp_s8 s8 [16];
00048 } ssp_m128;
00049
00050 typedef union
00051 {
00052 __m64 m64;
00053 ssp_u64 u64;
00054 ssp_s64 s64;
00055 ssp_u32 u32[ 2];
00056 ssp_s32 s32[ 2];
00057 ssp_u16 u16[ 4];
00058 ssp_s16 s16[ 4];
00059 ssp_u8 u8 [ 8];
00060 ssp_s8 s8 [ 8];
00061 } ssp_m64;
00062
00063 ssp_u16 MAX_U16 = 65535;
00064
00065
00066
00067
00068 #define SSP_FROUND_TO_NEAREST_INT 0x00
00069 #define SSP_FROUND_TO_NEG_INF 0x01
00070 #define SSP_FROUND_TO_POS_INF 0x02
00071 #define SSP_FROUND_TO_ZERO 0x03
00072 #define SSP_FROUND_CUR_DIRECTION 0x04
00073
00074 #define SSP_FROUND_RAISE_EXC 0x00
00075 #define SSP_FROUND_NO_EXC 0x08
00076
00077
00078
00079
00080 const static float SSP_F32_ALLOWANCE = 0.0001f;
00081 const static double SSP_F64_ALLOWANCE = 0.0001;
00082
00083
00084
00085
00086
00087 #define STRING2(x) #x
00088 #define STRING(x) STRING2(x)
00089 #define WARN( ) __FILE__"("STRING(__LINE__)") : NOTE "
00090
00091
00092
00093
00094
00095
00096
00097 #define CASE_2( fn, ... ) \
00098 case 0x0: return fn( __VA_ARGS__, 0x0 ); \
00099 default: return fn( __VA_ARGS__, 0x1 );
00100
00101 #define CASE_4( fn, ... ) \
00102 case 0x0: return fn( __VA_ARGS__, 0x0 ); \
00103 case 0x1: return fn( __VA_ARGS__, 0x1 ); \
00104 case 0x2: return fn( __VA_ARGS__, 0x2 ); \
00105 default: return fn( __VA_ARGS__, 0x3 );
00106
00107 #define CASE_4_NR( fn, ... ) \
00108 case 0x0: fn( __VA_ARGS__, 0x0 ); \
00109 case 0x1: fn( __VA_ARGS__, 0x1 ); \
00110 case 0x2: fn( __VA_ARGS__, 0x2 ); \
00111 default: fn( __VA_ARGS__, 0x3 );
00112
00113 #define CASE_8( fn, ... ) \
00114 case 0x0: return fn( __VA_ARGS__, 0x0 ); \
00115 case 0x1: return fn( __VA_ARGS__, 0x1 ); \
00116 case 0x2: return fn( __VA_ARGS__, 0x2 ); \
00117 case 0x3: return fn( __VA_ARGS__, 0x3 ); \
00118 case 0x4: return fn( __VA_ARGS__, 0x4 ); \
00119 case 0x5: return fn( __VA_ARGS__, 0x5 ); \
00120 case 0x6: return fn( __VA_ARGS__, 0x6 ); \
00121 default: return fn( __VA_ARGS__, 0x7 );
00122
00123 #define CASE_16( fn, ... ) \
00124 case 0x0: return fn( __VA_ARGS__, 0x0 ); \
00125 case 0x1: return fn( __VA_ARGS__, 0x1 ); \
00126 case 0x2: return fn( __VA_ARGS__, 0x2 ); \
00127 case 0x3: return fn( __VA_ARGS__, 0x3 ); \
00128 case 0x4: return fn( __VA_ARGS__, 0x4 ); \
00129 case 0x5: return fn( __VA_ARGS__, 0x5 ); \
00130 case 0x6: return fn( __VA_ARGS__, 0x6 ); \
00131 case 0x7: return fn( __VA_ARGS__, 0x7 ); \
00132 case 0x8: return fn( __VA_ARGS__, 0x8 ); \
00133 case 0x9: return fn( __VA_ARGS__, 0x9 ); \
00134 case 0xA: return fn( __VA_ARGS__, 0xA ); \
00135 case 0xB: return fn( __VA_ARGS__, 0xB ); \
00136 case 0xC: return fn( __VA_ARGS__, 0xC ); \
00137 case 0xD: return fn( __VA_ARGS__, 0xD ); \
00138 case 0xE: return fn( __VA_ARGS__, 0xE ); \
00139 default: return fn( __VA_ARGS__, 0xF );
00140
00141 #define CASE_32( fn, ... ) \
00142 case 0x0: return fn( __VA_ARGS__, 0x0 ); \
00143 case 0x1: return fn( __VA_ARGS__, 0x1 ); \
00144 case 0x2: return fn( __VA_ARGS__, 0x2 ); \
00145 case 0x3: return fn( __VA_ARGS__, 0x3 ); \
00146 case 0x4: return fn( __VA_ARGS__, 0x4 ); \
00147 case 0x5: return fn( __VA_ARGS__, 0x5 ); \
00148 case 0x6: return fn( __VA_ARGS__, 0x6 ); \
00149 case 0x7: return fn( __VA_ARGS__, 0x7 ); \
00150 case 0x8: return fn( __VA_ARGS__, 0x8 ); \
00151 case 0x9: return fn( __VA_ARGS__, 0x9 ); \
00152 case 0xA: return fn( __VA_ARGS__, 0xA ); \
00153 case 0xB: return fn( __VA_ARGS__, 0xB ); \
00154 case 0xC: return fn( __VA_ARGS__, 0xC ); \
00155 case 0xD: return fn( __VA_ARGS__, 0xD ); \
00156 case 0xE: return fn( __VA_ARGS__, 0xE ); \
00157 case 0xF: return fn( __VA_ARGS__, 0xF ); \
00158 case 0x10: return fn( __VA_ARGS__, 0x10 ); \
00159 case 0x11: return fn( __VA_ARGS__, 0x11 ); \
00160 case 0x12: return fn( __VA_ARGS__, 0x12 ); \
00161 case 0x13: return fn( __VA_ARGS__, 0x13 ); \
00162 case 0x14: return fn( __VA_ARGS__, 0x14 ); \
00163 case 0x15: return fn( __VA_ARGS__, 0x15 ); \
00164 case 0x16: return fn( __VA_ARGS__, 0x16 ); \
00165 case 0x17: return fn( __VA_ARGS__, 0x17 ); \
00166 case 0x18: return fn( __VA_ARGS__, 0x18 ); \
00167 case 0x19: return fn( __VA_ARGS__, 0x19 ); \
00168 case 0x1A: return fn( __VA_ARGS__, 0x1A ); \
00169 case 0x1B: return fn( __VA_ARGS__, 0x1B ); \
00170 case 0x1C: return fn( __VA_ARGS__, 0x1C ); \
00171 case 0x1D: return fn( __VA_ARGS__, 0x1D ); \
00172 case 0x1E: return fn( __VA_ARGS__, 0x1E ); \
00173 default: return fn( __VA_ARGS__, 0x1F );
00174
00175 #define CASE_128( fn, ... ) \
00176 case 0x0: return fn( __VA_ARGS__, 0x0 ); \
00177 case 0x1: return fn( __VA_ARGS__, 0x1 ); \
00178 case 0x2: return fn( __VA_ARGS__, 0x2 ); \
00179 case 0x3: return fn( __VA_ARGS__, 0x3 ); \
00180 case 0x4: return fn( __VA_ARGS__, 0x4 ); \
00181 case 0x5: return fn( __VA_ARGS__, 0x5 ); \
00182 case 0x6: return fn( __VA_ARGS__, 0x6 ); \
00183 case 0x7: return fn( __VA_ARGS__, 0x7 ); \
00184 case 0x8: return fn( __VA_ARGS__, 0x8 ); \
00185 case 0x9: return fn( __VA_ARGS__, 0x9 ); \
00186 case 0xA: return fn( __VA_ARGS__, 0xA ); \
00187 case 0xB: return fn( __VA_ARGS__, 0xB ); \
00188 case 0xC: return fn( __VA_ARGS__, 0xC ); \
00189 case 0xD: return fn( __VA_ARGS__, 0xD ); \
00190 case 0xE: return fn( __VA_ARGS__, 0xE ); \
00191 case 0xF: return fn( __VA_ARGS__, 0xF ); \
00192 case 0x10: return fn( __VA_ARGS__, 0x10 ); \
00193 case 0x11: return fn( __VA_ARGS__, 0x11 ); \
00194 case 0x12: return fn( __VA_ARGS__, 0x12 ); \
00195 case 0x13: return fn( __VA_ARGS__, 0x13 ); \
00196 case 0x14: return fn( __VA_ARGS__, 0x14 ); \
00197 case 0x15: return fn( __VA_ARGS__, 0x15 ); \
00198 case 0x16: return fn( __VA_ARGS__, 0x16 ); \
00199 case 0x17: return fn( __VA_ARGS__, 0x17 ); \
00200 case 0x18: return fn( __VA_ARGS__, 0x18 ); \
00201 case 0x19: return fn( __VA_ARGS__, 0x19 ); \
00202 case 0x1A: return fn( __VA_ARGS__, 0x1A ); \
00203 case 0x1B: return fn( __VA_ARGS__, 0x1B ); \
00204 case 0x1C: return fn( __VA_ARGS__, 0x1C ); \
00205 case 0x1D: return fn( __VA_ARGS__, 0x1D ); \
00206 case 0x1E: return fn( __VA_ARGS__, 0x1E ); \
00207 case 0x1F: return fn( __VA_ARGS__, 0x1F ); \
00208 case 0x20: return fn( __VA_ARGS__, 0x20 ); \
00209 case 0x21: return fn( __VA_ARGS__, 0x21 ); \
00210 case 0x22: return fn( __VA_ARGS__, 0x22 ); \
00211 case 0x23: return fn( __VA_ARGS__, 0x23 ); \
00212 case 0x24: return fn( __VA_ARGS__, 0x24 ); \
00213 case 0x25: return fn( __VA_ARGS__, 0x25 ); \
00214 case 0x26: return fn( __VA_ARGS__, 0x26 ); \
00215 case 0x27: return fn( __VA_ARGS__, 0x27 ); \
00216 case 0x28: return fn( __VA_ARGS__, 0x28 ); \
00217 case 0x29: return fn( __VA_ARGS__, 0x29 ); \
00218 case 0x2A: return fn( __VA_ARGS__, 0x2A ); \
00219 case 0x2B: return fn( __VA_ARGS__, 0x2B ); \
00220 case 0x2C: return fn( __VA_ARGS__, 0x2C ); \
00221 case 0x2D: return fn( __VA_ARGS__, 0x2D ); \
00222 case 0x2E: return fn( __VA_ARGS__, 0x2E ); \
00223 case 0x2F: return fn( __VA_ARGS__, 0x2F ); \
00224 case 0x30: return fn( __VA_ARGS__, 0x30 ); \
00225 case 0x31: return fn( __VA_ARGS__, 0x31 ); \
00226 case 0x32: return fn( __VA_ARGS__, 0x32 ); \
00227 case 0x33: return fn( __VA_ARGS__, 0x33 ); \
00228 case 0x34: return fn( __VA_ARGS__, 0x34 ); \
00229 case 0x35: return fn( __VA_ARGS__, 0x35 ); \
00230 case 0x36: return fn( __VA_ARGS__, 0x36 ); \
00231 case 0x37: return fn( __VA_ARGS__, 0x37 ); \
00232 case 0x38: return fn( __VA_ARGS__, 0x38 ); \
00233 case 0x39: return fn( __VA_ARGS__, 0x39 ); \
00234 case 0x3A: return fn( __VA_ARGS__, 0x3A ); \
00235 case 0x3B: return fn( __VA_ARGS__, 0x3B ); \
00236 case 0x3C: return fn( __VA_ARGS__, 0x3C ); \
00237 case 0x3D: return fn( __VA_ARGS__, 0x3D ); \
00238 case 0x3E: return fn( __VA_ARGS__, 0x3E ); \
00239 case 0x3F: return fn( __VA_ARGS__, 0x3F ); \
00240 case 0x40: return fn( __VA_ARGS__, 0x40 ); \
00241 case 0x41: return fn( __VA_ARGS__, 0x41 ); \
00242 case 0x42: return fn( __VA_ARGS__, 0x42 ); \
00243 case 0x43: return fn( __VA_ARGS__, 0x43 ); \
00244 case 0x44: return fn( __VA_ARGS__, 0x44 ); \
00245 case 0x45: return fn( __VA_ARGS__, 0x45 ); \
00246 case 0x46: return fn( __VA_ARGS__, 0x46 ); \
00247 case 0x47: return fn( __VA_ARGS__, 0x47 ); \
00248 case 0x48: return fn( __VA_ARGS__, 0x48 ); \
00249 case 0x49: return fn( __VA_ARGS__, 0x49 ); \
00250 case 0x4A: return fn( __VA_ARGS__, 0x4A ); \
00251 case 0x4B: return fn( __VA_ARGS__, 0x4B ); \
00252 case 0x4C: return fn( __VA_ARGS__, 0x4C ); \
00253 case 0x4D: return fn( __VA_ARGS__, 0x4D ); \
00254 case 0x4E: return fn( __VA_ARGS__, 0x4E ); \
00255 case 0x4F: return fn( __VA_ARGS__, 0x4F ); \
00256 case 0x50: return fn( __VA_ARGS__, 0x50 ); \
00257 case 0x51: return fn( __VA_ARGS__, 0x51 ); \
00258 case 0x52: return fn( __VA_ARGS__, 0x52 ); \
00259 case 0x53: return fn( __VA_ARGS__, 0x53 ); \
00260 case 0x54: return fn( __VA_ARGS__, 0x54 ); \
00261 case 0x55: return fn( __VA_ARGS__, 0x55 ); \
00262 case 0x56: return fn( __VA_ARGS__, 0x56 ); \
00263 case 0x57: return fn( __VA_ARGS__, 0x57 ); \
00264 case 0x58: return fn( __VA_ARGS__, 0x58 ); \
00265 case 0x59: return fn( __VA_ARGS__, 0x59 ); \
00266 case 0x5A: return fn( __VA_ARGS__, 0x5A ); \
00267 case 0x5B: return fn( __VA_ARGS__, 0x5B ); \
00268 case 0x5C: return fn( __VA_ARGS__, 0x5C ); \
00269 case 0x5D: return fn( __VA_ARGS__, 0x5D ); \
00270 case 0x5E: return fn( __VA_ARGS__, 0x5E ); \
00271 case 0x5F: return fn( __VA_ARGS__, 0x5F ); \
00272 case 0x60: return fn( __VA_ARGS__, 0x60 ); \
00273 case 0x61: return fn( __VA_ARGS__, 0x61 ); \
00274 case 0x62: return fn( __VA_ARGS__, 0x62 ); \
00275 case 0x63: return fn( __VA_ARGS__, 0x63 ); \
00276 case 0x64: return fn( __VA_ARGS__, 0x64 ); \
00277 case 0x65: return fn( __VA_ARGS__, 0x65 ); \
00278 case 0x66: return fn( __VA_ARGS__, 0x66 ); \
00279 case 0x67: return fn( __VA_ARGS__, 0x67 ); \
00280 case 0x68: return fn( __VA_ARGS__, 0x68 ); \
00281 case 0x69: return fn( __VA_ARGS__, 0x69 ); \
00282 case 0x6A: return fn( __VA_ARGS__, 0x6A ); \
00283 case 0x6B: return fn( __VA_ARGS__, 0x6B ); \
00284 case 0x6C: return fn( __VA_ARGS__, 0x6C ); \
00285 case 0x6D: return fn( __VA_ARGS__, 0x6D ); \
00286 case 0x6E: return fn( __VA_ARGS__, 0x6E ); \
00287 case 0x6F: return fn( __VA_ARGS__, 0x6F ); \
00288 case 0x70: return fn( __VA_ARGS__, 0x70 ); \
00289 case 0x71: return fn( __VA_ARGS__, 0x71 ); \
00290 case 0x72: return fn( __VA_ARGS__, 0x72 ); \
00291 case 0x73: return fn( __VA_ARGS__, 0x73 ); \
00292 case 0x74: return fn( __VA_ARGS__, 0x74 ); \
00293 case 0x75: return fn( __VA_ARGS__, 0x75 ); \
00294 case 0x76: return fn( __VA_ARGS__, 0x76 ); \
00295 case 0x77: return fn( __VA_ARGS__, 0x77 ); \
00296 case 0x78: return fn( __VA_ARGS__, 0x78 ); \
00297 case 0x79: return fn( __VA_ARGS__, 0x79 ); \
00298 case 0x7A: return fn( __VA_ARGS__, 0x7A ); \
00299 case 0x7B: return fn( __VA_ARGS__, 0x7B ); \
00300 case 0x7C: return fn( __VA_ARGS__, 0x7C ); \
00301 case 0x7D: return fn( __VA_ARGS__, 0x7D ); \
00302 case 0x7E: return fn( __VA_ARGS__, 0x7E ); \
00303 default: return fn( __VA_ARGS__, 0x7F );
00304
00305 #define CASE_64( fn, ... ) \
00306 case 0x0: return fn( __VA_ARGS__, 0x0 ); \
00307 case 0x1: return fn( __VA_ARGS__, 0x1 ); \
00308 case 0x2: return fn( __VA_ARGS__, 0x2 ); \
00309 case 0x3: return fn( __VA_ARGS__, 0x3 ); \
00310 case 0x4: return fn( __VA_ARGS__, 0x4 ); \
00311 case 0x5: return fn( __VA_ARGS__, 0x5 ); \
00312 case 0x6: return fn( __VA_ARGS__, 0x6 ); \
00313 case 0x7: return fn( __VA_ARGS__, 0x7 ); \
00314 case 0x8: return fn( __VA_ARGS__, 0x8 ); \
00315 case 0x9: return fn( __VA_ARGS__, 0x9 ); \
00316 case 0xA: return fn( __VA_ARGS__, 0xA ); \
00317 case 0xB: return fn( __VA_ARGS__, 0xB ); \
00318 case 0xC: return fn( __VA_ARGS__, 0xC ); \
00319 case 0xD: return fn( __VA_ARGS__, 0xD ); \
00320 case 0xE: return fn( __VA_ARGS__, 0xE ); \
00321 case 0xF: return fn( __VA_ARGS__, 0xF ); \
00322 case 0x10: return fn( __VA_ARGS__, 0x10 ); \
00323 case 0x11: return fn( __VA_ARGS__, 0x11 ); \
00324 case 0x12: return fn( __VA_ARGS__, 0x12 ); \
00325 case 0x13: return fn( __VA_ARGS__, 0x13 ); \
00326 case 0x14: return fn( __VA_ARGS__, 0x14 ); \
00327 case 0x15: return fn( __VA_ARGS__, 0x15 ); \
00328 case 0x16: return fn( __VA_ARGS__, 0x16 ); \
00329 case 0x17: return fn( __VA_ARGS__, 0x17 ); \
00330 case 0x18: return fn( __VA_ARGS__, 0x18 ); \
00331 case 0x19: return fn( __VA_ARGS__, 0x19 ); \
00332 case 0x1A: return fn( __VA_ARGS__, 0x1A ); \
00333 case 0x1B: return fn( __VA_ARGS__, 0x1B ); \
00334 case 0x1C: return fn( __VA_ARGS__, 0x1C ); \
00335 case 0x1D: return fn( __VA_ARGS__, 0x1D ); \
00336 case 0x1E: return fn( __VA_ARGS__, 0x1E ); \
00337 case 0x1F: return fn( __VA_ARGS__, 0x1F ); \
00338 case 0x20: return fn( __VA_ARGS__, 0x20 ); \
00339 case 0x21: return fn( __VA_ARGS__, 0x21 ); \
00340 case 0x22: return fn( __VA_ARGS__, 0x22 ); \
00341 case 0x23: return fn( __VA_ARGS__, 0x23 ); \
00342 case 0x24: return fn( __VA_ARGS__, 0x24 ); \
00343 case 0x25: return fn( __VA_ARGS__, 0x25 ); \
00344 case 0x26: return fn( __VA_ARGS__, 0x26 ); \
00345 case 0x27: return fn( __VA_ARGS__, 0x27 ); \
00346 case 0x28: return fn( __VA_ARGS__, 0x28 ); \
00347 case 0x29: return fn( __VA_ARGS__, 0x29 ); \
00348 case 0x2A: return fn( __VA_ARGS__, 0x2A ); \
00349 case 0x2B: return fn( __VA_ARGS__, 0x2B ); \
00350 case 0x2C: return fn( __VA_ARGS__, 0x2C ); \
00351 case 0x2D: return fn( __VA_ARGS__, 0x2D ); \
00352 case 0x2E: return fn( __VA_ARGS__, 0x2E ); \
00353 case 0x2F: return fn( __VA_ARGS__, 0x2F ); \
00354 case 0x30: return fn( __VA_ARGS__, 0x30 ); \
00355 case 0x31: return fn( __VA_ARGS__, 0x31 ); \
00356 case 0x32: return fn( __VA_ARGS__, 0x32 ); \
00357 case 0x33: return fn( __VA_ARGS__, 0x33 ); \
00358 case 0x34: return fn( __VA_ARGS__, 0x34 ); \
00359 case 0x35: return fn( __VA_ARGS__, 0x35 ); \
00360 case 0x36: return fn( __VA_ARGS__, 0x36 ); \
00361 case 0x37: return fn( __VA_ARGS__, 0x37 ); \
00362 case 0x38: return fn( __VA_ARGS__, 0x38 ); \
00363 case 0x39: return fn( __VA_ARGS__, 0x39 ); \
00364 case 0x3A: return fn( __VA_ARGS__, 0x3A ); \
00365 case 0x3B: return fn( __VA_ARGS__, 0x3B ); \
00366 case 0x3C: return fn( __VA_ARGS__, 0x3C ); \
00367 case 0x3D: return fn( __VA_ARGS__, 0x3D ); \
00368 case 0x3E: return fn( __VA_ARGS__, 0x3E ); \
00369 default: return fn( __VA_ARGS__, 0x3F );
00370
00371 #define CASE_256( fn, ... ) \
00372 case 0x0: return fn( __VA_ARGS__, 0x0 ); \
00373 case 0x1: return fn( __VA_ARGS__, 0x1 ); \
00374 case 0x2: return fn( __VA_ARGS__, 0x2 ); \
00375 case 0x3: return fn( __VA_ARGS__, 0x3 ); \
00376 case 0x4: return fn( __VA_ARGS__, 0x4 ); \
00377 case 0x5: return fn( __VA_ARGS__, 0x5 ); \
00378 case 0x6: return fn( __VA_ARGS__, 0x6 ); \
00379 case 0x7: return fn( __VA_ARGS__, 0x7 ); \
00380 case 0x8: return fn( __VA_ARGS__, 0x8 ); \
00381 case 0x9: return fn( __VA_ARGS__, 0x9 ); \
00382 case 0xA: return fn( __VA_ARGS__, 0xA ); \
00383 case 0xB: return fn( __VA_ARGS__, 0xB ); \
00384 case 0xC: return fn( __VA_ARGS__, 0xC ); \
00385 case 0xD: return fn( __VA_ARGS__, 0xD ); \
00386 case 0xE: return fn( __VA_ARGS__, 0xE ); \
00387 case 0xF: return fn( __VA_ARGS__, 0xF ); \
00388 case 0x10: return fn( __VA_ARGS__, 0x10 ); \
00389 case 0x11: return fn( __VA_ARGS__, 0x11 ); \
00390 case 0x12: return fn( __VA_ARGS__, 0x12 ); \
00391 case 0x13: return fn( __VA_ARGS__, 0x13 ); \
00392 case 0x14: return fn( __VA_ARGS__, 0x14 ); \
00393 case 0x15: return fn( __VA_ARGS__, 0x15 ); \
00394 case 0x16: return fn( __VA_ARGS__, 0x16 ); \
00395 case 0x17: return fn( __VA_ARGS__, 0x17 ); \
00396 case 0x18: return fn( __VA_ARGS__, 0x18 ); \
00397 case 0x19: return fn( __VA_ARGS__, 0x19 ); \
00398 case 0x1A: return fn( __VA_ARGS__, 0x1A ); \
00399 case 0x1B: return fn( __VA_ARGS__, 0x1B ); \
00400 case 0x1C: return fn( __VA_ARGS__, 0x1C ); \
00401 case 0x1D: return fn( __VA_ARGS__, 0x1D ); \
00402 case 0x1E: return fn( __VA_ARGS__, 0x1E ); \
00403 case 0x1F: return fn( __VA_ARGS__, 0x1F ); \
00404 case 0x20: return fn( __VA_ARGS__, 0x20 ); \
00405 case 0x21: return fn( __VA_ARGS__, 0x21 ); \
00406 case 0x22: return fn( __VA_ARGS__, 0x22 ); \
00407 case 0x23: return fn( __VA_ARGS__, 0x23 ); \
00408 case 0x24: return fn( __VA_ARGS__, 0x24 ); \
00409 case 0x25: return fn( __VA_ARGS__, 0x25 ); \
00410 case 0x26: return fn( __VA_ARGS__, 0x26 ); \
00411 case 0x27: return fn( __VA_ARGS__, 0x27 ); \
00412 case 0x28: return fn( __VA_ARGS__, 0x28 ); \
00413 case 0x29: return fn( __VA_ARGS__, 0x29 ); \
00414 case 0x2A: return fn( __VA_ARGS__, 0x2A ); \
00415 case 0x2B: return fn( __VA_ARGS__, 0x2B ); \
00416 case 0x2C: return fn( __VA_ARGS__, 0x2C ); \
00417 case 0x2D: return fn( __VA_ARGS__, 0x2D ); \
00418 case 0x2E: return fn( __VA_ARGS__, 0x2E ); \
00419 case 0x2F: return fn( __VA_ARGS__, 0x2F ); \
00420 case 0x30: return fn( __VA_ARGS__, 0x30 ); \
00421 case 0x31: return fn( __VA_ARGS__, 0x31 ); \
00422 case 0x32: return fn( __VA_ARGS__, 0x32 ); \
00423 case 0x33: return fn( __VA_ARGS__, 0x33 ); \
00424 case 0x34: return fn( __VA_ARGS__, 0x34 ); \
00425 case 0x35: return fn( __VA_ARGS__, 0x35 ); \
00426 case 0x36: return fn( __VA_ARGS__, 0x36 ); \
00427 case 0x37: return fn( __VA_ARGS__, 0x37 ); \
00428 case 0x38: return fn( __VA_ARGS__, 0x38 ); \
00429 case 0x39: return fn( __VA_ARGS__, 0x39 ); \
00430 case 0x3A: return fn( __VA_ARGS__, 0x3A ); \
00431 case 0x3B: return fn( __VA_ARGS__, 0x3B ); \
00432 case 0x3C: return fn( __VA_ARGS__, 0x3C ); \
00433 case 0x3D: return fn( __VA_ARGS__, 0x3D ); \
00434 case 0x3E: return fn( __VA_ARGS__, 0x3E ); \
00435 case 0x3F: return fn( __VA_ARGS__, 0x3F ); \
00436 case 0x40: return fn( __VA_ARGS__, 0x40 ); \
00437 case 0x41: return fn( __VA_ARGS__, 0x41 ); \
00438 case 0x42: return fn( __VA_ARGS__, 0x42 ); \
00439 case 0x43: return fn( __VA_ARGS__, 0x43 ); \
00440 case 0x44: return fn( __VA_ARGS__, 0x44 ); \
00441 case 0x45: return fn( __VA_ARGS__, 0x45 ); \
00442 case 0x46: return fn( __VA_ARGS__, 0x46 ); \
00443 case 0x47: return fn( __VA_ARGS__, 0x47 ); \
00444 case 0x48: return fn( __VA_ARGS__, 0x48 ); \
00445 case 0x49: return fn( __VA_ARGS__, 0x49 ); \
00446 case 0x4A: return fn( __VA_ARGS__, 0x4A ); \
00447 case 0x4B: return fn( __VA_ARGS__, 0x4B ); \
00448 case 0x4C: return fn( __VA_ARGS__, 0x4C ); \
00449 case 0x4D: return fn( __VA_ARGS__, 0x4D ); \
00450 case 0x4E: return fn( __VA_ARGS__, 0x4E ); \
00451 case 0x4F: return fn( __VA_ARGS__, 0x4F ); \
00452 case 0x50: return fn( __VA_ARGS__, 0x50 ); \
00453 case 0x51: return fn( __VA_ARGS__, 0x51 ); \
00454 case 0x52: return fn( __VA_ARGS__, 0x52 ); \
00455 case 0x53: return fn( __VA_ARGS__, 0x53 ); \
00456 case 0x54: return fn( __VA_ARGS__, 0x54 ); \
00457 case 0x55: return fn( __VA_ARGS__, 0x55 ); \
00458 case 0x56: return fn( __VA_ARGS__, 0x56 ); \
00459 case 0x57: return fn( __VA_ARGS__, 0x57 ); \
00460 case 0x58: return fn( __VA_ARGS__, 0x58 ); \
00461 case 0x59: return fn( __VA_ARGS__, 0x59 ); \
00462 case 0x5A: return fn( __VA_ARGS__, 0x5A ); \
00463 case 0x5B: return fn( __VA_ARGS__, 0x5B ); \
00464 case 0x5C: return fn( __VA_ARGS__, 0x5C ); \
00465 case 0x5D: return fn( __VA_ARGS__, 0x5D ); \
00466 case 0x5E: return fn( __VA_ARGS__, 0x5E ); \
00467 case 0x5F: return fn( __VA_ARGS__, 0x5F ); \
00468 case 0x60: return fn( __VA_ARGS__, 0x60 ); \
00469 case 0x61: return fn( __VA_ARGS__, 0x61 ); \
00470 case 0x62: return fn( __VA_ARGS__, 0x62 ); \
00471 case 0x63: return fn( __VA_ARGS__, 0x63 ); \
00472 case 0x64: return fn( __VA_ARGS__, 0x64 ); \
00473 case 0x65: return fn( __VA_ARGS__, 0x65 ); \
00474 case 0x66: return fn( __VA_ARGS__, 0x66 ); \
00475 case 0x67: return fn( __VA_ARGS__, 0x67 ); \
00476 case 0x68: return fn( __VA_ARGS__, 0x68 ); \
00477 case 0x69: return fn( __VA_ARGS__, 0x69 ); \
00478 case 0x6A: return fn( __VA_ARGS__, 0x6A ); \
00479 case 0x6B: return fn( __VA_ARGS__, 0x6B ); \
00480 case 0x6C: return fn( __VA_ARGS__, 0x6C ); \
00481 case 0x6D: return fn( __VA_ARGS__, 0x6D ); \
00482 case 0x6E: return fn( __VA_ARGS__, 0x6E ); \
00483 case 0x6F: return fn( __VA_ARGS__, 0x6F ); \
00484 case 0x70: return fn( __VA_ARGS__, 0x70 ); \
00485 case 0x71: return fn( __VA_ARGS__, 0x71 ); \
00486 case 0x72: return fn( __VA_ARGS__, 0x72 ); \
00487 case 0x73: return fn( __VA_ARGS__, 0x73 ); \
00488 case 0x74: return fn( __VA_ARGS__, 0x74 ); \
00489 case 0x75: return fn( __VA_ARGS__, 0x75 ); \
00490 case 0x76: return fn( __VA_ARGS__, 0x76 ); \
00491 case 0x77: return fn( __VA_ARGS__, 0x77 ); \
00492 case 0x78: return fn( __VA_ARGS__, 0x78 ); \
00493 case 0x79: return fn( __VA_ARGS__, 0x79 ); \
00494 case 0x7A: return fn( __VA_ARGS__, 0x7A ); \
00495 case 0x7B: return fn( __VA_ARGS__, 0x7B ); \
00496 case 0x7C: return fn( __VA_ARGS__, 0x7C ); \
00497 case 0x7D: return fn( __VA_ARGS__, 0x7D ); \
00498 case 0x7E: return fn( __VA_ARGS__, 0x7E ); \
00499 case 0x7F: return fn( __VA_ARGS__, 0x7F ); \
00500 case 0x80: return fn( __VA_ARGS__, 0x80 ); \
00501 case 0x81: return fn( __VA_ARGS__, 0x81 ); \
00502 case 0x82: return fn( __VA_ARGS__, 0x82 ); \
00503 case 0x83: return fn( __VA_ARGS__, 0x83 ); \
00504 case 0x84: return fn( __VA_ARGS__, 0x84 ); \
00505 case 0x85: return fn( __VA_ARGS__, 0x85 ); \
00506 case 0x86: return fn( __VA_ARGS__, 0x86 ); \
00507 case 0x87: return fn( __VA_ARGS__, 0x87 ); \
00508 case 0x88: return fn( __VA_ARGS__, 0x88 ); \
00509 case 0x89: return fn( __VA_ARGS__, 0x89 ); \
00510 case 0x8A: return fn( __VA_ARGS__, 0x8A ); \
00511 case 0x8B: return fn( __VA_ARGS__, 0x8B ); \
00512 case 0x8C: return fn( __VA_ARGS__, 0x8C ); \
00513 case 0x8D: return fn( __VA_ARGS__, 0x8D ); \
00514 case 0x8E: return fn( __VA_ARGS__, 0x8E ); \
00515 case 0x8F: return fn( __VA_ARGS__, 0x8F ); \
00516 case 0x90: return fn( __VA_ARGS__, 0x90 ); \
00517 case 0x91: return fn( __VA_ARGS__, 0x91 ); \
00518 case 0x92: return fn( __VA_ARGS__, 0x92 ); \
00519 case 0x93: return fn( __VA_ARGS__, 0x93 ); \
00520 case 0x94: return fn( __VA_ARGS__, 0x94 ); \
00521 case 0x95: return fn( __VA_ARGS__, 0x95 ); \
00522 case 0x96: return fn( __VA_ARGS__, 0x96 ); \
00523 case 0x97: return fn( __VA_ARGS__, 0x97 ); \
00524 case 0x98: return fn( __VA_ARGS__, 0x98 ); \
00525 case 0x99: return fn( __VA_ARGS__, 0x99 ); \
00526 case 0x9A: return fn( __VA_ARGS__, 0x9A ); \
00527 case 0x9B: return fn( __VA_ARGS__, 0x9B ); \
00528 case 0x9C: return fn( __VA_ARGS__, 0x9C ); \
00529 case 0x9D: return fn( __VA_ARGS__, 0x9D ); \
00530 case 0x9E: return fn( __VA_ARGS__, 0x9E ); \
00531 case 0x9F: return fn( __VA_ARGS__, 0x9F ); \
00532 case 0xA0: return fn( __VA_ARGS__, 0xA0 ); \
00533 case 0xA1: return fn( __VA_ARGS__, 0xA1 ); \
00534 case 0xA2: return fn( __VA_ARGS__, 0xA2 ); \
00535 case 0xA3: return fn( __VA_ARGS__, 0xA3 ); \
00536 case 0xA4: return fn( __VA_ARGS__, 0xA4 ); \
00537 case 0xA5: return fn( __VA_ARGS__, 0xA5 ); \
00538 case 0xA6: return fn( __VA_ARGS__, 0xA6 ); \
00539 case 0xA7: return fn( __VA_ARGS__, 0xA7 ); \
00540 case 0xA8: return fn( __VA_ARGS__, 0xA8 ); \
00541 case 0xA9: return fn( __VA_ARGS__, 0xA9 ); \
00542 case 0xAA: return fn( __VA_ARGS__, 0xAA ); \
00543 case 0xAB: return fn( __VA_ARGS__, 0xAB ); \
00544 case 0xAC: return fn( __VA_ARGS__, 0xAC ); \
00545 case 0xAD: return fn( __VA_ARGS__, 0xAD ); \
00546 case 0xAE: return fn( __VA_ARGS__, 0xAE ); \
00547 case 0xAF: return fn( __VA_ARGS__, 0xAF ); \
00548 case 0xB0: return fn( __VA_ARGS__, 0xB0 ); \
00549 case 0xB1: return fn( __VA_ARGS__, 0xB1 ); \
00550 case 0xB2: return fn( __VA_ARGS__, 0xB2 ); \
00551 case 0xB3: return fn( __VA_ARGS__, 0xB3 ); \
00552 case 0xB4: return fn( __VA_ARGS__, 0xB4 ); \
00553 case 0xB5: return fn( __VA_ARGS__, 0xB5 ); \
00554 case 0xB6: return fn( __VA_ARGS__, 0xB6 ); \
00555 case 0xB7: return fn( __VA_ARGS__, 0xB7 ); \
00556 case 0xB8: return fn( __VA_ARGS__, 0xB8 ); \
00557 case 0xB9: return fn( __VA_ARGS__, 0xB9 ); \
00558 case 0xBA: return fn( __VA_ARGS__, 0xBA ); \
00559 case 0xBB: return fn( __VA_ARGS__, 0xBB ); \
00560 case 0xBC: return fn( __VA_ARGS__, 0xBC ); \
00561 case 0xBD: return fn( __VA_ARGS__, 0xBD ); \
00562 case 0xBE: return fn( __VA_ARGS__, 0xBE ); \
00563 case 0xBF: return fn( __VA_ARGS__, 0xBF ); \
00564 case 0xC0: return fn( __VA_ARGS__, 0xC0 ); \
00565 case 0xC1: return fn( __VA_ARGS__, 0xC1 ); \
00566 case 0xC2: return fn( __VA_ARGS__, 0xC2 ); \
00567 case 0xC3: return fn( __VA_ARGS__, 0xC3 ); \
00568 case 0xC4: return fn( __VA_ARGS__, 0xC4 ); \
00569 case 0xC5: return fn( __VA_ARGS__, 0xC5 ); \
00570 case 0xC6: return fn( __VA_ARGS__, 0xC6 ); \
00571 case 0xC7: return fn( __VA_ARGS__, 0xC7 ); \
00572 case 0xC8: return fn( __VA_ARGS__, 0xC8 ); \
00573 case 0xC9: return fn( __VA_ARGS__, 0xC9 ); \
00574 case 0xCA: return fn( __VA_ARGS__, 0xCA ); \
00575 case 0xCB: return fn( __VA_ARGS__, 0xCB ); \
00576 case 0xCC: return fn( __VA_ARGS__, 0xCC ); \
00577 case 0xCD: return fn( __VA_ARGS__, 0xCD ); \
00578 case 0xCE: return fn( __VA_ARGS__, 0xCE ); \
00579 case 0xCF: return fn( __VA_ARGS__, 0xCF ); \
00580 case 0xD0: return fn( __VA_ARGS__, 0xD0 ); \
00581 case 0xD1: return fn( __VA_ARGS__, 0xD1 ); \
00582 case 0xD2: return fn( __VA_ARGS__, 0xD2 ); \
00583 case 0xD3: return fn( __VA_ARGS__, 0xD3 ); \
00584 case 0xD4: return fn( __VA_ARGS__, 0xD4 ); \
00585 case 0xD5: return fn( __VA_ARGS__, 0xD5 ); \
00586 case 0xD6: return fn( __VA_ARGS__, 0xD6 ); \
00587 case 0xD7: return fn( __VA_ARGS__, 0xD7 ); \
00588 case 0xD8: return fn( __VA_ARGS__, 0xD8 ); \
00589 case 0xD9: return fn( __VA_ARGS__, 0xD9 ); \
00590 case 0xDA: return fn( __VA_ARGS__, 0xDA ); \
00591 case 0xDB: return fn( __VA_ARGS__, 0xDB ); \
00592 case 0xDC: return fn( __VA_ARGS__, 0xDC ); \
00593 case 0xDD: return fn( __VA_ARGS__, 0xDD ); \
00594 case 0xDE: return fn( __VA_ARGS__, 0xDE ); \
00595 case 0xDF: return fn( __VA_ARGS__, 0xDF ); \
00596 case 0xE0: return fn( __VA_ARGS__, 0xE0 ); \
00597 case 0xE1: return fn( __VA_ARGS__, 0xE1 ); \
00598 case 0xE2: return fn( __VA_ARGS__, 0xE2 ); \
00599 case 0xE3: return fn( __VA_ARGS__, 0xE3 ); \
00600 case 0xE4: return fn( __VA_ARGS__, 0xE4 ); \
00601 case 0xE5: return fn( __VA_ARGS__, 0xE5 ); \
00602 case 0xE6: return fn( __VA_ARGS__, 0xE6 ); \
00603 case 0xE7: return fn( __VA_ARGS__, 0xE7 ); \
00604 case 0xE8: return fn( __VA_ARGS__, 0xE8 ); \
00605 case 0xE9: return fn( __VA_ARGS__, 0xE9 ); \
00606 case 0xEA: return fn( __VA_ARGS__, 0xEA ); \
00607 case 0xEB: return fn( __VA_ARGS__, 0xEB ); \
00608 case 0xEC: return fn( __VA_ARGS__, 0xEC ); \
00609 case 0xED: return fn( __VA_ARGS__, 0xED ); \
00610 case 0xEE: return fn( __VA_ARGS__, 0xEE ); \
00611 case 0xEF: return fn( __VA_ARGS__, 0xEF ); \
00612 case 0xF0: return fn( __VA_ARGS__, 0xF0 ); \
00613 case 0xF1: return fn( __VA_ARGS__, 0xF1 ); \
00614 case 0xF2: return fn( __VA_ARGS__, 0xF2 ); \
00615 case 0xF3: return fn( __VA_ARGS__, 0xF3 ); \
00616 case 0xF4: return fn( __VA_ARGS__, 0xF4 ); \
00617 case 0xF5: return fn( __VA_ARGS__, 0xF5 ); \
00618 case 0xF6: return fn( __VA_ARGS__, 0xF6 ); \
00619 case 0xF7: return fn( __VA_ARGS__, 0xF7 ); \
00620 case 0xF8: return fn( __VA_ARGS__, 0xF8 ); \
00621 case 0xF9: return fn( __VA_ARGS__, 0xF9 ); \
00622 case 0xFA: return fn( __VA_ARGS__, 0xFA ); \
00623 case 0xFB: return fn( __VA_ARGS__, 0xFB ); \
00624 case 0xFC: return fn( __VA_ARGS__, 0xFC ); \
00625 case 0xFD: return fn( __VA_ARGS__, 0xFD ); \
00626 case 0xFE: return fn( __VA_ARGS__, 0xFE ); \
00627 default: return fn( __VA_ARGS__, 0xFF );
00628
00629 #endif // __BASE_H__