我正在寻找一种通过模板函数自动执行 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"
);
}
有没有一种(简单的)方法可以实现这一目标?
正如我在评论中指出的,这是不可能的,因为内联汇编器仅采用预处理器宏,这些宏将在模板之前进行评估。