Merge pull request #7 from cryb-to/safe-rol-ror

Make rolN / rorN safe for all counts.
This commit is contained in:
Dag-Erling Smørgrav 2017-04-06 21:14:55 +02:00 committed by GitHub
commit ae9609ddf0

View file

@ -1,6 +1,6 @@
/*- /*-
* Copyright (c) 2012 The University of Oslo * Copyright (c) 2012 The University of Oslo
* Copyright (c) 2012-2016 Dag-Erling Smørgrav * Copyright (c) 2012-2017 Dag-Erling Smørgrav
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -40,11 +40,11 @@ CRYB_BEGIN
#define CRYB_ROL_ROR(N) \ #define CRYB_ROL_ROR(N) \
static inline uint##N##_t rol##N(uint##N##_t i, int n) \ static inline uint##N##_t rol##N(uint##N##_t i, int n) \
{ \ { \
return (i << n | i >> (N - n)); \ return (i << (n & (N - 1)) | i >> (-n & (N - 1))); \
} \ } \
static inline uint##N##_t ror##N(uint##N##_t i, int n) \ static inline uint##N##_t ror##N(uint##N##_t i, int n) \
{ \ { \
return (i << (N - n) | i >> n); \ return (i << (-n & (N - 1)) | i >> (n & (N - 1))); \
} }
CRYB_ROL_ROR(8); CRYB_ROL_ROR(8);