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.

[参考译文] 编译器/TMS320F2.8377万D:代码生成错误

Guru**** 2553450 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/586275/compiler-tms320f28377d-code-generation-bug

部件号:TMS320F2.8377万D

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

我在调查其他问题时发现了此问题

% cat i16tof32_v_Attempt2.c

静态内嵌浮点stof1(const short *x){ return (Float)*x;}

void i16tof32_v_Attempt2 (float *y,const short *x,short num)

while (num--)*y++= stof1(x++);
}

% "C:/ti/Ccsv6/tools/compiler/ti-CGT-C2000_VCU_support=v28 16.9 -ml -mt --CLA_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 -o3 --opt_for c2000_speediag=-fu_32 --tup_support_support=turp_tools/interrub_g_intrap_f_-fu_gf_-fu32 -fu_tools=tfu_sym_tools/tran_tools=tp=tf_cret-f_cn=tf_cn=tf_crontrub_cru_f_f_f_fu_fu_f_-fu_fu_fu_fu_fu_fu_ 16.9

% cat i16tof32_v_Attempt2.asm

;*******************************************************
;* TMS320C2000 C/C++ Codegen PC v 16.9 .2.LTS *
;*创建日期/时间:2017年4月4日星期二12:00:44 *
;*******************************************************
compiler_opts --abi=coffabi --cla_support=cla1 --diag_wrap=off --float_support=fpu32 --hll_source=on --mem_model:code=flat --mem_model:data=large --object_format=coff --silit_version=28 --symdebug:none --tMU_support
ASGXAR2,FP
; C:\\Users\\rist-1\\AppData\\Local\\Temp\\2.3402万 16.9 C:\\2.3402万 C:\\Users\\rist-1\\AppData\\Local\\Temp\\2.3402万 C:\\2.3402万 C:\AppData\\Temp\\2.3404万 opt2000.exe
; 16.9 C:\ccsv6\tools\compiler\ti-CGT-C2000_SDCX.2.LTS\bin\ac2000.exe -2000. -@C:\\Users\\rist-1\\AppData\\Local\\Temp\\23.4012万.
.sect ".text"
单击
global _i16tof32_v_Attempt2.

;*******************************************************
;* FNAME:_i16tof32_v_Attempt2 FR大小: 0*
;**
;*函数环境*
;**
;*函数属性*
;* 0参数,0自动,0 SOE *
;*******************************************************

_i16tof32_v_Attempt2:
;***5 --------------------------- 如果(!num )转到g7;
CMBB AL,#0;[CPU_]|5|
b $C$L3,EQ;[CPU_]|5|
;发生分支;[]|5|
;***5 --------------------------- D1美元 =编号和1;
;***5 --------------------------- 如果(num < 2)转到G5;
和AH,AL,#0x0001;[CPU_]|5|
CMBB AL,#2;[CPU_]|5|
b $C$L2,LT;[CPU_]|5|
;发生分支;[]|5|
;***--------------- l1美元 =(num>>>1)-1;
;***--------------- #pragma must迭代(116383,1)
;***--------------- //以下循环按因子展开(2)
;***--------------- #pragma loop_flags(4102u)
;***--------------- G4:
;***1---------------- *y++=(浮动)*x++;//[0]
;***1---------------- x = x;//[0]
;***1---------------- +x;//[0]
;***1---------------- *y++=(浮点)*x;//[0]
;***5 --------------------------- 如果(--L1美元)!=(-1))转到G4;
ASR AL,1;[CPU_]
ADDB AL,#-1;[CPU_]
MOVZ AR6,AL;[CPU_]
RPTB $C$L2,AR6;[CPU_]|5|
;重复块开始;[]
$C$L1:
MOVX TL,*XAR5++,[CPU_]|1|
MOV32 R0H,XT;[CPU_]|1|
NOP;[CPU_]
NOP;[CPU_]
NOP;[CPU_]
NOP;[CPU_]
I32TOF32 R1H,R0H;[CPU_]|1|
NOP;[CPU_]
MOV32 *XAR4++,R1H;[CPU_]|1|
MOV32 *XAR4++,R0H;[CPU_]|1|
;重复块结束;[]
$C$L2:
;***--------------- G5:
;***--------------- 如果(d1美元<=0)转到G7;
CMBB AH,#0;[CPU_]
b $C$L3,Leq;[CPU_]
;发生分支;[]
;未滚动循环的剥离循环迭代:
;***1---------------- *y =(浮点)*x;//[0]
;***--------------- G7:
;***--------------- 返回;
I16TOF32 R0H,*+XAR5[0],[CPU_]|1|
NOP;[CPU_]
MOV32 *+XAR4[0],R0H;[CPU_]|1|
$C$L3:
LRTR;[CPU_]
;出现返回;[]
;*内联函数引用:
;*[0] stof1.

 

C代码将16位整数数数组转换为32位浮点数组。 查看装配体中的未滚动循环;循环仅执行单个转换,并将32位浮点推入输出,然后将符号扩展的16位输入推入输出。 它还缺少输入数组的下半部分。

我是在引发一个我不知道的未定义行为,还是这是编译器问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这与CodeGen-2179 (在其他线程中记录的错误)的原因相同,但在本例中,它表现为错误。 我将相应地升级严重性。