root / target-m68k / op-hacks.h @ 36bb244b
History | View | Annotate | Download (1.5 kB)
1 | e6e5906b | pbrook | /* Various hacks to make code written for a dynamic code generator work
|
---|---|---|---|
2 | e6e5906b | pbrook | with regular QEMU. */
|
3 | e6e5906b | pbrook | |
4 | e6e5906b | pbrook | static int free_qreg; |
5 | e6e5906b | pbrook | |
6 | e6e5906b | pbrook | #define QMODE_I32 1 |
7 | e6e5906b | pbrook | #define QMODE_F32 1 |
8 | e6e5906b | pbrook | #define QMODE_F64 2 |
9 | e6e5906b | pbrook | |
10 | e6e5906b | pbrook | static inline int gen_new_qreg(int mode) |
11 | e6e5906b | pbrook | { |
12 | e6e5906b | pbrook | int qreg;
|
13 | e6e5906b | pbrook | |
14 | e6e5906b | pbrook | qreg = free_qreg; |
15 | e6e5906b | pbrook | free_qreg += mode; |
16 | e6e5906b | pbrook | if (free_qreg > MAX_QREGS) {
|
17 | e6e5906b | pbrook | fprintf(stderr, "qreg overflow\n");
|
18 | e6e5906b | pbrook | abort(); |
19 | e6e5906b | pbrook | } |
20 | e6e5906b | pbrook | return qreg + TARGET_NUM_QREGS;
|
21 | e6e5906b | pbrook | } |
22 | e6e5906b | pbrook | |
23 | e6e5906b | pbrook | static inline int gen_im32(uint32_t i) |
24 | e6e5906b | pbrook | { |
25 | e6e5906b | pbrook | int qreg = gen_new_qreg(QMODE_I32);
|
26 | e6e5906b | pbrook | gen_op_mov32_im(qreg, i); |
27 | e6e5906b | pbrook | return qreg;
|
28 | e6e5906b | pbrook | } |
29 | e6e5906b | pbrook | |
30 | e6e5906b | pbrook | static inline void gen_op_ldf32(int dest, int addr) |
31 | e6e5906b | pbrook | { |
32 | e6e5906b | pbrook | gen_op_ld32(dest, addr); |
33 | e6e5906b | pbrook | } |
34 | e6e5906b | pbrook | |
35 | e6e5906b | pbrook | static inline void gen_op_stf32(int addr, int dest) |
36 | e6e5906b | pbrook | { |
37 | e6e5906b | pbrook | gen_op_st32(addr, dest); |
38 | e6e5906b | pbrook | } |
39 | e6e5906b | pbrook | |
40 | e6e5906b | pbrook | static inline void gen_op_pack_32_f32(int dest, int src) |
41 | e6e5906b | pbrook | { |
42 | e6e5906b | pbrook | gen_op_mov32(dest, src); |
43 | e6e5906b | pbrook | } |
44 | e6e5906b | pbrook | |
45 | e6e5906b | pbrook | static inline void gen_op_pack_f32_32(int dest, int src) |
46 | e6e5906b | pbrook | { |
47 | e6e5906b | pbrook | gen_op_mov32(dest, src); |
48 | e6e5906b | pbrook | } |
49 | e6e5906b | pbrook | |
50 | e6e5906b | pbrook | static inline void gen_op_flags_set(void) |
51 | e6e5906b | pbrook | { |
52 | e6e5906b | pbrook | /* Dummy op. */
|
53 | e6e5906b | pbrook | } |
54 | e6e5906b | pbrook | |
55 | e6e5906b | pbrook | static inline void gen_op_shl_im_cc(int val, int shift) |
56 | e6e5906b | pbrook | { |
57 | e6e5906b | pbrook | gen_op_shl_cc(val, gen_im32(shift)); |
58 | e6e5906b | pbrook | } |
59 | e6e5906b | pbrook | |
60 | e6e5906b | pbrook | static inline void gen_op_shr_im_cc(int val, int shift) |
61 | e6e5906b | pbrook | { |
62 | e6e5906b | pbrook | gen_op_shr_cc(val, gen_im32(shift)); |
63 | e6e5906b | pbrook | } |
64 | e6e5906b | pbrook | |
65 | e6e5906b | pbrook | static inline void gen_op_sar_im_cc(int val, int shift) |
66 | e6e5906b | pbrook | { |
67 | e6e5906b | pbrook | gen_op_sar_cc(val, gen_im32(shift)); |
68 | e6e5906b | pbrook | } |
69 | e6e5906b | pbrook | |
70 | e6e5906b | pbrook | #ifdef USE_DIRECT_JUMP
|
71 | e6e5906b | pbrook | #define TBPARAM(x)
|
72 | e6e5906b | pbrook | #else
|
73 | e6e5906b | pbrook | #define TBPARAM(x) (long)(x) |
74 | e6e5906b | pbrook | #endif
|
75 | e6e5906b | pbrook | |
76 | e6e5906b | pbrook | static inline void gen_op_goto_tb(int dummy, int n, long tb) |
77 | e6e5906b | pbrook | { |
78 | e6e5906b | pbrook | if (n == 0) { |
79 | e6e5906b | pbrook | gen_op_goto_tb0(TBPARAM(tb)); |
80 | e6e5906b | pbrook | } else {
|
81 | e6e5906b | pbrook | gen_op_goto_tb1(TBPARAM(tb)); |
82 | e6e5906b | pbrook | } |
83 | e6e5906b | pbrook | } |