Saki Takamachi
7c9872e255
Fixed pointer subtraction for scale ( #17986 )
...
Closes #17986
2025-03-14 09:00:00 +09:00
Saki Takamachi
18d96671a5
follow up for #17615
...
The deleted line has returned, so delete it again.
2025-01-29 19:25:03 +09:00
Saki Takamachi
4c90bb2da4
Merge branch 'PHP-8.3' into PHP-8.4
...
* PHP-8.3:
Fixed GH-17398: bcmul memory leak (#17615 )
2025-01-29 19:15:10 +09:00
Saki Takamachi
5a4832f97b
Fixed GH-17398: bcmul memory leak ( #17615 )
...
Changed BCG memory allocation to be forcibly released in
PHP_GSHUTDOWN_FUNCTION regardless of refcount.
Fixes #17398
Closes #17615
2025-01-29 19:12:18 +09:00
Saki Takamachi
ef036090d9
Fixed GH-17275: Fixed the calculation logic of dividend scale ( #17279 )
...
Fixes #17275
Closes #17279
2024-12-27 21:36:26 +09:00
Saki Takamachi
52ebdfbe00
Correctly round rounding mode with zero edge case ( #17065 )
...
Fixes #17064
Closes #17065
2024-12-17 00:17:23 +09:00
Saki Takamachi
063c3c8522
Correctly compare 0 and -0 ( #17051 )
...
Fixes #17049
Closes #17051
2024-12-07 01:52:30 +09:00
Saki Takamachi
d17ed3445d
Fixed GH-16978: Avoid unnecessary padding with leading zeros ( #16988 )
...
Fixed an issue where leading zeros were padded beyond the allocated memory.
fixes #16978
closes #16988
2024-11-29 21:28:38 +09:00
Saki Takamachi
2c8662d6f9
Fixed a bug in BcMath\Number::pow() and bcpow() when raising negative powers of 0. ( #16694 )
...
Closes #16694
Fixes #16236
2024-11-20 00:16:52 +09:00
Saki Takamachi
fd1dff988e
Fixed a bug where size_t underflows ( #16696 )
...
fixes #16262
closes #16696
2024-11-05 08:41:09 +09:00
Saki Takamachi
2fe7719a44
Added early return case when result is 0 ( #16697 )
...
fixes #16265
closes #16697
2024-11-05 08:38:38 +09:00
Jorg Adam Sowa
306dedcf5e
ext/bcmath: bcpow() performance improvement ( #15790 )
...
* Added function for squaring to improve performance of power calculation
* Aligned backslashes
* Removed unnecessary comments
* Extracted common part of multiplication and square functions
* Added comment to bc_fast_square
* Improved wording of bc_mul_finish_from_vector
* Reused new function name
* Replaced macro with function
2024-09-17 22:16:26 +02:00
Saki Takamachi
fad899e566
[RFC] Support object types in BCMath ( #13741 )
...
Added BcMath\Number class. It is an immutable object, has methods that are
equivalent to existing BCMath calculation functions, and can also be calculated
using operators.
The existing BCMath function returned a string for each calculation, but this
class returns an object.
RFC: https://wiki.php.net/rfc/support_object_type_in_bcmath ,
https://wiki.php.net/rfc/fix_up_bcmath_number_class
---------
Co-authored-by: Niels Dossche <7771979+nielsdos@users.noreply.github.com >
2024-09-04 11:12:51 +09:00
Saki Takamachi
a27878cff3
Fixed LONG_MAX in BCMath ext ( #15663 )
2024-08-31 01:07:33 +09:00
Saki Takamachi
e8fe7e4f52
ext/bcmath: Fixed bcdiv() div by one ( #15629 )
...
Fixed the incorrect scale that should be used when dividing by 1, that is,
comparing the divisor and 1 to confirm equality.
Additionally, have increased the number of test cases for bcdiv_by_pow_10.phpt.
2024-08-30 09:33:17 +09:00
Saki Takamachi
674ec02e54
Fixed the sign to be PLUS if the result is 0 ( #15599 )
2024-08-28 08:48:33 +09:00
Saki Takamachi
8c704ab401
ext/bcmath: Optimize bcdiv processing ( #14660 )
...
Co-authored-by: Niels Dossche <7771979+nielsdos@users.noreply.github.com >
Co-authored-by: Gina Peter Banyard <girgias@php.net >
2024-08-18 17:57:27 +09:00
Saki Takamachi
8a4a30469a
Zend: Add ZEND_BYTES_SWAP32/ZEND_BYTES_SWAP64 ( #14910 )
2024-07-22 17:57:16 +09:00
Saki Takamachi
3c9ab6eb71
ext/bcmath: Moved macros and added a test
2024-07-17 21:48:16 +09:00
Saki Takamachi
be4b10e95e
Added scale to bc_compare argument ( #14802 )
...
In the original specification, the scale of bc_num was directly changed
and compared.
This becomes a problem when objects are supported, so we will modify it
to compare without changing bc_num.
2024-07-12 00:08:47 +09:00
Saki Takamachi
37488d6e01
ext/bcmath: Minor fixes to bcmul() ( #14564 )
...
The original calculation method for prod_arr_size allowed for some error,
which could have increased the number of simple loops without byte tricks
at the end of the calculation when converting to bc_num.
The new method calculates the size accurately, so the number of loops does
not increase unnecessarily.
2024-06-14 02:20:32 +09:00
Saki Takamachi
25579a8616
ext/bcmath: Renamed macros and variables ( #14507 )
...
Made the macro BC_UINT_T a typedef and renamed it BC_VECTOR.
Additionally, several macros have been renamed to be consistent with BC_VECTOR.
2024-06-09 09:11:11 +09:00
Gina Peter Banyard
ec54edb9e1
ext/bcmath: Use an enum for comparison result ( #14374 )
...
Improve logic of callers of bc_compare
2024-05-30 17:26:03 +01:00
Gina Peter Banyard
c7bdf30daa
Merge branch 'PHP-8.3'
...
* PHP-8.3:
ext/bcmath: Fixed bug (bcpowmod() with mod = -1 returns 1 when it must be 0)
2024-05-30 15:52:45 +01:00
Gina Peter Banyard
ba7b305530
Merge branch 'PHP-8.2' into PHP-8.3
...
* PHP-8.2:
ext/bcmath: Fixed bug (bcpowmod() with mod = -1 returns 1 when it must be 0)
2024-05-30 15:51:05 +01:00
Gina Peter Banyard
709869c8bd
ext/bcmath: Fixed bug (bcpowmod() with mod = -1 returns 1 when it must be 0)
2024-05-30 15:47:25 +01:00
Niels Dossche
4e99bb5935
Faster BCD into integer parsing
2024-05-23 22:38:21 +02:00
Niels Dossche
04a34c3433
Faster writing of BCD representation
2024-05-23 22:38:21 +02:00
Niels Dossche
aef0eada16
Use size_t for length
2024-05-23 22:38:21 +02:00
Saki Takamachi
8734a9a4af
ext/bcmath: Prevent overflow of uint32_t/uint64_t ( #14297 )
...
If add more than a certain number of times, it will overflow, so need to adjust
the digits before adding.
2024-05-23 06:13:11 +09:00
Gina Peter Banyard
d775ba8804
ext/bcmath: Fix [-Wenum-int-mismatch] compiler warning
2024-05-21 12:17:25 +01:00
Saki Takamachi
1d38656b6d
ext/bcmath: Changed the bcmul calculation method ( #14213 )
...
Multiplication is performed after converting to uint32_t/uint64_t, making calculations faster.
---------
Co-authored-by: Niels Dossche <7771979+nielsdos@users.noreply.github.com >
Co-authored-by: Gina Peter Banyard <girgias@php.net >
2024-05-20 20:29:19 +09:00
Saki Takamachi
22c7250d50
ext/bcmath: Avoid unnecessary memset from _bc_do_add ( #14257 )
...
Apply the same changes as #14180 to _bc_do_add.
2024-05-18 07:00:47 +09:00
Saki Takamachi
959ea5fb83
Avoid unnecessary memset ( #14180 )
...
Avoid unnecessary memset from `_bc_do_sub`
2024-05-17 08:03:34 +09:00
Saki Takamachi
7203ca8286
ext/bcmath: Made the same changes to _bc_do_add as _bc_do_sub ( #14196 )
...
The code for _bc_do_add and _bc_do_sub were written slightly differently for
similar processing (and add was slower than sub), so I changed the code to one
similar to sub.
Also, _bc_do_add has been changed to use SIMD to perform faster calculations
when possible.
2024-05-12 15:07:37 +09:00
Saki Takamachi
e976c2d4f0
ext/bcmath: Fixed an issue where macros may become undefined ( #14179 )
2024-05-10 09:13:03 +09:00
Saki Takamachi
1a3d870c1e
ext/bcmath: Use SIMD for trailing zero counts during conversion ( #14166 )
...
Changed to count trailing zeros using SIMD when converting a string to
a bc_num structure if possible.
Removed unnecessary pointer resetting.
Added UNEXPECTED to some branches.
2024-05-09 19:23:59 +09:00
Niels Dossche
70b5a4d554
BCMath: Avoid using the heap for temporary objects by using arena allocations ( #14170 )
...
* BCMath: Avoid using the heap for temporary objects by using arena allocations
* Fix alignment
* Improve size computation
2024-05-08 19:36:14 +02:00
Niels Dossche
90a5b871ef
Simplify conversion in BCMath ( #14157 )
...
This simplifies the code, and also might indirectly improve performance
due to a decrease in instruction cache pressure. Although the latter is
probably negligible.
This works because 0x30 has no overlapping bits with [0, 9].
2024-05-07 18:24:00 +02:00
Saki Takamachi
02732007f7
Refactor BCMath _bc_do_sub ( #14132 )
...
_bc_do_sub now uses SIMD to perform calculations at high speed.
Moved the macros used for SIMD to `private.h`, and added some constants
and macros.
2024-05-07 11:39:31 +09:00
Gina Peter Banyard
70acd6e9ad
ext/bcmath: Remove unused ODD() macro function
2024-05-05 01:02:46 +01:00
Niels Dossche
bf3c4870b6
Avoid needless memsets by creating a variant of bc_new_num that doesn't memset ( #14133 )
...
Also avoid some memsets where we do call bc_new_num.
After:
```
1.2066178321838
1.5389559268951
1.6050860881805
```
Before:
```
1.3858470916748
1.6806011199951
1.9091980457306
```
2024-05-04 17:11:57 +02:00
Saki Takamachi
1ae58d4784
ext/bcmath: Removed unnecessary zero padding ( #14134 )
...
bc_num is initialized to 0 by `memset`, so there is no need to write it to 0.
2024-05-05 00:03:08 +09:00
Niels Dossche
a728e541e9
Remove some dead code from BCMath ( #14130 )
...
* Remove unused output.c code
* Remove unused ignore_last parameter from _bc_do_compare()
2024-05-04 16:00:54 +02:00
Niels Dossche
cad0e555ac
Faster validation logic in bc_str2num() ( #14115 )
...
Using SIMD to accelerate the validation.
Using the benchmark from #14076 .
After:
```
1.3504369258881
1.6206321716309
1.6845638751984
```
Before:
```
1.4750170707703
1.9039781093597
1.9632289409637
```
2024-05-03 17:34:38 +02:00
Niels Dossche
039344cf70
Avoid extra inits while flooring or ceiling
2024-05-02 20:03:59 +02:00
Niels Dossche
34b2116eb5
Avoid unnecessary destruction in bc_mul()
2024-05-02 20:03:59 +02:00
Niels Dossche
0cd952d851
Avoid unnecessary destruction in bc_sub()
2024-05-02 20:03:59 +02:00
Niels Dossche
959e11544c
Avoid unnecessary destruction in bc_add()
2024-05-02 20:03:59 +02:00
Niels Dossche
a604d1d342
Use SSE2 in bc_copy_and_shift_numbers() if possible
2024-05-02 20:03:59 +02:00