User Tag List

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

Тема: 32-разрядный процессор, полностью совместимый с архитектурой PDP-11.

Древовидный режим

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

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    Да да, видно
    Об том и речь. Нет разницы, какой вариант C компилируется, "ванильный" или "правильный" - архитектура LLVM настолько заточена под современные реалии, что сделать на базе LLVM нормальный кросс-компилятор для PDP-11 весьма непросто.

    Для примера. Самый простенький и невинный (по затратам на преодоление) затык с LLVM возникает из-за того, что весь движок LLVM построен в априорном предположении, будто индексная адресация выгоднее автоинкрементной.

    Чтобы заставить LLVM использовать автоинкрементную адресацию в нулевом базовом блоке - нужно изменить относительно немного кода компилятора и результат компиляции такой:

    Код:
    extern "C" void post_5ac( int x, int *pi16 )
    {
        *pi16++ = x;
        *pi16++ = x;
        *pi16++ = x;
    }
    Код:
    	.globl	post_5ac                ; -- Begin function post_5ac
    post_5ac:                               ; @post_5ac
    ; BB#0:                                 ; %entry
    	Mov	R0, (R1)+
    	Mov	R0, (R1)+
    	Mov	R0, (R1)
    	Return
                                            ; -- End function

    Но чтобы заставить LLVM использовать автоинкрементную адресацию в нескольких базовых блоках подряд - нужно полностью переделать весьма большой кусок компилятора, на что у меня пока запала нет. А без этого результат плачевен:

    Код:
    extern "C" int post_6a( int x, int *pi16 )
    {
        x |= *pi16++;
        x |= *pi16++;
        x |= *pi16++;
    
        if( !x )
        {
            x += *pi16++;
            x += *pi16++;
            x += *pi16++;
        }
        else
        {
            x -= *pi16++;
            x -= *pi16++;
            x -= *pi16++;
        }
    
        return x;
    }
    Код:
    	.globl	post_6a                 ; -- Begin function post_6a
    post_6a:                                ; @post_6a
    ; BB#0:                                 ; %entry
    	Mov	R1, R2
    	BiS	(R2)+, R0
    	BiS	(R2)+, R0
    	BiS	(R2)+, R0
    	Tst	R0
    	BEq	.LBB0_2
    ; BB#1:                                 ; %if.else
    	SUB	(R2), R0
    	SUB	8(R1), R0
    	SUB	10(R1), R0
    	Br	.LBB0_3
    .LBB0_2:                                ; %if.then
    	ADD	(R2), R0
    	ADD	8(R1), R0
    	ADD	10(R1), R0
    .LBB0_3:                                ; %if.end
    	Return
                                            ; -- End function
    Последний раз редактировалось Patron; 24.08.2018 в 21:06.

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

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

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

Похожие темы

  1. Собрал комп полностью своими руками
    от scooby-do в разделе Зарубежные компьютеры
    Ответов: 15
    Последнее: 15.03.2025, 00:11
  2. Fuzebox - полностью открытая 8-битная игровая приставка
    от CityAceE в разделе Зарубежные компьютеры
    Ответов: 22
    Последнее: 09.03.2017, 15:35
  3. MSX и EPSON-совместимый принтер
    от ipkin в разделе MSX
    Ответов: 3
    Последнее: 01.12.2011, 19:23
  4. Ответов: 5
    Последнее: 20.06.2011, 03:18
  5. Куплю ZX совместимый компьютер.
    от billgilbert81 в разделе Барахолка (архив)
    Ответов: 19
    Последнее: 05.12.2008, 20:33

Ваши права

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