История изменений
Исправление 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