
Date: Sun, 28 Feb 2021 20:27:12 +0100 From: Mattias Andrée <maandree@....se> To: musl@...ts.openwall.com Cc: Mattias Andrée <maandree@....se> Subject: [PATCH v3 2/2] Use modulo instead of mul+sub in __secs_to_tm On x86 modulo is free when doing division, so this removes a multiplication and at the cost of replacing a conditional move with a conditional jump, but it still appears to be faster. (Similar architectures: nds32le) ARM doesn't have modulo, instead an multiplyandsubtract operation is done after the division, so the diffence here is either none at all, or a move and a multiplyandadd being replaced with a multiplyandsubtract. (Similar architectures: or1k) RISCV on the other hand has a separate modulo instruction and will perform a separate modulo instead of an assignment, a multiplication, and an addition with this change. GCC does change how the modulo operation is realised depending on the optimisation level. I don't know how this affects the performance, however a simple test on x86 suggests that doing a modulo operations is actually faster than assign–multiply–add.  src/time/__secs_to_tm.c  16 +++++++++++ 1 file changed, 11 insertions(+), 5 deletions() diff git a/src/time/__secs_to_tm.c b/src/time/__secs_to_tm.c index 62219df5..59b1fc8d 100644  a/src/time/__secs_to_tm.c +++ b/src/time/__secs_to_tm.c @@ 40,15 +40,21 @@ int __secs_to_tm(long long t, struct tm *tm) } c_cycles = remdays / DAYS_PER_100Y;  if (c_cycles == 4) c_cycles;  remdays = c_cycles * DAYS_PER_100Y; + remdays %= DAYS_PER_100Y; + if (c_cycles == 4) { + remdays += DAYS_PER_100Y; + c_cycles; + } q_cycles = remdays / DAYS_PER_4Y;  remdays = q_cycles * DAYS_PER_4Y; + remdays %= DAYS_PER_4Y; remyears = remdays / 365;  if (remyears == 4) remyears;  remdays = remyears * 365; + remdays %= 365; + if (remyears == 4) { + remdays += 365; + remyears; + } leap = !remyears && (q_cycles  !c_cycles); yday = remdays + 31 + 28 + leap;  2.30.1
Powered by blists  more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.