Date: Thu, 5 Jul 2001 18:33:14 -0400 Message-Id: <200107052233.SAA11297@envy.delorie.com> X-Authentication-Warning: envy.delorie.com: dj set sender to dj AT envy DOT delorie DOT com using -f From: DJ Delorie To: djgpp AT delorie DOT com CC: Niklas_Pson AT hotmail DOT com In-reply-to: <90D5EC920NiklasPsonnospamhotm@130.235.20.4> (Niklas_Pson AT nosmam DOT hotmail DOT com) Subject: Re: Help!! Inline asm with DJGPP References: <90D5EC920NiklasPsonnospamhotm AT 130 DOT 235 DOT 20 DOT 4> Reply-To: djgpp AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk The problem is that you're declaring cx to be both an input operand and a clobber. The solution, taken from linux's headers, is to declare three temporary variables and match them as *outputs*, with the constraints. Then, make your input constraints be dups of those: int tmp1, tmp2, tmp3; asm volatile ( " cld ; " " rep ; " " movsl ; " : "=&S" (tmp1), "=&D" (tmp2), "=&c" (tmp3) : "0" (src_cur_line_pos), "1" (dest_cur_line_pos), "2" (c2) : "memory" ); The '=' means it's an output, '&' means that the value changes before the instruction is done using its inputs, and '0'..'2' means "same register as operand N". The "volatile" tells gcc to never delete, move, or modify the asm, else the optimizer would remove it (because you're not using any of the output values). The "memory" tells gcc that the asm changes memory, so it should be pessimistic about optimizing memory accesses around this asm.