Clean inline assembly

This commit is contained in:
Baptiste Wicht 2013-11-04 20:00:19 +01:00
parent 3f3b388d61
commit 08a1fc21bb

View File

@ -2,20 +2,32 @@
uint8_t in_byte(uint16_t _port){
uint8_t rv;
__asm__ __volatile__ ("in %0, %1" : "=a" (rv) : "dN" (_port));
return rv;
}
void out_byte (uint16_t _port, uint8_t _data){
__asm__ __volatile__ ("out %0, %1" : : "dN" (_port), "a" (_data));
__asm__ __volatile__ ("in %[data], %[port]"
: [data] "=a" (rv)
: [port] "dN" (_port));
return rv;
}
uint16_t in_word(uint16_t _port){
uint16_t rv;
__asm__ __volatile__ ("in %0, %1" : "=a" (rv) : "dN" (_port));
__asm__ __volatile__ ("in %[data], %[port]"
: [data] "=a" (rv)
: [port] "dN" (_port));
return rv;
}
void out_word(uint16_t _port, uint16_t _data){
__asm__ __volatile__ ("out %0, %1" : : "dN" (_port), "a" (_data));
void out_byte (uint16_t _port, uint8_t _data){
__asm__ __volatile__ ("out %[port], %[data]"
: /* No outputs */
: [port] "dN" (_port), [data] "a" (_data));
}
void out_word(uint16_t _port, uint16_t _data){
__asm__ __volatile__ ("out %[port], %[data]"
: /* No outputs */
: [port] "dN" (_port), [data] "a" (_data));
}