require '_h2ph_pre.ph';

no warnings 'redefine';

unless(defined(&_MIPS_PIO_H_)) {
    eval 'sub _MIPS_PIO_H_ () {1;}' unless defined(&_MIPS_PIO_H_);
    eval 'sub outb {
        my($a,$v) = @_;
	    eval q((*( &volatile \'unsigned char\'*)($a) = ($v)));
    }' unless defined(&outb);
    eval 'sub out8 {
        my($a,$v) = @_;
	    eval q((*( &volatile \'unsigned char\'*)($a) = ($v)));
    }' unless defined(&out8);
    eval 'sub outw {
        my($a,$v) = @_;
	    eval q((*( &volatile \'unsigned short\'*)($a) = ($v)));
    }' unless defined(&outw);
    eval 'sub out16 {
        my($a,$v) = @_;
	    eval q( &outw($a,$v));
    }' unless defined(&out16);
    eval 'sub outl {
        my($a,$v) = @_;
	    eval q((*( &volatile \'unsigned int\'*)($a) = ($v)));
    }' unless defined(&outl);
    eval 'sub out32 {
        my($a,$v) = @_;
	    eval q( &outl($a,$v));
    }' unless defined(&out32);
    eval 'sub inb {
        my($a) = @_;
	    eval q((*( &volatile \'unsigned char\'*)($a)));
    }' unless defined(&inb);
    eval 'sub in8 {
        my($a) = @_;
	    eval q((*( &volatile \'unsigned char\'*)($a)));
    }' unless defined(&in8);
    eval 'sub inw {
        my($a) = @_;
	    eval q((*( &volatile \'unsigned short\'*)($a)));
    }' unless defined(&inw);
    eval 'sub in16 {
        my($a) = @_;
	    eval q( &inw($a));
    }' unless defined(&in16);
    eval 'sub inl {
        my($a) = @_;
	    eval q((*( &volatile \'unsigned int\'*)($a)));
    }' unless defined(&inl);
    eval 'sub in32 {
        my($a) = @_;
	    eval q( &inl($a));
    }' unless defined(&in32);
    eval 'sub out8rb {
        my($a,$v) = @_;
	    eval q((*( &volatile \'unsigned char\'*)($a) = ($v)));
    }' unless defined(&out8rb);
    eval 'sub out16rb {
        my($a,$v) = @_;
	    eval q(( &__out16rb(( &volatile  &u_int16_t *)($a), $v)));
    }' unless defined(&out16rb);
    eval 'sub out32rb {
        my($a,$v) = @_;
	    eval q(( &__out32rb(( &volatile  &u_int32_t *)($a), $v)));
    }' unless defined(&out32rb);
    eval 'sub in8rb {
        my($a) = @_;
	    eval q((*( &volatile \'unsigned char\'*)($a)));
    }' unless defined(&in8rb);
    eval 'sub in16rb {
        my($a) = @_;
	    eval q(( &__in16rb(( &volatile  &u_int16_t *)($a))));
    }' unless defined(&in16rb);
    eval 'sub in32rb {
        my($a) = @_;
	    eval q(( &__in32rb(( &volatile  &u_int32_t *)($a))));
    }' unless defined(&in32rb);
    eval 'sub _swap_ {
        my($x) = @_;
	    eval q(((($x) >> 24) | (($x) << 24) | ((($x) >> 8) & 0xff00) | ((($x) & 0xff00) << 8)));
    }' unless defined(&_swap_);
    eval 'sub __out32rb {
        my($a,$v) = @_;
	    eval q(*$a;  &u_int32_t $v; {  &u_int32_t  &_v_ = $v;  &_v_ =  &_swap_( &_v_);  &out32($a,  &_v_); });
    }' unless defined(&__out32rb);
    eval 'sub __out16rb {
        my($a,$v) = @_;
	    eval q(*$a;  &u_int16_t $v; {  &u_int16_t  &_v_;  &_v_ = (($v >> 8) & 0xff) | ($v << 8);  &out16($a,  &_v_); });
    }' unless defined(&__out16rb);
    eval 'sub __in32rb {
        my($a) = @_;
	    eval q(*$a; {  &u_int32_t  &_v_;  &_v_ =  &in32($a);  &_v_ =  &_swap_( &_v_);  &_v_; });
    }' unless defined(&__in32rb);
    eval 'sub __in16rb {
        my($a) = @_;
	    eval q(*$a; {  &u_int16_t  &_v_;  &_v_ =  &in16($a);  &_v_ = (( &_v_ >> 8) & 0xff) | ( &_v_ << 8);  &_v_; });
    }' unless defined(&__in16rb);
}
1;
