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.

[参考译文] 编译器/MSP430FR5739:TI MSP430优化编译器 v18.1.3.LTS 中存在错误

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/719169/compiler-msp430fr5739-bug-in-ti-msp430-optimizing-compiler-v18-1-3-lts

器件型号:MSP430FR5739

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

/* Greg Fundyler 在2018年8月15日发现的 TI MSP430编译器错误。
*
**主要使用-O2 -opt-for-speed=5进行测试
*速度与大小设置似乎无关紧要。
*错误表现为-O2及更高版本。
*
*每个 for 循环只执行一次、但
*演示错误需要此结构。
*
*通过 ti-cgt-msp430_16.9.1.LTS 和 ti-cgt-msp430_18.1.LTS 测试
*
*编译器调用
:*"C:/apps/ti/ccsv7/tools/compiler/ti-cgt-msp430_18.1.3.LTS/bin/cl430 -vmspx -O2 -opt_for_speed=5 -include_path="C:/apps/ti/ccsv7/ccs_base/msp430/include -include_path="C:/apps/ti/ccsv7/tools/compiler/ti-cgt-msp430_18.1.3.LTS/include -advice:power_abit_us_errani_ati_-us=-us_guestines=-us_off-us_guestion_guest-us_guestion_guest-us=-us_guestion_ines=-us-us-us_guestion_guest-ines=-us_guestion_guest-us-ines=-us_guestines=-us_guestines=-us_guestion_guest-ines=-us-us-us-us_guestion_guestion_guestion_ output_all_syms -gen_ACP _raw -preproc_with_compile -preproc_dependence="main.d"
*
链接器调用:
*"C:/apps/ti/ccsv7/tools/compiler/ti-cgt-msp430_18.1.3.LTS/bin/cl430 -vmspx -O2 -opt_for_speed=5 -advice:power_main.c"-define=勘误表:*"C:-vmspx -O2 -opt_for_speed=silicon_us-us_isot-us_excep-off-us-usion_us-us-us-us_excepdag-us_isot-us-us-ina-us_ison_off-us-us-us-us-us-us-us_excepdag-mag-us-in-ina-us-us_ina-us_excepina-us-ina-us-ina-us-ina-us-display-us-board-ina-us_ gen_aCP_raw -z -m"bug.map"--heap_size=160 --stack_size=160 --cinit_hold_wDT=on -i"C:/apps/ti/ccsv7/ccs_base/msp430/include -"C:/apps/ti/ccsv7/ccs_base/msp430/lib/5xx_6xx_FRxx /apps/ti/ccsv7/ccs_base/msp430/include/lnk_msp430fr5739.cmd -i"C:/apps/ti/ccsv7/tools/compiler/ti-cgt-msp430_18.1.3.LTS/lib -i":cstack_size=160 --cinit_hold_wDT=on -i"C:/apps/ti/ccsv7/tools/compiler/ti-cgt-msp430_18.1.3.LTS/include -"_mpu_ram_line_display_ram_line_display.xml"-lib_ram_isecon_line_line_display_line_display_rom-lib_line_display.xml"-line_display_rom-linep-line_display_line_display_line_display_rom-linep_rom-line_display_line_display_rom_rom_linep_linep-lib_rom.xml_linep_lin



#include 

uint32_t y;
int32_t signed_y;
int16_t z;
int32_t big_z;

volatile int32_t outa、 OUTB、outc、outd;//如果在-O3和更高版本缺少'volatil'、则优化 out
// volatile int16_t outa、outb、outc、outd;//更改行为轻微

静态内联 int16_t foo (int32_t x){
返回 x >> 16;
}

void test1 (void){
对于(y = 33345;y < 34000;y += 1000){
signed_y =(int16_t) y;

outa =(5368UL *(uint16_t) y)>> 16;
OUTB = foo (signed_y); // outb = 0 (不正确:应为-1)
outc = signed_y >> 16; // outc =-1 (正确)
}
}

void test2 (void){
对于(y = 33345;y < 34000;y += 1000){
signed_y =(int16_t) y;

OUTA =(5368UL * y)>> 16;
OUTB = foo (signed_y); // outb = 0 (不正确:应为-1)
outc = signed_y >> 16; // outc = 0 (不正确:应为-1)
}
}

void test3 (void){
对于(y = 33345;y < 34000;y += 1000){
signed_y =(int16_t) y;

OUTB = foo (signed_y); // outb = 0 (不正确:应为-1)
outc = signed_y >> 16; // outc = 0 (不正确:应为-1)
}
}

void test4 (void){
对于(y = 33345;y < 34000;y += 1000){
signed_y =(int16_t) y;

OUTB = foo (signed_y); // outb =-1 (正确)
outc = signed_y >> 16; // outc = 65535 (不正确:应为-1)
outd = signed_y >> 17; // outd =-1 (正确)
}
}

void test5 (void){
对于(y = 33345;y < 34000;y += 1000){
signed_y =(int16_t) y;

outc = signed_y >> 16; // outc =-1 (正确)
OUTB = foo (signed_y); // outb =-1 (正确)
}
}

void test6 (void){
对于(z =-20000;z <-19500;z += 1000){
big_z = z;

OUTB = foo (big_z); // outb =-1 (正确)
outc = big_z >> 16; // outc = 65535 @-O2优化、-1 @所有其他优化
}
}

void test7 (void){
对于(z =-20000;z <-19500;z += 1000){
big_z = z;

outc = big_z >> 16; // outc =-1 (正确)
OUTB = foo (big_z); // outb =-1 (正确)
}
}

void main (void){
WDTCTL = WDTPW + WDTHOLD;//停止 WDT

test1();
test2();
test3();
test4();
Test5();
test6();
test7();

while (1){}

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

    感谢您将此问题通知我们、并提交一份简明的测试案例。  我可以重现相同的结果。  我在您的分析中找不到任何错误。  我在 SDOWP 系统中提交了 CodeGen-5187、要求对此进行调查。  欢迎您在我的签名中使用下面的 SDOWP 链接进行访问。

    谢谢、此致、

    乔治

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

    -Greg Fundyler