OberonCore
https://forum.oberoncore.ru/

Баг в XDS
https://forum.oberoncore.ru/viewtopic.php?f=30&t=1155
Страница 1 из 1

Автор:  PGR [ Среда, 10 Сентябрь, 2008 12:23 ]
Заголовок сообщения:  Баг в XDS

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 выдает корректный код.

Автор:  Александр Ильин [ Среда, 10 Сентябрь, 2008 13:18 ]
Заголовок сообщения:  Re: Баг в XDS

Это при дефолтных настройках? Какая версия XDS - 2.51?
Я ассемблер очень плохо понимаю, поэтому спрошу: результат-то вычисления правильный?

Автор:  Trurl [ Среда, 10 Сентябрь, 2008 13:33 ]
Заголовок сообщения:  Re: Баг в XDS

Внимательно читаем документацию. ;)

Цитата:
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).

Автор:  PGR [ Среда, 10 Сентябрь, 2008 14:04 ]
Заголовок сообщения:  Re: Баг в XDS

Да, действительно, по умолчанию используется Watcom calling convention, несовместимое со стандартным сишным соглашением (которое используется в MSVC, GCC итд). После добавления в файл проекта "-cc=msvc" все заработало.

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/