Dear team,
My customer would like to have a ASM checker for TMS320C667x with the following capacities:
- The ASM include file (*.i) shall only contain comment, empty lines or include lines.
- “.sect” keyword is forbidden inside a macro.
- All labels shall be placed in column 1 and is followed by a colon (“:”) or a question mark “?”.
- When using a label inside a macro, the question mark “?” shall be used:
- instead of the semicolon “:” after the label tag,
- at the end of the label name when used
- Registers A0 to A31 and B0 to B31 shall be initialized before being used.
- Multiple assignments of registers are forbidden
- Hand-coded register renaming (.asg directive) is forbidden
- A comment “;#Reserve <register_list>” shall be written before using any register of the A or B register file. When the register is no more used, the comment “;#Free <register_list>” shall be inserted after the last instruction using it. Registers of <register_list> are separated with commas “, ”
- Unit specifier field (.D1, .D2, .M1, .M2, .L1, .L2, .S1, .S2) shall be specified for all instructions except unitless ones.
- The output width of .M1/.M2 unit shall not exceed 128 bits per DSP cycle.
- .L1/.L2 and .S1/.S2 functional units shall not write twice in the same DSP cycle on the same functional unit.
- Two instructions shall not write to the same register on the same DSP cycle.
- Fast floating point instructions shall be used instead of old ones, only kept for backward compatibility (FADDSP/FSUBSP instead of ADDSP / SUBSP)
- Functional unit latency (i.e. the delay during a functional unit is locked before it can start executing the next instruction) shall be respected for all instructions.
- Branching instructions shall use only labels (no literal constants)
- Conditional compilation/assembly is forbidden except for #include guards in*.h files when coding in C.
- MFENCE instruction shall not be executed in parallel with any other instruction.
- Two instructions using the same functional unit cannot be issued in the same execute packet.
- All double-precision floating point instructions are forbidden.
- DINT/RINT instructions are forbidden
Please reply to the post, i will forward him ,
Thanks, Maxime