Hello community, here is the log from the commit of package aranym for openSUSE:Factory checked in at 2016-03-29 10:00:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/aranym (Old) and /work/SRC/openSUSE:Factory/.aranym.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "aranym" Changes: -------- --- /work/SRC/openSUSE:Factory/aranym/aranym.changes 2015-03-16 09:38:39.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.aranym.new/aranym.changes 2016-03-29 10:40:03.000000000 +0200 @@ -1,0 +2,7 @@ +Mon Mar 21 00:04:40 UTC 2016 - [email protected] + +- fmovecr-const.patch: Fix some FPU constants for MPFR +- nan-sign.patch: Properly track sign bit of NaN in mpfr fpu emulator +- ncr5380-mode-reg.patch: emulate NCR5380 MODE register + +------------------------------------------------------------------- New: ---- fmovecr-const.patch nan-sign.patch ncr5380-mode-reg.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ aranym.spec ++++++ --- /var/tmp/diff_new_pack.PcBucx/_old 2016-03-29 10:40:05.000000000 +0200 +++ /var/tmp/diff_new_pack.PcBucx/_new 2016-03-29 10:40:05.000000000 +0200 @@ -37,6 +37,9 @@ Source: %{name}-%{version}.tar.gz Source1: afros812.zip Patch: cas2-emulation.patch +Patch1: fmovecr-const.patch +Patch2: nan-sign.patch +Patch3: ncr5380-mode-reg.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build Requires(post): permissions @@ -71,6 +74,9 @@ %prep %setup -q -n %{name}-%{version} -a 1 %patch -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 # Don't remove -g from CFLAGS sed -i -e 's,/-g,/-:,' configure.ac configure ++++++ fmovecr-const.patch ++++++ >From 6b21029312c23c905fcf85551f6face32c6886f0 Mon Sep 17 00:00:00 2001 From: Thorsten Otto <[email protected]> Date: Sun, 19 Apr 2015 11:53:18 +0200 Subject: [PATCH] Fix some FPU constants for MPFR --- ChangeLog | 4 ++++ src/uae_cpu/fpu/fpu_mpfr.cpp | 25 +++++++++++++------------ 2 files changed, 17 insertions(+), 12 deletions(-) Index: aranym-1.0.2/src/uae_cpu/fpu/fpu_mpfr.cpp =================================================================== --- aranym-1.0.2.orig/src/uae_cpu/fpu/fpu_mpfr.cpp +++ aranym-1.0.2/src/uae_cpu/fpu/fpu_mpfr.cpp @@ -141,28 +141,29 @@ fpu_init (bool integral_68040) mpfr_const_pi (fpu_constant_rom[0], MPFR_RNDN); // 11: log10 (2) mpfr_set_ui (fpu_constant_rom[11], 2, MPFR_RNDN); - mpfr_log10 (fpu_constant_rom[11], fpu_constant_rom[11], MPFR_RNDN); + mpfr_log10 (fpu_constant_rom[11], fpu_constant_rom[11], MPFR_RNDZ); // 12: e mpfr_set_ui (fpu_constant_rom[12], 1, MPFR_RNDN); - mpfr_exp (fpu_constant_rom[12], fpu_constant_rom[12], MPFR_RNDN); + mpfr_exp (fpu_constant_rom[12], fpu_constant_rom[12], MPFR_RNDZ); // 13: log2 (e) - mpfr_log2 (fpu_constant_rom[13], fpu_constant_rom[12], MPFR_RNDN); + mpfr_log2 (fpu_constant_rom[13], fpu_constant_rom[12], MPFR_RNDU); // 14: log10 (e) - mpfr_log10 (fpu_constant_rom[14], fpu_constant_rom[12], MPFR_RNDN); + mpfr_log10 (fpu_constant_rom[14], fpu_constant_rom[12], MPFR_RNDU); // 15: 0 mpfr_set_zero (fpu_constant_rom[15], 0); // 48: ln (2) - mpfr_set_ui (fpu_constant_rom[16], 2, MPFR_RNDN); - mpfr_log (fpu_constant_rom[16], fpu_constant_rom[16], MPFR_RNDN); + mpfr_const_log2 (fpu_constant_rom[16], MPFR_RNDN); // 49: ln (10) - mpfr_set_ui (fpu_constant_rom[17], 2, MPFR_RNDN); - mpfr_log10 (fpu_constant_rom[17], fpu_constant_rom[17], MPFR_RNDN); + mpfr_set_ui (fpu_constant_rom[17], 10, MPFR_RNDN); + mpfr_log (fpu_constant_rom[17], fpu_constant_rom[17], MPFR_RNDN); // 50 to 63: powers of 10 mpfr_set_ui (fpu_constant_rom[18], 1, MPFR_RNDN); - mpfr_set_ui (fpu_constant_rom[19], 10, MPFR_RNDN); - for (int i = 20; i < 31; i++) - mpfr_sqr (fpu_constant_rom[i], fpu_constant_rom[i - 1], MPFR_RNDN); - + for (int i = 19; i < 32; i++) + { + mpfr_set_ui (fpu_constant_rom[i], 1L << (i - 19) , MPFR_RNDN); + mpfr_exp10 (fpu_constant_rom[i], fpu_constant_rom[i], MPFR_RNDN); + } + fpu_inited = true; fpu_reset (); ++++++ nan-sign.patch ++++++ >From 789f038532fc23c1e0bfc0b6d4b37790425a39c3 Mon Sep 17 00:00:00 2001 From: Andreas Schwab <[email protected]> Date: Sat, 22 Aug 2015 13:28:40 +0200 Subject: [PATCH] Properly track sign bit of NaN in mpfr fpu emulator --- ChangeLog | 4 +++ src/uae_cpu/fpu/fpu_mpfr.cpp | 68 ++++++++++++++++++++++++++++++++++---------- src/uae_cpu/fpu/types.h | 1 + 3 files changed, 58 insertions(+), 15 deletions(-) Index: aranym-1.0.2/src/uae_cpu/fpu/fpu_mpfr.cpp =================================================================== --- aranym-1.0.2.orig/src/uae_cpu/fpu/fpu_mpfr.cpp +++ aranym-1.0.2/src/uae_cpu/fpu/fpu_mpfr.cpp @@ -112,10 +112,17 @@ get_cur_prec () #define DEFAULT_NAN_BITS 0xffffffffffffffffULL static void -set_nan (fpu_register ®, uae_u64 nan_bits) +set_nan (fpu_register ®, uae_u64 nan_bits, int nan_sign) { mpfr_set_nan (reg.f); reg.nan_bits = nan_bits; + reg.nan_sign = nan_sign; +} + +static void +set_nan (fpu_register ®) +{ + set_nan (reg, DEFAULT_NAN_BITS, 0); } static bool fpu_inited; @@ -189,7 +196,7 @@ fpu_reset () fpu.instruction_address = 0; for (int i = 0; i < 8; i++) - set_nan (fpu.registers[i], DEFAULT_NAN_BITS); + set_nan (fpu.registers[i]); } fpu_register::operator long double () @@ -267,7 +274,7 @@ set_from_single (fpu_register &value, ua { if (!(m & 0x400000)) cur_exceptions |= FPSR_EXCEPTION_SNAN; - set_nan (value, (uae_u64) (m | 0xc00000) << (32 + 8)); + set_nan (value, (uae_u64) (m | 0xc00000) << (32 + 8), s); } else mpfr_set_inf (value.f, 0); @@ -300,7 +307,7 @@ set_from_double (fpu_register &value, ua if (!(m & 0x80000)) cur_exceptions |= FPSR_EXCEPTION_SNAN; set_nan (value, (((uae_u64) (m | 0x180000) << (32 + 11)) - | ((uae_u64) words[1] << 11))); + | ((uae_u64) words[1] << 11)), s); } else mpfr_set_inf (value.f, 0); @@ -336,7 +343,7 @@ set_from_extended (fpu_register &value, cur_exceptions |= FPSR_EXCEPTION_SNAN; words[1] |= 0x40000000; } - set_nan (value, ((uae_u64) words[1] << 32) | words[2]); + set_nan (value, ((uae_u64) words[1] << 32) | words[2], s); } else mpfr_set_inf (value.f, 0); @@ -367,7 +374,8 @@ set_from_packed (fpu_register &value, ua { if ((words[1] & 0x40000000) == 0) cur_exceptions |= FPSR_EXCEPTION_SNAN; - set_nan (value, ((uae_u64) (words[1] | 0x40000000) << 32) | words[2]); + set_nan (value, ((uae_u64) (words[1] | 0x40000000) << 32) | words[2], + sm); } else mpfr_set_inf (value.f, 0); @@ -410,6 +418,7 @@ get_fp_value (uae_u32 opcode, uae_u32 ex { mpfr_set (value.f, fpu.registers[(extra >> 10) & 7].f, MPFR_RNDN); value.nan_bits = fpu.registers[(extra >> 10) & 7].nan_bits; + value.nan_sign = fpu.registers[(extra >> 10) & 7].nan_sign; /* Check for SNaN. */ if (mpfr_nan_p (value.f) && (value.nan_bits & (1ULL << 62)) == 0) { @@ -572,12 +581,13 @@ update_exceptions () } static void -set_fp_register (int reg, mpfr_t value, uae_u64 nan_bits, +set_fp_register (int reg, mpfr_t value, uae_u64 nan_bits, int nan_sign, int t, mpfr_rnd_t rnd, bool do_flags) { mpfr_subnormalize (value, t, rnd); mpfr_set (fpu.registers[reg].f, value, rnd); fpu.registers[reg].nan_bits = nan_bits; + fpu.registers[reg].nan_sign = nan_sign; if (do_flags) { uae_u32 flags = 0; @@ -594,6 +604,20 @@ set_fp_register (int reg, mpfr_t value, } } +static void +set_fp_register (int reg, mpfr_t value, int t, mpfr_rnd_t rnd, bool do_flags) +{ + set_fp_register (reg, value, DEFAULT_NAN_BITS, 0, t, rnd, do_flags); +} + +static void +set_fp_register (int reg, fpu_register &value, int t, mpfr_rnd_t rnd, + bool do_flags) +{ + set_fp_register (reg, value.f, value.nan_bits, value.nan_sign, t, rnd, + do_flags); +} + static uae_u32 extract_to_single (fpu_register &value) { @@ -619,6 +643,8 @@ extract_to_single (fpu_register &value) cur_exceptions |= FPSR_EXCEPTION_SNAN; } word = 0x7f800000 | ((value.nan_bits >> (32 + 8)) & 0x7fffff); + if (value.nan_sign) + word |= 0x80000000; } else if (mpfr_zero_p (single)) word = 0; @@ -679,6 +705,8 @@ extract_to_double (fpu_register &value, } words[0] = 0x7ff00000 | ((value.nan_bits >> (32 + 11)) & 0xfffff); words[1] = value.nan_bits >> 11; + if (value.nan_sign) + words[0] |= 0x80000000; } else if (mpfr_zero_p (dbl)) { @@ -730,6 +758,8 @@ extract_to_extended (fpu_register &value words[0] = 0x7fff0000; words[1] = value.nan_bits >> 32; words[2] = value.nan_bits; + if (value.nan_sign) + words[0] |= 0x80000000; } else if (mpfr_zero_p (value.f)) { @@ -781,6 +811,8 @@ extract_to_packed (fpu_register &value, words[0] = 0x7fff0000; words[1] = value.nan_bits >> 32; words[2] = value.nan_bits; + if (value.nan_sign) + words[0] |= 0x80000000; } else if (mpfr_zero_p (value.f)) { @@ -1471,6 +1503,7 @@ fpuop_general (uae_u32 opcode, uae_u32 e mpfr_init2 (value.f, prec); value.nan_bits = DEFAULT_NAN_BITS; + value.nan_sign = 0; mpfr_clear_flags (); set_format (prec); @@ -1486,7 +1519,7 @@ fpuop_general (uae_u32 opcode, uae_u32 e t = mpfr_set (value.f, fpu_constant_rom[rom_index - 32], rnd); else mpfr_set_zero (value.f, 0); - set_fp_register (reg, value.f, value.nan_bits, t, rnd, true); + set_fp_register (reg, value, t, rnd, true); } else if (extra & 0x40) { @@ -1580,7 +1613,7 @@ fpuop_general (uae_u32 opcode, uae_u32 e t = mpfr_sub (value2, fpu.registers[reg].f, value.f, rnd); break; } - set_fp_register (reg, value2, value.nan_bits, t, rnd, true); + set_fp_register (reg, value2, t, rnd, true); } else if ((extra & 0x30) == 0x30) { @@ -1605,8 +1638,8 @@ fpuop_general (uae_u32 opcode, uae_u32 e cur_exceptions |= FPSR_EXCEPTION_OPERR; t = mpfr_sin_cos (value.f, value2, value.f, rnd); if (reg2 != reg) - set_fp_register (reg2, value2, value.nan_bits, t >> 2, rnd, false); - set_fp_register (reg, value.f, value.nan_bits, t & 3, rnd, true); + set_fp_register (reg2, value2, t >> 2, rnd, false); + set_fp_register (reg, value, t & 3, rnd, true); } else if ((extra & 15) == 8) // FCMP @@ -1727,12 +1760,14 @@ fpuop_general (uae_u32 opcode, uae_u32 e break; case 24: // FABS t = mpfr_abs (value.f, value.f, rnd); + value.nan_sign = 0; break; case 25: // FCOSH t = mpfr_cosh (value.f, value.f, rnd); break; case 26: // FNEG t = mpfr_neg (value.f, value.f, rnd); + value.nan_sign = !value.nan_sign; break; case 28: // FACOS if (mpfr_cmpabs (value.f, FPU_CONSTANT_ONE) > 0) @@ -1820,7 +1855,7 @@ fpuop_general (uae_u32 opcode, uae_u32 e t = mpfr_sub (value.f, fpu.registers[reg].f, value.f, rnd); break; } - set_fp_register (reg, value.f, value.nan_bits, t, rnd, true); + set_fp_register (reg, value, t, rnd, true); } update_exceptions (); ret = true; Index: aranym-1.0.2/src/uae_cpu/fpu/types.h =================================================================== --- aranym-1.0.2.orig/src/uae_cpu/fpu/types.h +++ aranym-1.0.2/src/uae_cpu/fpu/types.h @@ -166,6 +166,7 @@ typedef uae_f32 fpu_single; struct fpu_register { mpfr_t f; uae_u64 nan_bits; + int nan_sign; operator long double (); }; ++++++ ncr5380-mode-reg.patch ++++++ >From 7af1cbfc5257d2c524ffe009790045d687c69fa5 Mon Sep 17 00:00:00 2001 From: Andreas Schwab <[email protected]> Date: Mon, 21 Mar 2016 00:51:59 +0100 Subject: [PATCH] emulate NCR5380 MODE register --- ChangeLog | 4 ++++ src/include/ncr5380.h | 1 + src/ncr5380.cpp | 4 +++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/include/ncr5380.h b/src/include/ncr5380.h index f8fc43b..55bb84d 100644 --- a/src/include/ncr5380.h +++ b/src/include/ncr5380.h @@ -33,6 +33,7 @@ class NCR5380 { uae_u8 hd_count; uae_u8 hd_initiator; + uae_u8 hd_mode; public: NCR5380(void); diff --git a/src/ncr5380.cpp b/src/ncr5380.cpp index 75d8f50..b3177f1 100644 --- a/src/ncr5380.cpp +++ b/src/ncr5380.cpp @@ -120,7 +120,7 @@ NCR5380::~NCR5380(void) void NCR5380::reset(void) { - hd_count = hd_status = hd_initiator = 0; + hd_count = hd_status = hd_initiator = hd_mode = 0; D(bug("ncr5380: reset")); } @@ -140,6 +140,7 @@ uae_u8 NCR5380::ReadData(uae_u16 control) data = hd_initiator = ICR_ARBITRATION_PROGRESS; break; case MODE_REG: + data = hd_mode; break; case TARGET_COMMAND_REG: break; @@ -172,6 +173,7 @@ void NCR5380::WriteData(uae_u16 control, uae_u8 data) hd_initiator = data; break; case MODE_REG: + hd_mode = data; break; case TARGET_COMMAND_REG: break; -- 2.7.4
