2015-05-19 2 views
0

Wrt my this question, я не могу проверить результат. Я получаю неправильный оператор печати после выполнения. Может кто-нибудь сказать мне, являются ли printf() заявления неправильными или логика, что я делаю неправильно.warning: format '% ld' ожидает аргумент типа long int, но аргумент имеет тип '__builtin_neon_di'

КОД:

int64_t arr[2] = {227802,9896688}; 
int64x2_t check64_2 = vld1q_s64(arr); 

for(int i = 0;i < 2; i++){ 
    printf("check64_2[%d]: %ld\n",i,check64_2[i]); 
} 

int64_t way1 = check64_2[0] + check64_2[1]; 

int64x1_t way2 = vset_lane_s64(vgetq_lane_s64(check64_2, 0) + vgetq_lane_s64(check64_2, 1), way2, 0); 

int64x1_t way3 = vadd_s64(vget_high_s64 (check64_2),vget_low_s64 (check64_2)); 

printf("way1 :%ld \n",way1); 
printf("way2 :%ld \n",way2); 
printf("way3 :%ld \n",way3); 

ВЫВОД:

check64_2[0]: 227802 
check64_2[1]: 9896688 
way1 :0 
way2 :0 
way3 :0 

ВНИМАНИЕ:

warning:format '%ld' expects argument of type 'long int', but argument 3 has type '__builtin_neon_di'printf("check64_2[%d]: %ld\n",i,check64_2[i]); 
warning:format '%ld' expects argument of type 'long int', but argument 2 has type 'int64_t {aka long long int}' [-Wformat=] 
    printf("way1 :%ld \n",way1); 
          ^

Может кто-нибудь сказать мне, как я могу подтвердить логику с помощью журнала/PRINTF сообщений.

+2

Вы можете, возможно, преобразовать значения в соответствующий ожидаемый тип printf: 'printf (" check64_2 [% d]:% ld \ n ", i, (long) check64_2 [i]);' ... ' printf ("way1:% ld \ n", (long) way1); ' – pmg

+0

Или используйте' '% lld'', что, как предлагает второе сообщение об ошибке. – Medinoc

ответ

1

Вы используете расширения NEON. Они не являются нормальными переменными, так как они хранятся в регистрах NEON. Вам нужно использовать специальную функцию для извлечения данных из них. Например, чтобы прочитать однострочное значение int64, вам необходимо позвонить в vget_lane_s64. Он вернет нормальное 64-битное число, которое затем можно подать до printf().

И да, для 64-битных переменных необходимо "%lld".

Смежные вопросы