\subsection{\index{puti}puti}

\index{put the value of a register to the special imm16}
PUT the value of a register to the special register Imm16.


\begin{tabular}{l}
  {\bf puti Imm16, r1}
\end{tabular}

~~~~~~
SPR(Imm16) = r1

~~~~~~
read r1 and puts its value in the Special Register defined by Imm16. The whole
register is read, 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(i) and Put(i) 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 Imm16 are not yet defined 
and symbolic names are used instead (like the opcodes).

~~~~~~
This version of PUT is a shorthand for the instruction that limits the
addressable range to the first 65536 Special Registers. The Core version (put) 
can address virtually ANY number of Special Registers through the use of a 
general register.

\begin{center}

\begin{tabular}{|l|l|l|l|l|}
 \hline
\multicolumn{1}{|r| }{size :
} & \multicolumn{1}{c| }{8
} & \multicolumn{1}{c| }{2
} & \multicolumn{1}{c| }{16
} & \multicolumn{1}{c| }{6
 } \\
 \hline
\multicolumn{1}{|r| }{bits :
} & {31 ~ ~ ~ ~ ~ ~ ~ ~ 24
} & {23 ~ ~ 22
} & {21 ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ 6
} & {5 ~ ~ ~ ~ ~ ~ 0
 } \\
 \hline
\multicolumn{1}{|r| }{function :
} & \multicolumn{1}{c| }{OP\_PUTI
} & \multicolumn{1}{c| }{0
} & \multicolumn{1}{c| }{Imm16
} & \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

