\subsection{\index{get}get}

\index{get the value of a special register and write it to a register}
GET the value of a special register and write it to a register.


\begin{tabular}{l}
  {\bf get r2, r1}
\end{tabular}

~~~~~~
r1 = SPR(r2)

~~~~~~
Get the Special Register at index r2 and put its content in register
r1. The whole register gets dumped, there is no size flag.

~~~~~~
Since protection is enforced through this kind of instruction, it may raise
different exceptions if the access rights are not respected or if the SR
number is not valid (supervisor or unimplemented). This is highly 
implementation dependent but a common and flexible definition will appear 
soon. Please refer to the manual.

~~~~~~
Get and Put are atomic serializing'' instructions that block the pipeline at
the decoding stage until it is finished or the completion is safe. They are 
used to configure the CPU and the programming environment during the program 
start for example. The values of r2 are not yet defined and symbolic names are 
used instead (like the opcodes).

\begin{center}

\begin{tabular}{|l|l|l|l|l|}
 \hline
\multicolumn{1}{|r| }{size :
} & \multicolumn{1}{c| }{8
} & \multicolumn{1}{c| }{12
} & \multicolumn{1}{c| }{6
} & \multicolumn{1}{c| }{6
 } \\
 \hline
\multicolumn{1}{|r| }{bits :
} & {31 ~ ~ ~ ~ ~ ~ ~ ~ 24
} & {23 ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ 12
} & {11 ~ ~ ~ ~ ~ ~ 6
} & {5 ~ ~ ~ ~ ~ ~ 0
 } \\
 \hline
\multicolumn{1}{|r| }{function :
} & \multicolumn{1}{c| }{OP\_GET
} & \multicolumn{1}{c| }{0
} & \multicolumn{1}{c| }{Reg 2
} & \multicolumn{1}{c| }{Reg 1
}
\\ \hline

\end{tabular}

~

{\bf Performance (FC0 only) :}
\end{center}

{\em Execution Unit :} none\\
{\em Latency :} unknown\\
{\em Throughput :} unknown (usually several cycles)\\

~

\pagebreak


