-
Notifications
You must be signed in to change notification settings - Fork 58
Update the C/C++ preprocessor built-in macros sections #28
Conversation
c05a323
to
a87413c
Compare
|ABI 使用 64 位浮点寄存器传参 | ||
|=== | ||
|
||
由于历史原因,最早期的 LoongArch C/C++ 编译器提供了一批类似 MIPS 的预处理器内建宏。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
self nit: “MIPS 风格” might be better
loongarch 相关的预定义宏,看起来有大写的,也有小写的,是不是讨论一下,在遵循习惯的基础上能保持统一规律。 |
大写的那部分都是“复制粘贴批量替换”时代的遗留。主要前面一段时间有些人跑得太快了,非要在工具链完整进上游之前就开始往下游刷补丁,所以才要保留支持。否则最后一张表整个可以全部删除。 这个处理我认为就遵循 #27 的思路即可。面向用户的文档不提及相关特性,各大编译器已经支持的保留支持,不支持的不添加支持,以后再渐渐把已有支持用 warning 等等方式干掉。 |
a87413c
to
aae6b01
Compare
Rebased to latest; opinions ppl? |
Review ping |
Review ping |
Ping? @scylaac @yetist @xry111 @ChenghuaXu |
Ping; others, opinions? |
最新的内核代码还在用 |
我已回复建议修改。。 |
除了这个,应该世界上没有别的地方用这些旧宏了。OK。 |
Review ping |
我今天跟同事闲聊,聊到这篇文档,他看了有的预处理器符号大写,有的小写,他就问为什么;可见大小写不一致还是比较影响第一印象的。 |
…stency and clarity. Signed-off-by: WANG Xuerui <[email protected]>
dee7c54
to
e4c7998
Compare
Rebased, please take a look? @xry111 @yetist @scylaac @FreeFlyingSheep @ChenghuaXu @chenglulu326 |
|等价于 | ||
|备注 | ||
|
||
|`__loongarch64` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
__loongarch64
目前内核,libgcc,以及 libffi 在用,__loongarch_grlen
目前 glibc 在用。
这里大概解释一下它们的问题:目前我们对 __loongarch_grlen
的使用存在错误,等 ILP32 成型以后会有人在 64 位机器上运行 32 位程序,他可能用下面的方式编译该 32 位程序需要的库:
gcc foo.c -shared -O2 -march=la464 -mabi=ilp32d -o libfoo.so.2
这样就会出现问题:由于 -march=la464
告诉编译器 CPU 的 GR 是 64 位的,编译器会定义 __loongarch_grlen
为 64,所以用 __loongarch_grlen
判断 ABI 是 LP64 还是 ILP32 的代码会炸掉。
__loongarch64
目前实现为“当且仅当 __loongarch_grlen == 64
时被定义”。所以用它判 ABI 也会出同样的问题,而且这和 __x86_64__
(用 x32 ABI 的话它也会置位),__mips64
(N32 ABI 的话它也会置位) 是一致的。由于 __mips64
的误用,已经有东西炸掉了。
但是我感觉至少 __loongarch_grlen
还是保留比较好,因为不论 ABI 去判 GR 的宽度也是一种合理的需求。__loongarch64
由于存在歧义确实可以 deprecate 后删除。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个是我眼瞎,我从 2021 年开始就从未怀疑它有问题(之前只是看它是两个下划线开头,结尾没有下划线,加上全小写字母,就觉得它跟 RISC-V 风格很相似而略过了),直到你前几天提到这玩意规范里没写,才猛然醒悟它其实是 __mips64
的 1:1 等价物……
__loongarch_grlen
和 __loongarch_lp64 / __loongarch_XXX_float
对应的是两种不同的合理需求,都应该保留。__loongarch64
表达的语义完全可由 __loongarch_grlen == 64
替代,唯一就是稍微短一点;鉴于一件如此简单的事情都有多种方式完成,不够简洁,且使用 __loongarch_grlen
可以避免在未来出现其他 GRLEN 的时候引入新符号,因而不应当保留 __loongarch64
。现有的代码都要抽空去改掉。。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RISC-V 大量用 __riscv_xlen
判定 ABI,所以很多人 (包括我) 就照猫画虎写 __loongarch_grlen == 64
了。刚才才想起来 RISC-V 的指令操作数长度是和寄存器宽度直接绑定的,所以不可能 -march=rv64 -mabi=ilp32
……
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
我才刚刚发现,__LP64__
(以及 _LP64
)和 __loongarch_lp64
意思完全一样,而且 __LP64__
还架构无关。。
我们是不是把 __loongarch_lp64
都干掉最好呢?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
有一些道理,我看下把 gcc-specific 的内容去掉。
Ping again? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
后续会另开一个 PR 增补关于 -march=native
和 -mtune=native
的说明。
按照 @xry111 的评论,准备把特定于 gcc 的一部分宏从本文中去掉。今晚之前改一版 |
不过刚才检查了 clang,他也提供了 |
我觉得直接丢个链接就好了 https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html |
而且 clang 这个东西应该是有历史原因,在 clang 出现之前 LLVM 官配的 C-family 编译器是一个改过的,产生 LLVM IR 的 GCC,所以重写前端的时候应该把这些也直接抄来了。 |
先改文档?再处理gcc中的代码?看记录,其他地方都不用了。 |
删那些 MIPS 风格宏定义是吧,可以这么搞,文档我晚点修订,现在在上班 |
Also part of the discussions started at #24 and #25.