Code: Select all
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 pni syscall nx mmxext lm 3dnowext 3dnowCode: Select all
cat << "EOF" >test_pni.c
#include <stdint.h>
uint8_t __attribute__((aligned(64))) current[64];
uint8_t previous[64];
int main()
{
int i;
uint64_t result;
uint32_t ecx;
uint8_t *ptr0 = current;
uint8_t *ptr1 = previous;
__asm__ __volatile__ (
"mov $0, %%eax\n"
"cpuid\n"
"mov %%ecx, %0\n"
: "=m" (ecx) : : "eax", "ebx", "ecx" );
printf( "cpuid(1) returns %x\n", ecx );
memset( current, 0xaa, 64 );
memset( previous, 0x55, 64 );
for( i = 0; i < 4; i ++ ) {
__asm__ __volatile__ (
"movdqa %0, %%xmm0\n"
"movdqu %1, %%xmm1\n"
"psadbw %%xmm1, %%xmm0\n"
"paddw %%xmm0, %%xmm2\n"
"haddps %%xmm2, %%xmm2\n"
"haddps %%xmm2, %%xmm2\n"
: : "m" (*ptr0),
"m" (*ptr1) : "xmm0", "xmm1", "xmm2" );
ptr0 += 16;
ptr1 += 16;
}
__asm__ __volatile__ (
"movq %%xmm2, %0\n"
: "=m" (result) );
printf( "Result is %llu\n", result );
}
EOFCode: Select all
gcc -o test_pni test_pni.c
./test_pni
cpuid(1) returns 444d4163
Illegal instruction
Regards

