Port-arm archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Which ARM architectures need support? (was Re: Restructuring trapframe)



On Sep 20, 2013, at 7:03 PM, Dennis Ferguson 
<dennis.c.ferguson%gmail.com@localhost> wrote:

> 
> On 20 Sep, 2013, at 20:18 , Matt Thomas <matt%3am-software.com@localhost> 
> wrote:
>> using the -mcpu= or -march will do the right thing for C and C++.
>> 
>> For assembly, we have some macros to help.
>> 
>> RET expand to mov pc, lr or bx lr 
>> 
>> Note that earm defaults to armv5te so we get clz, blx reg, ldrd/strd,
>> and a few others.
>> 
>> It's one reason we have earmv{4,5,6,7}{,hf}{,eb}
>> If you want earm for shark/cats/netwinder/etc use earmv4 and 
>> the non-armv4 instructions will be avoided.
> 
> Yes, but I've been writing inline __asm() and some short assembly
> functions for a few things that are significantly improved by that,
> so instructions are only avoided if I avoid them.  Using umull in a
> __asm() statement requires earlyclobber constraints on the destination
> registers for pre-armv6 which you wouldn't necessarily want there for
> armv6 or later, while if you have a problem in assembly code for which
> clz provides the answer the alternatives to that can take a whole lot
> more instructions.
> 
> I think I get now that all assembly code needs to be runnable on
> armv4.  Am I right that the architecture defines used in <arm/cdefs.h>
> can be relied upon to tell you what the compiler is compiling for, so
> that if what is required to make it run on armv4 seems offensively
> expensive a nicer alternative when compiling for more modern CPUs
> can be #ifdef'd in?  

Yes.

> Also, if __builtin_clz() and __builtin_clzll() are
> used in a kernel compiled for a CPU missing the instructions, are the
> run-time functions it instead emits calls to available?

Yes they are.


Home | Main Index | Thread Index | Old Index