Skip to content

Instantly share code, notes, and snippets.

@michaeljclark
Last active June 6, 2016 00:44
Show Gist options
  • Save michaeljclark/e7469e2d40f362b5469c1c3b4c87f5b2 to your computer and use it in GitHub Desktop.
Save michaeljclark/e7469e2d40f362b5469c1c3b4c87f5b2 to your computer and use it in GitHub Desktop.
Type-UJ Immediate Bit Gather Scatter
\documentclass{report}
\usepackage[letterpaper, portrait, margin=0.5in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\bf{Type-UJ}
\begin{tikzpicture}[fill=blue!20,scale=0.5]
\begin{scope}[every node/.style={font=\scriptsize}]
% insn imm bit segment backgrounds
\fill [black!40] (0,-1) rectangle (1,-2);
\fill [black!30] (1,-1) rectangle (11,-2);
\fill [black!20] (11,-1) rectangle (12,-2);
\fill [black!10] (12,-1) rectangle (20,-2);
% insn imm bit segment borders
\draw (0,-1) rectangle (1,-2);
\draw (1,-1) rectangle (11,-2);
\draw (11,-1) rectangle (12,-2);
\draw (12,-1) rectangle (20,-2);
\draw (20,-1) rectangle (25,-2);
\draw (25,-1) rectangle (32,-2);
% insn imm bit segment labels
\node (insn_imm20) at (10 ,-0.5) {$imm[20|10:1|11|19:12]$};
\node (insn_rd) at (22.5,-0.5) {$rd$};
\node (insn_op) at (28.5,-0.5) {$opcode$};
% insn imm bit segment bits
\node (insn_31) at (0.5 ,-1.5) {$31$};
\node (insn_30) at (1.5 ,-1.5) {$30$};
\node (insn_21) at (10.5,-1.5) {$21$};
\node (insn_20) at (11.5,-1.5) {$20$};
\node (insn_19) at (12.5,-1.5) {$19$};
\node (insn_12) at (19.5,-1.5) {$12$};
\node (insn_11) at (20.5,-1.5) {$11$};
\node (insn_7) at (24.5,-1.5) {$7$};
\node (insn_6) at (25.5,-1.5) {$6$};
\node (insn_0) at (31.5,-1.5) {$0$};
% insn imm bit segment nodes
\node (insn_seg_31) at (0.5 ,-2) {};
\node (insn_seg_30_21) at (6 ,-2) {};
\node (insn_seg_20) at (11.5,-2) {};
\node (insn_seg_19_12) at (16 ,-2) {};
\node (insn_seg_11_7) at (22.5,-2) {};
\node (insn_seg_6_0) at (28.5,-2) {};
% decode imm bit segment backgrounds
\fill [black!40] (11,-6) rectangle (12,-7);
\fill [black!10] (12,-6) rectangle (20,-7);
\fill [black!20] (20,-6) rectangle (21,-7);
\fill [black!30] (21,-6) rectangle (31,-7);
% decode imm bit segment borders
\draw (11,-6) rectangle (12,-7);
\draw (12,-6) rectangle (20,-7);
\draw (20,-6) rectangle (21,-7);
\draw (21,-6) rectangle (31,-7);
\draw (31,-6) rectangle (32,-7);
% decode imm bit segment labels
\node (imm_20) at (21.5,-7.5) {$offset21$};
% decode imm bit segment bits
\node (imm_20) at (11.5,-6.5) {$20$};
\node (imm_19) at (12.5,-6.5) {$19$};
\node (imm_12) at (19.5,-6.5) {$12$};
\node (imm_11) at (20.5,-6.5) {$11$};
\node (imm_10) at (21.5,-6.5) {$10$};
\node (imm_1) at (30.5,-6.5) {$1$};
\node (imm_0) at (31.5,-6.5) {$0$};
% decode imm bit segment nodes
\node (imm_seg_20) at (11.5,-6) {};
\node (imm_seg_19_12) at (16 ,-6) {};
\node (imm_seg_11) at (20.5,-6) {};
\node (imm_seg_10_1) at (27 ,-6) {};
\node (imm_seg_0) at (31.5,-6) {};
% insn imm decode gather scatter edges
\draw[->, black!50] (insn_seg_31.south) .. controls +(0,-0.40) and +(0,1.00) .. (imm_seg_20.north);
\draw[->, black!50] (insn_seg_30_21.south) .. controls +(0,-0.50) and +(0,0.80) .. (imm_seg_10_1.north);
\draw[->, black!50] (insn_seg_20.south) .. controls +(0,-0.80) and +(0,0.60) .. (imm_seg_11.north);
\draw[->, black!50] (insn_seg_19_12.south) .. controls +(0,-1.00) and +(0,0.40) .. (imm_seg_19_12.north);
\end{scope}
\end{tikzpicture}
\end{document}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment