Commit 4d6b6c0aec20e78c966b857c520fe0d242d64b30
1 parent
79f91c27
more fpu functions - x86_64 fixes
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1234 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
29 additions
and
1 deletions
target-i386/helper.c
... | ... | @@ -1454,7 +1454,11 @@ void load_seg(int seg_reg, int selector) |
1454 | 1454 | selector &= 0xffff; |
1455 | 1455 | if ((selector & 0xfffc) == 0) { |
1456 | 1456 | /* null selector case */ |
1457 | - if (seg_reg == R_SS) | |
1457 | + if (seg_reg == R_SS | |
1458 | +#ifdef TARGET_X86_64 | |
1459 | + && !(env->hflags & HF_CS64_MASK) | |
1460 | +#endif | |
1461 | + ) | |
1458 | 1462 | raise_exception_err(EXCP0D_GPF, 0); |
1459 | 1463 | cpu_x86_load_seg_cache(env, seg_reg, selector, 0, 0, 0); |
1460 | 1464 | } else { |
... | ... | @@ -2146,6 +2150,7 @@ void helper_sysexit(void) |
2146 | 2150 | |
2147 | 2151 | void helper_movl_crN_T0(int reg) |
2148 | 2152 | { |
2153 | +#if !defined(CONFIG_USER_ONLY) | |
2149 | 2154 | switch(reg) { |
2150 | 2155 | case 0: |
2151 | 2156 | cpu_x86_update_cr0(env, T0); |
... | ... | @@ -2156,10 +2161,14 @@ void helper_movl_crN_T0(int reg) |
2156 | 2161 | case 4: |
2157 | 2162 | cpu_x86_update_cr4(env, T0); |
2158 | 2163 | break; |
2164 | + case 8: | |
2165 | + cpu_set_apic_tpr(env, T0); | |
2166 | + break; | |
2159 | 2167 | default: |
2160 | 2168 | env->cr[reg] = T0; |
2161 | 2169 | break; |
2162 | 2170 | } |
2171 | +#endif | |
2163 | 2172 | } |
2164 | 2173 | |
2165 | 2174 | /* XXX: do more */ |
... | ... | @@ -3227,6 +3236,25 @@ float approx_rcp(float a) |
3227 | 3236 | return 1.0 / a; |
3228 | 3237 | } |
3229 | 3238 | |
3239 | +/* XXX: find a better solution */ | |
3240 | +double helper_sqrt(double a) | |
3241 | +{ | |
3242 | + return sqrt(a); | |
3243 | +} | |
3244 | + | |
3245 | +/* XXX: move that to another file */ | |
3246 | +#if defined(__powerpc__) | |
3247 | +/* better to call an helper on ppc */ | |
3248 | +float int32_to_float32(int32_t a) | |
3249 | +{ | |
3250 | + return (float)a; | |
3251 | +} | |
3252 | + | |
3253 | +double int32_to_float64(int32_t a) | |
3254 | +{ | |
3255 | + return (double)a; | |
3256 | +} | |
3257 | +#endif | |
3230 | 3258 | |
3231 | 3259 | #if !defined(CONFIG_USER_ONLY) |
3232 | 3260 | ... | ... |