static __inline void outb(unsigned char __val, unsigned short __port) {
    __asm__ volatile("outb %0,%1"
                     :
                     : "a"(__val), "dN"(__port));
}

static __inline void outw(unsigned short __val, unsigned short __port) {
    __asm__ volatile("outw %0,%1"
                     :
                     : "a"(__val), "dN"(__port));
}

static __inline void outl(unsigned int __val, unsigned short __port) {
    __asm__ volatile("outl %0,%1"
                     :
                     : "a"(__val), "dN"(__port));
}

static __inline unsigned char inb(unsigned short __port) {
    unsigned char __val;
    __asm__ volatile("inb %1,%0"
                     : "=a"(__val)
                     : "dN"(__port));
    return __val;
}

static __inline unsigned short inw(unsigned short __port) {
    unsigned short __val;
    __asm__ volatile("inw %1,%0"
                     : "=a"(__val)
                     : "dN"(__port));
    return __val;
}

static __inline unsigned int inl(unsigned short __port) {
    unsigned int __val;
    __asm__ volatile("inl %1,%0"
                     : "=a"(__val)
                     : "dN"(__port));
    return __val;
}

static __inline void outsb(unsigned short __port, const void* __buf, unsigned long __n) {
    __asm__ volatile("cld; rep; outsb"
                     : "+S"(__buf), "+c"(__n)
                     : "d"(__port));
}

static __inline void outsw(unsigned short __port, const void* __buf, unsigned long __n) {
    __asm__ volatile("cld; rep; outsw"
                     : "+S"(__buf), "+c"(__n)
                     : "d"(__port));
}

static __inline void outsl(unsigned short __port, const void* __buf, unsigned long __n) {
    __asm__ volatile("cld; rep; outsl"
                     : "+S"(__buf), "+c"(__n)
                     : "d"(__port));
}

static __inline void insb(unsigned short __port, void* __buf, unsigned long __n) {
    __asm__ volatile("cld; rep; insb"
                     : "+D"(__buf), "+c"(__n)
                     : "d"(__port));
}

static __inline void insw(unsigned short __port, void* __buf, unsigned long __n) {
    __asm__ volatile("cld; rep; insw"
                     : "+D"(__buf), "+c"(__n)
                     : "d"(__port));
}

static __inline void insl(unsigned short __port, void* __buf, unsigned long __n) {
    __asm__ volatile("cld; rep; insl"
                     : "+D"(__buf), "+c"(__n)
                     : "d"(__port));
}
