title: Why is the x86 CR1 control register reserved?
body: <p>Starting with the i386 CPU, Intel processors have exposed <em>control registers</em> to allow the kernel to configure the processor and specify characteristics of the currently executing task/process/thread. According to the <a href="https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-system-programming-manual-325384.html" rel="noreferrer">Intel Systems Programming Manual</a> (section 2-13), the <code>CR1</code> control register is "Reserved". That is, the kernel manipulating control register <code>CR1</code> results in undefined behavior. As the articles indicates, there are also <code>CR2, CR3, CR4</code> and <code>CR8</code> control registers, though they are <strong>not</strong> reserved.</p>
  
  <p><strong>Why is <code>CR1</code> reserved?</strong> It is strange that Intel would introduce a reserved control register, and then start adding non-reserved control registers thereafter rather than simply adding functionality to <code>CR1</code> as doing so would not cause any backwards compatibility breaks (that's the whole point of keeping it reserved). <a href="http://www.pagetable.com/?p=364" rel="noreferrer">http://www.pagetable.com/?p=364</a> speculates that <code>CR1</code> was kept reserved to have a second register available for architectural configuration, but as the article mentions, <code>CR4</code> was used instead when the i486 was introduced.</p>