Statistics
| Branch: | Revision:

root / dyngen-exec.h @ e8a6aec9

History | View | Annotate | Download (3.6 kB)

1 79638566 bellard
/*
2 79638566 bellard
 *  dyngen defines for micro operation code
3 79638566 bellard
 *
4 79638566 bellard
 *  Copyright (c) 2003 Fabrice Bellard
5 79638566 bellard
 *
6 79638566 bellard
 * This library is free software; you can redistribute it and/or
7 79638566 bellard
 * modify it under the terms of the GNU Lesser General Public
8 79638566 bellard
 * License as published by the Free Software Foundation; either
9 79638566 bellard
 * version 2 of the License, or (at your option) any later version.
10 79638566 bellard
 *
11 79638566 bellard
 * This library is distributed in the hope that it will be useful,
12 79638566 bellard
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 79638566 bellard
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 79638566 bellard
 * Lesser General Public License for more details.
15 79638566 bellard
 *
16 79638566 bellard
 * You should have received a copy of the GNU Lesser General Public
17 79638566 bellard
 * License along with this library; if not, write to the Free Software
18 fad6cb1a aurel32
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
19 79638566 bellard
 */
20 67867308 bellard
#if !defined(__DYNGEN_EXEC_H__)
21 67867308 bellard
#define __DYNGEN_EXEC_H__
22 67867308 bellard
23 ec530c81 bellard
/* prevent Solaris from trying to typedef FILE in gcc's
24 ec530c81 bellard
   include/floatingpoint.h which will conflict with the
25 ec530c81 bellard
   definition down below */
26 ec530c81 bellard
#ifdef __sun__
27 ec530c81 bellard
#define _FILEDEFED
28 ec530c81 bellard
#endif
29 ec530c81 bellard
30 1e6cae95 bellard
/* NOTE: standard headers should be used with special care at this
31 1e6cae95 bellard
   point because host CPU registers are used as global variables. Some
32 1e6cae95 bellard
   host headers do not allow that. */
33 513b500f bellard
#include <stddef.h>
34 b7df4bcc aurel32
#include <stdint.h>
35 513b500f bellard
36 128ab2ff blueswir1
#ifdef __OpenBSD__
37 128ab2ff blueswir1
#include <sys/types.h>
38 128ab2ff blueswir1
#endif
39 79638566 bellard
40 1057eaa7 pbrook
/* XXX: This may be wrong for 64-bit ILP32 hosts.  */
41 1057eaa7 pbrook
typedef void * host_reg_t;
42 1057eaa7 pbrook
43 179a2c19 blueswir1
#ifdef HOST_BSD
44 cce1075c ths
typedef struct __sFILE FILE;
45 cce1075c ths
#else
46 79638566 bellard
typedef struct FILE FILE;
47 cce1075c ths
#endif
48 79638566 bellard
extern int fprintf(FILE *, const char *, ...);
49 24c7b0e3 ths
extern int fputs(const char *, FILE *);
50 79638566 bellard
extern int printf(const char *, ...);
51 513b500f bellard
#undef NULL
52 79638566 bellard
#define NULL 0
53 79638566 bellard
54 522777bb ths
#if defined(__i386__)
55 79638566 bellard
#define AREG0 "ebp"
56 79638566 bellard
#define AREG1 "ebx"
57 79638566 bellard
#define AREG2 "esi"
58 522777bb ths
#elif defined(__x86_64__)
59 43024c6a ths
#define AREG0 "r14"
60 43024c6a ths
#define AREG1 "r15"
61 bc51c5c9 bellard
#define AREG2 "r12"
62 e58ffeb3 malc
#elif defined(_ARCH_PPC)
63 79638566 bellard
#define AREG0 "r27"
64 79638566 bellard
#define AREG1 "r24"
65 79638566 bellard
#define AREG2 "r25"
66 522777bb ths
#elif defined(__arm__)
67 79638566 bellard
#define AREG0 "r7"
68 79638566 bellard
#define AREG1 "r4"
69 79638566 bellard
#define AREG2 "r5"
70 f54b3f92 aurel32
#elif defined(__hppa__)
71 f54b3f92 aurel32
#define AREG0 "r17"
72 f54b3f92 aurel32
#define AREG1 "r14"
73 f54b3f92 aurel32
#define AREG2 "r15"
74 522777bb ths
#elif defined(__mips__)
75 c4b89d18 ths
#define AREG0 "fp"
76 79638566 bellard
#define AREG1 "s0"
77 79638566 bellard
#define AREG2 "s1"
78 522777bb ths
#elif defined(__sparc__)
79 fdbb4691 bellard
#ifdef HOST_SOLARIS
80 fdbb4691 bellard
#define AREG0 "g2"
81 fdbb4691 bellard
#define AREG1 "g3"
82 fdbb4691 bellard
#define AREG2 "g4"
83 fdbb4691 bellard
#else
84 74ccb34e bellard
#ifdef __sparc_v9__
85 e97b640d blueswir1
#define AREG0 "g5"
86 e97b640d blueswir1
#define AREG1 "g6"
87 e97b640d blueswir1
#define AREG2 "g7"
88 74ccb34e bellard
#else
89 79638566 bellard
#define AREG0 "g6"
90 79638566 bellard
#define AREG1 "g1"
91 79638566 bellard
#define AREG2 "g2"
92 fdbb4691 bellard
#endif
93 74ccb34e bellard
#endif
94 522777bb ths
#elif defined(__s390__)
95 79638566 bellard
#define AREG0 "r10"
96 79638566 bellard
#define AREG1 "r7"
97 79638566 bellard
#define AREG2 "r8"
98 522777bb ths
#elif defined(__alpha__)
99 79638566 bellard
/* Note $15 is the frame pointer, so anything in op-i386.c that would
100 79638566 bellard
   require a frame pointer, like alloca, would probably loose.  */
101 79638566 bellard
#define AREG0 "$15"
102 79638566 bellard
#define AREG1 "$9"
103 79638566 bellard
#define AREG2 "$10"
104 522777bb ths
#elif defined(__mc68000)
105 38e584a0 bellard
#define AREG0 "%a5"
106 38e584a0 bellard
#define AREG1 "%a4"
107 38e584a0 bellard
#define AREG2 "%d7"
108 522777bb ths
#elif defined(__ia64__)
109 b8076a74 bellard
#define AREG0 "r7"
110 b8076a74 bellard
#define AREG1 "r4"
111 b8076a74 bellard
#define AREG2 "r5"
112 522777bb ths
#else
113 522777bb ths
#error unsupported CPU
114 79638566 bellard
#endif
115 79638566 bellard
116 79638566 bellard
#define xglue(x, y) x ## y
117 79638566 bellard
#define glue(x, y) xglue(x, y)
118 9621339d bellard
#define stringify(s)        tostring(s)
119 9621339d bellard
#define tostring(s)        #s
120 79638566 bellard
121 9b7b85d2 pbrook
/* The return address may point to the start of the next instruction.
122 9b7b85d2 pbrook
   Subtracting one gets us the call instruction itself.  */
123 9b7b85d2 pbrook
#if defined(__s390__)
124 9b7b85d2 pbrook
# define GETPC() ((void*)(((unsigned long)__builtin_return_address(0) & 0x7fffffffUL) - 1))
125 9b7b85d2 pbrook
#elif defined(__arm__)
126 9b7b85d2 pbrook
/* Thumb return addresses have the low bit set, so we need to subtract two.
127 9b7b85d2 pbrook
   This is still safe in ARM mode because instructions are 4 bytes.  */
128 9b7b85d2 pbrook
# define GETPC() ((void *)((unsigned long)__builtin_return_address(0) - 2))
129 9b7b85d2 pbrook
#else
130 9b7b85d2 pbrook
# define GETPC() ((void *)((unsigned long)__builtin_return_address(0) - 1))
131 9b7b85d2 pbrook
#endif
132 9b7b85d2 pbrook
133 67867308 bellard
#endif /* !defined(__DYNGEN_EXEC_H__) */