Ещё раз: можно написать корректный код, в котором данная строка будет иметь абсолютно defined behavior. И можно написать код, в котором данная строка будет иметь _разные_ проблемы (навскидку - неправильно разворачиваемый макрос, переопределённые операторы + и ~, неявные преобразования между signed/unsigned, неявные преобразования в int из более коротких целочисленных типов).
Поэтому спрошу ещё раз: что именно в этой строке какого WTF?
Там дальше был просто ад и израиль. Использовался soft float. При этом промежуточные константы были в интах, поэтому поплыли результаты. В итоге вполне годную в теории математику подгоняли мейджиками тупо по диапазону значений.
Дальше веселее - из-за soft float, вероятно, заканчивалась память. И автор перешел на ассемблер вообще без понятия о процедурах - одна точка входа и порядка 50 кб кода с метками исключительно вида "jjjj1a". Думаю, проще в бинарном коде разобраться, чем в этом высере. При этом с его талантами мне крайне сомнительно, что он смог родить код эффективнее компилятора. Зато читабельность упала до нуля.
И да, _все_ переменные - исключительно глобальные. Ну, ладно, допустим, по каким-то причинам автор не захотел использовать стек. Но можно ведь было хотя-бы их огородить между модулями статическим определением.
В общем, обычный продакшн код среднестатистической железки российского производства.
Comments 22
PS: здесь может быть несколько различных проблем, и даже не быть ни одной.
Reply
Reply
Поэтому спрошу ещё раз: что именно в этой строке какого WTF?
Reply
Reply
Reply
Reply
Reply
Ну тоесть P4OUT & (~R_B) & (~R_G) ?
Reply
Лулз в том, что биты этого порта управляют силовой периферией. К счастью, гасится лишь динамик.
Reply
Все же мне странно предположить что человек не понимал двоинчную арифметику до степени 'совсем'.
Как же он остальное написал?
Reply
Дальше веселее - из-за soft float, вероятно, заканчивалась память. И автор перешел на ассемблер вообще без понятия о процедурах - одна точка входа и порядка 50 кб кода с метками исключительно вида "jjjj1a". Думаю, проще в бинарном коде разобраться, чем в этом высере. При этом с его талантами мне крайне сомнительно, что он смог родить код эффективнее компилятора. Зато читабельность упала до нуля.
И да, _все_ переменные - исключительно глобальные. Ну, ладно, допустим, по каким-то причинам автор не захотел использовать стек. Но можно ведь было хотя-бы их огородить между модулями статическим определением.
В общем, обычный продакшн код среднестатистической железки российского производства.
Reply
Reply
Leave a comment