内联汇编器的字符串化模板类型

问题描述 投票:0回答:1

我正在寻找一种通过模板函数自动执行 gcc 内联汇编调用的方法。
例如,我有以下虚拟函数将值存储到指针中。现在我专门针对不同类型的模板函数。每当代码发生变化时,我都需要针对每个专业化进行更改。

template <typename T>
void store_ptr(T *location, T value);

template <>
void store_ptr<char>(char *location, char value) {
  __asm__ __volatile__(
      "strb %1, [%0]\n\t"
      : "+r" (location)
      : "r" (value)
      : "memory"
  );
}


template <>
void store_ptr<short>(short *location, short value) {
  __asm__ __volatile__(
      "strh %1, [%0]\n\t"
      : "+r" (location)
      : "r" (value)
      : "memory"
  );
}

如果模板可以根据模板类型对指令附录(“b”,“h”...)进行字符串化,那就太好了。

template <typename T>
void store_ptr<T>(T *location, T value) {
  __asm__ __volatile__(
     "str" stringify_template_type(T) " %1, [%0]\n\t"
     : "+r" (location)
     : "r" (value)
     : "memory"
     );
}

有没有一种(简单的)方法可以实现这一目标?

c++ c++11 templates inline-assembly
1个回答
0
投票

正如我在评论中指出的,这是不可能的,因为内联汇编器仅采用预处理器宏,这些宏将在模板之前进行评估。

© www.soinside.com 2019 - 2024. All rights reserved.