aboutsummaryrefslogtreecommitdiff
path: root/src/farptr.h
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2008-04-12 09:03:34 -0400
committerKevin O'Connor <kevin@koconnor.net>2008-04-12 09:03:34 -0400
commit0257b4a572fae0d7275b06932854f1d52479420b (patch)
tree37cc753aabc29ae9234bf9adacdcc25e245ca5c8 /src/farptr.h
parent800eab5f246a158285b577b18f41d88822f8ccfc (diff)
downloadseabios-hppa-0257b4a572fae0d7275b06932854f1d52479420b.zip
seabios-hppa-0257b4a572fae0d7275b06932854f1d52479420b.tar.gz
seabios-hppa-0257b4a572fae0d7275b06932854f1d52479420b.tar.bz2
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.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/farptr.h b/src/farptr.h
index 6a37460..56219d2 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) \