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.

[参考译文] TMS320F28377D:技术参考手册中有关 CLA 读取和写入 MSTF 中条件标志的模糊性

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/587581/tms320f28377d-technical-reference-manual-ambiguity-around-cla-reading-and-writing-of-condition-flags-in-mstf

器件型号:TMS320F28377D

我正在尝试优化 F28377D 上的一些 CLA 代码、使用技术参考手册(spruhm8e)作为 CLA 指令集和流水线的指南。 我发现在哪里以及何时读取 MSTF 寄存器中的条件标志并将其更新为不明确。

TRM 表示 CLA 条件分支在 CLA 流水线的 D2阶段读取 MSTF 寄存器的条件标志(5.5.1美元、P629)、并且能够修改条件标志的最后一条指令是之前的4个周期(示例5-1、p631)。 手册中没有任何一个明确说明对条件标志进行流水线级修改的地方。 您能否验证对于修改条件标志的所有指令、修改都发生在 CLA 流水线的 EXE 阶段?

有几个条件执行的 CLA 指令:"MMOV32 MRA、mem32{、CNDF}"、 "MMOV32 MRA、MRb{、 CNDF}"、 "MNEGF32 MRA、MRb{、CNDF}"、 "MSWAPF MRA、 MRB{、CNDF}"。 TRM 不明确说明在 CLA 流水线的哪个阶段读取条件标志。 您能否验证这些指令来评估 CLA 流水线 D2级中的条件标志?

无论条件否定的执行如何、"MNEGF32 MRa、MRb{、CNDF}"都将更新条件标志、因为如果条件不为真、则指令本质上是"MMOV32 MRa、MRb"。 我的理解是否正确?

"MMOV32 MRA、mem32{、CNDF}"和"MMOV32 MRA、MRb{、CNDF}"是有条件执行的指令、用于修改条件标志。 如果条件不为真、您能否确认条件标志未更新?

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

    [引用 USER="IainRist"]您能否验证对于修改条件标志的所有指令,修改是在 CLA 流水线的 EXE 阶段进行的?

    这些标志反映了算术运算(大部分)的结果、该操作仅在 EXE 阶段完成、因此我假设这些标志也在该阶段更新。 我不确定所有 CLA 指令是否都是这样、因此我将与我们的设计团队联系、并返回给您

    [引用 user="IainRist"]有条件地执行了几条 CLA 指令:"MMOV32 MRA、mem32{、CNDF}"、 "MMOV32 MRA、MRb{、 CNDF}"、 "MNEGF32 MRA、MRb{、CNDF}"、 "MSWAPF MRA、 MRB{、CNDF}"。 TRM 不明确说明在 CLA 流水线的哪个阶段读取条件标志。 您能否验证这些指令来评估 CLA 流水线 D2级中的条件标志?

    这些指令的标志似乎在 EXE 阶段进行评估。 这是我尝试过的

    MDEBUGSTOP
    MMOV16MAR0、@μ_HND
    MMOVF32MR3、#121.0
    MMOVF32MR2、#-190.0
    MSETFLGNF-1
    MMOV32MR0、MR3、LT;MR0应等于121
    MMOV32MR0、MR2、MR0;
    MR0 =
    MMR0、MR0 =
    M32 MR0;MR0 = MR0 MNE0MR0保持-190
    MSETFLGNF-0 ZF=0
    MNEGF32MR1、MR3、NEQ;MR1应等于-121
    MNEGF32MR1、MR3、EQ;MR1应等于+121,因为 COND 不真实
    MMOV32MR1、MR2、NEQ; MR1应为-190,不设置 NF,即使 COND 为 true
    MSETFLGNf=0 ZF=1
    MMOV32MR1、MR3、NEQ;MR1应保持-190,不设置 NF,即使 COND 不真实 MNOP
    
    MNOP
    MNOP
    
    MNOP MSTOP MSTOP
    MSTOP MSTOP MNOP MSTOP MNOP MSTOP MNOP MNOP MNOP MSTOP MNOP MNOP MSTOP
    
    

    我更改了一个标志、然后在随后的指令上执行依赖于该标志的移动、它起作用。 这将指示大多数指令的标志、除非在分支情况下明确说明、否则在 EXE 阶段评估这些标志。 我再次向我们的设计团队确认这一点。

    [引用 user="IainRist"]"MNEGF32 MRA、MRb{、CNDF}"查找更新条件标志、而不管条件否定的执行如何、因为如果条件不为 true、则指令本质上是"MMOV32 MRa、MRb"。 我的理解是否正确?[/引述]

    是的、正确

    [引用 user="IainRist"]"MMOV32 MRA、mem32{、CNDF}"和"MMOV32 MRA、MRb{、CNDF}"是有条件执行的指令、用于修改条件标志。 如果条件不为真、您能否确认条件标志未更新?

    正确。 如果条件不为真、则条件标志不会更新、仅在无条件移动时更新。

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

    我向我们的设计团队核实了这是他们的回答、

    [引用 USER="Vishal_Coelho"]是否可以验证对于修改条件标志的所有指令,修改都是在 CLA 流水线的 EXE 阶段进行的?

    设计:"在 EXE 阶段对条件标志进行任何更新"

    [引用 user="Vishal_Coelho"]有条件地执行了几条 CLA 指令:"MMOV32 MRa、mem32{、CNDF}"、 "MMOV32 MRa、MRb{、 CNDF}"、 "MNEGF32 MRA、MRb{、CNDF}"、 "MSWAPF MRA、 MRB{、CNDF}"。 TRM 不明确说明在 CLA 流水线的哪个阶段读取条件标志。 您能否验证这些指令来评估 CLA 流水线 D2级中的条件标志?

    设计:"除了 EXE 阶段中的分支/调用/返回之外的所有条件指令在 D2阶段中评估标志、而分支/调用/返回则评估这些标志"

    [引用 USER="Vishal_Coelho"]MNEGF32 MRa、MRb{、CNDF}"查找更新条件标志、而不管条件否定的执行如何、因为如果条件不为真、指令本质上是"MMOV32 MRa、MRb"。 我的理解是否正确?[/引述]

    我对此的回答不正确。 设计:"任何条件指令、包括这个指令、只有当 COND = UNCF 时才更新条件标志(无条件移动、带有标志修改)。 如果条件不是 UNCf 但被评估为 true、则执行取反操作、但不更新标志"

    [引用 USER="Vishal_Coelho"]MMOV32 MRA、mem32{、CNDF}"和"MMOV32 MRa、MRb{、CNDF}"是有条件地执行的修改条件标志的指令。 如果条件不为真、您能否确认条件标志未更新?

    设计:"任何条件指令只能在 COND = UNCF 时更改标志"

    分支/调用/返回在 D2阶段评估条件  

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

    这是否能回答您的问题? 您可以继续吗?

    此致、Bernd