This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LC4357:我可以使用 TI C 编译器来生成 UDIV/SDIV 指令吗?

Guru**** 2479985 points
Other Parts Discussed in Thread: TMS570LC4357

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/996199/tms570lc4357-can-i-get-the-ti-c-compiler-to-generate-udiv-sdiv-instructions

器件型号:TMS570LC4357

您好!

根据 ARM 技术参考手册、ARM Cortex R5F 支持 Thumb 和 ARM 模式下的 UDIV/SDIV 指令、从 Cortex-R5 r1p0开始。  另请 参见此处

根据 这里这个支持论坛中的这个帖子、 TMS570LC4357使用 Cortex R5F 的版本 r1p2、所以它应该在 Thumb 和 ARM 模式中支持 UDIV/SDIV 指令。

但是、尽管 我设置 了--silicon_version=7R5、但我从未看到 TI C 编译器(经测试的版本 v20.2.1.LTS)实际发出 UDIV/SDIV 指令。

编译器 始终调用 __aeabi_idivmod

根据我的理解、在 Thumb 模式下发射绝对安全、因为所有 R5F 都支持该模式(根据 ARM 技术参考手册)。

在 ARM 模式下、我可以 看到 设置 --silicon_version=7R5 不够具体、不足以允许发出 UDIV/SDIV、因为我还必须告诉 编译器 我要定向的内核的版本、以确保生成的代码能够实际运行。  但是、我在手册中没有找到有关此类开关的文档。

当我知道我正在使用具有支持这些指令的内核的 TMS570时、是否有任何方法让 TI C 编译器在 Thumb 和/或 ARM 模式下实际发出这些指令?

如果有人能够澄清这种情况、那将会很棒、提前非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有关编译器生成 SDIV/UDIV 指令与从 RTS 库调用辅助函数的情况、请参阅此线程。

    https://e2e.ti.com/support/microcontrollers/hercules/f/hercules-safety-microcontrollers-forum/916999/compiler-tms570ls0432-division-and-abi-helper-functions-from-runtime-library

    我将让编译器团队就 ARM ISA 以及 Cortex R5F 现在是否支持这一点发表意见。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当为 Cortex-R5 CPU 生成代码时、指令 SDIV 和 UDIV 只在 THUMB 模式中可用。  下面是一个示例...

    C:\working_directory>type file.c
    int test_divide_instruction(int arg1, int arg2)
    {
       return arg1 / arg2;
    }
    
    C:\working_directory>armcl -mv7r5 --code_state=16 --keep_asm file.c
    
    C:\working_directory>findstr DIV file.asm
            SDIV      A1, A1, A2            ; [DPU_V7R4_PIPE0] |3|

    第一个命令显示源代码。  第二个将对其进行编译。  第三个示例显示 SDIV 指令是生成的。  编译器选项包括:

    • -mv7r5:选择 Cortex-R5 CPU
    • --code_state=16:Thumb 模式
    • --keep_asm:编译器生成的汇编文件通常被删除。  该选项指示保留它。

    如果您有一个类似但未生成 SDIV 或 UDIV 指令的示例、 请按照文章 如何提交编译器测试用例中的说明提交。

    至于 SDIV 和 UDIV 指令是否在 ARM 模式中可用... 如果您尝试、汇编器会发出错误。  没有任何机制来改变这种行为。   

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的详细答复。

    你是对的、我的陈述是错的。  我可以确认、TI C 编译器在 Thumb 模式下发出 UDIV/SIV、而不是在 ARM 模式下发出 UDIV/SIV。  我必须混淆两个编译器运行中的输出文件。

    我曾希望 TI 编译器支持 GCC 的-March = armv7-r+nodiv 等开关来覆盖默认行为。

    谢谢!