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.

TMS320F28379D: Type [W9999] Register write access is in the delay slot of a write of the same register

Part Number: TMS320F28379D

Hello,

I have problems with ti-cgt-c2000_20.2.3.LTS compiler.

If optimization level of the project is set to 0 or no optimization is used then there are NO warnings. If I set the optimization level to 1 then I have the following warning:

Description Resource Path Location Type
[W9999] Register write access is in the delay slot of a write of the same register                     line 191 C/C++ Problem

In attachments, you can find .pp file as described in the article How to Submit a Compiler Test Case.

Thank you in advance!Euler2OmegaInstr.pp.txt

  • Thank you for notifying us of this problem, and submitting a test case.  I am able to reproduce the same behavior.  I filed EXT_EP-10215 to have this investigated.  You are welcome to use that link to follow it.

    Thanks and regards,

    -George

  • Thank you very much for your answer!

    Do I need to be ready for an unexpected change of the variable in the program flow because of this issue?

    Best regards,

    Andrean

  • Hi,

    We are verifying with the hardware specialists whether there is an actual problem with the generated assembly or whether the compiler warning is incorrect.  There are some special pipeline behaviors involved with the relevant instructions.  The DIV2PIF32 write of R0H requires 1 less cycle than usual prior to a store to memory (the MOV32 instruction) so the latency between these 2 instructions in the sequence below would ordinarily be correct.  However, the MOV32 is happening in parallel with the MPYF32 which writes R0H, so we need to confirm if the special latency still applies.  We will get back to you as soon as we get a definitive answer from the hardware folks and the bug report will be updated accordingly.

            DIV2PIF32 R0H,R0H               ; [CPU_FPU] |3424|

            MPYF32    R1H,R5H,R3H           ; [CPU_FPU] |3423|

            MPYF32    R0H,R6H,R7H           ; [CPU_FPU] |3423|

    ||      MOV32     *-SP[2],R0H           ; [CPU_FPU] |3424|

    Regards,

    Anna Youssefi

    TI Compiler Support Team

  • It will take some time to work out the details of the pipeline behavior with the hardware experts.  Please be patient.

    Thanks and regards,

    -George

  • Dear Andrean,

    We have received confirmation that there is no problem with the assembly sequence because the parallel MOV32 has already read the output register of DIV2PIF32 before the parallel MPYF32 will overwrite it.  Therefore, I have updated the bug report to indicate that the Assembler warning is incorrect in this situation and we will update the Assembler to detect this special circumstance.

    Best,

    Anna Youssefi

    Compiler Support Team

  • Hello Anna,

    Glad to hear that this is not a bug!

    Thank you very much for your help!

    Best regards,

    Andrean