Re: cr5-6 registers on i386

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Clemens Kolbitsch <clemens.kol@xxxxxx> writes:

> short question: if i include an assembler instruction like the following
> 
> __asm("movl %0, %%cr5" : : "r"(0x123));
> 
> or
> 
> __asm("movl %0, %%cr6" : : "r"(0x123));
> 
> in a c-program, i do not get any errors when compiling on a x86(i386) cpu. the 
> binary codes of the generated statements also differ from
> 
> __asm("movl %0, %%cr3" : : "r"(0x123));
> 
> (their third hex-numbers are different - what makes sense)... the thing i 
> don't understand is: are there registers cr5-cr20 (starting at cr-something 
> near 20, i start getting errors that there is no such register).
> 
> Is that a bug caused by the multi-platform capability of gcc or are there such 
> registers on i386 that i am not aware of (e.g. the intel manual does not name 
> them!!)

The x86 architecture has control registers.  They are not all
implemented in hardware; I believe the only ones which are implemented
are %cr0 through %cr4 and %cr8 (64-bit only).  However, as the
relevant opcodes are not (yet) used for anything else, the GNU
assembler and disassembler will recognize other registers.  You will
presumably get an exception if you try to actually run the program on
x86 hardware.

See the "Control Registers" section in volume 3 of the IA32 manuals,
which are available somewhere on the Intel web site.

Ian

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux