Jonathan Marler
9322eee80a
Encapsulate bigint representation, assert on cast data loss
2019-08-23 11:14:08 -04:00
LemonBoy
9ec4ccc68f
Do not invoke UB in BigInt shr operations
...
Shifting a value of type T by an amount that's greater or equal to the
size of the type itself is UB.
Spotted by @tgschultz
2019-04-26 14:24:35 -04:00
LemonBoy
8f5753ba9f
Fix normalization of right-shifted BigInt at CT
...
The pointer value for the `digits` field was being treated as if it were
a limb.
Fixes #2225
2019-04-11 03:49:15 -04:00
Marc Tiehuis
6f90d2c209
Fix bigint_append_buf
...
All current usages use base 10 and have a limb length of 1, hence why
we weren't hitting this error in practice.
2019-03-22 22:10:51 +13:00
Andrew Kelley
39605a7965
delete incorrect TODO comment
...
The code path is tested by behavior tests.
Thanks to various contributors, but mostly Marc Tiehuis,
bigint.cpp now has full coverage.
closes #405
2019-02-25 16:36:18 -05:00
vegecode
f6cd68386d
@bitreverse intrinsic, part of #767 ( #1865 )
...
* bitreverse - give bswap behavior
* bitreverse, comptime_ints, negative values still not working?
* bitreverse working for negative comptime ints
* Finished bitreverse test cases
* Undo exporting a bigint function. @bitreverse test name includes ampersand
* added docs entry for @bitreverse
2019-01-02 16:47:47 -05:00
Andrew Kelley
4241cd666d
fix more bigint code paths and add tests
2018-09-24 16:31:22 -04:00
Andrew Kelley
32c91ad892
fix comptime bitwise operations with negative values
...
closes #1387
closes #1529
2018-09-24 14:38:51 -04:00
Andrew Kelley
d8295c1889
add @popCount intrinsic
2018-07-07 00:25:32 -04:00
Isaac Hier
eeda1a1396
Fix logic
2018-06-21 08:17:08 -04:00
Isaac Hier
0ab4afbf42
Fix increment operation for bigint -1
2018-06-21 08:14:26 -04:00
Marc Tiehuis
efa39c5343
Fix bigint shift-right partial shift
2018-05-10 22:26:26 +12:00
Marc Tiehuis
d7b029995c
Fix bigint multi-limb shift and masks
2018-05-05 22:40:29 +12:00
Andrew Kelley
89a4c373d3
fix bigint twos complement implementation
...
closes #948
2018-04-23 12:06:18 -04:00
Jimmi Holst Christensen
fa2c3be341
More tests, and fixed none negative bigint xor
2018-01-17 14:31:47 +01:00
Jimmi Holst Christensen
db0fc32ab2
fixed xor with zero
2018-01-17 14:00:27 +01:00
Andrew Kelley
6a95b88d1b
fix bigint remainder division
...
See #405
2018-01-16 03:09:44 -05:00
Andrew Kelley
84d8584c5b
implement bigint div and rem
...
See #405
2018-01-16 02:22:19 -05:00
Andrew Kelley
137c8f5e8a
ability to set tag values of enums
...
also remove support for enums with 0 values
closes #305
2017-12-02 22:32:39 -05:00
Andrew Kelley
5989b88352
do not depend on __int128
...
closes #477
2017-09-14 02:48:16 -04:00
Andrew Kelley
14cda27b64
depend on embedded SoftFloat-3d instead of __float128
...
See #302
See #467
2017-09-14 01:46:47 -04:00
Andrew Kelley
57ea6e8c9f
fix up msvc stuff to make it work on linux and macos too
2017-09-13 02:40:02 -04:00
Jonathan Marler
7c81cd30de
Add support for MSVC
2017-09-11 09:26:26 -06:00
Andrew Kelley
e1d5da20a5
rewrite parseh to use AST instead of direct types
...
some tests still failing
2017-09-02 04:11:23 -04:00
Andrew Kelley
09bd4a9a86
compile-time f32, f64 operations are now correctly lossy
...
previously we used the bigfloat abstraction to do all
compile-time float math. but runtime code and comptime code
are supposed to get the same result. so now if you add a
f32 to a f32 at compile time it does it with f32 math
instead of the bigfloat. float literals still get the
bigfloat math.
closes #424
2017-08-20 01:04:51 -04:00
Andrew Kelley
1b5d61bee9
fix bitCast for big integers
...
and make bigfloat use __float128
2017-08-17 22:52:12 -04:00
Andrew Kelley
2173e1f457
fix big integer shifting by large number
2017-08-17 22:01:19 -04:00
Andrew Kelley
0d117bb0a9
fix wrong value for clz, ctz at compile time
...
closes #418
also make clz, ctz return smaller integer bit widths
and use smaller integer bit widths for enum tag types
2017-08-17 17:14:35 -04:00
Andrew Kelley
6a98bf3dba
compiler_rt implementations for __fixuns* functions
...
* add u128 and i128 integer types
* add f128 floating point type
* implement big integer multiplication (See #405 )
2017-08-16 19:07:35 -04:00
Andrew Kelley
35d3444e27
more intuitive left shift and right shift operators
...
Before:
* << is left shift, not allowed to shift 1 bits out
* <<% is left shift, allowed to shift 1 bits out
* >> is right shift, allowed to shift 1 bits out
After:
* << is left shift, allowed to shift 1 bits out
* >> is right shift, allowed to shift 1 bits out
* @shlExact is left shift, not allowed to shift 1 bits out
* @shrExact is right shift, not allowed to shift 1 bits out
Closes #413
2017-08-09 10:09:38 -04:00
Andrew Kelley
d1e68c3ca8
better bigint/bigfloat implementation
2017-07-08 17:59:10 -04:00