Download presentation
Presentation is loading. Please wait.
Published byShanna Skinner Modified over 8 years ago
2
SPARC Programming Model 24 “window” registers 8 global registers Control registers –Multiply step –PSR (status flags, etc.) –Trap Base register –Window Invalid Mask –Two program counters ( PC and nPC )
3
SPARC Program /* This program converts a temperature in Celcius to Fahrenheit. George Wells - 30 May 2003 */ offs = 32 /* Variables c and f are stored in %l0 and %l1 */.global main main: mov 24, %l0 ! Initialize c = 24 mov 9, %o0 ! 9 into %o0 for multiplication mov %l0, %o1 ! c into %o1 for multiplication call.mul ! Result in %o0 nop ! Delay slot mov 5, %o1 ! 5 into %o1 for division call.div ! Result in %o0 nop ! Delay slot
4
Example (cont.)... add %o0, offs, %l1 ! f = result + offs mov 1, %g1 ! Trap dispatch ta 0 ! Trap to system
5
Filling Delay Slots Not very efficient mov 9, %o0 ! 9 into %o0 for multiplication mov %l0, %o1 ! c into %o1 for multiplication call.mul ! Result in %o0 nop ! Delay slot mov 9, %o0 ! 9 into %o0 for multiplication call.mul ! Result in %o0 mov %l0, %o1 ! c into %o1 for multiplication Better!
6
Modified Program main: mov 24, %l0 ! Initialize c = 24 mov 9, %o0 ! 9 into %o0 for multiplication call.mul ! Result in %o0 mov %l0, %o1 ! c into %o1 for multiplication call.div ! Result in %o0 mov 5, %o1 ! 5 into %o1 for division...
8
3. Control Transfer Instructions Branching –Unconditional: ba bn –Conditional: bicc icc = Integer Condition Codes –Condition flags are set explicitly by arithmetic and logical operations E.g. addcc
9
Delayed Control Transfer Increases the efficiency of pipelining
10
Example /* This program converts temperatures between 10 and 20 in Celcius to Fahrenheit. George Wells - 30 May 2003 */ offs = 32 /* Variables c and f are stored in %l0 and %l1 */.global main main: mov 10, %l0 ! Initialize c = 10 loop: mov 9, %o0 ! 9 into %o0 for.mul call.mul ! Result in %o0 mov %l0, %o1 ! c into %o1 for.mul call.div ! Result in %o0 mov 5, %o1 ! 5 into %o1 for.div...
11
Example (cont.)... add %o0, offs, %l1 ! f = result + offs add %l0, 1, %l0 ! c++ cmp %l0, 21 ! c < 21 ? bl loop nop ! Delay slot mov 1, %g1 ! Trap dispatch ta 0 ! Trap to system
12
Annulled Branches Delay slot instruction is ignored –Conditional: if branch is not taken –Unconditional: always annulled
13
An Annulled Branch Java/C Code: while (a <= 17) a = a + b; Unoptimised assembler: ! Assumes a is in %l0 and b is in %l1 b test ! See if loop should execute nop ! Delay slot loop: add %l0, %l1, %l0! a = a + b test: cmp %l0, 17 ! a <= 17 ble loop ! If so branch back to start nop ! Delay slot
14
Optimised Assembler ! Assumes a is in %l0 and b is in %l1 b test ! See if loop should execute nop ! Delay slot loop: test: cmp %l0, 17 ! a <= 17 ble,a loop ! If so branch back to start add %l0, %l1, %l0 ! a = a + b
16
4. Logical and Arithmetic Operations Logical Operators –and or xor –xnor andn orn –+ cc to set the condition codes Shift Operators –sra srl sll
17
Arithmetic Operators Only addition and subtraction –add[x][cc] –sub[x][cc] [x] — with carry [cc] — to set the flags
18
Multiplication Long multiplication is supported by the “multiply step” instruction: –mulscc
19
Division Use the standard routines: –.div.rem –.udiv.urem
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.