17dbbd19ccd8585dd8214109a758eeb590c541ec6florian#include <stdio.h> 27dbbd19ccd8585dd8214109a758eeb590c541ec6florian#include <stdint.h> 37dbbd19ccd8585dd8214109a758eeb590c541ec6florian#include <inttypes.h> 47dbbd19ccd8585dd8214109a758eeb590c541ec6florian#include <assert.h> 57dbbd19ccd8585dd8214109a758eeb590c541ec6florian 67dbbd19ccd8585dd8214109a758eeb590c541ec6florian/* The golden logs were obtained by running this test natively. */ 77dbbd19ccd8585dd8214109a758eeb590c541ec6florian 87dbbd19ccd8585dd8214109a758eeb590c541ec6florian/* The abstracted result of a CLCL insn */ 97dbbd19ccd8585dd8214109a758eeb590c541ec6floriantypedef struct { 107dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint64_t addr1; 117dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint32_t len1; 127dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint64_t addr2; 137dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint32_t len2; 147dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t pad; 157dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint32_t cc; 167dbbd19ccd8585dd8214109a758eeb590c541ec6florian} clcl_t; 177dbbd19ccd8585dd8214109a758eeb590c541ec6florian 187dbbd19ccd8585dd8214109a758eeb590c541ec6florian/* Register contents after CLCL insn */ 197dbbd19ccd8585dd8214109a758eeb590c541ec6floriantypedef struct { 207dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint64_t r1; 217dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint64_t r1p1; 227dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint64_t r2; 237dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint64_t r2p1; 247dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint64_t cc; 257dbbd19ccd8585dd8214109a758eeb590c541ec6florian} clcl_regs; 267dbbd19ccd8585dd8214109a758eeb590c541ec6florian 277dbbd19ccd8585dd8214109a758eeb590c541ec6florian/* Run a single CLCL insn and return its raw result. */ 287dbbd19ccd8585dd8214109a758eeb590c541ec6florianstatic clcl_regs 297dbbd19ccd8585dd8214109a758eeb590c541ec6floriando_clcl(uint64_t r1, uint64_t r1p1, uint64_t r2, uint64_t r2p1) 307dbbd19ccd8585dd8214109a758eeb590c541ec6florian{ 317dbbd19ccd8585dd8214109a758eeb590c541ec6florian clcl_regs regs; 327dbbd19ccd8585dd8214109a758eeb590c541ec6florian 337dbbd19ccd8585dd8214109a758eeb590c541ec6florian register uint64_t a1 asm ("2") = r1; 347dbbd19ccd8585dd8214109a758eeb590c541ec6florian register uint64_t l1 asm ("3") = r1p1; 357dbbd19ccd8585dd8214109a758eeb590c541ec6florian register uint64_t a2 asm ("4") = r2; 367dbbd19ccd8585dd8214109a758eeb590c541ec6florian register uint64_t l2 asm ("5") = r2p1; 377dbbd19ccd8585dd8214109a758eeb590c541ec6florian register uint32_t cc asm ("7"); 387dbbd19ccd8585dd8214109a758eeb590c541ec6florian 397dbbd19ccd8585dd8214109a758eeb590c541ec6florian asm volatile( "0: clcl 2,4\n\t" 407dbbd19ccd8585dd8214109a758eeb590c541ec6florian "jo 0b\n\t" 417dbbd19ccd8585dd8214109a758eeb590c541ec6florian "ipm %0\n\t" 427dbbd19ccd8585dd8214109a758eeb590c541ec6florian "srl %0,28\n\t" 437dbbd19ccd8585dd8214109a758eeb590c541ec6florian :"=d" (cc), "+d" (a1),"+d" (l1), "+d" (a2), "+d" (l2) 447dbbd19ccd8585dd8214109a758eeb590c541ec6florian : : "memory", "cc"); 457dbbd19ccd8585dd8214109a758eeb590c541ec6florian 467dbbd19ccd8585dd8214109a758eeb590c541ec6florian regs.r1 = a1; 477dbbd19ccd8585dd8214109a758eeb590c541ec6florian regs.r1p1 = l1; 487dbbd19ccd8585dd8214109a758eeb590c541ec6florian regs.r2 = a2; 497dbbd19ccd8585dd8214109a758eeb590c541ec6florian regs.r2p1 = l2; 507dbbd19ccd8585dd8214109a758eeb590c541ec6florian regs.cc = cc; 517dbbd19ccd8585dd8214109a758eeb590c541ec6florian 527dbbd19ccd8585dd8214109a758eeb590c541ec6florian return regs; 537dbbd19ccd8585dd8214109a758eeb590c541ec6florian} 547dbbd19ccd8585dd8214109a758eeb590c541ec6florian 557dbbd19ccd8585dd8214109a758eeb590c541ec6florianclcl_t 567dbbd19ccd8585dd8214109a758eeb590c541ec6florianresult_from_regs(clcl_regs regs) 577dbbd19ccd8585dd8214109a758eeb590c541ec6florian{ 587dbbd19ccd8585dd8214109a758eeb590c541ec6florian clcl_t result; 597dbbd19ccd8585dd8214109a758eeb590c541ec6florian 607dbbd19ccd8585dd8214109a758eeb590c541ec6florian result.addr1 = regs.r1; 617dbbd19ccd8585dd8214109a758eeb590c541ec6florian result.len1 = regs.r1p1 & 0xFFFFFF; 627dbbd19ccd8585dd8214109a758eeb590c541ec6florian result.addr2 = regs.r2; 637dbbd19ccd8585dd8214109a758eeb590c541ec6florian result.len2 = regs.r2p1 & 0xFFFFFF; 647dbbd19ccd8585dd8214109a758eeb590c541ec6florian result.pad = (regs.r2p1 & 0xFF000000u) >> 24; 657dbbd19ccd8585dd8214109a758eeb590c541ec6florian result.cc = regs.cc; 667dbbd19ccd8585dd8214109a758eeb590c541ec6florian 677dbbd19ccd8585dd8214109a758eeb590c541ec6florian return result; 687dbbd19ccd8585dd8214109a758eeb590c541ec6florian} 697dbbd19ccd8585dd8214109a758eeb590c541ec6florian 707dbbd19ccd8585dd8214109a758eeb590c541ec6florian/* Run CLCL twice using different fill bits for unused register bits. 717dbbd19ccd8585dd8214109a758eeb590c541ec6florian Results ought to be the same */ 727dbbd19ccd8585dd8214109a758eeb590c541ec6florianstatic clcl_t 737dbbd19ccd8585dd8214109a758eeb590c541ec6florianclcl(void *addr1, uint32_t len1, 747dbbd19ccd8585dd8214109a758eeb590c541ec6florian void *addr2, uint32_t len2, uint32_t pad) 757dbbd19ccd8585dd8214109a758eeb590c541ec6florian{ 767dbbd19ccd8585dd8214109a758eeb590c541ec6florian clcl_t result1, result2; 777dbbd19ccd8585dd8214109a758eeb590c541ec6florian clcl_regs regs; 787dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint64_t r1, r1p1, r2, r2p1; 797dbbd19ccd8585dd8214109a758eeb590c541ec6florian 807dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Check input arguments */ 817dbbd19ccd8585dd8214109a758eeb590c541ec6florian assert((pad & 0xFF) == pad); /* an 8-byte value */ 827dbbd19ccd8585dd8214109a758eeb590c541ec6florian assert((len1 & 0xFFFFFF) == len1); 837dbbd19ccd8585dd8214109a758eeb590c541ec6florian assert((len2 & 0xFFFFFF) == len2); 847dbbd19ccd8585dd8214109a758eeb590c541ec6florian 857dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Build up register contents setting unused bits to 0 */ 867dbbd19ccd8585dd8214109a758eeb590c541ec6florian r1 = (uint64_t)addr1; 877dbbd19ccd8585dd8214109a758eeb590c541ec6florian r1p1 = len1; 887dbbd19ccd8585dd8214109a758eeb590c541ec6florian r2 = (uint64_t)addr2; 897dbbd19ccd8585dd8214109a758eeb590c541ec6florian r2p1 = len2 | (pad << 24); 907dbbd19ccd8585dd8214109a758eeb590c541ec6florian 917dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Run clcl */ 927dbbd19ccd8585dd8214109a758eeb590c541ec6florian regs = do_clcl(r1, r1p1, r2, r2p1); 937dbbd19ccd8585dd8214109a758eeb590c541ec6florian result1 = result_from_regs(regs); 947dbbd19ccd8585dd8214109a758eeb590c541ec6florian 957dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Check unused bits */ 967dbbd19ccd8585dd8214109a758eeb590c541ec6florian if ((regs.r1p1 >> 24) != 0) 977dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: r1[0:39] modified (unused bits 0)\n"); 987dbbd19ccd8585dd8214109a758eeb590c541ec6florian if ((regs.r2p1 >> 32) != 0) 997dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: r2[0:31] modified (unused bits 0)\n"); 1007dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1017dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Check pad value */ 1027dbbd19ccd8585dd8214109a758eeb590c541ec6florian if (result1.pad != pad) 1037dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: pad byte modified (unused bits 0)\n"); 1047dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1057dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Build up register contents setting unused bits to 1 */ 1067dbbd19ccd8585dd8214109a758eeb590c541ec6florian r1p1 |= 0xFFFFFFFFFFull << 24; 1077dbbd19ccd8585dd8214109a758eeb590c541ec6florian r2p1 |= ((uint64_t)0xFFFFFFFF) << 32; 1087dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1097dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Run clcl again */ 1107dbbd19ccd8585dd8214109a758eeb590c541ec6florian regs = do_clcl(r1, r1p1, r2, r2p1); 1117dbbd19ccd8585dd8214109a758eeb590c541ec6florian result2 = result_from_regs(regs); 1127dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1137dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Check unused bits */ 1147dbbd19ccd8585dd8214109a758eeb590c541ec6florian if ((regs.r1p1 >> 24) != 0xFFFFFFFFFFull) 1157dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: r1[0:39] modified (unused bits 1)\n"); 1167dbbd19ccd8585dd8214109a758eeb590c541ec6florian if ((regs.r2p1 >> 32) != 0xFFFFFFFFu) 1177dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: r2[0:31] modified (unused bits 1)\n"); 1187dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1197dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Check pad value */ 1207dbbd19ccd8585dd8214109a758eeb590c541ec6florian if (result2.pad != pad) 1217dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: pad byte modified (unused bits 1)\n"); 1227dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1237dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Compare results */ 1247dbbd19ccd8585dd8214109a758eeb590c541ec6florian if (result1.addr1 != result2.addr1) 1257dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: addr1 result is different\n"); 1267dbbd19ccd8585dd8214109a758eeb590c541ec6florian if (result1.addr2 != result2.addr2) 1277dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: addr2 result is different\n"); 1287dbbd19ccd8585dd8214109a758eeb590c541ec6florian if (result1.len1 != result2.len1) 1297dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: len1 result is different\n"); 1307dbbd19ccd8585dd8214109a758eeb590c541ec6florian if (result1.len2 != result2.len2) 1317dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: len2 result is different\n"); 1327dbbd19ccd8585dd8214109a758eeb590c541ec6florian if (result1.pad != result2.pad) 1337dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: pad result is different\n"); 1347dbbd19ccd8585dd8214109a758eeb590c541ec6florian if (result1.cc != result2.cc) 1357dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("FAIL: cc result is different\n"); 1367dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1377dbbd19ccd8585dd8214109a758eeb590c541ec6florian return result1; 1387dbbd19ccd8585dd8214109a758eeb590c541ec6florian} 1397dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1407dbbd19ccd8585dd8214109a758eeb590c541ec6florianvoid 1417dbbd19ccd8585dd8214109a758eeb590c541ec6florianrun_test(void *addr1, uint32_t len1, void *addr2, uint32_t len2, uint32_t pad) 1427dbbd19ccd8585dd8214109a758eeb590c541ec6florian{ 1437dbbd19ccd8585dd8214109a758eeb590c541ec6florian clcl_t result; 1447dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1457dbbd19ccd8585dd8214109a758eeb590c541ec6florian result = clcl(addr1, len1, addr2, len2, pad); 1467dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1477dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("cc: %"PRIu32", len1: %"PRIu32", len2: %"PRIu32 1487dbbd19ccd8585dd8214109a758eeb590c541ec6florian ", addr1 diff: %"PRId64", addr2 diff: %"PRId64"\n", result.cc, 1497dbbd19ccd8585dd8214109a758eeb590c541ec6florian result.len1, result.len2, (int64_t)result.addr1 - (int64_t)addr1, 1507dbbd19ccd8585dd8214109a758eeb590c541ec6florian (int64_t)result.addr2 - (int64_t)addr2); 1517dbbd19ccd8585dd8214109a758eeb590c541ec6florian} 1527dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1537dbbd19ccd8585dd8214109a758eeb590c541ec6florianint main() 1547dbbd19ccd8585dd8214109a758eeb590c541ec6florian{ 1557dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t byte, byte1, byte2; 1567dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1577dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Test 1: both lengths are 0; nothing loaded from memory */ 1587dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("--- test 1 ---\n"); 1597dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(NULL, 0, NULL, 0, 0x00); 1607dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(NULL, 0, NULL, 0, 0xff); 1617dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1627dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Test 2: Compare two single bytes */ 1637dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("--- test 2 ---\n"); 1647dbbd19ccd8585dd8214109a758eeb590c541ec6florian byte1 = 10; 1657dbbd19ccd8585dd8214109a758eeb590c541ec6florian byte2 = 20; 1667dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte1, 1, &byte2, 1, 0x00); // first operand low 1677dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte1, 1, &byte1, 1, 0x00); // equal 1687dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte2, 1, &byte1, 1, 0x00); // first operand high 1697dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte1, 1, &byte2, 1, 0xFF); // first operand low 1707dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte1, 1, &byte1, 1, 0xFF); // equal 1717dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte2, 1, &byte1, 1, 0xFF); // first operand high 1727dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1737dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Test 3: Compare a single byte against the pad byte */ 1747dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("--- test 3 ---\n"); 1757dbbd19ccd8585dd8214109a758eeb590c541ec6florian byte = 10; 1767dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(NULL, 0, &byte, 1, 10); // equal 1777dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(NULL, 0, &byte, 1, 9); // first operand low 1787dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(NULL, 0, &byte, 1, 11); // first operand high 1797dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Swap operands */ 1807dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte, 1, NULL, 0, 10); // equal 1817dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte, 1, NULL, 0, 9); // first operand high 1827dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte, 1, NULL, 0, 11); // first operand low 1837dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1847dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Test 4: Make sure pad byte is interpreted as unsigned value */ 1857dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("--- test 4 ---\n"); 1867dbbd19ccd8585dd8214109a758eeb590c541ec6florian byte = 10; 1877dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte, 1, NULL, 0, 0xFF); // first operand low 1887dbbd19ccd8585dd8214109a758eeb590c541ec6florian byte = 0xFF; 1897dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(&byte, 1, NULL, 0, 0xFF); // equal 1907dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1917dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Test 5: Compare a buffer against the pad byte */ 1927dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("--- test 5 ---\n"); 1937dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t buf1[4] = "yyyy"; 1947dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(buf1, 4, NULL, 0, 'y'); // equal 1957dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(buf1, 4, NULL, 0, 'x'); // greater 1967dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(buf1, 4, NULL, 0, 'z'); // less 1977dbbd19ccd8585dd8214109a758eeb590c541ec6florian 1987dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Test 6: Compare two buffers of same size (difference in 1st byte) */ 1997dbbd19ccd8585dd8214109a758eeb590c541ec6florian { 2007dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("--- test 6 ---\n"); 2017dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t x[5] = "pqrst"; 2027dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t y[5] = "abcde"; 2037dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t z[5] = "abcde"; 2047dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(x, 5, y, 5, 'a'); // first operand low 2057dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(y, 5, x, 5, 'a'); // first operand high 2067dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(y, 5, z, 5, 'q'); // equal 2077dbbd19ccd8585dd8214109a758eeb590c541ec6florian } 2087dbbd19ccd8585dd8214109a758eeb590c541ec6florian 2097dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Test 7: Compare two buffers of same size (difference in last byte) */ 2107dbbd19ccd8585dd8214109a758eeb590c541ec6florian { 2117dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("--- test 7 ---\n"); 2127dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t x[5] = "abcdd"; 2137dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t y[5] = "abcde"; 2147dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t z[5] = "abcdf"; 2157dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(x, 5, y, 5, 'a'); // first operand low 2167dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(z, 5, z, 5, 'a'); // first operand high 2177dbbd19ccd8585dd8214109a758eeb590c541ec6florian } 2187dbbd19ccd8585dd8214109a758eeb590c541ec6florian 2197dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Test 8: Compare two buffers of different size. The difference 2207dbbd19ccd8585dd8214109a758eeb590c541ec6florian is past the end of the shorter string. */ 2217dbbd19ccd8585dd8214109a758eeb590c541ec6florian { 2227dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("--- test 8 ---\n"); 2237dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t x[5] = "abcde"; 2247dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t y[7] = "abcdeff"; 2257dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(x, 5, y, 7, 0); // first operand low 2267dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(y, 7, x, 5, 0); // first operand high 2277dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(x, 5, y, 7, 'f'); // equal 2287dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(y, 7, x, 5, 'f'); // equal 2297dbbd19ccd8585dd8214109a758eeb590c541ec6florian } 2307dbbd19ccd8585dd8214109a758eeb590c541ec6florian 2317dbbd19ccd8585dd8214109a758eeb590c541ec6florian /* Test 9: Compare two buffers of different size. The difference 2327dbbd19ccd8585dd8214109a758eeb590c541ec6florian is before the end of the shorter string. */ 2337dbbd19ccd8585dd8214109a758eeb590c541ec6florian { 2347dbbd19ccd8585dd8214109a758eeb590c541ec6florian printf("--- test 9 ---\n"); 2357dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t x[5] = "abcab"; 2367dbbd19ccd8585dd8214109a758eeb590c541ec6florian uint8_t y[7] = "abcdeff"; 2377dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(x, 5, y, 7, 0); // first operand low 2387dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(y, 7, x, 5, 0); // first operand high 2397dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(x, 5, y, 7, 'f'); // first operand low 2407dbbd19ccd8585dd8214109a758eeb590c541ec6florian run_test(y, 7, x, 5, 'f'); // first operand high 2417dbbd19ccd8585dd8214109a758eeb590c541ec6florian } 2427dbbd19ccd8585dd8214109a758eeb590c541ec6florian 2437dbbd19ccd8585dd8214109a758eeb590c541ec6florian return 0; 2447dbbd19ccd8585dd8214109a758eeb590c541ec6florian} 245