Transcript Chapter 3

CSE 431
Computer Architecture
Fall 2008
Chapter 3: Arithmetic for
Computers
Mary Jane Irwin ( www.cse.psu.edu/~mji )
[Adapted from Computer Organization and Design, 4th Edition,
Patterson & Hennessy, © 2008, MK]
CSE431 Chapter 3.1
Irwin, PSU, 2008
Review: MIPS (RISC) Design Principles

Simplicity favors regularity




Smaller is faster




limited instruction set
limited number of registers in register file
limited number of addressing modes
Make the common case fast



fixed size instructions
small number of instruction formats
opcode always the first 6 bits
arithmetic operands from the register file (load-store machine)
allow instructions to contain immediate operands
Good design demands good compromises

three instruction formats
CSE431 Chapter 3.2
Irwin, PSU, 2008
Review: MIPS Addressing Modes Illustrated
1. Register addressing
op
rs
rt
rd
funct
Register
word operand
2. Base (displacement) addressing
op
rs
rt
offset
Memory
word or byte operand
base register
3. Immediate addressing
op
rs
rt
operand
4. PC-relative addressing
op
rs
rt
offset
Memory
branch destination instruction
Program Counter (PC)
5. Pseudo-direct addressing
op
Memory
jump address
||
jump destination instruction
Program Counter (PC)
CSE431 Chapter 3.3
Irwin, PSU, 2008
Number Representations

32-bit signed numbers (2’s complement):
0000 0000 0000 0000 0000 0000 0000 0000two = 0ten
0000 0000 0000 0000 0000 0000 0000 0001two = + 1ten
...
0111
0111
1000
1000
...
MSB
1111
1111
0000
0000
1111
1111
0000
0000
1111
1111
0000
0000
1111
1111
0000
0000
1111
1111
0000
0000
1111
1111
0000
0000
1110two
1111two
0000two
0001two
=
=
=
=
+
+
–
–
maxint
2,147,483,646ten
2,147,483,647ten
2,147,483,648ten
2,147,483,647ten
1111 1111 1111 1111 1111 1111 1111 1110two = – 2ten
1111 1111 1111 1111 1111 1111 1111 1111two = – 1ten
minint
LSB

Converting <32-bit values into 32-bit values

copy the most significant bit (the sign bit) into the “empty” bits
0010 -> 0000 0010
1010 -> 1111 1010

sign extend
CSE431 Chapter 3.4
versus
zero extend (lb vs. lbu)
Irwin, PSU, 2008
MIPS Arithmetic Logic Unit (ALU)

zero ovf
Must support the Arithmetic/Logic
operations of the ISA
add, addi, addiu, addu
1
1
A
32
sub, subu
ALU
mult, multu, div, divu
sqrt
result
32
B
32
and, andi, nor, or, ori, xor, xori
4
m (operation)
beq, bne, slt, slti, sltiu, sltu

With special handling for

sign extend – addi, addiu, slti, sltiu

zero extend – andi, ori, xori

overflow detection – add, addi, sub
CSE431 Chapter 3.5
Irwin, PSU, 2008
Dealing with Overflow

Overflow occurs when the result of an operation cannot
be represented in 32-bits, i.e., when the sign bit contains
a value bit of the result and not the proper sign bit


When adding operands with different signs or when subtracting
operands with the same sign, overflow can never occur
Operation
Operand A
Operand B
Result indicating
overflow
A+B
≥0
≥0
<0
A+B
<0
<0
≥0
A-B
≥0
<0
<0
A-B
<0
≥0
≥0
MIPS signals overflow with an exception (aka interrupt) –
an unscheduled procedure call where the EPC contains
the address of the instruction that caused the exception
CSE431 Chapter 3.6
Irwin, PSU, 2008
op
add/subt
A0
A MIPS ALU Implementation
result0
Zero detect (slt,
slti, sltiu, sltu,
beq, bne)

B0
+
less
A1
result1
...
B1
0
+
less
. . .
+
less
Enable overflow bit
setting for signed
arithmetic (add, addi,
sub)

A31
B31
0
zero
result31
ovf
set
CSE431 Chapter 3.7
Irwin, PSU, 2008
But What about Performance?

Critical path of n-bit ripple-carry adder is n*CP
CarryIn0
A0
B0
A1
B1
A2
B2
A3
B3
1-bit
result0
ALU
CarryOut0
CarryIn1
1-bit
result1
ALU
CarryOut1
CarryIn2
1-bit
result2
ALU
CarryOut2
CarryIn3
1-bit
ALU
result3
CarryOut3

Design trick – throw hardware at it (Carry Lookahead)
CSE431 Chapter 3.8
Irwin, PSU, 2008
Multiply

Binary multiplication is just a bunch of right shifts and
adds
n
multiplicand
multiplier
partial
product
array
n
can be formed in parallel
and added in parallel for
faster multiplication
double precision product
2n
CSE431 Chapter 3.9
Irwin, PSU, 2008
Add and Right Shift Multiplier Hardware
0110
=6
multiplicand
add
32-bit ALU
product
shift
right
multiplier
add
add
add
add
CSE431 Chapter 3.11
0000
0110
0011
0011
0001
0111
0011
0011
0001
0101
0101
0010
0010
1001
1001
1100
1100
1110
Control
=5
= 30
Irwin, PSU, 2008
MIPS Multiply Instruction

Multiply (mult and multu) produces a double
precision product
mult
$s0, $s1
0



16
# hi||lo = $s0 * $s1
17
0
0
0x18
Low-order word of the product is left in processor register lo
and the high-order word is left in register hi
Instructions mfhi rd and mflo rd are provided to move
the product to (user accessible) registers in the register file
Multiplies are usually done by fast, dedicated
hardware and are much more complex (and slower)
than adders
CSE431 Chapter 3.12
Irwin, PSU, 2008
Fast Multiplication Hardware

Can build a faster multiplier by using a parallel tree of
adders with one 32-bit adder for each bit of the multiplier at
the base
‘ier *’icand
‘ier7*’icand
‘ier30*’icand
32-bit ALU
...
33-bit ALU
‘ier5*’icand
‘ier3*’icand
‘ier6*’icand
‘ier4*’icand
‘ier2*’icand
32-bit ALU
...
32-bit ALU
32-bit ALU
33-bit ALU
...
1
‘ier0*’icand
32-bit ALU
33-bit ALU
36-bit ALU
43-bit ALU
59-bit ALU
product4
product3
product2
product1
product0
CSE431 Chapter 3.13
product63 . . . product5
Irwin, PSU, 2008
Division

Division is just a bunch of quotient digit guesses and left
shifts and subtracts
dividend = quotient x divisor + remainder
n
quotient
n
0 0 0
dividend
divisor
0
partial
remainder
array
0
0
remainder
n
CSE431 Chapter 3.14
Irwin, PSU, 2008
Left Shift and Subtract Division Hardware
0010
=2
divisor
subtract
32-bit ALU
dividend
remainder
sub
sub
sub
sub
CSE431 Chapter 3.16
0000
0000
1110
0000
0001
1111
0001
0011
0001
0010
0000
quotient
shift
left
Control
0110 =6
1100
1100
rem neg, so ‘ient bit = 0
1100
restore remainder
1000
1100
rem neg, so ‘ient bit = 0
1000
restore remainder
0000
rem pos, so ‘ient bit = 1
0001
0010
rem pos, so ‘ient bit = 1
0011
= 3 with 0 remainder
Irwin, PSU, 2008
MIPS Divide Instruction

Divide (div and divu) generates the reminder in hi
and the quotient in lo
div
$s0, $s1
# lo = $s0 / $s1
# hi = $s0 mod $s1
0


16
17
0
0
0x1A
Instructions mfhi rd and mflo rd are provided to move
the quotient and reminder to (user accessible) registers in the
register file
As with multiply, divide ignores overflow so software
must determine if the quotient is too large. Software
must also check the divisor to avoid division by 0.
CSE431 Chapter 3.17
Irwin, PSU, 2008
Representing Big (and Small) Numbers
What if we want to encode the approx. age of the earth?

4,600,000,000
or
4.6 x 109
or the weight in kg of one a.m.u. (atomic mass unit)
0.0000000000000000000000000166
or 1.6 x 10-27
There is no way we can encode either of the above in a
32-bit integer.

Floating point representation

(-1)sign x F x 2E
Still have to fit everything in 32 bits (single precision)
s E (exponent)
1 bit
8 bits
F (fraction)
23 bits

The base (2, not 10) is hardwired in the design of the FPALU

More bits in the fraction (F) or the exponent (E) is a trade-off
between precision (accuracy of the number) and range (size of
the number)
CSE431 Chapter 3.18
Irwin, PSU, 2008
Exception Events in Floating Point

Overflow (floating point) happens when a positive
exponent becomes too large to fit in the exponent field

Underflow (floating point) happens when a negative
exponent becomes too large to fit in the exponent field
-∞
+∞
- largestE -smallestF
+ largestE -largestF

- largestE +smallestF
+ largestE +largestF
One way to reduce the chance of underflow or overflow
is to offer another format that has a larger exponent field

Double precision – takes two MIPS words
s E (exponent)
1 bit
F (fraction)
11 bits
20 bits
F (fraction continued)
32 bits
CSE431 Chapter 3.19
Irwin, PSU, 2008
IEEE 754 FP Standard

Most (all?) computers these days conform to the IEEE 754
floating point standard
(-1)sign x (1+F) x 2E-bias




Formats for both single and double precision
F is stored in normalized format where the msb in F is 1 (so there
is no need to store it!) – called the hidden bit
To simplify sorting FP numbers, E comes before F in the word and
E is represented in excess (biased) notation where the bias is -127
(-1023 for double precision) so the most negative is 00000001 =
21-127 = 2-126 and the most positive is 11111110 = 2254-127 = 2+127
Examples (in normalized format)





Smallest+: 0 00000001 1.00000000000000000000000 = 1 x 21-127
Zero:
0 00000000 00000000000000000000000 = true 0
Largest+: 0 11111110 1.11111111111111111111111 =
2-2-23 x 2254-127
1.02 x 2-1 = 0 01111110 1.00000000000000000000000
0.7510 x 24 = 0 10000010 1.10000000000000000000000
CSE431 Chapter 3.21
Irwin, PSU, 2008
IEEE 754 FP Standard Encoding

Special encodings are used to represent unusual events



± infinity for division by zero
NAN (not a number) for the results of invalid operations such as
0/0
True zero is the bit string all zero
Single Precision
E (8)
F (23)
0000 0000
0
0000 0000
nonzero
0111 1111 to anything
+127,-126
1111 1111
+0
1111 1111
nonzero
CSE431 Chapter 3.22
Double Precision
Object
Represented
E (11)
F (52)
0000 … 0000
0
true zero (0)
0000 … 0000 nonzero ± denormalized
number
0111 …1111 to anything ± floating point
+1023,-1022
number
1111 … 1111
-0
± infinity
1111 … 1111
nonzero not a number
(NaN)
Irwin, PSU, 2008
Support for Accurate Arithmetic

IEEE 754 FP rounding modes





Always round up (toward +∞)
Always round down (toward -∞)
Truncate
Round to nearest even (when the Guard || Round || Sticky are
100) – always creates a 0 in the least significant (kept) bit of F
Rounding (except for truncation) requires the hardware to
include extra F bits during calculations



Guard bit – used to provide one F bit when shifting left to normalize
a result (e.g., when normalizing F after division or subtraction)
Round bit – used to improve rounding accuracy
Sticky bit – used to support Round to nearest even; is set to a 1
whenever a 1 bit shifts (right) through it (e.g., when aligning F
during addition/subtraction)
F = 1 . xxxxxxxxxxxxxxxxxxxxxxx G R S
CSE431 Chapter 3.23
Irwin, PSU, 2008
Floating Point Addition

Addition (and subtraction)
(F1  2E1) + (F2  2E2) = F3  2E3

Step 0: Restore the hidden bit in F1 and in F2

Step 1: Align fractions by right shifting F2 by E1 - E2 positions
(assuming E1  E2) keeping track of (three of) the bits shifted out
in G R and S

Step 2: Add the resulting F2 to F1 to form F3

Step 3: Normalize F3 (so it is in the form 1.XXXXX …)
- If F1 and F2 have the same sign  F3 [1,4)  1 bit right shift F3
and increment E3 (check for overflow)
- If F1 and F2 have different signs  F3 may require many left shifts
each time decrementing E3 (check for underflow)

Step 4: Round F3 and possibly normalize F3 again

Step 5: Rehide the most significant bit of F3 before storing the
result
CSE431 Chapter 3.24
Irwin, PSU, 2008
Floating Point Addition Example

Add
(0.5 = 1.0000  2-1) + (-0.4375 = -1.1100 2-2)
Hidden bits restored in the representation above
Shift significand with the smaller exponent (1.1100) right
until its exponent matches the larger exponent (so once)

Step 0:

Step 1:

Step 2:

Step 3: Normalize the sum, checking for exponent over/underflow
0.001 x 2-1 = 0.010 x 2-2 = .. = 1.000 x 2-4

Step 4: The sum is already rounded, so we’re done

Step 5: Rehide the hidden bit before storing
CSE431 Chapter 3.26
Add significands
1.0000 + (-0.111) = 1.0000 – 0.111 = 0.001
Irwin, PSU, 2008
Floating Point Multiplication

Multiplication
(F1  2E1) x (F2  2E2) = F3  2E3

Step 0: Restore the hidden bit in F1 and in F2

Step 1: Add the two (biased) exponents and subtract the bias
from the sum, so E1 + E2 – 127 = E3
also determine the sign of the product (which depends on the
sign of the operands (most significant bits))

Step 2: Multiply F1 by F2 to form a double precision F3

Step 3: Normalize F3 (so it is in the form 1.XXXXX …)
- Since F1 and F2 come in normalized  F3 [1,4)  1 bit right shift
F3 and increment E3
- Check for overflow/underflow

Step 4: Round F3 and possibly normalize F3 again

Step 5: Rehide the most significant bit of F3 before storing the
result
CSE431 Chapter 3.27
Irwin, PSU, 2008
Floating Point Multiplication Example

Multiply
(0.5 = 1.0000  2-1) x (-0.4375 = -1.1100 2-2)

Step 0: Hidden bits restored in the representation above

Step 1: Add the exponents (not in bias would be -1 + (-2) = -3
and in bias would be (-1+127) + (-2+127) – 127 = (-1
-2) + (127+127-127) = -3 + 127 = 124

Step 2: Multiply the significands
1.0000 x 1.110 = 1.110000

Step 3: Normalized the product, checking for exp over/underflow
1.110000 x 2-3 is already normalized

Step 4: The product is already rounded, so we’re done

Step 5: Rehide the hidden bit before storing
CSE431 Chapter 3.29
Irwin, PSU, 2008
MIPS Floating Point Instructions


MIPS has a separate Floating Point Register File
($f0, $f1, …, $f31) (whose registers are used in
pairs for double precision values) with special instructions
to load to and store from them
lwcl
$f1,54($s2)
#$f1 = Memory[$s2+54]
swcl
$f1,58($s4)
#Memory[$s4+58] = $f1
And supports IEEE 754 single
add.s $f2,$f4,$f6 #$f2 = $f4 + $f6
and double precision operations
add.d $f2,$f4,$f6 #$f2||$f3 =
$f4||$f5 + $f6||$f7
similarly for sub.s, sub.d, mul.s, mul.d, div.s,
div.d
CSE431 Chapter 3.30
Irwin, PSU, 2008
MIPS Floating Point Instructions, Con’t

And floating point single precision comparison operations
c.x.s $f2,$f4
#if($f2 < $f4) cond=1;
else cond=0
where x may be eq, neq, lt, le, gt, ge
and double precision comparison operations
c.x.d $f2,$f4
#$f2||$f3 < $f4||$f5
cond=1; else cond=0

And floating point branch operations
bclt
25
#if(cond==1)
go to PC+4+25
bclf
25
#if(cond==0)
go to PC+4+25
CSE431 Chapter 3.31
Irwin, PSU, 2008
Frequency of Common MIPS Instructions

Only included those with >3% and >1%
SPECint
SPECfp
SPECint
SPECfp
addu
5.2%
3.5%
add.d
0.0%
10.6%
addiu
9.0%
7.2%
sub.d
0.0%
4.9%
or
4.0%
1.2%
mul.d
0.0%
15.0%
sll
4.4%
1.9%
add.s
0.0%
1.5%
lui
3.3%
0.5%
sub.s
0.0%
1.8%
lw
18.6%
5.8%
mul.s
0.0%
2.4%
sw
7.6%
2.0%
l.d
0.0%
17.5%
lbu
3.7%
0.1%
s.d
0.0%
4.9%
beq
8.6%
2.2%
l.s
0.0%
4.2%
bne
8.4%
1.4%
s.s
0.0%
1.1%
slt
9.9%
2.3%
lhu
1.3%
0.0%
slti
3.1%
0.3%
sltu
3.4%
0.8%
CSE431 Chapter 3.32
Irwin, PSU, 2008
Next Lecture and Reminders

Next lecture

MIPS single cycle datapath design
- Reading assignment – PH, Chapter 5

TA will run a unix + simplescalar evening tutorial
session in the lab next week in the evening, watch
Angel for details

Reminders



HW1 due September 9th
HW2 will come out Sept 9th (our first with a SimpleScalar
question)
First evening midterm exam scheduled
- Wednesday, October 8th , 20:15 to 22:15, Location 262 Willard
- Please let me know ASAP (via email) if you have a conflict
CSE431 Chapter 3.33
Irwin, PSU, 2008