Beispiel #1
0
/* ------------------------------------------------------------------------- */
int test_sign16s_func(void)
{
	INT16 ALIGN(src[65535]), ALIGN(d1[65535]);
#ifdef WITH_SSE2
	INT16 ALIGN(d2[65535]);
	int i;
#endif
	int failed = 0;
	char testStr[256];

	/* Test when we can reach 16-byte alignment */
	testStr[0] = '\0';
	get_random_data(src, sizeof(src));
	general_sign_16s(src+1, d1+1, 65535);
#ifdef WITH_SSE2
	if (IsProcessorFeaturePresentEx(PF_EX_SSSE3))
	{
		strcat(testStr, " SSSE3");
		ssse3_sign_16s(src+1, d2+1, 65535);
		for (i=1; i<65535; ++i)
		{
			if (d1[i] != d2[i])
			{ 
				printf("SIGN16s-SSE-aligned FAIL[%d] of %d: want %d, got %d\n", 
					i, src[i], d1[i], d2[i]); 
				++failed;
			}
		}
	}
#endif /* i386 */

	/* Test when we cannot reach 16-byte alignment */
	get_random_data(src, sizeof(src));
	general_sign_16s(src+1, d1+2, 65535);
#ifdef WITH_SSE2
	if (IsProcessorFeaturePresentEx(PF_EX_SSSE3))
	{
		ssse3_sign_16s(src+1, d2+2, 65535);
		for (i=2; i<65535; ++i)
		{
			if (d1[i] != d2[i])
			{ 
				printf("SIGN16s-SSE-unaligned FAIL[%d] of %d: want %d, got %d\n", 
					i, src[i-1], d1[i], d2[i]); 
				++failed;
			}
		}
	}
#endif /* i386 */
	if (!failed) printf("All sign16s tests passed (%s).\n", testStr);
	return (failed > 0) ? FAILURE : SUCCESS;
}
Beispiel #2
0
/* ------------------------------------------------------------------------- */
void primitives_init_sign_opt(primitives_t *prims)
{
	/* Pick tuned versions if possible. */
	/* I didn't spot an IPP version of this. */
#if defined(WITH_SSE2)
	if (IsProcessorFeaturePresentEx(PF_EX_SSSE3)
			&& IsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE))
	{
		prims->sign_16s  = ssse3_sign_16s;
	}
#endif
}
Beispiel #3
0
void primitives_flags_str(char* str, size_t len)
{
	int i;

	*str = '\0';
	--len;	/* for the '/0' */

	for (i = 0; i < sizeof(flags) / sizeof(flagpair_t); ++i)
	{
		if (IsProcessorFeaturePresent(flags[i].flag))
		{
			int slen = strlen(flags[i].str) + 1;

			if (len < slen)
				break;

			if (*str != '\0')
				strcat(str, " ");

			strcat(str, flags[i].str);
			len -= slen;
		}
	}
	for (i = 0; i < sizeof(flags_extended) / sizeof(flagpair_t); ++i)
	{
		if (IsProcessorFeaturePresentEx(flags_extended[i].flag))
		{
			int slen = strlen(flags_extended[i].str) + 1;

			if (len < slen)
				break;

			if (*str != '\0')
				strcat(str, " ");

			strcat(str, flags_extended[i].str);
			len -= slen;
		}
	}
}
Beispiel #4
0
int TestCPUFeatures(int argc, char* argv[])
{
    printf("Base CPU Flags:\n");
#ifdef _M_IX86_AMD64
    printf("\tPF_MMX_INSTRUCTIONS_AVAILABLE:  %s\n", IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE) ? "yes" : "no");
    printf("\tPF_XMMI_INSTRUCTIONS_AVAILABLE:  %s\n", IsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE) ? "yes" : "no");
    printf("\tPF_XMMI64_INSTRUCTIONS_AVAILABLE:  %s\n", IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE) ? "yes" : "no");
    printf("\tPF_3DNOW_INSTRUCTIONS_AVAILABLE:  %s\n", IsProcessorFeaturePresent(PF_3DNOW_INSTRUCTIONS_AVAILABLE) ? "yes" : "no");
    printf("\tPF_SSE3_INSTRUCTIONS_AVAILABLE:  %s\n", IsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE) ? "yes" : "no");
    printf("\n");
    printf("Extended CPU Flags (not found in windows API):\n");
    printf("\tPF_EX_3DNOW_PREFETCH:  %s\n", IsProcessorFeaturePresentEx(PF_EX_3DNOW_PREFETCH) ? "yes" : "no");
    printf("\tPF_EX_SSSE3:  %s\n", IsProcessorFeaturePresentEx(PF_EX_SSSE3) ? "yes" : "no");
    printf("\tPF_EX_SSE41:  %s\n", IsProcessorFeaturePresentEx(PF_EX_SSE41) ? "yes" : "no");
    printf("\tPF_EX_SSE42:  %s\n", IsProcessorFeaturePresentEx(PF_EX_SSE42) ? "yes" : "no");
    printf("\tPF_EX_AVX:  %s\n", IsProcessorFeaturePresentEx(PF_EX_AVX) ? "yes" : "no");
    printf("\tPF_EX_FMA:  %s\n", IsProcessorFeaturePresentEx(PF_EX_FMA) ? "yes" : "no");
    printf("\tPF_EX_AVX_AES:  %s\n", IsProcessorFeaturePresentEx(PF_EX_AVX_AES) ? "yes" : "no");
#elif defined(_M_ARM)
    printf("\tPF_ARM_NEON_INSTRUCTIONS_AVAILABLE:  %s\n", IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE) ? "yes" : "no");
    printf("\tPF_ARM_THUMB:  %s\n", IsProcessorFeaturePresent(PF_ARM_THUMB) ? "yes" : "no");
    printf("\tPF_ARM_VFP_32_REGISTERS_AVAILABLE:  %s\n", IsProcessorFeaturePresent(PF_ARM_VFP_32_REGISTERS_AVAILABLE) ? "yes" : "no");
    printf("\tPF_ARM_DIVIDE_INSTRUCTION_AVAILABLE:  %s\n", IsProcessorFeaturePresent(PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE) ? "yes" : "no");
    printf("\tPF_ARM_VFP3:  %s\n", IsProcessorFeaturePresent(PF_ARM_VFP3) ? "yes" : "no");
    printf("\tPF_ARM_THUMB:  %s\n", IsProcessorFeaturePresent(PF_ARM_THUMB) ? "yes" : "no");
    printf("\tPF_ARM_JAZELLE:  %s\n", IsProcessorFeaturePresent(PF_ARM_JAZELLE) ? "yes" : "no");
    printf("\tPF_ARM_DSP:  %s\n", IsProcessorFeaturePresent(PF_ARM_DSP) ? "yes" : "no");
    printf("\tPF_ARM_THUMB2:  %s\n", IsProcessorFeaturePresent(PF_ARM_THUMB2) ? "yes" : "no");
    printf("\tPF_ARM_T2EE:  %s\n", IsProcessorFeaturePresent(PF_ARM_T2EE) ? "yes" : "no");
    printf("\tPF_ARM_INTEL_WMMX:  %s\n", IsProcessorFeaturePresent(PF_ARM_INTEL_WMMX) ? "yes" : "no");
    printf("Extended CPU Flags (not found in windows API):\n");
    printf("\tPF_EX_ARM_VFP1:  %s\n", IsProcessorFeaturePresentEx(PF_EX_ARM_VFP1) ? "yes" : "no");
    printf("\tPF_EX_ARM_VFP3D16:  %s\n", IsProcessorFeaturePresentEx(PF_EX_ARM_VFP3D16) ? "yes" : "no");
    printf("\tPF_EX_ARM_VFP4:  %s\n", IsProcessorFeaturePresentEx(PF_EX_ARM_VFP4) ? "yes" : "no");
    printf("\tPF_EX_ARM_IDIVA:  %s\n", IsProcessorFeaturePresentEx(PF_EX_ARM_IDIVA) ? "yes" : "no");
    printf("\tPF_EX_ARM_IDIVT:  %s\n", IsProcessorFeaturePresentEx(PF_EX_ARM_IDIVT) ? "yes" : "no");
#endif
    printf("\n");
    return 0;
}
Beispiel #5
0
static BOOL CALLBACK rfx_rlgr_init(PINIT_ONCE once, PVOID param, PVOID *context)
{
	g_LZCNT = IsProcessorFeaturePresentEx(PF_EX_LZCNT);
	return TRUE;
}