grunwald@flute.cs.uiuc.edu (Dirk Grunwald) (05/31/89)
this is gcc 1.35, stock, installed in SysV-386 machine. I want to use the ``rep insd'' instruction on the 386. This takes arguments in registers AD, AC and EDI. i386.md states that it has the following restrictions: `d' -> AD `c' -> AC `D' -> EDI However, tm-i386.h shows that REG_CLASS_FROMLETTER doesn't recognize a regclass for `D', so I assume that the documentation is out of date. Furthermore, when I try to use the explicit register number (5), I get bogus results -- the address of my input string buffer is store in ebx, which won't work. Any workarounds welcome, please response by mail. Example follows. --------------------foo.c-------------------- static inline void foo(int port, char *bar, int count) { asm volatile("cld"); asm volatile("rep insd " : : "rd" (port), "rc" (count), "r5" (bar) ); } void bar() { char str[128]; foo(10, str, 128); } --------------------foo.s-------------------- .... movl $10,%eax leal -128(%ebp),%edx movl $128,%ecx leal -128(%ebp),%ebx <<<< this should be %edi /APP cld rep insd .... -- Dirk Grunwald Univ. of Illinois grunwald@flute.cs.uiuc.edu