SPARC Programming Model for Temperature Conversion
Learn SPARC programming model with examples on temperature conversion using logical and arithmetic operations, control transfer instructions, and efficient coding practices.
SPARC Programming Model for Temperature Conversion
E N D
Presentation Transcript
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)
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
Example (cont.) ... add %o0, offs, %l1 ! f = result + offs mov 1, %g1! Trap dispatch ta 0 ! Trap to system
mov 9, %o0! 9 into %o0 for multiplication call .mul ! Result in %o0 mov %l0, %o1! c into %o1 for multiplication • Better! Filling Delay Slots mov 9, %o0! 9 into %o0 for multiplication mov %l0, %o1! c into %o1 for multiplication call .mul ! Result in %o0 nop ! Delay slot • Not very efficient
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 ...
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
Delayed Control Transfer • Increases the efficiency of pipelining
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 . . .
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
Annulled Branches • Delay slot instruction is ignored • Conditional: if branch is not taken • Unconditional: always annulled
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 An Annulled Branch • Java/C Code: while (a <= 17) a = a + b;
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
4. Logical and Arithmetic Operations • Logical Operators • and or xor • xnor andn orn • + cc to set the condition codes • Shift Operators • sra srl sll
Arithmetic Operators • Only addition and subtraction • add[x][cc] • sub[x][cc] • [x] — with carry • [cc] — to set the flags
Multiplication • Long multiplication is supported by the “multiply step” instruction: • mulscc
Division • Use the standard routines: • .div .rem • .udiv .urem