Machine-Specific Register — Änderungen 6018 → 6655

Zeile 7: Zeile 7:
 
<c>uint64_t rdmsr(uint32_t msr)
 
<c>uint64_t rdmsr(uint32_t msr)
 
{
 
{
−
  uint32_t lomsr, himsr;
+
    uint32_t low, high;
−
  uint64_t content;
 
  
−
  __asm__ __volatile__ ("rdmsr":"=a"(lomsr),"=d"(himsr):"c"(msr));
+
    __asm__ __volatile__ ("rdmsr" :
 +
                          "=a" (low), "=d" (high) :
 +
                          "c" (msr));
  
−
  content = himsr;
+
    return ((uint64_t)high << 32) | low;
−
  content <<= 32;
 
−
  content |= lomsr;
 
−
  return content;
 
 
}
 
}
  
−
void wrmsr(uint32_t msr, uint64_t value)
+
void wrmsr(uint32_t msr,
 +
          uint64_t value)
 
{
 
{
−
  uint32_t lomsr, himsr;
+
    uint32_t low = value & 0xFFFFFFFF;
 +
    uint32_t high = value >> 32;
  
−
  lomsr = value & 0xFFFFFFFF;
+
    __asm__ __volatile__ ("wrmsr" ::
−
  himsr = value >> 32;
+
                          "a"(low), "c"(msr), "d"(high));
−
  __asm__ __volatile__ ("wrmsr"::"a"(lomsr),"c"(msr),"d"(himsr));
 
 
}</c>
 
}</c>