require '_h2ph_pre.ph';

no warnings 'redefine';

unless(defined(&_X86_CACHEINFO_H)) {
    eval 'sub _X86_CACHEINFO_H () {1;}' unless defined(&_X86_CACHEINFO_H);
    eval 'sub CAI_ITLB () {0;}' unless defined(&CAI_ITLB);
    eval 'sub CAI_ITLB2 () {1;}' unless defined(&CAI_ITLB2);
    eval 'sub CAI_DTLB () {2;}' unless defined(&CAI_DTLB);
    eval 'sub CAI_DTLB2 () {3;}' unless defined(&CAI_DTLB2);
    eval 'sub CAI_ICACHE () {4;}' unless defined(&CAI_ICACHE);
    eval 'sub CAI_DCACHE () {5;}' unless defined(&CAI_DCACHE);
    eval 'sub CAI_L2CACHE () {6;}' unless defined(&CAI_L2CACHE);
    eval 'sub CAI_COUNT () {7;}' unless defined(&CAI_COUNT);
    eval 'sub AMD_L1_EAX_DTLB_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 24) & 0xff));
    }' unless defined(&AMD_L1_EAX_DTLB_ASSOC);
    eval 'sub AMD_L1_EAX_DTLB_ENTRIES {
        my($x) = @_;
	    eval q(((($x) >> 16) & 0xff));
    }' unless defined(&AMD_L1_EAX_DTLB_ENTRIES);
    eval 'sub AMD_L1_EAX_ITLB_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 8) & 0xff));
    }' unless defined(&AMD_L1_EAX_ITLB_ASSOC);
    eval 'sub AMD_L1_EAX_ITLB_ENTRIES {
        my($x) = @_;
	    eval q(( ($x) & 0xff));
    }' unless defined(&AMD_L1_EAX_ITLB_ENTRIES);
    eval 'sub AMD_L1_EBX_DTLB_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 24) & 0xff));
    }' unless defined(&AMD_L1_EBX_DTLB_ASSOC);
    eval 'sub AMD_L1_EBX_DTLB_ENTRIES {
        my($x) = @_;
	    eval q(((($x) >> 16) & 0xff));
    }' unless defined(&AMD_L1_EBX_DTLB_ENTRIES);
    eval 'sub AMD_L1_EBX_ITLB_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 8) & 0xff));
    }' unless defined(&AMD_L1_EBX_ITLB_ASSOC);
    eval 'sub AMD_L1_EBX_ITLB_ENTRIES {
        my($x) = @_;
	    eval q(( ($x) & 0xff));
    }' unless defined(&AMD_L1_EBX_ITLB_ENTRIES);
    eval 'sub AMD_L1_ECX_DC_SIZE {
        my($x) = @_;
	    eval q((((($x) >> 24) & 0xff) * 1024));
    }' unless defined(&AMD_L1_ECX_DC_SIZE);
    eval 'sub AMD_L1_ECX_DC_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 16) & 0xff));
    }' unless defined(&AMD_L1_ECX_DC_ASSOC);
    eval 'sub AMD_L1_ECX_DC_LPT {
        my($x) = @_;
	    eval q(((($x) >> 8) & 0xff));
    }' unless defined(&AMD_L1_ECX_DC_LPT);
    eval 'sub AMD_L1_ECX_DC_LS {
        my($x) = @_;
	    eval q(( ($x) & 0xff));
    }' unless defined(&AMD_L1_ECX_DC_LS);
    eval 'sub AMD_L1_EDX_IC_SIZE {
        my($x) = @_;
	    eval q((((($x) >> 24) & 0xff) * 1024));
    }' unless defined(&AMD_L1_EDX_IC_SIZE);
    eval 'sub AMD_L1_EDX_IC_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 16) & 0xff));
    }' unless defined(&AMD_L1_EDX_IC_ASSOC);
    eval 'sub AMD_L1_EDX_IC_LPT {
        my($x) = @_;
	    eval q(((($x) >> 8) & 0xff));
    }' unless defined(&AMD_L1_EDX_IC_LPT);
    eval 'sub AMD_L1_EDX_IC_LS {
        my($x) = @_;
	    eval q(( ($x) & 0xff));
    }' unless defined(&AMD_L1_EDX_IC_LS);
    eval 'sub AMD_L2_EAX_DTLB_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 28) & 0xf));
    }' unless defined(&AMD_L2_EAX_DTLB_ASSOC);
    eval 'sub AMD_L2_EAX_DTLB_ENTRIES {
        my($x) = @_;
	    eval q(((($x) >> 16) & 0xfff));
    }' unless defined(&AMD_L2_EAX_DTLB_ENTRIES);
    eval 'sub AMD_L2_EAX_IUTLB_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 12) & 0xf));
    }' unless defined(&AMD_L2_EAX_IUTLB_ASSOC);
    eval 'sub AMD_L2_EAX_IUTLB_ENTRIES {
        my($x) = @_;
	    eval q(( ($x) & 0xfff));
    }' unless defined(&AMD_L2_EAX_IUTLB_ENTRIES);
    eval 'sub AMD_L2_EBX_DTLB_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 28) & 0xf));
    }' unless defined(&AMD_L2_EBX_DTLB_ASSOC);
    eval 'sub AMD_L2_EBX_DTLB_ENTRIES {
        my($x) = @_;
	    eval q(((($x) >> 16) & 0xfff));
    }' unless defined(&AMD_L2_EBX_DTLB_ENTRIES);
    eval 'sub AMD_L2_EBX_IUTLB_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 12) & 0xf));
    }' unless defined(&AMD_L2_EBX_IUTLB_ASSOC);
    eval 'sub AMD_L2_EBX_IUTLB_ENTRIES {
        my($x) = @_;
	    eval q(( ($x) & 0xfff));
    }' unless defined(&AMD_L2_EBX_IUTLB_ENTRIES);
    eval 'sub AMD_L2_ECX_C_SIZE {
        my($x) = @_;
	    eval q((((($x) >> 16) & 0xffff) * 1024));
    }' unless defined(&AMD_L2_ECX_C_SIZE);
    eval 'sub AMD_L2_ECX_C_ASSOC {
        my($x) = @_;
	    eval q(((($x) >> 12) & 0xf));
    }' unless defined(&AMD_L2_ECX_C_ASSOC);
    eval 'sub AMD_L2_ECX_C_LPT {
        my($x) = @_;
	    eval q(((($x) >> 8) & 0xf));
    }' unless defined(&AMD_L2_ECX_C_LPT);
    eval 'sub AMD_L2_ECX_C_LS {
        my($x) = @_;
	    eval q(( ($x) & 0xff));
    }' unless defined(&AMD_L2_ECX_C_LS);
}
1;
