Add IntLog2 and use it
Replace uses of floating point log2 when we want an integer result from an integer operand. This avoids concerns about accuracy of floating point library functions.
This commit is contained in:
parent
5c4f421121
commit
fa6e3c2737
4 changed files with 179 additions and 8 deletions
|
|
@ -5469,14 +5469,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
|
|||
if (! IsPow2(value))
|
||||
error(loc, "must be a power of 2", "buffer_reference_align", "");
|
||||
else
|
||||
#ifdef __ANDROID__
|
||||
// Android NDK r15c tageting ABI 15 doesn't have full support for C++11
|
||||
// (no std::exp2/log2). ::exp2 is available from C99 but ::log2 isn't
|
||||
// available up until ABI 18 so we use the mathematical equivalent form
|
||||
publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)(std::log(value) / std::log(2.0));
|
||||
#else
|
||||
publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)std::log2(value);
|
||||
#endif
|
||||
publicType.qualifier.layoutBufferReferenceAlign = IntLog2(value);
|
||||
if (nonLiteral)
|
||||
error(loc, "needs a literal integer", "buffer_reference_align", "");
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue