From owner-svn-src-all@FreeBSD.ORG Mon Apr 9 08:03:56 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9CC061065672 for ; Mon, 9 Apr 2012 08:03:56 +0000 (UTC) (envelope-from juli@clockworksquid.com) Received: from mail-wg0-f50.google.com (mail-wg0-f50.google.com [74.125.82.50]) by mx1.freebsd.org (Postfix) with ESMTP id 02DC58FC0C for ; Mon, 9 Apr 2012 08:03:54 +0000 (UTC) Received: by wgbds12 with SMTP id ds12so3995539wgb.31 for ; Mon, 09 Apr 2012 01:03:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:cc:content-type :x-gm-message-state; bh=H3jVMCpYxye71jynD4ObjbohkaSCmRoMKgDTvVreLlc=; b=Qr0yzBe8j+VdyhpcGeNMYM9Yg3CxvnARaLakIMEpjlm3YXEvsTb3jkMdocAvUhzSaX ikV2CSrb5DsRxXhYFRTs0UMCG8tcRPKrGmfGnf8xuhcxV6K1xlo6fBvjuMKAPqX+knI2 xfLvY1jRCDLIZp6BB8meAPa2l5CjQinDF3yc8j6e24EvhFHDVvfJ6J3Wj9HYBcAzDGYv qcqc3tq569TGZNnTB/r/2VBo0dI/3GtGPDUkgkWfGJmvNlwGheqbNG1o5RXhncogS3kl qgG/nYMb1t6V5wBmt94S3ozL3LtgptHufquWo853dcpAiTPFJAmN3CdmrjvHBPd9b52b eLTw== Received: by 10.180.92.71 with SMTP id ck7mr13951064wib.21.1333958629755; Mon, 09 Apr 2012 01:03:49 -0700 (PDT) MIME-Version: 1.0 Sender: juli@clockworksquid.com Received: by 10.180.86.37 with HTTP; Mon, 9 Apr 2012 01:03:15 -0700 (PDT) In-Reply-To: <20120409161453.29d1f3de@fubar.geek.nz> References: <201204080436.q384aRXS093116@svn.freebsd.org> <20120408164521.55aecdd1@fubar.geek.nz> <20120409161453.29d1f3de@fubar.geek.nz> From: Juli Mallett Date: Mon, 9 Apr 2012 01:03:15 -0700 X-Google-Sender-Auth: esO6JCsP2DvxxA_JFakzZ7lr5wY Message-ID: To: Andrew Turner Content-Type: text/plain; charset=UTF-8 X-Gm-Message-State: ALoCoQmFEzuKB/t+SIEpYw3dY98iFb8o8FxwvczxKA7YF6Os/WRK+AvhlxDH4KlUKoGjmouBRN+F Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r234014 - head/lib/libc/arm/gen X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Apr 2012 08:03:56 -0000 On Sun, Apr 8, 2012 at 21:14, Andrew Turner wrote: > We can implement it as a naked function but we will need to store all > registers other than r0 and pc which seems a waste. > > The problem implementing it in an assembly file is we are unable to use > ARM_TP_ADDRESS is defined as: > #define ARM_TP_ADDRESS (ARM_VECTORS_HIGH + 0x1000) > > Where ARM_VECTORS_HIGH is defined as: > #define ARM_VECTORS_HIGH 0xffff0000U > > I could remove the U from ARM_VECTORS_HIGH however I'm not sure on the > implications of that change. Oh, is that all? :) It's easy to have an ifdef that adds the u suffix in C and not in assembly. That's perfectly appropriate in this case. If you want to be fancy you can use a macro which adds the U to the constant in C and not in assembly, and use it in other places, but that's usually unnecessary. In the kernel we sometimes use assym to get around this sort of thing, but that's fully unnecessary. Look at powerpc/include/vmparam.h for an example of a header where we do this currently (VM_MAXUSER_ADDRESS specifically.) This is the right thing to do by far over using C as a wrapper for assembly in this way. >> How do you know GCC won't allocate r2 to be used as a temporary in >> between the assembly and the return? > > The compiler is free to use r2 with the current code. I have attached a > patch that fools the compiler into thinking we are using r1-r3 by > placing them in the clobber list. If this file is ever compiled with the correct ABI, then, it will do excessive saves and restores of r1-r3, I think.