This is http://llvm.org/PR20311. IMO a better fix is to use the "=SD" constraint on %1, since ebx isn't really clobbered here.
Also, we should probably be checking for PIC defines. Also, the bug in __cpu_count should be fixed. On Mon, Jul 21, 2014 at 3:45 PM, Akira Hatanaka <[email protected]> wrote: > The attached patch fixes a bug where the __ebx output is clobbered. > Currently, clang generates the following code when cpuid.c in the test case > is compiled: > > $ clang cpuid.c -O3 -S -o - > > ## InlineAsm Start > > pushl %ebx # save %ebx before cpuid clobbers it. > > cpuid > > mov %ebx,%ebx # move the __ebx output to %ebx. > > popl %ebx # pop saved %ebx. Clobbers __ebx output. > > ## InlineAsm End > > This happens because register '"ebx" is chosen for operand %1 which has > constraint "=r". The attached patch adds %ebx to the clobber list to > prevent this from happening. > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
