\subsection{\index{put}put}

\index{put the value of a register into a special register}
PUT the value of a register into a special register.


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

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

~~~~~~
Read r1 and puts its value in the Special Register defined by r2. The whole
register is used, 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, if the SR number 
is not valid (supervisor or unimplemented) or if the put value does not 
correspond to the required format. 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\_PUT
} & \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

