15.03.2024
Добавлена новая встроенная функция датчика случайных чисел RDRAND к уже имеющейся встроенной функции RANDOM. Новая функция имеет такой же аргумент (диапазон случайных значений), но получает случайное значение не с помощью формулы, а с помощью процессорной команды RDRAND.
14.01.2024
Исправлена помарка в системной библиотеке, из-за которой после исключения (например, целочисленного переполнения) состояние FPU менялось в части разрешения прерываний по точности. Т.е. вместо обычного состояния FPU CW=360 устанавливался режим CW=340 .
31.08.2023
Из-за помарки в компиляторе, в коде вызова WinAPI генерировался лишний REX- префикс. Он не влиял на работу, но увеличивал размер кода.
08.07.2023
Добавлена встроенная константа ?PI типа FLOAT(53), равная 3.1415926….
07.04.2023
Из-за помарки в компиляторе для нескольких одинаковых констант длиной 4 байта создавалось несколько копий вместо одного единственного экземпляра.
04.04.2023
Устранена ошибка в выдаче протокола компиляции, из-за которой LINT-KT могла проверять не все межмодульные связи.
04.03.2023
Исправления в дизассемблере встроенного отладчика, который неправильно показывал некоторые команды SSE2. Кроме этого, директива отладчика ZS теперь показывает не 8, а все 16 регистров XMM.
28.01.2023
Небольшая доработка, позволяющая выделять одним оператором allocate кусок более 2 Гбайт. В результате можно создавать массивы с числом элементов более, чем 2**31. Правда в этом случае нельзя контролировать индекс вне границ, пример обработки массива (предполагается, что на компьютере 32 Гбайта ОЗУ):
test:proc main;
dcl
?memory fixed(31) ext init(35_000_000), // заказали 2**35 байт (34 359 738 358)
p …………..ptr,
i…………….fixed(63),
x(1:100).. fixed(63) based(p);.………………..// фиктивный размер массива
i=2**32*8;.……………………………………………// реальный размер массива 2**32
allocate(i) set(p);.…………………………………..// выделили память для массива
do i=1 to 2**32; x(i)=i; end i;.…………………// тестовое заполнение массива
end test;
08.12.2022
Устранено несколько мелких, но неприятных ошибок в компиляторе, связанных с добавлением проверок на переполнение.
03.09.2022
Устранена ошибка в компиляторе, остававшаяся незамеченной с апреля, в результате которой мог генерироваться неправильный код.
23.07.2022
Продолжение оптимизация кода. Контроль переполнения при переходе от числовой переменной большего размера к меньшей. См. статью
23.04.2022
Продолжение оптимизация кода. Если возможно, адреса переменных пишутся через через [<R>]+смещение8. Например, если в коде встречаются команды
mov rsi,offset X
mov Y,1
и между адресами X и Y разница в 10 байт, то вторая команда заменяется на
mov b ptr [rsi]+10,1
07.03.2022
Оптимизация передачи параметров при вызове процедуры. Если возможно, адреса параметров пишутся через [RBX]+…
23.01.2022
Исправлена ошибка не выделения стека для 4 переменных, в случае, если WinApi не имеет входных параметров. Для Windows 7 это не влияло, для Windows 10 WinApi GetClipBoardOwner портило адрес возврата в стеке
24.12.2021
Улучшена оптимизация регистров. Файлы .SYM и .TRF теперь можно разместить в ресурсах .EXE, например, составив для программы TEST.EXE следующий RC-файл с элементами с кодом 50
и далее оттранслировав его RC-транслятором и вставив в сборку по описанной ранее технологии
05.10.2021
Добавлены встроенные функции REAL, IMAG, COMPLEX, CONJG
25.09.2021
Улучшены отладочные команды, вставляемые при компиляции с ключами «Q», «R», «T»
19.09.2021
Очередная доработка оптимизатора, улучшающая использование регистров
19.08.2021
Наконец исправлен старинный недостаток компилятора — в универсальной функции Булевой алгебры BOOL третий параметр (формула логики) теперь может быть переменной, а не только константой, как ранее. При этом универсальность этой функции, обесцененная этим недостатком, восстановилась
08.08.2021
Улучшена кодогенерация в части использования регистров R8-R14
21.02.2021
Исправлена ошибка преобразования текстовой строки в битовую, возникавшая в некоторых случаях.
12.12.2020
Добавлена проверка на наличие EXTERNAL-переменных с одинаковым именем, но разными атрибутами.
27.09.2020
Как и в PL/1 для MULTICS, в заголовке процедуры (но не в операторе описания DCL) ключевое слово RETURNS стало необязательным, например,
вместо
F:PROC(X,Y) RETURNS(FLOAT);
можно писать
F:PROC(X,Y) FLOAT;
1.06.2020
Общая встроенная таблица имен системных подпрограмм Windows расширена до почти полных списков экспорта библиотек – свыше 9100 имен системных вызовов.
Для таких имен можно не указывать из какой они библиотеки. Включены списки экспорта из следующих библиотек Windows:
KERNEL32, USER32, GDI32, SHELL32, WINMM, IMAGEHLP, OLE32, NTDLL, WININET, ADVAPI32, COMCTL32, GDIPLUS, WINHTTP, WSOCK32, MAPI32
9.11.2019
Добавлен ключ M вывода части сообщений компилятора на английском
Ключ M может быть задан через реестр:
[HKEY_CURRENT_CONFIGSoftwarePL/1]
«M»=dword:00000000
28.10.2019
Внутри констант — битовых строк, разрешены подчеркивания
5.9.2019
Допустима «невидимая» переменная цикла типа:
DO TO 10; … END;