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

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

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

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

Сообщение Cheb » 18.02.2017 19:38:59

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

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

Сообщение скалогрыз » 18.02.2017 20:19:49

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

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

ты о чём? процессоры же разные (32 vs 64) (нету же бинарной совместимости межу little-endian и big-endian процессорами)
на single и double, т.е float-point - есть стандарт.
А вот на 80 битовый extended стандарта вроде как нет?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение Cheb » 18.02.2017 23:20:16

Понятненько. То есть в 32-битной версии эти мощи сохраняются чисто для поддержки древнекода из дельфи и турбо паскаля, а на остальных платформах - "извиняйте"?..
Разумно.
Вырезаю из своего игрового движка поддержку extended, ибо нефиг.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

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

Сообщение alexey38 » 21.02.2017 09:41:27

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


Но ведь ряд процессоров поддерживает 80 битовый extended. И если для какой-то задачи требуется точность именно 80 битовый extended, то придется отказывать от FreePascal?
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

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

Сообщение mig-31 » 21.02.2017 14:51:37

А что вам мешает сделать собственный тип. Можете сделать с любой точностью.
mig-31
постоялец
 
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

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

Сообщение xdsl » 22.02.2017 10:00:50

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 тоже матсопроцессором обрабатывается.
xdsl
постоялец
 
Сообщения: 131
Зарегистрирован: 15.01.2009 13:49:03

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

Сообщение Cheb » 01.03.2017 15:22:11

К сожалению, он может поддерживаться хоть до посинения, но 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
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

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

Сообщение daesher » 01.03.2017 22:53:27

Что тут сказать?
Код: Выделить всё
[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ами) работает вполне штатно.
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

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

Сообщение MylnikovDm » 24.03.2017 17:47:22

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

Так что я сильно сомневаюсь, что под nix'ами у вас extended работает штатно в х64 режиме. Скорее всего вы просто не проверяли, есть ли разница между extended и double.
MylnikovDm
постоялец
 
Сообщения: 103
Зарегистрирован: 15.02.2007 21:26:10
Откуда: Челябинск


Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru