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

User Tag List

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

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

  1. #1
    Banned
    Регистрация
    28.12.2012
    Адрес
    Leesburg, VA, USA
    Сообщений
    974
    Благодарностей: 312
    Mentioned
    0 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. Эти 2 пользователя(ей) поблагодарили TSL за это полезное сообщение:
    perestoronin (26.09.2013), Valen (26.09.2013)

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

  4. #2
    Veteran Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    1,187
    Благодарностей: 641
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. Эти 2 пользователя(ей) поблагодарили Eltaron за это полезное сообщение:
    perestoronin (26.09.2013), Valen (26.09.2013)

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

    По умолчанию

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

  7. Этот пользователь поблагодарил TSL за это полезное сообщение:
    perestoronin (26.09.2013)

  8. #4
    Master
    Регистрация
    31.08.2007
    Адрес
    Ковров
    Сообщений
    724
    Благодарностей: 105
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  9. #5
    Banned
    Регистрация
    28.12.2012
    Адрес
    Leesburg, VA, USA
    Сообщений
    974
    Благодарностей: 312
    Mentioned
    0 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 не работает, и старая лапша.

  10. Этот пользователь поблагодарил TSL за это полезное сообщение:
    perestoronin (26.09.2013)

  11. #6
    Moderator Аватар для Error404
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    3,748
    Благодарностей: 1014
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  12. Этот пользователь поблагодарил Error404 за это полезное сообщение:
    psb (26.09.2013)

  13. #7
    Moderator Аватар для perestoronin
    Регистрация
    25.11.2011
    Адрес
    г. Красногорск
    Сообщений
    1,187
    Благодарностей: 874
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  14. Этот пользователь поблагодарил perestoronin за это полезное сообщение:
    Sergey (27.09.2013)

  15. #8
    Moderator Аватар для Error404
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    3,748
    Благодарностей: 1014
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  16. Эти 2 пользователя(ей) поблагодарили Error404 за это полезное сообщение:
    perestoronin (26.09.2013), psb (26.09.2013)

  17. #9
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,082
    Благодарностей: 918
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  18. Этот пользователь поблагодарил psb за это полезное сообщение:
    perestoronin (26.09.2013)

  19. #10
    Activist
    Регистрация
    21.12.2005
    Адрес
    Kyiv/Ukraine
    Сообщений
    412
    Благодарностей: 48
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    ]
    V6Z80P - Back for Good

  20. Этот пользователь поблагодарил Valen за это полезное сообщение:
    perestoronin (26.09.2013)

Страница 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, 13:49
  4. SDCC - Small Device C Compiler
    от Valen в разделе Программирование
    Ответов: 52
    Последнее: 06.04.2012, 18:44
  5. SDCC вокруг да около
    от andrews в разделе Программирование
    Ответов: 8
    Последнее: 26.03.2008, 08:16

Ваши права

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