“if consteval”提案文件中的“SSE 4.2 insanity”是什么意思?

Chi*_*roh 2 c++ sse sse4 c++23

我正在阅读一篇关于if consteval (\xc2\xa73.2)的 C++ 论文,并看到一段显示constexpr strlen实现的代码:

\n
constexpr size_t strlen(char const* s) {\n    if constexpr (std::is_constant_evaluated()) {\n        for (const char *p = s; ; ++p) {\n            if (*p == \'\\0\') {\n                return static_cast<std::size_t>(p - s);\n            }\n        }    \n    } else {\n        __asm__("SSE 4.2 insanity");        \n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我是来询问__asm__else分支中的语句的。

\n

我知道这是幽默,并不意味着要认真对待,但我仍然决定做一些研究,以防有人已经解释过。\n当我用谷歌搜索引用的消息时,我得到的结果不到 10 个,全部都是关于这段代码的.\n然后我研究了什么是SSE 4.2,发现它是一个CPU指令集,所以我真的不知道它在C++论文中出现的内容,有人有解释吗?\n感谢那些会阅读的人我的帖子。

\n

Bar*_*rry 5

cigien是正确的:

这是一个占位符,意思是“一些疯狂的 SSE 4.2 东西”:) 这不是真正的指令

虽然公平地说,我不能把这个特别的笑话归功于我,它来自 David Stone 的constexpr 函数参数论文

这里的重点并不是strlen使用 SSE 指令实现的最佳方法,而是如果您手写程序集,就有一种方法可以做到这一点,这可能会比手动循环更好,等等这样一来,它绝对不是 constexpr 友好的——因此特定的指令列表与问题并不真正相关。无论它是什么,它都无法在编译时工作,因此需要将其切换出去。

  • @PeterCordes 老兄,这是...一个笑话。 (2认同)