diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-10-10 17:46:24 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-10-10 17:46:24 +0000 |
commit | a0c4cb4a7026977266d08d3e6af27d4dd04ed1e4 (patch) | |
tree | 5c326bbae06343ba7defa375da6c4d9417dad4bb /target-sparc | |
parent | 188d857911636fa43628eb8a7beeab4702636317 (diff) | |
download | hqemu-a0c4cb4a7026977266d08d3e6af27d4dd04ed1e4.zip hqemu-a0c4cb4a7026977266d08d3e6af27d4dd04ed1e4.tar.gz |
sparc fixes
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1117 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-sparc')
-rw-r--r-- | target-sparc/exec.h | 2 | ||||
-rw-r--r-- | target-sparc/op.c | 18 | ||||
-rw-r--r-- | target-sparc/op_helper.c | 28 | ||||
-rw-r--r-- | target-sparc/translate.c | 5 |
4 files changed, 41 insertions, 12 deletions
diff --git a/target-sparc/exec.h b/target-sparc/exec.h index cea9616..941b22a 100644 --- a/target-sparc/exec.h +++ b/target-sparc/exec.h @@ -25,6 +25,8 @@ void helper_st_asi(int asi, int size, int sign); void helper_rett(void); void helper_ldfsr(void); void set_cwp(int new_cwp); +void do_fitos(void); +void do_fitod(void); void do_fabss(void); void do_fsqrts(void); void do_fsqrtd(void); diff --git a/target-sparc/op.c b/target-sparc/op.c index 042fd61..2cf4ed8 100644 --- a/target-sparc/op.c +++ b/target-sparc/op.c @@ -932,20 +932,32 @@ void OPPROTO op_fcmpd(void) do_fcmpd(); } +#ifdef USE_INT_TO_FLOAT_HELPERS void OPPROTO op_fitos(void) { - FT0 = (float) *((int32_t *)&FT1); + do_fitos(); } -void OPPROTO op_fdtos(void) +void OPPROTO op_fitod(void) { - FT0 = (float) DT1; + do_fitod(); +} +#else +void OPPROTO op_fitos(void) +{ + FT0 = (float) *((int32_t *)&FT1); } void OPPROTO op_fitod(void) { DT0 = (double) *((int32_t *)&FT1); } +#endif + +void OPPROTO op_fdtos(void) +{ + FT0 = (float) DT1; +} void OPPROTO op_fstod(void) { diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c index 909639a..3a6de7c 100644 --- a/target-sparc/op_helper.c +++ b/target-sparc/op_helper.c @@ -2,22 +2,34 @@ #include <fenv.h> #include "exec.h" -void OPPROTO do_fabss(void) +#ifdef USE_INT_TO_FLOAT_HELPERS +void do_fitos(void) +{ + FT0 = (float) *((int32_t *)&FT1); +} + +void do_fitod(void) +{ + DT0 = (double) *((int32_t *)&FT1); +} +#endif + +void do_fabss(void) { FT0 = fabsf(FT1); } -void OPPROTO do_fsqrts(void) +void do_fsqrts(void) { FT0 = sqrtf(FT1); } -void OPPROTO do_fsqrtd(void) +void do_fsqrtd(void) { DT0 = sqrt(DT1); } -void OPPROTO do_fcmps (void) +void do_fcmps (void) { if (isnan(FT0) || isnan(FT1)) { T0 = FSR_FCC1 | FSR_FCC0; @@ -31,7 +43,7 @@ void OPPROTO do_fcmps (void) env->fsr = T0; } -void OPPROTO do_fcmpd (void) +void do_fcmpd (void) { if (isnan(DT0) || isnan(DT1)) { T0 = FSR_FCC1 | FSR_FCC0; @@ -45,7 +57,7 @@ void OPPROTO do_fcmpd (void) env->fsr = T0; } -void OPPROTO helper_ld_asi(int asi, int size, int sign) +void helper_ld_asi(int asi, int size, int sign) { switch(asi) { case 3: /* MMU probe */ @@ -76,7 +88,7 @@ void OPPROTO helper_ld_asi(int asi, int size, int sign) } } -void OPPROTO helper_st_asi(int asi, int size, int sign) +void helper_st_asi(int asi, int size, int sign) { switch(asi) { case 3: /* MMU flush */ @@ -125,7 +137,7 @@ void do_ldd_kernel(uint32_t addr) #endif #endif -void OPPROTO helper_rett() +void helper_rett() { int cwp; env->psret = 1; diff --git a/target-sparc/translate.c b/target-sparc/translate.c index 721a91d..2440c0d 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -291,7 +291,10 @@ GEN32(gen_op_store_DT2_fpr, gen_op_store_DT2_fpr_fprf); #if defined(CONFIG_USER_ONLY) #define gen_op_ldst(name) gen_op_##name##_raw() -#define OP_LD_TABLE(width) +#define OP_LD_TABLE(width) \ +static void gen_op_##width##a(int insn, int is_ld, int size, int sign) \ +{ \ +} #define supervisor(dc) 0 #else #define gen_op_ldst(name) (*gen_op_##name[dc->mem_idx])() |