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/ |