LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

А взглянуть на Форт, который в 40 строчек, можно? Люблю такие вещи. Старая школа.

Не форт, а ассемблер для amd64. Из интересного открытого можно взглянуть на colorForth https://github.com/narke/colorForth/blob/master/cf2019.asm

К сожалению нормальных ассемблеров на форте я не нашел, позже выложу свой.

Верю. Мог бы посоревноваться, но мне важнее не компактность исходников Форта, а компактность оптимальность сгенерированного им кода.

Но ты генерируешь очень медленный код! Неужели он обгоняет хотя бы Python?

Кстати, руки чешутся ещё и оптимизатор прикрутить, но не осилю.

Советую посмотреть на другие компиляторы, коммерческие.

Я много не смотрел твой код, но у меня будет два совета

1. У тебя для циклов есть только i и j, верно? Храни их в фиксированных регистрах, что бы на каждую итерацию не подгружать их из памяти.

2. У всех нормальных реализаций, верхнее значение стека лежит не в стеке, а в регистре, и для инкремента, можно не делать

mov rax, [rsp]
inc rax
mov [rsp], rax
А сразу просто выполнить
inc rax

Это очень простые исправления, которые заметно улучшат скорость.

Исправление MOPKOBKA, :

А взглянуть на Форт, который в 40 строчек, можно? Люблю такие вещи. Старая школа.

Не форт, а ассемблер для amd64. Из интересного открытого можно взглянуть на colorForth https://github.com/narke/colorForth/blob/master/cf2019.asm

К сожалению нормальных ассемблеров на форте я не нашел, позже выложу свой.

Верю. Мог бы посоревноваться, но мне важнее не компактность исходников Форта, а компактность оптимальность сгенерированного им кода.

Но ты генерируешь очень медленный код! Неужели он обгоняет хотя бы Python?

Кстати, руки чешутся ещё и оптимизатор прикрутить, но не осилю.

Советую посмотреть на другие компиляторы, коммерческие.

Я много не смотрел твой код, но у меня будет два совета

1. У тебя для циклов есть только i и j, верно? Храни их в фиксированных регистрах, что бы на каждую итерацию не подгружать их из памяти.

2. У всех нормальных реализаций, верхнее значение стека лежит не в стеке, а в регистре, и для инкремента, можно не делать

mov rax, [rsp]
inc rax
mov [rsp], rax
А сразу просто выполнить
inc rax

Исходная версия MOPKOBKA, :

А взглянуть на Форт, который в 40 строчек, можно? Люблю такие вещи. Старая школа.

Не форт, а ассемблер для amd64. Из интересного открытого можно взглянуть на colorForth https://github.com/narke/colorForth/blob/master/cf2019.asm

К сожалению нормальных ассемблеров на форте я не нашел, позже выложу свой.

Верю. Мог бы посоревноваться, но мне важнее не компактность исходников Форта, а компактность оптимальность сгенерированного им кода.

Но ты генерируешь очень медленный код! Неужели он обгоняет хотя бы Python?

Кстати, руки чешутся ещё и оптимизатор прикрутить, но не осилю.

Советую посмотреть на другие компиляторы, коммерческие.

Я много не смотрел, но у меня будет два совета

1. У тебя для циклов есть только i и j, верно? Храни их в фиксированных регистрах, что бы на каждую итерацию не подгружать их из памяти.

2. У всех нормальных реализаций, верхнее значение стека лежит не в стеке, а в регистре, и для инкремента, можно не делать

mov rax, [rsp]
inc rax
mov [rsp], rax
А сразу просто выполнить
inc rax