[Base] Drop inline on string_util/vec128 implementations for now because clang is whining.

This commit is contained in:
gibbed 2019-08-04 11:50:55 -05:00
parent 7d6d732999
commit 306f358c07
4 changed files with 37 additions and 32 deletions

View File

@ -21,37 +21,19 @@
namespace xe { namespace xe {
namespace string_util { namespace string_util {
inline std::string to_hex_string(uint32_t value) { std::string to_hex_string(uint32_t value) {
char buffer[21]; char buffer[21];
std::snprintf(buffer, sizeof(buffer), "%08" PRIX32, value); std::snprintf(buffer, sizeof(buffer), "%08" PRIX32, value);
return std::string(buffer); return std::string(buffer);
} }
inline std::string to_hex_string(uint64_t value) { std::string to_hex_string(uint64_t value) {
char buffer[21]; char buffer[21];
std::snprintf(buffer, sizeof(buffer), "%016" PRIX64, value); std::snprintf(buffer, sizeof(buffer), "%016" PRIX64, value);
return std::string(buffer); return std::string(buffer);
} }
inline std::string to_hex_string(float value) { std::string to_hex_string(const vec128_t& value) {
union {
uint32_t ui;
float flt;
} v;
v.flt = value;
return to_hex_string(v.ui);
}
inline std::string to_hex_string(double value) {
union {
uint64_t ui;
double dbl;
} v;
v.dbl = value;
return to_hex_string(v.ui);
}
inline std::string to_hex_string(const vec128_t& value) {
char buffer[128]; char buffer[128];
std::snprintf(buffer, sizeof(buffer), "[%.8X, %.8X, %.8X, %.8X]", std::snprintf(buffer, sizeof(buffer), "[%.8X, %.8X, %.8X, %.8X]",
value.u32[0], value.u32[1], value.u32[2], value.u32[3]); value.u32[0], value.u32[1], value.u32[2], value.u32[3]);
@ -61,7 +43,7 @@ inline std::string to_hex_string(const vec128_t& value) {
#if XE_ARCH_AMD64 #if XE_ARCH_AMD64
// TODO(DrChat): This should not exist. Force the caller to use vec128. // TODO(DrChat): This should not exist. Force the caller to use vec128.
inline std::string to_hex_string(const __m128& value) { std::string to_hex_string(const __m128& value) {
char buffer[128]; char buffer[128];
float f[4]; float f[4];
_mm_storeu_ps(f, value); _mm_storeu_ps(f, value);
@ -72,7 +54,7 @@ inline std::string to_hex_string(const __m128& value) {
return std::string(buffer); return std::string(buffer);
} }
inline std::string to_string(const __m128& value) { std::string to_string(const __m128& value) {
char buffer[128]; char buffer[128];
float f[4]; float f[4];
_mm_storeu_ps(f, value); _mm_storeu_ps(f, value);

View File

@ -22,17 +22,37 @@
namespace xe { namespace xe {
namespace string_util { namespace string_util {
extern inline std::string to_hex_string(uint32_t value); // TODO(gibbed): Figure out why clang doesn't line forward declarations of
extern inline std::string to_hex_string(uint64_t value); // inline functions.
extern inline std::string to_hex_string(float value);
extern inline std::string to_hex_string(double value); std::string to_hex_string(uint32_t value);
extern inline std::string to_hex_string(const vec128_t& value); std::string to_hex_string(uint64_t value);
inline std::string to_hex_string(float value) {
union {
uint32_t ui;
float flt;
} v;
v.flt = value;
return to_hex_string(v.ui);
}
inline std::string to_hex_string(double value) {
union {
uint64_t ui;
double dbl;
} v;
v.dbl = value;
return to_hex_string(v.ui);
}
std::string to_hex_string(const vec128_t& value);
#if XE_ARCH_AMD64 #if XE_ARCH_AMD64
// TODO(DrChat): This should not exist. Force the caller to use vec128. // TODO(DrChat): This should not exist. Force the caller to use vec128.
extern inline std::string to_hex_string(const __m128& value); std::string to_hex_string(const __m128& value);
extern inline std::string to_string(const __m128& value); std::string to_string(const __m128& value);
#endif #endif

View File

@ -16,7 +16,7 @@
namespace xe { namespace xe {
inline std::string to_string(const vec128_t& value) { std::string to_string(const vec128_t& value) {
char buffer[128]; char buffer[128];
std::snprintf(buffer, sizeof(buffer), "(%g, %g, %g, %g)", value.x, value.y, std::snprintf(buffer, sizeof(buffer), "(%g, %g, %g, %g)", value.x, value.y,
value.z, value.w); value.z, value.w);

View File

@ -264,7 +264,10 @@ static inline vec128_t vec128b(uint8_t x0, uint8_t x1, uint8_t x2, uint8_t x3,
return v; return v;
} }
extern inline std::string to_string(const vec128_t& value); // TODO(gibbed): Figure out why clang doesn't line forward declarations of
// inline functions.
std::string to_string(const vec128_t& value);
} // namespace xe } // namespace xe