A few, what I suspect are corrections.  (I'm going to be a bit pedantic here.)

On 6/24/11 6:54 AM, Koen Kooi wrote:
> Hi,
> 
> We discussed tune files a bit during last nights TSC meeting and Khem had 
> expressed the need before, so I'd like to get this discussion started by 
> using armv7a as an example.
> 
> For armv7a capable cores we have the following hardware features:
> 
> * armv7a instruction set
> * thumb1 instruction set
> * thumb2 instruction set
> * VFP coprocessor
> * optional NEON coprocessor
> 
> For the ABI we can choose the following:
> 
> * softtp without hw support (e.g. no VFP instructions emitted, slow)
> * softfp with hw support (e.g. VFP and/or NEON instructions emitted, fast)
> * hardfp, emits VFP and/or NEON instructions, slightly faster than softfp/hw, 
> incompatible with everything else

Actually on ARM there are three ABIs possible but those are not it.

OABI - softfp
OABI - hardfp
EABI

As far as I know nobody uses OABI anymore, and I doubt we should support it.

The above are really instructions used within the ABI.

> And the extra knobs:
> 
> * pure thumb1, no arm instructions (limited use)
> * thumb1/arm interworking
> * pure thumb2,  no arm instructions
> * thumb2 interworking (not sure if that's actually usefull, thumb2 has 
> complete coverage)
> 
> In OE .dev we have the following vars:
> 
> TARGET_FPU: switches between hw float and sw float, no reflection in package 
> arch
> ARM_FP_ABI: switches between softfp and hardfp, will create 'armv7a' or 
> 'armv7a-hardfp' as package arch
> ARM_INSTRUCTION_SET: switches between arm and thumb1, no reflection in 
> package arch
> THUMB_INTERWORK: turns on interworking, no reflection in package arch
> 
> (side note, oe-core/distroless and meta-yocto/poky don't turn set TARGET_FPU 
> for armv7a and will generate slow code, angstrom does turn it on)
> 
> Khem and I would like to start building armv7a (and armv6) in pure thumb2 
> mode but we want to have the variables to turn those knobs make sense and be 
> consistent. RP has expressed his desire to sort this all out before merging 
> multilib. I'm sure x86/mips/ppc/etc have a similar need, so let's get this 
> discussion started.

Below is a quick step to capture what all I know of for various architectures,
inluding ARM.  Note the "tunings" are where I'm a bit sketchy on some
architectures.  (I think below also point out why I think this needs to be
hierarchical..  so it's really easy to inherit common stuff, and override only
the pieces you need to..  specifically the tunings.)

Arch Family: ARM

ABI:
- EABI little endian
- EABI big endian
  - canonical os=linux-eabi
  - library directory is "lib"

CPU/ISA:
- all use EABI
  - traditional arm instructions
  - thumb1, no arm instructions
  - thumb1/arm, interworking
  - thumb2, no arm instructions
  - thumb2, interworking (note, our customers do use this.. I'm not sure how
much though)

Tunings:
- armv4 (both big & little endian)
- armv5 (both big & little endian)
- armv5 + vfp
- armv6 + vfp
- armv7a + vfp + neon (supports thumb) (little endian)
- armv7a + be8 (supports thumb) (big endian)

---

Arch Family: IA32

ABI:
- x86_32
  - There is a soft-fp variant but it's not really used anymore
  - hardfp
  - defined as an LSB standard
  - library directory is "lib"
- x86_64
  - hardfp only
  - defined as an LSB standard
  - library directory is "lib64"
- (x32)
  - new experimental ABI
  - library directory is "libx32"

CPU/ISA:
- x86_32
  - all use x86_32
  - i586 -> core2 -> corei7
- x86_64
  - only 64-bit chips supported
- x32
  - only 64-bit chips supported

Tunings:
- i586, i686, core2, etc..
- MMX, MMX2, AVX, etc..

---

Arch Family: MIPS

ABI:
- MIPS o32 - soft float - big endian
- MIPS o32 - hard float - big endian
- MIPS o32 - soft float - little endian
- MIPS o32 - hard float - little endian
  - old 32-bit mips library
  - library path is "lib"

- MIPS n32 - soft float - big endian
- MIPS n32 - hard float - big endian
- MIPS n32 - soft float - little endian
- MIPS n32 - hard float - little endian
  - new 32-bit MIPS64 library
  - library path is "lib32"

- MIPS n64 - soft float - big endian
- MIPS n64 - hard float - big endian
- MIPS n64 - soft float - little endian
- MIPS n64 - hard float - big endian
  - new 64-bit MIPS64 library
  - library path is "lib64"

CPU/ISA:
- MIPS32
  - Various
- MIPS64
  - Various

Tunings:
- MIPS32
  - Various
- MIPS64
  - Various

---

Arch Family: Power

ABI:
- ppc32 - hard float
   - ABI defined by LSB
   - library path is "lib"
- ppc32 - soft float
- ppc32 - e500v1 (soft-float variant -- likely not needed)
- ppc32 - e500v2 (soft-float variant)
  - library path is "lib"
- ppc64 - hard float
  - library path is "lib64"
  - ABI defined by LSB

CPU/ISA:
- ppc32 - hard float
  - ppc603e
- ppc32 - soft float
  - ppc603ec
- ppc32 - e500v1 (soft-float variant)
  - -mfloat-gprs=single -mspe=yes -mabi=spe
- ppc32 - e500v2 (soft-float variant)
  - -mfloat-gprs=double -mspe=yes -mabi=spe
- ppc64 - hard float
  - PowerPC 970

Tunings:
- ppc603e
- ppc750
- ppc7400
- e300c2
- ppc405
 - ppc405fp for hard float
- ppc440
 - ppc440fp for hard float
- ppc476
 - ppc476fp
- e500mc
- 8540
- 8548
- -maltivec or -mno-altivec

_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to