Важная информация

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 38

Тема: Бага SDCC версии 3.3.0

  1. #1
    Banned
    Регистрация
    28.12.2012
    Адрес
    Leesburg, VA, USA
    Сообщений
    974
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Бага SDCC версии 3.3.0

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

    Код:
    char i;
    void main(void)
    {
    	i = 0;
    	while (1)
    		i = (i == 3) ? 0 : (i + 1);
    }
    Свежайшая версия 3.3.0 компилирует вот в это:
    Код:
    _main:
    ;1.c:9: i = 0;
    	ld	hl,#_i + 0
    	ld	(hl), #0x00
    ;1.c:11: while (1)
    00102$:
    ;1.c:13: i = (i == 3) ? 0 : (i + 1);
    	ld	a,(#_i + 0)
    	cp	a,#0x03
    	jr	Z,00107$
    	inc	a
    00107$:
    	ld	(#_i + 0),a
    	jr	00102$
    Я думаю, комментировать не надо.

    ИЧСХ, проверил на версии 2.9.0 (та, которая в шыру-СДК):
    Код:
    _main:
    ;1.c:9: i = 0;
    	ld	hl,#_i + 0
    	ld	(hl), #0x00
    ;1.c:11: while (1)
    00102$:
    ;1.c:13: i = (i == 3) ? 0 : (i + 1);
    	ld	a,(#_i+0)
    	sub	a,#0x03
    	jr	NZ,00106$
    	ld	c,#0x00
    	jr	00107$
    00106$:
    	ld	hl,#_i + 0
    	ld	c,(hl)
    	inc	c
    00107$:
    	ld	hl,#_i + 0
    	ld	(hl), c
    	jr	00102$
    Предлагается найти 100500 отличий.

    Cвежая версия делает намного более вменяемый код. Но пропустить ТАКУЮ багу...
    Ладно бы код был какой экзотичный. И что интересно: если написать например:
    Код:
    i = (i == 3) ? 1 : (i + 1);
    то получится уже вот так:
    Код:
    	ld	a,(#_i + 0)
    	sub	a, #0x03 ; <-- !!!!!!!!!!!!!!!!!
    	jr	NZ,00106$
    	ld	a,#0x01
    	jr	00107$
    00106$:
    	ld	a,(#_i + 0)
    	inc	a
    00107$:
    	ld	(#_i + 0),a
    Перепутали CP и SUB, бида бида...

    ---------- Post added at 03:57 ---------- Previous post was at 03:51 ----------

    Проверил: присутствует в версиях 3.2.0 и 3.1.0 Нету в версии 3.0.0, но она генерит такую же капусту, как и 2.9.0.

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

  3. #2
    Sinclair User Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,045
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    463
    Поблагодарили
    326 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это лучше сюда http://sourceforge.net/p/sdcc/bugs/
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI

  4. #3
    Banned
    Регистрация
    28.12.2012
    Адрес
    Leesburg, VA, USA
    Сообщений
    974
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Уже.
    Но я полагаю, сообщить народу не повредит.

  5. #4
    Master
    Регистрация
    31.08.2007
    Адрес
    Ковров
    Сообщений
    756
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а где бы взять готовую сборку?
    C64C+1541II

  6. #5
    Banned
    Регистрация
    28.12.2012
    Адрес
    Leesburg, VA, USA
    Сообщений
    974
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сборку чего?

    ---------- Post added at 06:05 ---------- Previous post was at 05:55 ----------

    О, ответили:
    It looks like a peephole rule problem. When compiled with --no-peep the resulting assembly looks correct to me.
    Действительно, опция --no-peep генерит:
    Код:
    	ld	iy,#_i
    	ld	a,0 (iy)
    	sub	a, #0x03
    	jp	NZ,00108$
    	jp	00109$
    00108$:
    	jp	00103$
    00109$:
    	ld	a,#0x00
    	jp	00104$
    00103$:
    	ld	iy,#_i
    	ld	a,0 (iy)
    	inc	a
    00104$:
    	ld	iy,#_i
    	ld	0 (iy),a
    Ну, то есть peephole не работает, и старая лапша.

  7. #6
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    SDCC исторически насквозь кривой. Особенно если пользуешься чем-то кроме простых операций. Я забил им пользоваться. Поскольку компилю большие проекты, искать потом в десятке тысяч строк почему рабочий код после SDCC не работает - нунафиг.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  8. #7
    Veteran Аватар для perestoronin
    Регистрация
    25.11.2011
    Адрес
    г. Красногорск
    Сообщений
    1,389
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    почему рабочий код после SDCC не работает
    Если ПО не править, то оно так и останется бажным, я то ПО что мне нужно правлю, чего и всем рекомендую, не чего халяву ловить, надо и самим хотя бы капельку своего труда вложить в открытое ПО.

    Ретрокладовая продажи

    продажи
    [свернуть]

  9. #8
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от perestoronin Посмотреть сообщение
    Если ПО не править, то оно так и останется бажным, я то ПО что мне нужно правлю, чего и всем рекомендую, не чего халяву ловить, надо и самим хотя бы капельку своего труда вложить в открытое ПО.
    SDCC это как жигули: то уши мерзнут, то хвост отваливается, бесконечная история ловли глюков. А жизнь одна. Нафиг. Тем более это не лучший компилятор ни по коду ни по быстродействию, и на реале не работает.
    Я вот никакого кайфа от правки инструментария не имею вообще. Другое дело, писать что-то прикладное.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  10. #9
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от perestoronin Посмотреть сообщение
    Если ПО не править, то оно так и останется бажным, я то ПО что мне нужно правлю, чего и всем рекомендую
    есть еще такая поговорка: из говна конфетку не сделать. если идеология кривая, можешь ее всю костылями увешать, она все равно будет падать то тут, то там.

  11. #10
    Activist
    Регистрация
    21.12.2005
    Адрес
    Kyiv/Ukraine
    Сообщений
    415
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Это лучше сюда http://sourceforge.net/p/sdcc/bugs/
    Во-во причем все люди нормальные так и делают.

    [
    TSL, перенеси все баги из баг списка. И везде пропиши "Перепутали X и Y, бида бида...".
    И в каждой ветке ответят, "кривой.. кривой.."

    ]
    V6Z80P - Back for Good

Страница 1 из 4 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. SDCC: библиотеки для ZX
    от Sergey в разделе Программирование
    Ответов: 10
    Последнее: 25.10.2015, 19:30
  2. Работа malloc/free в SDCC/Z80
    от Oleg N. Cher в разделе Программирование
    Ответов: 9
    Последнее: 19.01.2015, 15:25
  3. sdcc. с чего начать.
    от ALKO в разделе Программирование
    Ответов: 42
    Последнее: 16.09.2012, 15:49
  4. SDCC - Small Device C Compiler
    от Valen в разделе Программирование
    Ответов: 52
    Последнее: 06.04.2012, 20:44
  5. SDCC вокруг да около
    от andrews в разделе Программирование
    Ответов: 8
    Последнее: 26.03.2008, 08:16

Ваши права

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