target/m68k: implement ftan

Using a local m68k floatx80_tan()
[copied from previous:
Written by Andreas Grabher for Previous, NeXT Computer Emulator.]

Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20180312202728.23790-2-laurent@vivier.eu>
This commit is contained in:
Laurent Vivier 2018-03-12 21:27:18 +01:00
parent 59667bb167
commit 273401809c
6 changed files with 356 additions and 0 deletions

View file

@ -371,4 +371,140 @@ 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),
};
#endif