Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Apr 2012 01:03:15 -0700
From:      Juli Mallett <jmallett@FreeBSD.org>
To:        Andrew Turner <andrew@fubar.geek.nz>
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
Message-ID:  <CACVs6=_t=VSqA-DTZi-rNxpE9bEZRzaHDSVe0FVw0xDV4c3Q=Q@mail.gmail.com>
In-Reply-To: <20120409161453.29d1f3de@fubar.geek.nz>
References:  <201204080436.q384aRXS093116@svn.freebsd.org> <20120408164521.55aecdd1@fubar.geek.nz> <CACVs6=8SW9PhZaxc4KRnVyo5p6NyhdD09_cAowLCbgczDqBsVg@mail.gmail.com> <20120409161453.29d1f3de@fubar.geek.nz>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Apr 8, 2012 at 21:14, Andrew Turner <andrew@fubar.geek.nz> 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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CACVs6=_t=VSqA-DTZi-rNxpE9bEZRzaHDSVe0FVw0xDV4c3Q=Q>