Как использовать препроцессор ускорения для упрощения сборки g cc neon inline? - PullRequest
0 голосов
/ 06 августа 2020

При кодировании встроенного ассемблера g cc neon, обычно приходится писать очень длинный clobber, если используется много регистров. Как написать макрос для перечисления серийников регистра в секции clobber? лучше использовать препроцессор форсирования. Спасибо.

Текущий метод:

__asm(
  "mov r0, #0\n"
  "mov r1, #1\n"
  "mov r2, #2\n"
  "mov r3, #3\n"
  :
  :
  : "r0", "r1", "r2", "r3"
)

Лучший способ:

__asm(
  "mov r0, #0\n"
  "mov r1, #1\n"
  "mov r2, #2\n"
  "mov r3, #3\n"
  :
  :
  : MACRO_RANGE(r, 0, 3)
)

1 Ответ

0 голосов
/ 06 августа 2020

Я исправил это следующим образом:

// строить строку

# define __asmpp_str (x) # x

# define asmpp_xstr (x) __asmpp_str (x)

# определить __asmpp_reg_str_list (z, regNumber, regPrefix) asmpp_xstr (regPrefix ## regNumber) BOOST_PP_COMMA () #define asmpp_reg_str_list (regPrefix, first, last_list, regPrefix, first, last), последний)

__ asm (

"mov r0, # 0 \ n"

"mov r1, # 1 \ n"

"mov r2, # 2 \ n "

" mov r3, # 3 \ n "

:

:

: asmpp_reg_str_list (r, 0, 3)

)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...