3b2: Fix critical MAU issues

- A bug in the Square Root implementation could lead to
  an infinite loop.

- Incorrect rounding was used when MAU destination register
  was single or double word.

- Fix Coverity-discovered issues.
This commit is contained in:
Seth Morabito 2019-07-19 16:33:23 -07:00
parent c1d9db8be7
commit 292898e9f4
2 changed files with 382 additions and 266 deletions

File diff suppressed because it is too large Load diff

View file

@ -282,6 +282,14 @@ typedef enum {
M_OP_NONE M_OP_NONE
} op_spec; } op_spec;
/*
* 128-bit value
*/
typedef struct {
t_uint64 low;
t_uint64 high;
} t_mau_128;
/* /*
* Not-a-Number Type * Not-a-Number Type
*/ */
@ -289,7 +297,7 @@ typedef struct {
t_bool sign; t_bool sign;
t_uint64 high; t_uint64 high;
t_uint64 low; t_uint64 low;
} NAN_T; } T_NAN;
/* /*
* Extended Precision (80 bits). * Extended Precision (80 bits).