Statistics
| Branch: | Revision:

root / target-ppc / op_helper_mem.h @ 3a607854

History | View | Annotate | Download (9.3 kB)

1 76a66253 j_mayer
/*
2 76a66253 j_mayer
 *  PowerPC emulation micro-operations helpers for qemu.
3 d9bce9d9 j_mayer
 *
4 76a66253 j_mayer
 *  Copyright (c) 2003-2007 Jocelyn Mayer
5 76a66253 j_mayer
 *
6 76a66253 j_mayer
 * This library is free software; you can redistribute it and/or
7 76a66253 j_mayer
 * modify it under the terms of the GNU Lesser General Public
8 76a66253 j_mayer
 * License as published by the Free Software Foundation; either
9 76a66253 j_mayer
 * version 2 of the License, or (at your option) any later version.
10 76a66253 j_mayer
 *
11 76a66253 j_mayer
 * This library is distributed in the hope that it will be useful,
12 76a66253 j_mayer
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 76a66253 j_mayer
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 76a66253 j_mayer
 * Lesser General Public License for more details.
15 76a66253 j_mayer
 *
16 76a66253 j_mayer
 * You should have received a copy of the GNU Lesser General Public
17 76a66253 j_mayer
 * License along with this library; if not, write to the Free Software
18 76a66253 j_mayer
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 76a66253 j_mayer
 */
20 76a66253 j_mayer
21 76a66253 j_mayer
/* Multiple word / string load and store */
22 76a66253 j_mayer
static inline target_ulong glue(ld32r, MEMSUFFIX) (target_ulong EA)
23 76a66253 j_mayer
{
24 76a66253 j_mayer
    uint32_t tmp = glue(ldl, MEMSUFFIX)(EA);
25 76a66253 j_mayer
    return ((tmp & 0xFF000000UL) >> 24) | ((tmp & 0x00FF0000UL) >> 8) |
26 76a66253 j_mayer
        ((tmp & 0x0000FF00UL) << 8) | ((tmp & 0x000000FFUL) << 24);
27 76a66253 j_mayer
}
28 76a66253 j_mayer
29 76a66253 j_mayer
static inline void glue(st32r, MEMSUFFIX) (target_ulong EA, target_ulong data)
30 76a66253 j_mayer
{
31 76a66253 j_mayer
    uint32_t tmp =
32 76a66253 j_mayer
        ((data & 0xFF000000UL) >> 24) | ((data & 0x00FF0000UL) >> 8) |
33 76a66253 j_mayer
        ((data & 0x0000FF00UL) << 8) | ((data & 0x000000FFUL) << 24);
34 76a66253 j_mayer
    glue(stl, MEMSUFFIX)(EA, tmp);
35 76a66253 j_mayer
}
36 76a66253 j_mayer
37 76a66253 j_mayer
void glue(do_lmw, MEMSUFFIX) (int dst)
38 76a66253 j_mayer
{
39 76a66253 j_mayer
    for (; dst < 32; dst++, T0 += 4) {
40 d9bce9d9 j_mayer
        ugpr(dst) = glue(ldl, MEMSUFFIX)((uint32_t)T0);
41 d9bce9d9 j_mayer
    }
42 d9bce9d9 j_mayer
}
43 d9bce9d9 j_mayer
44 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
45 d9bce9d9 j_mayer
void glue(do_lmw_64, MEMSUFFIX) (int dst)
46 d9bce9d9 j_mayer
{
47 d9bce9d9 j_mayer
    for (; dst < 32; dst++, T0 += 4) {
48 d9bce9d9 j_mayer
        ugpr(dst) = glue(ldl, MEMSUFFIX)((uint64_t)T0);
49 76a66253 j_mayer
    }
50 76a66253 j_mayer
}
51 d9bce9d9 j_mayer
#endif
52 76a66253 j_mayer
53 76a66253 j_mayer
void glue(do_stmw, MEMSUFFIX) (int src)
54 76a66253 j_mayer
{
55 76a66253 j_mayer
    for (; src < 32; src++, T0 += 4) {
56 d9bce9d9 j_mayer
        glue(stl, MEMSUFFIX)((uint32_t)T0, ugpr(src));
57 d9bce9d9 j_mayer
    }
58 d9bce9d9 j_mayer
}
59 d9bce9d9 j_mayer
60 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
61 d9bce9d9 j_mayer
void glue(do_stmw_64, MEMSUFFIX) (int src)
62 d9bce9d9 j_mayer
{
63 d9bce9d9 j_mayer
    for (; src < 32; src++, T0 += 4) {
64 d9bce9d9 j_mayer
        glue(stl, MEMSUFFIX)((uint64_t)T0, ugpr(src));
65 76a66253 j_mayer
    }
66 76a66253 j_mayer
}
67 d9bce9d9 j_mayer
#endif
68 76a66253 j_mayer
69 76a66253 j_mayer
void glue(do_lmw_le, MEMSUFFIX) (int dst)
70 76a66253 j_mayer
{
71 76a66253 j_mayer
    for (; dst < 32; dst++, T0 += 4) {
72 d9bce9d9 j_mayer
        ugpr(dst) = glue(ld32r, MEMSUFFIX)((uint32_t)T0);
73 d9bce9d9 j_mayer
    }
74 d9bce9d9 j_mayer
}
75 d9bce9d9 j_mayer
76 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
77 d9bce9d9 j_mayer
void glue(do_lmw_le_64, MEMSUFFIX) (int dst)
78 d9bce9d9 j_mayer
{
79 d9bce9d9 j_mayer
    for (; dst < 32; dst++, T0 += 4) {
80 d9bce9d9 j_mayer
        ugpr(dst) = glue(ld32r, MEMSUFFIX)((uint64_t)T0);
81 76a66253 j_mayer
    }
82 76a66253 j_mayer
}
83 d9bce9d9 j_mayer
#endif
84 76a66253 j_mayer
85 76a66253 j_mayer
void glue(do_stmw_le, MEMSUFFIX) (int src)
86 76a66253 j_mayer
{
87 76a66253 j_mayer
    for (; src < 32; src++, T0 += 4) {
88 d9bce9d9 j_mayer
        glue(st32r, MEMSUFFIX)((uint32_t)T0, ugpr(src));
89 76a66253 j_mayer
    }
90 76a66253 j_mayer
}
91 76a66253 j_mayer
92 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
93 d9bce9d9 j_mayer
void glue(do_stmw_le_64, MEMSUFFIX) (int src)
94 d9bce9d9 j_mayer
{
95 d9bce9d9 j_mayer
    for (; src < 32; src++, T0 += 4) {
96 d9bce9d9 j_mayer
        glue(st32r, MEMSUFFIX)((uint64_t)T0, ugpr(src));
97 d9bce9d9 j_mayer
    }
98 d9bce9d9 j_mayer
}
99 d9bce9d9 j_mayer
#endif
100 d9bce9d9 j_mayer
101 9a64fbe4 bellard
void glue(do_lsw, MEMSUFFIX) (int dst)
102 9a64fbe4 bellard
{
103 9a64fbe4 bellard
    uint32_t tmp;
104 9a64fbe4 bellard
    int sh;
105 9a64fbe4 bellard
106 9a64fbe4 bellard
    for (; T1 > 3; T1 -= 4, T0 += 4) {
107 d9bce9d9 j_mayer
        ugpr(dst++) = glue(ldl, MEMSUFFIX)((uint32_t)T0);
108 76a66253 j_mayer
        if (unlikely(dst == 32))
109 9a64fbe4 bellard
            dst = 0;
110 9a64fbe4 bellard
    }
111 76a66253 j_mayer
    if (unlikely(T1 != 0)) {
112 9a64fbe4 bellard
        tmp = 0;
113 9a64fbe4 bellard
        for (sh = 24; T1 > 0; T1--, T0++, sh -= 8) {
114 d9bce9d9 j_mayer
            tmp |= glue(ldub, MEMSUFFIX)((uint32_t)T0) << sh;
115 9a64fbe4 bellard
        }
116 9a64fbe4 bellard
        ugpr(dst) = tmp;
117 9a64fbe4 bellard
    }
118 9a64fbe4 bellard
}
119 9a64fbe4 bellard
120 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
121 d9bce9d9 j_mayer
void glue(do_lsw_64, MEMSUFFIX) (int dst)
122 d9bce9d9 j_mayer
{
123 d9bce9d9 j_mayer
    uint32_t tmp;
124 d9bce9d9 j_mayer
    int sh;
125 d9bce9d9 j_mayer
126 d9bce9d9 j_mayer
    for (; T1 > 3; T1 -= 4, T0 += 4) {
127 d9bce9d9 j_mayer
        ugpr(dst++) = glue(ldl, MEMSUFFIX)((uint64_t)T0);
128 d9bce9d9 j_mayer
        if (unlikely(dst == 32))
129 d9bce9d9 j_mayer
            dst = 0;
130 d9bce9d9 j_mayer
    }
131 d9bce9d9 j_mayer
    if (unlikely(T1 != 0)) {
132 d9bce9d9 j_mayer
        tmp = 0;
133 d9bce9d9 j_mayer
        for (sh = 24; T1 > 0; T1--, T0++, sh -= 8) {
134 d9bce9d9 j_mayer
            tmp |= glue(ldub, MEMSUFFIX)((uint64_t)T0) << sh;
135 d9bce9d9 j_mayer
        }
136 d9bce9d9 j_mayer
        ugpr(dst) = tmp;
137 d9bce9d9 j_mayer
    }
138 d9bce9d9 j_mayer
}
139 d9bce9d9 j_mayer
#endif
140 d9bce9d9 j_mayer
141 9a64fbe4 bellard
void glue(do_stsw, MEMSUFFIX) (int src)
142 9a64fbe4 bellard
{
143 9a64fbe4 bellard
    int sh;
144 9a64fbe4 bellard
145 9a64fbe4 bellard
    for (; T1 > 3; T1 -= 4, T0 += 4) {
146 d9bce9d9 j_mayer
        glue(stl, MEMSUFFIX)((uint32_t)T0, ugpr(src++));
147 76a66253 j_mayer
        if (unlikely(src == 32))
148 9a64fbe4 bellard
            src = 0;
149 9a64fbe4 bellard
    }
150 76a66253 j_mayer
    if (unlikely(T1 != 0)) {
151 9a64fbe4 bellard
        for (sh = 24; T1 > 0; T1--, T0++, sh -= 8)
152 d9bce9d9 j_mayer
            glue(stb, MEMSUFFIX)((uint32_t)T0, (ugpr(src) >> sh) & 0xFF);
153 9a64fbe4 bellard
    }
154 9a64fbe4 bellard
}
155 9a64fbe4 bellard
156 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
157 d9bce9d9 j_mayer
void glue(do_stsw_64, MEMSUFFIX) (int src)
158 d9bce9d9 j_mayer
{
159 d9bce9d9 j_mayer
    int sh;
160 d9bce9d9 j_mayer
161 d9bce9d9 j_mayer
    for (; T1 > 3; T1 -= 4, T0 += 4) {
162 d9bce9d9 j_mayer
        glue(stl, MEMSUFFIX)((uint64_t)T0, ugpr(src++));
163 d9bce9d9 j_mayer
        if (unlikely(src == 32))
164 d9bce9d9 j_mayer
            src = 0;
165 d9bce9d9 j_mayer
    }
166 d9bce9d9 j_mayer
    if (unlikely(T1 != 0)) {
167 d9bce9d9 j_mayer
        for (sh = 24; T1 > 0; T1--, T0++, sh -= 8)
168 d9bce9d9 j_mayer
            glue(stb, MEMSUFFIX)((uint64_t)T0, (ugpr(src) >> sh) & 0xFF);
169 d9bce9d9 j_mayer
    }
170 d9bce9d9 j_mayer
}
171 d9bce9d9 j_mayer
#endif
172 d9bce9d9 j_mayer
173 111bfab3 bellard
void glue(do_lsw_le, MEMSUFFIX) (int dst)
174 111bfab3 bellard
{
175 111bfab3 bellard
    uint32_t tmp;
176 111bfab3 bellard
    int sh;
177 111bfab3 bellard
178 111bfab3 bellard
    for (; T1 > 3; T1 -= 4, T0 += 4) {
179 d9bce9d9 j_mayer
        ugpr(dst++) = glue(ld32r, MEMSUFFIX)((uint32_t)T0);
180 d9bce9d9 j_mayer
        if (unlikely(dst == 32))
181 d9bce9d9 j_mayer
            dst = 0;
182 d9bce9d9 j_mayer
    }
183 d9bce9d9 j_mayer
    if (unlikely(T1 != 0)) {
184 d9bce9d9 j_mayer
        tmp = 0;
185 d9bce9d9 j_mayer
        for (sh = 0; T1 > 0; T1--, T0++, sh += 8) {
186 d9bce9d9 j_mayer
            tmp |= glue(ldub, MEMSUFFIX)((uint32_t)T0) << sh;
187 d9bce9d9 j_mayer
        }
188 d9bce9d9 j_mayer
        ugpr(dst) = tmp;
189 d9bce9d9 j_mayer
    }
190 d9bce9d9 j_mayer
}
191 d9bce9d9 j_mayer
192 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
193 d9bce9d9 j_mayer
void glue(do_lsw_le_64, MEMSUFFIX) (int dst)
194 d9bce9d9 j_mayer
{
195 d9bce9d9 j_mayer
    uint32_t tmp;
196 d9bce9d9 j_mayer
    int sh;
197 d9bce9d9 j_mayer
198 d9bce9d9 j_mayer
    for (; T1 > 3; T1 -= 4, T0 += 4) {
199 d9bce9d9 j_mayer
        ugpr(dst++) = glue(ld32r, MEMSUFFIX)((uint64_t)T0);
200 76a66253 j_mayer
        if (unlikely(dst == 32))
201 111bfab3 bellard
            dst = 0;
202 111bfab3 bellard
    }
203 76a66253 j_mayer
    if (unlikely(T1 != 0)) {
204 111bfab3 bellard
        tmp = 0;
205 111bfab3 bellard
        for (sh = 0; T1 > 0; T1--, T0++, sh += 8) {
206 d9bce9d9 j_mayer
            tmp |= glue(ldub, MEMSUFFIX)((uint64_t)T0) << sh;
207 111bfab3 bellard
        }
208 111bfab3 bellard
        ugpr(dst) = tmp;
209 111bfab3 bellard
    }
210 111bfab3 bellard
}
211 d9bce9d9 j_mayer
#endif
212 111bfab3 bellard
213 111bfab3 bellard
void glue(do_stsw_le, MEMSUFFIX) (int src)
214 111bfab3 bellard
{
215 111bfab3 bellard
    int sh;
216 111bfab3 bellard
217 111bfab3 bellard
    for (; T1 > 3; T1 -= 4, T0 += 4) {
218 d9bce9d9 j_mayer
        glue(st32r, MEMSUFFIX)((uint32_t)T0, ugpr(src++));
219 d9bce9d9 j_mayer
        if (unlikely(src == 32))
220 d9bce9d9 j_mayer
            src = 0;
221 d9bce9d9 j_mayer
    }
222 d9bce9d9 j_mayer
    if (unlikely(T1 != 0)) {
223 d9bce9d9 j_mayer
        for (sh = 0; T1 > 0; T1--, T0++, sh += 8)
224 d9bce9d9 j_mayer
            glue(stb, MEMSUFFIX)((uint32_t)T0, (ugpr(src) >> sh) & 0xFF);
225 d9bce9d9 j_mayer
    }
226 d9bce9d9 j_mayer
}
227 d9bce9d9 j_mayer
228 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
229 d9bce9d9 j_mayer
void glue(do_stsw_le_64, MEMSUFFIX) (int src)
230 d9bce9d9 j_mayer
{
231 d9bce9d9 j_mayer
    int sh;
232 d9bce9d9 j_mayer
233 d9bce9d9 j_mayer
    for (; T1 > 3; T1 -= 4, T0 += 4) {
234 d9bce9d9 j_mayer
        glue(st32r, MEMSUFFIX)((uint64_t)T0, ugpr(src++));
235 76a66253 j_mayer
        if (unlikely(src == 32))
236 111bfab3 bellard
            src = 0;
237 111bfab3 bellard
    }
238 76a66253 j_mayer
    if (unlikely(T1 != 0)) {
239 111bfab3 bellard
        for (sh = 0; T1 > 0; T1--, T0++, sh += 8)
240 d9bce9d9 j_mayer
            glue(stb, MEMSUFFIX)((uint64_t)T0, (ugpr(src) >> sh) & 0xFF);
241 111bfab3 bellard
    }
242 111bfab3 bellard
}
243 d9bce9d9 j_mayer
#endif
244 111bfab3 bellard
245 36f69651 j_mayer
/* Instruction cache invalidation helper */
246 36f69651 j_mayer
void glue(do_icbi, MEMSUFFIX) (void)
247 36f69651 j_mayer
{
248 36f69651 j_mayer
    uint32_t tmp;
249 36f69651 j_mayer
    /* Invalidate one cache line :
250 36f69651 j_mayer
     * PowerPC specification says this is to be treated like a load
251 36f69651 j_mayer
     * (not a fetch) by the MMU. To be sure it will be so,
252 36f69651 j_mayer
     * do the load "by hand".
253 36f69651 j_mayer
     */
254 36f69651 j_mayer
    tmp = glue(ldl, MEMSUFFIX)((uint32_t)T0);
255 36f69651 j_mayer
    T0 &= ~(ICACHE_LINE_SIZE - 1);
256 36f69651 j_mayer
    tb_invalidate_page_range((uint32_t)T0, (uint32_t)(T0 + ICACHE_LINE_SIZE));
257 36f69651 j_mayer
}
258 36f69651 j_mayer
259 36f69651 j_mayer
#if defined(TARGET_PPC64)
260 36f69651 j_mayer
void glue(do_icbi_64, MEMSUFFIX) (void)
261 36f69651 j_mayer
{
262 36f69651 j_mayer
    uint64_t tmp;
263 36f69651 j_mayer
    /* Invalidate one cache line :
264 36f69651 j_mayer
     * PowerPC specification says this is to be treated like a load
265 36f69651 j_mayer
     * (not a fetch) by the MMU. To be sure it will be so,
266 36f69651 j_mayer
     * do the load "by hand".
267 36f69651 j_mayer
     */
268 36f69651 j_mayer
    tmp = glue(ldq, MEMSUFFIX)((uint64_t)T0);
269 36f69651 j_mayer
    T0 &= ~(ICACHE_LINE_SIZE - 1);
270 36f69651 j_mayer
    tb_invalidate_page_range((uint64_t)T0, (uint64_t)(T0 + ICACHE_LINE_SIZE));
271 36f69651 j_mayer
}
272 36f69651 j_mayer
#endif
273 36f69651 j_mayer
274 76a66253 j_mayer
/* PPC 601 specific instructions (POWER bridge) */
275 76a66253 j_mayer
// XXX: to be tested
276 76a66253 j_mayer
void glue(do_POWER_lscbx, MEMSUFFIX) (int dest, int ra, int rb)
277 76a66253 j_mayer
{
278 76a66253 j_mayer
    int i, c, d, reg;
279 76a66253 j_mayer
280 76a66253 j_mayer
    d = 24;
281 76a66253 j_mayer
    reg = dest;
282 76a66253 j_mayer
    for (i = 0; i < T1; i++) {
283 d9bce9d9 j_mayer
        c = glue(ldub, MEMSUFFIX)((uint32_t)T0++);
284 76a66253 j_mayer
        /* ra (if not 0) and rb are never modified */
285 76a66253 j_mayer
        if (likely(reg != rb && (ra == 0 || reg != ra))) {
286 76a66253 j_mayer
            ugpr(reg) = (ugpr(reg) & ~(0xFF << d)) | (c << d);
287 76a66253 j_mayer
        }
288 76a66253 j_mayer
        if (unlikely(c == T2))
289 76a66253 j_mayer
            break;
290 76a66253 j_mayer
        if (likely(d != 0)) {
291 76a66253 j_mayer
            d -= 8;
292 76a66253 j_mayer
        } else {
293 76a66253 j_mayer
            d = 24;
294 76a66253 j_mayer
            reg++;
295 76a66253 j_mayer
            reg = reg & 0x1F;
296 76a66253 j_mayer
        }
297 76a66253 j_mayer
    }
298 76a66253 j_mayer
    T0 = i;
299 76a66253 j_mayer
}
300 76a66253 j_mayer
301 76a66253 j_mayer
/* XXX: TAGs are not managed */
302 76a66253 j_mayer
void glue(do_POWER2_lfq, MEMSUFFIX) (void)
303 76a66253 j_mayer
{
304 d9bce9d9 j_mayer
    FT0 = glue(ldfq, MEMSUFFIX)((uint32_t)T0);
305 d9bce9d9 j_mayer
    FT1 = glue(ldfq, MEMSUFFIX)((uint32_t)(T0 + 4));
306 76a66253 j_mayer
}
307 76a66253 j_mayer
308 76a66253 j_mayer
static inline double glue(ldfqr, MEMSUFFIX) (target_ulong EA)
309 76a66253 j_mayer
{
310 76a66253 j_mayer
    union {
311 76a66253 j_mayer
        double d;
312 76a66253 j_mayer
        uint64_t u;
313 76a66253 j_mayer
    } u;
314 76a66253 j_mayer
315 76a66253 j_mayer
    u.d = glue(ldfq, MEMSUFFIX)(EA);
316 76a66253 j_mayer
    u.u = ((u.u & 0xFF00000000000000ULL) >> 56) |
317 76a66253 j_mayer
        ((u.u & 0x00FF000000000000ULL) >> 40) |
318 76a66253 j_mayer
        ((u.u & 0x0000FF0000000000ULL) >> 24) |
319 76a66253 j_mayer
        ((u.u & 0x000000FF00000000ULL) >> 8) |
320 76a66253 j_mayer
        ((u.u & 0x00000000FF000000ULL) << 8) |
321 76a66253 j_mayer
        ((u.u & 0x0000000000FF0000ULL) << 24) |
322 76a66253 j_mayer
        ((u.u & 0x000000000000FF00ULL) << 40) |
323 76a66253 j_mayer
        ((u.u & 0x00000000000000FFULL) << 56);
324 76a66253 j_mayer
325 76a66253 j_mayer
    return u.d;
326 76a66253 j_mayer
}
327 76a66253 j_mayer
328 76a66253 j_mayer
void glue(do_POWER2_lfq_le, MEMSUFFIX) (void)
329 76a66253 j_mayer
{
330 d9bce9d9 j_mayer
    FT0 = glue(ldfqr, MEMSUFFIX)((uint32_t)(T0 + 4));
331 d9bce9d9 j_mayer
    FT1 = glue(ldfqr, MEMSUFFIX)((uint32_t)T0);
332 76a66253 j_mayer
}
333 76a66253 j_mayer
334 76a66253 j_mayer
void glue(do_POWER2_stfq, MEMSUFFIX) (void)
335 76a66253 j_mayer
{
336 d9bce9d9 j_mayer
    glue(stfq, MEMSUFFIX)((uint32_t)T0, FT0);
337 d9bce9d9 j_mayer
    glue(stfq, MEMSUFFIX)((uint32_t)(T0 + 4), FT1);
338 76a66253 j_mayer
}
339 76a66253 j_mayer
340 76a66253 j_mayer
static inline void glue(stfqr, MEMSUFFIX) (target_ulong EA, double d)
341 76a66253 j_mayer
{
342 76a66253 j_mayer
    union {
343 76a66253 j_mayer
        double d;
344 76a66253 j_mayer
        uint64_t u;
345 76a66253 j_mayer
    } u;
346 76a66253 j_mayer
347 76a66253 j_mayer
    u.d = d;
348 76a66253 j_mayer
    u.u = ((u.u & 0xFF00000000000000ULL) >> 56) |
349 76a66253 j_mayer
        ((u.u & 0x00FF000000000000ULL) >> 40) |
350 76a66253 j_mayer
        ((u.u & 0x0000FF0000000000ULL) >> 24) |
351 76a66253 j_mayer
        ((u.u & 0x000000FF00000000ULL) >> 8) |
352 76a66253 j_mayer
        ((u.u & 0x00000000FF000000ULL) << 8) |
353 76a66253 j_mayer
        ((u.u & 0x0000000000FF0000ULL) << 24) |
354 76a66253 j_mayer
        ((u.u & 0x000000000000FF00ULL) << 40) |
355 76a66253 j_mayer
        ((u.u & 0x00000000000000FFULL) << 56);
356 76a66253 j_mayer
    glue(stfq, MEMSUFFIX)(EA, u.d);
357 76a66253 j_mayer
}
358 76a66253 j_mayer
359 76a66253 j_mayer
void glue(do_POWER2_stfq_le, MEMSUFFIX) (void)
360 76a66253 j_mayer
{
361 d9bce9d9 j_mayer
    glue(stfqr, MEMSUFFIX)((uint32_t)(T0 + 4), FT0);
362 d9bce9d9 j_mayer
    glue(stfqr, MEMSUFFIX)((uint32_t)T0, FT1);
363 76a66253 j_mayer
}
364 76a66253 j_mayer
365 9a64fbe4 bellard
#undef MEMSUFFIX