Skip to content
  • Krzysztof Helt's avatar
    x86: do not allow to optimize flag_is_changeable_p() (rev. 2) · 94f6bac1
    Krzysztof Helt authored
    
    
    The flag_is_changeable_p() is used by
    has_cpuid_p() which can return different results
    in the code sequence below:
    
     if (!have_cpuid_p())
          identify_cpu_without_cpuid(c);
    
      /* cyrix could have cpuid enabled via c_identify()*/
      if (!have_cpuid_p())
          return;
    
    Otherwise, the gcc 3.4.6 optimizes these two calls
    into one which make the code not working correctly.
    
    Cyrix cpus have the CPUID instruction enabled before
    the second call to the have_cpuid_p() but
    it is not detected due to the gcc optimization.
    Thus the ARR registers (mtrr like) are not detected
    on such a cpu.
    
    Signed-off-by: default avatarKrzysztof Helt <krzysztof.h1@wp.pl>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    94f6bac1