[cfe-dev] Strange assembly behavior

Vincent Habchi vince at macports.org
Mon Mar 11 05:49:24 PDT 2013

Hi folks, gurus and experts –

I am not sure this is the proper list to post to, but I try nevertheless. I am getting a strange .o output from an assembly file parsed by clang. 

.globl _ATL_UGEMV
.align 6

      addpd %xmm0, %xmm1
      movaps %xmm1, 112-128(%r9)

      sub $-128, %r9
      sub $-128, %rdx
      sub $8*2, %rbx
      jnz LOOPM

      cmp $0, %rcx
      jz MCLEAN

      mov %rcx, %rbx
      movsd -128(%r9), %xmm1
      movsd -128(%rdx), %xmm0

      dec %rbx
      jnz LOOPMCU

      prefetchnta 12*8+64(%r8)
      add $12*8, %r8
      add %r15, %rdx
      mov %r11, %r9
      mov %rdi, %rbx
      sub $12, %rsi
      jnz LOOPN

      movq -8(%rsp), %rbp
      movq -16(%rsp), %rbx
      movq -24(%rsp), %r12
      movq -32(%rsp), %r13
      movq -40(%rsp), %r14
      movq -48(%rsp), %r15

I get this after ‘clang -x assembler’ (clang version 3.3 (trunk 173279)):

dmvn_sse.o[0x6f8]:  addpd  %xmm0, %xmm1
dmvn_sse.o[0x6fc]:  movaps %xmm1, -16(%r9)
dmvn_sse.o[0x701]:  subq   $-128, %r9
dmvn_sse.o[0x705]:  subq   $-128, %rdx
dmvn_sse.o[0x709]:  subq   $16, %rbx
dmvn_sse.o[0x70d]:  jne    0xc7                      ; ATL_UGEMV + 199
dmvn_sse.o[0x713]:  cmpq   $0, %rcx
dmvn_sse.o[0x717]:  je     0x71d                     ; ATL_UGEMV + 1821
dmvn_sse.o[0x71d]:  movq   %rcx, %rbx
dmvn_sse.o[0x720]:  movsd  -128(%r9), %xmm1
dmvn_sse.o[0x726]:  movsd  -128(%rdx), %xmm0
dmvn_sse.o[0x7e7]:  decq   %rbx
dmvn_sse.o[0x7ea]:  jne    0x720                     ; ATL_UGEMV + 1824

The ‘jz MCLEAN’ has been replaced by a jump to the next instruction, the code after MCLEAN: is discarded and does not even appear in the .o file (if I believe lldb), so that the function abruptly ends up at the ‘jnz LOOPMCPU’. Needless to say, this code fails to run. Could anybody tell me what’s wrong?

Thanks a lot!

More information about the cfe-dev mailing list