1 / 20

SPARC Programming Model

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.

orpah
Download Presentation

SPARC Programming Model

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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)

  2. 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

  3. Example (cont.) ... add %o0, offs, %l1 ! f = result + offs mov 1, %g1! Trap dispatch ta 0 ! Trap to system

  4. 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

  5. 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 ...

  6. 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

  7. Delayed Control Transfer • Increases the efficiency of pipelining

  8. 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 . . .

  9. 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

  10. Annulled Branches • Delay slot instruction is ignored • Conditional: if branch is not taken • Unconditional: always annulled

  11. 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;

  12. 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

  13. 4. Logical and Arithmetic Operations • Logical Operators • and or xor • xnor andn orn • + cc to set the condition codes • Shift Operators • sra srl sll

  14. Arithmetic Operators • Only addition and subtraction • add[x][cc] • sub[x][cc] • [x] — with carry • [cc] — to set the flags

  15. Multiplication • Long multiplication is supported by the “multiply step” instruction: • mulscc

  16. Division • Use the standard routines: • .div .rem • .udiv .urem

More Related