diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2008-04-12 09:03:34 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2008-04-12 09:03:34 -0400 |
commit | 0257b4a572fae0d7275b06932854f1d52479420b (patch) | |
tree | 37cc753aabc29ae9234bf9adacdcc25e245ca5c8 /src/farptr.h | |
parent | 800eab5f246a158285b577b18f41d88822f8ccfc (diff) | |
download | seabios-0257b4a572fae0d7275b06932854f1d52479420b.tar.gz |
Fix asm dependencies on segment based writes.
The variable was marked as an input instead of an output.
This could cause gcc bugs - it also forced the asm to be volatile.
Diffstat (limited to 'src/farptr.h')
-rw-r--r-- | src/farptr.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/farptr.h b/src/farptr.h index 6a37460f..56219d29 100644 --- a/src/farptr.h +++ b/src/farptr.h @@ -29,14 +29,14 @@ extern u16 __segment_ES, __segment_CS, __segment_DS, __segment_SS; : "m"(var), "m"(__segment_ ## SEG)); \ __value; }) #define WRITE8_SEG(SEG, var, value) \ - __asm__("movb %b0, %%" #SEG ":%1" : \ - : "Q"(value), "m"(var), "m"(__segment_ ## SEG)) + __asm__("movb %b1, %%" #SEG ":%0" : "=m"(var) \ + : "Q"(value), "m"(__segment_ ## SEG)) #define WRITE16_SEG(SEG, var, value) \ - __asm__("movw %w0, %%" #SEG ":%1" : \ - : "r"(value), "m"(var), "m"(__segment_ ## SEG)) + __asm__("movw %w1, %%" #SEG ":%0" : "=m"(var) \ + : "r"(value), "m"(__segment_ ## SEG)) #define WRITE32_SEG(SEG, var, value) \ - __asm__("movl %0, %%" #SEG ":%1" : \ - : "r"(value), "m"(var), "m"(__segment_ ## SEG)) + __asm__("movl %1, %%" #SEG ":%0" : "=m"(var) \ + : "r"(value), "m"(__segment_ ## SEG)) // Low level macros for getting/setting a segment register. #define __SET_SEG(SEG, value) \ |