在机器代码方面,在GCC、clang和/或LLVM中实现的架构支持在哪里?
我正在看:在机器代码方面,在GCC、clang和/或LLVM中实现的架构支持在哪里?,gcc,compiler-construction,cpu-architecture,machine-code,Gcc,Compiler Construction,Cpu Architecture,Machine Code,我正在看: 体系结构特征键 ----------------------------------------------------------------------- H硬件实现不存在。 M目前尚未制造硬件实现。 没有免费的模拟器。 整数寄存器的长度小于32位。 Q整数寄存器的宽度至少为64位。 N内存不是字节可寻址的,和/或字节不是八位。 F指令集中不包括浮点运算 I体系结构不使用IEEE格式的浮点数 C架构没有单一的条件代码寄存器。 B架构有延迟槽。 D架构有一个向上增长的堆栈。 l端口
体系结构特征键
-----------------------------------------------------------------------
H硬件实现不存在。
M目前尚未制造硬件实现。
没有免费的模拟器。
整数寄存器的长度小于32位。
Q整数寄存器的宽度至少为64位。
N内存不是字节可寻址的,和/或字节不是八位。
F指令集中不包括浮点运算
I体系结构不使用IEEE格式的浮点数
C架构没有单一的条件代码寄存器。
B架构有延迟槽。
D架构有一个向上增长的堆栈。
l端口不能使用ILP32模式整数算法。
q端口可以使用LP64模式整数算法。
r端口可以在运行时在ILP32和LP64之间切换。
(不一定由所有子目标支持。)
c端口使用cc0。
p端口使用define_窥视孔(与define_窥视孔2相反)。
b端口对输出模板代码使用“*…”符号。
f端口未定义序言和/或尾声RTL扩展器。
m端口不使用define_常量。
g端口未定义目标函数(PRO | EPI)日志。
i端口使用
目标函数输出函数(_VCALL)\u THUNK。
端口使用LRA(默认情况下,除非被交换机覆盖)。
t所有INSN要么只生成一条汇编指令,要么
触发define_分割。
e-elf不是受支持的目标。
s-elf是与模拟器一起使用的正确目标
在/cvs/src中。
|特征
目标| HMSLQNFICBD lqrcpbfmgiates
-----------+---------------------------
aarch64 | Q b gia s
α|?Q C Q mgi e
arc | B gia
臂| b ia s
avr | L FI L cp g
bfin | F gi
c6x | S CB gi
cr16 | L F C s
cris | F B gi s
csky | b ia
顿悟
fr30 |??铁硼铅镁硫
frv |??B B i s
gcn | S C D q a e
h8300 | FI B g s
i386 | Q b ia
ia64 |?Q C qr b m i
iq2000 |???FICB g t
lm32 | F g
m32c | L FI L b g s
m32r | FI b s
m68k | pb i
mcore |?FI-pb-mg-s
mep | F C b g t s
微晶玻璃
mips | Q CB qr ia s
mmix | HM Q C Q i e
mn10300 |??GIS
莫西| F g t s
msp430 | L FI L b g s
nds32 | F C ia s
nios2 | C ia
nvptx | S Q C Q mg e
pa | Q CBD qr b i e
pdp11 | L IC qr b e
powerpcspe | Q C qr pb ia
保释金
riscv | Q C qr gia
rl78 | L F L g s
rs6000 | Q C qr pb ia
rx | s
s390 | Q Q G A e
sh | Q CB qr p i
sparc | Q CB qr b ia
暴风雪16 | | L FIC D L b i
tilegx | Q C Q gi e
tilepro | S F C gi e
v850 | g a s
vax | M I b I e
visium | B g t s
xtensa|C
看起来大约有50种架构。GitHub上的源代码在哪里实现的?对于GCC、clang和/或LLVM(或在实施架构集成方面可能感兴趣的任何其他关键项目)。GCC的简要概述: GCC的
.md
机器定义文件使用与GNU C内联asm类似的约束语法告诉它哪些指令可用以及它们的作用。(GCC不知道机器代码,只知道asm文本,这就是为什么它只能将的.s
作为单独输出以进行组装。)还有一些C函数知道该体系结构的通用规则,我猜是寄存器名之类的东西
GCC内部手册有一个章节记录了相关文件在GCC源代码树中的位置。对于LLVM
(Clang
是基于LLVM
的前端),您可以在LLVM/lib/Target/
目录中找到每个架构的后端代码LLVM
使用.td
目标描述文件来描述目标(它本身就是一种语言)。比如指令、寄存器、调用约定等等
这些目录中还有实现某些功能的.cpp
文件。例如,llvm/lib/Target/Mips/MipsDelaySlotFiller.cpp
文件实现一个pass,用Mips体系结构的有用指令填充延迟槽
有用于添加RISC-V
target的git补丁库,这是一个如何增量实现后端的好例子。还有很多文档,但是请记住它已经过时了,但是仍然有有用的信息
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 uses define_peephole (as opposed to define_peephole2).
b Port uses '"* ..."' notation for output template code.
f Port does not define prologue and/or epilogue RTL expanders.
m Port does not use define_constants.
g Port does not define TARGET_ASM_FUNCTION_(PRO|EPI)LOGUE.
i Port generates multiple inheritance thunks using
TARGET_ASM_OUTPUT_MI(_VCALL)_THUNK.
a Port uses LRA (by default, i.e. unless overridden by a switch).
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 lqrcpbfmgiates
-----------+---------------------------
aarch64 | Q q b gia s
alpha | ? Q C q mgi e
arc | B b gia
arm | b ia s
avr | L FI l cp g
bfin | F gi
c6x | S CB gi
cr16 | L F C c g s
cris | F B gi s
csky | b ia
epiphany | C gi s
fr30 | ?? FI B pb mg s
frv | ?? B b i s
gcn | S C D q a e
h8300 | FI B g s
i386 | Q q b ia
ia64 | ? Q C qr b m i
iq2000 | ??? FICB b g t
lm32 | F g
m32c | L FI l b g s
m32r | FI b s
m68k | pb i
mcore | ? FI pb mg s
mep | F C b g t s
microblaze | CB i s
mips | Q CB qr ia s
mmix | HM Q C q i e
mn10300 | ?? gi s
moxie | F g t s
msp430 | L FI l b g s
nds32 | F C ia s
nios2 | C ia
nvptx | S Q C q mg e
pa | Q CBD qr b i e
pdp11 | L IC qr b e
powerpcspe | Q C qr pb ia
pru | L F a s
riscv | Q C qr gia
rl78 | L F l g s
rs6000 | Q C qr pb ia
rx | s
s390 | Q qr gia e
sh | Q CB qr p i
sparc | Q CB qr b ia
stormy16 | ???L FIC D l b i
tilegx | Q C q gi e
tilepro | S F C gi e
v850 | g a s
vax | M I b i e
visium | B g t s
xtensa | C