From 068a9ad88f4e55a2e766999e2f3322d780a660be Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 15 Jan 2001 04:18:58 +0000 Subject: Implement an optimization for INTREN/INTRDIS that bde pointed out last time I tinkered around here. Since INTREN is called from the interrupt critical path now, it should not be too expensive. In this case, we look at the bits being changed to decide which 8 bit IO port to write to rather than unconditionally writing to both. I could probably have gone further and only done the write if the bits actually changed, but that seemed overkill for the usual case in interrupt threads. [an outb is rather expensive when it has to cross the ISA bus] --- sys/i386/isa/icu_ipl.s | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'sys/i386') diff --git a/sys/i386/isa/icu_ipl.s b/sys/i386/isa/icu_ipl.s index 3af9f66..6ea9052 100644 --- a/sys/i386/isa/icu_ipl.s +++ b/sys/i386/isa/icu_ipl.s @@ -55,19 +55,33 @@ _imen: .long HWI_MASK ENTRY(INTREN) movl 4(%esp), %eax + movl %eax, %ecx notl %eax andl %eax, imen movl imen, %eax + testb %cl, %cl + je 1f outb %al, $(IO_ICU1 + MASK_OFFSET) +1: + testb %ch, %ch + je 2f shrl $8, %eax outb %al, $(IO_ICU2 + MASK_OFFSET) +2: ret ENTRY(INTRDIS) movl 4(%esp), %eax + movl %eax, %ecx orl %eax, imen movl imen, %eax + testb %cl, %cl + je 1f outb %al, $(IO_ICU1 + MASK_OFFSET) +1: + testb %ch, %ch + je 2f shrl $8, %eax outb %al, $(IO_ICU2 + MASK_OFFSET) +2: ret -- cgit v1.1