X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=simple_v_extension%2Fsimple_v_chennai_2018.tex;h=3e6e47d7cf86681ca0c66b4f955fab37ec6bf574;hb=618decaba1c51fdd75407d0606a5b915846cbd36;hp=62f312fe8e9a73976ec66fb3f6e15cf770ebbc01;hpb=e97f3291265b44d52d6a64032473a811b686f55c;p=libreriscv.git diff --git a/simple_v_extension/simple_v_chennai_2018.tex b/simple_v_extension/simple_v_chennai_2018.tex index 62f312fe8..3e6e47d7c 100644 --- a/simple_v_extension/simple_v_chennai_2018.tex +++ b/simple_v_extension/simple_v_chennai_2018.tex @@ -103,7 +103,7 @@ \frame{\frametitle{What's the value of SV? Why adopt it even in non-V?} \begin{itemize} - \item memcpy becomes much smaller (higher bang-per-buck) + \item memcpy has a much higher bang-per-buck ratio \item context-switch (LOAD/STORE multiple): 1-2 instructions \item Compressed instrs further reduces I-cache (etc.) \item Reduced I-cache load (and less I-reads) @@ -150,7 +150,7 @@ \item Standard and future and custom opcodes now parallel\\ (crucially: with NO extra instructions needing to be added) \end{itemize} - Note: EVERYTHING is parallelised: + Note: EVERY scalar op now paralleliseable \begin{itemize} \item All LOAD/STORE (inc. Compressed, Int/FP versions) \item All ALU ops (Int, FP, SIMD, DSP, everything) @@ -370,9 +370,9 @@ for (i = 0; i < 16; i++) // 16 CSRs? \begin{semiverbatim} def get\_pred\_val(bool is\_fp\_op, int reg): tb = int\_pred if is\_fp\_op else fp\_pred - if (!tb[reg].enabled): - return ~0x0 // all ops enabled - predidx = tb[reg].predidx // redirection occurs HERE + if (!tb[reg].enabled): return ~0x0 // all ops enabled + predidx = tb[reg].predidx // redirection occurs HERE + predidx += tb[reg].bank << 5 // 0 (1=rsvd) predicate = intreg[predidx] // actual predicate HERE if (tb[reg].inv): predicate = ~predicate // invert ALL bits @@ -471,10 +471,10 @@ def get\_pred\_val(bool is\_fp\_op, int reg): \begin{semiverbatim} function op\_add(rd, rs1, rs2) # add not VADD!  int i, id=0, irs1=0, irs2=0; +  predval = get\_pred\_val(FALSE, rd);  rd = int\_vec[rd ].isvector ? int\_vec[rd ].regidx : rd;  rs1 = int\_vec[rs1].isvector ? int\_vec[rs1].regidx : rs1;  rs2 = int\_vec[rs2].isvector ? int\_vec[rs2].regidx : rs2; -  predval = get\_pred\_val(FALSE, rd);  for (i = 0; i < VL; i++) if (predval \& 1<