提交 6265e23b 编写于 作者: P Peter Maydell

Merge remote-tracking branch 'remotes/vivier/tags/m68k-for-2.12-pull-request' into staging

# gpg: Signature made Tue 13 Mar 2018 15:58:42 GMT
# gpg:                using RSA key F30C38BD3F2FBE3C
# gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>"
# gpg:                 aka "Laurent Vivier <laurent@vivier.eu>"
# gpg:                 aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>"
# Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F  5173 F30C 38BD 3F2F BE3C

* remotes/vivier/tags/m68k-for-2.12-pull-request:
  target/m68k: implement fcosh
  target/m68k: implement fsinh
  target/m68k: implement ftanh
  target/m68k: implement fatanh
  target/m68k: implement facos
  target/m68k: implement fasin
  target/m68k: implement fatan
  target/m68k: implement fsincos
  target/m68k: implement fcos
  target/m68k: implement fsin
  target/m68k: implement ftan
Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
......@@ -592,3 +592,64 @@ void HELPER(ftentox)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_tentox(val->d, &env->fp_status);
}
void HELPER(ftan)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_tan(val->d, &env->fp_status);
}
void HELPER(fsin)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_sin(val->d, &env->fp_status);
}
void HELPER(fcos)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_cos(val->d, &env->fp_status);
}
void HELPER(fsincos)(CPUM68KState *env, FPReg *res0, FPReg *res1, FPReg *val)
{
floatx80 a = val->d;
/* If res0 and res1 specify the same floating-point data register,
* the sine result is stored in the register, and the cosine
* result is discarded.
*/
res1->d = floatx80_cos(a, &env->fp_status);
res0->d = floatx80_sin(a, &env->fp_status);
}
void HELPER(fatan)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_atan(val->d, &env->fp_status);
}
void HELPER(fasin)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_asin(val->d, &env->fp_status);
}
void HELPER(facos)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_acos(val->d, &env->fp_status);
}
void HELPER(fatanh)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_atanh(val->d, &env->fp_status);
}
void HELPER(ftanh)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_tanh(val->d, &env->fp_status);
}
void HELPER(fsinh)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_sinh(val->d, &env->fp_status);
}
void HELPER(fcosh)(CPUM68KState *env, FPReg *res, FPReg *val)
{
res->d = floatx80_cosh(val->d, &env->fp_status);
}
......@@ -75,6 +75,17 @@ DEF_HELPER_3(flog2, void, env, fp, fp)
DEF_HELPER_3(fetox, void, env, fp, fp)
DEF_HELPER_3(ftwotox, void, env, fp, fp)
DEF_HELPER_3(ftentox, void, env, fp, fp)
DEF_HELPER_3(ftan, void, env, fp, fp)
DEF_HELPER_3(fsin, void, env, fp, fp)
DEF_HELPER_3(fcos, void, env, fp, fp)
DEF_HELPER_4(fsincos, void, env, fp, fp, fp)
DEF_HELPER_3(fatan, void, env, fp, fp)
DEF_HELPER_3(fasin, void, env, fp, fp)
DEF_HELPER_3(facos, void, env, fp, fp)
DEF_HELPER_3(fatanh, void, env, fp, fp)
DEF_HELPER_3(ftanh, void, env, fp, fp)
DEF_HELPER_3(fsinh, void, env, fp, fp)
DEF_HELPER_3(fcosh, void, env, fp, fp)
DEF_HELPER_3(mac_move, void, env, i32, i32)
DEF_HELPER_3(macmulf, i64, env, i32, i32)
......
此差异已折叠。
......@@ -34,4 +34,15 @@ floatx80 floatx80_log2(floatx80 a, float_status *status);
floatx80 floatx80_etox(floatx80 a, float_status *status);
floatx80 floatx80_twotox(floatx80 a, float_status *status);
floatx80 floatx80_tentox(floatx80 a, float_status *status);
floatx80 floatx80_tan(floatx80 a, float_status *status);
floatx80 floatx80_sin(floatx80 a, float_status *status);
floatx80 floatx80_cos(floatx80 a, float_status *status);
floatx80 floatx80_atan(floatx80 a, float_status *status);
floatx80 floatx80_asin(floatx80 a, float_status *status);
floatx80 floatx80_acos(floatx80 a, float_status *status);
floatx80 floatx80_atanh(floatx80 a, float_status *status);
floatx80 floatx80_etoxm1(floatx80 a, float_status *status);
floatx80 floatx80_tanh(floatx80 a, float_status *status);
floatx80 floatx80_sinh(floatx80 a, float_status *status);
floatx80 floatx80_cosh(floatx80 a, float_status *status);
#endif
......@@ -371,4 +371,271 @@ static const uint32_t exp2_tbl2[64] = {
0xBFBDBF4A, 0x3FBEC01A, 0x3FBE8CAC, 0xBFBCBB3F,
0x3FBEF73A, 0xBFB8B795, 0x3FBEF84B, 0xBFBEF581
};
static const floatx80 pi_tbl[65] = {
make_floatx80_init(0xC004, 0xC90FDAA22168C235),
make_floatx80_init(0xC004, 0xC2C75BCD105D7C23),
make_floatx80_init(0xC004, 0xBC7EDCF7FF523611),
make_floatx80_init(0xC004, 0xB6365E22EE46F000),
make_floatx80_init(0xC004, 0xAFEDDF4DDD3BA9EE),
make_floatx80_init(0xC004, 0xA9A56078CC3063DD),
make_floatx80_init(0xC004, 0xA35CE1A3BB251DCB),
make_floatx80_init(0xC004, 0x9D1462CEAA19D7B9),
make_floatx80_init(0xC004, 0x96CBE3F9990E91A8),
make_floatx80_init(0xC004, 0x9083652488034B96),
make_floatx80_init(0xC004, 0x8A3AE64F76F80584),
make_floatx80_init(0xC004, 0x83F2677A65ECBF73),
make_floatx80_init(0xC003, 0xFB53D14AA9C2F2C2),
make_floatx80_init(0xC003, 0xEEC2D3A087AC669F),
make_floatx80_init(0xC003, 0xE231D5F66595DA7B),
make_floatx80_init(0xC003, 0xD5A0D84C437F4E58),
make_floatx80_init(0xC003, 0xC90FDAA22168C235),
make_floatx80_init(0xC003, 0xBC7EDCF7FF523611),
make_floatx80_init(0xC003, 0xAFEDDF4DDD3BA9EE),
make_floatx80_init(0xC003, 0xA35CE1A3BB251DCB),
make_floatx80_init(0xC003, 0x96CBE3F9990E91A8),
make_floatx80_init(0xC003, 0x8A3AE64F76F80584),
make_floatx80_init(0xC002, 0xFB53D14AA9C2F2C2),
make_floatx80_init(0xC002, 0xE231D5F66595DA7B),
make_floatx80_init(0xC002, 0xC90FDAA22168C235),
make_floatx80_init(0xC002, 0xAFEDDF4DDD3BA9EE),
make_floatx80_init(0xC002, 0x96CBE3F9990E91A8),
make_floatx80_init(0xC001, 0xFB53D14AA9C2F2C2),
make_floatx80_init(0xC001, 0xC90FDAA22168C235),
make_floatx80_init(0xC001, 0x96CBE3F9990E91A8),
make_floatx80_init(0xC000, 0xC90FDAA22168C235),
make_floatx80_init(0xBFFF, 0xC90FDAA22168C235),
make_floatx80_init(0x0000, 0x0000000000000000),
make_floatx80_init(0x3FFF, 0xC90FDAA22168C235),
make_floatx80_init(0x4000, 0xC90FDAA22168C235),
make_floatx80_init(0x4001, 0x96CBE3F9990E91A8),
make_floatx80_init(0x4001, 0xC90FDAA22168C235),
make_floatx80_init(0x4001, 0xFB53D14AA9C2F2C2),
make_floatx80_init(0x4002, 0x96CBE3F9990E91A8),
make_floatx80_init(0x4002, 0xAFEDDF4DDD3BA9EE),
make_floatx80_init(0x4002, 0xC90FDAA22168C235),
make_floatx80_init(0x4002, 0xE231D5F66595DA7B),
make_floatx80_init(0x4002, 0xFB53D14AA9C2F2C2),
make_floatx80_init(0x4003, 0x8A3AE64F76F80584),
make_floatx80_init(0x4003, 0x96CBE3F9990E91A8),
make_floatx80_init(0x4003, 0xA35CE1A3BB251DCB),
make_floatx80_init(0x4003, 0xAFEDDF4DDD3BA9EE),
make_floatx80_init(0x4003, 0xBC7EDCF7FF523611),
make_floatx80_init(0x4003, 0xC90FDAA22168C235),
make_floatx80_init(0x4003, 0xD5A0D84C437F4E58),
make_floatx80_init(0x4003, 0xE231D5F66595DA7B),
make_floatx80_init(0x4003, 0xEEC2D3A087AC669F),
make_floatx80_init(0x4003, 0xFB53D14AA9C2F2C2),
make_floatx80_init(0x4004, 0x83F2677A65ECBF73),
make_floatx80_init(0x4004, 0x8A3AE64F76F80584),
make_floatx80_init(0x4004, 0x9083652488034B96),
make_floatx80_init(0x4004, 0x96CBE3F9990E91A8),
make_floatx80_init(0x4004, 0x9D1462CEAA19D7B9),
make_floatx80_init(0x4004, 0xA35CE1A3BB251DCB),
make_floatx80_init(0x4004, 0xA9A56078CC3063DD),
make_floatx80_init(0x4004, 0xAFEDDF4DDD3BA9EE),
make_floatx80_init(0x4004, 0xB6365E22EE46F000),
make_floatx80_init(0x4004, 0xBC7EDCF7FF523611),
make_floatx80_init(0x4004, 0xC2C75BCD105D7C23),
make_floatx80_init(0x4004, 0xC90FDAA22168C235)
};
static const float32 pi_tbl2[65] = {
const_float32(0x21800000),
const_float32(0xA0D00000),
const_float32(0xA1E80000),
const_float32(0x21480000),
const_float32(0xA1200000),
const_float32(0x21FC0000),
const_float32(0x21100000),
const_float32(0xA1580000),
const_float32(0x21E00000),
const_float32(0x20B00000),
const_float32(0xA1880000),
const_float32(0x21C40000),
const_float32(0x20000000),
const_float32(0x21380000),
const_float32(0xA1300000),
const_float32(0x9FC00000),
const_float32(0x21000000),
const_float32(0xA1680000),
const_float32(0xA0A00000),
const_float32(0x20900000),
const_float32(0x21600000),
const_float32(0xA1080000),
const_float32(0x1F800000),
const_float32(0xA0B00000),
const_float32(0x20800000),
const_float32(0xA0200000),
const_float32(0x20E00000),
const_float32(0x1F000000),
const_float32(0x20000000),
const_float32(0x20600000),
const_float32(0x1F800000),
const_float32(0x1F000000),
const_float32(0x00000000),
const_float32(0x9F000000),
const_float32(0x9F800000),
const_float32(0xA0600000),
const_float32(0xA0000000),
const_float32(0x9F000000),
const_float32(0xA0E00000),
const_float32(0x20200000),
const_float32(0xA0800000),
const_float32(0x20B00000),
const_float32(0x9F800000),
const_float32(0x21080000),
const_float32(0xA1600000),
const_float32(0xA0900000),
const_float32(0x20A00000),
const_float32(0x21680000),
const_float32(0xA1000000),
const_float32(0x1FC00000),
const_float32(0x21300000),
const_float32(0xA1380000),
const_float32(0xA0000000),
const_float32(0xA1C40000),
const_float32(0x21880000),
const_float32(0xA0B00000),
const_float32(0xA1E00000),
const_float32(0x21580000),
const_float32(0xA1100000),
const_float32(0xA1FC0000),
const_float32(0x21200000),
const_float32(0xA1480000),
const_float32(0x21E80000),
const_float32(0x20D00000),
const_float32(0xA1800000),
};
static const floatx80 atan_tbl[128] = {
make_floatx80_init(0x3FFB, 0x83D152C5060B7A51),
make_floatx80_init(0x3FFB, 0x8BC8544565498B8B),
make_floatx80_init(0x3FFB, 0x93BE406017626B0D),
make_floatx80_init(0x3FFB, 0x9BB3078D35AEC202),
make_floatx80_init(0x3FFB, 0xA3A69A525DDCE7DE),
make_floatx80_init(0x3FFB, 0xAB98E94362765619),
make_floatx80_init(0x3FFB, 0xB389E502F9C59862),
make_floatx80_init(0x3FFB, 0xBB797E436B09E6FB),
make_floatx80_init(0x3FFB, 0xC367A5C739E5F446),
make_floatx80_init(0x3FFB, 0xCB544C61CFF7D5C6),
make_floatx80_init(0x3FFB, 0xD33F62F82488533E),
make_floatx80_init(0x3FFB, 0xDB28DA8162404C77),
make_floatx80_init(0x3FFB, 0xE310A4078AD34F18),
make_floatx80_init(0x3FFB, 0xEAF6B0A8188EE1EB),
make_floatx80_init(0x3FFB, 0xF2DAF1949DBE79D5),
make_floatx80_init(0x3FFB, 0xFABD581361D47E3E),
make_floatx80_init(0x3FFC, 0x8346AC210959ECC4),
make_floatx80_init(0x3FFC, 0x8B232A08304282D8),
make_floatx80_init(0x3FFC, 0x92FB70B8D29AE2F9),
make_floatx80_init(0x3FFC, 0x9ACF476F5CCD1CB4),
make_floatx80_init(0x3FFC, 0xA29E76304954F23F),
make_floatx80_init(0x3FFC, 0xAA68C5D08AB85230),
make_floatx80_init(0x3FFC, 0xB22DFFFD9D539F83),
make_floatx80_init(0x3FFC, 0xB9EDEF453E900EA5),
make_floatx80_init(0x3FFC, 0xC1A85F1CC75E3EA5),
make_floatx80_init(0x3FFC, 0xC95D1BE828138DE6),
make_floatx80_init(0x3FFC, 0xD10BF300840D2DE4),
make_floatx80_init(0x3FFC, 0xD8B4B2BA6BC05E7A),
make_floatx80_init(0x3FFC, 0xE0572A6BB42335F6),
make_floatx80_init(0x3FFC, 0xE7F32A70EA9CAA8F),
make_floatx80_init(0x3FFC, 0xEF88843264ECEFAA),
make_floatx80_init(0x3FFC, 0xF7170A28ECC06666),
make_floatx80_init(0x3FFD, 0x812FD288332DAD32),
make_floatx80_init(0x3FFD, 0x88A8D1B1218E4D64),
make_floatx80_init(0x3FFD, 0x9012AB3F23E4AEE8),
make_floatx80_init(0x3FFD, 0x976CC3D411E7F1B9),
make_floatx80_init(0x3FFD, 0x9EB689493889A227),
make_floatx80_init(0x3FFD, 0xA5EF72C34487361B),
make_floatx80_init(0x3FFD, 0xAD1700BAF07A7227),
make_floatx80_init(0x3FFD, 0xB42CBCFAFD37EFB7),
make_floatx80_init(0x3FFD, 0xBB303A940BA80F89),
make_floatx80_init(0x3FFD, 0xC22115C6FCAEBBAF),
make_floatx80_init(0x3FFD, 0xC8FEF3E686331221),
make_floatx80_init(0x3FFD, 0xCFC98330B4000C70),
make_floatx80_init(0x3FFD, 0xD6807AA1102C5BF9),
make_floatx80_init(0x3FFD, 0xDD2399BC31252AA3),
make_floatx80_init(0x3FFD, 0xE3B2A8556B8FC517),
make_floatx80_init(0x3FFD, 0xEA2D764F64315989),
make_floatx80_init(0x3FFD, 0xF3BF5BF8BAD1A21D),
make_floatx80_init(0x3FFE, 0x801CE39E0D205C9A),
make_floatx80_init(0x3FFE, 0x8630A2DADA1ED066),
make_floatx80_init(0x3FFE, 0x8C1AD445F3E09B8C),
make_floatx80_init(0x3FFE, 0x91DB8F1664F350E2),
make_floatx80_init(0x3FFE, 0x97731420365E538C),
make_floatx80_init(0x3FFE, 0x9CE1C8E6A0B8CDBA),
make_floatx80_init(0x3FFE, 0xA22832DBCADAAE09),
make_floatx80_init(0x3FFE, 0xA746F2DDB7602294),
make_floatx80_init(0x3FFE, 0xAC3EC0FB997DD6A2),
make_floatx80_init(0x3FFE, 0xB110688AEBDC6F6A),
make_floatx80_init(0x3FFE, 0xB5BCC49059ECC4B0),
make_floatx80_init(0x3FFE, 0xBA44BC7DD470782F),
make_floatx80_init(0x3FFE, 0xBEA94144FD049AAC),
make_floatx80_init(0x3FFE, 0xC2EB4ABB661628B6),
make_floatx80_init(0x3FFE, 0xC70BD54CE602EE14),
make_floatx80_init(0x3FFE, 0xCD000549ADEC7159),
make_floatx80_init(0x3FFE, 0xD48457D2D8EA4EA3),
make_floatx80_init(0x3FFE, 0xDB948DA712DECE3B),
make_floatx80_init(0x3FFE, 0xE23855F969E8096A),
make_floatx80_init(0x3FFE, 0xE8771129C4353259),
make_floatx80_init(0x3FFE, 0xEE57C16E0D379C0D),
make_floatx80_init(0x3FFE, 0xF3E10211A87C3779),
make_floatx80_init(0x3FFE, 0xF919039D758B8D41),
make_floatx80_init(0x3FFE, 0xFE058B8F64935FB3),
make_floatx80_init(0x3FFF, 0x8155FB497B685D04),
make_floatx80_init(0x3FFF, 0x83889E3549D108E1),
make_floatx80_init(0x3FFF, 0x859CFA76511D724B),
make_floatx80_init(0x3FFF, 0x87952ECFFF8131E7),
make_floatx80_init(0x3FFF, 0x89732FD19557641B),
make_floatx80_init(0x3FFF, 0x8B38CAD101932A35),
make_floatx80_init(0x3FFF, 0x8CE7A8D8301EE6B5),
make_floatx80_init(0x3FFF, 0x8F46A39E2EAE5281),
make_floatx80_init(0x3FFF, 0x922DA7D791888487),
make_floatx80_init(0x3FFF, 0x94D19FCBDEDF5241),
make_floatx80_init(0x3FFF, 0x973AB94419D2A08B),
make_floatx80_init(0x3FFF, 0x996FF00E08E10B96),
make_floatx80_init(0x3FFF, 0x9B773F9512321DA7),
make_floatx80_init(0x3FFF, 0x9D55CC320F935624),
make_floatx80_init(0x3FFF, 0x9F100575006CC571),
make_floatx80_init(0x3FFF, 0xA0A9C290D97CC06C),
make_floatx80_init(0x3FFF, 0xA22659EBEBC0630A),
make_floatx80_init(0x3FFF, 0xA388B4AFF6EF0EC9),
make_floatx80_init(0x3FFF, 0xA4D35F1061D292C4),
make_floatx80_init(0x3FFF, 0xA60895DCFBE3187E),
make_floatx80_init(0x3FFF, 0xA72A51DC7367BEAC),
make_floatx80_init(0x3FFF, 0xA83A51530956168F),
make_floatx80_init(0x3FFF, 0xA93A20077539546E),
make_floatx80_init(0x3FFF, 0xAA9E7245023B2605),
make_floatx80_init(0x3FFF, 0xAC4C84BA6FE4D58F),
make_floatx80_init(0x3FFF, 0xADCE4A4A606B9712),
make_floatx80_init(0x3FFF, 0xAF2A2DCD8D263C9C),
make_floatx80_init(0x3FFF, 0xB0656F81F22265C7),
make_floatx80_init(0x3FFF, 0xB18465150F71496A),
make_floatx80_init(0x3FFF, 0xB28AAA156F9ADA35),
make_floatx80_init(0x3FFF, 0xB37B44FF3766B895),
make_floatx80_init(0x3FFF, 0xB458C3DCE9630433),
make_floatx80_init(0x3FFF, 0xB525529D562246BD),
make_floatx80_init(0x3FFF, 0xB5E2CCA95F9D88CC),
make_floatx80_init(0x3FFF, 0xB692CADA7ACA1ADA),
make_floatx80_init(0x3FFF, 0xB736AEA7A6925838),
make_floatx80_init(0x3FFF, 0xB7CFAB287E9F7B36),
make_floatx80_init(0x3FFF, 0xB85ECC66CB219835),
make_floatx80_init(0x3FFF, 0xB8E4FD5A20A593DA),
make_floatx80_init(0x3FFF, 0xB99F41F64AFF9BB5),
make_floatx80_init(0x3FFF, 0xBA7F1E17842BBE7B),
make_floatx80_init(0x3FFF, 0xBB4712857637E17D),
make_floatx80_init(0x3FFF, 0xBBFABE8A4788DF6F),
make_floatx80_init(0x3FFF, 0xBC9D0FAD2B689D79),
make_floatx80_init(0x3FFF, 0xBD306A39471ECD86),
make_floatx80_init(0x3FFF, 0xBDB6C731856AF18A),
make_floatx80_init(0x3FFF, 0xBE31CAC502E80D70),
make_floatx80_init(0x3FFF, 0xBEA2D55CE33194E2),
make_floatx80_init(0x3FFF, 0xBF0B10B7C03128F0),
make_floatx80_init(0x3FFF, 0xBF6B7A18DACB778D),
make_floatx80_init(0x3FFF, 0xBFC4EA4663FA18F6),
make_floatx80_init(0x3FFF, 0xC0181BDE8B89A454),
make_floatx80_init(0x3FFF, 0xC065B066CFBF6439),
make_floatx80_init(0x3FFF, 0xC0AE345F56340AE6),
make_floatx80_init(0x3FFF, 0xC0F222919CB9E6A7)
};
#endif
......@@ -5042,6 +5042,9 @@ DISAS_INSN(fpu)
case 1: /* fint */
gen_helper_firound(cpu_env, cpu_dest, cpu_src);
break;
case 2: /* fsinh */
gen_helper_fsinh(cpu_env, cpu_dest, cpu_src);
break;
case 3: /* fintrz */
gen_helper_fitrunc(cpu_env, cpu_dest, cpu_src);
break;
......@@ -5057,6 +5060,24 @@ DISAS_INSN(fpu)
case 0x06: /* flognp1 */
gen_helper_flognp1(cpu_env, cpu_dest, cpu_src);
break;
case 0x09: /* ftanh */
gen_helper_ftanh(cpu_env, cpu_dest, cpu_src);
break;
case 0x0a: /* fatan */
gen_helper_fatan(cpu_env, cpu_dest, cpu_src);
break;
case 0x0c: /* fasin */
gen_helper_fasin(cpu_env, cpu_dest, cpu_src);
break;
case 0x0d: /* fatanh */
gen_helper_fatanh(cpu_env, cpu_dest, cpu_src);
break;
case 0x0e: /* fsin */
gen_helper_fsin(cpu_env, cpu_dest, cpu_src);
break;
case 0x0f: /* ftan */
gen_helper_ftan(cpu_env, cpu_dest, cpu_src);
break;
case 0x10: /* fetox */
gen_helper_fetox(cpu_env, cpu_dest, cpu_src);
break;
......@@ -5084,6 +5105,9 @@ DISAS_INSN(fpu)
case 0x5c: /* fdabs */
gen_helper_fdabs(cpu_env, cpu_dest, cpu_src);
break;
case 0x19: /* fcosh */
gen_helper_fcosh(cpu_env, cpu_dest, cpu_src);
break;
case 0x1a: /* fneg */
gen_helper_fneg(cpu_env, cpu_dest, cpu_src);
break;
......@@ -5093,6 +5117,12 @@ DISAS_INSN(fpu)
case 0x5e: /* fdneg */
gen_helper_fdneg(cpu_env, cpu_dest, cpu_src);
break;
case 0x1c: /* facos */
gen_helper_facos(cpu_env, cpu_dest, cpu_src);
break;
case 0x1d: /* fcos */
gen_helper_fcos(cpu_env, cpu_dest, cpu_src);
break;
case 0x1e: /* fgetexp */
gen_helper_fgetexp(cpu_env, cpu_dest, cpu_src);
break;
......@@ -5150,6 +5180,14 @@ DISAS_INSN(fpu)
case 0x6c: /* fdsub */
gen_helper_fdsub(cpu_env, cpu_dest, cpu_src, cpu_dest);
break;
case 0x30: case 0x31: case 0x32:
case 0x33: case 0x34: case 0x35:
case 0x36: case 0x37: {
TCGv_ptr cpu_dest2 = gen_fp_ptr(REG(ext, 0));
gen_helper_fsincos(cpu_env, cpu_dest, cpu_dest2, cpu_src);
tcg_temp_free_ptr(cpu_dest2);
}
break;
case 0x38: /* fcmp */
gen_helper_fcmp(cpu_env, cpu_src, cpu_dest);
return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册