Forth http://www.fforum.winglion.ru/ |
|
x64 Форт? http://www.fforum.winglion.ru/viewtopic.php?f=8&t=2749 |
Страница 2 из 4 |
Автор: | 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:
|
Страница 2 из 4 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |