OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 12 Декабрь, 2019 00:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Oml - МультиОберон для LLVM
СообщениеДобавлено: Суббота, 17 Август, 2019 09:37 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 398
Откуда: Москва
МультиОберон для LLVM содержит в себе полностью новый бэкенд LLVM версии 5.0.

Oml предназначен для работы:
- из командной строки,
- в среде BlackBox.

Oml работает как с '.odc' файлами, так и с текстовыми файлами '.mod' из среды BlackBox и только с текстовыми файлами '.mod' из командной строки.

Oml работает в качестве оболочки OmlSh.exe командной строки, что позволяет делать скрипты на Обероне.

В комплект входят модули системы выполнения (Kernel, ..), позволяющие запускаться как на 32-бит, так и на 64-бит.

Ссылка на МультиОберон на гитхабе здесь


Вложения:
QuickStartOml_ru.pdf [292.26 КБ]
Скачиваний: 28
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Суббота, 17 Август, 2019 13:48 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 398
Откуда: Москва
Если совсем просто, то после установки можно запустить команду 32-битного приложения:
Код:
Blwe\OmlSh ex OmtestHelloWorld
Команда осуществляет компиляцию Omtest/Mod/HelloWorld.mod и выполнение Omtest/Clwe/HelloWorld.ocf как динамически загруженного модуля оболочкой OmlSh.exe.

Либо можно запустить команду 64-битного приложения:
Код:
Blwr\OmlSh ex OmtestHelloWorld
Команда осуществляет компиляцию Omtest/Mod/HelloWorld.mod и выполнение Omtest/Clwr/HelloWorld.ocf как динамически загруженного модуля оболочкой OmlSh.exe.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Суббота, 17 Август, 2019 19:40 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 398
Откуда: Москва
Если интересует, как сделан интерфейс к LLVM, то используется LLVM-C: C interface to LLVM. В коде это реализовано в модуле LlvmC, сгенеренного по хедерам LLVM версии 5.0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 14:26 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 398
Откуда: Москва
SovietPony писал(а):
Как у LLVM с поддержкой мета-информации?

Мета-информация та же самая, что и у остальных, одинаковы структуры (Kernel.Module, Kernel.Type и проч) и реализация близка к CPFront. Например, для модуля HostTimes заполнение поля Kernel.Module в случае Omf, файл HostTimes.c, будет таким
Код:
struct SYSTEM_MODDESC HostTimes__desc = {
   0, 13, 0, /* next, opts, refcnt */
   {2019, 5, 28, 8, 42, 20}, /* compTime */
   {0, 0, 0, 0, 0, 0}, /* loadTime */
   HostTimes__body,
   0,
   2, /* nofimps */
   0, /* nofptrs */
   0, 0, 0, 0, 0, 0, 0, 0, /* csize..varBase */
   HostTimes__names,
   HostTimes__ptrs,
   HostTimes__imp,
   (SYSTEM_DIRECTORY*)HostTimes__exp,
   "HostTimes"
};

а заполнение поля в случае Oml, файл HostTimes.ll, будем аналогичным
Код:
@HostTimes__desc = global %SYSTEM_MODDESC { %SYSTEM_MODDESC* null, i32 3, i32 0, [6 x i16] [i16 2019, i16 5, i16 30, i16 13, i16 19, i16 31], [6 x i16] zeroinitializer, void ()* @HostTimes__body, void ()* null, i32 2, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, [189 x i8]* @HostTimes__names, [1 x i32]* @HostTimes__ptrs, [3 x %SYSTEM_MODDESC*]* @HostTimes__imp, %SYSTEM_DIRECTORY* @HostTimes__exp, [256 x i8] c"HostTimes\00" }

Таким образом, получив указатель на Kernel.Module, мы будем иметь одинаковые структуры (с точностью до размерности указателя) с одинаковыми данными для всех 3 бэкендов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 17:37 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 398
Откуда: Москва
Comdiv писал(а):
Интересно посмотреть на результат выполнения Div(-2147483647 - 1, -2) в МультиОбероне при использовании LLVM с разными настройками
Код:

Проверками работы оптимизации в LLVM для МультиОберона я не занимался пока еще. В принципе, кому интересно, может попробовать скомпилировать в '.ll', а потом запустить llc с опциями (например, -O=1, -O=2, -O=3) для получения объектника. Более поздняя версия llc описана здесь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 19:53 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 975
Откуда: Киев
До сборки с оптимизацией я не дошёл, но и без этого интересно
Код:
MODULE OmtestDiv;

  IMPORT Out := OLog;

  PROCEDURE Div(a, b: INTEGER): INTEGER;
  BEGIN
  RETURN
    (-a) DIV (-b)
  END Div;

  PROCEDURE Go;
  BEGIN
    Out.Int(Div(-2147483647 - 1, -2)); Out.Ln
  END Go;

BEGIN
  Go
END OmtestDiv.
Код:
$ wine Bbwe/OmbSh.exe execute OmtestDiv
 -1073741824

$ wine Blwe/OmlSh.exe execute OmtestDiv
 one error detected
*Div.mod:0 "    Out.Int(Div(-2147483647 - 1$, -2)); Out.Ln" - number too large, err= 203

Меняем Go
Код:
  PROCEDURE Go;
  VAR i: INTEGER;
  BEGIN
    i := -2147483647;
    Out.Int(Div(i - 1, -2)); Out.Ln
  END Go;
Код:
$ wine Blwe/OmlSh.exe execute OmtestDiv
 -536870912


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 19:55 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 975
Откуда: Киев
А вообще, планируется ли сделать все арифметические переполнения ошибками времени исполнения и компиляции?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Воскресенье, 18 Август, 2019 20:25 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 398
Откуда: Москва
Хороший вопрос ... Не уложилось пока, что с этим делать. Но Ваши примеры красноречивы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Oml - МультиОберон для LLVM
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 15:20 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 398
Откуда: Москва
Во время сборки и/или установки LLVMT.so на Linux сталкивался с проблемами старых glibc-ов. То, что меньше 2.15 (посмотреть ldd --version) вызывало проблемы. Сначала формат ABI поменялся (ELF file OS ABI invalid). Поменял формат с помощью brandelf - пошло требовать GLIBX_2.15 и прочая, и прочая. А также пришлось пакет tinfo доставлять и для 64, и для 32-битной поддержки.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB