У меня есть простой ассемблерный код, который загружает 12 счетверенных регистров NEON и имеет параллельную инструкцию попарного добавления вместе с инструкцией загрузки (для использования возможности двойной задачи). Я проверил код здесь:
http://pulsar.webshaker.net/ccc/sample-d3a7fe78
Как видно, код занимает около 13 циклов. Но когда я загружаю код на плату, инструкции загрузки, кажется, занимают более одного цикла на загрузку, я проверил и обнаружил, что VPADAL занимает 1 цикл, как указано, но VLD1 занимает более одного цикла. Это почему?
Я позаботился о следующем:
- Адрес выровнен по 16 байтам.
- Предоставили подсказку по выравниванию в инструкции
vld1.64 {d0, d1} [r0,:128]!
- Пробовал предварительно загружать инструкцию
pld [r0, #192]
местами, но это, похоже, увеличивает количество циклов, а не уменьшает задержку.
Может кто-нибудь сказать мне, что я делаю неправильно, почему эта задержка?
Другие детали:
- Со ссылкой на кору-а8
- Цепочка инструментов кросс-компилятора arm-2009q1
- кодирование на ассемблере