x86: Make reading / writing of CRx registers 64bit proof
Change-Id: I782007fe9754ec3ae0b5dc31e7865f7e46cfbc74 Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Signed-off-by: Scott Duplichan <scott@notabs.org> Reviewed-on: http://review.coreboot.org/10576 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Marc Jones <marc.jones@se-eng.com>
This commit is contained in:
parent
7c35af2bc3
commit
bef400b96c
|
@ -32,46 +32,55 @@
|
|||
#define COMPILER_BARRIER "memory"
|
||||
#endif
|
||||
|
||||
static alwaysinline uint32_t read_cr0(void)
|
||||
#ifdef __x86_64__
|
||||
#define CRx_TYPE uint64_t
|
||||
#define CRx_IN "q"
|
||||
#define CRx_RET "=q"
|
||||
#else
|
||||
#define CRx_TYPE uint32_t
|
||||
#define CRx_IN "r"
|
||||
#define CRx_RET "=r"
|
||||
#endif
|
||||
static alwaysinline CRx_TYPE read_cr0(void)
|
||||
{
|
||||
uint32_t value;
|
||||
CRx_TYPE value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr0, %0"
|
||||
: "=r" (value)
|
||||
: CRx_RET (value)
|
||||
:
|
||||
: COMPILER_BARRIER
|
||||
);
|
||||
return value;
|
||||
}
|
||||
|
||||
static alwaysinline void write_cr0(uint32_t data)
|
||||
static alwaysinline void write_cr0(CRx_TYPE data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %0, %%cr0"
|
||||
:
|
||||
: "r" (data)
|
||||
: CRx_IN (data)
|
||||
: COMPILER_BARRIER
|
||||
);
|
||||
}
|
||||
|
||||
static alwaysinline uint32_t read_cr4(void)
|
||||
static alwaysinline CRx_TYPE read_cr4(void)
|
||||
{
|
||||
uint32_t value;
|
||||
CRx_TYPE value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr4, %0"
|
||||
: "=r" (value)
|
||||
: CRx_RET (value)
|
||||
:
|
||||
: COMPILER_BARRIER
|
||||
);
|
||||
return value;
|
||||
}
|
||||
|
||||
static alwaysinline void write_cr4(uint32_t data)
|
||||
static alwaysinline void write_cr4(CRx_TYPE data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %0, %%cr4"
|
||||
:
|
||||
: "r" (data)
|
||||
: CRx_IN (data)
|
||||
: COMPILER_BARRIER
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue