From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 549 invoked by alias); 22 Mar 2004 04:50:31 -0000 Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org Received: (qmail 538 invoked from network); 22 Mar 2004 04:50:30 -0000 Received: from unknown (HELO yosemite.airs.com) (209.128.65.135) by sources.redhat.com with SMTP; 22 Mar 2004 04:50:30 -0000 Received: (qmail 9388 invoked by uid 10); 22 Mar 2004 04:50:29 -0000 Received: (qmail 25313 invoked by uid 500); 22 Mar 2004 04:50:21 -0000 From: Ian Lance Taylor To: sashti srinivasan Cc: gcc-help@gcc.gnu.org Subject: Re: Machine Instruction encoding References: <20040322041057.53838.qmail@web8107.mail.in.yahoo.com> Date: Mon, 22 Mar 2004 08:20:00 -0000 In-Reply-To: <20040322041057.53838.qmail@web8107.mail.in.yahoo.com> Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2004-03/txt/msg00196.txt.bz2 sashti srinivasan writes: > The following is a line in rtems' timer driver > source. > asm volatile(".byte 0x0F, 0x31" : "=A" (result)); > > RTEMS mailing list clarified me saying that it is > encoding of pentium rdtsc instruction. Please tell me > how the above statement differs from the one below. > > asm("rdtsc result"); > (Assuming the instruction mnemonic is correct) First I'll note that the assembly instruction rdtsc does not take an argument. The only legal asm would be asm ("rdtsc"). I assume that the RTEMS example uses ".byte" because it was written before all assemblers supported rdtsc. Or something like that. The difference between the plan asm and the one which appears above is that the one which appears above explicitly states that the instruction stores a result into %eax/%edx, and gcc will store that value into the variable "result". > Only thing I found from gnu documentation for gcc > that '=' specifies that result is a output of the > instruction. According to the document, there must > be an instruction pnemonic string first inside the > paranthesis. But there is the directive .byte > there. Does this mean the opcode directly? In this case .byte is the instruction mnemonic. The '=' does indeed specify the result of the instruction. > The document also says that the arguments can be > referred like %0, %1 etc. But there is nothing like > this here. Is it because, since there is only one > operand, it is assumed to follow the opcode? No. The instruction takes no operand. The instruction always stores its value into %eax/%edx. See the Intel documentation, which is available on the web. Ian