<<

ADMIN

• Read pages 211-215 (MIPS floating point instructions) • Read 3.9

IC220 Set #10: More (Chapter 3)

1 2

An Arithmetic Unit (ALU) A simple 32- ALU

C arryIn O pe ratio n The ALU is the ‘brawn’ of the computer a0 arry In R e su lt0 A LU 0 b0 • What does it do? C arry O u t

a1 C arry In R e su lt1 A LU 1 b1 operation C arry O u t

• How wide does it need to be? a C arry In R e su lt2 A LU 2 b2 b C arry O u t • What outputs do we need for MIPS?

a3 1 C arry In R e su lt31 A LU 3 1 b3 1 3 4 ALU Control and Symbol

• More complicated than – accomplished via shifting and addition • Example: grade-school

0010 (multiplicand) ALU Control Lines __x_1011 (multiplier) 0000 AND 0001 OR 0010 Add 0110 Subtract 0111 Set on less than 1100 NOR • Multiply m * n , How wide (in bits) should the product be?

5 6

Multiplication: Simple

Multiplicand Shift left 64bits

Multiplier 64-bit ALU Shift right 32bits

Product Control test Write 64bits 7 Using Multiplication Floating Point

• Product requires 64 bits • We need a way to represent – Use dedicated registers – numbers with fractions, e.g., 3.1416 – HI – more significant part of product – – LO – less significant part of product very small numbers, e.g., .000000001 • MIPS instructions – very large numbers, e.g., 3.15576  1023 mult $s2, $s3 • Representation: multu $s2, $s3 mfhi $t0 – sign, exponent, significand: mflo $t1 • (–1)sign  significand  2exponent(some power) • Division – Significand always in normalized form: – Can perform with same hardware! (see ) div $s2, $s3 Lo = $s2 / $s3 • Yes: Hi = $s2 mod $s3 • No: divu $s2, $s3 – more bits for significand gives more – more bits for exponent increases 9 10

IEEE754 Standard IEEE 754 – Optimizations

Single Precision (float): 8 bit exponent, 23 bit significand

31 30 29 28 27 26 25 24 23 22 21 20 . . . 9 8 7 6 5 4 3 2 1 0 • Significand S Exponent (8 Bits) Significand (23 bits) – What’s the first bit?

– So…

• Exponent is “biased” to make sorting easier Double Precision (double): 11 bit exponent, 52 bit significand – Smallest exponent represented by:

31 30 29 28 . . . 21 20 19 18 17 . . . 9 8 7 6 5 4 3 2 1 0 – Largest exponent represented by: S Exponent (11 Bits) Significand (20 bits) – Bias values • 127 for single precision 31 30 29 28 . . . 21 20 19 18 17 . . . 9 8 7 6 5 4 3 2 1 0 • 1023 for double precision More Significand (32 more bits)

• Summary: (–1)sign  (1+significand)  2exponent – bias 11 12 Example: Example continued:

Represent -9.7510 in binary single precision: • -9.7510 =

• Represent -9.7510 in binary, single precision form:

• Strategy – Transfer into binary notation (fraction) – Normalize significand (if necessary) • Compute the exponent: – Compute exponent – Remember (2exponent – bias) • (Real exponent) = (Stored exponent) - bias – Bias = 127 – Apply results to formula (–1)sign  (1+significand)  2exponent – bias • Formula(–1)sign  (1+significand)  2exponent – bias

31 30 29 28 27 26 25 24 23 22 21 20 . . . 9 8 7 6 5 4 3 2 1 0 13

Floating Point Complexities MIPS Floating Point

• Operations are somewhat more complicated (see text) • Floating point registers • In addition to overflow we can have “underflow” $f0, $f1, $f2, …., $f31 Used in pairs for double precision (f0, f1) (f2, f3), … • Accuracy can be a big problem $f0 not always zero – IEEE 754 keeps two extra bits, guard and round – four rounding modes • Register conventions: – positive divided by zero yields “infinity” – Function arguments passed in – zero divide by zero yields “not a number” – Function return value stored in – other complexities – Where are addresses (e.g. for arrays) passed? • Implementing the standard can be tricky • Load and store: lwc1 $f2, 0($sp) swc1 $f4, 4($t2)

15 16 MIPS FP Arithmetic MIPS FP

• Addition, :add.s, add.d, sub.s, sub.d • Pattern of a comparison: c.___.s (or c.___.d) c.lt.s $f2, $f3 add.s $f1, $f2, $f3 c.ge.d $f4, $f6 add.d $f2, $f4, $f6 • Where does the result go?

• Multiplication, division: mul.s, mul.d, div.s, div.d • Branching: mul.s $f2, $f3, $f4 bc1t label10 div.s $f2, $f4, $f6 bc1f label20

17 18

Example #1 Example #2 EX: 3-21 …

• Convert the following C code to MIPS: • Convert the following C code to MIPS: float max (float A, float B) { void setArray (float F[], int index, if (A <= B) return A; float val) { else return B; F[index] = val; } }

19 20 Chapter Three Summary Chapter Goals

• Computer arithmetic is constrained by limited precision • Introduce 2’s complement numbers • Bit patterns have no inherent meaning but standards do exist – Addition and subtraction – two’s complement – IEEE 754 floating point – Sketch multiplication, division • Computer instructions determine “meaning” of the bit patterns • Overview of ALU () • Performance and accuracy are important so there are many complexities in real (i.e., and implementation). • Floating point numbers – Representation – Arithmetic operations • We are (almost!) ready to move on (and implement the ) – MIPS instructions

21 22