summaryrefslogtreecommitdiff
path: root/bootstrap/lib/compiler/ebin
Commit message (Collapse)AuthorAgeFilesLines
* Update primary bootstrapBjörn Gustavsson2023-03-1759-0/+0
|
* Update primary bootstrapBjörn Gustavsson2023-02-1028-0/+0
|
* Update primary bootstrapRaimo Niskanen2023-02-081-0/+0
|
* Update primary bootstrapBjörn Gustavsson2023-02-066-0/+0
|
* Update primary bootstrapBjörn Gustavsson2023-01-3118-0/+0
|
* Merge branch 'maint'Björn Gustavsson2023-01-1239-1/+1
|\ | | | | | | | | * maint: Update primary bootstrap
| * Update primary bootstrapBjörn Gustavsson2023-01-129-0/+0
| |
* | Update primary bootstrapBjörn Gustavsson2022-10-2833-0/+0
| |
* | Update primary bootstrapLukas Larsson2022-10-143-0/+0
| |
* | Update primary bootstrapBjörn Gustavsson2022-09-161-0/+0
| |
* | Merge branch 'maint'Björn Gustavsson2022-09-0231-0/+0
|\ \ | |/ | | | | | | * maint: Update primary bootstrap
| * Update primary bootstrapBjörn Gustavsson2022-09-0211-3/+3
| |
* | Optimize binary matching for fixed-width segmentsBjörn Gustavsson2022-09-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Consider this function: foo(<<A:6, B:6, C:6, D:6>>) -> {A, B, C, D}. The compiler in Erlang/OTP 25 and earlier would generate the following code for doing the binary matching: {test,bs_start_match3,{f,1},1,[{x,0}],{x,1}}. {bs_get_position,{x,1},{x,0},2}. {test,bs_get_integer2, {f,3}, 2, [{x,1}, {integer,6}, 1, {field_flags,[{anno,[4,{file,"t.erl"}]},unsigned,big]}], {x,2}}. {test,bs_get_integer2, {f,3}, 3, [{x,1}, {integer,6}, 1, {field_flags,[{anno,[4,{file,"t.erl"}]},unsigned,big]}], {x,3}}. {test,bs_get_integer2, {f,3}, 4, [{x,1}, {integer,6}, 1, {field_flags,[{anno,[4,{file,"t.erl"}]},unsigned,big]}], {x,4}}. {test,bs_get_integer2, {f,3}, 5, [{x,1}, {integer,6}, 1, {field_flags,[{anno,[4,{file,"t.erl"}]},unsigned,big]}], {x,5}}. {test,bs_test_tail2,{f,3},[{x,1},0]}. That is, there would be one instruction for each segment being matched. Having separate match instructions for each segment makes it difficult for the JIT to do any serious optimization. Currently, when matching a segment with a size that is not a multiple of 8, the JIT will generate code that calls a helper function. Common sizes such as 8, 16, and 32 are specially optimized with inline code in the x86 JIT and in the non-JIT BEAM VM. This commit introduces a new `bs_match` instruction for matching of integer and binary segments of fixed size. Here is the generated code for the example: {test,bs_start_match3,{f,1},1,[{x,0}],{x,1}}. {bs_get_position,{x,1},{x,0},2}. {bs_match,{f,3}, {x,1}, {commands,[{ensure_exactly,24}, {integer,2,{literal,[]},6,1,{x,2}}, {integer,3,{literal,[]},6,1,{x,3}}, {integer,4,{literal,[]},6,1,{x,4}}, {integer,5,{literal,[]},6,1,{x,5}}]}}. Having only one instruction for the matching allows the JIT to generate faster code. The generated code will do the following: * Test that the size of the binary being matched is exactly 24 bits. * Read 24 bits from the binary into a temporary CPU register. * For each segment, extract the integer from the temporary register by shifting and masking. Because of the before-mentioned optimization for certain common segment sizes, the main part of the Base64 encoding in the `base64` module is currently implemented in the following non-intuitive way: encode_binary(<<B1:8, B2:8, B3:8, Ls/bits>>, A) -> BB = (B1 bsl 16) bor (B2 bsl 8) bor B3, encode_binary(Ls, <<A/bits,(b64e(BB bsr 18)):8, (b64e((BB bsr 12) band 63)):8, (b64e((BB bsr 6) band 63)):8, (b64e(BB band 63)):8>>) With the new optimization, it is now possible to express the Base64 encoding in a more natural way, which is also faster than before: encode_binary(<<B1:6, B2:6, B3:6, B4:6, Ls/bits>>, A) -> encode_binary(Ls, <<A/bits, (b64e(B1)):8, (b64e(B2)):8, (b64e(B3)):8, (b64e(B4)):8>>)
* | Merge branch 'maint'Björn Gustavsson2022-06-275-0/+0
|\ \ | |/ | | | | | | | | | | * maint: Update preloaded modules Update primary bootstrap [features] General tweaks and fixes
| * Update primary bootstrapCons T Åhs2022-06-231-0/+0
| |
* | Update primary bootstrapBjörn Gustavsson2022-06-1756-0/+0
| |
* | Update primary bootstrapBjörn Gustavsson2022-06-136-3/+3
| |
* | Update primary bootstrapJohn Högberg2022-06-0347-0/+0
|/
* Update primary bootstrapCons T Åhs2022-05-032-0/+0
|
* Update primary bootstrapBjörn Gustavsson2022-04-2356-0/+0
|
* Update primary bootstrapBjörn Gustavsson2022-04-0515-1/+2
|
* Update primary bootstrapCons T Åhs2022-03-222-0/+0
|
* Update primary bootstrapCons T Åhs2022-03-211-0/+0
|
* Update primary bootstrapBjörn Gustavsson2022-03-1531-2/+2
|
* Update primary bootstrapBjörn Gustavsson2022-02-135-0/+0
|
* Update primary bootstrapBjörn Gustavsson2022-02-1131-0/+0
|
* Update primary bootstrapBjörn Gustavsson2022-02-0256-5/+4
|
* Update primary bootstrapJohn Högberg2022-01-1133-0/+0
|
* Merge branch 'maint'Lukas Larsson2021-11-161-0/+0
|\
| * Update primary bootstrapLukas Larsson2021-10-251-0/+0
| |
* | Update primary bootstrapBjörn Gustavsson2021-11-1057-1/+1
| |
* | Update primary bootstrapJohn Högberg2021-10-2227-0/+0
| |
* | Merge branch 'maint'Björn Gustavsson2021-09-1034-4/+3
|\ \ | |/ | | | | | | * maint: Update primary bootstrap
| * Update primary bootstrapBjörn Gustavsson2021-09-1011-1/+1
| |
* | Update primary bootstrapLukas Larsson2021-08-0910-0/+0
|/
* Update primary bootstrapBjörn Gustavsson2021-05-0417-1/+1
|
* Update primary bootstrapBjörn Gustavsson2021-02-229-0/+1
|
* Update primary bootstrapJohn Högberg2021-02-1945-0/+0
|
* Update primary bootstrapJohn Högberg2021-02-053-0/+0
|
* Merge branch 'maint'Björn Gustavsson2021-02-0311-2/+1
|\ | | | | | | | | | | | | * maint: Update primary bootstrap Update deprecations Deprecate all functions in erl_tidy
| * Update primary bootstrapBjörn Gustavsson2021-02-033-1/+1
| |
* | Update primary bootstrapHans Bolinder2021-01-269-0/+0
| |
* | Update primary bootstrapJohn Högberg2021-01-2218-0/+0
| |
* | Update primary bootstrapLukas Larsson2021-01-2221-0/+0
| |
* | Merge branch 'maint'Björn Gustavsson2020-12-1145-2/+4
|\ \ | |/
| * Update primary bootstrapBjörn Gustavsson2020-12-114-1/+1
| |
| * Update primary bootstrapLukas Larsson2020-12-027-0/+0
| |
* | Merge branch 'rickard/alias/master/OTP-16718'Rickard Green2020-11-121-0/+0
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | * rickard/alias/master/OTP-16718: User defined tag in monitor messages Use alias in gen behaviours Introduce aliases for processes Introduce internal references containing pid of creator Allow huge remote references
| * \ Merge branch 'rickard/alias/OTP-16718' into rickard/alias/master/OTP-16718Rickard Green2020-11-121-0/+0
| |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * rickard/alias/OTP-16718: User defined tag in monitor messages Use alias in gen behaviours Introduce aliases for processes Introduce internal references containing pid of creator Allow huge remote references
| | * | Introduce aliases for processesRickard Green2020-11-121-0/+0
| | | |