Status of Supported Architectures from Maintainers' Point of View

The table below shows various characteristics for all architectures supported by GCC. It can be used to determine an appropriate variety of targets on which to test patches, and is also used by GCC maintainers to track criteria that are considered when determining which targets to obsolete.

Each characteristic has a unique letter. Characteristics describing fundamental properties of the architecture or target use uppercase letters, and characteristics describing properties of the GCC port to that architecture use lowercase letters. The appearance of a letter means that the architecture has that characteristic, a blank means it does not, and a question mark means the author didn't know whether the architecture had the characteristic or not. For criteria used to determine whether an architecture should be obsoleted, the appearance of a letter is the less common case and the lack of a letter is the common case.

Architectures are identified by the names of their subdirectories in gcc/config, not by the CPU fields that config.guess reports.

Architecture characteristic key
-----------------------------------------------------------------------
H       A hardware implementation does not exist.
M       A hardware implementation is not currently being manufactured.
S       A Free simulator does not exist.
L       Integer registers are narrower than 32 bits.
Q       Integer registers are at least 64 bits wide.
N       Memory is not byte addressable, and/or bytes are not eight bits.
F       Floating point arithmetic is not included in the instruction set
I       Architecture does not use IEEE format floating point numbers
C       Architecture does not have a single condition code register.
B       Architecture has delay slots.
D       Architecture has a stack that grows upward.

l       Port cannot use ILP32 mode integer arithmetic.
q       Port can use LP64 mode integer arithmetic.
r       Port can switch between ILP32 and LP64 at runtime.
        (Not necessarily supported by all subtargets.)
c       Port uses cc0.
p       Port does not use define_peephole.
f       Port does not define prologue and/or epilogue RTL expanders.
g       Port does not define TARGET_ASM_FUNCTION_(PRO|EPI)LOGUE.
m       Port does not use define_constants.
b       Port does not use '"* ..."' notation for output template code.
d       Port uses DFA scheduler descriptions.
a       Port generates multiple inheritance thunks using
        TARGET_ASM_OUTPUT_MI(_VCALL)_THUNK.
t       All insns either produce exactly one assembly instruction, or
        trigger a define_split.
e       <arch>-elf is not a supported target.
s       <arch>-elf is the correct target to use with the simulator
        in /cvs/src.
         | Characteristics
Target   | HMSLQNFICBD lqrcpfgmbdates
---------+---------------------------
alpha    |  ?? Q   C    q  p g bda e 
arm      |                      da  s
avr      |    L  FI    l  c  g b
bfin     |       F         p g  da
c4x      |  ??  N I BD       g  d  e 
c6x      |   S     CB      p g bda 
cr16     |    L  F C         g      s
cris     |       F  B     cp g b a  s
epiphany |         C       p g bda  s
fr30     | ??    FI B        gm     s
frv      | ??       B      p    da  s
h8300    |       FI       cp g      s
i386     |   ? Q        q  p    da   
ia64     |   ? Q   C    qr p    da   
iq2000   | ???   FICB      p g  d t  
m32c     |    L  FI    l   p g      s
m32r     |       FI             d   s
m68hc11  |    L  FI    l  c         s
m68k     |   ?            c      a   
mcore    |  ?    FI          gm d   s
mep      |       F C       p g  d t s
microblaze         CB          bd   s
mips     |     Q   CB   qr p   bda  s
mmix     | HM  Q   C    q  p   b a e 
mn10300  | ??             c  g      s
ms1      |   S   F  B      p g bd
msp430   |    L  FI    l   p g      s
nds32    |       F C       p    da  s
pa       |   ? Q   CBD  qr    m da e 
pdp11    |    L   IC    qrcp       e 
rs6000   |     Q   C    qr      da   
s390     |   ? Q        qr p g bda e 
sh       |     Q   CB   qr     bda   
sparc    |     Q   CB   qr p    da   
spu      |   ? Q  *C       p g bd    
stormy16 | ???L  FIC D l   p  m  a
tilegx   |   S Q   C    q  p g bda e
tilepro  |   S   F C       p g bda e
v850     | ??    FI       cp gm d   s
vax      |  M?    I       cp     a e 
xtensa   |   ?     C       p   bd    

For AVR simulator, see http://gcc.gnu.org/ml/gcc/2003-10/msg00027.html.

* SPU's float is special; it has the same format as IEEE float but has an extended range and no infinity or NaNs. SPU's float will not produce denormal or negative zeros; both are treated as positive zero. On the other hand, SPU's double is IEEE floating point.