From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id DEF72BBAF for ; Sun, 1 Nov 2009 21:06:49 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjwDADN57UpQRFuwWWdsb2JhbACbSAEWFQS7bYQ5BA X-IronPort-AV: E=Sophos;i="4.44,662,1249250400"; d="scan'208";a="37355941" Received: from furbychan.cocan.org ([80.68.91.176]) by mail3-smtp-sop.national.inria.fr with ESMTP; 01 Nov 2009 21:06:49 +0100 Received: from rich by furbychan.cocan.org with local (Exim 4.63) (envelope-from ) id 1N4ghM-00047X-Pc; Sun, 01 Nov 2009 20:06:48 +0000 Date: Sun, 1 Nov 2009 20:06:48 +0000 To: Adrien Cc: Caml Mailing List Subject: Re: [Caml-list] Binding C libraries which use variable arguments (stdarg.h) Message-ID: <20091101200648.GB15428@annexia.org> References: <666572260910281507q74cb1c1at157c9e3c86070c69@mail.gmail.com> <4AE8C987.8020100@starynkevitch.net> <666572260910291418p585b0aa9laadc14f6589c9772@mail.gmail.com> <4AEAB347.3060008@inria.fr> <666572260911010131x1b3c778bgc1c87879ca96a62d@mail.gmail.com> <87ljiqmrjy.fsf@mid.deneb.enyo.de> <666572260911010412n3f60bb21pc6e1d3bb70279f58@mail.gmail.com> <87r5sil9sz.fsf@mid.deneb.enyo.de> <666572260911010658r2eb8bdfbl9b06222079869c7b@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <666572260911010658r2eb8bdfbl9b06222079869c7b@mail.gmail.com> User-Agent: Mutt/1.5.13 (2006-08-11) From: Richard Jones X-Spam: no; 0.00; 0100,:01 'q':01 2009:98 wrote:01 caml-list:01 data:02 assembler:02 asm:02 binding:02 bytes:03 correctly:04 variable:06 long:06 meant:06 arguments:07 On Sun, Nov 01, 2009 at 03:58:47PM +0100, Adrien wrote: > Unfortunately I don't know much about asm, I tried to check but failed > (couldn't find what "leaq" meant). The 'q' just means it's a Long Mode instruction (ie. x86-64's 64 bit mode). The instruction itself is "Load Effective Address" - it means it does an address calculation as if you were going to load/store something at that address, but instead puts the address itself (result of that calculation) in the target register. If I remember my rusty x86 assembler correctly, then: movl 4(%ebx),%eax ; load 4 bytes of data from address %ebx + 4, put in %eax lea 4(%ebx),%eax ; add %ebx + 4 and put that in %eax Rich. -- Richard Jones Red Hat