<div dir="ltr"><div><div><div><div><div><div><div>Hey, <br></div>So for doing such pointer arithmetic it doesn't load the values as the controller has no execution unit as such it does al computation in the memory itself.<br></div>So for such a function it would do just an add which looks like this :<br>ADD @A, @B=<br>XOR @A,@B,@T; / / T = A xor  B<br>AND @A,@B,@R; / / R = A · B<br>iRM 3w 0 , 1 ,@CI ; / / CI = 0<br>iRM 3w 0 , 1 ,@U; / / U = 0<br>iRM 3w 0 , 1 ,@V; / / V = 0<br>iRM 3w 1 ,@T,@U; / / U = T<br><br>iRM 3 @CI+0 ,@U+0 ,@V+ 1 ; / / V=[0, (c 0 · t 0 ), . . . , 0]<br>iRM 3 @R+ 0 , 0 , CI + 1 ; / / CI=[0, r 0 , . . . , 0]<br>iRM 3 @V+1,0,@CI+1; // CI=[0, (r 0 + (c 0 · t 0 )), . . . ]<br>..<br>.<br>iRM 3 @CI+62 @U+62 @V+ 6 3 ;<br>iRM 3 @R+ 6 2 , 0 ,@CI ;<br>iRM 3 @V+ 6 3 , 0 ,@CI+ 6 3 ;<br>XOR @T, @CI ,@A; / / A = A xor B xor CI<br><br></div>It doesnt print out the AND and XOR instructions , it performs them is a similar fashion, you can look up the AND I have written earlier,<br><br></div>The load is done:<br>            iRM 3w 0 , 1 , Accum ;<br>L i + n : iRM 3w A, 1 , Accum ;<br><br></div>where the value of A is known at compile time from @A thats signified. IRM 3w is basically a bitwise resistive majority done on an entire word(iRM 3) . Resistive majority is done as majority of A,B',C<br></div><div>It's quite complex<br></div>How do you think the instruction definition would work for such an architecture.<br></div>Thanks<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 5, 2017 at 6:26 PM, Sean Silva <span dir="ltr"><<a href="mailto:chisophugis@gmail.com" target="_blank">chisophugis@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Mon, Jun 5, 2017 at 1:45 PM, Sreejita saha <span dir="ltr"><<a href="mailto:sreejitasaha2011@gmail.com" target="_blank">sreejitasaha2011@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hey Sean,<div>So the processor does in-memory computing, it reads instructions and operands from the memory array, performs the majority operations within the memory array itself.</div><div>It does instructions using resistive majority which is AB'+B'C+AC</div><div>Like it does AND operation as </div><div>1: 0, 1, @C; //C=0 </div><div>2: 0, 1, @Binv; //Binv=0 </div><div>3: 1, @B, @Binv; //Binv=B </div><div>4: @A, @Binv, @C; //C=A.B<br></div><div> where each operation is a resistive majority and operations are directly performed on the storage of C.  It reads @A in a register , @B , reads A and B and directly writes into the memory @C. There are shift operators as well that are also performed in a similar way, loads, stores are also performed like this.</div></div></blockquote><div><br></div></span><div>Can you show an example of the load/store and add/shift? For example, how does your ISA represent this function?<br><br></div><div>void add(int *dst, int *src0, int *src1) {</div><div>  *dst = *src0 + *src1;</div><div>}</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>-- Sean Silva</div></font></span><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div> So I am trying to define this resistive majority instruction in my ISA.</div><div><br></div><div>Thanks!</div><span class="m_-2970721295627600085HOEnZb"><font color="#888888"><div>-Sreejita </div><div> <br></div></font></span></div><div class="m_-2970721295627600085HOEnZb"><div class="m_-2970721295627600085h5"><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jun 4, 2017 at 8:22 PM, Sean Silva <span dir="ltr"><<a href="mailto:chisophugis@gmail.com" target="_blank">chisophugis@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm having a hard time grasping what this ISA actually looks like.<div><br></div><div>When you say that it has a single instruction that is a majority function, I assume something like this:</div><div><br></div><div>MAJ rDst <- rSrc0, rSrc1, rSrc2</div><div>Semantics:</div><div>for (int i = 0; i < REGISTER_WIDTH; i++) {</div><div>  rDst[i] = maj(rSrc0[i], rSrc1[i], rSrc2[i]);</div><div>}</div><div>Where maj(a, b, c) = (a & b) | (a & c) | (b & c)<br><div><br></div><div>But that doesn't make sense given your question.</div><div><br></div><div>MAJ is a bitwise operation, so how do you implement arithmetic instructions with it? You would need at least one other instruction (such as a bit shift) to establish dependency chains between bits.</div><div><br></div><div>Also, how do you decompose load/store into majority functions? It's not even clear to me what that would actually mean. You need to access the memory/IO bus somehow, and if your only instruction only reads/writes to registers, the only way to do that would be to have special registers that interface to the IO bus?</div><div><br></div><div>-- Sean Silva</div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_-2970721295627600085m_6209670664283932736h5">On Thu, Jun 1, 2017 at 8:13 PM, Sreejita saha via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-2970721295627600085m_6209670664283932736h5"><div link="blue" vlink="#954F72" lang="EN-US"><div class="m_-2970721295627600085m_6209670664283932736m_2012837813939142686m_8637115130387562025WordSection1"><p class="MsoNormal">Hello everyone,</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">I was trying to create an LLVM backend for a processor with a very simple architecture and that does all instructions like load, store, arithmetic and logical instructions using a bunch of majority functions. The processor has only one instruction(majority function) in its ISA and breaks down all other instructions into a number of majority instructions depending on what instruction it is. All the instructions have different combinations of majority operations. Is there any way to implement this without creating a new Selection DAG node for the majority operation?</p><p class="MsoNormal">I was thinking of creation of a new Selection DAG node and mapping all the other instructions like loads, stores as pseudo instructions and breaking them up. Can someone please help me with this?</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Thanks!</p><p class="MsoNormal">Sreejita</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986" target="_blank">Mail</a> for Windows 10</p><p class="MsoNormal"><u></u> <u></u></p></div></div><br></div></div>______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div></div></div><br></div></div>
</blockquote></div><br></div>