Skip to content
Snippets Groups Projects
  1. Dec 28, 2016
  2. Dec 13, 2016
  3. Oct 31, 2016
  4. Oct 11, 2016
  5. May 09, 2016
    • Damien George's avatar
      py/mpz: Fix mpn_div so that it doesn't modify memory of denominator. · 460b0863
      Damien George authored
      Previous to this patch bignum division and modulo would temporarily
      modify the RHS argument to the operation (eg x/y would modify y), but on
      return the RHS would be restored to its original value.  This is not
      allowed because arguments to binary operations are const, and in
      particular might live in ROM.  The modification was to normalise the arg
      (and then unnormalise before returning), and this patch makes it so the
      normalisation is done on the fly and the arg is now accessed as read-only.
      
      This change doesn't increase the order complexity of the operation, and
      actually reduces code size.
      460b0863
  6. May 08, 2016
  7. Feb 03, 2016
    • Damien George's avatar
      py/mpz: Add commented-out mpz_pow3_inpl function, to compute (x**y)%z. · ff1a96ce
      Damien George authored
      This function computes (x**y)%z in an efficient way.  For large arguments
      this operation is otherwise not computable by doing x**y and then %z.
      
      It's currently not used, but is added in case it's useful one day.
      ff1a96ce
    • Doug Currie's avatar
      py/mpz: Complete implementation of mpz_{and,or,xor} for negative args. · 2e2e15ce
      Doug Currie authored
      For these 3 bitwise operations there are now fast functions for
      positive-only arguments, and general functions for arbitrary sign
      arguments (the fast functions are the existing implementation).
      
      By default the fast functions are not used (to save space) and instead
      the general functions are used for all operations.
      
      Enable MICROPY_OPT_MPZ_BITWISE to use the fast functions for positive
      arguments.
      2e2e15ce
  8. Jan 08, 2016
  9. Nov 22, 2015
  10. Oct 01, 2015
  11. Apr 25, 2015
  12. Apr 22, 2015
  13. Apr 09, 2015
  14. Mar 12, 2015
  15. Mar 02, 2015
  16. Jan 27, 2015
  17. Jan 24, 2015
  18. Jan 20, 2015
  19. Jan 16, 2015
  20. Jan 09, 2015
  21. Jan 02, 2015
  22. Jan 01, 2015
  23. Dec 31, 2014
  24. Oct 30, 2014
    • stijn's avatar
      mpz: Fix 64bit msvc build · 0e557fac
      stijn authored
      msvc does not treat 1L a 64bit integer hence all occurences of shifting it left or right
      result in undefined behaviour since the maximum allowed shift count for 32bit ints is 31.
      Forcing the correct type explicitely, stored in MPZ_LONG_1, solves this.
      0e557fac
  25. Oct 03, 2014
  26. Sep 10, 2014
  27. Sep 06, 2014
    • Damien George's avatar
      py: Make mpz able to use 16 bits per digit; and 32 on 64-bit arch. · 9a21d2e0
      Damien George authored
      Previously, mpz was restricted to using at most 15 bits in each digit,
      where a digit was a uint16_t.
      
      With this patch, mpz can use all 16 bits in the uint16_t (improvement
      to mpn_div was required).  This gives small inprovements in speed and
      RAM usage.  It also yields savings in ROM code size because all of the
      digit masking operations become no-ops.
      
      Also, mpz can now use a uint32_t as the digit type, and hence use 32
      bits per digit.  This will give decent improvements in mpz speed on
      64-bit machines.
      
      Test for big integer division added.
      9a21d2e0
  28. Sep 05, 2014
  29. Aug 29, 2014
  30. Aug 07, 2014
  31. Jul 31, 2014
    • Damien George's avatar
      py: Improve handling of long-int overflow. · c9aa58e6
      Damien George authored
      This removes mpz_as_int, since that was a terrible function (it
      implemented saturating conversion).
      
      Use mpz_as_int_checked and mpz_as_uint_checked.  These now work
      correctly (they previously had wrong overflow checking, eg
      print(chr(10000000000000)) on 32-bit machine would incorrectly convert
      this large number to a small int).
      c9aa58e6
Loading