39 #define hppa_nop(p); \
45 #define hppa_ldb(p, disp, base, dest); \
47 int neg = (disp) < 0; \
48 *(p) = (0x40000000 | (((disp) & 0x1fff) << 1) | ((base) << 21) | ((dest) << 16) | neg); \
52 #define hppa_stb(p, src, disp, base) \
54 int neg = (disp) < 0; \
55 *(p) = (0x60000000 | (((disp) & 0x1fff) << 1) | ((base) << 21) | ((src) << 16) | neg); \
59 #define hppa_ldh(p, disp, base, dest) \
61 int neg = (disp) < 0; \
62 g_assert(((disp) & 1) == 0); \
63 *(p) = (0x44000000 | (((disp) & 0x1fff) << 1) | ((base) << 21) | ((dest) << 16) | neg); \
67 #define hppa_sth(p, src, disp, base) \
69 int neg = (disp) < 0; \
70 g_assert(((disp) & 1) == 0); \
71 *(p) = (0x64000000 | (((disp) & 0x1fff) << 1) | ((base) << 21) | ((src) << 16) | neg); \
75 #define hppa_ldw(p, disp, base, dest) \
77 int neg = (disp) < 0; \
78 g_assert(((disp) & 3) == 0); \
79 *(p) = (0x48000000 | (((disp) & 0x1fff) << 1) | ((base) << 21) | ((dest) << 16) | neg); \
83 #define hppa_stw(p, src, disp, base) \
85 int neg = (disp) < 0; \
86 g_assert(((disp) & 3) == 0); \
87 *(p) = (0x68000000 | (((disp) & 0x1fff) << 1) | ((base) << 21) | ((src) << 16) | neg); \
91 #define hppa_copy(p, src, dest) \
93 *(p) = (0x34000000 | ((src) << 21) | ((dest) << 16)); \
97 #define hppa_ldd_with_flags(p, disp, base, dest, m, a) \
99 int neg = (disp) < 0; \
100 int im10a = (disp) >> 3; \
101 g_assert(((disp) & 7) == 0); \
102 *(p) = (0x50000000 | (((im10a) & 0x3ff) << 4) | ((base) << 21) | ((dest) << 16) | neg | (m ? 0x8 : 0) | (a ? 0x4 : 0)); \
106 #define hppa_ldd(p, disp, base, dest) \
107 hppa_ldd_with_flags(p, disp, base, dest, 0, 0)
109 #define hppa_ldd_mb(p, disp, base, dest) \
110 hppa_ldd_with_flags(p, disp, base, dest, 1, 1)
112 #define hppa_std_with_flags(p, src, disp, base, m, a); \
114 int neg = (disp) < 0; \
115 int im10a = (disp) >> 3; \
116 g_assert(((disp) & 7) == 0); \
117 *(p) = (0x70000000 | (((im10a) & 0x3ff) << 4) | ((base) << 21) | ((src) << 16) | neg | (m ? 0x8 : 0) | (a ? 0x4 : 0)); \
121 #define hppa_std(p, disp, base, dest) \
122 hppa_std_with_flags(p, disp, base, dest, 0, 0)
124 #define hppa_std_ma(p, disp, base, dest) \
125 hppa_std_with_flags(p, disp, base, dest, 1, 0)
127 #define hppa_fldd_with_flags(p, disp, base, dest, m, a) \
129 int neg = (disp) < 0; \
130 int im10a = (disp) >> 3; \
131 *(p) = (0x50000002 | (((im10a) & 0x3ff) << 4) | ((base) << 21) | ((dest) << 16) | neg | (m ? 0x8 : 0) | (a ? 0x4 : 0)); \
135 #define hppa_fldd(p, disp, base, dest) \
136 hppa_fldd_with_flags(p, disp, base, dest, 0, 0)
138 #define hppa_fstd_with_flags(p, src, disp, base, m, a) \
140 int neg = (disp) < 0; \
141 int im10a = (disp) >> 3; \
142 *(p) = (0x70000002 | (((im10a) & 0x3ff) << 4) | ((base) << 21) | ((src) << 16) | neg | (m ? 0x8 : 0) | (a ? 0x4 : 0)); \
146 #define hppa_fstd(p, disp, base, dest) \
147 hppa_fstd_with_flags(p, disp, base, dest, 0, 0)
150 #define hppa_fldw_with_flags(p, im11a, base, dest, r) \
152 int neg = (disp) < 0; \
153 int im11a = (disp) >> 2; \
154 *(p) = (0x5c000000 | (((im11a) & 0x7ff) << 3) | ((base) << 21) | ((dest) << 16) | neg | ((r) ? 0x2 : 0)); \
158 #define hppa_fldw(p, disp, base, dest) \
159 hppa_fldw_with_flags(p, disp, base, dest, 1)
161 #define hppa_fstw_with_flags(p, src, disp, base, r) \
163 int neg = (disp) < 0; \
164 int im11a = (disp) >> 2; \
165 *(p) = (0x7c000000 | (((im11a) & 0x7ff) << 3) | ((base) << 21) | ((src) << 16) | neg | ((r) ? 0x2 : 0)); \
169 #define hppa_fstw(p, src, disp, base) \
170 hppa_fstw_with_flags(p, src, disp, base, 1)
172 /* only works on right half SP registers */
173 #define hppa_fcnv(p, src, ssng, dest, dsng) \
175 *(p) = (0x38000200 | ((src) << 21) | ((ssng) ? 0x80 : 0x800) | (dest) | ((dsng) ? 0x40 : 0x2000)); \
179 #define hppa_fcnv_sng_dbl(p, src, dest) \
180 hppa_fcnv(p, src, 1, dest, 0)
182 #define hppa_fcnv_dbl_sng(p, src, dest) \
183 hppa_fcnv(p, src, 0, dest, 1)
185 #define hppa_ldil(p, val, dest) \
187 unsigned int t = (val >> 11) & 0x1fffff; \
188 unsigned int im21 = ((t & 0x7c) << 14) | ((t & 0x180) << 7) | ((t & 0x3) << 12) | ((t & 0xffe00) >> 8) | ((t & 0x100000) >> 20); \
189 *(p) = (0x20000000 | im21 | ((dest) << 21)); \
193 #define hppa_ldo(p, off, base, dest) \
195 int neg = (off) < 0; \
196 *(p) = (0x34000000 | (((off) & 0x1fff)) << 1 | ((base) << 21) | ((dest) << 16) | neg); \
200 #define hppa_extrdu(p, src, pos, len, dest) \
202 *(p) = (0xd8000000 | ((src) << 21) | ((dest) << 16) | ((pos) > 32 ? 0x800 : 0) | (((pos) & 31) << 5) | ((len) > 32 ? 0x1000 : 0) | (32 - (len & 31))); \
206 #define hppa_bve(p, reg, link) \
208 *(p) = (0xE8001000 | ((link ? 7 : 6) << 13) | ((reg) << 21)); \
212 #define hppa_blve(p, reg) \