root / target-m68k / op-hacks.h @ ce62e5ba
History | View | Annotate | Download (2.4 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 | 0633879f | pbrook | static inline void gen_op_ldf32_raw(int dest, int addr) |
31 | e6e5906b | pbrook | { |
32 | 0633879f | pbrook | gen_op_ld32_raw(dest, addr); |
33 | e6e5906b | pbrook | } |
34 | e6e5906b | pbrook | |
35 | 0633879f | pbrook | static inline void gen_op_stf32_raw(int addr, int dest) |
36 | e6e5906b | pbrook | { |
37 | 0633879f | pbrook | gen_op_st32_raw(addr, dest); |
38 | e6e5906b | pbrook | } |
39 | e6e5906b | pbrook | |
40 | 0633879f | pbrook | #if !defined(CONFIG_USER_ONLY)
|
41 | 0633879f | pbrook | static inline void gen_op_ldf32_user(int dest, int addr) |
42 | 0633879f | pbrook | { |
43 | 0633879f | pbrook | gen_op_ld32_user(dest, addr); |
44 | 0633879f | pbrook | } |
45 | 0633879f | pbrook | |
46 | 0633879f | pbrook | static inline void gen_op_stf32_user(int addr, int dest) |
47 | 0633879f | pbrook | { |
48 | 0633879f | pbrook | gen_op_st32_user(addr, dest); |
49 | 0633879f | pbrook | } |
50 | 0633879f | pbrook | |
51 | 0633879f | pbrook | static inline void gen_op_ldf32_kernel(int dest, int addr) |
52 | 0633879f | pbrook | { |
53 | 0633879f | pbrook | gen_op_ld32_kernel(dest, addr); |
54 | 0633879f | pbrook | } |
55 | 0633879f | pbrook | |
56 | 0633879f | pbrook | static inline void gen_op_stf32_kernel(int addr, int dest) |
57 | 0633879f | pbrook | { |
58 | 0633879f | pbrook | gen_op_st32_kernel(addr, dest); |
59 | 0633879f | pbrook | } |
60 | 0633879f | pbrook | #endif
|
61 | 0633879f | pbrook | |
62 | e6e5906b | pbrook | static inline void gen_op_pack_32_f32(int dest, int src) |
63 | e6e5906b | pbrook | { |
64 | e6e5906b | pbrook | gen_op_mov32(dest, src); |
65 | e6e5906b | pbrook | } |
66 | e6e5906b | pbrook | |
67 | e6e5906b | pbrook | static inline void gen_op_pack_f32_32(int dest, int src) |
68 | e6e5906b | pbrook | { |
69 | e6e5906b | pbrook | gen_op_mov32(dest, src); |
70 | e6e5906b | pbrook | } |
71 | e6e5906b | pbrook | |
72 | e6e5906b | pbrook | static inline void gen_op_flags_set(void) |
73 | e6e5906b | pbrook | { |
74 | e6e5906b | pbrook | /* Dummy op. */
|
75 | e6e5906b | pbrook | } |
76 | e6e5906b | pbrook | |
77 | e6e5906b | pbrook | static inline void gen_op_shl_im_cc(int val, int shift) |
78 | e6e5906b | pbrook | { |
79 | e6e5906b | pbrook | gen_op_shl_cc(val, gen_im32(shift)); |
80 | e6e5906b | pbrook | } |
81 | e6e5906b | pbrook | |
82 | e6e5906b | pbrook | static inline void gen_op_shr_im_cc(int val, int shift) |
83 | e6e5906b | pbrook | { |
84 | e6e5906b | pbrook | gen_op_shr_cc(val, gen_im32(shift)); |
85 | e6e5906b | pbrook | } |
86 | e6e5906b | pbrook | |
87 | e6e5906b | pbrook | static inline void gen_op_sar_im_cc(int val, int shift) |
88 | e6e5906b | pbrook | { |
89 | e6e5906b | pbrook | gen_op_sar_cc(val, gen_im32(shift)); |
90 | e6e5906b | pbrook | } |
91 | e6e5906b | pbrook | |
92 | e6e5906b | pbrook | #ifdef USE_DIRECT_JUMP
|
93 | e6e5906b | pbrook | #define TBPARAM(x)
|
94 | e6e5906b | pbrook | #else
|
95 | e6e5906b | pbrook | #define TBPARAM(x) (long)(x) |
96 | e6e5906b | pbrook | #endif
|
97 | e6e5906b | pbrook | |
98 | e6e5906b | pbrook | static inline void gen_op_goto_tb(int dummy, int n, long tb) |
99 | e6e5906b | pbrook | { |
100 | e6e5906b | pbrook | if (n == 0) { |
101 | e6e5906b | pbrook | gen_op_goto_tb0(TBPARAM(tb)); |
102 | e6e5906b | pbrook | } else {
|
103 | e6e5906b | pbrook | gen_op_goto_tb1(TBPARAM(tb)); |
104 | e6e5906b | pbrook | } |
105 | e6e5906b | pbrook | } |
106 | 06d92f40 | pbrook | |
107 | 06d92f40 | pbrook | static inline void gen_op_jmp_z32(int val, int label) |
108 | 06d92f40 | pbrook | { |
109 | 06d92f40 | pbrook | gen_op_set_T0_z32(val); |
110 | 06d92f40 | pbrook | gen_op_jmp_T0(label); |
111 | 06d92f40 | pbrook | } |
112 | 06d92f40 | pbrook | |
113 | 06d92f40 | pbrook | static inline void gen_op_jmp_nz32(int val, int label) |
114 | 06d92f40 | pbrook | { |
115 | 06d92f40 | pbrook | gen_op_set_T0_nz32(val); |
116 | 06d92f40 | pbrook | gen_op_jmp_T0(label); |
117 | 06d92f40 | pbrook | } |
118 | 06d92f40 | pbrook | |
119 | 06d92f40 | pbrook | static inline void gen_op_jmp_s32(int val, int label) |
120 | 06d92f40 | pbrook | { |
121 | 06d92f40 | pbrook | gen_op_set_T0_s32(val); |
122 | 06d92f40 | pbrook | gen_op_jmp_T0(label); |
123 | 06d92f40 | pbrook | } |
124 | 06d92f40 | pbrook | |
125 | 06d92f40 | pbrook | static inline void gen_op_jmp_ns32(int val, int label) |
126 | 06d92f40 | pbrook | { |
127 | 06d92f40 | pbrook | gen_op_set_T0_ns32(val); |
128 | 06d92f40 | pbrook | gen_op_jmp_T0(label); |
129 | 06d92f40 | pbrook | } |