gcc源码应用例子,让FPGA版cpu支持c语言(1)

本文介绍了如何利用GCC的后端将编译器移植到自定义CPU上,使其支持C和C++。通过分析GCC的fr30后端,理解了lisp在GCC后端的角色,以及rtl(Register Transfer Language)的工作原理。文章详细解析了define_insn和define_expand的用法,以及寄存器模式谓词,为自制CPU添加C语言支持打下基础。
摘要由CSDN通过智能技术生成

前几篇文章讲了gcc的词法分析和宏,下面先来个小应用实例,简单介绍一下后端。
我相信也有不少大神,自己写过虚拟机或者基于fpga实现过cpu,毕竟由那本自制cpu在嘛(笑)。
对于自制的cpu,只能用汇编语言编写代码,那是无论如何也不能忍受的,今天介绍怎么把gcc编译器打包到自制的cpu上,使其支持c和c++。
gcc是一个多前端和多后端的编译器集合,如果能驾驭它,就能把一大堆语言打包到任意机器上面。
在这里插入图片描述
是不是爽歪歪啊,如果能得到gcc的支持,哪怕把整个linux系统打包上来都可能。那么我们来看一下gcc后端。
在这里插入图片描述
我们从这些后端里面,选择fr30这个后端进行分析,因为它足够简单。
在这里插入图片描述
先来介绍几个文件,首先打开fr30.md,这个文件里面定义了目标机器的汇编代码。

在这里插入图片描述

这是一种名为lisp的编程语言,被用在gcc后端,用来匹配指令模式的,gcc里面把这个叫rtl(Register Transfer Language),意思为寄存器传送。
lisp是一个前置运算符,且没有优先级的语言,就像这样"(+ 5 6)",计算两个数的相加,他会把括号里面第一个元素作为运算符,后面全部是操作数。
rtl总共有五种数据类型,分别是:
1.表达式
2.整数
3.计算机字,跟寄存器宽度相当
4.字符串
5.向量,使用方括号定义,方括号里面元素可以是任意rtl类型,元素与元素之间使用空格隔开
define_insn定义一条指令,一般格式是:
(define_ins

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值