#endif /* !CONFIG_64BIT */
 
        header->pmode_cr0 = read_cr0();
-       header->pmode_cr4 = read_cr4();
+       header->pmode_cr4 = read_cr4_safe();
        header->realmode_flags = acpi_realmode_flags;
        header->real_magic = 0x12345678;
 
 
        ret
 
 ENTRY(restore_image)
-       movl    resume_pg_dir, %ecx
-       subl    $__PAGE_OFFSET, %ecx
-       movl    %ecx, %cr3
+       movl    resume_pg_dir, %eax
+       subl    $__PAGE_OFFSET, %eax
+       movl    %eax, %cr3
 
        movl    restore_pblist, %edx
        .p2align 4,,7
 
 done:
        /* go back to the original page tables */
-       movl    $swapper_pg_dir, %ecx
-       subl    $__PAGE_OFFSET, %ecx
-       movl    %ecx, %cr3
+       movl    $swapper_pg_dir, %eax
+       subl    $__PAGE_OFFSET, %eax
+       movl    %eax, %cr3
        /* Flush TLB, including "global" things (vmalloc) */
-       movl    mmu_cr4_features, %eax
-       movl    %eax, %edx
+       movl    mmu_cr4_features, %ecx
+       jecxz   1f      # cr4 Pentium and higher, skip if zero
+       movl    %ecx, %edx
        andl    $~(1<<7), %edx;  # PGE
        movl    %edx, %cr4;  # turn off PGE
-       movl    %cr3, %ecx;  # flush TLB
-       movl    %ecx, %cr3
-       movl    %eax, %cr4;  # turn PGE back on
+1:
+       movl    %cr3, %eax;  # flush TLB
+       movl    %eax, %cr3
+       jecxz   1f      # cr4 Pentium and higher, skip if zero
+       movl    %ecx, %cr4;  # turn PGE back on
+1:
 
        movl saved_context_esp, %esp
        movl saved_context_ebp, %ebp