MCPcopy Create free account
hub / github.com/DLTcollab/sse2neon / test_advanced_integer

Function test_advanced_integer

tests/fuzz.cpp:1446–1486  ·  view source on GitHub ↗

Strategy 23: Advanced Integer Operations * * Tests SSSE3/SSE4.1 advanced integer intrinsics: * - _mm_minpos_epu16: horizontal minimum with position * - _mm_mulhrs_epi16: high-rounding multiply * - _mm_packus_epi32: 32-to-16 unsigned packing * - 64-bit insert/extract */

Source from the content-addressed store, hash-verified

1444 * - 64-bit insert/extract
1445 */
1446static void test_advanced_integer(const uint8_t *data, size_t size)
1447{
1448 if (size < 32)
1449 return;
1450
1451 __m128i a = _mm_loadu_si128((const __m128i *) data);
1452 __m128i b = _mm_loadu_si128((const __m128i *) (data + 16));
1453
1454 /* Horizontal minimum with position (SSE4.1) */
1455 SINK_I128(_mm_minpos_epu16(a));
1456
1457 /* High-rounding multiply (SSSE3) */
1458 SINK_I128(_mm_mulhrs_epi16(a, b));
1459
1460 /* 32-to-16 unsigned pack (SSE4.1) */
1461 SINK_I128(_mm_packus_epi32(a, b));
1462
1463 /* 64-bit extract/insert (SSE4.1, 64-bit only) */
1464#if defined(__x86_64__) || defined(__aarch64__) || defined(_M_ARM64)
1465 SINK_I64(_mm_extract_epi64(a, 0));
1466 SINK_I64(_mm_extract_epi64(a, 1));
1467
1468 int64_t insert_val =
1469 get_u32(data, size, 0) | ((int64_t) get_u32(data, size, 4) << 32);
1470 SINK_I128(_mm_insert_epi64(a, insert_val, 0));
1471 SINK_I128(_mm_insert_epi64(a, insert_val, 1));
1472#endif
1473
1474 /* Edge cases for minpos */
1475 __m128i all_max = _mm_set1_epi16((short) 0xFFFF);
1476 __m128i all_zero = _mm_setzero_si128();
1477 SINK_I128(_mm_minpos_epu16(all_max));
1478 SINK_I128(_mm_minpos_epu16(all_zero));
1479
1480 /* mulhrs edge cases */
1481 __m128i max16 = _mm_set1_epi16((short) 0x7FFF);
1482 __m128i min16 = _mm_set1_epi16((short) 0x8000);
1483 SINK_I128(_mm_mulhrs_epi16(max16, max16));
1484 SINK_I128(_mm_mulhrs_epi16(min16, min16));
1485 SINK_I128(_mm_mulhrs_epi16(max16, min16));
1486}
1487
1488/* Strategy 24: Scalar Upper Lane Preservation
1489 *

Callers 1

LLVMFuzzerTestOneInputFunction · 0.85

Calls 7

_mm_loadu_si128Function · 0.85
_mm_minpos_epu16Function · 0.85
_mm_mulhrs_epi16Function · 0.85
_mm_packus_epi32Function · 0.85
get_u32Function · 0.85
_mm_set1_epi16Function · 0.85
_mm_setzero_si128Function · 0.85

Tested by

no test coverage detected