sys_io: x86: Make sys_in/sys_out fitting properly in other functions
Let the compiler decide about the registers to use, depending on which functions those are called from (as they might be already in use or not). Change-Id: I00afa0f82c740c8ea70133d85ab67e9cb117187d Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
parent
6ba5c09d23
commit
47369555b8
1 changed files with 18 additions and 6 deletions
|
@ -239,7 +239,9 @@ static inline __attribute__((always_inline))
|
||||||
static inline __attribute__((always_inline))
|
static inline __attribute__((always_inline))
|
||||||
void sys_out8(uint8_t data, io_port_t port)
|
void sys_out8(uint8_t data, io_port_t port)
|
||||||
{
|
{
|
||||||
__asm__ volatile("outb %%al, %%dx;\n\t" : : "a"(data), "d"(port));
|
__asm__ volatile("outb %b0, %w1;\n\t"
|
||||||
|
:
|
||||||
|
: "a"(data), "Nd"(port));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -248,7 +250,9 @@ static inline __attribute__((always_inline))
|
||||||
{
|
{
|
||||||
uint8_t ret;
|
uint8_t ret;
|
||||||
|
|
||||||
__asm__ volatile("inb %%dx, %%al;\n\t" : "=a"(ret) : "d"(port));
|
__asm__ volatile("inb %w1, %b0;\n\t"
|
||||||
|
: "=a"(ret)
|
||||||
|
: "Nd"(port));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,7 +260,9 @@ static inline __attribute__((always_inline))
|
||||||
static inline __attribute__((always_inline))
|
static inline __attribute__((always_inline))
|
||||||
void sys_out16(uint16_t data, io_port_t port)
|
void sys_out16(uint16_t data, io_port_t port)
|
||||||
{
|
{
|
||||||
__asm__ volatile("outw %%ax, %%dx;\n\t" : : "a"(data), "d"(port));
|
__asm__ volatile("outw %w0, %w1;\n\t"
|
||||||
|
:
|
||||||
|
: "a"(data), "Nd"(port));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -265,7 +271,9 @@ static inline __attribute__((always_inline))
|
||||||
{
|
{
|
||||||
uint16_t ret;
|
uint16_t ret;
|
||||||
|
|
||||||
__asm__ volatile("inw %%dx, %%ax;\n\t" : "=a"(ret) : "d"(port));
|
__asm__ volatile("inw %w1, %w0;\n\t"
|
||||||
|
: "=a"(ret)
|
||||||
|
: "Nd"(port));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,7 +281,9 @@ static inline __attribute__((always_inline))
|
||||||
static inline __attribute__((always_inline))
|
static inline __attribute__((always_inline))
|
||||||
void sys_out32(uint32_t data, io_port_t port)
|
void sys_out32(uint32_t data, io_port_t port)
|
||||||
{
|
{
|
||||||
__asm__ volatile("outl %%eax, %%dx;\n\t" : : "a"(data), "d"(port));
|
__asm__ volatile("outl %0, %w1;\n\t"
|
||||||
|
:
|
||||||
|
: "a"(data), "Nd"(port));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -282,7 +292,9 @@ static inline __attribute__((always_inline))
|
||||||
{
|
{
|
||||||
uint32_t ret;
|
uint32_t ret;
|
||||||
|
|
||||||
__asm__ volatile("inl %%dx, %%eax;\n\t" : "=a"(ret) : "d"(port));
|
__asm__ volatile("inl %w1, %0;\n\t"
|
||||||
|
: "=a"(ret)
|
||||||
|
: "Nd"(port));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue