[LLVMbugs] [Bug 9837] New: Inline assembler dies on WindowMaker source file (wrlib/x86_specific.c)

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed May 4 02:14:35 PDT 2011


http://llvm.org/bugs/show_bug.cgi?id=9837

           Summary: Inline assembler dies on WindowMaker source file
                    (wrlib/x86_specific.c)
           Product: new-bugs
           Version: trunk
          Platform: PC
        OS/Version: FreeBSD
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: dimitry at andric.com
                CC: llvmbugs at cs.uiuc.edu


Created an attachment (id=6526)
 --> (http://llvm.org/bugs/attachment.cgi?id=6526)
Problematic inline assembly from WindowMaker

Clang's inline assembler, as of r130836, dies on this file, when
compiling it for i386:

http://hg.windowmaker.info/wmaker/file/7accebd7c65b/wrlib/x86_specific.c

with the following error:

==================================================
fatal error: error in backend: Ran out of registers during register allocation!
Please check your inline asm statement for invalid constraints:
INLINEASM <es:pushl %ebx
        movl  $7, %eax
        movl  $8, %ebx
        movl  $9, %ecx
        movw  %ax, $16
        movw  %bx, $17
        movw  %cx, $18
        movw  $$0,  $19
        movq  $16, %mm6
        movl $$0x00040004, $16
        movl $$0x00040004, $18
        movq $16, %mm7
        movl $$0x00070007, $16
        movl $$0x00070007, $18
        movq $16, %mm5
        movl $$0x00050005, $16
        movl $$0x00050005, $18
        movq $16, %mm4
        movl $$0x00030003, $16
        movl $$0x00030003, $18
        movq $16, %mm3
        movl $0, %esi
.LoopYa:
        movl $13, %eax
        movl %eax, $26
        movl $14, %eax
        decl %eax
        movl %eax, $14
        js .Enda
        andl $$1, %eax
        jz .LoopY_1a
.LoopY_0a:
        movl $2, %ebx
        movl %ebx, $25
        movl $3, %eax
        movl %eax, $24
        jmp .LoopXa
.LoopY_1a:
        movl $3, %ebx
        movl %ebx, $25
        movl $2, %eax
        movl %eax, $24
        .align 16
.LoopXa:
        movq (%ebx), %mm1
        punpcklbw (%esi), %mm0
        psrlw $$8, %mm0
        paddusb %mm1, %mm0
        movq %mm0, $20
        movzwl $20, %ecx
        movl $4, %edi
        leal (%edi, %ecx, 2), %eax
        movw (%eax), %dx
        movw %dx, $16
        movzwl $21, %ecx
        movl $5, %edi
        leal (%edi, %ecx, 2), %eax
        movw (%eax), %dx
        movw %dx, $17
        movzwl $22, %ecx
        movl $6, %edi
        leal (%edi, %ecx, 2), %eax
        movw (%eax), %dx
        movw %dx, $18
        movw $$0, $19
        movq $16, %mm1
        pmullw %mm6, %mm1
        psubsw %mm1, %mm0
        movl $25, %ebx
        movq %mm0, %mm1
        pmullw %mm5, %mm1
        psrlw %mm7, %mm1
        paddw 8(%ebx), %mm1
        movq %mm1, 8(%ebx)
        movl $24, %ebx
        movq %mm0, %mm1
        pmullw %mm4, %mm1
        psrlw %mm7, %mm1
        paddw -8(%ebx), %mm1
        movq %mm1, -8(%ebx)
        movq %mm0, %mm1
        pmullw %mm3, %mm1
        psrlw %mm7, %mm1
        paddw 8(%ebx), %mm1
        movq %mm1, (%ebx)
        psrlw %mm7, %mm0
        movq %mm0, 8(%ebx)
        movl $10, %ecx
        movw $16, %ax
        shlw %cl, %ax
        movl $11, %ecx
        movw $17, %bx
        shlw %cl, %bx
        orw %bx, %ax
        movl $12, %ecx
        movw $18, %bx
        shlw %cl, %bx
        orw %bx, %ax
        movl $1, %edx
        movw %ax, (%edx)
        addl $$2, %edx
        movl %edx, $1
        addl $$8, $24
        movl $25, %ebx
        addl $$8, %ebx
        movl %ebx, $25
        addl $$4, %esi
        decl $26
        jnz .LoopXa
        addl $15, %edx
        movl %edx, $1
        jmp .LoopYa
.Enda:
        emms
        popl %ebx
        > [sideeffect], 44, <fi#0>, 1, %noreg, 0, %noreg, 44, <fi#1>, 1,
%noreg, 0, %noreg, 44, <fi#2>, 1, %noreg, 0, %noreg, 44, <fi#3>, 1, %noreg, 0,
%noreg, 44, <fi#4>, 1, %noreg, 0, %noreg, 44, <fi#5>, 1, %noreg, 0, %noreg, 44,
<fi#6>, 1, %noreg, 0, %noreg, 44, <fi#7>, 1, %noreg, 0, %noreg, 44, <fi#8>, 1,
%noreg, 0, %noreg, 44, <fi#9>, 1, %noreg, 0, %noreg, 44, <fi#10>, 1, %noreg, 0,
%noreg, 44, <fi#11>, 1, %noreg, 0, %noreg, 44, <fi#12>, 1, %noreg, 0, %noreg,
44, <fi#13>, 1, %noreg, 0, %noreg, 44, <fi#14>, 1, %noreg, 0, %noreg, 44,
<fi#15>, 1, %noreg, 0, %noreg, 44, %EBX, 1, %noreg, 0, %noreg, 44, %EBP, 1,
%noreg, 0, %noreg, 44, %vreg40, 1, %noreg, 0, %noreg, 44, %vreg36, 1, %noreg,
0, %noreg, 44, %vreg34, 1, %noreg, 0, %noreg, 44, %vreg32, 1, %noreg, 0,
%noreg, 44, %vreg29, 1, %noreg, 0, %noreg, 44, %vreg25, 1, %noreg, 0, %noreg,
44, <fi#18>, 1, %noreg, 0, %noreg, 44, <fi#19>, 1, %noreg, 0, %noreg, 44,
<fi#20>, 1, %noreg, 0, %noreg, 14, %AX<earlyclobber,imp-def>, 14,
%CX<earlyclobber,imp-def>, 14, %DX<earlyclobber,imp-def>, 14,
%SI<earlyclobber,imp-def>, 14, %DI<earlyclobber,imp-def>, 14,
%EFLAGS<earlyclobber,imp-def>, <<badref>>;
GR32:%vreg40,%vreg36,%vreg34,%vreg32,%vreg29,%vreg25
==================================================

The problematic function is x86_mmx_TrueColor_32_to_16(), which I will
add as a testcase (wmasm.c).

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list