/* The common simulator framework for GDB, the GNU Debugger.
- Copyright 2002, 2007 Free Software Foundation, Inc.
+ Copyright 2002-2013 Free Software Foundation, Inc.
Contributed by Andrew Cagney and Red Hat.
if (ALU16_HAD_OVERFLOW) \
sim_engine_halt (...); \
(RES) = ALU16_OVERFLOW_RESULT
-
+
ALU*_HAD_CARRY_BORROW: Returns a nonzero value if unsigned
overflow or underflow (also referred to as carry and borrow)
occurred.
#define ALU64_END(RES) \
State.carry = ALU64_HAD_CARRY_BORROW; \
(RES) = ALU64_CARRY_BORROW_RESULT
-
-
+
+
Addition:
ALU*_ADD(VAL): Add VAL to the ALU accumulator. Record any
/* Twos complement arithmetic - addition/subtraction - carry/borrow
(or you thought you knew the answer to 0-0)
-
+
Notation and Properties:
UMAXn: The upper bound of an unsigned N bit value (the lower
bound is always zero).
- Un: UMAXn + 1. Unsigned arithmetic is computed `modulo (Un)'.
+ Un: UMAXn + 1. Unsigned arithmetic is computed `modulo (Un)'.
X[p]: Is bit P of X. X[0] denotes the least significant bit.
The two N bit operands are sign extended to M>N bits and then
added. Overflow occurs when SIGN_BIT<n> and SIGN_BIT<m> do not
match.
-
+
Rm = (SEXTn (Xn) + SEXTn (Yn))
V = MSBn ((Rm >> (M - N)) ^ Rm)
The following table lists the output for all given inputs into a
full-adder.
-
+
I X Y R | C
------------+---
0 0 0 0 | 0
XY\R 0 1
+-------
- 00 | 0 0
+ 00 | 0 0
01 | 1 0
11 | 1 1
10 | 1 0
Verifying:
- I X Y R | C | X&Y X&~R Y&~R
+ I X Y R | C | X&Y X&~R Y&~R
------------+---+---------------
0 0 0 0 | 0 | 0 0 0
0 0 1 1 | 0 | 0 0 0
#define ALU32_AND(VAL) \
do { \
alu32_r &= (VAL); \
- alu32_r = 0; \
+ alu32_c = 0; \
alu32_v = 0; \
} while (0)
#define ALU64_AND(VAL) \
do { \
alu64_r &= (VAL); \
- alu64_r = 0; \
+ alu64_c = 0; \
alu64_v = 0; \
} while (0)