Changeset 38ffa0c in rtems for c/src/exec/score/cpu/m68k/cpu.h


Ignore:
Timestamp:
Sep 19, 1995, 6:32:18 PM (26 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
84ee59f5
Parents:
3652ad35
Message:

Incorporated the submission from John S. Gwynne
<jsg@…> of the rest of the 68000-ish support
for interrupt handling and bfffo support, the two BSPs he submitted
(efi68k and efi332), and SGI Irix 5.3 host support.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/exec/score/cpu/m68k/cpu.h

    r3652ad35 r38ffa0c  
    147147EXTERN void               *_CPU_Interrupt_stack_low;
    148148EXTERN void               *_CPU_Interrupt_stack_high;
     149      /* points to jsr-exception-table in targets wo/ VBR register */
     150extern char               _VBR[];
    149151
    150152/* constants */
     
    325327#else
    326328
     329/* duplicates BFFFO results for 16 bits (i.e., 15-(_priority) in
     330   _CPU_Priority_Bits_index is not needed), handles the 0 case, and
     331   does not molest _value -- jsg */
     332#ifndef m68000
    327333#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
    328334  { \
    329     extern const unsigned char __log2table[256]; \
     335    extern const unsigned char __BFFFOtable[256]; \
     336    register int dumby; \
    330337    \
    331     asm     ( "   tst.b   %1\n"           /* check for bits in ls byte */ \
    332               "   beq.s   0f\n"           /* branch if no bits set */ \
    333               "   moveq.l #0,%0\n"        /* set up for bits 0..7 */ \
    334               "   andi.w  #0x00ff,%1\n"   /* clear ms byte for add inst */ \
    335               "   bra.s   1f\n"           /* go add */ \
    336               "0: moveq.l #8,%0\n"        /* set up for bits 8..15 */ \
    337               "   lsr.w   #8,%1\n"        /* shift ms byte to ls byte, */ \
    338                                           /*   filling ms byte with 0s */ \
    339               "1: add.b   (%2,%1.w),%0\n" /* add offset for bit pattern */ \
    340                : "=&d" ((_output)) \
    341                : "d" ((_value)), "ao" (__log2table) \
    342                : "cc" ) ; \
    343   }
     338    asm volatile ( "   move.w  %2,%1\n"        \
     339       "   lsr.w   #8,%1\n"        \
     340       "   beq.s   1f\n"           \
     341       "   move.b  (%3,%1.w),%0\n" \
     342       "   extb.l  %0\n"           \
     343       "   bra.s   0f\n"           \
     344       "1: moveq.l #8,%0\n"        \
     345       "   add.b   (%3,%2.w),%0\n" \
     346       "0:\n"                      \
     347       : "=&d" ((_output)), "=&d" ((dumby)) \
     348       : "d" ((_value)), "ao" ((__BFFFOtable)) \
     349       : "cc" ) ; \
     350  }
     351#else
     352#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
     353  { \
     354    extern const unsigned char __BFFFOtable[256]; \
     355    register int dumby; \
     356    \
     357    asm volatile ( "   move.w  %2,%1\n"        \
     358       "   lsr.w   #8,%1\n"        \
     359       "   beq.s   1f\n"           \
     360       "   move.b  (%3,%1.w),%0\n" \
     361       "   and.l   #0x000000ff,%0\n"\
     362       "   bra.s   0f\n"           \
     363       "1: moveq.l #8,%0\n"        \
     364       "   add.b   (%3,%2.w),%0\n" \
     365       "0:\n"                      \
     366       : "=&d" ((_output)), "=&d" ((dumby)) \
     367       : "d" ((_value)), "ao" ((__BFFFOtable)) \
     368       : "cc" ) ; \
     369  }
     370#endif /* m68000 */
    344371
    345372#endif
     
    360387  ( 0x8000 >> (_bit_number) )
    361388
    362 #if ( M68K_HAS_BFFFO == 1 )
    363389#define _CPU_Priority_Bits_index( _priority ) \
    364390  (_priority)
    365 #else
    366 #define _CPU_Priority_Bits_index( _priority ) \
    367   (15 - (_priority))
    368 #endif
    369391
    370392/* end of Priority handler macros */
Note: See TracChangeset for help on using the changeset viewer.