Extended и Comp: они вообще поддерживаются?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Extended и Comp: они вообще поддерживаются?

Сообщение Cheb »

Намедни ковырял свою перзистентную систему. Когда пытался прочитать 64-битном модуле сессию, записанную 32-битным - парсер душераздирающе кричал про неизвестные неподдерживаемые типы extended и comp. Я эту байду не использую, поддержку в своё время добавлял просто шоб было.
Стало интересно, запустил дебажную версию. В логах в том месте, где должны регистрироваться эти два типа - ничего. А это может значить только одно: они уже зарегистрированы под другим именем.
И вот я офигеваю: что, под x86_64 extended и comp - это и правда лишь алиасы double?
А как же совместимость бинарных файлов?
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

extended - решение в пользу аппаратной поддержки и делфи совместимости?
а
comp всегда был 64-битным. это ж интеджер!

Cheb писал(а):А как же совместимость бинарных файлов?

ты о чём? процессоры же разные (32 vs 64) (нету же бинарной совместимости межу little-endian и big-endian процессорами)
на single и double, т.е float-point - есть стандарт.
А вот на 80 битовый extended стандарта вроде как нет?
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

Понятненько. То есть в 32-битной версии эти мощи сохраняются чисто для поддержки древнекода из дельфи и турбо паскаля, а на остальных платформах - "извиняйте"?..
Разумно.
Вырезаю из своего игрового движка поддержку extended, ибо нефиг.
alexey38
долгожитель
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Сообщение alexey38 »

скалогрыз писал(а):на single и double, т.е float-point - есть стандарт. А вот на 80 битовый extended стандарта вроде как нет?


Но ведь ряд процессоров поддерживает 80 битовый extended. И если для какой-то задачи требуется точность именно 80 битовый extended, то придется отказывать от FreePascal?
mig-31
постоялец
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Сообщение mig-31 »

А что вам мешает сделать собственный тип. Можете сделать с любой точностью.
xdsl
постоялец
Сообщения: 131
Зарегистрирован: 15.01.2009 12:49:03

Сообщение xdsl »

Extended серьезно не поддерживается? Любопытные сказки.

Linux, x86-64, fpc 3.0
программа 1.pp:

Код: Выделить всё

var x:extended;
    i:integer;
begin
 writeln(sizeof(x));
 x:=1e3000;
 writeln(x);
 for i:=1 to 10 do
    x:=x/10;
 writeln(x);
end.

компилируем fpc -al 1.pp
запускаем ./1
видим:

Код: Выделить всё

10
 9.99999999999999999986E+2999
 9.99999999999999999986E+2989

для очистки совести смотрим в 1.s
видим:

Код: Выделить всё

...
# [8] x:=x/10;
        fldt    U_$P$PROGRAM_$$_X
        fldt    _$PROGRAM$_Ld2
        fdivrp  %st,%st(1)
        fstpt   U_$P$PROGRAM_$$_X
        cmpw    $10,U_$P$PROGRAM_$$_I
        jl      .Lj31
...

читаем про fldt и 80-битный вещественный тип: https://sourceware.org/binutils/docs/as ... Float.html

comp можете проверить аналогично.

Добавлено спустя 2 минуты 29 секунд:
И, кстати, comp тоже матсопроцессором обрабатывается.
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

К сожалению, он может поддерживаться хоть до посинения, но RTTI это глубоко до лампочки: в 64-битном режиме TypeInfo(extended) возвращает значение, идентичное TypeInfo(double).
Моя перзистентная система просто не может знать о таком типе. Никак.

Код: Выделить всё

{$mode objfpc}
{$longstrings on}
program extest;
uses sysutils, typinfo;
begin
  WriteLn(IntToHex(ptruint(typeinfo(double)), sizeof(pointer) * 2));
  WriteLn(IntToHex(ptruint(typeinfo(extended)), sizeof(pointer) * 2));
  ReadLn;
end.


d:\chentrah\modules\tests>c:\fpc\2.6.4\bin\i386-win32\fpc extended.pas
Free Pascal Compiler version 2.6.4 [2014/03/06] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling extended.pas
Linking extended.exe
11 lines compiled, 0.4 sec , 60368 bytes code, 12892 bytes data

d:\chentrah\modules\tests>extended
0041078C
00410798


d:\chentrah\modules\tests>c:\fpc\2.6.4\bin\i386-win32\ppcrossx64 extended.pas
Free Pascal Compiler version 2.6.4 [2014/03/06] for x86_64
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win64 for x64
Compiling extended.pas
Linking extended.exe
11 lines compiled, 0.4 sec , 74160 bytes code, 19604 bytes data

d:\chentrah\modules\tests>extended
00000001000148E0
00000001000148E0


d:\chentrah\modules\tests>c:\fpc\3.0.0\bin\i386-win32\fpc extended.pas
Free Pascal Compiler version 3.0.0 [2015/11/16] for i386
Copyright (c) 1993-2015 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling extended.pas
Linking extended.exe
11 lines compiled, 0.7 sec, 64848 bytes code, 4148 bytes data

d:\chentrah\modules\tests>extended
00413220
00413230


d:\chentrah\modules\tests>c:\fpc\3.0.0\bin\i386-win32\ppcrossx64 extended.pas
Free Pascal Compiler version 3.0.0 [2015/11/16] for x86_64
Copyright (c) 1993-2015 by Florian Klaempfl and others
Target OS: Win64 for x64
Compiling extended.pas
Linking extended.exe
11 lines compiled, 0.7 sec, 71440 bytes code, 4980 bytes data

d:\chentrah\modules\tests>extended
0000000100015280
0000000100015280
daesher
постоялец
Сообщения: 221
Зарегистрирован: 09.03.2010 21:17:14

Сообщение daesher »

Что тут сказать?

Код: Выделить всё

[vvi@comp1 tmp]$ fpc extended.pas 
Free Pascal Compiler version 3.1.1 [2017/01/22] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling extended.pas
Linking extended
8 lines compiled, 0.4 sec
[vvi@comp1 tmp]$ ./extended
0000000000673090
00000000006730A0


Итого - под Win64 extended отсутствует (по всей видимости, это такая особенность платформы). Как-то я тоже на это обращал внимание, читал что-то. Бороться бесполезно, по крайней мере, пока. Под Linux (и другими nixами) работает вполне штатно.
MylnikovDm
постоялец
Сообщения: 103
Зарегистрирован: 15.02.2007 20:26:10
Откуда: Челябинск

Сообщение MylnikovDm »

Extended работает только на 80х86 процессорах в 32 разрядном режиме. Для других процессоров и режима x64 для Intel/AMD тип extended является псевдонимом типа double, а в некоторых случаях даже типа single.

Так что я сильно сомневаюсь, что под nix'ами у вас extended работает штатно в х64 режиме. Скорее всего вы просто не проверяли, есть ли разница между extended и double.
Ответить