Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use register name #21

Closed
wants to merge 1 commit into from
Closed

use register name #21

wants to merge 1 commit into from

Conversation

yetist
Copy link

@yetist yetist commented Sep 7, 2021

这个补丁可以让 gcc -S 显示寄存器名称($zero),而不是寄存器号($r0)。

但副作用是,合并此补丁之后的gcc,只能编译使用了寄存器名的汇编,汇编代码如果使用寄存器号会报错,需要将相应的汇编代码修改过来,已知 binutils、linux 需要打补丁。

@yetist yetist requested a review from a team September 7, 2021 02:15
@yetist
Copy link
Author

yetist commented Jun 22, 2022

这回补丁应该正常了,可以同时支持 $r0$zero 两种写法的汇编。

请review并测试,谢谢。

Copy link

@xen0n xen0n left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

好像是没问题

@yetist
Copy link
Author

yetist commented Jul 12, 2022

顺便说一下,在这个补丁的基础之上,如果再修改一下 REGISTER_NAMES 内容,将寄存器名字中的 $ 字符去掉,则 gcc 生成的汇编指令,就和其他架构一样不带 $ 了,但是需要修改 binutils 才能通过汇编阶段。

@xen0n
Copy link

xen0n commented Jul 12, 2022

顺便说一下,在这个补丁的基础之上,如果再修改一下 REGISTER_NAMES 内容,将寄存器名字中的 $ 字符去掉,则 gcc 生成的汇编指令,就和其他架构一样不带 $ 了,但是需要修改 binutils 才能通过汇编阶段。

这个是显然。不过 meanwhile 我们得推进一下 documentation 的审查进度了。。。有好几个东西卡了很久了,我的、龙芯的都有。

《龙芯架构指令格式约定》搞定之后,还需要一篇《龙芯架构汇编语法约定》,把现在代码实现的一些习俗、实现细节以规范固定下来,也得到那个时候才能讨论、确立不带 $ 寄存器操作数的合法性。

@Calring
Copy link

Calring commented Jul 12, 2022

顺便说一下,在这个补丁的基础之上,如果再修改一下 REGISTER_NAMES 内容,将寄存器名字中的 $ 字符去掉,则 gcc 生成的汇编指令,就和其他架构一样不带 $ 了,但是需要修改 binutils 才能通过汇编阶段。

目前汇编器支持寄存器名加'$',之前cfi指令不支持加'$',我交了一个补丁支持[https://github.com/loongson/binutils-gdb/pull/162].

@xen0n
Copy link

xen0n commented Jul 12, 2022

顺便说一下,在这个补丁的基础之上,如果再修改一下 REGISTER_NAMES 内容,将寄存器名字中的 $ 字符去掉,则 gcc 生成的汇编指令,就和其他架构一样不带 $ 了,但是需要修改 binutils 才能通过汇编阶段。

目前汇编器支持寄存器名加'$',之前cfi指令不支持加'$',我交了一个补丁支持loongson/binutils-gdb#162.

你这个不是“支持”,是从“不支持”改成了“仅支持”

目前楼主想做的事情是提供两种写法,即同时支持加或者不加 $ 以方便那些来自 RISC-V 背景(习惯不加 $)的人。否则用户能找很多理由来喷的。

@Calring
Copy link

Calring commented Jul 12, 2022

顺便说一下,在这个补丁的基础之上,如果再修改一下 REGISTER_NAMES 内容,将寄存器名字中的 $ 字符去掉,则 gcc 生成的汇编指令,就和其他架构一样不带 $ 了,但是需要修改 binutils 才能通过汇编阶段。

目前汇编器支持寄存器名加'$',之前cfi指令不支持加'$',我交了一个补丁支持loongson/binutils-gdb#162.

你这个不是“支持”,是从“不支持”改成了“仅支持”

目前楼主想做的事情是提供两种写法,即同时支持加或者不加 $ 以方便那些来自 RISC-V 背景(习惯不加 $)的人。否则用户能找很多理由来喷的。

那我明白楼主的意图了。目前汇编器的寄存器是只支持加'$', 不加'$'会报错,支持两种写法是很不错的想法。

@xen0n
Copy link

xen0n commented Jul 12, 2022

顺便说一下,在这个补丁的基础之上,如果再修改一下 REGISTER_NAMES 内容,将寄存器名字中的 $ 字符去掉,则 gcc 生成的汇编指令,就和其他架构一样不带 $ 了,但是需要修改 binutils 才能通过汇编阶段。

目前汇编器支持寄存器名加'$',之前cfi指令不支持加'$',我交了一个补丁支持loongson/binutils-gdb#162.

你这个不是“支持”,是从“不支持”改成了“仅支持”
目前楼主想做的事情是提供两种写法,即同时支持加或者不加 $ 以方便那些来自 RISC-V 背景(习惯不加 $)的人。否则用户能找很多理由来喷的。

那我明白楼主的意图了。目前汇编器的寄存器是只支持加'$', 不加'$'会报错,支持两种写法是很不错的想法。

嗯嗯,加 $ 的写法是必然要支持的,来自 MIPS 背景的人(还有一些别的架构,以及 LA 汇编语法的现状)认为寄存器名字必须带前缀,这边跟汇编里写法保持一致是有必要的。但这种位置嘛,不带也不会有歧义,所以从人体工学角度,都支持会对用户的手指好一些。真不喜欢按 shift。

@xry111
Copy link

xry111 commented Jul 24, 2022

要不直接丢到 gcc-patches@gcc.gnu.org 去?

一些注意事项:https://gcc.gnu.org/contribute.html

我写的某些 testcase 里面有 scan-assembler "\\\$r4" 这种东西,如果要默认生成 $a0 代替 $r4 的话也得改掉 :)

@yetist
Copy link
Author

yetist commented Oct 12, 2022

要不直接丢到 gcc-patches@gcc.gnu.org 去?

一些注意事项:https://gcc.gnu.org/contribute.html

我写的某些 testcase 里面有 scan-assembler "\\\$r4" 这种东西,如果要默认生成 $a0 代替 $r4 的话也得改掉 :)

麻烦您帮忙把这个补丁提到上游去吧,谢谢。
应用此补丁之后,进行整个系统的构建,只有内核受影响,相应的修复补丁可参考这里:loongarchlinux/linux@f44546a @chenhuacai

@xen0n
Copy link

xen0n commented Oct 13, 2022

r21 早就不叫 x 了,不清楚之前为何没发现,别的我觉得兼容性能保持还是尽量保持吧,内核跟编译器、binutils已经有不兼容组合了,再来一次不兼容要人命

@yetist yetist closed this by deleting the head repository May 17, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants