[cfe-dev] Some assembly fails in clang and succeeds in gcc

Yuri yuri at rawbw.com
Tue Aug 5 18:01:20 PDT 2014

I am looking at one project that doesn't compile with clang++.

Source in __asm__ __volatile__(...) after preprocessor looks like this:
<...skipped...>"mov [r8+((1024+7-(15))-((1024+7-(15))/(8))*(8))*4]" ", " 
"ecx" ";"

  "\n" "1" ":"
  "add rsi" ", " "4*16" ";"

This place breaks with this message:
sha.cpp:340:2: error: invalid instruction mnemonic 'prefix'
./cpu.h:224:17: note: expanded from macro 'ASL'
         #define ASL(x) GNU_ASL(x)
./cpu.h:218:26: note: expanded from macro 'GNU_ASL'
         #define GNU_ASL(x) "\n" #x ":"
<scratch space>:24:2: note: expanded from here

However, there is the previous instance of the similar assembly that 
clang doesn't complain about:
  "movdqa xmm1" ", " "[rcx+1*16]" ";"
  "\n" "0" ":"
  "movdqa [r8+((1024+7-(0+3))-((1024+7-(0+3))/(8))*(8))*4]" ", " "xmm1" ";"

gcc compiles both places.

What is wrong with the first place?


More information about the cfe-dev mailing list