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.

请问ELF的__int40_t的使用问题



你好,在编写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,请问这个又是什么问题?

非常感谢大家的回答