你好,在编写intrinsic的小工程的时候,遇到一个问题。在spru187的文档中有提到EABI的data types有__int40_t的定义,为40bit,区别于32bit 的long类型。
我在测试_labs()的时候遇到了数据类型长度的问题:
#include <limits.h>
#include <c6x.h>
#include <stdio.h>
#include <string.h>
void main()
{
int40_t lTestData0, lTestData1;
int40_t lRtnData0, lRtnData1;
lTestData0 = -2147483648 ;
lTestData1 = 2147483647 ;
lRtnData0 = _labs(lTestData0 );
lRtnData1 = _labs(lTestData1 );
printf("_labs(%ld) = %lu, _labs(%d) = %lu\n", lTestData0, lRtnData0, lTestData1, lRtnData1 );
lTestData0 = -549755813888;
lTestData1 = 549755813887;
lRtnData0 = _labs(lTestData0 );
lRtnData1 = _labs(lTestData1 );
printf("_labs(%ld) = %lu, _labs(%d) = %lu\n", lTestData0, lRtnData0, lTestData1, lRtnData1 );
}
我使用的编译器版本为7.4.1,C66系列simulator,-g,没开优化,ccs5.3。
当output format为COFF时,结果正确,打印为:
_labs( -2147483648) = 2147483648, _labs(2147483647) = 2147483647
_labs( -549755813888) = 549755813887 , _labs(549755813887) = 549755813887
当使用ELF时,结果错误,打印为:
_labs( -2147483648) = 0, _labs( -2147483648) = 0
_labs(0) = 128, _labs(-1) = 127
请问为什么会出现这种现象?按照spru187ELF是有40bit的定义的,但是实际上不能用呢?
另外在watch window中,虽然COFF的结果正确,但是无论是COFF还是ELF,lTestData0 等四个变量均显示不正确,显示为0或者-1,COFF也只能显示32bit,请问这个又是什么问题?
非常感谢大家的回答