1
//============================================================
3
// osd_cpu.h - SDL CPU-specific data types
5
// Copyright (c) 1996-2007, Nicola Salmoria and the MAME Team.
6
// Visit http://mamedev.org for licensing and usage restrictions.
8
//============================================================
10
/*******************************************************************************
12
* Define size independent data types and operations. *
14
* The following types must be supported by all platforms: *
16
* UINT8 - Unsigned 8-bit Integer INT8 - Signed 8-bit integer *
17
* UINT16 - Unsigned 16-bit Integer INT16 - Signed 16-bit integer *
18
* UINT32 - Unsigned 32-bit Integer INT32 - Signed 32-bit integer *
19
* UINT64 - Unsigned 64-bit Integer INT64 - Signed 64-bit integer *
22
* The macro names for the artithmatic operations are composed as follows: *
24
* XXX_R_A_B, where XXX - 3 letter operation code (ADD, SUB, etc.) *
25
* R - The type of the result *
26
* A - The type of operand 1 *
27
* B - The type of operand 2 (if binary operation) *
29
* Each type is one of: U8,8,U16,16,U32,32,U64,64 *
31
*******************************************************************************/
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)
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)
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)
49
#define DIV_64_64_32(A,B) ((A)/(B))
50
#define DIV_U64_U64_U32(A,B) ((A)/(UINT32)(B))
52
#define MOD_32_64_32(A,B) ((A)%(B))
53
#define MOD_U32_U64_U32(A,B) ((A)%(UINT32)(B))
55
#define MUL_64_32_32(A,B) ((A)*(INT64)(B))
56
#define MUL_U64_U32_U32(A,B) ((A)*(UINT64)(UINT32)(B))
58
#endif /* defined OSD_CPU_H */