blob: ebfeceaea25f6cbe7e1ab91b2fb2291dfd934bee [file] [log] [blame]
/*
* Test for x86 cache and memory instructions
*
* Copyright (c) 2015 Red Hat Inc
*
* Authors:
* Eduardo Habkost <ehabkost@redhat.com>
*
* This work is licensed under the terms of the GNU GPL, version 2.
*/
#include "libcflat.h"
#include "desc.h"
#include "processor.h"
static long target;
int main(int ac, char **av)
{
if (this_cpu_has(X86_FEATURE_CLFLUSH))
asm_safe_report("clflush (%0)", "b" (&target));
else
report_skip("clflush");
if (this_cpu_has(X86_FEATURE_XMM))
asm_safe_report("sfence");
else
report_skip("sfence");
if (this_cpu_has(X86_FEATURE_XMM2)) {
asm_safe_report("lfence");
asm_safe_report("mfence");
} else {
report_skip("lfence");
report_skip("mfence");
}
if (this_cpu_has(X86_FEATURE_CLFLUSHOPT)) {
/* clflushopt (%rbx): */
asm_safe_report(".byte 0x66, 0x0f, 0xae, 0x3b", "b" (&target));
} else {
report_skip("clflushopt");
}
if (this_cpu_has(X86_FEATURE_CLWB)) {
/* clwb (%rbx): */
asm_safe_report(".byte 0x66, 0x0f, 0xae, 0x33", "b" (&target));
} else {
report_skip("clwb");
}
if (this_cpu_has(X86_FEATURE_PCOMMIT)) { /* PCOMMIT */
/* pcommit: */
asm_safe_report(".byte 0x66, 0x0f, 0xae, 0xf8");
} else {
report_skip("pcommit");
}
return report_summary();
}