require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&_AARCH64_PTE_H_)) {
    eval 'sub _AARCH64_PTE_H_ () {1;}' unless defined(&_AARCH64_PTE_H_);
    if(defined(&__aarch64__)) {
	unless(defined(&_LOCORE)) {
	    unless(defined(&__BSD_PTENTRY_T__)) {
		eval 'sub __BSD_PTENTRY_T__ () {1;}' unless defined(&__BSD_PTENTRY_T__);
		eval 'sub PRIxPTE () { &PRIx64;}' unless defined(&PRIxPTE);
	    }
	}
	eval 'sub LX_TBL_NSTABLE () { &__BIT(63);}' unless defined(&LX_TBL_NSTABLE);
	eval 'sub LX_TBL_APTABLE () { &__BITS(62,61);}' unless defined(&LX_TBL_APTABLE);
	eval 'sub LX_TBL_APTABLE_NOEFFECT () { &__SHIFTIN(0, &LX_TBL_APTABLE);}' unless defined(&LX_TBL_APTABLE_NOEFFECT);
	eval 'sub LX_TBL_APTABLE_EL0_NOACCESS () { &__SHIFTIN(1, &LX_TBL_APTABLE);}' unless defined(&LX_TBL_APTABLE_EL0_NOACCESS);
	eval 'sub LX_TBL_APTABLE_RO () { &__SHIFTIN(2, &LX_TBL_APTABLE);}' unless defined(&LX_TBL_APTABLE_RO);
	eval 'sub LX_TBL_APTABLE_RO_EL0_NOREAD () { &__SHIFTIN(3, &LX_TBL_APTABLE);}' unless defined(&LX_TBL_APTABLE_RO_EL0_NOREAD);
	eval 'sub LX_TBL_UXNTABLE () { &__BIT(60);}' unless defined(&LX_TBL_UXNTABLE);
	eval 'sub LX_TBL_PXNTABLE () { &__BIT(59);}' unless defined(&LX_TBL_PXNTABLE);
	eval 'sub LX_BLKPAG_OS () { &__BITS(58, 55);}' unless defined(&LX_BLKPAG_OS);
	eval 'sub LX_BLKPAG_OS_0 () { &__SHIFTIN(1, &LX_BLKPAG_OS);}' unless defined(&LX_BLKPAG_OS_0);
	eval 'sub LX_BLKPAG_OS_1 () { &__SHIFTIN(2, &LX_BLKPAG_OS);}' unless defined(&LX_BLKPAG_OS_1);
	eval 'sub LX_BLKPAG_OS_2 () { &__SHIFTIN(4, &LX_BLKPAG_OS);}' unless defined(&LX_BLKPAG_OS_2);
	eval 'sub LX_BLKPAG_OS_3 () { &__SHIFTIN(8, &LX_BLKPAG_OS);}' unless defined(&LX_BLKPAG_OS_3);
	eval 'sub LX_BLKPAG_UXN () { &__BIT(54);}' unless defined(&LX_BLKPAG_UXN);
	eval 'sub LX_BLKPAG_PXN () { &__BIT(53);}' unless defined(&LX_BLKPAG_PXN);
	eval 'sub LX_BLKPAG_CONTIG () { &__BIT(52);}' unless defined(&LX_BLKPAG_CONTIG);
	eval 'sub LX_BLKPAG_DBM () { &__BIT(51);}' unless defined(&LX_BLKPAG_DBM);
	eval 'sub LX_BLKPAG_GP () { &__BIT(50);}' unless defined(&LX_BLKPAG_GP);
	eval 'sub LX_TBL_PA () { &__BITS(47, 12);}' unless defined(&LX_TBL_PA);
	eval 'sub LX_BLKPAG_OA () { &__BITS(47, 12);}' unless defined(&LX_BLKPAG_OA);
	eval 'sub LX_BLKPAG_NG () { &__BIT(11);}' unless defined(&LX_BLKPAG_NG);
	eval 'sub LX_BLKPAG_AF () { &__BIT(10);}' unless defined(&LX_BLKPAG_AF);
	eval 'sub LX_BLKPAG_SH () { &__BITS(9,8);}' unless defined(&LX_BLKPAG_SH);
	eval 'sub LX_BLKPAG_SH_NS () { &__SHIFTIN(0, &LX_BLKPAG_SH);}' unless defined(&LX_BLKPAG_SH_NS);
	eval 'sub LX_BLKPAG_SH_OS () { &__SHIFTIN(2, &LX_BLKPAG_SH);}' unless defined(&LX_BLKPAG_SH_OS);
	eval 'sub LX_BLKPAG_SH_IS () { &__SHIFTIN(3, &LX_BLKPAG_SH);}' unless defined(&LX_BLKPAG_SH_IS);
	eval 'sub LX_BLKPAG_AP () { &__BIT(7);}' unless defined(&LX_BLKPAG_AP);
	eval 'sub LX_BLKPAG_AP_RW () { &__SHIFTIN(0, &LX_BLKPAG_AP);}' unless defined(&LX_BLKPAG_AP_RW);
	eval 'sub LX_BLKPAG_AP_RO () { &__SHIFTIN(1, &LX_BLKPAG_AP);}' unless defined(&LX_BLKPAG_AP_RO);
	eval 'sub LX_BLKPAG_APUSER () { &__BIT(6);}' unless defined(&LX_BLKPAG_APUSER);
	eval 'sub LX_BLKPAG_NS () { &__BIT(5);}' unless defined(&LX_BLKPAG_NS);
	eval 'sub LX_BLKPAG_ATTR_INDX () { &__BITS(4,2);}' unless defined(&LX_BLKPAG_ATTR_INDX);
	eval 'sub LX_BLKPAG_ATTR_INDX_0 () { &__SHIFTIN(0, &LX_BLKPAG_ATTR_INDX);}' unless defined(&LX_BLKPAG_ATTR_INDX_0);
	eval 'sub LX_BLKPAG_ATTR_INDX_1 () { &__SHIFTIN(1, &LX_BLKPAG_ATTR_INDX);}' unless defined(&LX_BLKPAG_ATTR_INDX_1);
	eval 'sub LX_BLKPAG_ATTR_INDX_2 () { &__SHIFTIN(2, &LX_BLKPAG_ATTR_INDX);}' unless defined(&LX_BLKPAG_ATTR_INDX_2);
	eval 'sub LX_BLKPAG_ATTR_INDX_3 () { &__SHIFTIN(3, &LX_BLKPAG_ATTR_INDX);}' unless defined(&LX_BLKPAG_ATTR_INDX_3);
	eval 'sub LX_TYPE () { &__BIT(1);}' unless defined(&LX_TYPE);
	eval 'sub LX_TYPE_BLK () { &__SHIFTIN(0,  &LX_TYPE);}' unless defined(&LX_TYPE_BLK);
	eval 'sub LX_TYPE_TBL () { &__SHIFTIN(1,  &LX_TYPE);}' unless defined(&LX_TYPE_TBL);
	eval 'sub L3_TYPE_PAG () { &__SHIFTIN(1,  &LX_TYPE);}' unless defined(&L3_TYPE_PAG);
	eval 'sub LX_VALID () { &__BIT(0);}' unless defined(&LX_VALID);
	eval 'sub L1_BLK_OA () { &__BITS(47, 30);}' unless defined(&L1_BLK_OA);
	eval 'sub L2_BLK_OA () { &__BITS(47, 21);}' unless defined(&L2_BLK_OA);
	eval 'sub L3_PAG_OA () { &__BITS(47, 12);}' unless defined(&L3_PAG_OA);
	eval 'sub AARCH64_MAX_PA () { &__BIT(48);}' unless defined(&AARCH64_MAX_PA);
	eval 'sub L0_SHIFT () {39;}' unless defined(&L0_SHIFT);
	eval 'sub L0_ADDR_BITS () { &__BITS(47,39);}' unless defined(&L0_ADDR_BITS);
	eval 'sub L0_SIZE () {(1 <<  &L0_SHIFT);}' unless defined(&L0_SIZE);
	eval 'sub L0_OFFSET () {( &L0_SIZE - 1);}' unless defined(&L0_OFFSET);
	eval 'sub L0_FRAME () {(~ &L0_OFFSET);}' unless defined(&L0_FRAME);
	eval 'sub L0_TABLE () {( &LX_TYPE_TBL |  &LX_VALID);}' unless defined(&L0_TABLE);
	eval 'sub L1_SHIFT () {30;}' unless defined(&L1_SHIFT);
	eval 'sub L1_ADDR_BITS () { &__BITS(38,30);}' unless defined(&L1_ADDR_BITS);
	eval 'sub L1_SIZE () {(1 <<  &L1_SHIFT);}' unless defined(&L1_SIZE);
	eval 'sub L1_OFFSET () {( &L1_SIZE - 1);}' unless defined(&L1_OFFSET);
	eval 'sub L1_FRAME () {(~ &L1_OFFSET);}' unless defined(&L1_FRAME);
	eval 'sub L1_BLOCK () {( &LX_TYPE_BLK |  &LX_VALID);}' unless defined(&L1_BLOCK);
	eval 'sub L1_TABLE () {( &LX_TYPE_TBL |  &LX_VALID);}' unless defined(&L1_TABLE);
	eval 'sub L2_SHIFT () {21;}' unless defined(&L2_SHIFT);
	eval 'sub L2_ADDR_BITS () { &__BITS(29,21);}' unless defined(&L2_ADDR_BITS);
	eval 'sub L2_SIZE () {(1 <<  &L2_SHIFT);}' unless defined(&L2_SIZE);
	eval 'sub L2_OFFSET () {( &L2_SIZE - 1);}' unless defined(&L2_OFFSET);
	eval 'sub L2_FRAME () {(~ &L2_OFFSET);}' unless defined(&L2_FRAME);
	eval 'sub L2_BLOCK () {( &LX_TYPE_BLK |  &LX_VALID);}' unless defined(&L2_BLOCK);
	eval 'sub L2_TABLE () {( &LX_TYPE_TBL |  &LX_VALID);}' unless defined(&L2_TABLE);
	eval 'sub L2_BLOCK_MASK () { &__BITS(47,21);}' unless defined(&L2_BLOCK_MASK);
	eval 'sub L3_SHIFT () {12;}' unless defined(&L3_SHIFT);
	eval 'sub L3_ADDR_BITS () { &__BITS(20,12);}' unless defined(&L3_ADDR_BITS);
	eval 'sub L3_SIZE () {(1 <<  &L3_SHIFT);}' unless defined(&L3_SIZE);
	eval 'sub L3_OFFSET () {( &L3_SIZE - 1);}' unless defined(&L3_OFFSET);
	eval 'sub L3_FRAME () {(~ &L3_OFFSET);}' unless defined(&L3_FRAME);
	eval 'sub L3_PAGE () {( &L3_TYPE_PAG |  &LX_VALID);}' unless defined(&L3_PAGE);
	eval 'sub Ln_ENTRIES_SHIFT () {9;}' unless defined(&Ln_ENTRIES_SHIFT);
	eval 'sub Ln_ENTRIES () {(1<<  &Ln_ENTRIES_SHIFT);}' unless defined(&Ln_ENTRIES);
	eval 'sub Ln_TABLE_SIZE () {(8<<  &Ln_ENTRIES_SHIFT);}' unless defined(&Ln_TABLE_SIZE);
    }
 elsif(defined(&__arm__)) {
	require 'arm/pte.ph';
    }
}
1;
