root / exec-i386.h @ 7d13299d
History | View | Annotate | Download (2.7 kB)
1 | 7d13299d | bellard | /* i386 execution defines */
|
---|---|---|---|
2 | 7d13299d | bellard | |
3 | 7d13299d | bellard | typedef unsigned char uint8_t; |
4 | 7d13299d | bellard | typedef unsigned short uint16_t; |
5 | 7d13299d | bellard | typedef unsigned int uint32_t; |
6 | 7d13299d | bellard | typedef unsigned long long uint64_t; |
7 | 7d13299d | bellard | |
8 | 7d13299d | bellard | typedef signed char int8_t; |
9 | 7d13299d | bellard | typedef signed short int16_t; |
10 | 7d13299d | bellard | typedef signed int int32_t; |
11 | 7d13299d | bellard | typedef signed long long int64_t; |
12 | 7d13299d | bellard | |
13 | 7d13299d | bellard | #define bswap32(x) \
|
14 | 7d13299d | bellard | ({ \ |
15 | 7d13299d | bellard | uint32_t __x = (x); \ |
16 | 7d13299d | bellard | ((uint32_t)( \ |
17 | 7d13299d | bellard | (((uint32_t)(__x) & (uint32_t)0x000000ffUL) << 24) | \ |
18 | 7d13299d | bellard | (((uint32_t)(__x) & (uint32_t)0x0000ff00UL) << 8) | \ |
19 | 7d13299d | bellard | (((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >> 8) | \ |
20 | 7d13299d | bellard | (((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) )); \ |
21 | 7d13299d | bellard | }) |
22 | 7d13299d | bellard | |
23 | 7d13299d | bellard | #define NULL 0 |
24 | 7d13299d | bellard | #include <fenv.h> |
25 | 7d13299d | bellard | |
26 | 7d13299d | bellard | typedef struct FILE FILE; |
27 | 7d13299d | bellard | extern FILE *logfile;
|
28 | 7d13299d | bellard | extern int loglevel; |
29 | 7d13299d | bellard | extern int fprintf(FILE *, const char *, ...); |
30 | 7d13299d | bellard | |
31 | 7d13299d | bellard | #ifdef __i386__
|
32 | 7d13299d | bellard | register unsigned int T0 asm("ebx"); |
33 | 7d13299d | bellard | register unsigned int T1 asm("esi"); |
34 | 7d13299d | bellard | register unsigned int A0 asm("edi"); |
35 | 7d13299d | bellard | register struct CPUX86State *env asm("ebp"); |
36 | 7d13299d | bellard | #endif
|
37 | 7d13299d | bellard | #ifdef __powerpc__
|
38 | 7d13299d | bellard | register unsigned int T0 asm("r24"); |
39 | 7d13299d | bellard | register unsigned int T1 asm("r25"); |
40 | 7d13299d | bellard | register unsigned int A0 asm("r26"); |
41 | 7d13299d | bellard | register struct CPUX86State *env asm("r27"); |
42 | 7d13299d | bellard | #endif
|
43 | 7d13299d | bellard | #ifdef __arm__
|
44 | 7d13299d | bellard | register unsigned int T0 asm("r4"); |
45 | 7d13299d | bellard | register unsigned int T1 asm("r5"); |
46 | 7d13299d | bellard | register unsigned int A0 asm("r6"); |
47 | 7d13299d | bellard | register struct CPUX86State *env asm("r7"); |
48 | 7d13299d | bellard | #endif
|
49 | 7d13299d | bellard | #ifdef __mips__
|
50 | 7d13299d | bellard | register unsigned int T0 asm("s0"); |
51 | 7d13299d | bellard | register unsigned int T1 asm("s1"); |
52 | 7d13299d | bellard | register unsigned int A0 asm("s2"); |
53 | 7d13299d | bellard | register struct CPUX86State *env asm("s3"); |
54 | 7d13299d | bellard | #endif
|
55 | 7d13299d | bellard | #ifdef __sparc__
|
56 | 7d13299d | bellard | register unsigned int T0 asm("l0"); |
57 | 7d13299d | bellard | register unsigned int T1 asm("l1"); |
58 | 7d13299d | bellard | register unsigned int A0 asm("l2"); |
59 | 7d13299d | bellard | register struct CPUX86State *env asm("l3"); |
60 | 7d13299d | bellard | #endif
|
61 | 7d13299d | bellard | |
62 | 7d13299d | bellard | /* force GCC to generate only one epilog at the end of the function */
|
63 | 7d13299d | bellard | #define FORCE_RET() asm volatile (""); |
64 | 7d13299d | bellard | |
65 | 7d13299d | bellard | #ifndef OPPROTO
|
66 | 7d13299d | bellard | #define OPPROTO
|
67 | 7d13299d | bellard | #endif
|
68 | 7d13299d | bellard | |
69 | 7d13299d | bellard | #define xglue(x, y) x ## y |
70 | 7d13299d | bellard | #define glue(x, y) xglue(x, y)
|
71 | 7d13299d | bellard | |
72 | 7d13299d | bellard | #define EAX (env->regs[R_EAX])
|
73 | 7d13299d | bellard | #define ECX (env->regs[R_ECX])
|
74 | 7d13299d | bellard | #define EDX (env->regs[R_EDX])
|
75 | 7d13299d | bellard | #define EBX (env->regs[R_EBX])
|
76 | 7d13299d | bellard | #define ESP (env->regs[R_ESP])
|
77 | 7d13299d | bellard | #define EBP (env->regs[R_EBP])
|
78 | 7d13299d | bellard | #define ESI (env->regs[R_ESI])
|
79 | 7d13299d | bellard | #define EDI (env->regs[R_EDI])
|
80 | 7d13299d | bellard | #define PC (env->pc)
|
81 | 7d13299d | bellard | #define DF (env->df)
|
82 | 7d13299d | bellard | |
83 | 7d13299d | bellard | #define CC_SRC (env->cc_src)
|
84 | 7d13299d | bellard | #define CC_DST (env->cc_dst)
|
85 | 7d13299d | bellard | #define CC_OP (env->cc_op)
|
86 | 7d13299d | bellard | |
87 | 7d13299d | bellard | /* float macros */
|
88 | 7d13299d | bellard | #define FT0 (env->ft0)
|
89 | 7d13299d | bellard | #define ST0 (env->fpregs[env->fpstt])
|
90 | 7d13299d | bellard | #define ST(n) (env->fpregs[(env->fpstt + (n)) & 7]) |
91 | 7d13299d | bellard | #define ST1 ST(1) |
92 | 7d13299d | bellard | |
93 | 7d13299d | bellard | extern int __op_param1, __op_param2, __op_param3; |
94 | 7d13299d | bellard | #define PARAM1 ((long)(&__op_param1)) |
95 | 7d13299d | bellard | #define PARAM2 ((long)(&__op_param2)) |
96 | 7d13299d | bellard | #define PARAM3 ((long)(&__op_param3)) |
97 | 7d13299d | bellard | |
98 | 7d13299d | bellard | #include "cpu-i386.h" |
99 | 7d13299d | bellard | |
100 | 7d13299d | bellard | typedef struct CCTable { |
101 | 7d13299d | bellard | int (*compute_all)(void); /* return all the flags */ |
102 | 7d13299d | bellard | int (*compute_c)(void); /* return the C flag */ |
103 | 7d13299d | bellard | } CCTable; |
104 | 7d13299d | bellard | |
105 | 7d13299d | bellard | extern CCTable cc_table[]; |