Commit 8636b5d873d6fa5696385da80ddd5f03e1a5de4c
1 parent
664e0f19
compilation fix
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1206 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
24 additions
and
18 deletions
vl.c
... | ... | @@ -2113,20 +2113,22 @@ void cpu_save(QEMUFile *f, void *opaque) |
2113 | 2113 | qemu_put_be16s(f, &fpregs_format); |
2114 | 2114 | |
2115 | 2115 | for(i = 0; i < 8; i++) { |
2116 | - uint64_t mant; | |
2117 | - uint16_t exp; | |
2118 | 2116 | #ifdef USE_X86LDOUBLE |
2119 | - /* we save the real CPU data (in case of MMX usage only 'mant' | |
2120 | - contains the MMX register */ | |
2121 | - cpu_get_fp80(&mant, &exp, env->fpregs[i].d); | |
2122 | - qemu_put_be64(f, mant); | |
2123 | - qemu_put_be16(f, exp); | |
2117 | + { | |
2118 | + uint64_t mant; | |
2119 | + uint16_t exp; | |
2120 | + /* we save the real CPU data (in case of MMX usage only 'mant' | |
2121 | + contains the MMX register */ | |
2122 | + cpu_get_fp80(&mant, &exp, env->fpregs[i].d); | |
2123 | + qemu_put_be64(f, mant); | |
2124 | + qemu_put_be16(f, exp); | |
2125 | + } | |
2124 | 2126 | #else |
2125 | 2127 | /* if we use doubles for float emulation, we save the doubles to |
2126 | 2128 | avoid losing information in case of MMX usage. It can give |
2127 | 2129 | problems if the image is restored on a CPU where long |
2128 | 2130 | doubles are used instead. */ |
2129 | - qemu_put_be64(f, env->fpregs[i].xmm.MMX_Q(0)); | |
2131 | + qemu_put_be64(f, env->fpregs[i].mmx.MMX_Q(0)); | |
2130 | 2132 | #endif |
2131 | 2133 | } |
2132 | 2134 | |
... | ... | @@ -2169,6 +2171,7 @@ void cpu_save(QEMUFile *f, void *opaque) |
2169 | 2171 | #endif |
2170 | 2172 | } |
2171 | 2173 | |
2174 | +#ifdef USE_X86LDOUBLE | |
2172 | 2175 | /* XXX: add that in a FPU generic layer */ |
2173 | 2176 | union x86_longdouble { |
2174 | 2177 | uint64_t mant; |
... | ... | @@ -2190,6 +2193,7 @@ static void fp64_to_fp80(union x86_longdouble *p, uint64_t temp) |
2190 | 2193 | e |= SIGND1(temp) >> 16; |
2191 | 2194 | p->exp = e; |
2192 | 2195 | } |
2196 | +#endif | |
2193 | 2197 | |
2194 | 2198 | int cpu_load(QEMUFile *f, void *opaque, int version_id) |
2195 | 2199 | { |
... | ... | @@ -2218,7 +2222,6 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id) |
2218 | 2222 | for(i = 0; i < 8; i++) { |
2219 | 2223 | uint64_t mant; |
2220 | 2224 | uint16_t exp; |
2221 | - union x86_longdouble *p; | |
2222 | 2225 | |
2223 | 2226 | switch(fpregs_format) { |
2224 | 2227 | case 0: |
... | ... | @@ -2229,7 +2232,7 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id) |
2229 | 2232 | #else |
2230 | 2233 | /* difficult case */ |
2231 | 2234 | if (guess_mmx) |
2232 | - env->fpregs[i].xmm.MMX_Q(0) = mant; | |
2235 | + env->fpregs[i].mmx.MMX_Q(0) = mant; | |
2233 | 2236 | else |
2234 | 2237 | env->fpregs[i].d = cpu_set_fp80(mant, exp); |
2235 | 2238 | #endif |
... | ... | @@ -2237,16 +2240,19 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id) |
2237 | 2240 | case 1: |
2238 | 2241 | mant = qemu_get_be64(f); |
2239 | 2242 | #ifdef USE_X86LDOUBLE |
2240 | - /* difficult case */ | |
2241 | - p = (void *)&env->fpregs[i]; | |
2242 | - if (guess_mmx) { | |
2243 | - p->mant = mant; | |
2244 | - p->exp = 0xffff; | |
2245 | - } else { | |
2246 | - fp64_to_fp80(p, mant); | |
2243 | + { | |
2244 | + union x86_longdouble *p; | |
2245 | + /* difficult case */ | |
2246 | + p = (void *)&env->fpregs[i]; | |
2247 | + if (guess_mmx) { | |
2248 | + p->mant = mant; | |
2249 | + p->exp = 0xffff; | |
2250 | + } else { | |
2251 | + fp64_to_fp80(p, mant); | |
2252 | + } | |
2247 | 2253 | } |
2248 | 2254 | #else |
2249 | - env->fpregs[i].xmm.MMX_Q(0) = mant; | |
2255 | + env->fpregs[i].mmx.MMX_Q(0) = mant; | |
2250 | 2256 | #endif |
2251 | 2257 | break; |
2252 | 2258 | default: | ... | ... |