diff --git a/book/insnformats.tex b/book/insnformats.tex index 40cdc8e..6892a6b 100644 --- a/book/insnformats.tex +++ b/book/insnformats.tex @@ -457,10 +457,10 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % #1 the binary encoding -\newcommand\DrawInsnTypeRShiftTikz[1]{ +\newcommand\DrawInsnTypeIShiftTikz[1]{ \BeginTikzPicture \StrLen{#1}[\numchars] - \DrawInsnBitstring{\numchars}{#1}{\hyperref[insnformat:rtype]{R-type}} + \DrawInsnBitstring{\numchars}{#1}{\hyperref[insnformat:rtype]{I-type}} \DrawInsnBoxSeg{\numchars}{31}{25}{funct7} \DrawInsnBoxSeg{\numchars}{24}{20}{shamt} \DrawInsnBoxSeg{\numchars}{19}{15}{rs1} @@ -474,7 +474,7 @@ \newcommand\DrawInsnTypeRShiftPicture[2]{ \InsnStatement{#1}\\ - \DrawInsnTypeRShiftTikz{#2} + \DrawInsnTypeIShiftTikz{#2} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -635,7 +635,7 @@ \newcommand\TDrawInsnTypeRShiftPicture[5]{ \TInsnStatement{#1}{#2}{#3}{#4}\\ - \DrawInsnTypeRShiftTikz{#5} + \DrawInsnTypeIShiftTikz{#5} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -783,7 +783,7 @@ \begin{scope}[shift={(0,-3)}]\DrawInsnBoxLabelsStype\end{scope} \begin{scope}[shift={(0,-4.5)}]\DrawInsnBoxLabelsBtype\end{scope} \begin{scope}[shift={(0,-6)}]\DrawInsnBoxLabelsUtype\end{scope} - \begin{scope}[shift={(0,-7.5)}]\DrawInsnBoxLabelsJtype\end{scope} + \begin{scope}[shift={(0,-7.5)}]\DrawInsnBoxLabelsJtype\DrawHexMarkersRel{32}\end{scope} \begin{scope}[shift={(0,1.5)}] \DrawInsnBoxCastleRtype @@ -803,6 +803,11 @@ \draw(\x+.25,.5) node[text width = 10, text height = 1]{\substring{#1}{\x}{\x}}; } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand\InsnBoxTypePosY{33} +\newcommand\InsnBoxMneumonicPosY{37} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % #1 opcode % #2 func3 @@ -814,7 +819,8 @@ \DrawInsnBoxRel{14}{12}{} \DrawInsnBoxRel{11}{7}{imm[4:1\textbar11]} \DrawInsnBoxRel{6}{0}{} - \draw(33,.75) node[right]{#3}; + \draw(\InsnBoxTypePosY,.75) node[right]{\hyperref[insnformat:itype]{B-type}}; + \draw(\InsnBoxMneumonicPosY,.75) node[right]{#3}; \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{#1}\end{scope} \begin{scope}[shift={(31-14,0)}]\DrawBitstringX{#2}\end{scope} @@ -829,7 +835,8 @@ \DrawInsnBoxRel{14}{12}{} \DrawInsnBoxRel{11}{7}{rd} \DrawInsnBoxRel{6}{0}{} - \draw(33,.75) node[right]{#3}; + \draw(\InsnBoxTypePosY,.75) node[right]{\hyperref[insnformat:itype]{I-type}}; + \draw(\InsnBoxMneumonicPosY,.75) node[right]{#3}; \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{#1}\end{scope} \begin{scope}[shift={(31-14,0)}]\DrawBitstringX{#2}\end{scope} @@ -846,7 +853,8 @@ \DrawInsnBoxRel{14}{12}{} \DrawInsnBoxRel{11}{7}{rd} \DrawInsnBoxRel{6}{0}{} - \draw(33,.75) node[right]{#3}; + \draw(\InsnBoxTypePosY,.75) node[right]{\hyperref[insnformat:itype]{I-type}}; + \draw(\InsnBoxMneumonicPosY,.75) node[right]{#3}; \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{#1}\end{scope} \begin{scope}[shift={(31-14,0)}]\DrawBitstringX{#2}\end{scope} @@ -864,7 +872,8 @@ \DrawInsnBoxRel{14}{12}{} \DrawInsnBoxRel{11}{7}{imm[4:0]} \DrawInsnBoxRel{6}{0}{} - \draw(33,.75) node[right]{#3}; + \draw(\InsnBoxTypePosY,.75) node[right]{\hyperref[insnformat:stype]{S-type}}; + \draw(\InsnBoxMneumonicPosY,.75) node[right]{#3}; \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{#1}\end{scope} \begin{scope}[shift={(31-14,0)}]\DrawBitstringX{#2}\end{scope} @@ -881,7 +890,8 @@ \DrawInsnBoxRel{14}{12}{} \DrawInsnBoxRel{11}{7}{rd} \DrawInsnBoxRel{6}{0}{} - \draw(33,.75) node[right]{#3}; + \draw(\InsnBoxTypePosY,.75) node[right]{\hyperref[insnformat:rtype]{R-type}}; + \draw(\InsnBoxMneumonicPosY,.75) node[right]{#3}; \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{#1}\end{scope} \begin{scope}[shift={(31-14,0)}]\DrawBitstringX{#2}\end{scope} @@ -899,7 +909,8 @@ \DrawInsnBoxRel{14}{12}{} \DrawInsnBoxRel{11}{7}{rd} \DrawInsnBoxRel{6}{0}{} - \draw(33,.75) node[right]{#3}; +% \draw(\InsnBoxTypePosY,.75) node[right]{\hyperref[insnformat:rtype]{R-type}}; + \draw(\InsnBoxMneumonicPosY,.75) node[right]{#3}; \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{#1}\end{scope} \begin{scope}[shift={(31-14,0)}]\DrawBitstringX{#2}\end{scope} @@ -914,7 +925,8 @@ \DrawInsnBoxRel{14}{12}{} \DrawInsnBoxRel{11}{7}{} \DrawInsnBoxRel{6}{0}{} - \draw(33,.75) node[right]{#3}; +% \draw(\InsnBoxTypePosY,.75) node[right]{\hyperref[insnformat:rtype]{R-type}}; + \draw(\InsnBoxMneumonicPosY,.75) node[right]{#3}; \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{#1}\end{scope} \begin{scope}[shift={(31-11,0)}]\DrawBitstringX{00000}\end{scope} @@ -929,7 +941,8 @@ \DrawInsnBoxRel{31}{12}{imm[31:12]} \DrawInsnBoxRel{11}{7}{rd} \DrawInsnBoxRel{6}{0}{} - \draw(33,.75) node[right]{#2}; + \draw(\InsnBoxTypePosY,.75) node[right]{\hyperref[insnformat:utype]{U-type}}; + \draw(\InsnBoxMneumonicPosY,.75) node[right]{#2}; \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{#1}\end{scope} } @@ -940,7 +953,8 @@ \DrawInsnBoxRel{31}{12}{imm[20\textbar10:1\textbar11\textbar19:12]} \DrawInsnBoxRel{11}{7}{rd} \DrawInsnBoxRel{6}{0}{} - \draw(33,.75) node[right]{#2}; + \draw(\InsnBoxTypePosY,.75) node[right]{\hyperref[insnformat:jtype]{J-type}}; + \draw(\InsnBoxMneumonicPosY,.75) node[right]{#2}; \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{#1}\end{scope} @@ -1134,6 +1148,7 @@ \DrawInsnBoxCastle{0}{0} \end{scope} \DrawInsnBoxRel{31}{0}{} + \draw(33,.5) node[text width = 10, text height = 1, right]{imm\_j}; \begin{scope}[shift={(0,0)}]\DrawBitstringX{aaaaaaaaaaaapqrstuvwnbcdefghjkm0}\end{scope} \begin{scope}[shift={(0,0)}]\DrawHexMarkersRel{32}\end{scope} @@ -1214,6 +1229,7 @@ \DrawInsnBoxCastle{0}{0} \end{scope} \DrawInsnBoxRel{31}{0}{} + \draw(33,.5) node[text width = 10, text height = 1, right]{imm\_b}; \begin{scope}[shift={(0,0)}]\DrawBitstringX{aaaaaaaaaaaaaaaaaaaanbcdefghjkm0}\end{scope} @@ -1286,6 +1302,7 @@ \DrawInsnBoxCastle{4}{0} \end{scope} \DrawInsnBoxRel{31}{0}{} + \draw(33,.5) node[text width = 10, text height = 1, right]{imm\_s}; \begin{scope}[shift={(0,0)}]\DrawBitstringX{aaaaaaaaaaaaaaaaaaaaabcdefghjkmn}\end{scope} @@ -1354,6 +1371,7 @@ \DrawInsnBoxCastle{4}{0} \end{scope} \DrawInsnBoxRel{31}{0}{} + \draw(33,.5) node[text width = 10, text height = 1, right]{imm\_i}; \begin{scope}[shift={(0,0)}]\DrawBitstringX{aaaaaaaaaaaaaaaaaaaaabcdefghjkmn}\end{scope} @@ -1367,6 +1385,75 @@ \EndTikzPicture } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand\DrawInsnOpIShiftTypeDecoding{ + \BeginTikzPicture + + \begin{scope}[shift={(0,-1.5)}] + + \DrawInsnTypeI{0000010abcde00011000001110000011} + + \pgfmathsetmacro\ArrowNorth{\BitBoxArrowInset} + \pgfmathsetmacro\ArrowSouth{-16-\BitBoxArrowInset} + \pgfmathsetmacro\ZeroNodeY{\ArrowSouth+2} + + \node at (0,\ZeroNodeY) {0}; + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=90](1,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=90](2,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=90](3,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](4,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](5,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](6,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](7,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](8,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](9,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](10,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](11,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](12,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](13,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](14,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](15,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](16,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](17,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](18,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](19,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](20,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](21,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](22,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](23,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](24,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](25,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](26,\ArrowSouth); + \draw[red,->](.5,\ZeroNodeY)to[out=0,in=110](27,\ArrowSouth); + + \draw[blue,->](8,\ArrowNorth)to[out=270,in=90](28,\ArrowSouth); % 4 + \draw[blue,->](9,\ArrowNorth)to[out=270,in=90](29,\ArrowSouth); % 3 + \draw[blue,->](10,\ArrowNorth)to[out=270,in=90](30,\ArrowSouth); % 2 + \draw[blue,->](11,\ArrowNorth)to[out=270,in=90](31,\ArrowSouth); % 1 + \draw[blue,->](12,\ArrowNorth)to[out=270,in=90](32,\ArrowSouth); % 0 + + \begin{scope}[shift={(0,0)}]\DrawHexMarkersRel{32}\end{scope} + \end{scope} + + \begin{scope}[shift={(0,-19.75)}] + \begin{scope}[shift={(0,1.5)}] + \DrawInsnBoxCastle{31}{5} + \DrawInsnBoxCastle{4}{0} + \end{scope} + \DrawInsnBoxRel{31}{0}{} + \draw(33,.5) node[text width = 10, text height = 1, right]{shamt\_i}; + + \begin{scope}[shift={(0,0)}]\DrawBitstringX{000000000000000000000000000abcde}\end{scope} + + \begin{scope}[shift={(0,0)}]\DrawHexMarkersRel{32}\end{scope} + + \InsnBoxFieldWidthArrow{31}{5} + \InsnBoxFieldWidthArrow{4}{0} + \end{scope} + + \EndTikzPicture +} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\DrawInsnOpUTypeDecoding{ \BeginTikzPicture @@ -1422,6 +1509,7 @@ \DrawInsnBoxCastle{11}{0} \end{scope} \DrawInsnBoxRel{31}{0}{} + \draw(33,.5) node[text width = 10, text height = 1, right]{imm\_u}; \begin{scope}[shift={(0,0)}]\DrawBitstringX{abcdefghjkmnpqrstuvw000000000000}\end{scope} diff --git a/book/refcard/chapter.tex b/book/refcard/chapter.tex index fb49520..c626d28 100644 --- a/book/refcard/chapter.tex +++ b/book/refcard/chapter.tex @@ -10,77 +10,77 @@ \hline add & rd, rs1, rs2 & \hyperref[insnformat:rtype]{R} & \hyperref[insn:add]{Add} & {\tt rd $\leftarrow$ rs1 + rs2, pc $\leftarrow$ pc+4}\\ \hline -addi & rd, rs1, imm & \hyperref[insnformat:itype]{I} & \hyperref[insn:addi]{Add Immediate} & {\tt rd $\leftarrow$ rs1+sx(imm), pc $\leftarrow$ pc+4}\\ +addi & rd, rs1, imm & \hyperref[insnformat:itype]{I} & \hyperref[insn:addi]{Add Immediate} & {\tt rd $\leftarrow$ rs1 + \hyperref[imm.i:decode]{imm\_i}, pc $\leftarrow$ pc+4}\\ \hline and & rd, rs1, rs2 & \hyperref[insnformat:rtype]{R} & \hyperref[insn:and]{And} & {\tt rd $\leftarrow$ rs1 \& rs2, pc $\leftarrow$ pc+4}\\ \hline -andi & rd, rs1, imm & \hyperref[insnformat:itype]{I} & \hyperref[insn:andi]{And Immediate} & {\tt rd $\leftarrow$ rs1 \& sx(imm), pc $\leftarrow$ pc+4}\\ +andi & rd, rs1, imm & \hyperref[insnformat:itype]{I} & \hyperref[insn:andi]{And Immediate} & {\tt rd $\leftarrow$ rs1 \& \hyperref[imm.i:decode]{imm\_i}, pc $\leftarrow$ pc+4}\\ \hline -auipc & rd, imm & \hyperref[insnformat:utype]{U} & \hyperref[insn:auipc]{Add Upper Immediate to PC} & {\tt rd $\leftarrow$ pc + zr(imm), pc $\leftarrow$ pc+4}\\ +auipc & rd, imm & \hyperref[insnformat:utype]{U} & \hyperref[insn:auipc]{Add Upper Immediate to PC} & {\tt rd $\leftarrow$ pc + \hyperref[imm.u:decode]{imm\_u}, pc $\leftarrow$ pc+4}\\ \hline -beq & rs1, rs2, imm & \hyperref[insnformat:btype]{B} & \hyperref[insn:beq]{Branch Equal} & {\tt pc $\leftarrow$ pc + (\verb@(rs1==rs2) ? sx(imm[12:1]<<1) : 4@)}\\ +beq & rs1, rs2, imm & \hyperref[insnformat:btype]{B} & \hyperref[insn:beq]{Branch Equal} & {\tt pc $\leftarrow$ pc + (\verb@(rs1==rs2) ? @\hyperref[imm.b:decode]{imm\_b}\verb@ : 4@)}\\ \hline -bge & rs1, rs2, imm & \hyperref[insnformat:btype]{B} & \hyperref[insn:bge]{Branch Greater or Equal} & {\tt pc $\leftarrow$ pc + (\verb@(rs1>=rs2) ? sx(imm[12:1]<<1) : 4@)}\\ +bge & rs1, rs2, imm & \hyperref[insnformat:btype]{B} & \hyperref[insn:bge]{Branch Greater or Equal} & {\tt pc $\leftarrow$ pc + (\verb@(rs1>=rs2) ? @\hyperref[imm.b:decode]{imm\_b}\verb@ : 4@)}\\ \hline -bgeu & rs1, rs2, imm & \hyperref[insnformat:btype]{B} & \hyperref[insn:bgeu]{Branch Greater or Equal Unsigned} & {\tt pc $\leftarrow$ pc + (\verb@(rs1>=rs2) ? sx(imm[12:1]<<1) : 4@)}\\ +bgeu & rs1, rs2, imm & \hyperref[insnformat:btype]{B} & \hyperref[insn:bgeu]{Branch Greater or Equal Unsigned} & {\tt pc $\leftarrow$ pc + (\verb@(rs1>=rs2) ? @\hyperref[imm.b:decode]{imm\_b}\verb@ : 4@)}\\ \hline -blt & rs1, rs2, imm & \hyperref[insnformat:btype]{B} & \hyperref[insn:blt]{Branch Less Than} & {\tt pc $\leftarrow$ pc + (\verb@(rs1> rs2, pc $\leftarrow$ pc+4}\\ \hline -srai & rd, rs1, shamt & \hyperref[insnformat:itype]{I} & \hyperref[insn:srai]{Shift Right Arithmetic Immediate} & {\tt rd $\leftarrow$ rs1 >> shamt, pc $\leftarrow$ pc+4}\\ +srai & rd, rs1, shamt & \hyperref[insnformat:itype]{I} & \hyperref[insn:srai]{Shift Right Arithmetic Immediate} & {\tt rd $\leftarrow$ rs1 >> \hyperref[shamt.i:decode]{shamt\_i}, pc $\leftarrow$ pc+4}\\ \hline srl & rd, rs1, rs2 & \hyperref[insnformat:rtype]{R} & \hyperref[insn:srl]{Shift Right Logical} & {\tt rd $\leftarrow$ rs1 >> rs2, pc $\leftarrow$ pc+4}\\ \hline -srli & rd, rs1, shamt & \hyperref[insnformat:itype]{I} & \hyperref[insn:srli]{Shift Right Logical Immediate} & {\tt rd $\leftarrow$ rs1 >> shamt, pc $\leftarrow$ pc+4}\\ +srli & rd, rs1, shamt & \hyperref[insnformat:itype]{I} & \hyperref[insn:srli]{Shift Right Logical Immediate} & {\tt rd $\leftarrow$ rs1 >> \hyperref[shamt.i:decode]{shamt\_i}, pc $\leftarrow$ pc+4}\\ \hline sub & rd, rs1, rs2 & \hyperref[insnformat:rtype]{R} & \hyperref[insn:sub]{Subtract} & {\tt rd $\leftarrow$ rs1 - rs2, pc $\leftarrow$ pc+4}\\ \hline -sw & rs2, imm(rs1) & \hyperref[insnformat:stype]{S} & \hyperref[insn:sw]{Store Word} & {\tt m32(rs1+sx(imm)) $\leftarrow$ rs2[31:0], pc $\leftarrow$ pc+4}\\ +sw & rs2, imm(rs1) & \hyperref[insnformat:stype]{S} & \hyperref[insn:sw]{Store Word} & {\tt m32(rs1+\hyperref[imm.s:decode]{imm\_s}) $\leftarrow$ rs2[31:0], pc $\leftarrow$ pc+4}\\ \hline xor & rd, rs1, rs2 & \hyperref[insnformat:rtype]{R} & \hyperref[insn:xor]{Exclusive Or} & {\tt rd $\leftarrow$ rs1 \^{} rs2, pc $\leftarrow$ pc+4}\\ \hline -xori & rd, rs1, imm & \hyperref[insnformat:itype]{I} & \hyperref[insn:xori]{Exclusive Or Immediate} & {\tt rd $\leftarrow$ rs1 \^{} sx(imm), pc $\leftarrow$ pc+4}\\ +xori & rd, rs1, imm & \hyperref[insnformat:itype]{I} & \hyperref[insn:xori]{Exclusive Or Immediate} & {\tt rd $\leftarrow$ rs1 \^{} \hyperref[imm.i:decode]{imm\_i}, pc $\leftarrow$ pc+4}\\ \hline \end{tabular} } @@ -88,5 +88,5 @@ xori & rd, rs1, imm & \hyperref[insnformat:itype]{I} & \hyperref[insn:xori]{Ex \newpage {\Large RV32I Base Instruction Set Encoding}~\cite[p.~104]{rvismv1v22:2017} -\DrawAllInsnTypes\\ +%\DrawAllInsnTypes\\ \DrawAllInsnOps diff --git a/book/rv32/chapter.tex b/book/rv32/chapter.tex index 5ea7749..48cb532 100644 --- a/book/rv32/chapter.tex +++ b/book/rv32/chapter.tex @@ -273,8 +273,8 @@ This simplification can also allow it operate faster. \DrawInsnTypeUTikz{00000000000000000000000000000000}\\ \DrawInsnTypeJTikz{00000000000000000000000000000000}\\ \DrawInsnTypeITikz{00000000000000000000000000000000}\\ +\DrawInsnTypeIShiftTikz{00000000000000000000000000000000}\\ \DrawInsnTypeSTikz{00000000000000000000000000000000}\\ -\DrawInsnTypeRShiftTikz{00000000000000000000000000000000}\\ \DrawInsnTypeRTikz{00000000000000000000000000000000} \captionof{figure}{RISC-V instruction formats.} \label{Figure:riscvFormats} @@ -301,7 +301,7 @@ the LSBs as discussed in \autoref{extension:zr}. If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction and converted as shown below. -\DrawInsnOpUTypeDecoding +\label{imm.u:decode}\DrawInsnOpUTypeDecoding %If \Gls{xlen}=32 then the imm value in this example will be %converted as shown below. @@ -364,7 +364,7 @@ value to \Gls{xlen} bits as discussed in \autoref{extension:slzr}. If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction and converted as shown below. -\DrawInsnOpJTypeDecoding +\label{imm.j:decode}\DrawInsnOpJTypeDecoding %\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{01000000110111001001}{1} % @@ -383,18 +383,11 @@ counter. Since no instruction can be placed at an odd address the 20-bit imm value is zero-extended to the right to represent a 21-bit signed offset capable of representing numbers twice the magnitude of the 20-bit imm value. - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{R Type} \label{insnformat:rtype} \DrawInsnTypeRTikz{01000001111100011000001110110011} -A special case of the R-type used for shift-immediate instructions where -the {\em rs2} field is used as an immediate value named {\em shamt} -representing the number of bit positions to shift: - -\DrawInsnTypeRShiftTikz{00000000001000011001001110100011} - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{I Type} \label{insnformat:itype} @@ -403,7 +396,14 @@ representing the number of bit positions to shift: If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction and converted as shown below. -\DrawInsnOpITypeDecoding +\label{imm.i:decode}\DrawInsnOpITypeDecoding + +A special case of the I-type used for shift-immediate instructions where +the {\em imm} field is used as an immediate value named {\em shamt} +representing the number of bit positions to shift: + +\label{shamt.i:decode}\DrawInsnOpIShiftTypeDecoding +%\DrawInsnTypeIShiftTikz{00000000001000011001001110100011} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{S Type} @@ -413,7 +413,7 @@ and converted as shown below. If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction and converted as shown below. -\DrawInsnOpSTypeDecoding +\label{imm.s:decode}\DrawInsnOpSTypeDecoding %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{B Type} @@ -423,7 +423,7 @@ and converted as shown below. If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction and converted as shown below. -\DrawInsnOpBTypeDecoding +\label{imm.b:decode}\DrawInsnOpBTypeDecoding %insnTypeF