Replace modulus with mask operation in over-aligned new
authorJonathan Wakely <jwakely@redhat.com>
Fri, 16 Sep 2016 18:09:14 +0000 (19:09 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 16 Sep 2016 18:09:14 +0000 (19:09 +0100)
2016-09-16  Jonathan Wakely  <jwakely@redhat.com>
    Marc Glisse  <marc.glisse@inria.fr>

* libsupc++/new_opa.cc [_GLIBCXX_HAVE_ALIGNED_ALLOC]
(operator new(size_t, align_val_t)): Replace modulus operator with
mask.

Co-Authored-By: Marc Glisse <marc.glisse@inria.fr>
From-SVN: r240192

libstdc++-v3/ChangeLog
libstdc++-v3/libsupc++/new_opa.cc

index cddff99466dfe96d99f76a1e0656964389f55a7a..21ee3fd70f08e95e2c728dbd6ec4d2f278fdf081 100644 (file)
@@ -1,3 +1,10 @@
+2016-09-16  Jonathan Wakely  <jwakely@redhat.com>
+           Marc Glisse  <marc.glisse@inria.fr>
+
+       * libsupc++/new_opa.cc [_GLIBCXX_HAVE_ALIGNED_ALLOC]
+       (operator new(size_t, align_val_t)): Replace modulus operator with
+       mask.
+
 2016-09-16  Jonathan Wakely  <jwakely@redhat.com>
 
        * libsupc++/new_opa.cc [_GLIBCXX_HAVE_POSIX_MEMALIGN] (aligned_alloc):
index 9c859c1b61b21ad91e2e3787ba1a6dc8e74b751e..91e53a8b3608f63ed7467a23b3f82ac113b4766f 100644 (file)
@@ -69,7 +69,7 @@ operator new (std::size_t sz, std::align_val_t al)
 
 #if _GLIBCXX_HAVE_ALIGNED_ALLOC
   /* C11: the value of size shall be an integral multiple of alignment.  */
-  if (std::size_t rem = sz % align)
+  if (std::size_t rem = sz & (align - 1))
     sz += align - rem;
 #endif