Hi,<div>  I'm trying to compile an intermediate representation file to ASM (intel style), and I believe that the resultant ASM is invalid. The IR is:</div><div><br></div><div><div>; ModuleID = 'test.u'</div><div>
<br></div><div>%vec2 = type { float, float }</div><div>@t = global %vec2 zeroinitializer</div><div>@x = global i32 0</div><div><br></div><div>define i32 @main__i__v() nounwind {</div><div>locals:</div><div>  %0 = load float* getelementptr inbounds (%vec2* @t, i32 0, i32 0)</div>
<div>  %1 = fptosi float %0 to i64</div><div>  %2 = trunc i64 %1 to i32</div><div>  store i32 %2, i32* @x</div><div>  ret i32 0</div><div>}</div></div><div><br></div><div><br></div><div><br></div><div>Now, I know no memory is allocated for t (ignore that), we'll just expect the final program to crash</div>
<div><br></div><div>Running this through </div><div>llvm-as.exe test.trunk.ll -f -o test.bc</div><div>and then</div><div>llc -x86-asm-syntax=intel -o test.trunk.S test.bc</div><div><br></div><div>yields:</div><div><br></div>
<div><div><span class="Apple-tab-span" style="white-space:pre">   </span>.def<span class="Apple-tab-span" style="white-space:pre">        </span> _main__i__v;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>.scl<span class="Apple-tab-span" style="white-space:pre">        </span>2;</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>.type<span class="Apple-tab-span" style="white-space:pre">       </span>32;</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>.endef</div><div>
<span class="Apple-tab-span" style="white-space:pre"> </span>.text</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>.globl<span class="Apple-tab-span" style="white-space:pre">      </span>_main__i__v</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>.align<span class="Apple-tab-span" style="white-space:pre">      </span>16, 0x90</div><div>_main__i__v:                            # @main__i__v</div><div># BB#0:                                 # %locals</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>sub<span class="Apple-tab-span" style="white-space:pre"> </span>ESP, 20</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>movss<span class="Apple-tab-span" style="white-space:pre">       </span>XMM0, DWORD PTR [_t]</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>movss<span class="Apple-tab-span" style="white-space:pre">       </span>DWORD PTR [ESP + 8], XMM0</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>fld<span class="Apple-tab-span" style="white-space:pre"> </span>DWORD PTR [ESP + 8]</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>fisttp<span class="Apple-tab-span" style="white-space:pre">      </span>QWORD PTR [ESP]</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>mov<span class="Apple-tab-span" style="white-space:pre"> </span>EAX, DWORD PTR [ESP]</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>mov<span class="Apple-tab-span" style="white-space:pre"> </span>_x, EAX</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>xor<span class="Apple-tab-span" style="white-space:pre"> </span>EAX, EAX</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>add<span class="Apple-tab-span" style="white-space:pre"> </span>ESP, 20</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>ret</div><div>
<br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>.data</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>.globl<span class="Apple-tab-span" style="white-space:pre">      </span>_t                      # @t</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>.align<span class="Apple-tab-span" style="white-space:pre">      </span>8</div><div>_t:</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>.zero<span class="Apple-tab-span" style="white-space:pre">       </span>8</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>.globl<span class="Apple-tab-span" style="white-space:pre">      </span>_x                      # @x</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>.align<span class="Apple-tab-span" style="white-space:pre">      </span>4</div>
<div>_x:</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>.long<span class="Apple-tab-span" style="white-space:pre">       </span>0                       # 0x0</div><div><br></div><div><br></div></div><div>
<br></div><div><br></div><div>Now, the bit I think is wrong is </div><div>mov _x,EAX</div><div><br></div><div>I think it should be </div><div>mov [_x], eax</div><div><br></div><div>Thoughts?</div><div><br></div><div>Cheers</div>
<div><br></div><div>Matthew</div><div><br></div>