DEADSOFTWARE

Изменение структуры проекта
[dsw-obn.git] / src / backends / libgccjit / notes
1 # 24.07.2017
3 - libgccjit годится разве что для хелловорлдов.
4 Переходим на jvm.
6 - открытые массивы работкают криво как статические аргументы процедур
7 Случай 1: не проходит проверки libgccjit
8 (*
9 TYPE Ar = ARRAY OF INTEGER;
10 VAR a : POINTER TO Ar;
12 (* так же и с VAR-параметром *)
13 PROCEDURE Ax(x : Ar);
14 END Ax;
16 Ax(a);
17 *)
18 Случай 2: массив должен быть указателем, да и ещё копироваться
19 (*
20 TYPE Ar = ARRAY OF INTEGER;
21 VAR a : POINTER TO Ar;
23 (* при использовании VAR-параметра работает *)
24 PROCEDURE Ax(x : Ar);
25 END Ax;
27 Ax(a^);
28 *)
30 - импортируемые модули не инициализируются (секция begin)
32 - не реализовано расширение типа record:
33 libgccjit не умеет в классы. Проверки в рантайме надо делать вручную.
34 - нет проверок границ массивов в рантайме:
35 Потому что как минимум нет дескрипторов типа.
36 Возможно можно заюзать это:
37 https://gcc.gnu.org/onlinedocs/gcc/Pointer-Bounds-Checker-builtins.html
38 - При вычислении размера структур не учитывается вравнивание.
39 в libgccjit нет средств получения размера типов, в т.ч. структур
40 Как происходит выравнивание и есть ли оно вообще по дефолту - не понятно:
41 Нужно ли для получения выровненных структур использовать gcc_jit_type_get_aligned?
42 Пересекается с этим:
43 https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html
44 Требуемые выравнивания для типов можно получить через встроинную функцию __alignof__(T)
45 https://gcc.gnu.org/onlinedocs/gcc/Alignment.html
46 Возможный алгоритм выравнивания:
47 https://stackoverflow.com/questions/6963998/how-does-gcc-calculate-the-required-space-for-a-structure
48 http://www.rendoc.tech/questions/834444/how-does-gcc-calculate-the-required-space-for-a-structure
49 Есть ещё что-то для проверки границ объектов:
50 https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html
51 - не понятен результат присваивания статических/разыменованных структур и массивов
52 (* reca := recb; *) - побайтовое копирование?
53 - не реализовано присваивание процедур к переменным-процедурам:
54 в libgccjit нет средств получения указателя на функцию.
55 Как решение-костыль - получение указателя в основной программе и сохранение в переменной.
56 - не реализован автокаст:
57 Не критично: libgccjit сам разруливает типы разных размеров.
58 - не реализованы локальные процедуры:
59 libgccjit не умеет в локальные функции.
60 Обойти можно костылём как в jvm.
61 - нет проверок переполнения как в рантайме, так и в компилтайме.
62 Возможно можно заюзать это:
63 https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html