require '_h2ph_pre.ph'; no warnings 'redefine'; unless(defined(&__ASM_ARM_BITOPS_H)) { eval 'sub __ASM_ARM_BITOPS_H () {1;}' unless defined(&__ASM_ARM_BITOPS_H); if(defined(&__KERNEL__)) { require 'linux/compiler.ph'; require 'asm/system.ph'; eval 'sub smp_mb__before_clear_bit () { eval q( &mb()); }' unless defined(&smp_mb__before_clear_bit); eval 'sub smp_mb__after_clear_bit () { eval q( &mb()); }' unless defined(&smp_mb__after_clear_bit); eval 'sub ____atomic_clear_bit { my($bit,$p) = @_; eval q({ my $flags; my $mask = 1 << ($bit & 31); $p += $bit >> 5; &local_irq_save( $flags); *$p &= ~ $mask; &local_irq_restore( $flags); }); }' unless defined(&____atomic_clear_bit); eval 'sub ____atomic_change_bit { my($bit,$p) = @_; eval q({ my $flags; my $mask = 1 << ($bit & 31); $p += $bit >> 5; &local_irq_save( $flags); *$p ^= $mask; &local_irq_restore( $flags); }); }' unless defined(&____atomic_change_bit); eval 'sub ____atomic_test_and_set_bit { my($bit,$p) = @_; eval q({ my $flags; my $res; my $mask = 1 << ($bit & 31); $p += $bit >> 5; &local_irq_save( $flags); $res = *$p; *$p = $res | $mask; &local_irq_restore( $flags); $res & $mask; }); }' unless defined(&____atomic_test_and_set_bit); eval 'sub ____atomic_test_and_clear_bit { my($bit,$p) = @_; eval q({ my $flags; my $res; my $mask = 1 << ($bit & 31); $p += $bit >> 5; &local_irq_save( $flags); $res = *$p; *$p = $res & ~ $mask; &local_irq_restore( $flags); $res & $mask; }); }' unless defined(&____atomic_test_and_clear_bit); eval 'sub ____atomic_test_and_change_bit { my($bit,$p) = @_; eval q({ my $flags; my $res; my $mask = 1 << ($bit & 31); $p += $bit >> 5; &local_irq_save( $flags); $res = *$p; *$p = $res ^ $mask; &local_irq_restore( $flags); $res & $mask; }); }' unless defined(&____atomic_test_and_change_bit); require 'asm-generic/bitops/non-atomic.ph'; unless(defined(&CONFIG_SMP)) { eval 'sub ATOMIC_BITOP_LE { my($name,$nr,$p) = @_; eval q(( &__builtin_constant_p($nr) ? &____atomic_$name($nr, $p) : &_$name &_le($nr,$p))); }' unless defined(&ATOMIC_BITOP_LE); eval 'sub ATOMIC_BITOP_BE { my($name,$nr,$p) = @_; eval q(( &__builtin_constant_p($nr) ? &____atomic_$name($nr, $p) : &_$name &_be($nr,$p))); }' unless defined(&ATOMIC_BITOP_BE); } else { eval 'sub ATOMIC_BITOP_LE { my($name,$nr,$p) = @_; eval q( &_$name &_le($nr,$p)); }' unless defined(&ATOMIC_BITOP_LE); eval 'sub ATOMIC_BITOP_BE { my($name,$nr,$p) = @_; eval q( &_$name &_be($nr,$p)); }' unless defined(&ATOMIC_BITOP_BE); } eval 'sub NONATOMIC_BITOP { my($name,$nr,$p) = @_; eval q(( &____nonatomic_$name($nr, $p))); }' unless defined(&NONATOMIC_BITOP); unless(defined(&__ARMEB__)) { eval 'sub set_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_LE( &set_bit,$nr,$p)); }' unless defined(&set_bit); eval 'sub clear_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_LE( &clear_bit,$nr,$p)); }' unless defined(&clear_bit); eval 'sub change_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_LE( &change_bit,$nr,$p)); }' unless defined(&change_bit); eval 'sub test_and_set_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_LE( &test_and_set_bit,$nr,$p)); }' unless defined(&test_and_set_bit); eval 'sub test_and_clear_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_LE( &test_and_clear_bit,$nr,$p)); }' unless defined(&test_and_clear_bit); eval 'sub test_and_change_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_LE( &test_and_change_bit,$nr,$p)); }' unless defined(&test_and_change_bit); eval 'sub find_first_zero_bit { my($p,$sz) = @_; eval q( &_find_first_zero_bit_le($p,$sz)); }' unless defined(&find_first_zero_bit); eval 'sub find_next_zero_bit { my($p,$sz,$off) = @_; eval q( &_find_next_zero_bit_le($p,$sz,$off)); }' unless defined(&find_next_zero_bit); eval 'sub find_first_bit { my($p,$sz) = @_; eval q( &_find_first_bit_le($p,$sz)); }' unless defined(&find_first_bit); eval 'sub find_next_bit { my($p,$sz,$off) = @_; eval q( &_find_next_bit_le($p,$sz,$off)); }' unless defined(&find_next_bit); eval 'sub WORD_BITOFF_TO_LE { my($x) = @_; eval q((($x))); }' unless defined(&WORD_BITOFF_TO_LE); } else { eval 'sub set_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_BE( &set_bit,$nr,$p)); }' unless defined(&set_bit); eval 'sub clear_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_BE( &clear_bit,$nr,$p)); }' unless defined(&clear_bit); eval 'sub change_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_BE( &change_bit,$nr,$p)); }' unless defined(&change_bit); eval 'sub test_and_set_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_BE( &test_and_set_bit,$nr,$p)); }' unless defined(&test_and_set_bit); eval 'sub test_and_clear_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_BE( &test_and_clear_bit,$nr,$p)); }' unless defined(&test_and_clear_bit); eval 'sub test_and_change_bit { my($nr,$p) = @_; eval q( &ATOMIC_BITOP_BE( &test_and_change_bit,$nr,$p)); }' unless defined(&test_and_change_bit); eval 'sub find_first_zero_bit { my($p,$sz) = @_; eval q( &_find_first_zero_bit_be($p,$sz)); }' unless defined(&find_first_zero_bit); eval 'sub find_next_zero_bit { my($p,$sz,$off) = @_; eval q( &_find_next_zero_bit_be($p,$sz,$off)); }' unless defined(&find_next_zero_bit); eval 'sub find_first_bit { my($p,$sz) = @_; eval q( &_find_first_bit_be($p,$sz)); }' unless defined(&find_first_bit); eval 'sub find_next_bit { my($p,$sz,$off) = @_; eval q( &_find_next_bit_be($p,$sz,$off)); }' unless defined(&find_next_bit); eval 'sub WORD_BITOFF_TO_LE { my($x) = @_; eval q((($x) ^ 0x18)); }' unless defined(&WORD_BITOFF_TO_LE); } if((defined(&__LINUX_ARM_ARCH__) ? &__LINUX_ARM_ARCH__ : 0) < 5) { require 'asm-generic/bitops/ffz.ph'; require 'asm-generic/bitops/__ffs.ph'; require 'asm-generic/bitops/fls.ph'; require 'asm-generic/bitops/ffs.ph'; } else { eval 'sub constant_fls { my($x) = @_; eval q({ \'int\' &r = 32; &if (!$x) 0; &if (!($x & 0xffff0000)) { $x <<= 16; &r -= 16; } &if (!($x & 0xff000000)) { $x <<= 8; &r -= 8; } &if (!($x & 0xf0000000)) { $x <<= 4; &r -= 4; } &if (!($x & 0xc0000000)) { $x <<= 2; &r -= 2; } &if (!($x & 0x80000000)) { $x <<= 1; &r -= 1; } &r; }); }' unless defined(&constant_fls); eval 'sub fls { my($x) = @_; eval q(( &__builtin_constant_p($x) ? &constant_fls($x) : ({ \'int\' &__r; &asm(\\"clz\\\\t%0, %1\\" : \\"=r\\"( &__r) : \\"r\\"($x) : \\"cc\\"); 32- &__r; }) )); }' unless defined(&fls); eval 'sub ffs { my($x) = @_; eval q(({ \'unsigned long __t\' = ($x); &fls( &__t & - &__t); })); }' unless defined(&ffs); eval 'sub __ffs { my($x) = @_; eval q(( &ffs($x) - 1)); }' unless defined(&__ffs); eval 'sub ffz { my($x) = @_; eval q( &__ffs( ~($x) )); }' unless defined(&ffz); } require 'asm-generic/bitops/fls64.ph'; require 'asm-generic/bitops/sched.ph'; require 'asm-generic/bitops/hweight.ph'; eval 'sub ext2_set_bit { my($nr,$p) = @_; eval q( &__test_and_set_bit( &WORD_BITOFF_TO_LE($nr), ($p))); }' unless defined(&ext2_set_bit); eval 'sub ext2_set_bit_atomic { my($lock,$nr,$p) = @_; eval q( &test_and_set_bit( &WORD_BITOFF_TO_LE($nr), ($p))); }' unless defined(&ext2_set_bit_atomic); eval 'sub ext2_clear_bit { my($nr,$p) = @_; eval q( &__test_and_clear_bit( &WORD_BITOFF_TO_LE($nr), ($p))); }' unless defined(&ext2_clear_bit); eval 'sub ext2_clear_bit_atomic { my($lock,$nr,$p) = @_; eval q( &test_and_clear_bit( &WORD_BITOFF_TO_LE($nr), ($p))); }' unless defined(&ext2_clear_bit_atomic); eval 'sub ext2_test_bit { my($nr,$p) = @_; eval q( &test_bit( &WORD_BITOFF_TO_LE($nr), ($p))); }' unless defined(&ext2_test_bit); eval 'sub ext2_find_first_zero_bit { my($p,$sz) = @_; eval q( &_find_first_zero_bit_le($p,$sz)); }' unless defined(&ext2_find_first_zero_bit); eval 'sub ext2_find_next_zero_bit { my($p,$sz,$off) = @_; eval q( &_find_next_zero_bit_le($p,$sz,$off)); }' unless defined(&ext2_find_next_zero_bit); eval 'sub minix_set_bit { my($nr,$p) = @_; eval q( &__set_bit( &WORD_BITOFF_TO_LE($nr), ($p))); }' unless defined(&minix_set_bit); eval 'sub minix_test_bit { my($nr,$p) = @_; eval q( &test_bit( &WORD_BITOFF_TO_LE($nr), ($p))); }' unless defined(&minix_test_bit); eval 'sub minix_test_and_set_bit { my($nr,$p) = @_; eval q( &__test_and_set_bit( &WORD_BITOFF_TO_LE($nr), ($p))); }' unless defined(&minix_test_and_set_bit); eval 'sub minix_test_and_clear_bit { my($nr,$p) = @_; eval q( &__test_and_clear_bit( &WORD_BITOFF_TO_LE($nr), ($p))); }' unless defined(&minix_test_and_clear_bit); eval 'sub minix_find_first_zero_bit { my($p,$sz) = @_; eval q( &_find_first_zero_bit_le($p,$sz)); }' unless defined(&minix_find_first_zero_bit); } } 1;