Revision af661ad1 target-i386/helper2.c

b/target-i386/helper2.c
670 670
#endif
671 671
        {
672 672
            /* XXX: load them when cr3 is loaded ? */
673
            pdpe_addr = ((env->cr[3] & ~0x1f) + ((addr >> 30) << 3)) & 
673
            pdpe_addr = ((env->cr[3] & ~0x1f) + ((addr >> 27) & 0x18)) & 
674 674
                env->a20_mask;
675 675
            pdpe = ldq_phys(pdpe_addr);
676 676
            if (!(pdpe & PG_PRESENT_MASK)) {
......
765 765
        uint32_t pde;
766 766

  
767 767
        /* page directory entry */
768
        pde_addr = ((env->cr[3] & ~0xfff) + ((addr >> 20) & ~3)) & 
768
        pde_addr = ((env->cr[3] & ~0xfff) + ((addr >> 20) & 0xffc)) & 
769 769
            env->a20_mask;
770 770
        pde = ldl_phys(pde_addr);
771 771
        if (!(pde & PG_PRESENT_MASK)) {
......
910 910
        } else 
911 911
#endif
912 912
        {
913
            pdpe_addr = ((env->cr[3] & ~0x1f) + ((addr >> 30) << 3)) & 
913
            pdpe_addr = ((env->cr[3] & ~0x1f) + ((addr >> 27) & 0x18)) & 
914 914
                env->a20_mask;
915 915
            pdpe = ldl_phys(pdpe_addr);
916 916
            if (!(pdpe & PG_PRESENT_MASK))
......
940 940
            page_size = 4096;
941 941
        } else {
942 942
            /* page directory entry */
943
            pde_addr = ((env->cr[3] & ~0xfff) + ((addr >> 20) & ~3)) & env->a20_mask;
943
            pde_addr = ((env->cr[3] & ~0xfff) + ((addr >> 20) & 0xffc)) & env->a20_mask;
944 944
            pde = ldl_phys(pde_addr);
945 945
            if (!(pde & PG_PRESENT_MASK)) 
946 946
                return -1;

Also available in: Unified diff