Commit a0c4cb4a authored by Fabrice Bellard's avatar Fabrice Bellard
Browse files

sparc fixes


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1117 c046a42c-6fe2-441c-8c8c-71466251a162
parent 188d8579
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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);
+15 −3
Original line number Diff line number Diff line
@@ -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)
{
+20 −8
Original line number Diff line number Diff line
@@ -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;
+4 −1
Original line number Diff line number Diff line
@@ -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])()