<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">
<div>Hi,</div>
<div><br>
</div>
<div>Can anyone help me to fill in the missing details here please? I'm sure this is a very short piece of code, but I can't find the right way of doing this...</div>
<div><br>
</div>
<div><span style="font-size: 10pt;"><font face="Courier New">MachineBasicBlock* SparcTargetLowering::</font></span></div>
<div><font face="Courier New">emitEHSjLjLongJmp(MachineInstr *MI,</font></div>
<div><font face="Courier New">                  MachineBasicBlock *MBB) const</font></div>
<div><font face="Courier New">{</font></div>
<div><font face="Courier New">  [... Code omitted for brevity]</font></div>
<div><font face="Courier New">  </font></div>
<div><font face="Courier New">  MVT PVT = getPointerTy(MF->getDataLayout());</font></div>
<div><font face="Courier New">  unsigned PtrSize = PVT.getStoreSize();</font></div>
<div><font face="Courier New">  // We'll deal with 64 bit implementations when the 32 bit version is working!</font></div>
<div><font face="Courier New">  assert(PVT == MVT::i32 && "Invalid Pointer Size!");</font></div>
<div><font face="Courier New">  </font></div>
<div><font face="Courier New">  MachineBasicBlock *jumpToMBB = MF->CreateMachineBasicBlock(BB);</font></div>
<div><font face="Courier New">  MF->insert(I, mainMBB);</font></div>
<div><font face="Courier New"><br>
</font></div>
<div><font face="Courier New">  const TargetRegisterClass *PtrRC = getRegClassFor(PVT);</font></div>
<div><font face="Courier New">  unsigned LabelReg = MRI.createVirtualRegister(PtrRC);</font></div>
<div><font face="Courier New"><br>
</font></div>
<div><font face="Courier New">  // Need to load the address of "jumpToMBB" into register "LabelReg", so that</font></div>
<div><font face="Courier New">  // we can then (later) store this in a buffer, to be recovered by "longjmp" as</font></div>
<div><font face="Courier New">  // the location to resume execution at (via a JMPL instruction).</font></div>
<div><font face="Courier New">  </font></div>
<div><font face="Courier New">  // We need something like this, garnered from the PPC implementation.</font></div>
<div><font face="Courier New">  // What is the equivalent code in Sparc utilizing the instructions SETHI and OR?</font></div>
<div><font face="Courier New">  MIB = BuildMI(mainMBB, DL,</font></div>
<div><font face="Courier New">                TII->get(Subtarget.isPPC64() ? PPC::MFLR8 : PPC::MFLR), LabelReg);</font></div>
<div><font face="Courier New"><span class="Apple-tab-span" style="white-space:pre"></span> </font></div>
<div><font face="Courier New">  // ...or possibly, it should be something like this, using addMBB (I know this isn't legal, BTW)</font></div>
<div><font face="Courier New">  MIB = BuildMI(mainMBB, DL,</font></div>
<div><font face="Courier New">                TII->get(SP::LDri, LabelReg).addMBB(jumpToMBB);</font></div>
<div><font face="Courier New">  </font></div>
<div><font face="Courier New">  [... Code omitted for brevity]</font></div>
<div><font face="Courier New">}</font></div>
<div style="color: rgb(0, 0, 0); font-size: 16px;">
<hr tabindex="-1">
<div id="divRpF314299" style="font-family: 'Times New Roman'; direction: ltr;"><font face="Tahoma" size="2" color="#000000"><b>From:</b> Chris.Dewhurst<br>
<b>Sent:</b> 15 April 2016 18:17<br>
<b>To:</b> llvm-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [llvm-dev] [Sparc] Load address with SETHI<br>
</font><br>
</div>
<div style="font-family: 'Times New Roman';"></div>
<div style="font-family: 'Times New Roman';">
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt"><span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> > Some more information on what I have so far. I'll actually focus on the longjmp side, as the
 problem is probably easier.</span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> > </span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> > I need to get the SETHI / OR combination inserted where the comment</span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> > "*** Need to use the SETHI / OR combination here. ***" appears in the</span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> > code below, but I'm not sure that this is done anywhere near this piece</span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> > of code, so I'll include all the relevant parts that I can find of my</span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> > current implementation.</span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> I don't understand what exactly you want to materialize here. Shouldn't</span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> the address of the buffer already be an operand at this point?</span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<span style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">> Joerg</span><br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<br style="font-family:'Segoe UI',Helvetica,Arial,sans-serif; font-size:13.3333px">
<div>Quite possibly, I've over-simplified my example. Perhaps I should have focussed more on the setjmp part, which is actually where I was coding anyway. In this, I need to store the address of the instruction after I've lowered the intrinsic into a buffer
 so that I can recover this and jump back to it from the longjmp intrinsic.</div>
<div><br>
</div>
<div>There are two or three parts, and I'm not sure how to go about either. After I get these working, the rest is (I think) plain-sailing:</div>
<div><br>
</div>
<div>(1) I need to take the address of the instruction after the lowered setjmp intrinsic, which I think requires that I create a new basic block</div>
<div><br>
</div>
<div>(2) I need to get the address of this basic block, at lowering time, and get it into a register using the SETHI / OR combination (I presume). Once it's in the register, I can store it in the buffer easily. There must surely be a good way to load an address
 using SETHI / OR, but nothing I've tried (including "makeAddress") works so far. I guess I could code each of SETHI and OR individually, but surely there's some code around to take care of this already.</div>
<div><br>
</div>
<div>(3) Is there anything else? Do I need any indicators to let the back-end know it'll need to fix-up the address taken in step (2) later in the compilation - or possibly in the link - pipeline?</div>
</div>
</div>
</div>
</div>
</body>
</html>