【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

gcc作为一款工业级的软件,在前端和后端接口上面分的很清楚。它的前端对接各种编程语言,包括fortan、c、cpp、objc、java之类,而它的后端则适配各种体系的cpu。今天说到的这款or1k呢,本身是一款开源的cpu。那么,我们就可以通过or1k,学习一下gcc是如何适配一款cpu的?注意,如果但从编译器来说,gcc只负责生成汇编,as才负责生成二进制。

1、or1k-gcc的地址

https://github.com/pgavin/or1k-gcc

2、如果在or1k-gcc寻找和or1k相关的信息

只需要在‘this repository’输入‘or1k’即可

3、和or1k关联的目录

a,gcc/config/or1k

b,libgcc/config/or1k

c,gcc/common/config/or1k

4、后端移植的主要目录

gcc/config/or1k,目录中包含了主要的md文件和c文件

md文件完成rtl语言到assemble语言的翻译

c文件完成后端体系的函数接口

5、新的cpu,除了gcc还要做哪些适配

除了gcc,还要适配binutils、gdb、uclibc、linux kernel、busybox,这些几乎是标配

6、md的格式是什么样的

(define_insn "addsi3"[(set (match_operand:SI 0 "register_operand" "=r,r")(plus:SI (match_operand:SI 1 "register_operand" "%r,r")(match_operand:SI 2 "nonmemory_operand" "r,I")))]"""@l.add   \t%0,%1,%2 # addsi3l.addi  \t%0,%1,%2 # addsi3"[(set_attr "type" "add,add")(set_attr "length" "1,1")])

其中,define_insn表明这是一个指令生成结构,addsi3表示指令名称,plus:SI表明这是寄存器和立即数的相加操作,3个match_operand表示指令需要的三个参数,“%r,r”和“r,I”表示两种参数形式,l.add和l.addi表示具体指令内容,type和add表明这个指令用来做叫法,length表示指令的长度。

7、后端的c函数接口是什么样的

#undef TARGET_PRINT_OPERAND_ADDRESS
#define TARGET_PRINT_OPERAND_ADDRESS or1k_print_operand_address

8、rtl基本适配的指令有哪些

a,运算类,比如加减乘除

b,逻辑类,比如与或非

c,移位类,比如左右移动

d,赋值类,比如move

e,比较类,比如大小比较、和0比较

f、访存类,比如load、store

g、跳转类,比如jmp

h、调用类,比如call

9、头文件包括了哪些内容

寄存器个数、函数调用约定、寻址、调试、输出格式约定等等

ps:

a,事实上,重新开发一款cpu的机会对于大多数人来说,还是很少的。但是,为一个cpu添加自定义指令,这个工作却很常见。尤其是mips这样的cpu,几乎每个厂家都要做一些定制化的私有工作。

b,gcc后端移植完了,还要移植as、link,这样程序才能编译出来。

c,clang+llvm也是不错的编译器开发模式。在llvm上也有类似的目录,它的地址如下,大家可以好好参考一下,

https://github.com/llvm-mirror/llvm/tree/master/lib/Target

d,open64也是不错的编译,它的后端移植也可以参考一下,链接如下,https://github.com/open64-compiler/open64/tree/master/osprey/cygnus/opcodes

随想录(从开源or1k看gcc后端移植)相关推荐

  1. 逐飞 RT1064 库 GCC (VSCode) 移植踩坑

    §对于逐飞RT1064库的GCC移植 1.移植相关工作   今天(2021-05-16)收到一位参加智能车竞赛的学生发送过来的信息,它对于逐飞RT1064的库进行了GCC 移植: 卓大大,我为逐飞的 ...

  2. python是开源的它可以被移植到许多平台上对吗_Python程序设计答案

    [其它]编写一个 Python 程序,输出如下图形效果. ++++++++++ + + ++++++++++ 2. 根据输入的百分制成绩,输出其所对应的五级制成绩. 3. 根据输入的身份证号码,输出对 ...

  3. (已更新)Thinkphp课程表小程序源码v1.0.0全开源版(前后端分离)

    源码功能介绍 1.情侣功能 2.情侣间留言 3.情侣间互相设置课程表背景 4.自己日.周课程表背景设置 5.教务系统课程表导入 6.导入别人分享的课表 7.导入别人分享的单课 8.多校支持 9.首页顶 ...

  4. Thinkphp课程表小程序源码v1.0.0全开源版(前后端分离)

    源码介绍 练手Lab课程表小程序源码是一个基于Thinkphp系统进行开发的前后端分离系统. 源码功能介绍 1.情侣功能 2.情侣间留言 3.情侣间互相设置课程表背景 4.自己日.周课程表背景设置 5 ...

  5. 七个开源的 SpringBoot 前后端分离项目,Star过千,快去收藏夹吃灰吧!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 微信公众号:江南一点雨 前后端分离已经在慢慢走进各公司的技 ...

  6. python是开源的.它可以被移植_Facebook 发布开源框架 PyTorch, Torch 终于被移植到 Python 生态圈...

    本周,Facebook 的 AI 研究团队发布了一个 Python 工具包,专门针对 GPU 加速的深度神经网络(DNN)编程.它有望辅助.或在一定程度上替代,现有的 Python 数学.统计库(比如 ...

  7. 随想录(开源代码的学习方法)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 一.历史     开源代码作为一种特色的产物,随着物联网的进步得到了前所未有的发展.一开始,很 ...

  8. 「newbee-mall新蜂商城开源啦」 前后端分离的 Vue 版本即将开源

    不仅仅是展现形式的增多和产品线的丰富,技术栈也加入了 Vue,开发模式也变成了前后端分离模式. 1 新蜂商城 Vue 版本 2019 年 10 月份我在 GitHub 开源仓库中上传了新蜂商城项目的所 ...

  9. 开源绘画应用 Pinta 已移植到GTK 3和.NET 6

    Pinta [1]是一款开源绘画应用,适用于 Linux.Windows 和 macOS.你可以用它来进行自由手绘/素描.你也可以用它在现有的图片上添加箭头.方框.文字等.年初发布了 Pinta 2. ...

最新文章

  1. Linux动态库(.so)搜索路径
  2. 改变你的 KDE 桌面的外观和感觉方法介绍
  3. 吸烟检测 yolov5开源推荐
  4. 洛谷 P1176 路径计数2
  5. 酷欧天气(CoolWeather)应用源码
  6. 老鼠怕猫是鼻子决定的?!
  7. 汽车发动机参数指标含义
  8. c++实现,对象池 object_pool
  9. 2016年3月1日Android实习笔记
  10. 判断是否遵守某个协议
  11. Android通过透明度设置背景变暗
  12. 论windows + asp.net性能
  13. LINUX之网络编程j简述
  14. 冲啊电竞er,纵享游戏人生,你还需要一副索尼耳机!
  15. leetcode-189. Rotate Array
  16. 安卓GLSurfaceView使用简单范例
  17. 下载xxx视频[python]
  18. matlab如何泰勒公式用求近似值_Matlab 数值计算泰勒公式
  19. java网页保存成pdf_JavaScript+Java实现HTML页面转为PDF文件保存的方法
  20. ASO优化关键词覆盖、曝光原理

热门文章

  1. VR来了,科技的各行各业要如何做好准备?
  2. 连载《一个程序猿的生命周期》-6、自学C++,二级考过后,为工作的机会打下了基础...
  3. Windows 2000服务器安全配置精华技巧
  4. [WSE]如何启用WSE2.0的强大的Trace功能
  5. BZOJ2957楼房重建
  6. AngularJS学习之旅—AngularJS 模块(十五)
  7. linux内核调度算法(2)--CPU时间片如何分配
  8. Android开发之TextView的滚动显示
  9. OC学习篇之---类的初始化方法和点语法的使用
  10. Atitit.Gui控件and面板----数据库区-mssql 2008 权限 配置 报表查看成员