# HG changeset patch # User nickg # Date 1233747227 0 # Node ID 403e17f06bec760ea65874f82a1730ed9f118a62 # Parent b8eabd9f6ab3cf2459f33cc2aa1d61b3b460482c Add support for overriding bit index macros. diff --git a/packages/hal/mips/arch/current/ChangeLog b/packages/hal/mips/arch/current/ChangeLog --- a/packages/hal/mips/arch/current/ChangeLog +++ b/packages/hal/mips/arch/current/ChangeLog @@ -1,3 +1,8 @@ +2009-02-04 Nick Garnett + + * include/hal_arch.h: Ifdef bit index macros to allow them to be + overridden by variant or platform HAL. + 2004-05-27 Gary Thomas * src/redboot_linux_exec.c (do_exec): Be sensitive to value in diff --git a/packages/hal/mips/arch/current/include/hal_arch.h b/packages/hal/mips/arch/current/include/hal_arch.h --- a/packages/hal/mips/arch/current/include/hal_arch.h +++ b/packages/hal/mips/arch/current/include/hal_arch.h @@ -125,6 +125,8 @@ externC void cyg_hal_deliver_exception( //-------------------------------------------------------------------------- // Bit manipulation macros +#ifndef CYGHWR_HAL_BIT_INDEXES_DEFINED + externC cyg_uint32 hal_lsbit_index(cyg_uint32 mask); externC cyg_uint32 hal_msbit_index(cyg_uint32 mask); @@ -132,6 +134,8 @@ externC cyg_uint32 hal_msbit_index(cyg_u #define HAL_MSBIT_INDEX(index, mask) index = hal_msbit_index(mask); +#endif + //-------------------------------------------------------------------------- // Context Initialization diff --git a/packages/hal/mips/mips32/current/ChangeLog b/packages/hal/mips/mips32/current/ChangeLog --- a/packages/hal/mips/mips32/current/ChangeLog +++ b/packages/hal/mips/mips32/current/ChangeLog @@ -1,3 +1,8 @@ +2009-02-04 Nick Garnett + + * include/var_arch.h (HAL_LSBIT_INDEX, HAL_MSBIT_INDEX): Provide + overrides for these macros that use the clz instruction. + 2009-01-31 Bart Veer * cdl/hal_mips_mips32.cdl: update compiler flags for gcc 4.x diff --git a/packages/hal/mips/mips32/current/include/var_arch.h b/packages/hal/mips/mips32/current/include/var_arch.h --- a/packages/hal/mips/mips32/current/include/var_arch.h +++ b/packages/hal/mips/mips32/current/include/var_arch.h @@ -85,6 +85,43 @@ HAL_SET_CP0_REGISTER_32( _regval_, _cp0_regno_, _cp0_regsel_ ) //-------------------------------------------------------------------------- +// Bit manipulation macros + +#ifndef CYGHWR_HAL_BIT_INDEXES_DEFINED + +//-------------------------------------------------------- +// Determine the index of the ls bit of the supplied mask. + +#define HAL_LSBIT_INDEX(_index_, _mask_) \ + CYG_MACRO_START \ + unsigned _reg_; \ + \ + _reg_ = (_mask_); \ + _reg_ &= -_reg_; \ + asm volatile ("clz %0, %1\n" \ + : "=r" (_reg_) \ + : "r" (_reg_) ); \ + (_index_) = 31 - _reg_; \ + CYG_MACRO_END + +//-------------------------------------------------------- +// Determine the index of the ms bit of the supplied mask. + +#define HAL_MSBIT_INDEX(_index_, _mask_) \ + CYG_MACRO_START \ + unsigned _reg_; \ + \ + _reg_ = (_mask_); \ + asm volatile ("clz %0, %1\n" \ + : "=r" (_reg_) \ + : "r" (_reg_) ); \ + (_index_) = 31 - _reg_; \ + CYG_MACRO_END + +#define CYGHWR_HAL_BIT_INDEXES_DEFINED +#endif + +//-------------------------------------------------------------------------- #ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS /* System Control Coprocessor (CP0) exception processing registers */