SPARC Architecture Nasties

Ancillary State Registers

Floating-Point State Register (FSR) - holds 4 sets of condition codes, exception status, trap enable, rounding direction, etc. Which means we need to rename it, but we need to copy parts of the previous state into it every time.

Y Register - Why ohh why did the make this register. Holds upper 32 bits for some multiple/div operations. For multiply the upper 32 bits of the result is placed in here and the entire result is placed in the dest register. For some divides the upper 32 bits are read from here and then afterwards the state is unpredictable. Depending on how common these depricated operations are, we may be able to flush after each one instead of renaming the register.

Condition Code Register (CCR) - 8 bit register 4 bits for 64bit CC, 4 bits for 32bit CC. We'll have to rename them and in the case of sparc, they are all written at once so we don't have to rename some of them.

Address space identifies (ASI) - Distinguishes between different address space, what kind of translation is done, is the MMU used, also used to map control register for the processor. 255 ASIs 128 of which are unprivileged, the rest required privilidge or hyperpriviledge. Accessing a ASI you don't have privileges for results in a trap. ASI register is used when you issue a load/store alternate instruction. This could be preformance critical and we may want to rename it.

TICK Register - Counts Strand? Ticks, starting at 0 when the processor boots. Upper most bit controls if unprivileged software can read the bit. Make instruction that writes serializing?

General State Register (GSR) - holds info for VIS (SIMD) instructions. lower 32 bits flags and such, upper 32 bits set by BMASK instruction and used by BSHUFFLE instruction. Low bits can probably serialize on being written, may want to rename upper bits?

SOFTINT - read current interrupts, write to cause an software interrupt, two bits to enable/disable timer interrupts based of TICK register. Make writes serializing? Has two pseudo registers that writes to them either set or clear bits in the actually register.

(LD|ST)TD - Load/Store twin double word instructions operate on 128bits loading/storing them from two adjacent registers in one atomic operation so you don't have to do any locking for a TLB update. yay.