2.2.19pre hfmodem/refclock.c asm statement error
PATCH 1/1 2.2.19pre hfmodem/refclock.c asm statement error
drivers/char/hfmodem/refclock.c fails to compile with "gcc version 2.95.2 20000220 (Debian GNU/Linux)", but compiles normally with "gcc version 2.7.2.3". GNU assembler 2.9.5 was used in both cases. Here is the error message:
refclock.c: In function `hfmodem_refclock_current':
refclock.c:136: Invalid `asm' statement:
refclock.c:136: fixed or forbidden register 0 (ax) was spilled for class AREG.
Here is the offending line:__asm__("mull %2" : "=d" (tmp2), "=a" (tmp4) : "m" (scale_rdtsc), "1" (tmp0) : "ax");
It appears that above code declares register eax as output and globbered register simultaneously. My gcc docs say: "You may not write a clobber description in a way that overlaps with an input or output operand." Below is a patch against 2.2.19pre16 to fix this. Please consider applying.
Regards,
Jari Ruusu <[email protected]>
drivers/char/hfmodem/refclock.c +1 -1
@@ -133,7 +133,7 @@ "subl %2,%%eax\n\t" "sbbl %3,%%edx\n\t" : "=&a" (tmp0), "=&d" (tmp1) : "m" (dev->clk.starttime_lo), "m" (dev->clk.starttime_hi)); - __asm__("mull %2" :"=d" (tmp2),"=a" (tmp4) :"m" (scale_rdtsc),"1" (tmp0) :"ax" ); + __asm__("mull %2" :"=d" (tmp2),"=a" (tmp4) :"m" (scale_rdtsc),"1" (tmp0)); __asm__("mull %1" :"=a" (tmp3) :"m" (scale_rdtsc),"a" (tmp1) :"dx" ); curtime = tmp2 + tmp3; goto time_known;