Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 24.02.2010, 02:26   #1
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
Восклицание проблема с запуском программы под cygwin

Привет всем.
Запускается файл .c, изначально предназначенный для 64-битного Linux. Но автор предложил заменить функцию clz64() на __builtin_clzll(). И вроде
тогда может пойти на 32-битной машине. А то, что он для Linux, я
попытался обойти установкой эмулятора Cygwin.

Автор кода вызывает у себя программу так:

gcc -msse2 -O2 -Wall -g -o dioph2 dioph2.c -lgmp -lpthread -lm

Gmp и pthread я отметил для установки в Cygwin, т. к. по умолчанию они
там не устанавливаются. А вот math library нужно специально отмечать при установке среди флажков или уже само установится?

Итак, если набрать выше указанный запуск, получается сл. ошибка:

/tmp/ccDF8eQJ.s: Assembler messages: /tmp/ccDF8eQJ.s:1344: Error:
suffix or operands invalid for 'bsr'

Что она значит и в чем может быть причина - 64-битный комп все-таки
нужен, Cygwin не подходит или библиотека какая-то не установлена или
что?

При этом с чего начинается сам файл .c:

#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include <gmp.h>
#include <pthread.h>
#include <unistd.h>
#include <xmmintrin.h>
motorway вне форума Ответить с цитированием
Старый 24.02.2010, 03:02   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,097
По умолчанию

"Автор кода вызывает у себя программу так:"
Не вызывает, а компилирует (собирает).

А вот ошибка интересней. Так как это от ассемблера, то сначала: есть ассемблерные вставки?
p51x вне форума Ответить с цитированием
Старый 24.02.2010, 03:39   #3
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Есть такая штука:
Код:
asm ("bsrq %1, %0\n"
         : "=r" (res)
         : "r" (a));
Похоже, дело в архитектуре. Можно ли как-то заменить это для 32-битной Windows Vista?

Последний раз редактировалось motorway; 24.02.2010 в 03:42.
motorway вне форума Ответить с цитированием
Старый 24.02.2010, 04:02   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,097
По умолчанию

Каких типов res и a?
p51x вне форума Ответить с цитированием
Старый 24.02.2010, 17:58   #5
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Вот такой код там:

Код:
static inline uint64_t clz64(uint64_t a)
{
    uint64_t res;
    asm ("bsrq %1, %0\n"
         : "=r" (res)
         : "r" (a));
    return 63 - res;
}
И вообще во всем файле .c есть довольно много функций с 64. Можно ли любую программу переделать под 32 бита?
motorway вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с запуском Ice Cold Железо 5 04.06.2009 01:10
Проблема с запуском программы K[Lanc]N Помощь студентам 5 21.02.2009 23:49
Проблема с запуском Rio309 Железо 6 21.02.2009 01:43
Проблема с запуском boroda Помощь студентам 5 11.01.2009 12:52
С запуском программы OrdJONY Общие вопросы Delphi 14 28.03.2007 12:13