diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/exec/score/cpu/m68k/cpu.h | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/c/src/exec/score/cpu/m68k/cpu.h b/c/src/exec/score/cpu/m68k/cpu.h index 0b36533562..566e479f3a 100644 --- a/c/src/exec/score/cpu/m68k/cpu.h +++ b/c/src/exec/score/cpu/m68k/cpu.h @@ -328,20 +328,18 @@ EXTERN void *_CPU_Interrupt_stack_high; { \ extern const unsigned char __log2table[256]; \ \ - (_output) = 0; /* avoids warnings */ \ - asm ( "move.w %1,%0\n"\ - "\tandi.w #0xff00,%0\n"\ - "\tjbne 0f\n"\ - "\tmoveq.l #0,%0\n"\ - "\tmove.b (%2,%1.w),%0\n"\ - "\tjbra 1f\n"\ - "0:\tmoveq.l #8,%0\n"\ - "\tlsr.w #8,%1\n"\ - "\tadd.b (%2,%1.w),%0\n"\ - "1:"\ - : "=&d" ((_output)) \ - : "d" ((_value)), "ao" (__log2table) \ - : "cc" ) ; \ + asm ( " tst.b %1\n" /* check for bits in ls byte */ \ + " beq.s 0f\n" /* branch if no bits set */ \ + " moveq.l #0,%0\n" /* set up for bits 0..7 */ \ + " andi.w #0x00ff,%1\n" /* clear ms byte for add inst */ \ + " bra.s 1f\n" /* go add */ \ + "0: moveq.l #8,%0\n" /* set up for bits 8..15 */ \ + " lsr.w #8,%1\n" /* shift ms byte to ls byte, */ \ + /* filling ms byte with 0s */ \ + "1: add.b (%2,%1.w),%0\n" /* add offset for bit pattern */ \ + : "=&d" ((_output)) \ + : "d" ((_value)), "ao" (__log2table) \ + : "cc" ) ; \ } #endif @@ -385,6 +383,19 @@ void _CPU_Initialize( ); /* + * _CPU_ISR_install_raw_handler + * + * This routine installs a "raw" interrupt handler directly into the + * processor's vector table. + */ + +void _CPU_ISR_install_raw_handler( + unsigned32 vector, + proc_ptr new_handler, + proc_ptr *old_handler +); + +/* * _CPU_ISR_install_vector * * This routine installs an interrupt vector. |