_mm_cmpistrm SSE4.2内部模式

问题描述

| 我试图弄清楚如何为_mm_cmpistrm SSE4.2内部函数设置\“ mode \”标志。我有一个常规C字符串(char *),正在使用_mm_lddqu_si128将其加载到__m128i类型中。我打算将无符号字节与常规字符串比较使用:
    _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH
但是我对单位与位掩码的设置感到困惑。这是GCC 4.3.2中smmintrin.h中的宏:
    /* These macros specify the output selection in _mm_cmpXstrm ().  */
    #define _SIDD_BIT_MASK          0x00
    #define _SIDD_UNIT_MASK         0x40
我想我了解位掩码是什么:如果两个字符串之间在那个位置的字符不同,我将在位0..15中得到1。但是单位遮罩有什么作用?     

解决方法

        对于_SIDD_BIT_MASK,您将获得一个掩码,如果字符串相等,则掩码全为1;如果字符串不相等,则掩码全为0;如果您正在执行_SIDD_UBYTE_OPS,则将返回16位(字符串中的每个字符一个)。 但是,使用_SIDD_UNIT_MASK,您将获得相同的掩码,但会扩展为16个字节。例如,如果字符串中前两个字符的比较为真,则位0..15将全部为1。而字符16.等位16..31     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...