Выбор арифметики с плавающей точкой

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

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

Ответить
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Выбор арифметики с плавающей точкой

Сообщение Иван Шихалев »

Free Pascal поддерживает ключик выбора арифметики с плавающей точкой — “-CfXXX”, где возможные значения XXX можно посмотреть, запустив

Лично у меня выдает следующий список:

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

Supported FPU instruction sets:
  SOFT
  SSE64
  SSE3

Так вот — при выборе SSE3 (“-CfSSE3”) компилятор имеет свойство выдавать «Internal Error», номер не помню... Ошибка возникает именно при компиляции, не в Run-time, из чего я делаю вывод, что это — баг.
Вариант “-CfSSE64” работает нормально.
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

У меня SSE3 нет. Инфа, внизу, достаточна для сравнения?

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

Free Pascal Compiler version 2.2.4

Compiler Date      : 2009/04/13
Compiler CPU Target: x86_64

Supported targets:
  Linux for x86-64
  FreeBSD for x86-64
  Win64 for x64

Supported CPU instruction sets:
  ATHLON64

Supported FPU instruction sets:
  SOFT
  SSE64

Supported Optimizations:
  REGVAR
  STACKFRAME
  LOOPUNROLL
  TAILREC

This program comes under the GNU General Public Licence
For more information read COPYING.FPC

Report bugs,suggestions etc to:
                 bugs@freepascal.org

Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

У меня 2.3.1 SVN:

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

Free Pascal Compiler version 2.3.1

Compiler Date      : 2009/05/05
Compiler CPU Target: x86_64

Supported targets:
  Linux for x86-64
  FreeBSD for x86-64
  Win64 for x64
  Darwin for x86_64

Supported CPU instruction sets:
  ATHLON64

Supported FPU instruction sets:
  SOFT
  SSE64
  SSE3

Supported ABI targets:
  DEFAULT
  SYSV
  AIX
  EABI
  ARMEB

Supported Optimizations:
  REGVAR
  STACKFRAME
  LOOPUNROLL
  TAILREC

Supported Whole Program Optimizations:
  All
  DEVIRTCALLS
  OPTVMTS
  SYMBOLLIVENESS

Supported Microcontroller types:

This program comes under the GNU General Public Licence
For more information read COPYING.FPC

Report bugs, suggestions, etc. to:
                 http://bugs.freepascal.org
or
                 bugs@freepascal.org
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

У меня вот такие:
Free Pascal Compiler version 2.2.5

Compiler Date : 2009/03/31
Compiler CPU Target: i386
...
Supported FPU instruction sets:
X87
SSE
SSE2
SSE3
...

и
Free Pascal Compiler version 2.3.1

Compiler Date : 2009/02/23
Compiler CPU Target: i386
...
Supported FPU instruction sets:
X87
SSE
SSE2
SSE3
...

Пробовал компилировать и в том и в том компиляторе по 10 раз - никаких ошибок не выскакивало.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Vadim писал(а):Пробовал компилировать и в том и в том компиляторе по 10 раз - никаких ошибок не выскакивало

А операции с плавающей точкой были сами по себе? У меня засбоило при сборке Лазаря...

Добавлено спустя 3 минуты 25 секунд:
Ну и выбрать “-CfSSE3” надо при компиляции... Само наличие ее в списке сбоев не дает :)
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Иван Шихалев писал(а):Ну и выбрать “-CfSSE3” надо при компиляции...

Ну, само собой... :)
Иван Шихалев писал(а):А операции с плавающей точкой были сами по себе?


Сами по себе не были, но были операции с DateTime, а это, по-моему, как раз с плавающей точкой.

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

{-CfSSE3}
Program ds;
Uses SysUtils, DateUtils;

Var
  b: Double;
  ts: TTimeStamp;
  dd: TDateTime;
Begin
  b:=MinuteSpan(StrToDate('01.01.0001'), StrToDate('01.01.2008'));
  WriteLn(b:30:3);
  WriteLn(MinutesBetween(StrToDate('01.01.0001'), StrToDate('01.01.2008')));
  dd:=Now;
  WriteLn(Round(dd));
  WriteLn(DateTimeToUnix(dd));
  ts:=DateTimeToTimeStamp(dd);
  WriteLn(ts.Date, ' ', ts.time);
End.
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

Процессора разные.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Угу. По всей видимости под 64 бита SSE3 еще не допилен.
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

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

~/fpc231/compiler> ./ppcx64 -i
Free Pascal Compiler version 2.3.1

Compiler Date      : 2009/05/11
Compiler CPU Target: x86_64

Supported targets:
  Linux for x86-64
  FreeBSD for x86-64
  Win64 for x64
  Darwin for x86_64

Supported CPU instruction sets:
  ATHLON64

Supported FPU instruction sets:
  SOFT
  SSE64
  SSE3

...

Это в 2.3.1 имеется с AMD 64
Немного полазил по форумах. Одни пишут, что ESS64 - 64 разрядная реализация для ESS2, в других для ESS3. Сам толком не знаю, но если это так, то в случае с процессором ATHLON64, инструкция SSE3 не должна присутствовать. Видимо всего лишь проверку упустили при отображении инструкций.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Athlon64 может быть и без SSE3 — зависит от конкретной модели. См. http://en.wikipedia.org/wiki/SSE3#CPUs_with_SSE3
# Athlon 64 (since Venice Stepping E3 and San Diego Stepping E4)
# Athlon 64 X2
# Athlon 64 FX (since San Diego Stepping E4)

Курсив мой.

А вот SSE2 там есть везде.
Ответить