Revision dd94ad96 target-ppc/op_helper.c

b/target-ppc/op_helper.c
974 974

  
975 975
    farg1.ll = arg1;
976 976
    farg2.ll = arg2;
977
#if USE_PRECISE_EMULATION
977

  
978 978
    if (unlikely(float64_is_signaling_nan(farg1.d) ||
979 979
                 float64_is_signaling_nan(farg2.d))) {
980 980
        /* sNaN addition */
......
986 986
    } else {
987 987
        farg1.d = float64_add(farg1.d, farg2.d, &env->fp_status);
988 988
    }
989
#else
990
    farg1.d = float64_add(farg1.d, farg2.d, &env->fp_status);
991
#endif
989

  
992 990
    return farg1.ll;
993 991
}
994 992

  
......
999 997

  
1000 998
    farg1.ll = arg1;
1001 999
    farg2.ll = arg2;
1002
#if USE_PRECISE_EMULATION
1003
{
1000

  
1004 1001
    if (unlikely(float64_is_signaling_nan(farg1.d) ||
1005 1002
                 float64_is_signaling_nan(farg2.d))) {
1006 1003
        /* sNaN subtraction */
......
1012 1009
    } else {
1013 1010
        farg1.d = float64_sub(farg1.d, farg2.d, &env->fp_status);
1014 1011
    }
1015
}
1016
#else
1017
    farg1.d = float64_sub(farg1.d, farg2.d, &env->fp_status);
1018
#endif
1012

  
1019 1013
    return farg1.ll;
1020 1014
}
1021 1015

  
......
1026 1020

  
1027 1021
    farg1.ll = arg1;
1028 1022
    farg2.ll = arg2;
1029
#if USE_PRECISE_EMULATION
1023

  
1030 1024
    if (unlikely(float64_is_signaling_nan(farg1.d) ||
1031 1025
                 float64_is_signaling_nan(farg2.d))) {
1032 1026
        /* sNaN multiplication */
......
1038 1032
    } else {
1039 1033
        farg1.d = float64_mul(farg1.d, farg2.d, &env->fp_status);
1040 1034
    }
1041
#else
1042
    farg1.d = float64_mul(farg1.d, farg2.d, &env->fp_status);
1043
#endif
1035

  
1044 1036
    return farg1.ll;
1045 1037
}
1046 1038

  
......
1051 1043

  
1052 1044
    farg1.ll = arg1;
1053 1045
    farg2.ll = arg2;
1054
#if USE_PRECISE_EMULATION
1046

  
1055 1047
    if (unlikely(float64_is_signaling_nan(farg1.d) ||
1056 1048
                 float64_is_signaling_nan(farg2.d))) {
1057 1049
        /* sNaN division */
......
1065 1057
    } else {
1066 1058
        farg1.d = float64_div(farg1.d, farg2.d, &env->fp_status);
1067 1059
    }
1068
#else
1069
    farg1.d = float64_div(farg1.d, farg2.d, &env->fp_status);
1070
#endif
1060

  
1071 1061
    return farg1.ll;
1072 1062
}
1073 1063

  
......
1116 1106
        farg.ll = fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI);
1117 1107
    } else {
1118 1108
        farg.ll = float64_to_int32(farg.d, &env->fp_status);
1119
#if USE_PRECISE_EMULATION
1120 1109
        /* XXX: higher bits are not supposed to be significant.
1121 1110
         *     to make tests easier, return the same as a real PowerPC 750
1122 1111
         */
1123 1112
        farg.ll |= 0xFFF80000ULL << 32;
1124
#endif
1125 1113
    }
1126 1114
    return farg.ll;
1127 1115
}
......
1140 1128
        farg.ll = fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI);
1141 1129
    } else {
1142 1130
        farg.ll = float64_to_int32_round_to_zero(farg.d, &env->fp_status);
1143
#if USE_PRECISE_EMULATION
1144 1131
        /* XXX: higher bits are not supposed to be significant.
1145 1132
         *     to make tests easier, return the same as a real PowerPC 750
1146 1133
         */
1147 1134
        farg.ll |= 0xFFF80000ULL << 32;
1148
#endif
1149 1135
    }
1150 1136
    return farg.ll;
1151 1137
}
......
1245 1231
    farg1.ll = arg1;
1246 1232
    farg2.ll = arg2;
1247 1233
    farg3.ll = arg3;
1248
#if USE_PRECISE_EMULATION
1234

  
1249 1235
    if (unlikely(float64_is_signaling_nan(farg1.d) ||
1250 1236
                 float64_is_signaling_nan(farg2.d) ||
1251 1237
                 float64_is_signaling_nan(farg3.d))) {
......
1277 1263
        farg1.d = (farg1.d * farg2.d) + farg3.d;
1278 1264
#endif
1279 1265
    }
1280
#else
1281
    farg1.d = float64_mul(farg1.d, farg2.d, &env->fp_status);
1282
    farg1.d = float64_add(farg1.d, farg3.d, &env->fp_status);
1283
#endif
1266

  
1284 1267
    return farg1.ll;
1285 1268
}
1286 1269

  
......
1292 1275
    farg1.ll = arg1;
1293 1276
    farg2.ll = arg2;
1294 1277
    farg3.ll = arg3;
1295
#if USE_PRECISE_EMULATION
1278

  
1296 1279
    if (unlikely(float64_is_signaling_nan(farg1.d) ||
1297 1280
                 float64_is_signaling_nan(farg2.d) ||
1298 1281
                 float64_is_signaling_nan(farg3.d))) {
......
1324 1307
        farg1.d = (farg1.d * farg2.d) - farg3.d;
1325 1308
#endif
1326 1309
    }
1327
#else
1328
    farg1.d = float64_mul(farg1.d, farg2.d, &env->fp_status);
1329
    farg1.d = float64_sub(farg1.d, farg3.d, &env->fp_status);
1330
#endif
1331 1310
    return farg1.ll;
1332 1311
}
1333 1312

  
......
1350 1329
        /* Multiplication of zero by infinity */
1351 1330
        farg1.ll = fload_invalid_op_excp(POWERPC_EXCP_FP_VXIMZ);
1352 1331
    } else {
1353
#if USE_PRECISE_EMULATION
1354 1332
#ifdef FLOAT128
1355 1333
        /* This is the way the PowerPC specification defines it */
1356 1334
        float128 ft0_128, ft1_128;
......
1371 1349
        /* This is OK on x86 hosts */
1372 1350
        farg1.d = (farg1.d * farg2.d) + farg3.d;
1373 1351
#endif
1374
#else
1375
        farg1.d = float64_mul(farg1.d, farg2.d, &env->fp_status);
1376
        farg1.d = float64_add(farg1.d, farg3.d, &env->fp_status);
1377
#endif
1378 1352
        if (likely(!float64_is_quiet_nan(farg1.d)))
1379 1353
            farg1.d = float64_chs(farg1.d);
1380 1354
    }
......
1400 1374
        /* Multiplication of zero by infinity */
1401 1375
        farg1.ll = fload_invalid_op_excp(POWERPC_EXCP_FP_VXIMZ);
1402 1376
    } else {
1403
#if USE_PRECISE_EMULATION
1404 1377
#ifdef FLOAT128
1405 1378
        /* This is the way the PowerPC specification defines it */
1406 1379
        float128 ft0_128, ft1_128;
......
1421 1394
        /* This is OK on x86 hosts */
1422 1395
        farg1.d = (farg1.d * farg2.d) - farg3.d;
1423 1396
#endif
1424
#else
1425
        farg1.d = float64_mul(farg1.d, farg2.d, &env->fp_status);
1426
        farg1.d = float64_sub(farg1.d, farg3.d, &env->fp_status);
1427
#endif
1428 1397
        if (likely(!float64_is_quiet_nan(farg1.d)))
1429 1398
            farg1.d = float64_chs(farg1.d);
1430 1399
    }
......
1438 1407
    float32 f32;
1439 1408
    farg.ll = arg;
1440 1409

  
1441
#if USE_PRECISE_EMULATION
1442 1410
    if (unlikely(float64_is_signaling_nan(farg.d))) {
1443 1411
        /* sNaN square root */
1444 1412
       farg.ll = fload_invalid_op_excp(POWERPC_EXCP_FP_VXSNAN);
......
1446 1414
       f32 = float64_to_float32(farg.d, &env->fp_status);
1447 1415
       farg.d = float32_to_float64(f32, &env->fp_status);
1448 1416
    }
1449
#else
1450
    f32 = float64_to_float32(farg.d, &env->fp_status);
1451
    farg.d = float32_to_float64(f32, &env->fp_status);
1452
#endif
1453 1417
    return farg.ll;
1454 1418
}
1455 1419

  

Also available in: Unified diff