summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Zern <jzern@google.com>2022-04-26 01:15:30 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-04-26 01:15:30 +0000
commit8a29e27e17c8e4277ba15ca993a8912464c2400a (patch)
treee988bde39b4761bd3b1034c50160ce0b5f23331b
parent76b7350cee4a4f047c813134dba33594d0b2785b (diff)
parentd18407a171ef7a0108f961c12794ddb32ad5c9ab (diff)
downloadlibvpx-8a29e27e17c8e4277ba15ca993a8912464c2400a.tar
libvpx-8a29e27e17c8e4277ba15ca993a8912464c2400a.tar.gz
libvpx-8a29e27e17c8e4277ba15ca993a8912464c2400a.tar.bz2
libvpx-8a29e27e17c8e4277ba15ca993a8912464c2400a.zip
Merge changes Ib8bcefd2,I84f789ca into main
* changes: register_state_check.h: add compiler barrier add_noise_test.cc: remove stale TODO
-rw-r--r--test/add_noise_test.cc1
-rw-r--r--test/register_state_check.h34
2 files changed, 26 insertions, 9 deletions
diff --git a/test/add_noise_test.cc b/test/add_noise_test.cc
index 25de4279c..7dc86e3eb 100644
--- a/test/add_noise_test.cc
+++ b/test/add_noise_test.cc
@@ -23,7 +23,6 @@ namespace {
static const int kNoiseSize = 3072;
-// TODO(jimbankoski): make width and height integers not unsigned.
typedef void (*AddNoiseFunc)(uint8_t *start, const int8_t *noise,
int blackclamp, int whiteclamp, int width,
int height, int pitch);
diff --git a/test/register_state_check.h b/test/register_state_check.h
index 436646637..1746240c6 100644
--- a/test/register_state_check.h
+++ b/test/register_state_check.h
@@ -35,6 +35,7 @@
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
+#include <intrin.h>
#include <windows.h>
#include <winnt.h>
@@ -81,10 +82,13 @@ class RegisterStateCheck {
CONTEXT pre_context_;
};
-#define ASM_REGISTER_STATE_CHECK(statement) \
- do { \
- libvpx_test::RegisterStateCheck reg_check; \
- statement; \
+#define ASM_REGISTER_STATE_CHECK(statement) \
+ do { \
+ { \
+ libvpx_test::RegisterStateCheck reg_check; \
+ statement; \
+ } \
+ _ReadWriteBarrier(); \
} while (false)
} // namespace libvpx_test
@@ -121,11 +125,22 @@ class RegisterStateCheck {
int64_t pre_store_[8];
};
+#if defined(__GNUC__)
+#define ASM_REGISTER_STATE_CHECK(statement) \
+ do { \
+ { \
+ libvpx_test::RegisterStateCheck reg_check; \
+ statement; \
+ } \
+ __asm__ volatile("" ::: "memory"); \
+ } while (false)
+#else
#define ASM_REGISTER_STATE_CHECK(statement) \
do { \
libvpx_test::RegisterStateCheck reg_check; \
statement; \
} while (false)
+#endif
} // namespace libvpx_test
@@ -169,10 +184,13 @@ class RegisterStateCheckMMX {
uint16_t pre_fpu_env_[14];
};
-#define API_REGISTER_STATE_CHECK(statement) \
- do { \
- libvpx_test::RegisterStateCheckMMX reg_check; \
- ASM_REGISTER_STATE_CHECK(statement); \
+#define API_REGISTER_STATE_CHECK(statement) \
+ do { \
+ { \
+ libvpx_test::RegisterStateCheckMMX reg_check; \
+ ASM_REGISTER_STATE_CHECK(statement); \
+ } \
+ __asm__ volatile("" ::: "memory"); \
} while (false)
} // namespace libvpx_test