Forth
http://fforum.winglion.ru/

x64 Форт?
http://fforum.winglion.ru/viewtopic.php?f=8&t=2749
Страница 2 из 2

Автор:  VoidVolker [ Сб янв 21, 2012 15:30 ]
Заголовок сообщения:  Re: x64 Форт?

Нашел iForth (скачать). Есть версии x86 и x64 как под линукс так и под виндоус. Работает из коробки, в комплекте своя IDE, консоль, графическая консоль, четыре сотни немаленьких примеров: в том числе десяток игрушек типа судоку и тетрис; нейронные сети с распознаванием образов; плагин для матлаба; IRC/RSS/POP3/Telnet клиенты и даже экспертная система.

Автор:  KPG [ Ср сен 04, 2019 21:33 ]
Заголовок сообщения:  Re: x64 Форт?

Ещё какой то x64 Форт
A self hosting forth compiler for x64 Windows

Автор:  KPG [ Вс сен 29, 2019 14:21 ]
Заголовок сообщения:  Re: x64 Форт?

kForth-64

P.S. Вроде есть обсуждаемая тема по разработке 64-х разрядного Форта на местном форуме, но сходу не нашёл.

Автор:  Ilya [ Вс сен 29, 2019 17:24 ]
Заголовок сообщения:  Re: x64 Форт?

KPG писал(а):
kForth-64

P.S. Вроде есть обсуждаемая тема по разработке 64-х разрядного Форта на местном форуме, но сходу не нашёл.

Вроде и ничего так, но у него нема CALLBACK:. А это очень потребная штука, хоть для GTK, хоть для MQTT и т.п.
Задал вопрос автору, он не то чтобы послал меня, а отослал меня на какой-то мутный пример. :(

Автор:  Hishnik [ Вс сен 29, 2019 17:44 ]
Заголовок сообщения:  Re: x64 Форт?

Ilya писал(а):
Вроде и ничего так, но у него нема CALLBACK:. А это очень потребная штука, хоть для GTK, хоть для MQTT и т.п.

Это да, но провозившись с Qt, я понял, что вести позиционную войну с компилятором слишком накладно. Надо отдельно думать, как получать адреса функций динамически создаваемых объектов. Что-то с callback нужно делать. Сейчас я использую эмуляцию очереди сообщений от форт-машины вызывающей программе.

Автор:  Victor__v [ Пн окт 07, 2019 11:15 ]
Заголовок сообщения:  Re: x64 Форт?

Ilya писал(а):
KPG писал(а):
kForth-64

P.S. Вроде есть обсуждаемая тема по разработке 64-х разрядного Форта на местном форуме, но сходу не нашёл.

Вроде и ничего так, но у него нема CALLBACK:. А это очень потребная штука, хоть для GTK, хоть для MQTT и т.п.
Задал вопрос автору, он не то чтобы послал меня, а отослал меня на какой-то мутный пример. :(


А какие проблемы с CALLBACK на 64 битах?
и где именно UNIX, Мастдай?

Автор:  Ilya [ Пн окт 07, 2019 16:23 ]
Заголовок сообщения:  Re: x64 Форт?

Victor__v писал(а):
Ilya писал(а):
KPG писал(а):
kForth-64

P.S. Вроде есть обсуждаемая тема по разработке 64-х разрядного Форта на местном форуме, но сходу не нашёл.

Вроде и ничего так, но у него нема CALLBACK:. А это очень потребная штука, хоть для GTK, хоть для MQTT и т.п.
Задал вопрос автору, он не то чтобы послал меня, а отослал меня на какой-то мутный пример. :(


А какие проблемы с CALLBACK на 64 битах?
и где именно UNIX, Мастдай?

Linux.
Я как мин. использую:
libmosquitto.so - mosquitto_message_callback_set & mosquitto_connect_callback_set
libgtk-3.so - g_signal_connect

Автор:  Victor__v [ Пн окт 07, 2019 16:42 ]
Заголовок сообщения:  Re: x64 Форт?

Ilya писал(а):
Linux.
Я как мин. использую:
libmosquitto.so - mosquitto_message_callback_set & mosquitto_connect_callback_set
libgtk-3.so - g_signal_connect

С Linux знаком мало.
Какая там конвенция вызовов для калбеков?
stdcall?
cdecl?

Автор:  f02732 [ Вт окт 08, 2019 18:03 ]
Заголовок сообщения:  Re: x64 Форт?

Victor__v писал(а):
Ilya писал(а):
Linux.
Я как мин. использую:
libmosquitto.so - mosquitto_message_callback_set & mosquitto_connect_callback_set
libgtk-3.so - g_signal_connect

С Linux знаком мало.
Какая там конвенция вызовов для калбеков?
stdcall?
cdecl?

Так в чем проблема, я так и не понял? Сложно реализовать из-за того, что на 64-разрядных системах принято соглашение fastcall с передачей параметров через регистры?

Автор:  Victor__v [ Вт окт 08, 2019 19:21 ]
Заголовок сообщения:  Re: x64 Форт?

f02732 писал(а):
Так в чем проблема, я так и не понял? Сложно реализовать из-за того, что на 64-разрядных системах принято соглашение fastcall с передачей параметров через регистры?

Мне вот тоже это интересно. В чём там проблема конкретно?
Мало ли какие-то сложности имеются.
а разве в linyx fastcall?
В винде под 64 бит да.

Автор:  dmitri [ Ср окт 09, 2019 17:04 ]
Заголовок сообщения:  Re: x64 Форт?

В 64-битном линуксе для передачи параметров используется System V AMD64 ABI.
Проблема коллбеков в том, что существующие форты для 64-битного линукса с открытым исходным кодом их не поддерживают.
Кто-то должен с нуля их закодить. Остальным будет легче.

Автор:  Ilya [ Ср окт 09, 2019 19:28 ]
Заголовок сообщения:  Re: x64 Форт?

Victor__v писал(а):
Ilya писал(а):
Linux.
Я как мин. использую:
libmosquitto.so - mosquitto_message_callback_set & mosquitto_connect_callback_set
libgtk-3.so - g_signal_connect

С Linux знаком мало.
Какая там конвенция вызовов для калбеков?
stdcall?
cdecl?

Я вот тут не в курсе, но обращался к нескольким Фортописателям (умеющих в динлибы, но не реализовавшие callback) и они только разводили руками! :?

Автор:  Ilya [ Ср окт 09, 2019 19:31 ]
Заголовок сообщения:  Re: x64 Форт?

dmitri писал(а):
В 64-битном линуксе для передачи параметров используется System V AMD64 ABI.
Проблема коллбеков в том, что существующие форты для 64-битного линукса с открытым исходным кодом их не поддерживают.
Кто-то должен с нуля их закодить. Остальным будет легче.

gforth может в callback, но он жи на ЦЭ написан.

Автор:  Victor__v [ Ср окт 09, 2019 20:13 ]
Заголовок сообщения:  Re: x64 Форт?

Так-с, путём гугления, выяснилось, что конвенция вызовов в Lin fastcall
Насколько это вообще применимо к каллбекам :?:
Будем считать, что преминимо полностью
6-ть аргументов передаются в регистрах: RDI, RSI, RDX, RCX, r8, r9

Форт-часть:
: CALLBACK: \ n --
HEADER
['] (lin-fastcall) COMPILE,
, \ сохраняем число берущихся переменных
TRUE STATE !
;

Ассемблерная часть:
; ЭТО (lin-fastcall)
; в RAX передаётся код либы. Но у на CALLBACK поэтому считаем, что этот регистр не используется никак
PUSH RBP
LEA RAX, [RSP+8] ; получаем количество параметров


PUSH RAX
MOV RAX, [RAX]
OR EAX, EAX
POP RAX
JE params

PUSH RDI
CMP [RAX], 1
JE params

PUSH RSI
CMP [RAX], 2
JE params

PUSH RDX
CMP [RAX], 3
JE params

PUSH RCX
CMP [RAX], 4
JE params


PUSH r8
CMP [RAX], 5
JE params


PUSH r9
CMP [RAX], 6
JE params

; короче забьём и дадим ссылку на оставшиеся параметры
PUSH RAX
MOV RAX, [RAX-24] ; 8 - игнорирование вызова ЭТОГО КОДА 8 игнорирование вызова слова CALLBACK 8 - игнорирование PUSH RBP вначале
XCHG RAX, [RSP]
; что нужно форту? форту нужен стек данных
param:
LEA RSP, -320 ; 40 ЯЧЕЕК надеюсь хватит?

LEA RBP, RSP ; начало стека данных

; собственно сам вызов
PUSH RAX ; сохраняем изначальный указатель
LEA RAX, [RAX+8]
PUSH RAX
LEA RAX, [RSP+2*8+320] ; указатель на наши параметры
CALL [ESP]
MOV RSP, [RSP+8] ; возвращаем усё как было
POP RBP
RET

Ну вот вам и :^) примерный код :^)

Если только каллбеки используют FASTCALL

Автор:  Ilya [ Чт окт 10, 2019 21:54 ]
Заголовок сообщения:  Re: x64 Форт?

Victor__v писал(а):
Ассемблерная часть:
; ЭТО (lin-fastcall)
; в RAX передаётся код либы. Но у на CALLBACK поэтому считаем, что этот регистр не используется никак
PUSH RBP
LEA RAX, [RSP+8] ; получаем количество параметров


PUSH RAX
MOV RAX, [RAX]
OR EAX, EAX
POP RAX
JE params
.......

; что нужно форту? форту нужен стек данных
param:
LEA RSP, -320 ; 40 ЯЧЕЕК надеюсь хватит?

Ну вот вам и :^) примерный код :^)

Если только каллбеки используют FASTCALL

Здорово!
Вот только маленькая очепятка у вас :
Код:
JE params
и
Код:
param:
:wink:

Страница 2 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/