Alexey, ты ещё здесь сидишь?
Четверг Май 05 2005 12:14, Alexey Boyko wrote to George Shepelev:
AB>>>>>>> Я вручную писал так (в стартапе): AB>>>>>>> mov R0, #0x00000000 AB>>>>>>> mov R1, #0x00300000 AB>>>>>>> mov R2, #64 AB>>>>>>> copy_next: AB>>>>>>> ldr R3, [R0], #4 AB>>>>>>> str R3, [R1], #4 AB>>>>>>> subs R2, R2, #4 AB>>>>>>> bne copy_next AB> Цитирую ещё раз, что бы ты ещё раз посмотрел. GS>> Для этого не нужно иметь специфичные знания об АРМах. Лишняя GS>> команда безусловного перехода не украшает код. AB> Команд получилось столько же.
При прохождении по телу цикла - меньше. Отсюда и меньшее число тактов!
AB>>> gcc так и сделал. GS>> Hе так он сделал! AB> По сути так же.
Hет. Он добавил в цикл лишнюю команду, вместо того, чтобы вынести её за тело цикла. Результат - меньшая скорость выполнения!
GS>> Hеоптимальное решение. Выходить из функции нужно один раз, цикл GS>> будет крутиться с использованием лишнего безусловного перехода. AB> movne pc, lr - не безусловный переход.
Для возврата на начало цикла требуется _дополнительная_ команда безусловного перехода:
AB> b copynext - не лишний безусловный переход.
При каждом прохождении цикла выполняются _две_ команды вместо одной.
AB> Ты о чём вообще?
Ещё раз глянь в код, который ты в начале "цитировал ещё раз". Там при каждом прохождении цикла лишних команд _нету_. Что свидетельствует - выбранный сишный компилятор строит неэффективный код даже на _совсем примитивных_ примерах. Полагаю, комментарии не требуются...
GS>> Оставленный в начале квотинга код гораздо разумнее. Только GS>> команду выхода из функции в конце добавить - и всё. AB> Это была не функция. Ей не нужен возврат.
Ты хотел сделать функцию? Я показал, как она делается.
AB>>> Есть. Hо в примере, котором я привел, я копировал _словами_. GS>> Повторяю, ниоткуда не следует, что число байт, которые GS>> необходимо копировать - чётное. AB> Я с тебя фигею. Я показал код, которым я копирую 64 байта с адреса AB> 0x0000000 по адресу 0x00300000. Про какие четности ты говоришь? AB> И, кстати, на ARM слова 4-х байтные.
Я рад за ARM. Вот только исходно обсуждалось копирование блока байт неопределённой длины...
Георгий