Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Compile out GroupVarint on non-Intel

Summary:
Compile out instead of erroring.

In an ideal world, we'd have a fallback that would work across platforms
(i.e. no SSE, no unaligned 32-bit writes etc.) and compile some version
of GroupVarint in all environments. I actually tried this; the SSE stuff
is all behind #if __SSSE3__ already, so I thought it could work (modulo
the unaligned-writes problem). I ran into problems with the
SSSE3-vs.-not distinction that @simpkins alluded to in D652764, and
decided I'd rather not open that can of worms at the moment.

Test Plan:
fbmake runtests. Manually force the #ifs to false and make
sure fbmake runtests still passes (although GroupVarintTest is empty).

Reviewed By: delong.j@fb.com

FB internal diff: D747150
  • Loading branch information...
commit 5d43d2ab506d7b02a54ef5a5e1d662a1911d1aa2 1 parent 244a899
@oyamauchi oyamauchi authored
View
3  folly/GroupVarint.cpp
@@ -16,6 +16,7 @@
#include "folly/GroupVarint.h"
+#if HAVE_GROUP_VARINT
namespace folly {
const uint32_t GroupVarint32::kMask[] = {
@@ -29,4 +30,4 @@ const uint64_t GroupVarint64::kMask[] = {
};
} // namespace folly
-
+#endif
View
6 folly/GroupVarint.h
@@ -21,9 +21,8 @@
#error GroupVarint.h requires GCC
#endif
-#if !defined(__x86_64__) && !defined(__i386__)
-#error GroupVarint.h requires x86_64 or i386
-#endif
+#if defined(__x86_64__) || defined(__i386__)
+#define HAVE_GROUP_VARINT 1
#include <cstdint>
#include <limits>
@@ -604,5 +603,6 @@ typedef GroupVarintDecoder<uint64_t> GroupVarint64Decoder;
} // namespace folly
+#endif /* defined(__x86_64__) || defined(__i386__) */
#endif /* FOLLY_GROUPVARINT_H_ */
View
28 folly/build/generate_varint_tables.py
@@ -51,13 +51,16 @@
OUTPUT_FILE = "GroupVarintTables.cpp"
def generate(f):
- f.write("#include <stdint.h>\n"
- "#include <x86intrin.h>\n"
- "\n"
- "namespace folly {\n"
- "namespace detail {\n"
- "\n"
- "extern const __m128i groupVarintSSEMasks[] = {\n")
+ f.write("""
+#if defined(__x86_64__) || defined(__i386__)
+#include <stdint.h>
+#include <x86intrin.h>
+
+namespace folly {
+namespace detail {
+
+extern const __m128i groupVarintSSEMasks[] = {
+""")
# Compute SSE masks
for i in range(0, 256):
@@ -88,10 +91,13 @@ def generate(f):
offset += d
f.write(" {0},\n".format(offset))
- f.write("};\n"
- "\n"
- "} // namespace detail\n"
- "} // namespace folly\n")
+ f.write("""
+};
+
+} // namespace detail
+} // namespace folly
+#endif /* defined(__x86_64__) || defined(__i386__) */
+""")
def main():
parser = OptionParser()
View
4 folly/test/GroupVarintTest.cpp
@@ -17,6 +17,9 @@
#include <stdarg.h>
#include "folly/GroupVarint.h"
+// On platforms where it's not supported, GroupVarint will be compiled out.
+#if HAVE_GROUP_VARINT
+
#include <gtest/gtest.h>
using namespace folly;
@@ -259,3 +262,4 @@ TEST(GroupVarint, GroupVarintDecoder) {
}
}
+#endif
Please sign in to comment.
Something went wrong with that request. Please try again.