Mercurial > audlegacy-plugins
comparison src/psf2/osd_cpu.h @ 2737:62cc6d667119
Import a bunch of stuff for new psf2 plugin.
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Mon, 30 Jun 2008 20:20:53 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2731:324f950774cb | 2737:62cc6d667119 |
---|---|
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 #include "ao.h" | |
29 | |
30 /* Combine two 32-bit integers into a 64-bit integer */ | |
31 #define COMBINE_64_32_32(A,B) ((((UINT64)(A))<<32) | (UINT32)(B)) | |
32 #define COMBINE_U64_U32_U32(A,B) COMBINE_64_32_32(A,B) | |
33 | |
34 /* Return upper 32 bits of a 64-bit integer */ | |
35 #define HI32_32_64(A) (((UINT64)(A)) >> 32) | |
36 #define HI32_U32_U64(A) HI32_32_64(A) | |
37 | |
38 /* Return lower 32 bits of a 64-bit integer */ | |
39 #define LO32_32_64(A) ((A) & 0xffffffff) | |
40 #define LO32_U32_U64(A) LO32_32_64(A) | |
41 | |
42 #define DIV_64_64_32(A,B) ((A)/(B)) | |
43 #define DIV_U64_U64_U32(A,B) ((A)/(UINT32)(B)) | |
44 | |
45 #define MOD_32_64_32(A,B) ((A)%(B)) | |
46 #define MOD_U32_U64_U32(A,B) ((A)%(UINT32)(B)) | |
47 | |
48 #define MUL_64_32_32(A,B) ((A)*(INT64)(B)) | |
49 #define MUL_U64_U32_U32(A,B) ((A)*(UINT64)(UINT32)(B)) | |
50 | |
51 | |
52 /****************************************************************************** | |
53 * Union of UINT8, UINT16 and UINT32 in native endianess of the target | |
54 * This is used to access bytes and words in a machine independent manner. | |
55 * The upper bytes h2 and h3 normally contain zero (16 bit CPU cores) | |
56 * thus PAIR.d can be used to pass arguments to the memory system | |
57 * which expects 'int' really. | |
58 ******************************************************************************/ | |
59 typedef union { | |
60 #if LSB_FIRST | |
61 struct { UINT8 l,h,h2,h3; } b; | |
62 struct { UINT16 l,h; } w; | |
63 #else | |
64 struct { UINT8 h3,h2,h,l; } b; | |
65 struct { UINT16 h,l; } w; | |
66 #endif | |
67 UINT32 d; | |
68 } PAIR; | |
69 | |
70 #endif /* defined OSD_CPU_H */ |