summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Manton <cmanton@google.com>2014-08-06 09:36:17 -0700
committerAndre Eisenbach <eisenbach@google.com>2015-03-16 16:51:28 -0700
commit97fd2c0c1b45f21015ff51f5185e3b47680fdd1f (patch)
treef8c403f2c220c35e92223af8204dbcda8286da11
parentdb1fbb6e3cafe5e6abd7bf270b047936734f9488 (diff)
downloadandroid_system_bt-97fd2c0c1b45f21015ff51f5185e3b47680fdd1f.tar.gz
android_system_bt-97fd2c0c1b45f21015ff51f5185e3b47680fdd1f.tar.bz2
android_system_bt-97fd2c0c1b45f21015ff51f5185e3b47680fdd1f.zip
Add 64 bit atomic types
-rw-r--r--osi/include/atomic.h2
-rw-r--r--osi/test/atomic_test.cpp69
2 files changed, 71 insertions, 0 deletions
diff --git a/osi/include/atomic.h b/osi/include/atomic.h
index 7cd72f498..171a5393f 100644
--- a/osi/include/atomic.h
+++ b/osi/include/atomic.h
@@ -97,3 +97,5 @@ inline type atomic_dec_postfix_##name(volatile atomic_##name##_t *atomic) { \
ATOMIC_MAKE(s32, int32_t, 4)
ATOMIC_MAKE(u32, uint32_t, 4)
+ATOMIC_MAKE(s64, int64_t, 8)
+ATOMIC_MAKE(u64, uint64_t, 8)
diff --git a/osi/test/atomic_test.cpp b/osi/test/atomic_test.cpp
index 1d4601f74..bed4733e0 100644
--- a/osi/test/atomic_test.cpp
+++ b/osi/test/atomic_test.cpp
@@ -174,3 +174,72 @@ TEST(AtomicTest, test_atomic_inc_thread_single) {
}
EXPECT_EQ(0, data._val);
}
+
+TEST(AtomicTest, test_store_load_s64) {
+ atomic_s64_t data;
+
+ atomic_store_s64(&data, -1);
+ EXPECT_EQ(-1, atomic_load_s64(&data));
+
+ atomic_store_s64(&data, 0);
+ EXPECT_EQ(0, atomic_load_s64(&data));
+
+ atomic_store_s64(&data, 1);
+ EXPECT_EQ(1, atomic_load_s64(&data));
+
+ atomic_store_s64(&data, 2);
+ EXPECT_EQ(2, atomic_load_s64(&data));
+}
+
+TEST(AtomicTest, test_inc_dec_s64) {
+ atomic_s64_t data;
+
+ atomic_store_s64(&data, 0);
+ EXPECT_EQ(0, atomic_load_s64(&data));
+
+ int64_t val = atomic_inc_prefix_s64(&data);
+ EXPECT_EQ(1, atomic_load_s64(&data));
+ EXPECT_EQ(1, val);
+
+ val = atomic_inc_prefix_s64(&data);
+ EXPECT_EQ(2, atomic_load_s64(&data));
+ EXPECT_EQ(2, val);
+
+ val = atomic_inc_prefix_s64(&data);
+ EXPECT_EQ(3, atomic_load_s64(&data));
+ EXPECT_EQ(3, val);
+
+ val = atomic_dec_prefix_s64(&data);
+ EXPECT_EQ(2, val);
+
+ val = atomic_dec_prefix_s64(&data);
+ EXPECT_EQ(1, val);
+ val = atomic_dec_prefix_s64(&data);
+ EXPECT_EQ(0, val);
+ val = atomic_dec_prefix_s64(&data);
+ EXPECT_EQ(-1, val);
+
+ // Mutating using postfix.
+ val = atomic_inc_postfix_s64(&data);
+ EXPECT_EQ(0, atomic_load_s64(&data));
+ EXPECT_EQ(-1, val);
+
+ val = atomic_inc_postfix_s64(&data);
+ EXPECT_EQ(1, atomic_load_s64(&data));
+ EXPECT_EQ(0, val);
+
+ val = atomic_inc_postfix_s64(&data);
+ EXPECT_EQ(2, atomic_load_s64(&data));
+ EXPECT_EQ(1, val);
+
+ val = atomic_dec_postfix_s64(&data);
+ EXPECT_EQ(2, val);
+
+ val = atomic_dec_postfix_s64(&data);
+ EXPECT_EQ(1, val);
+ val = atomic_dec_postfix_s64(&data);
+ EXPECT_EQ(0, val);
+ val = atomic_dec_postfix_s64(&data);
+ EXPECT_EQ(-1, val);
+ EXPECT_EQ(-2, atomic_load_s64(&data));
+}