【发布时间】:2019-12-10 02:53:47
【问题描述】:
有人知道在现有代码库中查找 64 位分区的方法吗?可能通过引入 64 位除法的编译错误或警告。 (gcc 或 clang)?
背景是我想用自定义函数替换所述代码库中的所有 64 位分区,例如 a/b 将替换为 my64_div(a, b);。为了更容易将代码移植到 ARM 32 位平台。
我想我可以为 ARM 32 交叉编译它并查看编译错误。有没有办法在没有交叉编译的情况下做到这一点?
可能是一个带有 cparser 库的 python 脚本,可以找到 64 位除法?我之前曾将 PyCLibrary 用于不同的任务,但我看不到为此目的使用它的方法。 任何提示表示赞赏。
编辑: 多一点背景为什么我需要这个。这里涉及 3 个团队。
研究团队:他们编写代码时不太关心 64 位除法。
我的团队:我们将研究库集成到我们的代码中。我们制作最终产品。以源代码形式提供。
客户:我们的一些客户会将此代码移植到 ARM 32 位内核。他们想用自己优化的功能来代替 64 位分区。
团队 1. 和 2. 主要使用 64 位 PC 来编译代码。在这个阶段找到 64 位分区会很棒,因为它们很昂贵,我们正试图避免它们。因此,在夜间构建期间标记它们会很棒。 其次,我们希望让客户的生活更轻松。这意味着如果我们用自定义函数替换所有 64 位除法,它们只需要用另一个函数替换函数。其余的源代码可以保持不变。
交叉编译和检测__udivdi3当然是一种可能,也可能是唯一的选择。但我希望那里可能有另一种解决方案。
【问题讨论】:
-
没有。您必须手动浏览代码库。
-
这就是我目前正在做的事情,但工作量很大:)
-
在不支持 64 位除法的系统上;编译器很可能会注入对执行 64 位除法的库函数(例如
__udivdi3())的调用,以便软件仍然可以工作。您可以使用自己的函数查找/替换库函数,而不是替换原始源代码中的 64 位分区。 -
@Brendan 或者你甚至可以自己实现它。
标签: c gcc llvm-clang