OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 19 Апрель, 2024 11:07

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Баг в XDS
СообщениеДобавлено: Среда, 10 Сентябрь, 2008 12:23 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
XDS генерирует некорректный код для такой процедуры
Код:
PROCEDURE ["C"] sum*(a, b: LONGREAL): LONGREAL;
BEGIN
  RETURN a + b
END sum;
Вместо правильного:
Код:
        fld     qword ptr [esp+12]
        fadd    qword ptr [esp+4]
        retn
он выдает такой бред:
Код:
        add     esp, -8
        fld     qword ptr [esp+20]
        fadd    qword ptr [esp+12]
        fstp    qword ptr [esp]
        mov     eax, [esp]
        mov     edx, [esp+4]
        sub     esp, -8
        retn

Для "Pascal "и "StdCall" типов вызова XDS выдает корректный код.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Баг в XDS
СообщениеДобавлено: Среда, 10 Сентябрь, 2008 13:18 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Это при дефолтных настройках? Какая версия XDS - 2.51?
Я ассемблер очень плохо понимаю, поэтому спрошу: результат-то вычисления правильный?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Баг в XDS
СообщениеДобавлено: Среда, 10 Сентябрь, 2008 13:33 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Внимательно читаем документацию. ;)

Цитата:
For Windows NT and Windows 95 XDS supports the MSVC++ and Watcom (stack convention) compilers. The corresponding values of the CC equation are "MSVC" and "WATCOM", written in any case. If the equation is not set, the compiler will assume "WATCOM" by default.


Цитата:
Note: If the CC equation is set to either "WATCOM" or "SYMANTEC", foreign procedures declared as "C" are considered to return REAL results in EAX, and LONGREAL results in EAX (low order bytes) and EDX (high order bytes).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Баг в XDS
СообщениеДобавлено: Среда, 10 Сентябрь, 2008 14:04 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Да, действительно, по умолчанию используется Watcom calling convention, несовместимое со стандартным сишным соглашением (которое используется в MSVC, GCC итд). После добавления в файл проекта "-cc=msvc" все заработало.

Баг отменяется ;)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB