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.

[参考译文] TMS320F280049C:CLA MMOV32条件移动指令与后增量寻址、行为、流水线和文档不清楚

Guru**** 2474590 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1466507/tms320f280049c-cla-mmov32-conditional-move-instruction-vs-post-increment-addressing-behaviour-pipeline-and-documentation-unclear

器件型号:TMS320F280049C

工具与软件:

我将自己读入 CLA 指令集、发现条件移动指令非常方便、尤其是这样

MMOV32 MRA、mem32{、CNDF}

我假设在 EXE 阶段评估标志、并且仅在条件为真时才写入 MRA。 关于迁移、管道没有问题。

但是、如果 mem32是具有后增量的间接寻址(* mar0[#imm16]++)、会出现什么情况?

a)因为整个指令是有条件的、所以这个后增量是有条件的还是一直被执行?

b)如果是有条件的、则在 D2阶段写入 MAR 后增量、另外是否需要在 D1或 D2阶段评估标志?

最好能回答这个问题并更新与这一点相关的文档。

条件后增量允许在马克思内进行条件计算,但我担心这样的马克思计算不是条件性的,而是始终执行。

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

    Carl、您好!

    这是我需要向设计和编译器团队咨询的问题、因为我在任何文档中都找不到答案(如您所说)。 请允许我花些时间与他们一起研究这件事、我会给您回复。

    现在、如果您想尝试某个操作、可以在调试器中打开"Disassembly"窗口并监控、查看条件的具体行为(可能是让代码将 MRA0寄存器内容写入内存位置以进行监控、因为我认为您无法直接访问该寄存器)。

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您浏览文档。

    与此同时、我找到了一种绕过它的方法、但这需要几个额外的周期(并且由于 float 而计算地址感觉很奇怪)。

    老实说、我没找到时间尝试一下:

       MMOV16   MAR0、#0
       MMOV32    MR1、#1.0
       MMOV32   MR0、#0.0
       MCMP32   MR0、MR1
       MNOP
       MNOP
       MNOP
       MMOV32 MR0、* MAR0[1]++、GT
       MCMP32 MR1、MR0
       MMOV32 MR0、* MAR0[2]++、GT
       MMOV32 MR0、* MAR0[4]++、GT
       MMOV32 MR0、* MAR0[8]++、GT
       MMOV32 MR0、* MAR0[16]++、GT
       MMOV16   @结果、MAR0

    如果 MAR0修改条件、则应显示"结果"。

    我最初是用 C 语言编写功能并使用编译器、但它远不完美或不快。 编译器根本不使用这些条件移动、而是始终使用许多 MNOP 来清除流水线。

    此致、

    Carl

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

    Carl、您好!

    遗憾的是、我无法在内部找到任何有关 CLA 指令集的更多资源、因此我可以提供的最佳信息是就指令行为而言 TRM 中的内容。 这是一个非常具体的案例、我相信这就是我们没有记录它的原因。 最佳解决方案是逐步执行反汇编并在调试器中查看 MAR0寄存器以了解行为。

    此致、

    Delaney  

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

    另一个注意事项:为了提高编译器性能、还可以尝试在工程属性中启用优化、在某些情况下可以摆脱 MNOP。