Re: [PARPORT] Programming challenge!

Philip Blundell (
Mon, 19 Oct 1998 14:39:52 +0200

>Attached is a code fragment from the ppa driver modified to use parport calls
>rather than by direct IO. Direct IO limits the driver to PC style hardware,
>whereas parport calls allows for the driver to be generic for all hardware
>platforms. Your job is to adjust the C code such that the optimum assembler
>code is generated. Ideally this involves the minimum memory fetches to
>evaluate the parallel port address.

FWIW, I just compiled this fragment myself (using egcs 1.1, incidentally) and
the code looks fairly reasonable already. You can save a couple of
instructions here and there but I don't think it will make much difference in
real life -- certainly not enough to worry about at the moment. As I said, if
you have timings that show it really is a big deal then I'd be interested to
see the.

I've attached the assembler output that I get.


        .file "dc.c"
        .version "01.01"
        .align 16
..globl ppa_nibble_in
        .type ppa_nibble_in,@function
        subl $4,%esp
        pushl %ebp
        pushl %edi
        pushl %esi
        pushl %ebx
        movl 24(%esp),%edi
        movl 28(%esp),%esi
        movl 32(%esp),%ebx
        testl %ebx,%ebx
        je .L915
        .p2align 4,,7
        movw (%edi),%cx
        movw %cx,18(%esp)
        addw $2,18(%esp)
        movb $4,%al
        movw 18(%esp),%dx
        outb %al,%dx
        movl %ecx,%ebp
        incl %ebp
        movl %ebp,%edx
        inb %dx,%al
        movb %al,%cl
        movb $6,%al
        movw 18(%esp),%dx
        outb %al,%dx
        movl %ebp,%edx
        inb %dx,%al
        andb $240,%cl
        shrb $4,%al
        orb %cl,%al
        movb %al,(%esi)
        incl %esi
        decl %ebx
        jnz .L917
        movl $1,%eax
        popl %ebx
        popl %esi
        popl %edi
        popl %ebp
        popl %ecx
        .size ppa_nibble_in,.Lfe1-ppa_nibble_in
        .ident "GCC: (GNU) egcs-2.91.57 19980901 (egcs-1.1 release)"

-- To unsubscribe, send mail to: --
-- with the single word "unsubscribe" in the body of the message. --

This archive was generated by hypermail 2.0b3 on Wed 30 Dec 1998 - 10:18:38 EST