User Tag List

Показано с 1 по 10 из 41

Тема: GCC 11.2.1 с поддержкой процессоров 1801вм1 и 1801вм2

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,733
    Спасибо Благодарностей отдано 
    2,735
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    133 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тогда раз обращение к параметрам идёт через 4(sp) и 6(sp), то значит атрибут inline игнорится?

    Скрытый текст

    Цитата Сообщение от BlaireCas Посмотреть сообщение
    Код:
    int inline rt11_print(int i, const char* ptr)
    {
        asm ("mov 4(sp), r0");
        ...
    }
    [свернуть]

    Кстати, если добавить опцию -fomit-frame-pointer, то указатель фрейма не будет сохраняться на стеке и секции enter/leave будут покомпактнее, а 4(sp) превратится в 2(sp).

    Этот пользователь поблагодарил Oleg N. Cher за это полезное сообщение:

    BlaireCas(14.11.2021)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    485
    Спасибо Благодарностей отдано 
    140
    Спасибо Благодарностей получено 
    392
    Поблагодарили
    147 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    если добавить опцию -fomit-frame-pointer, то указатель фрейма не будет сохраняться на стеке
    О, да. Так стало намного лучше.

    А насчет inline - я вообще сомневаюсь что в GCC это работает без включения опций оптимизации. Но с включенной оптимизацией навроде -О1 - скомпиленное "ломается" и у меня не заработало в итоге. "Тонкие" настройки не пробовал. Можно как вариант атрибут на функцию попробовать повесить что-то типа always_inline.. Не изучал такой момент.

    Насчет регистров - самому казалось что тут будет как для ARM, то-есть первые четыре параметра вне зависимости от опций компилятора всегда идут через R0-R3. Но нет, идет через стек. Даже если по стечению обстоятельств один из параметров идет через R0 - в стек он все-равно будет засунут.
    Последний раз редактировалось BlaireCas; 14.11.2021 в 13:29.

    Этот пользователь поблагодарил BlaireCas за это полезное сообщение:

    Oleg N. Cher(15.11.2021)

  4. #3

    Регистрация
    26.03.2019
    Адрес
    г. Киев, Украина
    Сообщений
    98
    Спасибо Благодарностей отдано 
    133
    Спасибо Благодарностей получено 
    51
    Поблагодарили
    26 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    у PDP-11 слишком мало регистров, чтоб через них передавать параметры. Например, в том же i386 так же все через стек сделано. Только в AMD64 изменили ABI, плюс регистров добавили.

    Поломать GCC, чтоб передавать параметры через регистры -- можно. Вот только в внутри вызванной функции опять таки будет использоваться стек, чтоб сохранить R0...R4 на стек и уже относительно стека работать со значениями

  5. #4

    Регистрация
    06.02.2020
    Адрес
    г. Москва
    Сообщений
    485
    Спасибо Благодарностей отдано 
    140
    Спасибо Благодарностей получено 
    392
    Поблагодарили
    147 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от yu.zxpk Посмотреть сообщение
    Поломать GCC, чтоб передавать параметры через регистры -- можно
    Хакир Но возможно это не требуется. Ассемблерные процедурки которые требуют скорости - они вообще без параметров-же будут (ожидая значения в регистрах). А регистры можно загрузить через asm() как в примере там показано:

    #define RT11_TTYOUT(c) asm(" mov %[input_c],r0\n emt 0341\n bcs .-2\n" : : [input_c] "r" (c) : "r0", "cc" )

    Я не знаю что означают символы : : например, надо гуглить синтаксис. Но оно работает и судя по дизасму все верно делает. Вставляет код который загружает параметр в регистр R0 и вызывает EMT и надеюсь компилятор понимает что регистр R0 был использован и учитывает это.

    - - - Добавлено - - -

    Чего еще хочется от GCC - чтобы FIS инструкции (эти четыре FADD, FSUB, FDIV, FMUL) использовал и формат float-а был-бы DEC-овский. Например на УКНЦ эти инструкции повешены пусть и на прерывание, но у меня работали в какой-то версии RT-11.
    А то ценность сишника без плавучки нереально сильно падает.

  6. #5

    Регистрация
    26.03.2019
    Адрес
    г. Киев, Украина
    Сообщений
    98
    Спасибо Благодарностей отдано 
    133
    Спасибо Благодарностей получено 
    51
    Поблагодарили
    26 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я посмотрю, что можно сделать с поддержкой FIS для 1801ВМ2.
    Уже пора прикрутить тесты собранного кода на "железной" реализации 1801ВМ1 и 1801ВМ2 в виде FPGA.
    То есть разбираться с DejaGNU framework, написать минимальный ROM, который будет уметь только LDA грузить и работать с 1 COM-портом, сделать соотвествующее описание "board" в DejaGNU и методы работы с ним.
    Последний раз редактировалось yu.zxpk; 14.11.2021 в 16:07.

    Этот пользователь поблагодарил yu.zxpk за это полезное сообщение:

    Vslav(14.11.2021)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Вопрос по 1801ВМ1
    от svinka в разделе БК-0010/0011
    Ответов: 35
    Последнее: 27.02.2022, 21:22
  2. Оберон/GCC для УКНЦ/БК
    от Oleg N. Cher в разделе ДВК, УКНЦ
    Ответов: 22
    Последнее: 10.11.2021, 11:15
  3. отладочный модуль на 1801ВМ1
    от Случайность в разделе ДВК, УКНЦ
    Ответов: 16
    Последнее: 21.04.2020, 14:55
  4. 1801ВМ2 А и Б
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 03.05.2010, 11:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •