https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64871
Bug ID: 64871 Summary: inline assembly neon Product: gcc Version: 4.8.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: x8zmac at hotmail dot com Hi I add a piece of code in multimedia. It makes data in array reverse. It works, but when I add -O2 or -O3 the result is error and vmov with -O2 ,-O3 create illegal instruction. asm volatile ( "pld [%0, #0xFFF];\n\t\ vldm %0!,{d0-d3};\n\t\ vswp.32 d0,d3;\n\t\ vswp.32 d1,d2;\n\t\ VREV64.32 q0, q0;\n\t\ VREV64.32 q1, q1;\n\t\ vstm %1!,{d0-d3};" : :"r"(data),"r"(coeff),"r"(tmp),"r"(sum),"r"(ptr) :"d0", "d1","d2","d3","d4","d5","d6","d7" ); asm volatile ( "pld [%0, #0xFFF];\n\t\ vldm %0!,{d0-d3};\n\t\ vldm %1!,{d4-d7};\n\t\ VMUL.I32 d0,d0,d4;\n\t\ VMUL.I32 d1,d1,d5;\n\t\ VMUL.I32 d2,d2,d6;\n\t\ VMUL.I32 d3,d3,d7;\n\t\ VADD.I32 d0,d0,d1;\n\t\ VADD.I32 d2,d2,d3;\n\t\ VADD.I32 d0,d0,d2;\n\t\ VMOV %2,%3,d0;\n\t\ add %3,%3,%2;\n\t\ str %3,[%4]" : :"r"(data),"r"(coeff),"r"(tmp),"r"(sum),"r"(ptr) :"d0", "d1","d2","d3","d4","d5","d6","d7" );