On 9 May 2016 at 18:22, Leif Lindholm <[email protected]> wrote: > On Tue, Apr 19, 2016 at 04:55:31PM +0200, Ard Biesheuvel wrote: >> We manage to use both an AND operation with 'gCacheAlignment - 1' and a >> modulo operation with 'gCacheAlignment' in the same compound if statement. >> Since gCacheAlignment is a global of which the compiler cannot guarantee >> that it is a power of two, > > Are you saying this is an "undefined behaviour" disaster waiting to > happen? >
No, not at all. It is just unnecessary to invoke the division routines. >> simply use the AND version, and use it against >> the bitwise OR of the two values to be tested. >> >> Contributed-under: TianoCore Contribution Agreement 1.0 >> Signed-off-by: Ard Biesheuvel <[email protected]> >> --- >> ArmPkg/Library/ArmDmaLib/ArmDmaLib.c | 3 +-- >> 1 file changed, 1 insertion(+), 2 deletions(-) >> >> diff --git a/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c >> b/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c >> index 1e6b288b10b9..834afdba10ef 100644 >> --- a/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c >> +++ b/ArmPkg/Library/ArmDmaLib/ArmDmaLib.c >> @@ -92,8 +92,7 @@ DmaMap ( >> >> *Mapping = Map; >> >> - if ((((UINTN)HostAddress & (gCacheAlignment - 1)) != 0) || >> - ((*NumberOfBytes % gCacheAlignment) != 0)) { >> + if ((((UINTN)HostAddress | *NumberOfBytes) & (gCacheAlignment - 1)) != 0) >> { > > While the above is correct code, and less verbose, I am a bear of very > little brain, and OR:ing an address with a counter makes it hurt. > > Could the above instead be (more verbose but hopefully not relevantly > less efficient with a halfway decent compiler): > if ((((UINTN)HostAddress & (gCacheAlignment - 1)) != 0) || > (*NumberOfBytes & (gCacheAlignment - 1) != 0)) > > (It would have the benefit of making the diffstat immediately obvious.) > Yeah, that is also fine. I just noticed the mask and the modulo operation involving the same variable. _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

