工具/软件: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位输入推入输出。 它还缺少输入数组的下半部分。
我是在引发一个我不知道的未定义行为,还是这是编译器问题?