summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnuradio-core/src/lib/filter/gr_cpu.cc31
-rw-r--r--gnuradio-core/src/lib/filter/gr_cpu.h6
2 files changed, 35 insertions, 2 deletions
diff --git a/gnuradio-core/src/lib/filter/gr_cpu.cc b/gnuradio-core/src/lib/filter/gr_cpu.cc
index 6fe3591cd..517c10e9a 100644
--- a/gnuradio-core/src/lib/filter/gr_cpu.cc
+++ b/gnuradio-core/src/lib/filter/gr_cpu.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2002 Free Software Foundation, Inc.
+ * Copyright 2002,2008 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -85,6 +85,35 @@ gr_cpu::has_sse2 ()
}
bool
+gr_cpu::has_sse3 ()
+{
+ unsigned int ecx = cpuid_ecx (1); // standard features
+ return (ecx & (1 << 0)) != 0;
+}
+
+bool
+gr_cpu::has_ssse3 ()
+{
+ unsigned int ecx = cpuid_ecx (1); // standard features
+ return (ecx & (1 << 9)) != 0;
+}
+
+bool
+gr_cpu::has_sse4_1 ()
+{
+ unsigned int ecx = cpuid_ecx (1); // standard features
+ return (ecx & (1 << 19)) != 0;
+}
+
+bool
+gr_cpu::has_sse4_2 ()
+{
+ unsigned int ecx = cpuid_ecx (1); // standard features
+ return (ecx & (1 << 20)) != 0;
+}
+
+
+bool
gr_cpu::has_3dnow ()
{
unsigned int extended_fct_count = cpuid_eax (0x80000000);
diff --git a/gnuradio-core/src/lib/filter/gr_cpu.h b/gnuradio-core/src/lib/filter/gr_cpu.h
index 2d42eb610..5967d9868 100644
--- a/gnuradio-core/src/lib/filter/gr_cpu.h
+++ b/gnuradio-core/src/lib/filter/gr_cpu.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2002 Free Software Foundation, Inc.
+ * Copyright 2002,2008 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -27,6 +27,10 @@ struct gr_cpu {
static bool has_mmx ();
static bool has_sse ();
static bool has_sse2 ();
+ static bool has_sse3 ();
+ static bool has_ssse3 ();
+ static bool has_sse4_1 ();
+ static bool has_sse4_2 ();
static bool has_3dnow ();
static bool has_3dnowext ();
};