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.

[参考译文] 编译器:__x128_t 类型和_dmpyu4会导致寄存器溢出堆栈

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/956194/compiler-__x128_t-type-and-_dmpyu4-causes-register-spillage-to-stack

工具/软件:TI C/C++编译器

我有一个使用 ti-cgt-C6000_8.3.8进行编译的 C++程序

因此、当我使用_dmpyu4内在函数时、寄存器溢出到堆栈(在 asm 文件中)

_mpyu4不会导致任何溢出

是否有办法阻止这种情况?

内联 int16x8_t int16x8_t:::乘以8位(const int16x4_t src0、const int16x4_t src1){
返回 int16x8_t (_dmpyu4 (src0.data、src1.data));
}

内联 int16x4_t int16x4_t:::::lower64 (int16x8_t src){
return int16x4_t (_lo128 (src.data)));
}

内联 rowbox3x3::::::筛选器(int16x4_row1、int16x4_t rowt、int16x4_t trl
int16x4_t dst){

int16x8_t r0_2;
int16x4_t yap;
R0_2 = r0_2.m倍增8位(row0、int16x4_t (mask));
yap = yap.lower64 (r0_2);
dst=yap;
} 

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

    另一种陈述问题的方法... 如果将_dmpyu4内在函数替换为_mpyu4、则代码的性能要好得多。  这是准确的吗?  现在、我认为是这样。

    对于包含此代码 的源文件、请按照文章如何提交编译器测试用例中的说明进行操作。

    谢谢、此致、

    乔治

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

    感谢您的回复 George、

    遗憾的是、性能略有下降

    对于_dmpyu4、假设在使用_mpyu4的情况下提供8个周期、则为 II 提供10个周期

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

    请参阅随附的示例、该示例重现了问题

    编译命令和选项:

    … /ti-cgt-C6000_8.3.8/bin/cl6x sample.cpp -k -O3 -mv6600 -I… /ti-cgt-C6000_8.3.8/include

    e2e.ti.com/.../sample.cpp

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

    感谢您的测试案例。  它使用_dmpyu4而不是_mpyu4。   

    [引用 user="James007"]对于_dmpyu4、假设在使用_mpyu4的情况下提供8个周期、则为 II 提供10个周期[/引用]

    我很困惑。  我看到 ii 为6个周期。  我猜您不会向我展示所有构建选项。  请复制并粘贴所有构建选项、与编译器看到的完全相同。   

    谢谢、此致、

    乔治

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

    抱歉、8/10个周期不适用于示例代码

    您看到的6个周期是正确的。 问题是、尽管它应该能够在没有任何溢出的情况下输送管道、但它仍有泄漏

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

    感谢您的测试案例。  我可以重现相同的结果。  我提交了问题 EXT_EP-10123以进行调查。  欢迎您使用我签名中的以下链接进行操作。  请注意、此问题不会报告错误(因为代码执行正确)、而是性能问题(因为代码比可能的慢)。   

    谢谢、此致、

    乔治