mirror of
https://github.com/johnwinans/rvalp.git
synced 2025-09-28 13:40:16 -04:00
Added immediate-field decoding diagrams for all instruction types.
This commit is contained in:
parent
8746aad3f0
commit
55cb675205
@ -280,11 +280,12 @@
|
||||
% \textbf{#1}\\
|
||||
{\large #1}
|
||||
}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% #1 the binary encoding
|
||||
\newcommand\DrawInsnTypeBTikz[1]{
|
||||
\BeginTikzPicture
|
||||
\newcommand\DrawInsnTypeB[1]{
|
||||
\StrLen{#1}[\numchars]
|
||||
\begin{scope}[shift={(0,.75)}]
|
||||
\DrawInsnBitstring{\numchars}{#1}{\hyperref[insnformat:btype]{B-type}}
|
||||
\DrawInsnBoxSeg{\numchars}{31}{25}{imm[12\textbar10:5]}
|
||||
\DrawInsnBoxSeg{\numchars}{24}{20}{rs2}
|
||||
@ -296,8 +297,16 @@
|
||||
% add some hint bits in for imm fields
|
||||
\draw {[rounded corners=\SignBoxCornerRadius] (1.35, -.6) -- (1.35, .6) -- (.65, .6) -- (.65, -.6) -- cycle}; % sign bit
|
||||
\draw (32-7-.5, -.75) -- (32-7-.5, .1); % imm[11]
|
||||
\end{scope}
|
||||
|
||||
\DrawHexMarkers{\numchars}
|
||||
\DrawHexMarkersRel{\numchars}
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% #1 the binary encoding
|
||||
\newcommand\DrawInsnTypeBTikz[1]{
|
||||
\BeginTikzPicture
|
||||
\DrawInsnTypeB{#1}
|
||||
\EndTikzPicture
|
||||
}
|
||||
|
||||
@ -309,9 +318,9 @@
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% #1 the binary encoding
|
||||
\newcommand\DrawInsnTypeUTikz[1]{
|
||||
\BeginTikzPicture
|
||||
\newcommand\DrawInsnTypeU[1]{
|
||||
\StrLen{#1}[\numchars]
|
||||
\begin{scope}[shift={(0,.75)}]
|
||||
\DrawInsnBitstring{\numchars}{#1}{\hyperref[insnformat:utype]{U-type}}
|
||||
\DrawInsnBoxSeg{\numchars}{31}{12}{imm[31:12]}
|
||||
\DrawInsnBoxSeg{\numchars}{11}{7}{rd}
|
||||
@ -319,8 +328,15 @@
|
||||
|
||||
% add some hint bits in for imm fields
|
||||
\draw {[rounded corners=\SignBoxCornerRadius] (1.35, -.6) -- (1.35, .6) -- (.65, .6) -- (.65, -.6) -- cycle}; % sign bit
|
||||
\end{scope}
|
||||
|
||||
\DrawHexMarkers{\numchars}
|
||||
\DrawHexMarkersRel{\numchars}
|
||||
}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% #1 the binary encoding
|
||||
\newcommand\DrawInsnTypeUTikz[1]{
|
||||
\BeginTikzPicture
|
||||
\DrawInsnTypeU{#1}
|
||||
\EndTikzPicture
|
||||
}
|
||||
|
||||
@ -343,7 +359,7 @@
|
||||
\end{scope}
|
||||
|
||||
% add some hint bits in for imm fields
|
||||
\draw {[rounded corners=\SignBoxCornerRadius] (1.35, .15) -- (1.35, 1.35) -- (.65, 1.36) -- (.65, .15) -- cycle}; % sign bit
|
||||
\draw {[rounded corners=\SignBoxCornerRadius] (1.35, .15) -- (1.35, 1.35) -- (.65, 1.35) -- (.65, .15) -- cycle}; % sign bit
|
||||
\draw (32-19-.5, 0) -- (32-19.5, .85); % imm[19:12]
|
||||
\draw (32-20-.5, 0) -- (32-20.5, .85); % imm[11]
|
||||
\DrawHexMarkersRel{\numchars}
|
||||
@ -378,6 +394,7 @@
|
||||
% #1 the binary encoding
|
||||
\newcommand\DrawInsnTypeI[1]{
|
||||
\StrLen{#1}[\numchars]
|
||||
\begin{scope}[shift={(0,.75)}]
|
||||
\DrawInsnBitstring{\numchars}{#1}{\hyperref[insnformat:itype]{I-type}}
|
||||
\DrawInsnBoxSeg{\numchars}{31}{20}{imm[11:0]}
|
||||
\DrawInsnBoxSeg{\numchars}{19}{15}{rs1}
|
||||
@ -387,13 +404,15 @@
|
||||
|
||||
% add some hint bits in for imm fields
|
||||
\draw {[rounded corners=\SignBoxCornerRadius] (1.35, -.6) -- (1.35, .6) -- (.65, .6) -- (.65, -.6) -- cycle}; % sign bit
|
||||
\end{scope}
|
||||
\DrawHexMarkersRel{\numchars}
|
||||
}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% #1 the binary encoding
|
||||
\newcommand\DrawInsnTypeITikz[1]{
|
||||
\BeginTikzPicture
|
||||
\DrawInsnTypeI{#1}
|
||||
\DrawHexMarkers{\numchars}
|
||||
% \DrawHexMarkers{\numchars}
|
||||
\EndTikzPicture
|
||||
}
|
||||
\newcommand\DrawInsnTypeIPicture[2]{
|
||||
@ -403,9 +422,9 @@
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% #1 the binary encoding
|
||||
\newcommand\DrawInsnTypeSTikz[1]{
|
||||
\BeginTikzPicture
|
||||
\newcommand\DrawInsnTypeS[1]{
|
||||
\StrLen{#1}[\numchars]
|
||||
\begin{scope}[shift={(0,.75)}]
|
||||
\DrawInsnBitstring{\numchars}{#1}{\hyperref[insnformat:stype]{S-type}}
|
||||
\DrawInsnBoxSeg{\numchars}{31}{25}{imm[11:5]}
|
||||
\DrawInsnBoxSeg{\numchars}{24}{20}{rs2}
|
||||
@ -416,8 +435,15 @@
|
||||
|
||||
% add some hint bits in for imm fields
|
||||
\draw {[rounded corners=\SignBoxCornerRadius] (1.35, -.6) -- (1.35, .6) -- (.65, .6) -- (.65, -.6) -- cycle}; % sign bit
|
||||
\end{scope}
|
||||
|
||||
\DrawHexMarkers{\numchars}
|
||||
\DrawHexMarkersRel{\numchars}
|
||||
}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% #1 the binary encoding
|
||||
\newcommand\DrawInsnTypeSTikz[1]{
|
||||
\BeginTikzPicture
|
||||
\DrawInsnTypeS{#1}
|
||||
\EndTikzPicture
|
||||
}
|
||||
|
||||
@ -1020,60 +1046,51 @@
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% #1 MSB position
|
||||
% #2 width
|
||||
% #2 LSB position
|
||||
\newcommand\InsnBoxFieldWidthArrow[2]{
|
||||
\pgfmathsetmacro\result{int(31-#1)} % Calculate the left end position
|
||||
\begin{scope}[shift={(\result,-.5)}] % Move to left end of arrow & below origin
|
||||
\pgfmathsetmacro\result{#2*.5+.5} % the center position
|
||||
\node at (\result,0) {\tiny#2}; % size below the box
|
||||
\pgfmathsetmacro\leftpos{int(31-#1)} % Calculate the left end position
|
||||
\pgfmathsetmacro\wid{int(#1-#2+1)} % calculate the width
|
||||
\begin{scope}[shift={(\leftpos,-.5)}] % Move to left end of arrow & below origin
|
||||
\pgfmathsetmacro\result{\wid*.5+.5} % the center position
|
||||
\node at (\result,0) {\tiny\wid}; % size below the box
|
||||
|
||||
\ifthenelse{#2 > 9}
|
||||
\ifthenelse{\wid > 9}
|
||||
{ \pgfmathsetmacro\Inset{0.4} }
|
||||
{
|
||||
\ifthenelse{#2 > 1}
|
||||
\ifthenelse{\wid > 1}
|
||||
{ \pgfmathsetmacro\Inset{0.25} }
|
||||
{ \pgfmathsetmacro\Inset{0.15} }
|
||||
}
|
||||
|
||||
\draw[->] (\result+\Inset,0) -- (#2+.49,0); % arrow to the right
|
||||
\draw[->] (\result+\Inset,0) -- (\wid+.49,0); % arrow to the right
|
||||
\draw[->] (\result-\Inset,0) -- (.51,0); % arrow to the left
|
||||
\end{scope}
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\newcommand\DrawInsnOpJTypeDecoding{
|
||||
\BeginTikzPicture
|
||||
|
||||
% \begin{scope}[shift={(0,1.5)}]\DrawInsnBoxCastleJtype\end{scope}
|
||||
% \begin{scope}[shift={(0,0)}]\DrawInsnOpJType{1101111}{\hyperref[insn:jal]{jal}}\end{scope}
|
||||
|
||||
\begin{scope}[shift={(0,-1.5)}]
|
||||
% \DrawInsnBoxRel{31}{12}{}
|
||||
% \DrawInsnBoxRel{11}{7}{rd}
|
||||
% \DrawInsnBoxRel{6}{0}{}
|
||||
% \draw(33,.75) node[right]{jal};
|
||||
% \begin{scope}[shift={(31-6,0)}]\DrawBitstringX{1101111}\end{scope}
|
||||
|
||||
% \begin{scope}[shift={(31-31,0)}]\DrawBitstringX{abcdefghijklmnopqrst}\end{scope}
|
||||
|
||||
\DrawInsnTypeJ{abcdefghijklmnopqrst001111101111}
|
||||
\DrawInsnTypeJ{abcdefghjkmnpqrstuvw001111101111}
|
||||
|
||||
\pgfmathsetmacro\ArrowNorth{\BitBoxArrowInset}
|
||||
\pgfmathsetmacro\ArrowSouth{-16-\BitBoxArrowInset}
|
||||
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](1,\ArrowSouth); % 20
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](2,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](3,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](4,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](5,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](6,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](7,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](8,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](9,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](10,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](11,\ArrowSouth); % sign extend
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](12,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](1,\ArrowSouth); % 20
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](2,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](3,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](4,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](5,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](6,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](7,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](8,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](9,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](10,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](11,\ArrowSouth); % sign extend
|
||||
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](12,\ArrowSouth); % 20
|
||||
\draw[blue,->](13,\ArrowNorth)to[out=270,in=90](13,\ArrowSouth); % 19
|
||||
\draw[blue,->](14,\ArrowNorth)to[out=270,in=90](14,\ArrowSouth); % 18
|
||||
\draw[blue,->](15,\ArrowNorth)to[out=270,in=90](15,\ArrowSouth); % 17
|
||||
@ -1096,15 +1113,18 @@
|
||||
\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,->](32,\ArrowSouth+1)to[out=270,in=90](32,\ArrowSouth); % 0 (special case)
|
||||
\node at (32,\ArrowSouth+2) {0};
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](32,\ArrowSouth); % 0 (special case)
|
||||
\node at (34.5,\ArrowSouth+5) {0};
|
||||
% \draw[blue,->](32,\ArrowSouth+1)to[out=270,in=90](32,\ArrowSouth); % 0 (special case)
|
||||
% \node at (32,\ArrowSouth+2) {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}{20}
|
||||
\DrawInsnBoxCastle{31}{21}
|
||||
\DrawInsnBoxCastle{20}{20}
|
||||
\DrawInsnBoxCastle{19}{12}
|
||||
\DrawInsnBoxCastle{11}{11}
|
||||
\DrawInsnBoxCastle{10}{1}
|
||||
@ -1112,19 +1132,301 @@
|
||||
\end{scope}
|
||||
\DrawInsnBoxRel{31}{0}{}
|
||||
|
||||
\begin{scope}[shift={(0,0)}]\DrawBitstringX{aaaaaaaaaaaamnopqrstlbcdefghijk0}\end{scope}
|
||||
\begin{scope}[shift={(0,0)}]\DrawBitstringX{aaaaaaaaaaaapqrstuvwnbcdefghjkm0}\end{scope}
|
||||
\begin{scope}[shift={(0,0)}]\DrawHexMarkersRel{32}\end{scope}
|
||||
|
||||
\InsnBoxFieldWidthArrow{31}{21}
|
||||
\InsnBoxFieldWidthArrow{20}{20}
|
||||
\InsnBoxFieldWidthArrow{19}{12}
|
||||
\InsnBoxFieldWidthArrow{11}{11}
|
||||
\InsnBoxFieldWidthArrow{10}{1}
|
||||
\InsnBoxFieldWidthArrow{0}{0}
|
||||
\end{scope}
|
||||
|
||||
\EndTikzPicture
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\newcommand\DrawInsnOpBTypeDecoding{
|
||||
\BeginTikzPicture
|
||||
|
||||
\begin{scope}[shift={(0,-1.5)}]
|
||||
|
||||
\DrawInsnTypeB{abcdefg0111100011000hjkmn1100011}
|
||||
|
||||
\pgfmathsetmacro\ArrowNorth{\BitBoxArrowInset}
|
||||
\pgfmathsetmacro\ArrowSouth{-16-\BitBoxArrowInset}
|
||||
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](1,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](2,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](3,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](4,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](5,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](6,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](7,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](8,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](9,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](10,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](11,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](12,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](13,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](14,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](15,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](16,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](17,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](18,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](19,\ArrowSouth); % sign extend
|
||||
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](20,\ArrowSouth); % 12
|
||||
|
||||
\draw[blue,->](25,\ArrowNorth)to[out=270,in=90](21,\ArrowSouth); % 11
|
||||
|
||||
\draw[blue,->](2,\ArrowNorth)to[out=270,in=90](22,\ArrowSouth); % 10
|
||||
\draw[blue,->](3,\ArrowNorth)to[out=270,in=90](23,\ArrowSouth); % 9
|
||||
\draw[blue,->](4,\ArrowNorth)to[out=270,in=90](24,\ArrowSouth); % 8
|
||||
\draw[blue,->](5,\ArrowNorth)to[out=270,in=90](25,\ArrowSouth); % 7
|
||||
\draw[blue,->](6,\ArrowNorth)to[out=270,in=90](26,\ArrowSouth); % 6
|
||||
\draw[blue,->](7,\ArrowNorth)to[out=270,in=90](27,\ArrowSouth); % 5
|
||||
|
||||
\draw[blue,->](21,\ArrowNorth)to[out=270,in=90](28,\ArrowSouth); % 4
|
||||
\draw[blue,->](22,\ArrowNorth)to[out=270,in=90](29,\ArrowSouth); % 3
|
||||
\draw[blue,->](23,\ArrowNorth)to[out=270,in=90](30,\ArrowSouth); % 2
|
||||
\draw[blue,->](24,\ArrowNorth)to[out=270,in=90](31,\ArrowSouth); % 1
|
||||
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](32,\ArrowSouth); % 0 (special case)
|
||||
\node at (34.5,\ArrowSouth+5) {0};
|
||||
% \draw[blue,->](32,\ArrowSouth+1)to[out=270,in=90](32,\ArrowSouth); % 0 (special case)
|
||||
% \node at (32,\ArrowSouth+2) {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}{13}
|
||||
\DrawInsnBoxCastle{12}{12}
|
||||
\DrawInsnBoxCastle{11}{11}
|
||||
\DrawInsnBoxCastle{10}{5}
|
||||
\DrawInsnBoxCastle{4}{1}
|
||||
\DrawInsnBoxCastle{0}{0}
|
||||
\end{scope}
|
||||
\DrawInsnBoxRel{31}{0}{}
|
||||
|
||||
\begin{scope}[shift={(0,0)}]\DrawBitstringX{aaaaaaaaaaaaaaaaaaaanbcdefghjkm0}\end{scope}
|
||||
|
||||
\begin{scope}[shift={(0,0)}]\DrawHexMarkersRel{32}\end{scope}
|
||||
|
||||
\InsnBoxFieldWidthArrow{31}{13}
|
||||
\InsnBoxFieldWidthArrow{12}{12}
|
||||
\InsnBoxFieldWidthArrow{11}{11}
|
||||
\InsnBoxFieldWidthArrow{10}{5}
|
||||
\InsnBoxFieldWidthArrow{4}{1}
|
||||
\InsnBoxFieldWidthArrow{0}{0}
|
||||
\end{scope}
|
||||
|
||||
\EndTikzPicture
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\newcommand\DrawInsnOpSTypeDecoding{
|
||||
\BeginTikzPicture
|
||||
|
||||
\begin{scope}[shift={(0,-1.5)}]
|
||||
|
||||
\DrawInsnTypeS{abcdefg0111100011000hjkmn0100011}
|
||||
|
||||
\pgfmathsetmacro\ArrowNorth{\BitBoxArrowInset}
|
||||
\pgfmathsetmacro\ArrowSouth{-16-\BitBoxArrowInset}
|
||||
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](1,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](2,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](3,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](4,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](5,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](6,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](7,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](8,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](9,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](10,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](11,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](12,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](13,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](14,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](15,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](16,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](17,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](18,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](19,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](20,\ArrowSouth); % sign extend
|
||||
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](21,\ArrowSouth); % 11
|
||||
\draw[blue,->](2,\ArrowNorth)to[out=270,in=90](22,\ArrowSouth); % 10
|
||||
\draw[blue,->](3,\ArrowNorth)to[out=270,in=90](23,\ArrowSouth); % 9
|
||||
\draw[blue,->](4,\ArrowNorth)to[out=270,in=90](24,\ArrowSouth); % 8
|
||||
\draw[blue,->](5,\ArrowNorth)to[out=270,in=90](25,\ArrowSouth); % 7
|
||||
\draw[blue,->](6,\ArrowNorth)to[out=270,in=90](26,\ArrowSouth); % 6
|
||||
\draw[blue,->](7,\ArrowNorth)to[out=270,in=90](27,\ArrowSouth); % 5
|
||||
|
||||
\draw[blue,->](21,\ArrowNorth)to[out=270,in=90](28,\ArrowSouth); % 4
|
||||
\draw[blue,->](22,\ArrowNorth)to[out=270,in=90](29,\ArrowSouth); % 3
|
||||
\draw[blue,->](23,\ArrowNorth)to[out=270,in=90](30,\ArrowSouth); % 2
|
||||
\draw[blue,->](24,\ArrowNorth)to[out=270,in=90](31,\ArrowSouth); % 1
|
||||
\draw[blue,->](25,\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}{12}
|
||||
\DrawInsnBoxCastle{11}{5}
|
||||
\DrawInsnBoxCastle{4}{0}
|
||||
\end{scope}
|
||||
\DrawInsnBoxRel{31}{0}{}
|
||||
|
||||
\begin{scope}[shift={(0,0)}]\DrawBitstringX{aaaaaaaaaaaaaaaaaaaaabcdefghjkmn}\end{scope}
|
||||
|
||||
\begin{scope}[shift={(0,0)}]\DrawHexMarkersRel{32}\end{scope}
|
||||
|
||||
\InsnBoxFieldWidthArrow{31}{12}
|
||||
% \InsnBoxFieldWidthArrow{20}{1}
|
||||
\InsnBoxFieldWidthArrow{19}{8}
|
||||
\InsnBoxFieldWidthArrow{11}{1}
|
||||
\InsnBoxFieldWidthArrow{10}{10}
|
||||
\InsnBoxFieldWidthArrow{0}{1}
|
||||
\InsnBoxFieldWidthArrow{11}{5}
|
||||
\InsnBoxFieldWidthArrow{4}{0}
|
||||
\end{scope}
|
||||
|
||||
\EndTikzPicture
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\newcommand\DrawInsnOpITypeDecoding{
|
||||
\BeginTikzPicture
|
||||
|
||||
\begin{scope}[shift={(0,-1.5)}]
|
||||
|
||||
\DrawInsnTypeI{abcdefghjkmn00011000001110000011}
|
||||
|
||||
\pgfmathsetmacro\ArrowNorth{\BitBoxArrowInset}
|
||||
\pgfmathsetmacro\ArrowSouth{-16-\BitBoxArrowInset}
|
||||
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](1,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](2,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](3,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](4,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](5,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](6,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](7,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](8,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](9,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](10,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](11,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](12,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](13,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](14,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](15,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](16,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](17,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](18,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](19,\ArrowSouth); % sign extend
|
||||
\draw[red,->](1,\ArrowNorth)to[out=270,in=90](20,\ArrowSouth); % sign extend
|
||||
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](21,\ArrowSouth); % 11
|
||||
\draw[blue,->](2,\ArrowNorth)to[out=270,in=90](22,\ArrowSouth); % 10
|
||||
\draw[blue,->](3,\ArrowNorth)to[out=270,in=90](23,\ArrowSouth); % 9
|
||||
\draw[blue,->](4,\ArrowNorth)to[out=270,in=90](24,\ArrowSouth); % 8
|
||||
\draw[blue,->](5,\ArrowNorth)to[out=270,in=90](25,\ArrowSouth); % 7
|
||||
\draw[blue,->](6,\ArrowNorth)to[out=270,in=90](26,\ArrowSouth); % 6
|
||||
\draw[blue,->](7,\ArrowNorth)to[out=270,in=90](27,\ArrowSouth); % 5
|
||||
\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}{12}
|
||||
\DrawInsnBoxCastle{11}{5}
|
||||
\DrawInsnBoxCastle{4}{0}
|
||||
\end{scope}
|
||||
\DrawInsnBoxRel{31}{0}{}
|
||||
|
||||
\begin{scope}[shift={(0,0)}]\DrawBitstringX{aaaaaaaaaaaaaaaaaaaaabcdefghjkmn}\end{scope}
|
||||
|
||||
\begin{scope}[shift={(0,0)}]\DrawHexMarkersRel{32}\end{scope}
|
||||
|
||||
\InsnBoxFieldWidthArrow{31}{12}
|
||||
\InsnBoxFieldWidthArrow{11}{5}
|
||||
\InsnBoxFieldWidthArrow{4}{0}
|
||||
\end{scope}
|
||||
|
||||
\EndTikzPicture
|
||||
}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\newcommand\DrawInsnOpUTypeDecoding{
|
||||
\BeginTikzPicture
|
||||
|
||||
\begin{scope}[shift={(0,-1.5)}]
|
||||
|
||||
\DrawInsnTypeU{abcdefghjkmnpqrstuvw001010110111}
|
||||
|
||||
\pgfmathsetmacro\ArrowNorth{\BitBoxArrowInset}
|
||||
\pgfmathsetmacro\ArrowSouth{-16-\BitBoxArrowInset}
|
||||
|
||||
\draw[blue,->](1,\ArrowNorth)to[out=270,in=90](1,\ArrowSouth); %
|
||||
\draw[blue,->](2,\ArrowNorth)to[out=270,in=90](2,\ArrowSouth); %
|
||||
\draw[blue,->](3,\ArrowNorth)to[out=270,in=90](3,\ArrowSouth); %
|
||||
\draw[blue,->](4,\ArrowNorth)to[out=270,in=90](4,\ArrowSouth); %
|
||||
\draw[blue,->](5,\ArrowNorth)to[out=270,in=90](5,\ArrowSouth); %
|
||||
\draw[blue,->](6,\ArrowNorth)to[out=270,in=90](6,\ArrowSouth); %
|
||||
\draw[blue,->](7,\ArrowNorth)to[out=270,in=90](7,\ArrowSouth); %
|
||||
\draw[blue,->](8,\ArrowNorth)to[out=270,in=90](8,\ArrowSouth); %
|
||||
\draw[blue,->](9,\ArrowNorth)to[out=270,in=90](9,\ArrowSouth); %
|
||||
\draw[blue,->](10,\ArrowNorth)to[out=270,in=90](10,\ArrowSouth); %
|
||||
\draw[blue,->](11,\ArrowNorth)to[out=270,in=90](11,\ArrowSouth); %
|
||||
\draw[blue,->](12,\ArrowNorth)to[out=270,in=90](12,\ArrowSouth); %
|
||||
\draw[blue,->](13,\ArrowNorth)to[out=270,in=90](13,\ArrowSouth); %
|
||||
\draw[blue,->](14,\ArrowNorth)to[out=270,in=90](14,\ArrowSouth); %
|
||||
\draw[blue,->](15,\ArrowNorth)to[out=270,in=90](15,\ArrowSouth); %
|
||||
\draw[blue,->](16,\ArrowNorth)to[out=270,in=90](16,\ArrowSouth); %
|
||||
\draw[blue,->](17,\ArrowNorth)to[out=270,in=90](17,\ArrowSouth); %
|
||||
\draw[blue,->](18,\ArrowNorth)to[out=270,in=90](18,\ArrowSouth); %
|
||||
\draw[blue,->](19,\ArrowNorth)to[out=270,in=90](19,\ArrowSouth); %
|
||||
\draw[blue,->](20,\ArrowNorth)to[out=270,in=90](20,\ArrowSouth); %
|
||||
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](21,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](22,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](23,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](24,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](25,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](26,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](27,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](28,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](29,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](30,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](31,\ArrowSouth); %
|
||||
\draw[red,->](34,\ArrowSouth+5)to[out=180,in=90](32,\ArrowSouth); % 0 (special case)
|
||||
\node at (34.5,\ArrowSouth+5) {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}{12}
|
||||
\DrawInsnBoxCastle{11}{0}
|
||||
\end{scope}
|
||||
\DrawInsnBoxRel{31}{0}{}
|
||||
|
||||
\begin{scope}[shift={(0,0)}]\DrawBitstringX{abcdefghjkmnpqrstuvw000000000000}\end{scope}
|
||||
|
||||
\begin{scope}[shift={(0,0)}]\DrawHexMarkersRel{32}\end{scope}
|
||||
|
||||
\InsnBoxFieldWidthArrow{31}{12}
|
||||
\InsnBoxFieldWidthArrow{11}{0}
|
||||
\end{scope}
|
||||
|
||||
\EndTikzPicture
|
||||
}
|
||||
|
@ -298,10 +298,15 @@ using the {\em imm} operand for bits 31:12 and then sign-extending it
|
||||
to the left\footnote{When XLEN is larger than 32.} and zero-extending
|
||||
the LSBs as discussed in \autoref{extension:zr}.
|
||||
|
||||
If \Gls{xlen}=32 then the imm value in this example will be
|
||||
converted as shown below.
|
||||
If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction
|
||||
and converted as shown below.
|
||||
|
||||
\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{11010110000000000011}{12}
|
||||
\DrawInsnOpUTypeDecoding
|
||||
|
||||
%If \Gls{xlen}=32 then the imm value in this example will be
|
||||
%converted as shown below.
|
||||
%
|
||||
%\DrawBitBoxSignLeftZeroRightExtendedPicture{32}{11010110000000000011}{12}
|
||||
|
||||
Notice that the 20-bits of the imm field are mapped in the same order and
|
||||
in the same relative position that they appear in the instruction when
|
||||
@ -356,8 +361,8 @@ and the value in bit-position 20 will be replicated to sign-extend the
|
||||
value to \Gls{xlen} bits as discussed in \autoref{extension:slzr}.
|
||||
|
||||
|
||||
If \Gls{xlen}=32 then the {\em imm} value in this example will be converted as
|
||||
shown below.
|
||||
If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction
|
||||
and converted as shown below.
|
||||
|
||||
\DrawInsnOpJTypeDecoding
|
||||
|
||||
@ -395,16 +400,32 @@ representing the number of bit positions to shift:
|
||||
\label{insnformat:itype}
|
||||
\DrawInsnTypeITikz{00000000010000011000001110000011}
|
||||
|
||||
If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction
|
||||
and converted as shown below.
|
||||
|
||||
\DrawInsnOpITypeDecoding
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{S Type}
|
||||
\label{insnformat:stype}
|
||||
\DrawInsnTypeSTikz{00000000111100011000100110100011}
|
||||
|
||||
If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction
|
||||
and converted as shown below.
|
||||
|
||||
\DrawInsnOpSTypeDecoding
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{B Type}
|
||||
\label{insnformat:btype}
|
||||
\DrawInsnTypeBTikz{00000000111100011000100011100011}
|
||||
|
||||
If \Gls{xlen}=32 then the {\em imm} value example will extracted from the instruction
|
||||
and converted as shown below.
|
||||
|
||||
\DrawInsnOpBTypeDecoding
|
||||
|
||||
|
||||
%insnTypeF
|
||||
%insnTypeCSRR
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user