about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-10-30 16:38:15 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-10-30 16:38:15 +0100
commitcb2a623faa78b02b93b402f665030f6b75cdf0a9 (patch)
tree6b376883dc43953b876c2fd8fa12fce94b29eb1e
parent7e80e7ba86c51487e71e95d52fb72f45c94030ba (diff)
downloadbox64-cb2a623faa78b02b93b402f665030f6b75cdf0a9.tar.gz
box64-cb2a623faa78b02b93b402f665030f6b75cdf0a9.zip
Added full SSE 4.2 support
-rw-r--r--CMakeLists.txt6
-rw-r--r--src/emu/x64compstrings.c120
-rw-r--r--src/emu/x64compstrings.h13
-rw-r--r--src/emu/x64run660f.c60
-rw-r--r--src/emu/x64run670f.c1
-rw-r--r--src/emu/x64runf20f.c38
-rw-r--r--src/tools/my_cpuid.c3
-rw-r--r--src/wrapped/wrappedlibc.c2
-rw-r--r--tests/ref27.txt865
-rwxr-xr-xtests/test27bin0 -> 215616 bytes
-rw-r--r--tests/test27.c111
11 files changed, 1218 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3468ff9e..d0df0249 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -297,6 +297,7 @@ set(ELFLOADER_SRC
     "${BOX64_ROOT}/src/elfs/elfloader.c"
     "${BOX64_ROOT}/src/elfs/elfparser.c"
     "${BOX64_ROOT}/src/elfs/elfload_dump.c"
+    "${BOX64_ROOT}/src/emu/x64compstrings.c"
     "${BOX64_ROOT}/src/emu/x64emu.c"
     "${BOX64_ROOT}/src/emu/x64int3.c"
     "${BOX64_ROOT}/src/emu/x87emu_private.c"
@@ -1017,6 +1018,11 @@ add_test(feround ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64}
     -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref26.txt
     -P ${CMAKE_SOURCE_DIR}/runTest.cmake )
 
+add_test(sse4_2 ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64}
+    -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests/test27 -D TEST_OUTPUT=tmpfile27.txt
+    -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref27.txt
+    -P ${CMAKE_SOURCE_DIR}/runTest.cmake )
+
 set_tests_properties(feround PROPERTIES ENVIRONMENT "BOX64_SYNC_ROUNDING=1")
 
 file(GLOB extension_tests "${CMAKE_SOURCE_DIR}/tests/extensions/*.c")
diff --git a/src/emu/x64compstrings.c b/src/emu/x64compstrings.c
new file mode 100644
index 00000000..72781ebb
--- /dev/null
+++ b/src/emu/x64compstrings.c
@@ -0,0 +1,120 @@
+#include <stdint.h>
+
+#include "box64stack.h"
+#include "x64emu.h"
+#include "x64run_private.h"
+#include "x64emu_private.h"
+#include "x64compstrings.h"
+
+static int overrideIfDataInvalid(sse_regs_t* mem, int lmem, sse_regs_t* reg, int lreg, int j, int i, int imm8)
+{
+    int valid1 = (i<lreg);
+    int valid2 = (j<lmem);
+    if(!valid1 && !valid2)
+        switch((imm8>>2)&3) {
+            case 0b00:
+            case 0b01:  return 0;
+            case 0b10:
+            case 0b11:  return 1;
+        }
+    if(!valid1 && valid2)
+        switch((imm8>>2)&3) {
+            case 0b00:
+            case 0b01:
+            case 0b10:  return 0;
+            case 0b11:  return 1;
+        }
+    if(valid1 && !valid2)
+        return 0;
+    switch((imm8>>2)&3) {
+        case 0b01:  // range
+            switch (imm8&3) {
+                case 0b00:  // ub
+                    return (i&1)?((reg->ub[i]>=mem->ub[j])):((reg->ub[i]<=mem->ub[j]));
+                case 0b01:  // uw
+                    return (i&1)?((reg->uw[i]>=mem->uw[j])):((reg->uw[i]<=mem->uw[j]));
+                case 0b10:  // sb
+                    return (i&1)?((reg->sb[i]>=mem->sb[j])):((reg->sb[i]<=mem->sb[j]));
+                case 0b11:  // sw
+                    return (i&1)?((reg->sw[i]>=mem->sw[j])):((reg->sw[i]<=mem->sw[j]));
+            }
+            break;
+        default:    // the others
+            switch (imm8&1) {
+                case 0: // byte
+                    return (reg->ub[i] == mem->ub[j]);
+                case 1: // word
+                    return (reg->uw[i] == mem->uw[j]);
+            }
+    }
+}
+
+uint32_t sse42_compare_string_explicit_len(x64emu_t* emu, sse_regs_t* mem, int lmem, sse_regs_t* reg, int lreg, uint8_t imm8)
+{
+    // get number of packed byte/word
+    int n_packed = (imm8&1)?8:16;
+    if(lreg<0) lreg = -lreg;
+    if(lmem<0) lmem = -lmem;
+    if(lreg>n_packed) lreg = n_packed;
+    if(lmem>n_packed) lmem = n_packed;
+    // aggregate to intres1
+    uint32_t intres1 = 0;
+    switch((imm8>>2)&3) {
+        case 0b00:  //Equal any
+            for(int j=0; j<n_packed; ++j)
+                for(int i=0; i<n_packed; ++i) {
+                    intres1 |= overrideIfDataInvalid(mem, lmem, reg, lreg, j, i, imm8)<<j;
+                }
+            break;
+        case 0b01:  // Range
+            for(int j=0; j<n_packed; ++j)
+                for(int i=0; i<n_packed; i+=2) {
+                    intres1 |= (overrideIfDataInvalid(mem, lmem, reg, lreg, j, i, imm8) & overrideIfDataInvalid(mem, lmem, reg, lreg, j, i+1, imm8))<<j;
+                }
+            break;
+        case 0b10:  // Equal each
+            for(int i=0; i<n_packed; ++i) {
+                intres1 |= overrideIfDataInvalid(mem, lmem, reg, lreg, i, i, imm8)<<i;
+            }
+            break;
+        case 0b11:  // Equal ordered
+            intres1 = (1<<n_packed)-1;
+            for(int j=0; j<n_packed; ++j)
+                for(int i=0; i<n_packed-j; ++i) {
+                    int k = i+j;
+                    intres1 &= (((1<<n_packed)-1)^(1<<j)) | overrideIfDataInvalid(mem, lmem, reg, lreg, k, i, imm8)<<j;
+                }
+            break;
+    }
+    // build intres2
+    uint32_t intres2 = intres1;
+    switch((imm8>>4)&3) {
+        case 0b01: intres2 ^= ((1<<n_packed)-1);
+        case 0b11: intres2 ^= ((1<<lmem)-1);
+    }
+    // and now set the flags
+    RESET_FLAGS(emu);
+    CONDITIONAL_SET_FLAG(intres2, F_CF);
+    CONDITIONAL_SET_FLAG(lmem<n_packed, F_ZF);
+    CONDITIONAL_SET_FLAG(lreg<n_packed, F_SF);
+    CONDITIONAL_SET_FLAG(intres2&1, F_OF);
+    CLEAR_FLAG(F_AF);
+    CLEAR_FLAG(F_PF);
+    
+    return intres2;
+}
+
+uint32_t sse42_compare_string_implicit_len(x64emu_t* emu, sse_regs_t* mem, sse_regs_t* reg, uint8_t imm8)
+{
+    int lmem = 0;
+    int lreg = 0;
+    // get lmem and lreg
+    if(imm8&1) {
+        while(lmem<8 && mem->uw[lmem]) ++lmem;
+        while(lreg<8 && reg->uw[lreg]) ++lreg;
+    } else {
+        while(lmem<16 && mem->ub[lmem]) ++lmem;
+        while(lreg<16 && reg->ub[lreg]) ++lreg;
+    }
+    return sse42_compare_string_explicit_len(emu, mem, lmem, reg, lreg, imm8);
+}
\ No newline at end of file
diff --git a/src/emu/x64compstrings.h b/src/emu/x64compstrings.h
new file mode 100644
index 00000000..b2a785b2
--- /dev/null
+++ b/src/emu/x64compstrings.h
@@ -0,0 +1,13 @@
+#ifndef __X64_CMPSTRINGS_H__
+#define __X64_CMPSTRINGS_H__
+
+#include <stdint.h>
+
+#include "regs.h"
+
+typedef struct x64emu_s x64emu_t;
+
+uint32_t sse42_compare_string_explicit_len(x64emu_t* emu, sse_regs_t* a, int la, sse_regs_t* b, int lb, uint8_t imm8);
+uint32_t sse42_compare_string_implicit_len(x64emu_t* emu, sse_regs_t* a, sse_regs_t* b, uint8_t imm8);
+
+#endif //__X64_CMPSTRINGS_H__
\ No newline at end of file
diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index 9b969c83..72180c0c 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -22,6 +22,7 @@
 #include "bridge.h"

 

 #include "modrm.h"

+#include "x64compstrings.h"

 

 static uint8_t ff_mult(uint8_t a, uint8_t b)

 {

@@ -1118,6 +1119,65 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr)
                 }

                 break;

 

+            case 0x60:  /* PCMPESTRM */

+                nextop = F8;

+                GETEX(1);

+                GETGX;

+                tmp8u = F8;

+                tmp32u = sse42_compare_string_explicit_len(emu, EX, R_EDX, GX, R_EAX, tmp8u);

+                if(tmp8u&0b1000000) {

+                    switch(tmp8u&1) {

+                        case 0: for(int i=0; i<16; ++i) GX->ub[i] = ((tmp32u>>i)&1)?0xff:0x00; break;

+                        case 1: for(int i=0; i<8; ++i) GX->uw[i] = ((tmp32u>>i)&1)?0xffff:0x0000; break;

+                    }

+                } else {

+                    GX->q[1] = GX->q[0] = 0;

+                    GX->uw[0] = tmp32u;

+                }

+                break;

+            case 0x61:  /* PCMPESTRI */

+                nextop = F8;

+                GETEX(1);

+                GETGX;

+                tmp8u = F8;

+                tmp32u = sse42_compare_string_explicit_len(emu, EX, R_EDX, GX, R_EAX, tmp8u);

+                if(!tmp32u)

+                    R_RCX = (tmp8u&1)?8:16;

+                else if(tmp8u&0b1000000)

+                    R_RCX = 31-__builtin_clz(tmp32u);

+                else

+                    R_RCX = __builtin_ffs(tmp32u) - 1;

+                break;

+            case 0x62:  /* PCMPESTRM */

+                nextop = F8;

+                GETEX(1);

+                GETGX;

+                tmp8u = F8;

+                tmp32u = sse42_compare_string_implicit_len(emu, EX, GX, tmp8u);

+                if(tmp8u&0b1000000) {

+                    switch(tmp8u&1) {

+                        case 0: for(int i=0; i<16; ++i) GX->ub[i] = ((tmp32u>>i)&1)?0xff:0x00; break;

+                        case 1: for(int i=0; i<8; ++i) GX->uw[i] = ((tmp32u>>i)&1)?0xffff:0x0000; break;

+                    }

+                } else {

+                    GX->q[1] = GX->q[0] = 0;

+                    GX->uw[0] = tmp32u;

+                }

+                break;

+            case 0x63:  /* PCMPISTRI */

+                nextop = F8;

+                GETEX(1);

+                GETGX;

+                tmp8u = F8;

+                tmp32u = sse42_compare_string_implicit_len(emu, EX, GX, tmp8u);

+                if(!tmp32u)

+                    R_RCX = (tmp8u&1)?8:16;

+                else if(tmp8u&0b1000000)

+                    R_RCX = 31-__builtin_clz(tmp32u);

+                else

+                    R_RCX = __builtin_ffs(tmp32u) - 1;

+                break;

+

             case 0xDF:      // AESKEYGENASSIST Gx, Ex, u8

                 nextop = F8;

                 GETEX(1);

diff --git a/src/emu/x64run670f.c b/src/emu/x64run670f.c
index 015b3712..2f94bd33 100644
--- a/src/emu/x64run670f.c
+++ b/src/emu/x64run670f.c
@@ -25,6 +25,7 @@
 #endif
 
 #include "modrm.h"
+#include "x64compstrings.h"
 
 #ifdef TEST_INTERPRETER
 uintptr_t Test670F(x64test_t *test, rex_t rex, int rep, uintptr_t addr)
diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c
index d5ce598f..020a896a 100644
--- a/src/emu/x64runf20f.c
+++ b/src/emu/x64runf20f.c
@@ -156,6 +156,44 @@ uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step)
             GD->dword[1] = 0;

         }

         break;

+

+    case 0x38:  // more opcodes

+            opcode = F8;

+            switch(opcode) {

+

+                case 0xF0:  // CRC32 Gd, Eb

+                    nextop = F8;

+                    GETEB(0);

+                    GETGD;

+                    GD->dword[0] ^=  EB->byte[0];

+                    for (int i = 0; i < 8; i++) {

+                        if (GD->dword[0] & 1)

+                            GD->dword[0] = (GD->dword[0] >> 1) ^ 0x82f63b78;

+                        else

+                            GD->dword[0] = (GD->dword[0] >> 1);

+                    }

+                    GD->dword[1] = 0;

+                    break;

+                case 0xF1:  // CRC32 Gd, Ed

+                    nextop = F8;

+                    GETED(0);

+                    GETGD;

+                    for(int j=0; j<4*(rex.w+1); ++j) {

+                        GD->dword[0] ^=  ED->byte[j];

+                        for (int i = 0; i < 8; i++) {

+                            if (GD->dword[0] & 1)

+                                GD->dword[0] = (GD->dword[0] >> 1) ^ 0x82f63b78;

+                            else

+                                GD->dword[0] = (GD->dword[0] >> 1);

+                        }

+                    }

+                    GD->dword[1] = 0;

+                    break;

+

+                default:

+                    return 0;

+            }

+        break;

         

     case 0x51:  /* SQRTSD Gx, Ex */

         nextop = F8;

diff --git a/src/tools/my_cpuid.c b/src/tools/my_cpuid.c
index 6039f135..81399633 100644
--- a/src/tools/my_cpuid.c
+++ b/src/tools/my_cpuid.c
@@ -193,6 +193,7 @@ void my_cpuid(x64emu_t* emu, uint32_t tmp32u)
                 R_EAX |= cpu<<24;
             }*/
             R_EDX =   1         // fpu 
+                    | 1<<2      // debugging extension
                     | 1<<4      // rdtsc
                     | 1<<8      // cmpxchg8
                     | 1<<11     // sep (sysenter & sysexit)
@@ -202,6 +203,7 @@ void my_cpuid(x64emu_t* emu, uint32_t tmp32u)
                     | 1<<24     // fxsr (fxsave, fxrestore)
                     | 1<<25     // SSE
                     | 1<<26     // SSE2
+                    | 1<<28     // HT / Multi-core
                     ;
             R_ECX =   1<<0      // SSE3
                     | 1<<1      // PCLMULQDQ
@@ -209,6 +211,7 @@ void my_cpuid(x64emu_t* emu, uint32_t tmp32u)
                     | 1<<12     // fma
                     | 1<<13     // cx16 (cmpxchg16)
                     | 1<<19     // SSE4_1
+                    | 1<<20     // SSE4_2
                     | 1<<22     // MOVBE
                     | 1<<23     // POPCOUNT
                     | 1<<25     // aesni
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index fbbbef76..b9ed9c42 100644
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -1562,7 +1562,7 @@ void CreateCPUInfoFile(int fd)
         P;
         sprintf(buff, "bogomips\t: %g\n", getBogoMips());
         P;
-        sprintf(buff, "flags\t\t: fpu cx8 sep ht cmov clflush mmx sse sse2 syscall tsc lahf_lm ssse3 ht tm lm fma fxsr cpuid pclmulqdq cx16 aes movbe pni sse4_1 lzcnt popcnt\n");
+        sprintf(buff, "flags\t\t: fpu cx8 sep ht cmov clflush mmx sse sse2 syscall tsc lahf_lm ssse3 ht tm lm fma fxsr cpuid pclmulqdq cx16 aes movbe pni sse4_1 sse4_2 lzcnt popcnt\n");
         P;
         sprintf(buff, "address sizes\t: 48 bits physical, 48 bits virtual\n");
         P;
diff --git a/tests/ref27.txt b/tests/ref27.txt
new file mode 100644
index 00000000..9eb9868d
--- /dev/null
+++ b/tests/ref27.txt
@@ -0,0 +1,865 @@
+test SSE 4.2
+_mm_cmpestri("This is a string", 16, "This", 4, 0x0) => 0
+_mm_cmpestri("This is a string", 16, "This", 4, 0x0) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "This", 4, 0x0) = 0000000000000000-000000000000000f
+_mm_cmpistri("This is a string", "This", 0x0) => 0
+_mm_cmpestri("This is a string", "This", 0x0) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "This", 0x0) = 0000000000000000-000000000000000f
+_mm_cmpestri("This is a string", 16, "This", 4, 0x1) => 0
+_mm_cmpestri("This is a string", 16, "This", 4, 0x1) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "This", 4, 0x1) = 0000000000000000-000000000000000f
+_mm_cmpistri("This is a string", "This", 0x1) => 0
+_mm_cmpestri("This is a string", "This", 0x1) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "This", 0x1) = 0000000000000000-000000000000000f
+_mm_cmpestri("This", 4, "This is a string", 16, 0x0) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x0) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x0) = 0000000000000000-000000000000246f
+_mm_cmpistri("This", "This is a string", 0x0) => 0
+_mm_cmpestri("This", "This is a string", 0x0) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x0) = 0000000000000000-000000000000246f
+_mm_cmpestri("This", 4, "This is a string", 16, 0x1) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x1) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x1) = 0000000000000000-000000000000006f
+_mm_cmpistri("This", "This is a string", 0x1) => 0
+_mm_cmpestri("This", "This is a string", 0x1) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x1) = 0000000000000000-000000000000006f
+_mm_cmpestri("This is a string", 16, "is", 2, 0x0) => 0
+_mm_cmpestri("This is a string", 16, "is", 2, 0x0) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "is", 2, 0x0) = 0000000000000000-0000000000000003
+_mm_cmpistri("This is a string", "is", 0x0) => 0
+_mm_cmpestri("This is a string", "is", 0x0) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "is", 0x0) = 0000000000000000-0000000000000003
+_mm_cmpestri("This is a string", 16, "is", 2, 0x1) => 0
+_mm_cmpestri("This is a string", 16, "is", 2, 0x1) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "is", 2, 0x1) = 0000000000000000-0000000000000003
+_mm_cmpistri("This is a string", "is", 0x1) => 0
+_mm_cmpestri("This is a string", "is", 0x1) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "is", 0x1) = 0000000000000000-0000000000000003
+_mm_cmpestri("is", 2, "This is a string", 16, 0x0) => 2
+_mm_cmpestri("is", 2, "This is a string", 16, 0x0) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x0) = 0000000000000000-000000000000246c
+_mm_cmpistri("is", "This is a string", 0x0) => 2
+_mm_cmpestri("is", "This is a string", 0x0) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0x0) = 0000000000000000-000000000000246c
+_mm_cmpestri("is", 2, "This is a string", 16, 0x1) => 2
+_mm_cmpestri("is", 2, "This is a string", 16, 0x1) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x1) = 0000000000000000-000000000000006c
+_mm_cmpistri("is", "This is a string", 0x1) => 2
+_mm_cmpestri("is", "This is a string", 0x1) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0x1) = 0000000000000000-000000000000006c
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x0) => 1
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x0) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x0) = 0000000000000000-000000000000c03a
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x0) => 1
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x0) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x0) = 0000000000000000-000000000000c03a
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x1) => 3
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x1) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x1) = 0000000000000000-0000000000000008
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x1) => 3
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x1) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x1) = 0000000000000000-0000000000000008
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x0) => 3
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x0) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x0) = 0000000000000000-0000000000001d48
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x0) => 3
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x0) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x0) = 0000000000000000-0000000000001d48
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x1) => 3
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x1) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x1) = 0000000000000000-0000000000000048
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x1) => 3
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x1) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x1) = 0000000000000000-0000000000000048
+_mm_cmpestri("This is a string", 16, "", 0, 0x0) => 16
+_mm_cmpestri("This is a string", 16, "", 0, 0x0) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x0) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x0) => 16
+_mm_cmpestri("This is a string", "", 0x0) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x0) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x1) => 8
+_mm_cmpestri("This is a string", 16, "", 0, 0x1) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x1) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x1) => 8
+_mm_cmpestri("This is a string", "", 0x1) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x1) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x0) => 16
+_mm_cmpestri("", 0, "This is a string", 16, 0x0) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", 0, "This is a string", 16, 0x0) = 0000000000000000-0000000000000000
+_mm_cmpistri("", "This is a string", 0x0) => 16
+_mm_cmpestri("", "This is a string", 0x0) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", "This is a string", 0x0) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x1) => 8
+_mm_cmpestri("", 0, "This is a string", 16, 0x1) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", 0, "This is a string", 16, 0x1) = 0000000000000000-0000000000000000
+_mm_cmpistri("", "This is a string", 0x1) => 8
+_mm_cmpestri("", "This is a string", 0x1) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", "This is a string", 0x1) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "This", 4, 0x4) => 0
+_mm_cmpestri("This is a string", 16, "This", 4, 0x4) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "This", 4, 0x4) = 0000000000000000-000000000000000f
+_mm_cmpistri("This is a string", "This", 0x4) => 0
+_mm_cmpestri("This is a string", "This", 0x4) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "This", 0x4) = 0000000000000000-000000000000000f
+_mm_cmpestri("This is a string", 16, "This", 4, 0x5) => 0
+_mm_cmpestri("This is a string", 16, "This", 4, 0x5) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "This", 4, 0x5) = 0000000000000000-000000000000000f
+_mm_cmpistri("This is a string", "This", 0x5) => 0
+_mm_cmpestri("This is a string", "This", 0x5) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "This", 0x5) = 0000000000000000-000000000000000f
+_mm_cmpestri("This", 4, "This is a string", 16, 0x4) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x4) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x4) = 0000000000000000-000000000000f56f
+_mm_cmpistri("This", "This is a string", 0x4) => 0
+_mm_cmpestri("This", "This is a string", 0x4) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x4) = 0000000000000000-000000000000f56f
+_mm_cmpestri("This", 4, "This is a string", 16, 0x5) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x5) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x5) = 0000000000000000-000000000000006f
+_mm_cmpistri("This", "This is a string", 0x5) => 0
+_mm_cmpestri("This", "This is a string", 0x5) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x5) = 0000000000000000-000000000000006f
+_mm_cmpestri("This is a string", 16, "is", 2, 0x4) => 0
+_mm_cmpestri("This is a string", 16, "is", 2, 0x4) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "is", 2, 0x4) = 0000000000000000-0000000000000003
+_mm_cmpistri("This is a string", "is", 0x4) => 0
+_mm_cmpestri("This is a string", "is", 0x4) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "is", 0x4) = 0000000000000000-0000000000000003
+_mm_cmpestri("This is a string", 16, "is", 2, 0x5) => 0
+_mm_cmpestri("This is a string", 16, "is", 2, 0x5) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "is", 2, 0x5) = 0000000000000000-0000000000000003
+_mm_cmpistri("This is a string", "is", 0x5) => 0
+_mm_cmpestri("This is a string", "is", 0x5) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "is", 0x5) = 0000000000000000-0000000000000003
+_mm_cmpestri("is", 2, "This is a string", 16, 0x4) => 2
+_mm_cmpestri("is", 2, "This is a string", 16, 0x4) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x4) = 0000000000000000-000000000000746c
+_mm_cmpistri("is", "This is a string", 0x4) => 2
+_mm_cmpestri("is", "This is a string", 0x4) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0x4) = 0000000000000000-000000000000746c
+_mm_cmpestri("is", 2, "This is a string", 16, 0x5) => 2
+_mm_cmpestri("is", 2, "This is a string", 16, 0x5) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x5) = 0000000000000000-000000000000006c
+_mm_cmpistri("is", "This is a string", 0x5) => 2
+_mm_cmpestri("is", "This is a string", 0x5) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0x5) = 0000000000000000-000000000000006c
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4) => 0
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x4) = 0000000000000000-000000000000ffbf
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x4) => 0
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x4) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x4) = 0000000000000000-000000000000ffbf
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x5) => 0
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x5) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x5) = 0000000000000000-00000000000000af
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x5) => 0
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x5) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x5) = 0000000000000000-00000000000000af
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4) => 0
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x4) = 0000000000000000-000000000000f56f
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x4) => 0
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x4) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x4) = 0000000000000000-000000000000f56f
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x5) => 1
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x5) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x5) = 0000000000000000-000000000000006e
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x5) => 1
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x5) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x5) = 0000000000000000-000000000000006e
+_mm_cmpestri("This is a string", 16, "", 0, 0x4) => 16
+_mm_cmpestri("This is a string", 16, "", 0, 0x4) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x4) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x4) => 16
+_mm_cmpestri("This is a string", "", 0x4) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x4) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x5) => 8
+_mm_cmpestri("This is a string", 16, "", 0, 0x5) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x5) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x5) => 8
+_mm_cmpestri("This is a string", "", 0x5) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x5) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x4) => 16
+_mm_cmpestri("", 0, "This is a string", 16, 0x4) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", 0, "This is a string", 16, 0x4) = 0000000000000000-0000000000000000
+_mm_cmpistri("", "This is a string", 0x4) => 16
+_mm_cmpestri("", "This is a string", 0x4) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", "This is a string", 0x4) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x5) => 8
+_mm_cmpestri("", 0, "This is a string", 16, 0x5) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", 0, "This is a string", 16, 0x5) = 0000000000000000-0000000000000000
+_mm_cmpistri("", "This is a string", 0x5) => 8
+_mm_cmpestri("", "This is a string", 0x5) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", "This is a string", 0x5) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "This", 4, 0x8) => 0
+_mm_cmpestri("This is a string", 16, "This", 4, 0x8) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "This", 4, 0x8) = 0000000000000000-000000000000000f
+_mm_cmpistri("This is a string", "This", 0x8) => 0
+_mm_cmpestri("This is a string", "This", 0x8) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "This", 0x8) = 0000000000000000-000000000000000f
+_mm_cmpestri("This is a string", 16, "This", 4, 0x9) => 0
+_mm_cmpestri("This is a string", 16, "This", 4, 0x9) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", 16, "This", 4, 0x9) = 0000000000000000-000000000000000f
+_mm_cmpistri("This is a string", "This", 0x9) => 0
+_mm_cmpestri("This is a string", "This", 0x9) flags: a:0 s:0 z:1 c:1 o:1
+mm_cmpestrm("This is a string", "This", 0x9) = 0000000000000000-000000000000000f
+_mm_cmpestri("This", 4, "This is a string", 16, 0x8) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x8) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x8) = 0000000000000000-000000000000000f
+_mm_cmpistri("This", "This is a string", 0x8) => 0
+_mm_cmpestri("This", "This is a string", 0x8) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x8) = 0000000000000000-000000000000000f
+_mm_cmpestri("This", 4, "This is a string", 16, 0x9) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x9) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x9) = 0000000000000000-000000000000000f
+_mm_cmpistri("This", "This is a string", 0x9) => 0
+_mm_cmpestri("This", "This is a string", 0x9) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x9) = 0000000000000000-000000000000000f
+_mm_cmpestri("This is a string", 16, "is", 2, 0x8) => 16
+_mm_cmpestri("This is a string", 16, "is", 2, 0x8) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x8) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x8) => 16
+_mm_cmpestri("This is a string", "is", 0x8) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x8) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "is", 2, 0x9) => 8
+_mm_cmpestri("This is a string", 16, "is", 2, 0x9) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x9) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x9) => 8
+_mm_cmpestri("This is a string", "is", 0x9) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x9) = 0000000000000000-0000000000000000
+_mm_cmpestri("is", 2, "This is a string", 16, 0x8) => 16
+_mm_cmpestri("is", 2, "This is a string", 16, 0x8) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x8) = 0000000000000000-0000000000000000
+_mm_cmpistri("is", "This is a string", 0x8) => 16
+_mm_cmpestri("is", "This is a string", 0x8) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("is", "This is a string", 0x8) = 0000000000000000-0000000000000000
+_mm_cmpestri("is", 2, "This is a string", 16, 0x9) => 8
+_mm_cmpestri("is", 2, "This is a string", 16, 0x9) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x9) = 0000000000000000-0000000000000000
+_mm_cmpistri("is", "This is a string", 0x9) => 8
+_mm_cmpestri("is", "This is a string", 0x9) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("is", "This is a string", 0x9) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x8) => 3
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x8) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x8) = 0000000000000000-0000000000000008
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x8) => 3
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x8) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x8) = 0000000000000000-0000000000000008
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x9) => 3
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x9) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x9) = 0000000000000000-0000000000000008
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x9) => 3
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x9) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x9) = 0000000000000000-0000000000000008
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x8) => 3
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x8) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x8) = 0000000000000000-0000000000000008
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x8) => 3
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x8) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x8) = 0000000000000000-0000000000000008
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x9) => 3
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x9) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x9) = 0000000000000000-0000000000000008
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x9) => 3
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x9) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x9) = 0000000000000000-0000000000000008
+_mm_cmpestri("This is a string", 16, "", 0, 0x8) => 16
+_mm_cmpestri("This is a string", 16, "", 0, 0x8) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x8) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x8) => 16
+_mm_cmpestri("This is a string", "", 0x8) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x8) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x9) => 8
+_mm_cmpestri("This is a string", 16, "", 0, 0x9) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x9) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x9) => 8
+_mm_cmpestri("This is a string", "", 0x9) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x9) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x8) => 16
+_mm_cmpestri("", 0, "This is a string", 16, 0x8) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", 0, "This is a string", 16, 0x8) = 0000000000000000-0000000000000000
+_mm_cmpistri("", "This is a string", 0x8) => 16
+_mm_cmpestri("", "This is a string", 0x8) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", "This is a string", 0x8) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x9) => 8
+_mm_cmpestri("", 0, "This is a string", 16, 0x9) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", 0, "This is a string", 16, 0x9) = 0000000000000000-0000000000000000
+_mm_cmpistri("", "This is a string", 0x9) => 8
+_mm_cmpestri("", "This is a string", 0x9) flags: a:1 s:1 z:0 c:0 o:0
+mm_cmpestrm("", "This is a string", 0x9) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "This", 4, 0xc) => 16
+_mm_cmpestri("This is a string", 16, "This", 4, 0xc) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0xc) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0xc) => 16
+_mm_cmpestri("This is a string", "This", 0xc) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0xc) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "This", 4, 0xd) => 8
+_mm_cmpestri("This is a string", 16, "This", 4, 0xd) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0xd) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0xd) => 8
+_mm_cmpestri("This is a string", "This", 0xd) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0xd) = 0000000000000000-0000000000000000
+_mm_cmpestri("This", 4, "This is a string", 16, 0xc) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0xc) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0xc) = 0000000000000000-0000000000000001
+_mm_cmpistri("This", "This is a string", 0xc) => 0
+_mm_cmpestri("This", "This is a string", 0xc) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0xc) = 0000000000000000-0000000000000001
+_mm_cmpestri("This", 4, "This is a string", 16, 0xd) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0xd) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0xd) = 0000000000000000-0000000000000001
+_mm_cmpistri("This", "This is a string", 0xd) => 0
+_mm_cmpestri("This", "This is a string", 0xd) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0xd) = 0000000000000000-0000000000000001
+_mm_cmpestri("This is a string", 16, "is", 2, 0xc) => 16
+_mm_cmpestri("This is a string", 16, "is", 2, 0xc) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0xc) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0xc) => 16
+_mm_cmpestri("This is a string", "is", 0xc) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0xc) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "is", 2, 0xd) => 8
+_mm_cmpestri("This is a string", 16, "is", 2, 0xd) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0xd) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0xd) => 8
+_mm_cmpestri("This is a string", "is", 0xd) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0xd) = 0000000000000000-0000000000000000
+_mm_cmpestri("is", 2, "This is a string", 16, 0xc) => 2
+_mm_cmpestri("is", 2, "This is a string", 16, 0xc) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0xc) = 0000000000000000-0000000000000024
+_mm_cmpistri("is", "This is a string", 0xc) => 2
+_mm_cmpestri("is", "This is a string", 0xc) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0xc) = 0000000000000000-0000000000000024
+_mm_cmpestri("is", 2, "This is a string", 16, 0xd) => 2
+_mm_cmpestri("is", 2, "This is a string", 16, 0xd) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0xd) = 0000000000000000-0000000000000024
+_mm_cmpistri("is", "This is a string", 0xd) => 2
+_mm_cmpestri("is", "This is a string", 0xd) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0xd) = 0000000000000000-0000000000000024
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xc) => 16
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xc) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0xc) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0xc) => 16
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0xc) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0xc) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xd) => 8
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xd) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0xd) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0xd) => 8
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0xd) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0xd) = 0000000000000000-0000000000000000
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xc) => 16
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xc) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0xc) = 0000000000000000-0000000000000000
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0xc) => 16
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0xc) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0xc) = 0000000000000000-0000000000000000
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xd) => 8
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xd) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0xd) = 0000000000000000-0000000000000000
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0xd) => 8
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0xd) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0xd) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0xc) => 16
+_mm_cmpestri("This is a string", 16, "", 0, 0xc) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0xc) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0xc) => 16
+_mm_cmpestri("This is a string", "", 0xc) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0xc) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0xd) => 8
+_mm_cmpestri("This is a string", 16, "", 0, 0xd) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0xd) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0xd) => 8
+_mm_cmpestri("This is a string", "", 0xd) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0xd) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0xc) => 0
+_mm_cmpestri("", 0, "This is a string", 16, 0xc) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0xc) = 0000000000000000-000000000000ffff
+_mm_cmpistri("", "This is a string", 0xc) => 0
+_mm_cmpestri("", "This is a string", 0xc) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0xc) = 0000000000000000-000000000000ffff
+_mm_cmpestri("", 0, "This is a string", 16, 0xd) => 0
+_mm_cmpestri("", 0, "This is a string", 16, 0xd) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0xd) = 0000000000000000-00000000000000ff
+_mm_cmpistri("", "This is a string", 0xd) => 0
+_mm_cmpestri("", "This is a string", 0xd) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0xd) = 0000000000000000-00000000000000ff
+_mm_cmpestri("This is a string", 16, "This", 4, 0x4c) => 16
+_mm_cmpestri("This is a string", 16, "This", 4, 0x4c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x4c) => 16
+_mm_cmpestri("This is a string", "This", 0x4c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "This", 4, 0x4d) => 8
+_mm_cmpestri("This is a string", 16, "This", 4, 0x4d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x4d) => 8
+_mm_cmpestri("This is a string", "This", 0x4d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpestri("This", 4, "This is a string", 16, 0x4c) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x4c) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x4c) = 0000000000000000-00000000000000ff
+_mm_cmpistri("This", "This is a string", 0x4c) => 0
+_mm_cmpestri("This", "This is a string", 0x4c) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x4c) = 0000000000000000-00000000000000ff
+_mm_cmpestri("This", 4, "This is a string", 16, 0x4d) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x4d) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x4d) = 0000000000000000-000000000000ffff
+_mm_cmpistri("This", "This is a string", 0x4d) => 0
+_mm_cmpestri("This", "This is a string", 0x4d) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x4d) = 0000000000000000-000000000000ffff
+_mm_cmpestri("This is a string", 16, "is", 2, 0x4c) => 16
+_mm_cmpestri("This is a string", 16, "is", 2, 0x4c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x4c) => 16
+_mm_cmpestri("This is a string", "is", 0x4c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "is", 2, 0x4d) => 8
+_mm_cmpestri("This is a string", 16, "is", 2, 0x4d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x4d) => 8
+_mm_cmpestri("This is a string", "is", 0x4d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpestri("is", 2, "This is a string", 16, 0x4c) => 5
+_mm_cmpestri("is", 2, "This is a string", 16, 0x4c) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x4c) = 0000000000000000-0000000000ff0000
+_mm_cmpistri("is", "This is a string", 0x4c) => 5
+_mm_cmpestri("is", "This is a string", 0x4c) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0x4c) = 0000000000000000-0000000000ff0000
+_mm_cmpestri("is", 2, "This is a string", 16, 0x4d) => 5
+_mm_cmpestri("is", 2, "This is a string", 16, 0x4d) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x4d) = 00000000ffff0000-0000000000000000
+_mm_cmpistri("is", "This is a string", 0x4d) => 5
+_mm_cmpestri("is", "This is a string", 0x4d) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0x4d) = 00000000ffff0000-0000000000000000
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4c) => 16
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4c) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x4c) => 16
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x4c) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4d) => 8
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4d) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x4d) => 8
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x4d) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4c) => 16
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4c) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x4c) => 16
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x4c) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4d) => 8
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4d) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x4d) => 8
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x4d) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x4c) => 16
+_mm_cmpestri("This is a string", 16, "", 0, 0x4c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x4c) => 16
+_mm_cmpestri("This is a string", "", 0x4c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x4c) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x4d) => 8
+_mm_cmpestri("This is a string", 16, "", 0, 0x4d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x4d) => 8
+_mm_cmpestri("This is a string", "", 0x4d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x4d) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x4c) => 15
+_mm_cmpestri("", 0, "This is a string", 16, 0x4c) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x4c) = 00000000ffffffff-00000000ffffffff
+_mm_cmpistri("", "This is a string", 0x4c) => 15
+_mm_cmpestri("", "This is a string", 0x4c) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x4c) = 00000000ffffffff-00000000ffffffff
+_mm_cmpestri("", 0, "This is a string", 16, 0x4d) => 7
+_mm_cmpestri("", 0, "This is a string", 16, 0x4d) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x4d) = 00000000ffffffff-00000000ffffffff
+_mm_cmpistri("", "This is a string", 0x4d) => 7
+_mm_cmpestri("", "This is a string", 0x4d) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x4d) = 00000000ffffffff-00000000ffffffff
+_mm_cmpestri("This is a string", 16, "This", 4, 0x2c) => 16
+_mm_cmpestri("This is a string", 16, "This", 4, 0x2c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x2c) => 16
+_mm_cmpestri("This is a string", "This", 0x2c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "This", 4, 0x2d) => 8
+_mm_cmpestri("This is a string", 16, "This", 4, 0x2d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x2d) => 8
+_mm_cmpestri("This is a string", "This", 0x2d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpestri("This", 4, "This is a string", 16, 0x2c) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x2c) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x2c) = 0000000000000000-0000000000000001
+_mm_cmpistri("This", "This is a string", 0x2c) => 0
+_mm_cmpestri("This", "This is a string", 0x2c) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x2c) = 0000000000000000-0000000000000001
+_mm_cmpestri("This", 4, "This is a string", 16, 0x2d) => 0
+_mm_cmpestri("This", 4, "This is a string", 16, 0x2d) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", 4, "This is a string", 16, 0x2d) = 0000000000000000-0000000000000001
+_mm_cmpistri("This", "This is a string", 0x2d) => 0
+_mm_cmpestri("This", "This is a string", 0x2d) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("This", "This is a string", 0x2d) = 0000000000000000-0000000000000001
+_mm_cmpestri("This is a string", 16, "is", 2, 0x2c) => 16
+_mm_cmpestri("This is a string", 16, "is", 2, 0x2c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x2c) => 16
+_mm_cmpestri("This is a string", "is", 0x2c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "is", 2, 0x2d) => 8
+_mm_cmpestri("This is a string", 16, "is", 2, 0x2d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x2d) => 8
+_mm_cmpestri("This is a string", "is", 0x2d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpestri("is", 2, "This is a string", 16, 0x2c) => 2
+_mm_cmpestri("is", 2, "This is a string", 16, 0x2c) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x2c) = 0000000000000000-0000000000000024
+_mm_cmpistri("is", "This is a string", 0x2c) => 2
+_mm_cmpestri("is", "This is a string", 0x2c) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0x2c) = 0000000000000000-0000000000000024
+_mm_cmpestri("is", 2, "This is a string", 16, 0x2d) => 2
+_mm_cmpestri("is", 2, "This is a string", 16, 0x2d) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", 2, "This is a string", 16, 0x2d) = 0000000000000000-0000000000000024
+_mm_cmpistri("is", "This is a string", 0x2d) => 2
+_mm_cmpestri("is", "This is a string", 0x2d) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("is", "This is a string", 0x2d) = 0000000000000000-0000000000000024
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2c) => 16
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2c) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x2c) => 16
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x2c) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2d) => 8
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2d) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x2d) => 8
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x2d) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2c) => 16
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2c) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x2c) => 16
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x2c) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2d) => 8
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2d) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x2d) => 8
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x2d) flags: a:1 s:0 z:0 c:0 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x2c) => 16
+_mm_cmpestri("This is a string", 16, "", 0, 0x2c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x2c) => 16
+_mm_cmpestri("This is a string", "", 0x2c) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x2c) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x2d) => 8
+_mm_cmpestri("This is a string", 16, "", 0, 0x2d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x2d) => 8
+_mm_cmpestri("This is a string", "", 0x2d) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x2d) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x2c) => 0
+_mm_cmpestri("", 0, "This is a string", 16, 0x2c) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x2c) = 0000000000000000-000000000000ffff
+_mm_cmpistri("", "This is a string", 0x2c) => 0
+_mm_cmpestri("", "This is a string", 0x2c) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x2c) = 0000000000000000-000000000000ffff
+_mm_cmpestri("", 0, "This is a string", 16, 0x2d) => 0
+_mm_cmpestri("", 0, "This is a string", 16, 0x2d) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x2d) = 0000000000000000-00000000000000ff
+_mm_cmpistri("", "This is a string", 0x2d) => 0
+_mm_cmpestri("", "This is a string", 0x2d) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x2d) = 0000000000000000-00000000000000ff
+_mm_cmpestri("This is a string", 16, "This", 4, 0x34) => 16
+_mm_cmpestri("This is a string", 16, "This", 4, 0x34) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x34) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x34) => 16
+_mm_cmpestri("This is a string", "This", 0x34) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x34) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "This", 4, 0x35) => 8
+_mm_cmpestri("This is a string", 16, "This", 4, 0x35) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x35) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x35) => 8
+_mm_cmpestri("This is a string", "This", 0x35) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x35) = 0000000000000000-0000000000000000
+_mm_cmpestri("This", 4, "This is a string", 16, 0x34) => 4
+_mm_cmpestri("This", 4, "This is a string", 16, 0x34) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", 4, "This is a string", 16, 0x34) = 0000000000000000-0000000000000a90
+_mm_cmpistri("This", "This is a string", 0x34) => 4
+_mm_cmpestri("This", "This is a string", 0x34) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", "This is a string", 0x34) = 0000000000000000-0000000000000a90
+_mm_cmpestri("This", 4, "This is a string", 16, 0x35) => 4
+_mm_cmpestri("This", 4, "This is a string", 16, 0x35) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", 4, "This is a string", 16, 0x35) = 0000000000000000-0000000000000090
+_mm_cmpistri("This", "This is a string", 0x35) => 4
+_mm_cmpestri("This", "This is a string", 0x35) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", "This is a string", 0x35) = 0000000000000000-0000000000000090
+_mm_cmpestri("This is a string", 16, "is", 2, 0x34) => 16
+_mm_cmpestri("This is a string", 16, "is", 2, 0x34) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x34) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x34) => 16
+_mm_cmpestri("This is a string", "is", 0x34) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x34) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "is", 2, 0x35) => 8
+_mm_cmpestri("This is a string", 16, "is", 2, 0x35) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x35) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x35) => 8
+_mm_cmpestri("This is a string", "is", 0x35) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x35) = 0000000000000000-0000000000000000
+_mm_cmpestri("is", 2, "This is a string", 16, 0x34) => 0
+_mm_cmpestri("is", 2, "This is a string", 16, 0x34) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", 2, "This is a string", 16, 0x34) = 0000000000000000-0000000000008b93
+_mm_cmpistri("is", "This is a string", 0x34) => 0
+_mm_cmpestri("is", "This is a string", 0x34) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", "This is a string", 0x34) = 0000000000000000-0000000000008b93
+_mm_cmpestri("is", 2, "This is a string", 16, 0x35) => 0
+_mm_cmpestri("is", 2, "This is a string", 16, 0x35) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", 2, "This is a string", 16, 0x35) = 0000000000000000-0000000000000093
+_mm_cmpistri("is", "This is a string", 0x35) => 0
+_mm_cmpestri("is", "This is a string", 0x35) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", "This is a string", 0x35) = 0000000000000000-0000000000000093
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x34) => 6
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x34) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x34) = 0000000000000000-0000000000000040
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x34) => 6
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x34) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x34) = 0000000000000000-0000000000000040
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x35) => 4
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x35) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x35) = 0000000000000000-0000000000000050
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x35) => 4
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x35) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x35) = 0000000000000000-0000000000000050
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x34) => 4
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x34) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x34) = 0000000000000000-0000000000000a90
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x34) => 4
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x34) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x34) = 0000000000000000-0000000000000a90
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x35) => 0
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x35) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x35) = 0000000000000000-0000000000000091
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x35) => 0
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x35) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x35) = 0000000000000000-0000000000000091
+_mm_cmpestri("This is a string", 16, "", 0, 0x34) => 16
+_mm_cmpestri("This is a string", 16, "", 0, 0x34) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x34) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x34) => 16
+_mm_cmpestri("This is a string", "", 0x34) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x34) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x35) => 8
+_mm_cmpestri("This is a string", 16, "", 0, 0x35) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x35) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x35) => 8
+_mm_cmpestri("This is a string", "", 0x35) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x35) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x34) => 0
+_mm_cmpestri("", 0, "This is a string", 16, 0x34) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x34) = 0000000000000000-000000000000ffff
+_mm_cmpistri("", "This is a string", 0x34) => 0
+_mm_cmpestri("", "This is a string", 0x34) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x34) = 0000000000000000-000000000000ffff
+_mm_cmpestri("", 0, "This is a string", 16, 0x35) => 0
+_mm_cmpestri("", 0, "This is a string", 16, 0x35) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x35) = 0000000000000000-00000000000000ff
+_mm_cmpistri("", "This is a string", 0x35) => 0
+_mm_cmpestri("", "This is a string", 0x35) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x35) = 0000000000000000-00000000000000ff
+_mm_cmpestri("This is a string", 16, "This", 4, 0x36) => 16
+_mm_cmpestri("This is a string", 16, "This", 4, 0x36) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x36) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x36) => 16
+_mm_cmpestri("This is a string", "This", 0x36) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x36) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "This", 4, 0x37) => 8
+_mm_cmpestri("This is a string", 16, "This", 4, 0x37) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x37) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x37) => 8
+_mm_cmpestri("This is a string", "This", 0x37) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x37) = 0000000000000000-0000000000000000
+_mm_cmpestri("This", 4, "This is a string", 16, 0x36) => 4
+_mm_cmpestri("This", 4, "This is a string", 16, 0x36) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", 4, "This is a string", 16, 0x36) = 0000000000000000-0000000000000a90
+_mm_cmpistri("This", "This is a string", 0x36) => 4
+_mm_cmpestri("This", "This is a string", 0x36) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", "This is a string", 0x36) = 0000000000000000-0000000000000a90
+_mm_cmpestri("This", 4, "This is a string", 16, 0x37) => 4
+_mm_cmpestri("This", 4, "This is a string", 16, 0x37) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", 4, "This is a string", 16, 0x37) = 0000000000000000-0000000000000090
+_mm_cmpistri("This", "This is a string", 0x37) => 4
+_mm_cmpestri("This", "This is a string", 0x37) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", "This is a string", 0x37) = 0000000000000000-0000000000000090
+_mm_cmpestri("This is a string", 16, "is", 2, 0x36) => 16
+_mm_cmpestri("This is a string", 16, "is", 2, 0x36) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x36) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x36) => 16
+_mm_cmpestri("This is a string", "is", 0x36) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x36) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "is", 2, 0x37) => 8
+_mm_cmpestri("This is a string", 16, "is", 2, 0x37) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x37) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x37) => 8
+_mm_cmpestri("This is a string", "is", 0x37) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x37) = 0000000000000000-0000000000000000
+_mm_cmpestri("is", 2, "This is a string", 16, 0x36) => 0
+_mm_cmpestri("is", 2, "This is a string", 16, 0x36) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", 2, "This is a string", 16, 0x36) = 0000000000000000-0000000000008b93
+_mm_cmpistri("is", "This is a string", 0x36) => 0
+_mm_cmpestri("is", "This is a string", 0x36) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", "This is a string", 0x36) = 0000000000000000-0000000000008b93
+_mm_cmpestri("is", 2, "This is a string", 16, 0x37) => 0
+_mm_cmpestri("is", 2, "This is a string", 16, 0x37) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", 2, "This is a string", 16, 0x37) = 0000000000000000-0000000000000093
+_mm_cmpistri("is", "This is a string", 0x37) => 0
+_mm_cmpestri("is", "This is a string", 0x37) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", "This is a string", 0x37) = 0000000000000000-0000000000000093
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x36) => 6
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x36) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x36) = 0000000000000000-0000000000000040
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x36) => 6
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x36) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x36) = 0000000000000000-0000000000000040
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x37) => 4
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x37) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x37) = 0000000000000000-0000000000000050
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x37) => 4
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x37) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x37) = 0000000000000000-0000000000000050
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x36) => 4
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x36) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x36) = 0000000000000000-0000000000000a90
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x36) => 4
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x36) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x36) = 0000000000000000-0000000000000a90
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x37) => 0
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x37) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x37) = 0000000000000000-0000000000000091
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x37) => 0
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x37) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x37) = 0000000000000000-0000000000000091
+_mm_cmpestri("This is a string", 16, "", 0, 0x36) => 16
+_mm_cmpestri("This is a string", 16, "", 0, 0x36) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x36) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x36) => 16
+_mm_cmpestri("This is a string", "", 0x36) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x36) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x37) => 8
+_mm_cmpestri("This is a string", 16, "", 0, 0x37) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x37) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x37) => 8
+_mm_cmpestri("This is a string", "", 0x37) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x37) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x36) => 0
+_mm_cmpestri("", 0, "This is a string", 16, 0x36) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x36) = 0000000000000000-000000000000ffff
+_mm_cmpistri("", "This is a string", 0x36) => 0
+_mm_cmpestri("", "This is a string", 0x36) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x36) = 0000000000000000-000000000000ffff
+_mm_cmpestri("", 0, "This is a string", 16, 0x37) => 0
+_mm_cmpestri("", 0, "This is a string", 16, 0x37) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x37) = 0000000000000000-00000000000000ff
+_mm_cmpistri("", "This is a string", 0x37) => 0
+_mm_cmpestri("", "This is a string", 0x37) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x37) = 0000000000000000-00000000000000ff
+_mm_cmpestri("This is a string", 16, "This", 4, 0x74) => 16
+_mm_cmpestri("This is a string", 16, "This", 4, 0x74) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x74) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x74) => 16
+_mm_cmpestri("This is a string", "This", 0x74) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x74) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "This", 4, 0x75) => 8
+_mm_cmpestri("This is a string", 16, "This", 4, 0x75) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "This", 4, 0x75) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "This", 0x75) => 8
+_mm_cmpestri("This is a string", "This", 0x75) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "This", 0x75) = 0000000000000000-0000000000000000
+_mm_cmpestri("This", 4, "This is a string", 16, 0x74) => 11
+_mm_cmpestri("This", 4, "This is a string", 16, 0x74) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", 4, "This is a string", 16, 0x74) = 00000000ff00ff00-0000000000000000
+_mm_cmpistri("This", "This is a string", 0x74) => 11
+_mm_cmpestri("This", "This is a string", 0x74) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", "This is a string", 0x74) = 00000000ff00ff00-0000000000000000
+_mm_cmpestri("This", 4, "This is a string", 16, 0x75) => 7
+_mm_cmpestri("This", 4, "This is a string", 16, 0x75) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", 4, "This is a string", 16, 0x75) = 000000000000ffff-0000000000000000
+_mm_cmpistri("This", "This is a string", 0x75) => 7
+_mm_cmpestri("This", "This is a string", 0x75) flags: a:0 s:1 z:0 c:1 o:0
+mm_cmpestrm("This", "This is a string", 0x75) = 000000000000ffff-0000000000000000
+_mm_cmpestri("This is a string", 16, "is", 2, 0x74) => 16
+_mm_cmpestri("This is a string", 16, "is", 2, 0x74) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x74) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x74) => 16
+_mm_cmpestri("This is a string", "is", 0x74) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x74) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "is", 2, 0x75) => 8
+_mm_cmpestri("This is a string", 16, "is", 2, 0x75) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "is", 2, 0x75) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "is", 0x75) => 8
+_mm_cmpestri("This is a string", "is", 0x75) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "is", 0x75) = 0000000000000000-0000000000000000
+_mm_cmpestri("is", 2, "This is a string", 16, 0x74) => 15
+_mm_cmpestri("is", 2, "This is a string", 16, 0x74) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", 2, "This is a string", 16, 0x74) = 00000000ff00ffff-000000000000ffff
+_mm_cmpistri("is", "This is a string", 0x74) => 15
+_mm_cmpestri("is", "This is a string", 0x74) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", "This is a string", 0x74) = 00000000ff00ffff-000000000000ffff
+_mm_cmpestri("is", 2, "This is a string", 16, 0x75) => 7
+_mm_cmpestri("is", 2, "This is a string", 16, 0x75) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", 2, "This is a string", 16, 0x75) = 000000000000ffff-00000000ffffffff
+_mm_cmpistri("is", "This is a string", 0x75) => 7
+_mm_cmpestri("is", "This is a string", 0x75) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("is", "This is a string", 0x75) = 000000000000ffff-00000000ffffffff
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x74) => 6
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x74) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x74) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x74) => 6
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x74) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x74) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x75) => 6
+_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x75) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x75) = 000000000000ffff-0000000000000000
+_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x75) => 6
+_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x75) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x75) = 000000000000ffff-0000000000000000
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x74) => 11
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x74) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x74) = 00000000ff00ff00-0000000000000000
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x74) => 11
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x74) flags: a:0 s:0 z:0 c:1 o:0
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x74) = 00000000ff00ff00-0000000000000000
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x75) => 7
+_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x75) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x75) = 000000000000ffff-000000000000ffff
+_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x75) => 7
+_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x75) flags: a:0 s:0 z:0 c:1 o:1
+mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x75) = 000000000000ffff-000000000000ffff
+_mm_cmpestri("This is a string", 16, "", 0, 0x74) => 16
+_mm_cmpestri("This is a string", 16, "", 0, 0x74) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x74) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x74) => 16
+_mm_cmpestri("This is a string", "", 0x74) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x74) = 0000000000000000-0000000000000000
+_mm_cmpestri("This is a string", 16, "", 0, 0x75) => 8
+_mm_cmpestri("This is a string", 16, "", 0, 0x75) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", 16, "", 0, 0x75) = 0000000000000000-0000000000000000
+_mm_cmpistri("This is a string", "", 0x75) => 8
+_mm_cmpestri("This is a string", "", 0x75) flags: a:0 s:0 z:1 c:0 o:0
+mm_cmpestrm("This is a string", "", 0x75) = 0000000000000000-0000000000000000
+_mm_cmpestri("", 0, "This is a string", 16, 0x74) => 15
+_mm_cmpestri("", 0, "This is a string", 16, 0x74) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x74) = 00000000ffffffff-00000000ffffffff
+_mm_cmpistri("", "This is a string", 0x74) => 15
+_mm_cmpestri("", "This is a string", 0x74) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x74) = 00000000ffffffff-00000000ffffffff
+_mm_cmpestri("", 0, "This is a string", 16, 0x75) => 7
+_mm_cmpestri("", 0, "This is a string", 16, 0x75) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", 0, "This is a string", 16, 0x75) = 00000000ffffffff-00000000ffffffff
+_mm_cmpistri("", "This is a string", 0x75) => 7
+_mm_cmpestri("", "This is a string", 0x75) flags: a:0 s:1 z:0 c:1 o:1
+mm_cmpestrm("", "This is a string", 0x75) = 00000000ffffffff-00000000ffffffff
diff --git a/tests/test27 b/tests/test27
new file mode 100755
index 00000000..24fb8aa9
--- /dev/null
+++ b/tests/test27
Binary files differdiff --git a/tests/test27.c b/tests/test27.c
new file mode 100644
index 00000000..82b72030
--- /dev/null
+++ b/tests/test27.c
@@ -0,0 +1,111 @@
+// build with  gcc -O0 -g -msse -msse2 -mssse3 -msse4.1 -msse4.2 test27.c -o test27
+// and -m32 for 32bits version
+#include <inttypes.h>
+#include <string.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <math.h>
+#include <pmmintrin.h>
+#include <immintrin.h>
+
+typedef unsigned char u8x16 __attribute__ ((vector_size (16)));
+typedef unsigned short u16x8 __attribute__ ((vector_size (16)));
+typedef unsigned int  u32x4 __attribute__ ((vector_size (16)));
+typedef unsigned long int  u64x2 __attribute__ ((vector_size (16)));
+typedef float  f32x4 __attribute__ ((vector_size (16)));
+typedef double d64x2 __attribute__ ((vector_size (16)));
+
+const char* string1 = "This is a string";
+const char* string2 = "This\0 string    ";
+const char* string3 = "is\0             ";
+const char* string4 = "maestrum-foo-bar";
+const char* string5 = "\0               ";
+
+typedef union {
+        __m128i mm;
+        __m128  mf;
+        __m128d md;
+        u8x16   u8;
+        u16x8   u16;
+        u32x4   u32;
+        u64x2   u64;
+        f32x4   f32;
+        d64x2   d64;
+} v128;
+
+v128 load_string(const char* s)
+{
+  v128 ret;
+  for(int i=0; i<16; ++i)
+    ret.u8[i] = s[i];
+  return ret;
+}
+v128 load_stringw(const char* s)
+{
+  v128 ret;
+  for(int i=0; i<8; ++i)
+    ret.u16[i] = s[i];
+  return ret;
+}
+
+int main(int argc, const char** argv)
+{
+  printf("test SSE 4.2\n");
+
+  v128 a, b, c;
+  int ret;
+  int fa, fc, fo, fs, fz;
+  #define GO1(A, B, C)  \
+    ret = _mm_cmpestri(a.mm, strlen(A), b.mm, strlen(B), C); \
+    printf("_mm_cmpestri(\"%s\", %d, \"%s\", %d, 0x%x) => %d\n", A, strlen(A), B, strlen(B), C, ret); \
+    fa = _mm_cmpestra(a.mm, strlen(A), b.mm, strlen(B), C); \
+    fc = _mm_cmpestrc(a.mm, strlen(A), b.mm, strlen(B), C); \
+    fo = _mm_cmpestro(a.mm, strlen(A), b.mm, strlen(B), C); \
+    fs = _mm_cmpestrs(a.mm, strlen(A), b.mm, strlen(B), C); \
+    fz = _mm_cmpestrz(a.mm, strlen(A), b.mm, strlen(B), C); \
+    printf("_mm_cmpestri(\"%s\", %d, \"%s\", %d, 0x%x) flags: a:%d s:%d z:%d c:%d o:%d\n", A, strlen(A), B, strlen(B), C, fa, fs, fz, fc, fo); \
+    c.mm = _mm_cmpestrm(a.mm, strlen(A), b.mm, strlen(B), C); \
+    printf("mm_cmpestrm(\"%s\", %d, \"%s\", %d, 0x%x) = %016x-%016x\n", A, strlen(A), B, strlen(B), C, c.u64[1], c.u64[0]); \
+    ret = _mm_cmpistri(a.mm, b.mm, C); \
+    printf("_mm_cmpistri(\"%s\", \"%s\", 0x%x) => %d\n", A, B, C, ret); \
+    fa = _mm_cmpistra(a.mm, b.mm, C); \
+    fc = _mm_cmpistrc(a.mm, b.mm, C); \
+    fo = _mm_cmpistro(a.mm, b.mm, C); \
+    fs = _mm_cmpistrs(a.mm, b.mm, C); \
+    fz = _mm_cmpistrz(a.mm, b.mm, C); \
+    printf("_mm_cmpestri(\"%s\", \"%s\", 0x%x) flags: a:%d s:%d z:%d c:%d o:%d\n", A, B, C, fa, fs, fz, fc, fo); \
+    c.mm = _mm_cmpistrm(a.mm, b.mm, C); \
+    printf("mm_cmpestrm(\"%s\", \"%s\", 0x%x) = %016x-%016x\n", A, B, C, c.u64[1], c.u64[0])
+
+  #define GO(A, B, C)	\
+    a = load_string(A); \
+    b = load_string(B); \
+    GO1(A, B, C);	\
+    a = load_stringw(A);\
+    b = load_stringw(B);\
+    GO1(A, B, C+1)	\
+
+  #define GO2(C) \
+  GO(string1, string2, C); \
+  GO(string2, string1, C); \
+  GO(string1, string3, C); \
+  GO(string3, string1, C); \
+  GO(string1, string4, C); \
+  GO(string4, string1, C); \
+  GO(string1, string5, C); \
+  GO(string5, string1, C);
+
+  GO2(0x00)
+  GO2(0x04)
+  GO2(0x08)
+  GO2(0x0c)
+  GO2(0b1001100)
+  GO2(0b0101100)
+  GO2(0b0110100)
+  GO2(0b0110110)
+  GO2(0b1110100)
+
+  return 0;
+}