Revision 522777bb

b/dyngen-exec.h
89 89
#undef NULL
90 90
#define NULL 0
91 91

  
92
#ifdef __i386__
92
#if defined(__i386__)
93 93
#define AREG0 "ebp"
94 94
#define AREG1 "ebx"
95 95
#define AREG2 "esi"
96 96
#define AREG3 "edi"
97
#endif
98
#ifdef __x86_64__
97
#elif defined(__x86_64__)
99 98
#define AREG0 "r14"
100 99
#define AREG1 "r15"
101 100
#define AREG2 "r12"
102 101
#define AREG3 "r13"
103 102
//#define AREG4 "rbp"
104 103
//#define AREG5 "rbx"
105
#endif
106
#ifdef __powerpc__
104
#elif defined(__powerpc__)
107 105
#define AREG0 "r27"
108 106
#define AREG1 "r24"
109 107
#define AREG2 "r25"
......
121 119
#endif
122 120
#define USE_INT_TO_FLOAT_HELPERS
123 121
#define BUGGY_GCC_DIV64
124
#endif
125
#ifdef __arm__
122
#elif defined(__arm__)
126 123
#define AREG0 "r7"
127 124
#define AREG1 "r4"
128 125
#define AREG2 "r5"
129 126
#define AREG3 "r6"
130
#endif
131
#ifdef __mips__
127
#elif defined(__mips__)
132 128
#define AREG0 "fp"
133 129
#define AREG1 "s0"
134 130
#define AREG2 "s1"
......
138 134
#define AREG6 "s5"
139 135
#define AREG7 "s6"
140 136
#define AREG8 "s7"
141
#endif
142
#ifdef __sparc__
137
#elif defined(__sparc__)
143 138
#ifdef HOST_SOLARIS
144 139
#define AREG0 "g2"
145 140
#define AREG1 "g3"
......
168 163
#endif
169 164
#endif
170 165
#define USE_FP_CONVERT
171
#endif
172
#ifdef __s390__
166
#elif defined(__s390__)
173 167
#define AREG0 "r10"
174 168
#define AREG1 "r7"
175 169
#define AREG2 "r8"
176 170
#define AREG3 "r9"
177
#endif
178
#ifdef __alpha__
171
#elif defined(__alpha__)
179 172
/* Note $15 is the frame pointer, so anything in op-i386.c that would
180 173
   require a frame pointer, like alloca, would probably loose.  */
181 174
#define AREG0 "$15"
......
185 178
#define AREG4 "$12"
186 179
#define AREG5 "$13"
187 180
#define AREG6 "$14"
188
#endif
189
#ifdef __mc68000
181
#elif defined(__mc68000)
190 182
#define AREG0 "%a5"
191 183
#define AREG1 "%a4"
192 184
#define AREG2 "%d7"
193 185
#define AREG3 "%d6"
194 186
#define AREG4 "%d5"
195
#endif
196
#ifdef __ia64__
187
#elif defined(__ia64__)
197 188
#define AREG0 "r7"
198 189
#define AREG1 "r4"
199 190
#define AREG2 "r5"
200 191
#define AREG3 "r6"
192
#else
193
#error unsupported CPU
201 194
#endif
202 195

  
203 196
/* force GCC to generate only one epilog at the end of the function */
......
250 243
#define ASM_NAME(x) #x
251 244
#endif
252 245

  
253
#ifdef __i386__
246
#if defined(__i386__)
254 247
#define EXIT_TB() asm volatile ("ret")
255 248
#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n)
256
#endif
257
#ifdef __x86_64__
249
#elif defined(__x86_64__)
258 250
#define EXIT_TB() asm volatile ("ret")
259 251
#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n)
260
#endif
261
#ifdef __powerpc__
252
#elif defined(__powerpc__)
262 253
#define EXIT_TB() asm volatile ("blr")
263 254
#define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n)
264
#endif
265
#ifdef __s390__
255
#elif defined(__s390__)
266 256
#define EXIT_TB() asm volatile ("br %r14")
267 257
#define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n)
268
#endif
269
#ifdef __alpha__
258
#elif defined(__alpha__)
270 259
#define EXIT_TB() asm volatile ("ret")
271
#endif
272
#ifdef __ia64__
260
#elif defined(__ia64__)
273 261
#define EXIT_TB() asm volatile ("br.ret.sptk.many b0;;")
274 262
#define GOTO_LABEL_PARAM(n) asm volatile ("br.sptk.many " \
275 263
					  ASM_NAME(__op_gen_label) #n)
276
#endif
277
#ifdef __sparc__
264
#elif defined(__sparc__)
278 265
#define EXIT_TB() asm volatile ("jmpl %i0 + 8, %g0; nop")
279 266
#define GOTO_LABEL_PARAM(n) asm volatile ("ba " ASM_NAME(__op_gen_label) #n ";nop")
280
#endif
281
#ifdef __arm__
267
#elif defined(__arm__)
282 268
#define EXIT_TB() asm volatile ("b exec_loop")
283 269
#define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n)
284
#endif
285
#ifdef __mc68000
270
#elif defined(__mc68000)
286 271
#define EXIT_TB() asm volatile ("rts")
287
#endif
288
#ifdef __mips__
272
#elif defined(__mips__)
289 273
#define EXIT_TB() asm volatile ("jr $ra")
290 274
#define GOTO_LABEL_PARAM(n) asm volatile (".set noat; la $1, " ASM_NAME(__op_gen_label) #n "; jr $1; .set at")
275
#else
276
#error unsupported CPU
291 277
#endif
292 278

  
293 279
#endif /* !defined(__DYNGEN_EXEC_H__) */
b/dyngen.h
28 28
#endif
29 29
int __op_jmp0, __op_jmp1, __op_jmp2, __op_jmp3;
30 30

  
31
#ifdef __i386__
31
#if defined(__i386__) || defined(__x86_64__) || defined(__s390__)
32 32
static inline void flush_icache_range(unsigned long start, unsigned long stop)
33 33
{
34 34
}
35
#endif
36

  
37
#ifdef __x86_64__
38
static inline void flush_icache_range(unsigned long start, unsigned long stop)
39
{
40
}
41
#endif
42

  
43
#ifdef __s390__
44
static inline void flush_icache_range(unsigned long start, unsigned long stop)
45
{
46
}
47
#endif
48

  
49
#ifdef __ia64__
35
#elif defined(__ia64__)
50 36
static inline void flush_icache_range(unsigned long start, unsigned long stop)
51 37
{
52 38
    while (start < stop) {
......
55 41
    }
56 42
    asm volatile (";;sync.i;;srlz.i;;");
57 43
}
58
#endif
59

  
60
#ifdef __powerpc__
44
#elif defined(__powerpc__)
61 45

  
62 46
#define MIN_CACHE_LINE_SIZE 8 /* conservative value */
63 47

  
......
78 62
    asm volatile ("sync" : : : "memory");
79 63
    asm volatile ("isync" : : : "memory");
80 64
}
81
#endif
82

  
83
#ifdef __alpha__
65
#elif defined(__alpha__)
84 66
static inline void flush_icache_range(unsigned long start, unsigned long stop)
85 67
{
86 68
    asm ("imb");
87 69
}
88
#endif
89

  
90
#ifdef __sparc__
91

  
70
#elif defined(__sparc__)
92 71
static void inline flush_icache_range(unsigned long start, unsigned long stop)
93 72
{
94 73
	unsigned long p;
......
99 78
	for (; p < stop; p += 8)
100 79
		__asm__ __volatile__("flush\t%0" : : "r" (p));
101 80
}
102

  
103
#endif
104

  
105
#ifdef __arm__
81
#elif defined(__arm__)
106 82
static inline void flush_icache_range(unsigned long start, unsigned long stop)
107 83
{
108 84
    register unsigned long _beg __asm ("a1") = start;
......
110 86
    register unsigned long _flg __asm ("a3") = 0;
111 87
    __asm __volatile__ ("swi 0x9f0002" : : "r" (_beg), "r" (_end), "r" (_flg));
112 88
}
113
#endif
89
#elif defined(__mc68000)
114 90

  
115
#ifdef __mc68000
116
#include <asm/cachectl.h>
91
# include <asm/cachectl.h>
117 92
static inline void flush_icache_range(unsigned long start, unsigned long stop)
118 93
{
119 94
    cacheflush(start,FLUSH_SCOPE_LINE,FLUSH_CACHE_BOTH,stop-start+16);
120 95
}
96
#elif defined(__mips__)
97

  
98
#include <sys/cachectl.h>
99
static inline void flush_icache_range(unsigned long start, unsigned long stop)
100
{
101
    _flush_cache ((void *)start, stop - start, BCACHE);
102
}
103
#else
104
#error unsupported CPU
121 105
#endif
122 106

  
123 107
#ifdef __alpha__
......
248 232

  
249 233
#ifdef __ia64
250 234

  
251

  
252 235
/* Patch instruction with "val" where "mask" has 1 bits. */
253 236
static inline void ia64_patch (uint64_t insn_addr, uint64_t mask, uint64_t val)
254 237
{
......
463 446
}
464 447

  
465 448
#endif
466

  
467
#ifdef __mips__
468
#include <sys/cachectl.h>
469
static inline void flush_icache_range(unsigned long start, unsigned long stop)
470
{
471
    _flush_cache ((void *)start, stop - start, BCACHE);
472
}
473
#endif

Also available in: Unified diff