Re: Wanted: A decent assembler

Richard B. Johnson (root@chaos.analogic.com)
Wed, 23 Apr 2003 10:24:26 -0400 (EDT)


On Wed, 23 Apr 2003, Chuck Ebbert wrote:

>
> Chuck Ebbert wrote:
>
> > <mangled asm source>
>
> Should be:
>
>
> .if NR_IRQS gt 16 # only build this for IO-APIC
> .align 8,0x90 # make ENTRY have exact address
> irq_align=8 # start with 8-byte alignment
> ENTRY(high_irq_entries_start)
> .rept NR_IRQS-16 # the rest of the stubs
> .align irq_align,0x90
> 1: pushl $vector-256 # 5-byte instruction
> jmp common_interrupt # 2 or 5 bytes (8 or 32-bit offset)
> 2:
> .if 2b-1b > 8 # offset changed to 32-bit
> irq_align=16 # switch to 16-byte alignment
> .endif
> .data
> .long 1b
> .text
> vector=vector+1
> .endr
> .endif
>
>
\

Well the source has several errors. I fixed a couple and made
the jump (temporarily) a fixed-length jump. The remaining error
is the improper construction of the label "vector", which needs
to be fixed and I need to take a work-break. I think all you
need to do is pre-define it, i.e., like the following:

NR_IRQS = 32

.if NR_IRQS > 16 # only build this for IO-APIC
.align 8,0x90 # make ENTRY have exact address
irq_align=8 # start with 8-byte alignment
#ENTRY(high_irq_entries_start)
vector = 0; # Define as a variable, not label
.rept NR_IRQS-16 # the rest of the stubs
.align irq_align,0x90
1: pushl $vector # 5-byte instruction
ljmp common_interrupt # 2 or 5 bytes (8 or 32-bit offset)
2:
.if 2b-1b > 8 # offset changed to 32-bit
irq_align=16 # switch to 16-byte alignment
.endif
.data
.long 1b
.text
vector=vector+1
.endr
.endif

Cheers,
Dick Johnson
Penguin : Linux version 2.4.20 on an i686 machine (797.90 BogoMips).
Why is the government concerned about the lunatic fringe? Think about it.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/