SPRUI04F july 2015 – april 2023
Declare Circular Registers
.circ symbol1 /register1 [, symbol2 lregister2 , ...]
The .circ directive assigns a symbolic register name to a machine register and declares the symbolic register as available for circular addressing. The compiler then assigns the variable to the register and ensures that all code transformations are safe in this situation. You must insert setup/teardown code for circular addressing.
symbol | A valid symbol name to be assigned to the register. The variable is up to 128 characters long and must begin with a letter. Remaining characters of the variable can be a combination of alphanumeric characters, the underscore (_), and the dollar sign ($). | |
register | Name of the actual register to be assigned a variable. |
The compiler assumes that it is safe to speculate any load using an explicitly declared circular addressing variable as the address pointer and may exploit this assumption to perform optimizations.
When a symbol is declared with the .circ directive, it is not necessary to declare that symbol with the .reg directive.
The .circ directive is equivalent to using .map with a circular declaration.
Here the symbolic name Ri is assigned to actual machine register Mi and Ri is declared as potentially being used for circular addressing.
.CIRC R1/M1, R2/M2 ...