Revision 927f621e op-i386.c

b/op-i386.c
66 66

  
67 67
#define CC_SRC (env->cc_src)
68 68
#define CC_DST (env->cc_dst)
69
#define CC_OP (env->cc_op)
69
#define CC_OP  (env->cc_op)
70

  
71
/* float macros */
72
#define FT0    (env->ft0)
73
#define ST0    (env->fpregs[env->fpstt])
74
#define ST(n)  (env->fpregs[(env->fpstt + (n)) & 7])
75
#define ST1    ST(1)
70 76

  
71 77
extern int __op_param1, __op_param2, __op_param3;
72 78
#define PARAM1 ((long)(&__op_param1))
......
133 139
    6, 7, 8, 0, 1, 2, 3, 4,
134 140
};
135 141

  
142
#ifdef USE_X86LDOUBLE
143
/* an array of Intel 80-bit FP constants, to be loaded via integer ops */
144
typedef unsigned short f15ld[5];
145
const f15ld f15rk[] =
146
{
147
/*0*/	{0x0000,0x0000,0x0000,0x0000,0x0000},
148
/*1*/	{0x0000,0x0000,0x0000,0x8000,0x3fff},
149
/*pi*/	{0xc235,0x2168,0xdaa2,0xc90f,0x4000},
150
/*lg2*/	{0xf799,0xfbcf,0x9a84,0x9a20,0x3ffd},
151
/*ln2*/	{0x79ac,0xd1cf,0x17f7,0xb172,0x3ffe},
152
/*l2e*/	{0xf0bc,0x5c17,0x3b29,0xb8aa,0x3fff},
153
/*l2t*/	{0x8afe,0xcd1b,0x784b,0xd49a,0x4000}
154
};
155
#else
156
/* the same, 64-bit version */
157
typedef unsigned short f15ld[4];
158
const f15ld f15rk[] =
159
{
160
#ifndef WORDS_BIGENDIAN
161
/*0*/	{0x0000,0x0000,0x0000,0x0000},
162
/*1*/	{0x0000,0x0000,0x0000,0x3ff0},
163
/*pi*/	{0x2d18,0x5444,0x21fb,0x4009},
164
/*lg2*/	{0x79ff,0x509f,0x4413,0x3fd3},
165
/*ln2*/	{0x39ef,0xfefa,0x2e42,0x3fe6},
166
/*l2e*/	{0x82fe,0x652b,0x1547,0x3ff7},
167
/*l2t*/	{0xa371,0x0979,0x934f,0x400a}
168
#else
169
/*0*/   {0x0000,0x0000,0x0000,0x0000},
170
/*1*/   {0x3ff0,0x0000,0x0000,0x0000},
171
/*pi*/  {0x4009,0x21fb,0x5444,0x2d18},
172
/*lg2*/	{0x3fd3,0x4413,0x509f,0x79ff},
173
/*ln2*/	{0x3fe6,0x2e42,0xfefa,0x39ef},
174
/*l2e*/	{0x3ff7,0x1547,0x652b,0x82fe},
175
/*l2t*/	{0x400a,0x934f,0x0979,0xa371}
176
#endif
177
};
178
#endif
179
    
136 180
/* n must be a constant to be efficient */
137 181
static inline int lshift(int x, int n)
138 182
{
......
866 910
    [CC_OP_SHLW] = { compute_all_shlw, compute_c_shlw },
867 911
    [CC_OP_SHLL] = { compute_all_shll, compute_c_shll },
868 912
};
913

  
914
/* floating point support */
915

  
916
#ifdef USE_X86LDOUBLE
917
/* use long double functions */
918
#define lrint lrintl
919
#define llrint llrintl
920
#define fabs fabsl
921
#define sin sinl
922
#define cos cosl
923
#define sqrt sqrtl
924
#define pow powl
925
#define log logl
926
#define tan tanl
927
#define atan2 atan2l
928
#define floor floorl
929
#define ceil ceill
930
#define rint rintl
931
#endif
932

  
933
extern int lrint(CPU86_LDouble x);
934
extern int64_t llrint(CPU86_LDouble x);
935
extern CPU86_LDouble fabs(CPU86_LDouble x);
936
extern CPU86_LDouble sin(CPU86_LDouble x);
937
extern CPU86_LDouble cos(CPU86_LDouble x);
938
extern CPU86_LDouble sqrt(CPU86_LDouble x);
939
extern CPU86_LDouble pow(CPU86_LDouble, CPU86_LDouble);
940
extern CPU86_LDouble log(CPU86_LDouble x);
941
extern CPU86_LDouble tan(CPU86_LDouble x);
942
extern CPU86_LDouble atan2(CPU86_LDouble, CPU86_LDouble);
943
extern CPU86_LDouble floor(CPU86_LDouble x);
944
extern CPU86_LDouble ceil(CPU86_LDouble x);
945
extern CPU86_LDouble rint(CPU86_LDouble x);
946

  
947
#define RC_MASK         0xc00
948
#define RC_NEAR		0x000
949
#define RC_DOWN		0x400
950
#define RC_UP		0x800
951
#define RC_CHOP		0xc00
952

  
953
#define MAXTAN 9223372036854775808.0
954

  
955
#ifdef USE_X86LDOUBLE
956

  
957
/* only for x86 */
958
typedef union {
959
    long double d;
960
    struct {
961
        unsigned long long lower;
962
        unsigned short upper;
963
    } l;
964
} CPU86_LDoubleU;
965

  
966
/* the following deal with x86 long double-precision numbers */
967
#define MAXEXPD 0x7fff
968
#define EXPBIAS 16383
969
#define EXPD(fp)	(fp.l.upper & 0x7fff)
970
#define SIGND(fp)	((fp.l.upper) & 0x8000)
971
#define MANTD(fp)       (fp.l.lower)
972
#define BIASEXPONENT(fp) fp.l.upper = (fp.l.upper & ~(0x7fff)) | EXPBIAS
973

  
974
#else
975

  
976
typedef {
977
    double d;
978
#ifndef WORDS_BIGENDIAN
979
    struct {
980
        unsigned long lower;
981
        long upper;
982
    } l;
983
#else
984
    struct {
985
        long upper;
986
        unsigned long lower;
987
    } l;
988
#endif
989
    long long ll;
990
} CPU86_LDoubleU;
991

  
992
/* the following deal with IEEE double-precision numbers */
993
#define MAXEXPD 0x7ff
994
#define EXPBIAS 1023
995
#define EXPD(fp)	(((fp.l.upper) >> 20) & 0x7FF)
996
#define SIGND(fp)	((fp.l.upper) & 0x80000000)
997
#define MANTD(fp)	(fp.ll & ((1LL << 52) - 1))
998
#define BIASEXPONENT(fp) fp.l.upper = (fp.l.upper & ~(0x7ff << 20)) | (EXPBIAS << 20)
999
#endif
1000

  
1001
/* fp load FT0 */
1002

  
1003
void OPPROTO op_flds_FT0_A0(void)
1004
{
1005
    FT0 = ldfl((void *)A0);
1006
}
1007

  
1008
void OPPROTO op_fldl_FT0_A0(void)
1009
{
1010
    FT0 = ldfq((void *)A0);
1011
}
1012

  
1013
void OPPROTO op_fild_FT0_A0(void)
1014
{
1015
    FT0 = (CPU86_LDouble)ldsw((void *)A0);
1016
}
1017

  
1018
void OPPROTO op_fildl_FT0_A0(void)
1019
{
1020
    FT0 = (CPU86_LDouble)((int32_t)ldl((void *)A0));
1021
}
1022

  
1023
void OPPROTO op_fildll_FT0_A0(void)
1024
{
1025
    FT0 = (CPU86_LDouble)((int64_t)ldq((void *)A0));
1026
}
1027

  
1028
/* fp load ST0 */
1029

  
1030
void OPPROTO op_flds_ST0_A0(void)
1031
{
1032
    ST0 = ldfl((void *)A0);
1033
}
1034

  
1035
void OPPROTO op_fldl_ST0_A0(void)
1036
{
1037
    ST0 = ldfq((void *)A0);
1038
}
1039

  
1040
void OPPROTO op_fild_ST0_A0(void)
1041
{
1042
    ST0 = (CPU86_LDouble)ldsw((void *)A0);
1043
}
1044

  
1045
void OPPROTO op_fildl_ST0_A0(void)
1046
{
1047
    ST0 = (CPU86_LDouble)((int32_t)ldl((void *)A0));
1048
}
1049

  
1050
void OPPROTO op_fildll_ST0_A0(void)
1051
{
1052
    ST0 = (CPU86_LDouble)((int64_t)ldq((void *)A0));
1053
}
1054

  
1055
/* fp store */
1056

  
1057
void OPPROTO op_fsts_ST0_A0(void)
1058
{
1059
    stfl((void *)A0, (float)ST0);
1060
}
1061

  
1062
void OPPROTO op_fstl_ST0_A0(void)
1063
{
1064
    ST0 = ldfq((void *)A0);
1065
}
1066

  
1067
void OPPROTO op_fist_ST0_A0(void)
1068
{
1069
    int val;
1070
    val = lrint(ST0);
1071
    stw((void *)A0, val);
1072
}
1073

  
1074
void OPPROTO op_fistl_ST0_A0(void)
1075
{
1076
    int val;
1077
    val = lrint(ST0);
1078
    stl((void *)A0, val);
1079
}
1080

  
1081
void OPPROTO op_fistll_ST0_A0(void)
1082
{
1083
    int64_t val;
1084
    val = llrint(ST0);
1085
    stq((void *)A0, val);
1086
}
1087

  
1088
/* FPU move */
1089

  
1090
static inline void fpush(void)
1091
{
1092
    env->fpstt = (env->fpstt - 1) & 7;
1093
    env->fptags[env->fpstt] = 0; /* validate stack entry */
1094
}
1095

  
1096
static inline void fpop(void)
1097
{
1098
    env->fptags[env->fpstt] = 1; /* invvalidate stack entry */
1099
    env->fpstt = (env->fpstt + 1) & 7;
1100
}
1101

  
1102
void OPPROTO op_fpush(void)
1103
{
1104
    fpush();
1105
}
1106

  
1107
void OPPROTO op_fpop(void)
1108
{
1109
    fpop();
1110
}
1111

  
1112
void OPPROTO op_fdecstp(void)
1113
{
1114
    env->fpstt = (env->fpstt - 1) & 7;
1115
    env->fpus &= (~0x4700);
1116
}
1117

  
1118
void OPPROTO op_fincstp(void)
1119
{
1120
    env->fpstt = (env->fpstt + 1) & 7;
1121
    env->fpus &= (~0x4700);
1122
}
1123

  
1124
void OPPROTO op_fmov_ST0_FT0(void)
1125
{
1126
    ST0 = FT0;
1127
}
1128

  
1129
void OPPROTO op_fmov_FT0_STN(void)
1130
{
1131
    FT0 = ST(PARAM1);
1132
}
1133

  
1134
void OPPROTO op_fmov_ST0_STN(void)
1135
{
1136
    ST0 = ST(PARAM1);
1137
}
1138

  
1139
void OPPROTO op_fmov_STN_ST0(void)
1140
{
1141
    ST(PARAM1) = ST0;
1142
}
1143

  
1144
void OPPROTO op_fxchg_ST0_STN(void)
1145
{
1146
    CPU86_LDouble tmp;
1147
    tmp = ST(PARAM1);
1148
    ST(PARAM1) = ST0;
1149
    ST0 = tmp;
1150
}
1151

  
1152
/* FPU operations */
1153

  
1154
/* XXX: handle nans */
1155
void OPPROTO op_fcom_ST0_FT0(void)
1156
{
1157
    env->fpus &= (~0x4500);	/* (C3,C2,C0) <-- 000 */
1158
    if (ST0 < FT0)
1159
        env->fpus |= 0x100;	/* (C3,C2,C0) <-- 001 */
1160
    else if (ST0 == FT0)
1161
        env->fpus |= 0x4000; /* (C3,C2,C0) <-- 100 */
1162
    FORCE_RET();
1163
}
1164

  
1165
void OPPROTO op_fadd_ST0_FT0(void)
1166
{
1167
    ST0 += FT0;
1168
}
1169

  
1170
void OPPROTO op_fmul_ST0_FT0(void)
1171
{
1172
    ST0 *= FT0;
1173
}
1174

  
1175
void OPPROTO op_fsub_ST0_FT0(void)
1176
{
1177
    ST0 -= FT0;
1178
}
1179

  
1180
void OPPROTO op_fsubr_ST0_FT0(void)
1181
{
1182
    ST0 = FT0 - ST0;
1183
}
1184

  
1185
void OPPROTO op_fdiv_ST0_FT0(void)
1186
{
1187
    ST0 /= FT0;
1188
}
1189

  
1190
void OPPROTO op_fdivr_ST0_FT0(void)
1191
{
1192
    ST0 = FT0 / ST0;
1193
}
1194

  
1195
/* fp operations between STN and ST0 */
1196

  
1197
void OPPROTO op_fadd_STN_ST0(void)
1198
{
1199
    ST(PARAM1) += ST0;
1200
}
1201

  
1202
void OPPROTO op_fmul_STN_ST0(void)
1203
{
1204
    ST(PARAM1) *= ST0;
1205
}
1206

  
1207
void OPPROTO op_fsub_STN_ST0(void)
1208
{
1209
    ST(PARAM1) -= ST0;
1210
}
1211

  
1212
void OPPROTO op_fsubr_STN_ST0(void)
1213
{
1214
    CPU86_LDouble *p;
1215
    p = &ST(PARAM1);
1216
    *p = ST0 - *p;
1217
}
1218

  
1219
void OPPROTO op_fdiv_STN_ST0(void)
1220
{
1221
    ST(PARAM1) /= ST0;
1222
}
1223

  
1224
void OPPROTO op_fdivr_STN_ST0(void)
1225
{
1226
    CPU86_LDouble *p;
1227
    p = &ST(PARAM1);
1228
    *p = ST0 / *p;
1229
}
1230

  
1231
/* misc FPU operations */
1232
void OPPROTO op_fchs_ST0(void)
1233
{
1234
    ST0 = -ST0;
1235
}
1236

  
1237
void OPPROTO op_fabs_ST0(void)
1238
{
1239
    ST0 = fabs(ST0);
1240
}
1241

  
1242
void OPPROTO op_fxam_ST0(void)
1243
{
1244
    CPU86_LDoubleU temp;
1245
    int expdif;
1246

  
1247
    temp.d = ST0;
1248

  
1249
    env->fpus &= (~0x4700);  /* (C3,C2,C1,C0) <-- 0000 */
1250
    if (SIGND(temp))
1251
        env->fpus |= 0x200; /* C1 <-- 1 */
1252

  
1253
    expdif = EXPD(temp);
1254
    if (expdif == MAXEXPD) {
1255
        if (MANTD(temp) == 0)
1256
            env->fpus |=  0x500 /*Infinity*/;
1257
        else
1258
            env->fpus |=  0x100 /*NaN*/;
1259
    } else if (expdif == 0) {
1260
        if (MANTD(temp) == 0)
1261
            env->fpus |=  0x4000 /*Zero*/;
1262
        else
1263
            env->fpus |= 0x4400 /*Denormal*/;
1264
    } else {
1265
        env->fpus |= 0x400;
1266
    }
1267
    FORCE_RET();
1268
}
1269

  
1270
void OPPROTO op_fld1_ST0(void)
1271
{
1272
    ST0 = *(CPU86_LDouble *)&f15rk[1];
1273
}
1274

  
1275
void OPPROTO op_fld2t_ST0(void)
1276
{
1277
    ST0 = *(CPU86_LDouble *)&f15rk[6];
1278
}
1279

  
1280
void OPPROTO op_fld2e_ST0(void)
1281
{
1282
    ST0 = *(CPU86_LDouble *)&f15rk[5];
1283
}
1284

  
1285
void OPPROTO op_fldpi_ST0(void)
1286
{
1287
    ST0 = *(CPU86_LDouble *)&f15rk[2];
1288
}
1289

  
1290
void OPPROTO op_fldlg2_ST0(void)
1291
{
1292
    ST0 = *(CPU86_LDouble *)&f15rk[3];
1293
}
1294

  
1295
void OPPROTO op_fldln2_ST0(void)
1296
{
1297
    ST0 = *(CPU86_LDouble *)&f15rk[4];
1298
}
1299

  
1300
void OPPROTO op_fldz_ST0(void)
1301
{
1302
    ST0 = *(CPU86_LDouble *)&f15rk[0];
1303
}
1304

  
1305
void OPPROTO op_fldz_FT0(void)
1306
{
1307
    ST0 = *(CPU86_LDouble *)&f15rk[0];
1308
}
1309

  
1310
void helper_f2xm1(void)
1311
{
1312
    ST0 = pow(2.0,ST0) - 1.0;
1313
}
1314

  
1315
void helper_fyl2x(void)
1316
{
1317
    CPU86_LDouble fptemp;
1318
    
1319
    fptemp = ST0;
1320
    if (fptemp>0.0){
1321
        fptemp = log(fptemp)/log(2.0);	 /* log2(ST) */
1322
        ST1 *= fptemp;
1323
        fpop();
1324
    } else { 
1325
        env->fpus &= (~0x4700);
1326
        env->fpus |= 0x400;
1327
    }
1328
}
1329

  
1330
void helper_fptan(void)
1331
{
1332
    CPU86_LDouble fptemp;
1333

  
1334
    fptemp = ST0;
1335
    if((fptemp > MAXTAN)||(fptemp < -MAXTAN)) {
1336
        env->fpus |= 0x400;
1337
    } else {
1338
        ST0 = tan(fptemp);
1339
        fpush();
1340
        ST0 = 1.0;
1341
        env->fpus &= (~0x400);  /* C2 <-- 0 */
1342
        /* the above code is for  |arg| < 2**52 only */
1343
    }
1344
}
1345

  
1346
void helper_fpatan(void)
1347
{
1348
    CPU86_LDouble fptemp, fpsrcop;
1349

  
1350
    fpsrcop = ST1;
1351
    fptemp = ST0;
1352
    ST1 = atan2(fpsrcop,fptemp);
1353
    fpop();
1354
}
1355

  
1356
void helper_fxtract(void)
1357
{
1358
    CPU86_LDoubleU temp;
1359
    unsigned int expdif;
1360

  
1361
    temp.d = ST0;
1362
    expdif = EXPD(temp) - EXPBIAS;
1363
    /*DP exponent bias*/
1364
    ST0 = expdif;
1365
    fpush();
1366
    BIASEXPONENT(temp);
1367
    ST0 = temp.d;
1368
}
1369

  
1370
void helper_fprem1(void)
1371
{
1372
    CPU86_LDouble dblq, fpsrcop, fptemp;
1373
    CPU86_LDoubleU fpsrcop1, fptemp1;
1374
    int expdif;
1375
    int q;
1376

  
1377
    fpsrcop = ST0;
1378
    fptemp = ST1;
1379
    fpsrcop1.d = fpsrcop;
1380
    fptemp1.d = fptemp;
1381
    expdif = EXPD(fpsrcop1) - EXPD(fptemp1);
1382
    if (expdif < 53) {
1383
        dblq = fpsrcop / fptemp;
1384
        dblq = (dblq < 0.0)? ceil(dblq): floor(dblq);
1385
        ST0 = fpsrcop - fptemp*dblq;
1386
        q = (int)dblq; /* cutting off top bits is assumed here */
1387
        env->fpus &= (~0x4700); /* (C3,C2,C1,C0) <-- 0000 */
1388
				/* (C0,C1,C3) <-- (q2,q1,q0) */
1389
        env->fpus |= (q&0x4) << 6; /* (C0) <-- q2 */
1390
        env->fpus |= (q&0x2) << 8; /* (C1) <-- q1 */
1391
        env->fpus |= (q&0x1) << 14; /* (C3) <-- q0 */
1392
    } else {
1393
        env->fpus |= 0x400;  /* C2 <-- 1 */
1394
        fptemp = pow(2.0, expdif-50);
1395
        fpsrcop = (ST0 / ST1) / fptemp;
1396
        /* fpsrcop = integer obtained by rounding to the nearest */
1397
        fpsrcop = (fpsrcop-floor(fpsrcop) < ceil(fpsrcop)-fpsrcop)?
1398
            floor(fpsrcop): ceil(fpsrcop);
1399
        ST0 -= (ST1 * fpsrcop * fptemp);
1400
    }
1401
}
1402

  
1403
void helper_fprem(void)
1404
{
1405
    CPU86_LDouble dblq, fpsrcop, fptemp;
1406
    CPU86_LDoubleU fpsrcop1, fptemp1;
1407
    int expdif;
1408
    int q;
1409
    
1410
    fpsrcop = ST0;
1411
    fptemp = ST1;
1412
    fpsrcop1.d = fpsrcop;
1413
    fptemp1.d = fptemp;
1414
    expdif = EXPD(fpsrcop1) - EXPD(fptemp1);
1415
    if ( expdif < 53 ) {
1416
        dblq = fpsrcop / fptemp;
1417
        dblq = (dblq < 0.0)? ceil(dblq): floor(dblq);
1418
        ST0 = fpsrcop - fptemp*dblq;
1419
        q = (int)dblq; /* cutting off top bits is assumed here */
1420
        env->fpus &= (~0x4700); /* (C3,C2,C1,C0) <-- 0000 */
1421
				/* (C0,C1,C3) <-- (q2,q1,q0) */
1422
        env->fpus |= (q&0x4) << 6; /* (C0) <-- q2 */
1423
        env->fpus |= (q&0x2) << 8; /* (C1) <-- q1 */
1424
        env->fpus |= (q&0x1) << 14; /* (C3) <-- q0 */
1425
    } else {
1426
        env->fpus |= 0x400;  /* C2 <-- 1 */
1427
        fptemp = pow(2.0, expdif-50);
1428
        fpsrcop = (ST0 / ST1) / fptemp;
1429
        /* fpsrcop = integer obtained by chopping */
1430
        fpsrcop = (fpsrcop < 0.0)?
1431
            -(floor(fabs(fpsrcop))): floor(fpsrcop);
1432
        ST0 -= (ST1 * fpsrcop * fptemp);
1433
    }
1434
}
1435

  
1436
void helper_fyl2xp1(void)
1437
{
1438
    CPU86_LDouble fptemp;
1439

  
1440
    fptemp = ST0;
1441
    if ((fptemp+1.0)>0.0) {
1442
        fptemp = log(fptemp+1.0) / log(2.0); /* log2(ST+1.0) */
1443
        ST1 *= fptemp;
1444
        fpop();
1445
    } else { 
1446
        env->fpus &= (~0x4700);
1447
        env->fpus |= 0x400;
1448
    }
1449
}
1450

  
1451
void helper_fsqrt(void)
1452
{
1453
    CPU86_LDouble fptemp;
1454

  
1455
    fptemp = ST0;
1456
    if (fptemp<0.0) { 
1457
        env->fpus &= (~0x4700);  /* (C3,C2,C1,C0) <-- 0000 */
1458
        env->fpus |= 0x400;
1459
    }
1460
    ST0 = sqrt(fptemp);
1461
}
1462

  
1463
void helper_fsincos(void)
1464
{
1465
    CPU86_LDouble fptemp;
1466

  
1467
    fptemp = ST0;
1468
    if ((fptemp > MAXTAN)||(fptemp < -MAXTAN)) {
1469
        env->fpus |= 0x400;
1470
    } else {
1471
        ST0 = sin(fptemp);
1472
        fpush();
1473
        ST0 = cos(fptemp);
1474
        env->fpus &= (~0x400);  /* C2 <-- 0 */
1475
        /* the above code is for  |arg| < 2**63 only */
1476
    }
1477
}
1478

  
1479
void helper_frndint(void)
1480
{
1481
    ST0 = rint(ST0);
1482
}
1483

  
1484
void helper_fscale(void)
1485
{
1486
    CPU86_LDouble fpsrcop, fptemp;
1487

  
1488
    fpsrcop = 2.0;
1489
    fptemp = pow(fpsrcop,ST1);
1490
    ST0 *= fptemp;
1491
}
1492

  
1493
void helper_fsin(void)
1494
{
1495
    CPU86_LDouble fptemp;
1496

  
1497
    fptemp = ST0;
1498
    if ((fptemp > MAXTAN)||(fptemp < -MAXTAN)) {
1499
        env->fpus |= 0x400;
1500
    } else {
1501
        ST0 = sin(fptemp);
1502
        env->fpus &= (~0x400);  /* C2 <-- 0 */
1503
        /* the above code is for  |arg| < 2**53 only */
1504
    }
1505
}
1506

  
1507
void helper_fcos(void)
1508
{
1509
    CPU86_LDouble fptemp;
1510

  
1511
    fptemp = ST0;
1512
    if((fptemp > MAXTAN)||(fptemp < -MAXTAN)) {
1513
        env->fpus |= 0x400;
1514
    } else {
1515
        ST0 = cos(fptemp);
1516
        env->fpus &= (~0x400);  /* C2 <-- 0 */
1517
        /* the above code is for  |arg5 < 2**63 only */
1518
    }
1519
}
1520

  
1521
/* associated heplers to reduce generated code length and to simplify
1522
   relocation (FP constants are usually stored in .rodata section) */
1523

  
1524
void OPPROTO op_f2xm1(void)
1525
{
1526
    helper_f2xm1();
1527
}
1528

  
1529
void OPPROTO op_fyl2x(void)
1530
{
1531
    helper_fyl2x();
1532
}
1533

  
1534
void OPPROTO op_fptan(void)
1535
{
1536
    helper_fptan();
1537
}
1538

  
1539
void OPPROTO op_fpatan(void)
1540
{
1541
    helper_fpatan();
1542
}
1543

  
1544
void OPPROTO op_fxtract(void)
1545
{
1546
    helper_fxtract();
1547
}
1548

  
1549
void OPPROTO op_fprem1(void)
1550
{
1551
    helper_fprem1();
1552
}
1553

  
1554

  
1555
void OPPROTO op_fprem(void)
1556
{
1557
    helper_fprem();
1558
}
1559

  
1560
void OPPROTO op_fyl2xp1(void)
1561
{
1562
    helper_fyl2xp1();
1563
}
1564

  
1565
void OPPROTO op_fsqrt(void)
1566
{
1567
    helper_fsqrt();
1568
}
1569

  
1570
void OPPROTO op_fsincos(void)
1571
{
1572
    helper_fsincos();
1573
}
1574

  
1575
void OPPROTO op_frndint(void)
1576
{
1577
    helper_frndint();
1578
}
1579

  
1580
void OPPROTO op_fscale(void)
1581
{
1582
    helper_fscale();
1583
}
1584

  
1585
void OPPROTO op_fsin(void)
1586
{
1587
    helper_fsin();
1588
}
1589

  
1590
void OPPROTO op_fcos(void)
1591
{
1592
    helper_fcos();
1593
}
1594

  

Also available in: Unified diff