From 15e2a0e13ddd9c6444c8a95e611e6bda19e9c38f Mon Sep 17 00:00:00 2001 From: Snappy Team Date: Wed, 9 Nov 2022 05:32:52 +0000 Subject: Add "cc" clobbers to inline asm that modifies flags. As far as we know, the lack of "cc" in the clobbers hasn't caused problems yet, but it could. This change is to improve correctness, and is also almost certainly performance neutral. PiperOrigin-RevId: 487133620 --- snappy-internal.h | 6 ++++-- snappy.cc | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/snappy-internal.h b/snappy-internal.h index e552ea0..0923f39 100644 --- a/snappy-internal.h +++ b/snappy-internal.h @@ -246,7 +246,8 @@ static inline std::pair FindMatchLength(const char* s1, asm("testl %k2, %k2\n\t" "cmovzq %1, %0\n\t" : "+r"(a2) - : "r"(a3), "r"(xorval)); + : "r"(a3), "r"(xorval) + : "cc"); #endif *data = a2 >> (shift & (3 * 8)); return std::pair(matched_bytes, true); @@ -277,7 +278,8 @@ static inline std::pair FindMatchLength(const char* s1, asm("testl %k2, %k2\n\t" "cmovzq %1, %0\n\t" : "+r"(a2) - : "r"(a3), "r"(xorval)); + : "r"(a3), "r"(xorval) + : "cc"); #endif *data = a2 >> (shift & (3 * 8)); matched += matched_bytes; diff --git a/snappy.cc b/snappy.cc index 57d7319..c830fb9 100644 --- a/snappy.cc +++ b/snappy.cc @@ -1107,7 +1107,8 @@ inline size_t AdvanceToNextTagX86Optimized(const uint8_t** ip_p, size_t* tag) { // TODO clang misses the fact that the (c & 3) already correctly // sets the zero flag. asm("and $3, %k[tag_type]\n\t" - : [tag_type] "+r"(tag_type), "=@ccz"(is_literal)); + : [tag_type] "+r"(tag_type), "=@ccz"(is_literal) + :: "cc"); #else tag_type &= 3; is_literal = (tag_type == 0); -- cgit v1.2.1