Revision 714547bb target-sparc/op_helper.c

b/target-sparc/op_helper.c
87 87
#define F_HELPER(name, p) void helper_f##name##p(void)
88 88

  
89 89
#define F_BINOP(name)                                           \
90
    F_HELPER(name, s)                                           \
90
    float32 helper_f ## name ## s (float32 src1, float32 src2)  \
91 91
    {                                                           \
92
        FT0 = float32_ ## name (FT0, FT1, &env->fp_status);     \
92
        return float32_ ## name (src1, src2, &env->fp_status);  \
93 93
    }                                                           \
94 94
    F_HELPER(name, d)                                           \
95 95
    {                                                           \
......
120 120
                       &env->fp_status);
121 121
}
122 122

  
123
F_HELPER(neg, s)
123
float32 helper_fnegs(float32 src)
124 124
{
125
    FT0 = float32_chs(FT1);
125
    return float32_chs(src);
126 126
}
127 127

  
128 128
#ifdef TARGET_SPARC64
......
138 138
#endif
139 139

  
140 140
/* Integer to float conversion.  */
141
F_HELPER(ito, s)
141
float32 helper_fitos(int32_t src)
142 142
{
143
    FT0 = int32_to_float32(*((int32_t *)&FT1), &env->fp_status);
143
    return int32_to_float32(src, &env->fp_status);
144 144
}
145 145

  
146 146
F_HELPER(ito, d)
......
203 203
}
204 204

  
205 205
/* Float to integer conversion.  */
206
void helper_fstoi(void)
206
int32_t helper_fstoi(float32 src)
207 207
{
208
    *((int32_t *)&FT0) = float32_to_int32_round_to_zero(FT1, &env->fp_status);
208
    return float32_to_int32_round_to_zero(src, &env->fp_status);
209 209
}
210 210

  
211 211
void helper_fdtoi(void)
......
714 714
    set_float_exception_flags(0, &env->fp_status);
715 715
}
716 716

  
717
void helper_fabss(void)
717
float32 helper_fabss(float32 src)
718 718
{
719
    FT0 = float32_abs(FT1);
719
    return float32_abs(src);
720 720
}
721 721

  
722 722
#ifdef TARGET_SPARC64
......
731 731
}
732 732
#endif
733 733

  
734
void helper_fsqrts(void)
734
float32 helper_fsqrts(float32 src)
735 735
{
736
    FT0 = float32_sqrt(FT1, &env->fp_status);
736
    return float32_sqrt(src, &env->fp_status);
737 737
}
738 738

  
739 739
void helper_fsqrtd(void)
......
776 776
        }                                                               \
777 777
        env->fsr |= new_fsr;                                            \
778 778
    }
779
#define GEN_FCMPS(name, size, FS, TRAP)                                 \
780
    void glue(helper_, name)(float32 src1, float32 src2)                \
781
    {                                                                   \
782
        target_ulong new_fsr;                                           \
783
                                                                        \
784
        env->fsr &= ~((FSR_FCC1 | FSR_FCC0) << FS);                     \
785
        switch (glue(size, _compare) (src1, src2, &env->fp_status)) {   \
786
        case float_relation_unordered:                                  \
787
            new_fsr = (FSR_FCC1 | FSR_FCC0) << FS;                      \
788
            if ((env->fsr & FSR_NVM) || TRAP) {                         \
789
                env->fsr |= new_fsr;                                    \
790
                env->fsr |= FSR_NVC;                                    \
791
                env->fsr |= FSR_FTT_IEEE_EXCP;                          \
792
                raise_exception(TT_FP_EXCP);                            \
793
            } else {                                                    \
794
                env->fsr |= FSR_NVA;                                    \
795
            }                                                           \
796
            break;                                                      \
797
        case float_relation_less:                                       \
798
            new_fsr = FSR_FCC0 << FS;                                   \
799
            break;                                                      \
800
        case float_relation_greater:                                    \
801
            new_fsr = FSR_FCC1 << FS;                                   \
802
            break;                                                      \
803
        default:                                                        \
804
            new_fsr = 0;                                                \
805
            break;                                                      \
806
        }                                                               \
807
        env->fsr |= new_fsr;                                            \
808
    }
779 809

  
780
GEN_FCMP(fcmps, float32, FT0, FT1, 0, 0);
810
GEN_FCMPS(fcmps, float32, 0, 0);
781 811
GEN_FCMP(fcmpd, float64, DT0, DT1, 0, 0);
782 812

  
783
GEN_FCMP(fcmpes, float32, FT0, FT1, 0, 1);
813
GEN_FCMPS(fcmpes, float32, 0, 1);
784 814
GEN_FCMP(fcmped, float64, DT0, DT1, 0, 1);
785 815

  
786 816
GEN_FCMP(fcmpq, float128, QT0, QT1, 0, 0);
787 817
GEN_FCMP(fcmpeq, float128, QT0, QT1, 0, 1);
788 818

  
789 819
#ifdef TARGET_SPARC64
790
GEN_FCMP(fcmps_fcc1, float32, FT0, FT1, 22, 0);
820
GEN_FCMPS(fcmps_fcc1, float32, 22, 0);
791 821
GEN_FCMP(fcmpd_fcc1, float64, DT0, DT1, 22, 0);
792 822
GEN_FCMP(fcmpq_fcc1, float128, QT0, QT1, 22, 0);
793 823

  
794
GEN_FCMP(fcmps_fcc2, float32, FT0, FT1, 24, 0);
824
GEN_FCMPS(fcmps_fcc2, float32, 24, 0);
795 825
GEN_FCMP(fcmpd_fcc2, float64, DT0, DT1, 24, 0);
796 826
GEN_FCMP(fcmpq_fcc2, float128, QT0, QT1, 24, 0);
797 827

  
798
GEN_FCMP(fcmps_fcc3, float32, FT0, FT1, 26, 0);
828
GEN_FCMPS(fcmps_fcc3, float32, 26, 0);
799 829
GEN_FCMP(fcmpd_fcc3, float64, DT0, DT1, 26, 0);
800 830
GEN_FCMP(fcmpq_fcc3, float128, QT0, QT1, 26, 0);
801 831

  
802
GEN_FCMP(fcmpes_fcc1, float32, FT0, FT1, 22, 1);
832
GEN_FCMPS(fcmpes_fcc1, float32, 22, 1);
803 833
GEN_FCMP(fcmped_fcc1, float64, DT0, DT1, 22, 1);
804 834
GEN_FCMP(fcmpeq_fcc1, float128, QT0, QT1, 22, 1);
805 835

  
806
GEN_FCMP(fcmpes_fcc2, float32, FT0, FT1, 24, 1);
836
GEN_FCMPS(fcmpes_fcc2, float32, 24, 1);
807 837
GEN_FCMP(fcmped_fcc2, float64, DT0, DT1, 24, 1);
808 838
GEN_FCMP(fcmpeq_fcc2, float128, QT0, QT1, 24, 1);
809 839

  
810
GEN_FCMP(fcmpes_fcc3, float32, FT0, FT1, 26, 1);
840
GEN_FCMPS(fcmpes_fcc3, float32, 26, 1);
811 841
GEN_FCMP(fcmped_fcc3, float64, DT0, DT1, 26, 1);
812 842
GEN_FCMP(fcmpeq_fcc3, float128, QT0, QT1, 26, 1);
813 843
#endif
844
#undef GEN_FCMPS
814 845

  
815 846
#if !defined(TARGET_SPARC64) && !defined(CONFIG_USER_ONLY) && \
816 847
    defined(DEBUG_MXCC)
......
2220 2251
    switch(size) {
2221 2252
    default:
2222 2253
    case 4:
2223
        *((uint32_t *)&FT0) = val;
2254
        *((uint32_t *)&env->fpr[rd]) = val;
2224 2255
        break;
2225 2256
    case 8:
2226 2257
        *((int64_t *)&DT0) = val;
......
2261 2292
    switch(size) {
2262 2293
    default:
2263 2294
    case 4:
2264
        val = *((uint32_t *)&FT0);
2295
        val = *((uint32_t *)&env->fpr[rd]);
2265 2296
        break;
2266 2297
    case 8:
2267 2298
        val = *((int64_t *)&DT0);

Also available in: Unified diff