aboutsummaryrefslogtreecommitdiff
path: root/src/rv64.tex
diff options
context:
space:
mode:
Diffstat (limited to 'src/rv64.tex')
-rw-r--r--src/rv64.tex19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/rv64.tex b/src/rv64.tex
index e4bfb3c..0aaf127 100644
--- a/src/rv64.tex
+++ b/src/rv64.tex
@@ -17,7 +17,7 @@ Additional instruction variants are provided to manipulate 32-bit
values in RV64I, indicated by a `W' suffix to the opcode. These
``*W'' instructions ignore the upper 32 bits of their inputs and
always produce 32-bit signed values, i.e. bits XLEN-1 through 31 are
-equal. They cause an illegal instruction exception in RV32I.
+equal.
\begin{commentary}
The compiler and calling convention maintain an invariant that all 32-bit
@@ -56,7 +56,7 @@ I-immediate[11:0] & src & ADDIW & dest & OP-IMM-32 \\
\end{tabular}
\end{center}
-ADDIW is an RV64I-only instruction that adds the sign-extended 12-bit
+ADDIW is an RV64I instruction that adds the sign-extended 12-bit
immediate to register {\em rs1} and produces the proper sign-extension
of a 32-bit result in {\em rd}. Overflows are ignored and the result
is the low 32 bits of the result sign-extended to 64 bits. Note,
@@ -101,14 +101,18 @@ shifted is in {\em rs1}, and the shift amount is encoded in the lower
encoded in bit 30. SLLI is a logical left shift (zeros are shifted
into the lower bits); SRLI is a logical right shift (zeros are shifted
into the upper bits); and SRAI is an arithmetic right shift (the
-original sign bit is copied into the vacated upper bits). For RV32I,
-SLLI, SRLI, and SRAI generate an illegal instruction exception if
-$imm[5] \neq 0$.
+original sign bit is copied into the vacated upper bits).
SLLIW, SRLIW, and SRAIW are RV64I-only instructions that are
analogously defined but operate on 32-bit values and produce
-signed 32-bit results. SLLIW, SRLIW, and SRAIW generate an illegal
-instruction exception if $imm[5] \neq 0$.
+signed 32-bit results. SLLIW, SRLIW, and SRAIW encodings
+with $imm[5] \neq 0$ are reserved.
+
+\begin{commentary}
+ Previously, SLLIW, SRLIW, and SRAIW with imm[5]=0 were defined to
+ cause illegal instruction exceptions, whereas now they are marked as
+ reserved. This is a backwards-compatible change.
+\end{commentary}
\vspace{-0.2in}
\begin{center}
@@ -128,7 +132,6 @@ U-immediate[31:12] & dest & AUIPC
\end{tabular}
\end{center}
-
LUI (load upper immediate) uses the same opcode as RV32I. LUI places
the 20-bit U-immediate into bits 31--12 of register {\em rd} and
places zero in the lowest 12 bits. The 32-bit result is