Compare commits
485
Commits
2018.3
...
windows_docker
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8618c0b01f | ||
|
|
21d2520b31 | ||
|
|
560c44ae9b | ||
|
|
cff407eb54 | ||
|
|
10ba052ea1 | ||
|
|
7f9f098c70 | ||
|
|
7556d171cb | ||
|
|
6662a8c41c | ||
|
|
3a6beb76fc | ||
|
|
f6bddec0ec | ||
|
|
f7923ebd75 | ||
|
|
9669dc1e71 | ||
|
|
ecaf25ead6 | ||
|
|
9d26104d2f | ||
|
|
8cc4aaf6ea | ||
|
|
719591a247 | ||
|
|
00137a2b7f | ||
|
|
a812a49b0c | ||
|
|
dedbc2eb27 | ||
|
|
c8dcb193ff | ||
|
|
d3b9e46cd9 | ||
|
|
cbf8e3412f | ||
|
|
0dcb83403c | ||
|
|
f799bd4946 | ||
|
|
2422e09b7f | ||
|
|
e68da85bbd | ||
|
|
b39a8d33dd | ||
|
|
2a996ed9a0 | ||
|
|
28b67bc91d | ||
|
|
270c8698dc | ||
|
|
2ab4e2bab9 | ||
|
|
a0856a6de5 | ||
|
|
bc911923d0 | ||
|
|
be8023063a | ||
|
|
8c2b55a324 | ||
|
|
ceb900589e | ||
|
|
ceb274478d | ||
|
|
99cc3d9636 | ||
|
|
67b803bd29 | ||
|
|
11110b6a6f | ||
|
|
ebed9b0e56 | ||
|
|
cf0ad287d8 | ||
|
|
3932bb1fb8 | ||
|
|
d33a5357dd | ||
|
|
732c389520 | ||
|
|
097833beee | ||
|
|
e8480d4a43 | ||
|
|
f93b063763 | ||
|
|
f25e8aa32d | ||
|
|
eeb5b13797 | ||
|
|
1558b7215d | ||
|
|
e6e0ecbcf5 | ||
|
|
fa6dd6c9e1 | ||
|
|
00bf7ebda6 | ||
|
|
136f3b5eff | ||
|
|
042ccb55da | ||
|
|
f64019b87f | ||
|
|
7602571be8 | ||
|
|
52ae646f26 | ||
|
|
9274758d5d | ||
|
|
75e6edaf44 | ||
|
|
6041f997a9 | ||
|
|
4d13131321 | ||
|
|
1162a52c1d | ||
|
|
0070431265 | ||
|
|
5bbbb73362 | ||
|
|
2d9ad2b746 | ||
|
|
1d7f466e4f | ||
|
|
7bee830c6f | ||
|
|
cca66470be | ||
|
|
a177c6daf5 | ||
|
|
77d798d6f3 | ||
|
|
afc9e8212c | ||
|
|
d8b19b70fb | ||
|
|
08058158d0 | ||
|
|
db28aa80d1 | ||
|
|
7f241e8bdb | ||
|
|
ff598e3866 | ||
|
|
a1fccbf6eb | ||
|
|
b0d4db6d61 | ||
|
|
1e870e9a25 | ||
|
|
63007170df | ||
|
|
538d76d858 | ||
|
|
7b14bfaf70 | ||
|
|
7a4b2347fb | ||
|
|
216ec83f84 | ||
|
|
44a8104890 | ||
|
|
7edafe91f2 | ||
|
|
c0a0e4335a | ||
|
|
ce1d5c579d | ||
|
|
21f2625d9e | ||
|
|
078feca004 | ||
|
|
52058d9947 | ||
|
|
2e2390d00e | ||
|
|
c808fa8732 | ||
|
|
fdbb79b677 | ||
|
|
9ab724ae47 | ||
|
|
b5e0387f1e | ||
|
|
9b86f0e824 | ||
|
|
6641c17b93 | ||
|
|
1c300e0240 | ||
|
|
6c5ac66a59 | ||
|
|
61b97e4931 | ||
|
|
cc17dbe2ea | ||
|
|
bb40bcfe45 | ||
|
|
634e09ddfc | ||
|
|
0e4a620768 | ||
|
|
c38117ab8b | ||
|
|
4cf852770e | ||
|
|
ceb30020b5 | ||
|
|
7257de9f11 | ||
|
|
d2a1ac464d | ||
|
|
9281c237a7 | ||
|
|
9d556599ab | ||
|
|
73f3be72e1 | ||
|
|
dca9e2627c | ||
|
|
c34b17418d | ||
|
|
8264b8cae3 | ||
|
|
38581f9571 | ||
|
|
d177a7d733 | ||
|
|
49050e1089 | ||
|
|
48c4bddc1b | ||
|
|
ed1d4b7d33 | ||
|
|
c5d94fbd08 | ||
|
|
0d8e992bdf | ||
|
|
2cfce03f6e | ||
|
|
7f861964ea | ||
|
|
122b384d60 | ||
|
|
eb142cfb4e | ||
|
|
f7262c805f | ||
|
|
f572e5ee05 | ||
|
|
827b8431ca | ||
|
|
712d80cc8a | ||
|
|
580ed9f3d6 | ||
|
|
e81315c131 | ||
|
|
cd731a3798 | ||
|
|
ee7dcc2d83 | ||
|
|
42cb917490 | ||
|
|
b72d3531c0 | ||
|
|
1bb16deb3b | ||
|
|
7a5d1f7d2b | ||
|
|
04bda70b3c | ||
|
|
5a18d0973e | ||
|
|
0498d68f5b | ||
|
|
517dde06e4 | ||
|
|
ce22e5917a | ||
|
|
fc0e652ae0 | ||
|
|
583046c291 | ||
|
|
e621a835fd | ||
|
|
b631f3ddf7 | ||
|
|
e5ff90084e | ||
|
|
74a61e0402 | ||
|
|
bd09cc4feb | ||
|
|
941e5dbcaa | ||
|
|
6b692ff0e9 | ||
|
|
dc24bae943 | ||
|
|
a856788e75 | ||
|
|
7f53c3d4b2 | ||
|
|
0587d54172 | ||
|
|
942eb219eb | ||
|
|
ef68893957 | ||
|
|
51ebee7cfd | ||
|
|
f75593392b | ||
|
|
733ef0ea04 | ||
|
|
5a97c88a69 | ||
|
|
70969b1bc3 | ||
|
|
e89dc0ab0a | ||
|
|
084bc3dc43 | ||
|
|
809f201583 | ||
|
|
b50ab76af5 | ||
|
|
8a43a95b5c | ||
|
|
1c7bc2fc90 | ||
|
|
bda7375e63 | ||
|
|
cce41dd964 | ||
|
|
3e9df0b074 | ||
|
|
21f25a0b00 | ||
|
|
6a3561cb87 | ||
|
|
cc289e8b1e | ||
|
|
5f91f48844 | ||
|
|
2f21848de8 | ||
|
|
b35d4657d5 | ||
|
|
4b58bb679c | ||
|
|
c6adbab340 | ||
|
|
b8d0f88336 | ||
|
|
68c9782e33 | ||
|
|
6a2c59f3e5 | ||
|
|
6b54d5f07b | ||
|
|
cd144a979f | ||
|
|
293ddffb46 | ||
|
|
af3e7861b6 | ||
|
|
8e3ca182b9 | ||
|
|
70febae55b | ||
|
|
086c19f25e | ||
|
|
1e8791da35 | ||
|
|
bb78c04b34 | ||
|
|
3aebe91e36 | ||
|
|
5cc39824e0 | ||
|
|
841a87469b | ||
|
|
1cc61a93a2 | ||
|
|
529b534939 | ||
|
|
e5b51ecebb | ||
|
|
b90444b943 | ||
|
|
d2b41f7598 | ||
|
|
31f4e47903 | ||
|
|
b607933e0f | ||
|
|
5084a11dec | ||
|
|
762b27d306 | ||
|
|
f2108084da | ||
|
|
e410548665 | ||
|
|
150240a9af | ||
|
|
b6a39a2d66 | ||
|
|
581b1894f2 | ||
|
|
f087d7e5ea | ||
|
|
82fcd4f673 | ||
|
|
6376b4bca7 | ||
|
|
758a8a5318 | ||
|
|
e339b32286 | ||
|
|
8c6ded28a8 | ||
|
|
e2157b8352 | ||
|
|
4d6cb464c4 | ||
|
|
0fb7fe719a | ||
|
|
f74789e210 | ||
|
|
78eade475e | ||
|
|
5690bdc02c | ||
|
|
a526612fdb | ||
|
|
bcef315789 | ||
|
|
cf45e99505 | ||
|
|
018a65e0b6 | ||
|
|
b5e8c7f452 | ||
|
|
a9887da9f1 | ||
|
|
67e342119a | ||
|
|
4716881485 | ||
|
|
877fcb47e4 | ||
|
|
0e01a9b200 | ||
|
|
3106257692 | ||
|
|
76cb4e0dc9 | ||
|
|
abda525b84 | ||
|
|
bdb4c78399 | ||
|
|
7f4e03b241 | ||
|
|
af70d684a5 | ||
|
|
ee1fd9c38b | ||
|
|
9e9d488834 | ||
|
|
42cd0f05d7 | ||
|
|
b46b9d157d | ||
|
|
550ce9c7df | ||
|
|
76aed77f59 | ||
|
|
25325244d7 | ||
|
|
a00cdc18ca | ||
|
|
4984e23c07 | ||
|
|
1f6179c1b8 | ||
|
|
02835ff59a | ||
|
|
ff9467ccae | ||
|
|
f9c2ff7c9f | ||
|
|
4def43086e | ||
|
|
4dd032dcff | ||
|
|
92192659d9 | ||
|
|
7b514173c3 | ||
|
|
edf319cde9 | ||
|
|
f7d3275e89 | ||
|
|
045a3a4e50 | ||
|
|
5d672fafc4 | ||
|
|
b02064a160 | ||
|
|
6ff7d22641 | ||
|
|
db569ee551 | ||
|
|
b6031fdb3a | ||
|
|
65f9bdb976 | ||
|
|
1c11cd5e8c | ||
|
|
91e2c2e7e5 | ||
|
|
478f97d66b | ||
|
|
6ca5208ab5 | ||
|
|
ad34bcd9e1 | ||
|
|
e3b5e01435 | ||
|
|
b0cdd23fb3 | ||
|
|
0ce7d93cef | ||
|
|
82a3c06a9d | ||
|
|
92c8c282f5 | ||
|
|
463d3ebd4c | ||
|
|
01ac38dd8a | ||
|
|
f7eb1fc160 | ||
|
|
03573abc3b | ||
|
|
7d746ba947 | ||
|
|
5dcecdb3bd | ||
|
|
6f0cc614e2 | ||
|
|
7d30709306 | ||
|
|
3eb9211520 | ||
|
|
85bd0d39c3 | ||
|
|
f7b8563e57 | ||
|
|
f4859ee094 | ||
|
|
711cd6ce1c | ||
|
|
e3c9f12012 | ||
|
|
fc64f1a958 | ||
|
|
21ac50c204 | ||
|
|
2d2f8f4f31 | ||
|
|
2bc90c07bf | ||
|
|
08dc7ec98b | ||
|
|
3014dd35a8 | ||
|
|
7d94302712 | ||
|
|
934131b877 | ||
|
|
545969161e | ||
|
|
322c353898 | ||
|
|
53c4ac77cf | ||
|
|
54f989f6f5 | ||
|
|
d6a07e9477 | ||
|
|
29d5ae2cd0 | ||
|
|
5b787e19d4 | ||
|
|
b4ea675c9a | ||
|
|
e3940fdf19 | ||
|
|
6d2c89b127 | ||
|
|
d091fc857b | ||
|
|
4152deb15e | ||
|
|
22b1b0cc40 | ||
|
|
19190f4e5e | ||
|
|
f169805fbc | ||
|
|
86190675a2 | ||
|
|
95e121159f | ||
|
|
797bf2fee5 | ||
|
|
dd4a880ec3 | ||
|
|
1dabbab599 | ||
|
|
a45dcb8a01 | ||
|
|
111e8a5588 | ||
|
|
92f4a9e056 | ||
|
|
d3d5b961ff | ||
|
|
6d5a3c047d | ||
|
|
21d947ed6c | ||
|
|
6d5937d18f | ||
|
|
c7cc70c22e | ||
|
|
b47a0b5b72 | ||
|
|
09c6155583 | ||
|
|
7a0edaec06 | ||
|
|
242ba3c2c7 | ||
|
|
dc76661a53 | ||
|
|
a044e17fdc | ||
|
|
bdce9a1841 | ||
|
|
a51799c279 | ||
|
|
34691a0555 | ||
|
|
db69b45c58 | ||
|
|
f7ee5d0d39 | ||
|
|
267d6b2eb7 | ||
|
|
308954635e | ||
|
|
8e0a60eec7 | ||
|
|
7ada0b56f9 | ||
|
|
3e16235c12 | ||
|
|
e4f0269d94 | ||
|
|
c7afb0910d | ||
|
|
fb95762293 | ||
|
|
6490191972 | ||
|
|
5d64910083 | ||
|
|
8188fbd7be | ||
|
|
0169f04a7a | ||
|
|
660482b294 | ||
|
|
dfa6230ad6 | ||
|
|
ddc37aee80 | ||
|
|
6d0fa311c1 | ||
|
|
9a8276d76e | ||
|
|
e47929dcbe | ||
|
|
6f88910466 | ||
|
|
0b9b7c8ed5 | ||
|
|
165c82f26f | ||
|
|
e96a28b38a | ||
|
|
bac8d6afe8 | ||
|
|
d2cd236318 | ||
|
|
f13aec70dd | ||
|
|
bd4a554b27 | ||
|
|
466f094800 | ||
|
|
bff7b0d70a | ||
|
|
05649977a6 | ||
|
|
1497941c3d | ||
|
|
73cf651664 | ||
|
|
d12570ccf9 | ||
|
|
0663286a90 | ||
|
|
e2dd26ee5a | ||
|
|
27627b6d05 | ||
|
|
aef4970aa2 | ||
|
|
f7b77b6f9c | ||
|
|
3d8afdb7be | ||
|
|
6a6bd0fca8 | ||
|
|
518f15d490 | ||
|
|
4638ea2baf | ||
|
|
426e16c75b | ||
|
|
f8bff8dfda | ||
|
|
ab6cf631f4 | ||
|
|
1e7a694c80 | ||
|
|
5a10867d56 | ||
|
|
c50ff53b32 | ||
|
|
684699ace9 | ||
|
|
adc1900d18 | ||
|
|
bcbbb54b70 | ||
|
|
842bce8b32 | ||
|
|
d78e80b548 | ||
|
|
cfdd332a18 | ||
|
|
73007931b2 | ||
|
|
54f3b551ef | ||
|
|
31d2fb67e2 | ||
|
|
db586939e9 | ||
|
|
4ae052cb9c | ||
|
|
aab29b241e | ||
|
|
3d5b90364a | ||
|
|
10658b2801 | ||
|
|
9edfdacd72 | ||
|
|
f060b6042d | ||
|
|
15e66758df | ||
|
|
83f41e04b1 | ||
|
|
a870858bb6 | ||
|
|
34cdde604e | ||
|
|
7c039a2fb8 | ||
|
|
951256c07b | ||
|
|
593e075399 | ||
|
|
56dcddfb83 | ||
|
|
513988e51b | ||
|
|
dfc6d88432 | ||
|
|
9dc2bcc2f9 | ||
|
|
07454f2045 | ||
|
|
9f453ef376 | ||
|
|
5517cd4ccf | ||
|
|
5b7938eda6 | ||
|
|
eb0bf063b8 | ||
|
|
ec0f3bb2ac | ||
|
|
db85279b8c | ||
|
|
cdbca77495 | ||
|
|
df0b7bc7bb | ||
|
|
9998855527 | ||
|
|
92a19869e7 | ||
|
|
ac7b642d8a | ||
|
|
d2a99cbab2 | ||
|
|
1a39f9ddc0 | ||
|
|
0e9fb73463 | ||
|
|
5ff7d510d7 | ||
|
|
bb1d7f5b39 | ||
|
|
06d64b76f7 | ||
|
|
55753a1bf5 | ||
|
|
ea68229303 | ||
|
|
bac68a93df | ||
|
|
4afd1b3fef | ||
|
|
5c6e9afe06 | ||
|
|
8e6d5e6010 | ||
|
|
ff92ac7929 | ||
|
|
03c06e91e8 | ||
|
|
db23d50614 | ||
|
|
21d58357f2 | ||
|
|
5f80d79540 | ||
|
|
1ba843fbec | ||
|
|
0f5548f5f9 | ||
|
|
d2b8b5567f | ||
|
|
a1ad9abc0d | ||
|
|
470a8a3920 | ||
|
|
c0984b2ca4 | ||
|
|
e3e8fa1547 | ||
|
|
e8a4830229 | ||
|
|
9bce2de57b | ||
|
|
bd1e79179b | ||
|
|
862f7b99a7 | ||
|
|
f7e67c8a63 | ||
|
|
1ba1b9f967 | ||
|
|
01d5f23e8f | ||
|
|
caad4dfc14 | ||
|
|
50c0f6ef59 | ||
|
|
b64fda77b5 | ||
|
|
5f6747d6a1 | ||
|
|
366bbd6548 | ||
|
|
4e68de8917 | ||
|
|
023c6288d6 | ||
|
|
c86f4d04dc | ||
|
|
36a9d552da | ||
|
|
14a8d024b9 | ||
|
|
2e5cfd9333 | ||
|
|
9813c9873f | ||
|
|
abe0248c1e | ||
|
|
7150817fc4 | ||
|
|
195f5893c9 | ||
|
|
5ace9e080f | ||
|
|
337cf2d371 | ||
|
|
52d0236f9a | ||
|
|
0898accd58 | ||
|
|
d71e28b7b7 | ||
|
|
ae7b827b0c | ||
|
|
f9b43526f4 | ||
|
|
1e77613a1b | ||
|
|
70dba27f9e | ||
|
|
40bd5ceb5a | ||
|
|
445e7f339e | ||
|
|
5b42298a25 | ||
|
|
ea0c249ad9 | ||
|
|
713a8eec50 | ||
|
|
afec261872 | ||
|
|
b055b4c7dc |
@@ -0,0 +1,78 @@
|
||||
Language: Cpp
|
||||
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: AlwaysBreak
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignConsecutiveDeclarations: false
|
||||
AlignConsecutiveMacros: false
|
||||
AlignEscapedNewlines: Right
|
||||
AlignOperands: false
|
||||
AlignTrailingComments: true
|
||||
AllowAllArgumentsOnNextLine: true
|
||||
AllowAllConstructorInitializersOnNextLine: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: Empty
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLambdasOnASingleLine: All
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: true
|
||||
AlwaysBreakTemplateDeclarations: Yes
|
||||
BinPackArguments: false
|
||||
BinPackParameters: false
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Allman
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializers: BeforeComma
|
||||
BreakInheritanceList: BeforeComma
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 100
|
||||
CompactNamespaces: true
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: true
|
||||
DerivePointerAlignment: false
|
||||
FixNamespaceComments: true
|
||||
IncludeBlocks: Preserve
|
||||
IndentCaseLabels: false
|
||||
IndentPPDirectives: AfterHash
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
MaxEmptyLinesToKeep: 2
|
||||
NamespaceIndentation: None
|
||||
PenaltyBreakAssignment: 50
|
||||
PenaltyBreakBeforeFirstCallParameter: 0
|
||||
PenaltyBreakComment: 100
|
||||
PenaltyBreakFirstLessLess: 200
|
||||
PenaltyBreakString: 100
|
||||
PenaltyBreakTemplateDeclaration: 0
|
||||
PenaltyExcessCharacter: 10
|
||||
PenaltyReturnTypeOnItsOwnLine: 1000
|
||||
PointerAlignment: Left
|
||||
ReflowComments: true
|
||||
SortIncludes: true
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCpp11BracedList: true
|
||||
SpaceBeforeCtorInitializerColon: false
|
||||
SpaceBeforeInheritanceColon: false
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeRangeBasedForLoopColon: false
|
||||
SpaceInEmptyBlock: false
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 4
|
||||
SpacesInAngles: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInContainerLiterals: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: c++17
|
||||
TabWidth: 4
|
||||
UseTab: Always
|
||||
@@ -0,0 +1,12 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: sourcetrail
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
+8
-4
@@ -1,9 +1,11 @@
|
||||
/build/
|
||||
build-*
|
||||
/distr/
|
||||
/deps/
|
||||
|
||||
/bin/app/data/projects/ignored/
|
||||
/bin/app/data/java/lib/
|
||||
/bin/app/data/projects/ignored/
|
||||
/bin/app/data/python/
|
||||
/bin/app/user/log/
|
||||
/bin/app/user/ApplicationSettings.xml
|
||||
/bin/app/user/window_settings.ini
|
||||
@@ -13,6 +15,8 @@
|
||||
/bin/test/data/TestSettings.xml
|
||||
/bin/test/data/CommandlineTestSuite/settings.xml
|
||||
/bin/test/data/ConfigManagerTestSuite/temp.xml
|
||||
/bin/test/data/UtilityMavenTestSuite/effective-pom.xml
|
||||
/bin/test/data/SourceGroupTestSuite/java_maven/input/sourcetrail_dependencies
|
||||
|
||||
/java_indexer/target/
|
||||
|
||||
@@ -38,7 +42,6 @@
|
||||
|
||||
/ide_plugins/vs/vs2015/SourcetrailPlugin/TestResults
|
||||
|
||||
*.coatidb
|
||||
*.srctrldb
|
||||
*.srctrlbm
|
||||
*.suo
|
||||
@@ -54,8 +57,8 @@
|
||||
.ycm_extra_conf.py
|
||||
.ycm_extra_conf.pyc
|
||||
|
||||
sourcetrail.srctrlprj
|
||||
compile_commands.json
|
||||
Sourcetrail.srctrlprj
|
||||
Sourcetrail_dev.srctrlprj
|
||||
|
||||
Makefile
|
||||
CMakeLists.txt.user*
|
||||
@@ -65,5 +68,6 @@ CMakeLists.txt.user*
|
||||
/deployment/windows/wixSetup/build
|
||||
/deployment/windows/wixSetup/CustomActions/UninstallRemoveLogFolder/bin
|
||||
/deployment/windows/wixSetup/CustomActions/UninstallRemoveLogFolder/obj
|
||||
/deployment/windows/wixSetup/CustomActions/.vs
|
||||
/deployment/windows/wixSetup/Setup/build/Setup/Release
|
||||
/deployment/windows/wixSetup/Setup/build/Setup/x64
|
||||
|
||||
-134
@@ -1,134 +0,0 @@
|
||||
variables:
|
||||
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
|
||||
IMAGE_64: coatisoftware/centos6_64_qt_llvm:qt5101-llvm600
|
||||
IMAGE_32: coatisoftware/centos6_32_qt_llvm:qt5101-llvm600
|
||||
|
||||
## Templates ##
|
||||
|
||||
.build_template: &build_def
|
||||
stage: build
|
||||
before_script:
|
||||
# CCache Config/jobs
|
||||
- mkdir -p ccache
|
||||
- export CCACHE_BASEDIR=${PWD}
|
||||
- export CCACHE_DIR=${PWD}/ccache
|
||||
script:
|
||||
- ./script/buildonly.sh all
|
||||
- ./script/buildonly.sh package
|
||||
- ./script/build.sh release test
|
||||
artifacts:
|
||||
name: "$CI_JOB_NAME"
|
||||
paths:
|
||||
- Sourcetrail*.tar.gz
|
||||
expire_in: 3 days
|
||||
|
||||
.deploy_template: &deploy_def
|
||||
image: alpine
|
||||
stage: deploy
|
||||
before_script:
|
||||
- apk add --no-cache lftp git
|
||||
script:
|
||||
- VERS=$(git describe --long | sed 's/-/./' | sed 's/-.*//')
|
||||
- TARGET_DIR=releases-$CI_ENVIRONMENT_NAME/$TYPE/$VERS
|
||||
- echo $TARGET_DIR/$CI_ENVIRONMENT_NAME/$TYPE/
|
||||
- lftp -u $FTP_USER,$FTP_PW -p $FTP_PORT $FTP_ADDR -e "mkdir $TARGET_DIR; mput -O $TARGET_DIR Sourcetrail*; bye"
|
||||
only:
|
||||
- master
|
||||
- tags
|
||||
- /^release.*$/
|
||||
|
||||
|
||||
## Build Stage ##
|
||||
|
||||
build:Linux64:
|
||||
image: $IMAGE_64
|
||||
only:
|
||||
- /^release.*$/
|
||||
- master
|
||||
- tags
|
||||
cache:
|
||||
key: cache_linux_64
|
||||
paths:
|
||||
- ccache/
|
||||
- java_indexer/.m2/repository
|
||||
<<: *build_def
|
||||
|
||||
build:Linux32:
|
||||
image: $IMAGE_32
|
||||
only:
|
||||
- /^release.*$/
|
||||
- master
|
||||
- tags
|
||||
cache:
|
||||
key: cache_linux_32
|
||||
paths:
|
||||
- ccache/
|
||||
- java_indexer/.m2/repository
|
||||
when: manual
|
||||
<<: *build_def
|
||||
|
||||
LicenseGenerator:
|
||||
image: $IMAGE_64
|
||||
stage: build
|
||||
when: manual
|
||||
script:
|
||||
- ./script/setup.sh
|
||||
- ./script/buildonly.sh release keygen
|
||||
- mv build/Release/license_generator/Sourcetrail_license_generator .
|
||||
artifacts:
|
||||
name: "$CI_JOB_NAME"
|
||||
paths:
|
||||
- Sourcetrail_license_generator
|
||||
expire_in: 3 days
|
||||
|
||||
## Deploy ##
|
||||
|
||||
deploy:Linux_staging_beta:
|
||||
when: manual
|
||||
environment:
|
||||
name: staging
|
||||
variables:
|
||||
TYPE: beta
|
||||
<<: *deploy_def
|
||||
|
||||
deploy:Linux_staging_full:
|
||||
when: manual
|
||||
environment:
|
||||
name: staging
|
||||
variables:
|
||||
TYPE: full
|
||||
<<: *deploy_def
|
||||
|
||||
deploy:Linux_production_beta:
|
||||
when: manual
|
||||
environment:
|
||||
name: production
|
||||
variables:
|
||||
TYPE: beta
|
||||
<<: *deploy_def
|
||||
|
||||
deploy:Linux_production_full:
|
||||
when: manual
|
||||
environment:
|
||||
name: production
|
||||
variables:
|
||||
TYPE: full
|
||||
<<: *deploy_def
|
||||
|
||||
deploy:Linux_tag_staging:
|
||||
environment:
|
||||
name: staging
|
||||
variables:
|
||||
TYPE: beta
|
||||
<<: *deploy_def
|
||||
only:
|
||||
- tags
|
||||
|
||||
## could be interesting for daily/weekly/monthly builds
|
||||
# https://docs.gitlab.com/ce/user/project/pipelines/schedules.html
|
||||
#
|
||||
#job:on-schedule:
|
||||
#only:
|
||||
# - schedules
|
||||
#
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
language: bash
|
||||
|
||||
os:
|
||||
- linux
|
||||
- windows
|
||||
|
||||
services: docker
|
||||
|
||||
install:
|
||||
- echo "$TRAVIS_OS_NAME"
|
||||
- if [ "$TRAVIS_OS_NAME" = "windows" ]; then docker build -t coatisoftware/local deployment/dockerfiles/windows/travis_ci; fi
|
||||
|
||||
script:
|
||||
- COMMIT_HASH=$(git rev-parse HEAD)
|
||||
- if [ "$TRAVIS_OS_NAME" = "windows" ]; then docker run --name builder coatisoftware/local ${COMMIT_HASH}; fi
|
||||
|
||||
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
Authors
|
||||
=======
|
||||
|
||||
Andreas Stallinger
|
||||
Eberhard Gräther (@egraether) <egraether@coati.io>
|
||||
Malte Langkabel (@mlangkabel) <mlangkabel@coati.io>
|
||||
Manuel Dobusch
|
||||
Viktoria Pfausler
|
||||
|
||||
Note: (@user) means a github user name.
|
||||
+412
-175
@@ -1,43 +1,286 @@
|
||||
### Changelog
|
||||
|
||||
#### 2018.3.0
|
||||
released 2018-07-24
|
||||
#### 2019.4.102
|
||||
released 2019-12-20
|
||||
|
||||
* C/C++: Update selectable C and C++ language standards and cross-compilation flags ([#835](https://github.com/CoatiSoftware/Sourcetrail/issues/835))
|
||||
* Java: Allow to specify custom Maven settings.xml file in project settings ([#794](https://github.com/CoatiSoftware/Sourcetrail/issues/794))
|
||||
* Python: Accept python.exe located in the root directory of the environment ([#771](https://github.com/CoatiSoftware/Sourcetrail/issues/771))
|
||||
* Java: Extend language support to Java 12 ([#752](https://github.com/CoatiSoftware/Sourcetrail/issues/752))
|
||||
* Graph: Show active symbol definition in code when clicking on active node ([#836](https://github.com/CoatiSoftware/Sourcetrail/issues/836))
|
||||
* C++: Fix recording template parameter as local symbol instead of qualifier ([#824](https://github.com/CoatiSoftware/Sourcetrail/issues/826))
|
||||
* Python: Always perform deep index as default and added '--shallow' command line option ([#823](https://github.com/CoatiSoftware/Sourcetrail/issues/823))
|
||||
* Code: Drag and drop selected source code from code view into other applications ([#707](https://github.com/CoatiSoftware/Sourcetrail/issues/707))
|
||||
* Python: Allow using "unsafe" Python environment if explicitly specified by user ([#697](https://github.com/CoatiSoftware/Sourcetrail/issues/697), [#747](https://github.com/CoatiSoftware/Sourcetrail/issues/747))
|
||||
* C/C++: Updated to LLVM/Clang 9.0.0 ([#799](https://github.com/CoatiSoftware/Sourcetrail/issues/799))
|
||||
* Fix crash on application exit ([#789](https://github.com/CoatiSoftware/Sourcetrail/issues/789))
|
||||
* Code: Fixed view cleared in single file mode when ui refresh is triggered ([#772](https://github.com/CoatiSoftware/Sourcetrail/issues/772))
|
||||
|
||||
#### 2019.4.61
|
||||
released 2019-11-18
|
||||
|
||||
* Added GitHub and Patreon buttons to start window
|
||||
* Added GNU General Public License
|
||||
* Removed End User License Agreement and accept dialog from UI and Windows installer
|
||||
* Removed Sonargraph based project setup
|
||||
* Code: Add all source locations indexed for a file when displaying errors
|
||||
* C/C++: Use gnu C and C++ standards as default in source groups on Linux platforms
|
||||
* Python: add fast 'shallow indexing' mode (issue [#725](https://github.com/CoatiSoftware/Sourcetrail/issues/725))
|
||||
* Fixed nested layout broken after relayout for maximum access node width
|
||||
* Removed license key check
|
||||
* Python: Improved performance of python post processing (by about factor 2)
|
||||
* Improved performance of clearing data from re-indexed files to be instant
|
||||
* Fixed making canonical filepaths when working directory contains symlink on Windows (issue [#733](https://github.com/CoatiSoftware/Sourcetrail/issues/733))
|
||||
* C/C++: Update indexed headers list when editing the compilation database text box (issue [#724](https://github.com/CoatiSoftware/Sourcetrail/issues/724))
|
||||
* Skip pre-indexing steps of disabled source groups (issue [#737](https://github.com/CoatiSoftware/Sourcetrail/issues/737))
|
||||
* Fixed refresh cleared files of disabled source groups
|
||||
* C++: Merged nodes for all possible expansions of a template parameter pack
|
||||
* C++: Replaced template member specialization edge by template specialization edge
|
||||
* C++: Record template default args as type usage
|
||||
* C++: Record template parameter as local symbol
|
||||
* Java: Use caching to speed up gradle and maven based projects
|
||||
* Windows: Fixed styles missing in portable packages
|
||||
* Add menu entry to close the current project (issue [#722](https://github.com/CoatiSoftware/Sourcetrail/issues/722))
|
||||
|
||||
#### 2019.3.46
|
||||
released 2019-08-27
|
||||
|
||||
* Fixed errors were sometimes not clickable
|
||||
* Windows: sign installer and executables with Authenticode certificate (issue [#704](https://github.com/CoatiSoftware/Sourcetrail/issues/704))
|
||||
* Show proper error messages and progress when indexing with CLI (issue [#718](https://github.com/CoatiSoftware/Sourcetrail/issues/718))
|
||||
* C/C++: only use precompiled headers for compilation database commands that specify the "-include-pch" flag (issue [#719](https://github.com/CoatiSoftware/Sourcetrail/issues/719))
|
||||
* Python: Updated to SourcetrailPythonIndexer v1.db24.p2
|
||||
* Graph: Fixed bezier edges stayed highlighted after getting unhovered
|
||||
* Windows: Use modern Windows style for default ui elements on Windows 10
|
||||
* Change mouse cursor to pointer on graph and code view contents (issue [#715](https://github.com/CoatiSoftware/Sourcetrail/issues/311))
|
||||
* Java: Remove JVM maximum memory setting because it causes issues (issue [#694](https://github.com/CoatiSoftware/Sourcetrail/issues/311))
|
||||
* Show overview instead of empty error screen after all indexing errors are gone
|
||||
* C/C++: Allow indexing multiple indexer commands with different options for one source file in Compilation Database source group (issue [#717](https://github.com/CoatiSoftware/Sourcetrail/issues/311))
|
||||
* Graph: Added custom trail dialog to show trail graph with specific origin and/or target, using node/edge filters (issue [#249](https://github.com/CoatiSoftware/Sourcetrail/issues/249))
|
||||
* C/C++: Fixed removing duplicate compiler header directory not working (issue [#710](https://github.com/CoatiSoftware/Sourcetrail/issues/710))
|
||||
* Java: Fixed maven source groups broken when default console output contains colors (issue [#705](https://github.com/CoatiSoftware/Sourcetrail/issues/705))
|
||||
* Code: Added option to preferences to show relative file directory in code view title (issue [#556](https://github.com/CoatiSoftware/Sourcetrail/issues/556))
|
||||
* C++: Fixed lambdas created additional type nodes
|
||||
* C/C++: Initialize all clang targets to reduce errors for cross-target compilation
|
||||
* C/C++: Added Precompiled Header Support to Empty and Compilation Database Source Groups (issue [#311](https://github.com/CoatiSoftware/Sourcetrail/issues/311))
|
||||
* Search: Turn search element editable when pressing DELETE with cursor in front
|
||||
* Graph: increased the tolerated movement distance during click to still count as click action
|
||||
|
||||
#### 2019.2.39
|
||||
released 2019-05-28
|
||||
|
||||
* Python: Added example for Python environment to Source Group help text (issue [#696](https://github.com/CoatiSoftware/Sourcetrail/issues/696))
|
||||
* Python: Improved post processing speed and show progress dialog
|
||||
* Python: Added validity check for Python environment when entered in Source Group
|
||||
* Code: Improved performance of location hovering in snippet mode
|
||||
* Graph: Fixed undo after single edge activation within aggregation caused missing edges
|
||||
* Don't set project state outdated if only Source Group name changed (issue [#700](https://github.com/CoatiSoftware/Sourcetrail/issues/700))
|
||||
* C/C++: Don't store path to compiler headers in preferences, instead always add it before indexing
|
||||
* Python: write output of indexer processes to log file
|
||||
* Fixed crashes on application close (issue [#698](https://github.com/CoatiSoftware/Sourcetrail/issues/698))
|
||||
|
||||
#### 2019.2.25
|
||||
released 2019-05-22
|
||||
|
||||
* Enable console and file logging by default
|
||||
* Python: Sort indexer commands by file size
|
||||
* Linux: Add path to OpenSSL config in Sourcetrail.sh script (issue [#659](https://github.com/CoatiSoftware/Sourcetrail/issues/659))
|
||||
* Search: Refocus already focused search box on 'find symbol' shortcut to select content
|
||||
* Renamed 'main' function in tutorial to 'start_tour', due to multiple main fix
|
||||
* Python: Fixed macOS app bundle not using correct Python default environment
|
||||
* Python: Pass verbose indexer logging flag and add output to log
|
||||
* Fixed EULA not displayed in Windows and macOS builds
|
||||
* Python: Added start screen project icon
|
||||
* Python: Added sample project "tictactoe_py"
|
||||
* Code: Fixed symbol definition shown instead of most recent reference when using back action
|
||||
* Python: Added post processing to add ambiguous edges for unsolved symbols with matching name
|
||||
* Fixed old test license format not loaded (issue [#691](https://github.com/CoatiSoftware/Sourcetrail/issues/691))
|
||||
* C/C++: Added intermediate fix to handle multiple definitions of main() in C/C++ (issue [#233](https://github.com/CoatiSoftware/Sourcetrail/issues/233))
|
||||
* Graph: Added "Show Definition in IDE" action to context menu (issue [#687](https://github.com/CoatiSoftware/Sourcetrail/issues/687))
|
||||
* Increased contrasts in color scheme 'bright'
|
||||
* Automatically delete log files older than a month (issue [#676](https://github.com/CoatiSoftware/Sourcetrail/issues/676))
|
||||
* Code: renamed 'relations' to 'references' in overview stats
|
||||
* Fixed bug that caused the UI to be blocked after aborting indexing on "partial clearing not possible" warning
|
||||
* Start automatic update checks on second day of use
|
||||
* Graph: Show multi-level inheritance edge in graph legend (issue [#688](https://github.com/CoatiSoftware/Sourcetrail/issues/688))
|
||||
* C/C++: Updated to LLVM/Clang 8.0.1
|
||||
* Graph: Use multicolumn layout for nodes with many children if none of the children has edges
|
||||
* Python: Added Python 2 & 3 support based on [SourcetrailPythonIndexer](https://github.com/CoatiSoftware/SourcetrailPythonIndexer) (issue [#51](https://github.com/CoatiSoftware/Sourcetrail/issues/51))
|
||||
* Python: Added source group type "Empty Python" to project setup
|
||||
* Search: Edit last search element on backspace instead of deleting (issue [#681](https://github.com/CoatiSoftware/Sourcetrail/issues/681))
|
||||
* EULA: added support for lifelong licenses
|
||||
* Improved text search performance (issue [#680](https://github.com/CoatiSoftware/Sourcetrail/issues/680))
|
||||
* Windows: Fixed bug that caused texts within tooltips sometimes to be cut off
|
||||
* Fixed crash when closing license window at first start
|
||||
* Automatically replace invalid characters in project name during project setup with "_" (issue [#671](https://github.com/CoatiSoftware/Sourcetrail/issues/671))
|
||||
* Windows: Added syntax highlighting rules to portable package (issue [#672](https://github.com/CoatiSoftware/Sourcetrail/issues/672))
|
||||
|
||||
#### 2019.1.11
|
||||
released 2019-02-05
|
||||
|
||||
* Mention Compilation Database can be generated by QtCreator since version 4.8
|
||||
* Code: Fixed qualifier locations were used in reference navigation
|
||||
* Fixed error count in status bar not restored after discarding interrupted index
|
||||
* Graph: Fixed layout for inheritance chains
|
||||
* Added syntax highlighting rules for Python
|
||||
* Rerun cxx global header path detection if skipped due to error in previous release (issue [#664](https://github.com/CoatiSoftware/Sourcetrail/issues/664))
|
||||
* Fixed status error may not show up if custom command fails on Windows
|
||||
* Graph: Fixed right click activates edge on Windows but should not
|
||||
* C/C++: Always add compiler header path to global include paths and warn user about possible problems
|
||||
* Added option to execute custom indexer commands in parallel
|
||||
* Graph: Align layout in middle column at middle gap to avoid edges going through nodes
|
||||
* Code: Fixed line numbers disappearing on hover on Linux
|
||||
* Fixed initialization of header search paths on first start of Sourcetrail
|
||||
* Project Setup: Highlight project setup from Compilation Database as recommended for C/C++ projects
|
||||
* Project Setup: Double-click in project setup list boxes adds new line
|
||||
* Graph: Only bundle as "importing files" when "import" edge is present
|
||||
* Graph: Prevent flickering of edges when going back after multiple edge activations
|
||||
* Fixed relative paths not working in Code::Blocks project files (issue [#663](https://github.com/CoatiSoftware/Sourcetrail/issues/663))
|
||||
* Graph: Remove virtual nodes in depth-graph edges when moving nodes (issue [#639](https://github.com/CoatiSoftware/Sourcetrail/issues/639))
|
||||
* Added exception handling for HTTP request exceptions in update checker (issue [#659](https://github.com/CoatiSoftware/Sourcetrail/issues/659))
|
||||
* Clear screen-search matches when the active symbol in the view changes (issue [#660](https://github.com/CoatiSoftware/Sourcetrail/issues/660))
|
||||
* Wrap lines in status and error table (issue [#658](https://github.com/CoatiSoftware/Sourcetrail/issues/658))
|
||||
* Graph: Elide name of active node if it has more than 100 characters (issue [#652](https://github.com/CoatiSoftware/Sourcetrail/issues/652))
|
||||
* Added link to changelog to help menu (issue [#653](https://github.com/CoatiSoftware/Sourcetrail/issues/653))
|
||||
|
||||
#### 2018.4.45
|
||||
released 2018-12-18
|
||||
|
||||
* Code: Fixed active code view mode button can be unchecked and lose it's visual highlight
|
||||
* C/C++: record Clang invocation errors as errors when nothing else is recorded
|
||||
* Show Database Version in About and Custom Command Source Group description
|
||||
* Graph: Show overview bundles for non-indexed or symbol types if no others available
|
||||
* Code: Extract syntax highlighting rules to .rules files, to allow adding highlighting rules for new languages
|
||||
* C/C++: Still log the first 20.000 characters of the Clang invocation if verbose indexer logging is disabled
|
||||
* Added Source Group Custom Command to use with SourcetrailDB binaries
|
||||
* Fixed indexed source files not updated when clicking "show files" after other changes in project setup
|
||||
* Linux: Fixed issue in sourcetrail.sh script (issue [#638](https://github.com/CoatiSoftware/Sourcetrail/issues/638))
|
||||
* Inspect errors during indexing (issue [#235](https://github.com/CoatiSoftware/Sourcetrail/issues/235))
|
||||
* C/C++: Fixed header path selection in Source Group setup also preselects non exsiting paths (issue [#640](https://github.com/CoatiSoftware/Sourcetrail/issues/640))
|
||||
* Graph: Fixed graph node centering shows right end when node has greater width than view
|
||||
* Code: Fixed multiple multiline comments within one line not correctly highlighted
|
||||
* Code: Changed snippet style, removing per file frame and minimize/snippet buttons
|
||||
* C/C++: Fixed shrinking shared memory below initial size (issue [#636](https://github.com/CoatiSoftware/Sourcetrail/issues/636))
|
||||
* Fixed indexers still waiting until less storages are queued, although indexing was already interrupted (issue [#634](https://github.com/CoatiSoftware/Sourcetrail/issues/634))
|
||||
* Fixed interrupting indexing while dialog hidden
|
||||
* Graph: Fixed nodes and edges stay highlighted after hovering in code
|
||||
* C/C++: Reduced shared memory consumption during indexing when indexers are faster than db insertion
|
||||
|
||||
#### 2018.4.8
|
||||
released 2018-11-13
|
||||
|
||||
* Fixed search activates wrong symbol if multiple potential matches share the same "long" symbol name
|
||||
* C++: Fixed infinite iteration when solving parent name of C++ template arguments with multiple parent contexts
|
||||
* C++: Only log Clang tool invocation info when enabling "verbose indexer logging"
|
||||
* Running shrink on shared memory that is used to transfer data between processes during indexing from time to time
|
||||
* Added tabs UI to top of main window (issue [#215](https://github.com/CoatiSoftware/Sourcetrail/issues/215))
|
||||
* Linux: Fixed no write permission to ~/.config/sourcetrail after installation (issue [#625](https://github.com/CoatiSoftware/Sourcetrail/issues/625), [#626](https://github.com/CoatiSoftware/Sourcetrail/issues/626))
|
||||
* C++: Added type usage edges from parent context for types that occur as template arguments
|
||||
* C++: Skip recording of implicit local symbols
|
||||
* Java: Show explicit error message if no Java path provided in preferences
|
||||
* C/C++: Updated to LLVM/Clang 7.0.0
|
||||
* Added news box to start screen, showing news returned with daily update check
|
||||
* Reduced memory usage during project loading by iterating over database entries instead of retrieving in containers
|
||||
* Code: Added copy action to context menu for code view
|
||||
* Code: Removed accidental leading spaces in overview project description
|
||||
* Fixed history menu to show global activation history chronologically
|
||||
* Fixed handling of multiple active symbols broken when going back in history
|
||||
* Removed std headers from tutorial
|
||||
* Show hidden indexing dialog when clicking refresh while indexing is in progress
|
||||
* Code: Fixed unhovering an active error in code view removed the "active-highlight"
|
||||
* Fixed shared memory garbage collector mutex unlocking policy when stuck
|
||||
* Code: Fixed crash on code view scope expansion
|
||||
* Rewrote indexer data recording API to rely on IDs instead of strings for faster indexer performance
|
||||
* Removed unnecessary SQLite indexes for smaller database size
|
||||
* JAVA: display multi-line maven error messages (issue [#622](https://github.com/CoatiSoftware/Sourcetrail/issues/622))
|
||||
* Improved indexer storing performance by splitting insertion into multiples of pre-compiled SQLite batch insert statements
|
||||
* Reduced copies during indexer data recording
|
||||
* Improved cache lookups in indexer data recording
|
||||
* Windows: fixed line breaking issues with carriage returns
|
||||
* C/C++: Reduced waiting time when interrupting indexer processes
|
||||
* C/C++: Improved name handling and caching performance
|
||||
* Fixed edge cases in determining files to update/clear when re-indexing
|
||||
* C/C++: record and display indexer configuration issues (issue [#618](https://github.com/CoatiSoftware/Sourcetrail/issues/618))
|
||||
* Windows: Log success of Visual Studio path detector instead of printing to console
|
||||
* Generate and pass index file commands to indexers one by one to reduce memory consumption
|
||||
* C/C++: Query files from compilation database one by one to reduce memory consumption
|
||||
* Java: changed type_argument edges to originate in the generic type or method
|
||||
* Optimized storage in-memory caches to reduce memory use during indexing
|
||||
|
||||
#### 2018.3.55
|
||||
released 2018-08-31
|
||||
|
||||
* C/C++: Fixed crash on logging Clang invocation info with flags that throw errors (issue [#617](https://github.com/CoatiSoftware/Sourcetrail/issues/617))
|
||||
* Plugin: Move window to the front when sending symbol via plugin (issue [#605](https://github.com/CoatiSoftware/Sourcetrail/issues/605))
|
||||
* Java: Fixed crash on Windows if JVM tries to allocate too much memory
|
||||
* Java: Fixed loading dialogs shown in main window instead of project setup dialog for setup with gradle
|
||||
* Graph: Display bundle node count as pill instead of circle
|
||||
* Fixed crash that had a chance to occur when showing source files of cdb/cbp/sonargraph project during setup
|
||||
* Fixed source extensions not converted to lowercase (issue [#614](https://github.com/CoatiSoftware/Sourcetrail/issues/614))
|
||||
* C/C++: fixed line of errors wrong when appearing after #line directives (issue [#610](https://github.com/CoatiSoftware/Sourcetrail/issues/610))
|
||||
* Graph: Clear graph contents on overview (issue [#609](https://github.com/CoatiSoftware/Sourcetrail/issues/609))
|
||||
* Windows: Fixed policy for finding Windows user data folder (issue [#612](https://github.com/CoatiSoftware/Sourcetrail/issues/612))
|
||||
* C/C++: Fixed recording of multiple cxx anonymous namespaces within the same file
|
||||
* C/C++: Fixed files within indexed directories always refreshed in empty C/C++ source groups
|
||||
* Code: Don't show list of overriden methods when clicking overriding method
|
||||
* Code: Fixed local reference navigation not shown for edges when file content was not cached
|
||||
* Fixed crash related to update check when app was opened with a project
|
||||
* Tooltip: Fixed repeated signature name qualification and line breaks
|
||||
* Tooltip: Fixed app crash when signature location was wrongly recorded
|
||||
* Java: always record 'java.lang' as package
|
||||
* Java: Record all parent packages of an import declaration as packages
|
||||
* Code: Fixed code annotations missing in snippet mode for files with /r/n line endings
|
||||
* Java: Added support for annotations
|
||||
* C/C++: log Clang invocation with implicit and derived arguments
|
||||
* Indexer: Reduced copies in handling intermediate storage representation
|
||||
* Indexer: Don't shuffle file order for indexing
|
||||
* Indexer: Improved storing performance by optimizing insertion statements and indices
|
||||
|
||||
#### 2018.3.13
|
||||
released 2018-08-06
|
||||
|
||||
* Code: Fixed text search locations sometimes disappearing when expanding scope of code snippets
|
||||
* Graph: Added Expand/Collapse Node actions to graph context menu
|
||||
* Indexer: Improved storing performance
|
||||
* Warn user after indexing if project index is used in multiple processes and cannot be updated
|
||||
* Search: Fixed text search sometimes showed wrong results for queries with non-letter characters
|
||||
* Graph: Improved graph node color contrasts
|
||||
* C/C++: Improved file path caching for faster indexing times
|
||||
* C/C++: Fixed click on macro reference activated first of multiple symbols instead of showing tooltip list
|
||||
* C/C++: Fixed file logging broken when indexing a compilation database project in single process
|
||||
* Only prefill system specific paths in application settings once
|
||||
* Prefill system specific paths in application settings only once
|
||||
* Added check if entered project name is a valid file name
|
||||
* Windows: Fixed names of available header path detectors
|
||||
* Graph: Show graph legend via 'legend' command or '?' button in the lower right corner (issue #308, #540)
|
||||
* Graph: Show graph legend via 'legend' command or '?' button in the lower right corner (issue [#308](https://github.com/CoatiSoftware/Sourcetrail/issues/308), [#540](https://github.com/CoatiSoftware/Sourcetrail/issues/540))
|
||||
* C/C++: Ship clang compiler headers also for Windows
|
||||
* Code: Added on-demand local reference navigation to code view navigation bar (issue #453, #538)
|
||||
* Code: Added on-demand local reference navigation to code view navigation bar (issue [#453](https://github.com/CoatiSoftware/Sourcetrail/issues/453), [#538](https://github.com/CoatiSoftware/Sourcetrail/issues/538))
|
||||
* Improved button texts for "reindexing required" dialog
|
||||
* Code: Scroll code horizontally to active source location if out of view
|
||||
* Graph: Added show definition context menu action/shortcut to show definition of any node in the code (issue #83)
|
||||
* Graph: Added show definition context menu action/shortcut to show definition of any node in the code (issue [#83](https://github.com/CoatiSoftware/Sourcetrail/issues/83))
|
||||
* Improved project loading speed
|
||||
* Create project directory during project setup if not existing
|
||||
* Tooltip: Show function/method signatures exactly as declared in source file
|
||||
* Search: Improved autocompletion scoring to process more symbols
|
||||
* Search: Fixed autocompletions fail with wide characters (issue #598)
|
||||
* Search: Fixed autocompletions fail with wide characters (issue [#598](https://github.com/CoatiSoftware/Sourcetrail/issues/598))
|
||||
* Windows: Show error text when opening external .dll fails
|
||||
* C/C++: Highlight opening and closing brackets in code when hovering either one (issue #12)
|
||||
* C/C++: Highlight opening and closing braces in code when hovering either one (issue [#12](https://github.com/CoatiSoftware/Sourcetrail/issues/12))
|
||||
* macOS: Fixed start screen not disappearing when launching Sourcetrail by opening a project
|
||||
* Graph: Fixed restoring of scroll position in graph on undo broken
|
||||
* Graph: Hide children with type use edges to parent if parent is active
|
||||
* Bookmark: Fixed bookmark creator dialog header not visible
|
||||
* Graph: Show parameters for functions/methods with same name (issue #259)
|
||||
* Graph: exporting graph as .svg (issue #596)
|
||||
* Graph: Show parameters for functions/methods with same name (issue [#259](https://github.com/CoatiSoftware/Sourcetrail/issues/259))
|
||||
* Graph: exporting graph as .svg (issue [#596](https://github.com/CoatiSoftware/Sourcetrail/issues/596))
|
||||
* Show indexing progress bar in status bar
|
||||
* Keep browsing old project state while indexing (issue #175)
|
||||
* Java: Added support for Java 10
|
||||
* Check if Sonargraph paths exist before allowing to continue.
|
||||
* Keep browsing old project state while indexing (issue [#175](https://github.com/CoatiSoftware/Sourcetrail/issues/175))
|
||||
* Java: Added support for Java 9 & 10
|
||||
* Added project setup from Sonargraph project for C, C++ and Java.
|
||||
* Migrate old ".coatiproject" settings to new ".srctrlprj" extension when loading project
|
||||
* Allow discarding unfinished index when aborting indexing
|
||||
* Fixed partly indexed project can't be opened after closing while indexing (issue #594)
|
||||
* Fixed partly indexed project can't be opened after closing while indexing (issue [#594](https://github.com/CoatiSoftware/Sourcetrail/issues/594))
|
||||
* C/C++: Show translation unit of indexing errors
|
||||
* Fixed activating history item from menu showed wrong symbol (issue #572)
|
||||
* Fixed all errors shown when only showing errors for certain file and changing error filter (issue #577)
|
||||
* Added page steps to project setup dialogs
|
||||
* Fixed activating history item from menu showed wrong symbol (issue [#572](https://github.com/CoatiSoftware/Sourcetrail/issues/572))
|
||||
* Fixed all errors shown when only showing errors for certain file and changing error filter (issue [#577](https://github.com/CoatiSoftware/Sourcetrail/issues/577))
|
||||
* Added pagination to project setup dialogs
|
||||
* C/C++: Make complete file incomplete if it has errors in later translation units
|
||||
|
||||
|
||||
@@ -46,7 +289,7 @@ released 2018-06-18
|
||||
|
||||
* C/C++: Fixed incomplete header file got changed to complete from correct translation unit, although it had errors
|
||||
* Fixed show errors button click on incomplete file with no associated errors showed all errors
|
||||
* C/C++: Ship clang compiler headers within package on macOS and Linux (issue #99)
|
||||
* C/C++: Ship clang compiler headers within package on macOS and Linux (issue [#99](https://github.com/CoatiSoftware/Sourcetrail/issues/99))
|
||||
* Graph: Fixed undoing one of multiple edge activations caused multiple recenterings of the graph
|
||||
* Fixed links not clickable in source group type selection
|
||||
* Explicitly clear all errors when refreshing incomplete files
|
||||
@@ -55,13 +298,12 @@ released 2018-06-18
|
||||
* Code: Fixed snippet minimize click expanded snippet again
|
||||
* Fixed changing of selected source group not possible if validity check fails.
|
||||
* C/C++: Added C/C++ project setup from Code::Blocks (.cdb), which is also created for cmake projects in QtCreator
|
||||
* C/C++: fixed endless loop in include path auto detection (issue #585, #470)
|
||||
* C/C++: fixed endless loop in include path auto detection (issue [#585](https://github.com/CoatiSoftware/Sourcetrail/issues/585), [#470](https://github.com/CoatiSoftware/Sourcetrail/issues/470))
|
||||
* C/C++: fixed crash in include validation in source group setup
|
||||
* Fixed typo in update check (issue #586)
|
||||
* Fixed typo in update check (issue [#586](https://github.com/CoatiSoftware/Sourcetrail/issues/586))
|
||||
* C/C++: Added some compiler flags checks
|
||||
* C/C++: Errors without location are now recorded for current main file
|
||||
|
||||
|
||||
#### 2018.2.36
|
||||
released 2018-05-04
|
||||
|
||||
@@ -69,21 +311,20 @@ released 2018-05-04
|
||||
* Improved help dialog for compiler flags in project setup
|
||||
* Fixed handling case insensitive filepath matches when activating a symbol via editor plugin
|
||||
* Wrote cmake export compile command to description in source group setup
|
||||
* Fixed macOS gatekeeper refusing to open app bundle (issue #568)
|
||||
* Fixed macOS gatekeeper refusing to open app bundle (issue [#568](https://github.com/CoatiSoftware/Sourcetrail/issues/568))
|
||||
* Use custom radio button style on start indexing dialog to fix radio indicator not visible on old Windows systems
|
||||
* Fixed indexed header paths in compilation database project change the processing order of includes (issue #571)
|
||||
* Allow tooltips to be as wide as the window (issue #570)
|
||||
* Fixed indexed header paths in compilation database project change the processing order of includes (issue [#571](https://github.com/CoatiSoftware/Sourcetrail/issues/571))
|
||||
* Allow tooltips to be as wide as the window (issue [#570](https://github.com/CoatiSoftware/Sourcetrail/issues/570))
|
||||
* Graph: Improved edge routing in graph layout
|
||||
* Graph: Only use base/derived bundles for inheritance
|
||||
|
||||
|
||||
#### 2018.2.23
|
||||
released 2018-04-24
|
||||
|
||||
* C/C++: removed check if header was already indexed to fix missing data due to different preprocessor conditions.
|
||||
* Fixed fulltext search missing results for queries with many matches in the same file.
|
||||
* Fixed crash on converting relative paths to canonical paths in project setup
|
||||
* Also clear errors in non-indexed files when refreshing "updated and incomplete files" (issue #564)
|
||||
* Also clear errors in non-indexed files when refreshing "updated and incomplete files" (issue [#564](https://github.com/CoatiSoftware/Sourcetrail/issues/564))
|
||||
* Updated about dialog to new company name
|
||||
* Graph: Improved layout of aggregation edges
|
||||
* Fixed race condition causing crashes when showing tooltips
|
||||
@@ -101,21 +342,21 @@ released 2018-04-24
|
||||
* Graph: Improved horizontal layout to avoid edges overlapping nodes
|
||||
* Show versions of 3rd party dependencies in 3rd party dialog
|
||||
* Updated help info for update check
|
||||
* Graph: Group graph nodes by file or namespace (issues #171, #439, #522)
|
||||
* Graph: Group graph nodes by file or namespace (issues [#171](https://github.com/CoatiSoftware/Sourcetrail/issues/171), [#439](https://github.com/CoatiSoftware/Sourcetrail/issues/439), [#522](https://github.com/CoatiSoftware/Sourcetrail/issues/522))
|
||||
* Graph: Layout template specializations vertically and show them in inheritance depth graph
|
||||
* Graph: Show symbols defined within file when activating file node (issue #268)
|
||||
* Graph: Show symbols defined within file when activating file node (issue [#268](https://github.com/CoatiSoftware/Sourcetrail/issues/268))
|
||||
* UI: Updated to Qt 5.10.1
|
||||
* C/C++: Updated to clang 6.0
|
||||
* Graph: better contrast for non-indexed hatching colors
|
||||
* Graph: group nodes with same base and derived nodes in inheritance depth graph (issue #459)
|
||||
* Code: Lazy load code annotations for shorter display time (issue #389)
|
||||
* Code: Improved snippet display time (issue #389)
|
||||
* C++: fixed infinite recursion while solving c++ template parameter names (issue #553)
|
||||
* Graph: group nodes with same base and derived nodes in inheritance depth graph (issue [#459](https://github.com/CoatiSoftware/Sourcetrail/issues/459))
|
||||
* Code: Lazy load code annotations for shorter display time (issue [#389](https://github.com/CoatiSoftware/Sourcetrail/issues/389))
|
||||
* Code: Improved snippet display time (issue [#389](https://github.com/CoatiSoftware/Sourcetrail/issues/389))
|
||||
* C++: fixed infinite recursion while solving c++ template parameter names (issue [#553](https://github.com/CoatiSoftware/Sourcetrail/issues/544))
|
||||
* Added close button to status view
|
||||
* Improved style of tab bar in status view
|
||||
* Added Show Errors button to title bar of incomplete files to show only errors related to certain file (issue #246)
|
||||
* Added sorting to error table columns (issue #559)
|
||||
* Added wildcards for excluded paths (issue #475)
|
||||
* Added Show Errors button to title bar of incomplete files to show only errors related to certain file (issue [#246](https://github.com/CoatiSoftware/Sourcetrail/issues/246))
|
||||
* Added sorting to error table columns (issue [#559](https://github.com/CoatiSoftware/Sourcetrail/issues/559))
|
||||
* Added wildcards for excluded paths (issue [#475](https://github.com/CoatiSoftware/Sourcetrail/issues/475))
|
||||
* Option to accept EULA via commandline API
|
||||
* Changed seats to users for Commercial License in EULA
|
||||
* Graph: Improved vertical layout for override and inheritance edges
|
||||
@@ -124,23 +365,22 @@ released 2018-04-24
|
||||
* Allow non-ASCII characters in bookmarks
|
||||
* Allow non-ASCII characters in file paths
|
||||
|
||||
|
||||
#### 2018.1.19
|
||||
released 2018-01-30
|
||||
|
||||
* Fixed crash on filling DirectoryListBox with no selected items (issue #544, #545)
|
||||
* Fixed crash on filling DirectoryListBox with no selected items (issue [#544](https://github.com/CoatiSoftware/Sourcetrail/issues/544), [#545](https://github.com/CoatiSoftware/Sourcetrail/issues/545))
|
||||
* Graph: Improved type node contrast in bright color scheme
|
||||
* Code: Fixed going back in history sometimes showed the wrong file when an edge was activated last
|
||||
* Code: Clicking on active location will activate it again and show it's definition
|
||||
* Graph: Don't keep expanded nodes expanded after using symbol search
|
||||
* Fixed file picker didn't start in recent directory when exporting graph as image (issue #541)
|
||||
* Fixed file picker didn't start in recent directory when exporting graph as image (issue [#541](https://github.com/CoatiSoftware/Sourcetrail/issues/541))
|
||||
* Code: Fixed file content shown multiple times when clicking title button of non-indexed file with errors
|
||||
* Preferences: Only show latin fonts in the font face dropdown
|
||||
* Code: Fixed gaps in line indicators for some font faces
|
||||
* Windows: Show indexing progress in Windows task bar
|
||||
* Linux: Added settings to change screen scaling to preferences (issue #518, #523)
|
||||
* Linux: Added settings to change screen scaling to preferences (issue [#518](https://github.com/CoatiSoftware/Sourcetrail/issues/518), [#523](https://github.com/CoatiSoftware/Sourcetrail/issues/523))
|
||||
* Allow for disabling certain Source Groups via Status checkbox in the "Edit Project" dialog
|
||||
* C/C++: Fixed no indexed information saved for compilation database referencing certain compiler (issue #531)
|
||||
* C/C++: Fixed no indexed information saved for compilation database referencing certain compiler (issue [#531](https://github.com/CoatiSoftware/Sourcetrail/issues/531))
|
||||
* Increased history dropdown list size to 50 items
|
||||
* Still allow project refresh if database file can't be loaded
|
||||
* Removed focus outlines from push buttons
|
||||
@@ -157,8 +397,8 @@ released 2018-01-30
|
||||
* C/C++: Fixed policy for recording elements inside macro arguments and bodies
|
||||
* Allow users to ignore warning on non-existing paths in project setup
|
||||
* Code: Switch to single file view when clicking snippet maximize
|
||||
* Code: Show scrollbar at bottom of snippet list if bottom snippet is horizontally scrollable (issue #432)
|
||||
* Code: Keep snippet title bar at top when scrolling down (issue #479)
|
||||
* Code: Show scrollbar at bottom of snippet list if bottom snippet is horizontally scrollable (issue [#432](https://github.com/CoatiSoftware/Sourcetrail/issues/432))
|
||||
* Code: Keep snippet title bar at top when scrolling down (issue [#479](https://github.com/CoatiSoftware/Sourcetrail/issues/479))
|
||||
* Fixed history dropdown opened again when clicking on button again
|
||||
* Code: Fixed single file view cleared when refreshing
|
||||
* Graph: Added "Exported from Sourcetrail" note to exported graph images
|
||||
@@ -167,50 +407,49 @@ released 2018-01-30
|
||||
* Group include validation results by file and add line breaks for readability
|
||||
* Fixed location pickers used system root directory when empty
|
||||
* Graph: Add "bidirectional" to tooltip of bidirectional aggregation edges
|
||||
* Linux: Don't explicitely open terminal when running on Linux (issue #525)
|
||||
* Fixed files and directories dialog to offer selection of files (issue #521)
|
||||
* Linux: Don't explicitely open terminal when running on Linux (issue [#525](https://github.com/CoatiSoftware/Sourcetrail/issues/525))
|
||||
* Fixed files and directories dialog to offer selection of files (issue [#521](https://github.com/CoatiSoftware/Sourcetrail/issues/521))
|
||||
* C++: Fixed cases where references to members were recorded as usage instead of call
|
||||
* Fixed crash when Start Screen is closed while checking for update
|
||||
* Search: Fixed selected text not deleted when pasting into search field (issue #527)
|
||||
* Search: Fixed selected text not deleted when pasting into search field (issue [#527](https://github.com/CoatiSoftware/Sourcetrail/issues/527))
|
||||
* C++: Record template variable specialization edges
|
||||
* Code: Use different background color in snippet list to improve visual layering
|
||||
* Don't force full project refresh when project settings changed (issue #493)
|
||||
* Added indexing mode to reindex incomplete files (issue #496)
|
||||
* Don't force full project refresh when project settings changed (issue [#493](https://github.com/CoatiSoftware/Sourcetrail/issues/493))
|
||||
* Added indexing mode to reindex incomplete files (issue [#496](https://github.com/CoatiSoftware/Sourcetrail/issues/496))
|
||||
* Java: Allow using .aar files as Java project dependencies
|
||||
* Java: fixed some Java exceptions and write Java exceptions to log file
|
||||
* Java: Note architecture of Java version in preferences dialog
|
||||
* Code: Show line indicators for fulltext search results and fixed matches at line start
|
||||
* Graph: Update visible depth graph when changing depth level slider (issue #484)
|
||||
* Graph: Update visible depth graph when changing depth level slider (issue [#484](https://github.com/CoatiSoftware/Sourcetrail/issues/484))
|
||||
* Always show all context menu actions, but disable unavailable ones
|
||||
* Graph: Hide nodes and edges via context menu action or Alt + Click (issue #472)
|
||||
* Graph: Added option to preferences to show/hide builtin types, default is hidden (issue #409)
|
||||
* Graph: Hide nodes and edges via context menu action or Alt + Click (issue [#472](https://github.com/CoatiSoftware/Sourcetrail/issues/472))
|
||||
* Graph: Added option to preferences to show/hide builtin types, default is hidden (issue [#409](https://github.com/CoatiSoftware/Sourcetrail/issues/409))
|
||||
* Improved style and color of scrollbars and main window separators
|
||||
* Linux: Fixed icon sizes when scaling to highDPI fails
|
||||
* Search: Fixed cursor disappearing when entering long string in the search field
|
||||
* C++: Fixed parent node hierarchy for C++ template parameters of variable declarations
|
||||
* Linux: Fixed syntax error in Sourcetrail.sh (issue #519)
|
||||
* Linux: Fixed syntax error in Sourcetrail.sh (issue [#519](https://github.com/CoatiSoftware/Sourcetrail/issues/519))
|
||||
* Graph: Improved exported image quality
|
||||
* Graph: Fixed exported graph image were too large (issue #511)
|
||||
* Graph: Fixed exported graph image were too large (issue [#511](https://github.com/CoatiSoftware/Sourcetrail/issues/511))
|
||||
* Fixed crashes due to double deleted Qt widgets
|
||||
* Fixed crash when specifying an unknown text encoding in the preferences
|
||||
* C++: Fixed retrieval of CXX template parameter declarations of parent
|
||||
* C/C++: Fixed filepaths to always be canonical (issue #516)
|
||||
* C/C++: Fixed filepaths to always be canonical (issue [#516](https://github.com/CoatiSoftware/Sourcetrail/issues/516))
|
||||
* Graph: Fixed implicit nodes not auto-expanded when activated
|
||||
* C/C++: Add filename info to static functions (issue #515)
|
||||
|
||||
* C/C++: Add filename info to static functions (issue [#515](https://github.com/CoatiSoftware/Sourcetrail/issues/515))
|
||||
|
||||
#### 2017.4.46
|
||||
released 2017-11-09
|
||||
|
||||
* C/C++: Add filename info to static global variables to avoid collision (issue #514)
|
||||
* C/C++: Add filename info to static global variables to avoid collision (issue [#514](https://github.com/CoatiSoftware/Sourcetrail/issues/514))
|
||||
* Allow duplicate indexing of source files if the indexer command differs
|
||||
* Fixed single header files within indexed paths were not indexed (issue #513
|
||||
* Status: Explain differences of errors and how to fix them in help message dialog (issue #501)
|
||||
* Fixed single header files within indexed paths were not indexed (issue [#513](https://github.com/CoatiSoftware/Sourcetrail/issues/513))
|
||||
* Status: Explain differences of errors and how to fix them in help message dialog (issue [#501](https://github.com/CoatiSoftware/Sourcetrail/issues/501))
|
||||
* C/C++: Add parent directories of source files in the compilation database automatically to indexed header paths
|
||||
* C/C++: Give clang higher precedence in automatic global header search path detection
|
||||
* C/C++: Added new clang 5.0.0 language standards to project setup dropdown box
|
||||
* Graph: Show nodes with more than 20 children initially collapsed (issue #509)
|
||||
* Show message box informing about shared memory problems before indexing (issue #508)
|
||||
* Graph: Show nodes with more than 20 children initially collapsed (issue [#509](https://github.com/CoatiSoftware/Sourcetrail/issues/509))
|
||||
* Show message box informing about shared memory problems before indexing (issue [#508](https://github.com/CoatiSoftware/Sourcetrail/issues/508))
|
||||
* Fixed files from symlinked directories within indexed directories were not indexed
|
||||
* Start from correct directory for relative paths in project setup location pickers
|
||||
* Java: Added all previous Java versions to language standard selection
|
||||
@@ -221,20 +460,19 @@ released 2017-11-09
|
||||
* Search: Fixed focus and selection policy of search elements for Windows and Linux
|
||||
* Graph: Fixed type usage edges not shown between class members and inner class types
|
||||
* Graph: Fixed activation of bookmarked edge did not highlight edge in all situations
|
||||
* Status: Fixed resize status view table columns were only resizeable in the title bar (issue #506)
|
||||
* Added setting for text encoding to preferences (issue #500)
|
||||
* Search: Fixed low contrast of search field cursor in dark schemes (issue #487)
|
||||
|
||||
* Status: Fixed resize status view table columns were only resizeable in the title bar (issue [#506](https://github.com/CoatiSoftware/Sourcetrail/issues/506))
|
||||
* Added setting for text encoding to preferences (issue [#500](https://github.com/CoatiSoftware/Sourcetrail/issues/500))
|
||||
* Search: Fixed low contrast of search field cursor in dark schemes (issue [#487](https://github.com/CoatiSoftware/Sourcetrail/issues/487))
|
||||
|
||||
#### 2017.4.20
|
||||
released 2017-10-25
|
||||
|
||||
* Code: Fixed file state of snippets wrong after iterating references in single file view
|
||||
* Search: Improved selection on focus to allow editing of search query (issue #483)
|
||||
* Search: Improved selection on focus to allow editing of search query (issue [#483](https://github.com/CoatiSoftware/Sourcetrail/issues/483))
|
||||
* Code: Fixed last line removed in full file view
|
||||
* Fixed local symbol activation via plugin shows empty view
|
||||
* Fixed handling of symbolic links when activated via plugin (issue #489)
|
||||
* Code: Fixed crash due to double deletion of elements (issue #488)
|
||||
* Fixed handling of symbolic links when activated via plugin (issue [#489](https://github.com/CoatiSoftware/Sourcetrail/issues/489))
|
||||
* Code: Fixed crash due to double deletion of elements (issue [#488](https://github.com/CoatiSoftware/Sourcetrail/issues/488))
|
||||
* Code: Show shortcut 'Ctrl + Left Mouse' in code for 'Show in IDE' context menu action
|
||||
* Improved names, texts and order in project setup
|
||||
* macOS: Fixed start screen did not vanish when opening project with double click
|
||||
@@ -247,15 +485,15 @@ released 2017-10-25
|
||||
* Linux: Enabled Qt highDPI scaling to fix UI issues on high resolution screens
|
||||
* Fixed handling of non-indexed files in Graph and Code
|
||||
* C/C++: Removed include check validataion for compilation database source groups
|
||||
* Graph: Bundle nested anonymous namespaces into anonymous namespace bundle in namespace overview (issue #465)
|
||||
* Graph: Bundle nested anonymous namespaces into anonymous namespace bundle in namespace overview (issue [#465](https://github.com/CoatiSoftware/Sourcetrail/issues/465))
|
||||
* Search: Fixed vertical growth of search bar area when resizing window
|
||||
* Visual Studio plugin: Lots off fixes, see changelog (https://github.com/CoatiSoftware/vs-sourcetrail/blob/master/CHANGELOG.md)
|
||||
* Sublime Text plugin: Fixed plugin not working when installed via Package Control (issue #468)
|
||||
* Windows: Added missing Qt dlls to save graph images as .jpg (issue #474)
|
||||
* Windows: Added missing Qt dlls to save graph images as .jpg (issue [#474](https://github.com/CoatiSoftware/Sourcetrail/issues/474))
|
||||
* C/C++: Updated to Clang 5.0.0
|
||||
* Code: Fixed annotations missing for full file snippets
|
||||
* Java: Added project setup from Gradle (issue #379)
|
||||
* Added "Find On-Screen" option with search bar at bottom of window for searching Graph and Code on-screen (issue #79)
|
||||
* Java: Added project setup from Gradle (issue [#379](https://github.com/CoatiSoftware/Sourcetrail/issues/379))
|
||||
* Added "Find On-Screen" option with search bar at bottom of window for searching Graph and Code on-screen (issue [#79](https://github.com/CoatiSoftware/Sourcetrail/issues/79))
|
||||
* Use "Find On-Screen" with 'Ctrl + D' or '/'
|
||||
* Graph: Added C++ template specialization and template member specialization edges
|
||||
* Graph: Show implicit children of implicit nodes
|
||||
@@ -264,7 +502,6 @@ released 2017-10-25
|
||||
* C++: Improved recording of template member specializations
|
||||
* Refresh only files where content actually changed
|
||||
|
||||
|
||||
#### 2017.3.48
|
||||
released 2017-09-07
|
||||
|
||||
@@ -272,13 +509,13 @@ released 2017-09-07
|
||||
* Java: Use same node order in graph as in file
|
||||
* Code: Added second line marker color to better highlight hovered and local symbols
|
||||
* Added "Skip this Version" option to update dialog
|
||||
* Search: replace template arguments with .. in non-indexed nodes to reduce clutter in search results
|
||||
* Search: replace template arguments with <..> in non-indexed nodes to reduce clutter in search results
|
||||
* Code: Fixed default text color not reset text was annotated in dark schemes
|
||||
* Code: Fixed text color not correctly changed when annotation type changes
|
||||
* Fixed history list activating wrong symbol after aggregation edge was active
|
||||
* Added node type keywords to filter autocompletions or activate all nodes (issue #78)
|
||||
* File dialog shows home directory instead of working directory for first file dialog (issue #448)
|
||||
* Java: improved Maven timeout policy (issue #449)
|
||||
* Added node type keywords to filter autocompletions or activate all nodes (issue [#78](https://github.com/CoatiSoftware/Sourcetrail/issues/78))
|
||||
* File dialog shows home directory instead of working directory for first file dialog (issue [#448](https://github.com/CoatiSoftware/Sourcetrail/issues/448))
|
||||
* Java: improved Maven timeout policy (issue [#449](https://github.com/CoatiSoftware/Sourcetrail/issues/449))
|
||||
* Fixed indexing results insertion starving when indexers are really fast because of other UI updates
|
||||
|
||||
#### 2017.3.26
|
||||
@@ -288,19 +525,19 @@ released 2017-08-24
|
||||
* Changed default indexer thread count to 0, which uses optimal thread count
|
||||
* Java: Changed default value for maven dependencies directory
|
||||
* Java: improved indexing speed to be 2.5 time faster
|
||||
* Added commandline API for indexing projects and configuring indexing related preferences (issue #383)
|
||||
* Added commandline API for indexing projects and configuring indexing related preferences (issue [#383](https://github.com/CoatiSoftware/Sourcetrail/issues/383))
|
||||
* Mention call/inheritance graphs in tutorial
|
||||
* CXX: Save command line info of indexer command to errors and show within errors table (issue #351)
|
||||
* CXX: Added cross-compilation UI to project setup (issue #370)
|
||||
* CXX: Save command line info of indexer command to errors and show within errors table (issue [#351](https://github.com/CoatiSoftware/Sourcetrail/issues/351))
|
||||
* CXX: Added cross-compilation UI to project setup (issue [#370](https://github.com/CoatiSoftware/Sourcetrail/issues/370))
|
||||
* Added update checker connecting to online API and checkbox to enable daily update checks on start screen.
|
||||
* Java: Implemented interrupting AST visiting of Java indexer
|
||||
* Java: Updated to JavaSymbolSolver 0.6.0.X and Javaparser 3.3.0
|
||||
* CXX: Removed preprocessor only option, because of new include path validation
|
||||
* CXX: Fixed uppercase CXX header file name and extensions saved in lowercase (issue #437)
|
||||
* CXX: Fixed uppercase CXX header file name and extensions saved in lowercase (issue [#437](https://github.com/CoatiSoftware/Sourcetrail/issues/396))
|
||||
* Code: When clicking source location with multiple tokens or local symbols show a list to select one of these
|
||||
* Sort indexer commands for increased performance
|
||||
* Added custom tooltipping to Code and Graph with clickable types of variables and signatures (issue #195)
|
||||
* Java: fix issue where Maven project did not show any source files (issue #428)
|
||||
* Added custom tooltipping to Code and Graph with clickable types of variables and signatures (issue [#195](https://github.com/CoatiSoftware/Sourcetrail/issues/195), [#331](https://github.com/CoatiSoftware/Sourcetrail/issues/331))
|
||||
* Java: fix issue where Maven project did not show any source files (issue [#428](https://github.com/CoatiSoftware/Sourcetrail/issues/428))
|
||||
* CXX: clean indexed header path selection for project setup from Compilation Database
|
||||
* Added progress dialog for "show source files" button in project setup UI
|
||||
* CXX: Added include path validation to project settings
|
||||
@@ -308,57 +545,57 @@ released 2017-08-24
|
||||
* Search: Fixed crash when fulltext search yields no results
|
||||
* Updated to Qt 5.9.1
|
||||
* CXX: Added node type for "union"
|
||||
* CXX: Merge anonymous types and the respective typedef (issue #189, #292)
|
||||
* CXX: Merge anonymous types and the respective typedef (issue [#189](https://github.com/CoatiSoftware/Sourcetrail/issues/189), [#292](https://github.com/CoatiSoftware/Sourcetrail/issues/292))
|
||||
* CXX: Updated to clang 4.0.1
|
||||
* Added Menu option to show Start Window
|
||||
* Don't show start window when opening project with double-click
|
||||
* Show license type label in title bar: "Sourcetrail [trial, test, non-commercial]"
|
||||
* Graph: Fixed class expand toggle shown in overview and namespace lists
|
||||
* Graph: Show inheritance edges between parents of active symbol and other visible symbols (issue #167)
|
||||
* Graph: Show inheritance edges between parents of active symbol and other visible symbols (issue [#167](https://github.com/CoatiSoftware/Sourcetrail/issues/167))
|
||||
* Improved project loading performance
|
||||
* Code: improved location retrieval and hover performance
|
||||
* Show recent bookmarks in bookmarks menu (issue #414)
|
||||
* Show recent bookmarks in bookmarks menu (issue [#414](https://github.com/CoatiSoftware/Sourcetrail/issues/414))
|
||||
* Code: Fixed references and buttons when activating file in snippet mode
|
||||
* Java: added auto-detection for JRE System Library
|
||||
* Java: Prefill JRE system library path on first Sourcetrail launch
|
||||
* macOS: fixed qt.conf for case-sensitive file system (issue #404)
|
||||
* macOS: fixed qt.conf for case-sensitive file system (issue [#404](https://github.com/CoatiSoftware/Sourcetrail/issues/404))
|
||||
* Improved database saving performance
|
||||
* Improved database file clearing performance
|
||||
* Improved contrasts of UI elements in bright color scheme
|
||||
* Graph: Show zoom level as percent label next to zoom buttons
|
||||
* Added Visual Studio Code plugin (issue #397)
|
||||
* Added Visual Studio Code plugin (issue [#397](https://github.com/CoatiSoftware/Sourcetrail/issues/397))
|
||||
* Added "Edit Project" button below error table
|
||||
* Java: Maven fixes regarding JAVA_HOME variable (issue #405)
|
||||
* Java: Maven fixes regarding JAVA_HOME variable (issue [#405](https://github.com/CoatiSoftware/Sourcetrail/issues/405))
|
||||
|
||||
#### 2017.2
|
||||
released 2017-06-21
|
||||
|
||||
* Fixed crash when using shortcuts containing letters with focus on the graph on macOS (issue #390)
|
||||
* Fixed crash when using shortcuts containing letters with focus on the graph on macOS (issue [#390](https://github.com/CoatiSoftware/Sourcetrail/issues/390))
|
||||
* Improved Visual Studio plugin performance
|
||||
* Updated End User License Agreement and have users accept on first run on macOS and Linux
|
||||
* Fixed memory issues when using large Compilation Database files (issue #396)
|
||||
* Fixed memory issues when using large Compilation Database files (issue [#396](https://github.com/CoatiSoftware/Sourcetrail/issues/396))
|
||||
* Updated to JavaParser and JavaSymbolSolver
|
||||
* Fixed issue where black borders appeared around dialogs for some Linux window managers (issue #376)
|
||||
* Fixed issue where black borders appeared around dialogs for some Linux window managers (issue [#376](https://github.com/CoatiSoftware/Sourcetrail/issues/376))
|
||||
* Use platform default window decorations for UI dialogs
|
||||
* Code: Made snippet minimize/maximize buttons more interactive by showing hover states
|
||||
* Code: improved code view loading performance
|
||||
* Java: Record more "import not found" errors
|
||||
* Support Visual Studio 2017 in Visual Studio Plugin (issue #381)
|
||||
* Support Visual Studio 2017 in Visual Studio Plugin (issue [#381](https://github.com/CoatiSoftware/Sourcetrail/issues/381))
|
||||
* Graph: increased creation speed by requesting less data
|
||||
* macOS: Codesign .app bundle to avoid "from unidentified developer" warning
|
||||
* Error: Use same error order in error table and code view
|
||||
* Error: Only show first 1000 errors, click button in lower right of error table to show all (issue #385)
|
||||
* Error: Only show first 1000 errors, click button in lower right of error table to show all (issue [#385](https://github.com/CoatiSoftware/Sourcetrail/issues/385))
|
||||
* Graph: use bezier edges when activating aggregation edge
|
||||
* Send ping after changing plugin ports
|
||||
* Added menu action to display EULA and force accepting on macOS
|
||||
* Fixed use of environment variables in project setup paths
|
||||
* Multi-language project setup via Source Groups setup UI (issue #230)
|
||||
* Multi-language project setup via Source Groups setup UI (issue [#230](https://github.com/CoatiSoftware/Sourcetrail/issues/230))
|
||||
* C/C++: Fixed no files indexed when relative file paths are provided in Compilation Database (issue #388)
|
||||
* C/C++: Display an error when loading a Compilation Database fails
|
||||
* C/C++: Fixed source files within Compilation Database not indexed unless within Indexed Header Paths
|
||||
* Fixed status message length limiting window resizing (issue #372)
|
||||
* Match source file extensions case insensitive (issue #384)
|
||||
* Fixed indexing progress file count in status bar and status view (issue #387)
|
||||
* Fixed status message length limiting window resizing (issue [#372](https://github.com/CoatiSoftware/Sourcetrail/issues/372))
|
||||
* Match source file extensions case insensitive (issue [#384](https://github.com/CoatiSoftware/Sourcetrail/issues/384))
|
||||
* Fixed indexing progress file count in status bar and status view (issue [#387](https://github.com/CoatiSoftware/Sourcetrail/issues/387))
|
||||
* Windows: remove setup.exe from windows installer with all necessary .dll files
|
||||
* Added history list button between back and forward button
|
||||
* Added history menu showing activated symbols in chronologic order
|
||||
@@ -367,7 +604,7 @@ released 2017-06-21
|
||||
released 2017-05-16
|
||||
|
||||
* Added QtCreator plugin
|
||||
* Graph: Added context menu action to create bookmark for node under mouse cursor (issue #373)
|
||||
* Graph: Added context menu action to create bookmark for node under mouse cursor (issue [#373](https://github.com/CoatiSoftware/Sourcetrail/issues/373))
|
||||
* Code: Fixed code view not scrolled to first fulltext search match in single file mode
|
||||
* Set unrestricted permission for accessing shared memory to fix crash on Windows
|
||||
* Improved setting descriptions in preferences dialog
|
||||
@@ -381,22 +618,22 @@ released 2017-05-16
|
||||
* Added dialog to warn about "verbose indexer logging" before indexing.
|
||||
* Added multi process indexing for C/C++ projects to better handle crashes during indexing.
|
||||
* Reduced file accesses during C/C++ indexing.
|
||||
* Graph: Show call graphs, inheritance trees and include trees for active symbol. UI in the top left of the graph view for defining direction and depth. (issues #249 #337)
|
||||
* Graph: Show call graphs, inheritance trees and include trees for active symbol. UI in the top left of the graph view for defining direction and depth. (issues [#249](https://github.com/CoatiSoftware/Sourcetrail/issues/249) [#337](https://github.com/CoatiSoftware/Sourcetrail/issues/337))
|
||||
* Improved performance by running UI updates in parallel for each view
|
||||
* Fixed project refresh not recognizing newly added files
|
||||
* Show progress dialog when clicking refresh while computing files (issue #341)
|
||||
* Added show files button to summary of compilation database project setup (issue #354)
|
||||
* Show option to run only C/C++ preprocessor when indexing on indexing start dialog (issue #297)
|
||||
* Added bookmarking feature for nodes and edges. Bookmarks can have categories and comments. Data gets stored in .srctrlbm next to project file. Shortcuts similar to web browsers. (issue #138)
|
||||
* Mark files with errors and all files within a translation unit with fatal errors as incomplete (issue #358)
|
||||
* Fixed compilation database projects using C++ source extensions and standard (issue #366)
|
||||
* Show progress dialog when clicking refresh while computing files (issue [#341](https://github.com/CoatiSoftware/Sourcetrail/issues/341))
|
||||
* Added show files button to summary of compilation database project setup (issue [#354](https://github.com/CoatiSoftware/Sourcetrail/issues/354))
|
||||
* Show option to run only C/C++ preprocessor when indexing on indexing start dialog (issue [#297](https://github.com/CoatiSoftware/Sourcetrail/issues/297))
|
||||
* Added bookmarking feature for nodes and edges. Bookmarks can have categories and comments. Data gets stored in .srctrlbm next to project file. Shortcuts similar to web browsers. (issue [#138](https://github.com/CoatiSoftware/Sourcetrail/issues/138))
|
||||
* Mark files with errors and all files within a translation unit with fatal errors as incomplete (issue [#358](https://github.com/CoatiSoftware/Sourcetrail/issues/358))
|
||||
* Fixed compilation database projects using C++ source extensions and standard (issue [#366](https://github.com/CoatiSoftware/Sourcetrail/issues/366))
|
||||
|
||||
#### 0.11.86
|
||||
released 2017-04-12
|
||||
|
||||
* Terminating all running tasks before closing the application (issue #343)
|
||||
* Use all available cores when setting indexer threads to 0 (issue #342)
|
||||
* Added reset window layout option to view menu (issue #289)
|
||||
* Terminating all running tasks before closing the application (issue [#343](https://github.com/CoatiSoftware/Sourcetrail/issues/343))
|
||||
* Use all available cores when setting indexer threads to 0 (issue [#342](https://github.com/CoatiSoftware/Sourcetrail/issues/342))
|
||||
* Added reset window layout option to view menu (issue [#289](https://github.com/CoatiSoftware/Sourcetrail/issues/289))
|
||||
* Fixed colorscheme gets refreshed when cancelling preferences dialog
|
||||
* Log: Scroll to first line in errors table after indexing and after display
|
||||
* Copy old ApplicationSettings.xml and window_settings.ini files from previous Coati install if available.
|
||||
@@ -415,7 +652,7 @@ released 2017-04-12
|
||||
#### 0.11.15
|
||||
released 2017-03-01
|
||||
|
||||
* Don't accept richt text in 'enter license' dialog field (issue #207)
|
||||
* Don't accept richt text in 'enter license' dialog field (issue [#207](https://github.com/CoatiSoftware/Sourcetrail/issues/207))
|
||||
* Updated EULA to include Test License and better clarify other license types
|
||||
* Fixed icons in project setup dialogs blurry on highDPI screens
|
||||
* Added link to additional downloadable pre-indexed projects to trial start screen
|
||||
@@ -423,28 +660,28 @@ released 2017-03-01
|
||||
* Convert all paths chosen by patch picker relative to project location in project setup
|
||||
* Disabled name and location changing in project editing and removed project moving
|
||||
* Split default file extensions for C++ and C to avoid wrong files getting indexed
|
||||
* Deprecated 'Lazy Include Search', it's only visible to previously created projects (issue #335)
|
||||
* Support relative paths and paths containing environment variables for compilation database path (issue #312)
|
||||
* Removed 'Advanced Settings' section in project setup and show theses options in separate dialog (#293)
|
||||
* Support environment variables containing multiple files in project setup paths (issue #283)
|
||||
* Warn users when no 'Indexed Header Paths' were set in compilation database project (issue #254)
|
||||
* Deprecated 'Lazy Include Search', it's only visible to previously created projects (issue [#335](https://github.com/CoatiSoftware/Sourcetrail/issues/335))
|
||||
* Support relative paths and paths containing environment variables for compilation database path (issue [#312](https://github.com/CoatiSoftware/Sourcetrail/issues/312))
|
||||
* Removed 'Advanced Settings' section in project setup and show theses options in separate dialog (issue [#293](https://github.com/CoatiSoftware/Sourcetrail/issues/293))
|
||||
* Support environment variables containing multiple files in project setup paths (issue [#283](https://github.com/CoatiSoftware/Sourcetrail/issues/283))
|
||||
* Warn users when no 'Indexed Header Paths' were set in compilation database project (issue [#254](https://github.com/CoatiSoftware/Sourcetrail/issues/254))
|
||||
* Renamed "Project Paths" to "Indexed Paths" in project setup
|
||||
* Renamed "Project File Location" to "Coati Project Location" in project setup (issue #234)
|
||||
* Renamed "Project File Location" to "Coati Project Location" in project setup (issue [#234](https://github.com/CoatiSoftware/Sourcetrail/issues/234))
|
||||
* Allow opening indexed projects in trial mode
|
||||
* Record node type of non-indexed qualifiers (e.g. "std" in "std::string" as namespace)
|
||||
* Log: Fixed error icon loaded for every row (issue #287)
|
||||
* Log: Fixed error icon loaded for every row (issue [#287](https://github.com/CoatiSoftware/Sourcetrail/issues/287))
|
||||
* Graph: Fixed lambda are placed within white area to better see call edges
|
||||
* Graph: Show non-indexed nodes within their parents instead of using namespace labeling
|
||||
* Code: Disabled syntax highlighting for project description
|
||||
* Graph: Fixed different font-faces causing graph nodes to expand to bigger cell amount
|
||||
* Mac: Fixed wrong READMEs at some plugins (issue #315)
|
||||
* Mac: Fixed wrong READMEs at some plugins (issue [#315](https://github.com/CoatiSoftware/Sourcetrail/issues/315))
|
||||
* Mac: Removed boost libraries and libLTO from Mac bundle
|
||||
* Windows: Add Visual Studio compatibility flags to new project when Visual Studio include paths are present
|
||||
* Renamed undefined nodes to non-indexed nodes for clarification
|
||||
* Show progress in file clearing dialog
|
||||
* Extended syntax highlighting for Java and distinguish by project type
|
||||
* offer Windows 64bit build (issue #300)
|
||||
* Fixed legacy Java 6 install necessary on MacOS (issue #280)
|
||||
* offer Windows 64bit build (issue [#300](https://github.com/CoatiSoftware/Sourcetrail/issues/300))
|
||||
* Fixed legacy Java 6 install necessary on MacOS (issue [#280](https://github.com/CoatiSoftware/Sourcetrail/issues/280))
|
||||
* Updated to Qt 5.8
|
||||
* Updated to clang/llvm 3.9
|
||||
* Added multithreading to Visual Studio plugin compilation database creation
|
||||
@@ -454,18 +691,18 @@ released 2017-03-01
|
||||
* Visual Studio plugin can now handle projects with non-native build tool for compilation database export
|
||||
* Changed menu action 'Licenses' to '3rd Party Licenses'
|
||||
* Added dialog with all shortcuts to Help menu
|
||||
* Log: Show error in errors table when clicked in code view (issue #323)
|
||||
* Log: Show error in errors table when clicked in code view (issue [#323](https://github.com/CoatiSoftware/Sourcetrail/issues/323))
|
||||
* Code: Switched default mouse drag behavior to selection, panning on Shift + drag, and show suitable cursors
|
||||
* Updated company address in about dialog
|
||||
* Graph: Added on-screen zoom buttons
|
||||
* Graph: Split aggregation edge when expanding nodes if possible
|
||||
* Uncommented lines using the std library in TicTacToe sample
|
||||
* Fixed issue with lambda return type (issue #318)
|
||||
* Save builtin types as separate node type (issue #2)
|
||||
* Fixed issue with lambda return type (issue [#318](https://github.com/CoatiSoftware/Sourcetrail/issues/318))
|
||||
* Save builtin types as separate node type (issue [#2](https://github.com/CoatiSoftware/Sourcetrail/issues/2))
|
||||
* Remove unused included files after refreshing
|
||||
* Java: Fixed packages that only contain packages to show up as non-indexed
|
||||
* Added context-menu actions to copy node names, file paths and show files in containing directory (issue #320)
|
||||
* Fixed crash when entering a single space in 'enter license' dialog (issue #277)
|
||||
* Added context-menu actions to copy node names, file paths and show files in containing directory (issue [#320](https://github.com/CoatiSoftware/Sourcetrail/issues/320))
|
||||
* Fixed crash when entering a single space in 'enter license' dialog (issue [#277](https://github.com/CoatiSoftware/Sourcetrail/issues/277))
|
||||
* Graph: Made edge lines thicker
|
||||
* Fixed handling and storing of files with the same name
|
||||
* Fixed environment variable detection within project paths for %VARIABLE_NAME% syntax
|
||||
@@ -484,7 +721,7 @@ released 2017-03-01
|
||||
|
||||
|
||||
#### 0.10.0
|
||||
released 2016-12-13
|
||||
released 2016-12-14
|
||||
|
||||
* Windows: Added runtime DLLs that could be missing on some systems
|
||||
* Click message in status bar to open status window
|
||||
@@ -497,11 +734,11 @@ released 2016-12-13
|
||||
* Graph: Disable bundling when files or macros are active
|
||||
* Graph: Bundle importing files of active symbol in Java projects
|
||||
* Improved speed of depending file search on refresh
|
||||
* Search: Fixed crashes related to empty searches (issue #251)
|
||||
* Search: Fixed crashes related to empty searches (issue [#251](https://github.com/CoatiSoftware/Sourcetrail/issues/251))
|
||||
* Search: Do fulltext search when no autocompletion match is available
|
||||
* Added checkbox for full project refresh to start indexing dialog
|
||||
* Disabled clang error limit by default to make sure all errors are shown
|
||||
* Linux: Updated libs and added missing ones (issue #245)
|
||||
* Linux: Updated libs and added missing ones (issue [#245](https://github.com/CoatiSoftware/Sourcetrail/issues/245))
|
||||
* Updated icons for some graph nodes and project types
|
||||
* Windows: Updated Visual Studio plugin UI
|
||||
* Graph: Fixed view to not recenter on active node when clicking edge
|
||||
@@ -518,10 +755,10 @@ released 2016-12-13
|
||||
* Integrated Visual Studio Plugin with Coati Project creation and removed previous Visual Studio Solution parser
|
||||
* Improved C++ indexer coverage: using decls, using directives, auto keyword, lambda signatures, symbol references inside lambda captures, template argument related elements
|
||||
* Reduced size of .coatidb file by up to 50% for large projects
|
||||
* Fixed anonymouse symbol name conflicts (issue #241)
|
||||
* Fixed anonymouse symbol name conflicts (issue [#241](https://github.com/CoatiSoftware/Sourcetrail/issues/241))
|
||||
* Preferences: Added Indexer Logging option to print AST information during indexing
|
||||
* Search: Added second line to search autocompletion list showing namespace, package or filepath
|
||||
* Made cells readonly in errors table to prevent editing (issue #236)
|
||||
* Made cells readonly in errors table to prevent editing (issue [#236](https://github.com/CoatiSoftware/Sourcetrail/issues/236))
|
||||
* Renamed Log Window to Status window
|
||||
|
||||
|
||||
@@ -530,20 +767,21 @@ released 2016-10-27
|
||||
|
||||
* Windows: Added logging and exception handling to VS plugin
|
||||
* Windows: Added VC++ runtime dlls for windows installer
|
||||
* Windows: Added missing VC++ runtime dlls (issue #231)
|
||||
* Added setting for default graph zoom on mouse wheel to preferences (issue #237)
|
||||
* Windows: Added missing VC++ runtime dlls (issue [#231](https://github.com/CoatiSoftware/Sourcetrail/issues/231))
|
||||
* Added setting for default graph zoom on mouse wheel to preferences (issue [#237](https://github.com/CoatiSoftware/Sourcetrail/issues/237))
|
||||
* Scroll errors table to newest error during indexing
|
||||
* Fixed best scoring for search autocompletions skipped some combinations
|
||||
* Fixed flickering of errors table when indexing
|
||||
* Don't show error snippets in overview screen anymore
|
||||
* Fixed crash when Project Paths contain files and lazy include search in enabled (issue #201)
|
||||
* Fixed crash when Project Paths contain files and lazy include search in enabled (issue [#201](https://github.com/CoatiSoftware/Sourcetrail/issues/201))
|
||||
* Fixed edge cases that caused deadlocks in indexing
|
||||
* Added language specific project icons to start screen
|
||||
* Fixed application couldn't be quit when start screen was showing (issue #227)
|
||||
* Fixed application couldn't be quit when start screen was showing (issue [#227](https://github.com/CoatiSoftware/Sourcetrail/issues/227))
|
||||
* Graph: Fixed missing image file ending when exporting graph for Linux
|
||||
* Log Coati version when logging gets enabled
|
||||
* Fixed non-indexed errors filter in errors table
|
||||
|
||||
|
||||
#### 0.9.0
|
||||
released 2016-10-14
|
||||
|
||||
@@ -559,38 +797,38 @@ released 2016-10-14
|
||||
* Graph: Move aggregation and inheritance edges to front when hovered or active
|
||||
* Graph: Push parent nodes of active nodes to back to make all incoming and outgoing edges visible
|
||||
* Properly quit application when window is closed while confirm box is open
|
||||
* Properly quit application when window is closed while indexing (issue #121)
|
||||
* Properly quit application when window is closed while indexing (issue [#121](https://github.com/CoatiSoftware/Sourcetrail/issues/121))
|
||||
* Graph: Count only top level nodes in bundle nodes of graph
|
||||
* Search: Improved scoring of autocompletion matches to use best score for match
|
||||
* App will go into trial mode without valid license
|
||||
* Java: Auto detect java root source directories
|
||||
* Fixed refresh crash (issue #220)
|
||||
* Fixed refresh crash (issue [#220](https://github.com/CoatiSoftware/Sourcetrail/issues/220))
|
||||
* Java: improved indexer reliability a lot
|
||||
* Java: Changed name of generic type to use name of declaration
|
||||
* Fixed project refresh does not recognize removed source paths
|
||||
* Java: Define maximum allocated jvm memory in preferences
|
||||
* Follow symbolic directory links within source paths (issue #205)
|
||||
* Follow symbolic directory links within source paths (issue [#205](https://github.com/CoatiSoftware/Sourcetrail/issues/205))
|
||||
* Use white size grip in blue dialogs
|
||||
* Graph: Use type node colors for undefined nodes
|
||||
* Java: Show import not found as error
|
||||
* Code: Select and copy source code in code view with SHIFT + mouse drag (issue #7)
|
||||
* Code: Select and copy source code in code view with SHIFT + mouse drag (issue [#7](https://github.com/CoatiSoftware/Sourcetrail/issues/7))
|
||||
* Code: Added markers next to line numbers in code view showing active locations and scopes
|
||||
* Merged app and trial to one build
|
||||
|
||||
#### 0.8.21
|
||||
released 2016-09-16
|
||||
|
||||
* Added options for checking multiple paths in Indexed Header Paths dialog during project setup from Compilation Database #190
|
||||
* Added options for checking multiple paths in Indexed Header Paths dialog during project setup from Compilation Database [#190](https://github.com/CoatiSoftware/Sourcetrail/issues/190)
|
||||
* Added all C/C++ standards supported by clang
|
||||
* Fixed C language setting in empty project setup not propagated to indexer #177
|
||||
* Fixed C language setting in empty project setup not propagated to indexer [#177](https://github.com/CoatiSoftware/Sourcetrail/issues/177)
|
||||
* Added Sublime plugin to Sublime Text Package Control
|
||||
* Improved indexer parallelization for faster indexing
|
||||
* Changed all font-sizes to px for similar look on all platforms
|
||||
* Added font face dropdown to Preferences showing all available monospace fonts #172
|
||||
* Smoother font rendering on Windows by setting font engine to FreeType via qt.conf file #137
|
||||
* Added font face dropdown to Preferences showing all available monospace fonts [#172](https://github.com/CoatiSoftware/Sourcetrail/issues/172)
|
||||
* Smoother font rendering on Windows by setting font engine to FreeType via qt.conf file [#137](https://github.com/CoatiSoftware/Sourcetrail/issues/137)
|
||||
* Interrupt indexing while AST visiting for C/C++ for shorter waiting time
|
||||
* Save graph as PNG image via context menu in graph view #180
|
||||
* Added base folder to Linux package #181
|
||||
* Save graph as PNG image via context menu in graph view [#180](https://github.com/CoatiSoftware/Sourcetrail/issues/180)
|
||||
* Added base folder to Linux package [#181](https://github.com/CoatiSoftware/Sourcetrail/issues/181)
|
||||
* Use inverted golden ratio in indexing progress dialog
|
||||
|
||||
#### 0.8.0
|
||||
@@ -598,30 +836,30 @@ released 2016-09-01
|
||||
|
||||
* Improved titles and help texts in project setup UI
|
||||
* Fixed error locations not saved with absolute file paths in Compilation Database projects
|
||||
* Added missing source files extensions setting to the Edit Project dialog #132
|
||||
* Changed default text colors to black in project setup UI #140
|
||||
* Added plugin ports settings to Preferences #145
|
||||
* Added missing source files extensions setting to the Edit Project dialog [#132](https://github.com/CoatiSoftware/Sourcetrail/issues/132)
|
||||
* Changed default text colors to black in project setup UI [#140](https://github.com/CoatiSoftware/Sourcetrail/issues/140)
|
||||
* Added plugin ports settings to Preferences [#145](https://github.com/CoatiSoftware/Sourcetrail/issues/145)
|
||||
* Improved project state handling on refreshing
|
||||
* Added Java sample project JavaParser: http://javaparser.org/
|
||||
* Fixed regex for system includes used wrongly in syntax highlighter
|
||||
* Added setting to disable file and console logging, default is off #157
|
||||
* Added setting to disable file and console logging, default is off [#157](https://github.com/CoatiSoftware/Sourcetrail/issues/157)
|
||||
* Added migrations between different ApplicationSettings versions
|
||||
* Added auto detection for Java library to Preferences
|
||||
* Removed auto refresh option from Search view
|
||||
* Added progress dialogs for indexing and block UI #143
|
||||
* Added progress dialogs for indexing and block UI [#143](https://github.com/CoatiSoftware/Sourcetrail/issues/143)
|
||||
* Hide name qualifiers for graph nodes in Java projects
|
||||
* Added handling when java library not found
|
||||
* Added plain text editing dialog to path list boxes
|
||||
* Use language dependent symbol name delimiter in UI
|
||||
* Added scroll speed setting to preferences #112
|
||||
* Added scroll speed setting to preferences [#112](https://github.com/CoatiSoftware/Sourcetrail/issues/112)
|
||||
* Added Java project setup UI
|
||||
* Record start and end locations of scopes in Java
|
||||
* Display unresolved types names in Java as 'unresolved-type'
|
||||
* Cache stats for overview to speed up display
|
||||
* Fixed graph nodes to restore their expand state when going back #118
|
||||
* Fixed graph nodes to restore their expand state when going back [#118](https://github.com/CoatiSoftware/Sourcetrail/issues/118)
|
||||
* Added shortcuts for navigating to next and previous reference in code view
|
||||
* Pressing Tab in search completes up to next ::, Delete erases to last :: #133
|
||||
* Bundle anonymous namespaces separately in graph overview #126
|
||||
* Pressing Tab in search completes up to next ::, Delete erases to last :: [#133](https://github.com/CoatiSoftware/Sourcetrail/issues/133)
|
||||
* Bundle anonymous namespaces separately in graph overview [#126](https://github.com/CoatiSoftware/Sourcetrail/issues/126)
|
||||
* Added 'Show Data Folder' and 'Show Log Folder' items to Help menu
|
||||
* Added new status bar loader gif with higher resolution
|
||||
* Record type aliases in C++
|
||||
@@ -632,7 +870,7 @@ released 2016-09-01
|
||||
* Leave code view at original line when expanding scopes
|
||||
* Pan graph view to center on name of active symbol after activation
|
||||
* Moved color scheme selection to Preferences
|
||||
* Moved Preferences menu item to Edit menu on Windows/Linux #113
|
||||
* Moved Preferences menu item to Edit menu on Windows/Linux [#113](https://github.com/CoatiSoftware/Sourcetrail/issues/113)
|
||||
* Added setting for hiding non-fatal errors in unindexed files to preferences, turned on by default
|
||||
* Fixed file out-of-date asterisk disappearing when showing snippets after minimize state
|
||||
* Implemented Atom plugin: https://github.com/CoatiSoftware/atom-coati
|
||||
@@ -642,7 +880,6 @@ released 2016-09-01
|
||||
* Improved code view rendering times
|
||||
* Don't show implicit nodes in search auto completion list
|
||||
|
||||
|
||||
#### 0.7.0.22
|
||||
released 2016-07-07
|
||||
|
||||
@@ -705,42 +942,42 @@ released 2016-06-15
|
||||
#### 0.6.0.0
|
||||
released 2016-04-27
|
||||
|
||||
* Smoother graph panning and zooming on keyboard using update loop
|
||||
* Differentiate between explicit and implicit nodes and only show implicit nodes in the graph view when connected
|
||||
* Improved file clearing performance on project refresh
|
||||
* Show deleted projects on the start screen and show messagebox to delete them
|
||||
* Show analysis duration in hh:mm:ss
|
||||
* Added suppport for temporary test licenses and show error message when it expired
|
||||
* Increased graph performance by reducing to fixed number of requests
|
||||
* Add vs-clang compatibility flags when creating project from Visual Studio solution
|
||||
* Increased graph edge drawing performance
|
||||
* Added auto detection for system header paths to project wizard and preferences when using gcc, clang or vs compilers
|
||||
* Added bug tracker to help menu
|
||||
* Increased search autocompletion performance to stay mostly below 100ms
|
||||
* Increased project load performance
|
||||
* Improved file clearing performance on project refresh
|
||||
* Increased graph creation performance for overview screen
|
||||
* Increased graph performance by reducing to fixed number of requests
|
||||
* Increased graph edge drawing performance
|
||||
* Improved error display performance by not expanding all of them at once
|
||||
* Added analysis for local symbols and allow selecting them in the code view
|
||||
* Added support for function pointers to analysis
|
||||
* Smoother graph panning and zooming on keyboard using update loop
|
||||
* Changed style of aggregation edge to cleaner look
|
||||
* Allow certain edge types to enter and leave at top and bottom of nodes as well e.g. inheritance
|
||||
* Increased project load performance
|
||||
* Increased graph creation performance for overview screen
|
||||
* Changed namespace activation to show the namespace name in the search bar and the namespace definitions in the code view
|
||||
* Updated to Qt 5.6
|
||||
* Added analysis for local symbols and allow selecting them in the code view
|
||||
* Improved error display performance by not expanding all of them at once
|
||||
* Differentiate between explicit and implicit nodes and only show implicit nodes in the graph view when connected
|
||||
* Show deleted projects on the start screen and show messagebox to delete them
|
||||
* Show analysis duration in hh:mm:ss
|
||||
* Added bug tracker to the help menu
|
||||
* Added home button next to search field for showing the project overview
|
||||
* Added shortcut and menu item to show project overview
|
||||
* Fixed Path boxes not sized correctly when switching back and forth in the project wizard
|
||||
* Allow support for environment variables in project setup with syntax ${VARIABLE_NAME}
|
||||
* Added welcome message to Coati trial
|
||||
* Show quit button on license enter screen when no valid license was entered yet
|
||||
* Allow color schemes to define text colors for code view highlights
|
||||
* Added support for function pointers to analysis
|
||||
* Added Windows system dlls to installer on Windows so users don't not need to install the redistributable package
|
||||
* Defined new highlight colors for code view in all color schemes
|
||||
* Changed style of out-of-date files to be followed by *
|
||||
* Set Qt flag for high DPI scaling
|
||||
* Fixed Path boxes not sized correctly when switching back and forth in the project wizard
|
||||
* Check analyzed paths for existence in project wizard
|
||||
* Inform the user about project changes and ask before reparsing the project
|
||||
* Removed "simple setup" step in project wizard and added "lazy include search"-checkbox
|
||||
* Edit the project settings by clicking the project name in the overview stats
|
||||
* Added welcome message to Coati trial
|
||||
* Defined new highlight colors for code view in all color schemes
|
||||
* Updated to Qt 5.6
|
||||
* Improved high DPI support for windows
|
||||
* Added Windows system dlls to installer on Windows so users don't not need to install the redistributable package
|
||||
* Added vs-clang compatibility mode as compile flags when creating project from Visual Studio solution
|
||||
* Added auto detection for system header paths to project wizard and preferences when using gcc, clang or vs compilers
|
||||
|
||||
#### 0.5.1.21
|
||||
released 2016-03-16
|
||||
|
||||
+410
-420
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,14 @@
|
||||
# Contributing
|
||||
If you like this project and want to get involved, there are lots of ways you can help:
|
||||
|
||||
* __Spread the word.__ The more people want this project to grow, the greater the motivation for the developers to get things done.
|
||||
* __Fund the development.__ Further development and maintainance of this project is crowd funded via [Patreon](https://www.patreon.com/sourcetrail). If you would like Sourcetrail to grow and improve but cannot spare the time to contribute your self, please consider making a pledge.
|
||||
* __Test Sourcetrail.__ Run it on your own source code. If you find any issues, just report it here. Best, include some detailed step-by-step instructions that illustrate how to reproduce the issue, so that we can use it as a basis to craft a test case for our continuous integration and no one will ever break that case again.
|
||||
* __Write some code.__ Don't be shy here. You can implement whole new features or fix some bugs, but you can also do some refactoring if you think that it benefits the readability or the maintainability of the code. Still, no matter if you just want to work on cosmetics or implement new features, it would be best if you create an issue here on the issue tracker before you actually start handing in pull requests, so that we can discuss those changes first and thus raise the probability that those changes will get pulled quickly.
|
||||
|
||||
To create a pull request, follow these steps:
|
||||
* Fork the Repo on GitHub.
|
||||
* Make your commits.
|
||||
* If you added functionality or fixed a bug, please add a test.
|
||||
* Add your name to the AUTHORS.txt file.
|
||||
* Push to your fork and submit a pull request.
|
||||
+674
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
@@ -1,169 +1,247 @@
|
||||
## Sourcetrail
|
||||
# Sourcetrail
|
||||
|
||||
### Setup
|
||||
[Sourcetrail](https://www.sourcetrail.com/) is a free and open-source cross-platform source explorer that helps you get productive on unfamiliar source code.
|
||||
|
||||
#### External Software
|
||||
Windows: [](https://ci.appveyor.com/project/mlangkabel/sourcetrail/branch/master)
|
||||
|
||||
* JDK 1.8
|
||||
* QT 5.10.1
|
||||
* CxxTest 4.3
|
||||
* Clang & LLVM 6.0 (doesnt quite work for windows, use unix setup below and skip all the ninja stuff)(installation guide http://clang.llvm.org/docs/LibASTMatchersTutorial.html)
|
||||
* Boost 1.64
|
||||
* Botan 2.1.0
|
||||
* Image Magick 7.0.6
|
||||
* ccache (Unix)
|
||||
* Visual Leak Detector (Windows)
|
||||
* Wix 3.11 (Windows)
|
||||
* Winrar (Windows)
|
||||
Linux: [](https://travis-ci.org/CoatiSoftware/Sourcetrail)
|
||||
|
||||
#### Environment Variables
|
||||
|
||||
* CXX_TEST_DIR - .../cxxtest-4.3
|
||||
* CLANG_DIR - .../clang-llvm
|
||||
* BOOST_DIR - .../boost_1_64_0
|
||||
* BOTAN_DIR - .../Botan-2.1.0
|
||||
__Links__
|
||||
* [Website](https://www.sourcetrail.com/)
|
||||
* [Download](https://www.sourcetrail.com/downloads)
|
||||
* [Quick Start Guide](https://www.sourcetrail.com/documentation/#QUICKSTARTGUIDE)
|
||||
* [Documentation](https://www.sourcetrail.com/documentation)
|
||||
* [Changelog](CHANGELOG.md)
|
||||
* [Slack Channel](https://join.slack.com/t/sourcetrail/shared_invite/enQtNDc3MjcyOTk5MTc0LTNhOWZhZjAxZmU1NTM0YjhhMzRhZWE1NTQ2NjQyYjc1ODE2MzViOTliMWUwODBjN2NlMjkwMDc0MjAxMzJkY2E)
|
||||
* [Mailing List](https://coati.us12.list-manage.com/subscribe/post?u=3dabab4e475b5ed577d1dcd0f&id=cf7301fc53)
|
||||
* [Patreon](https://www.patreon.com/sourcetrail)
|
||||
|
||||
For MacOS and Linux
|
||||
* QT_DIR - .../Qt/Qt5.10.1/5.10.1/<IDE>
|
||||
* LLVM_DIR - .../clang-llvm
|
||||

|
||||
|
||||
For Windows:
|
||||
* QT_WIN32_DIR - .../Qt/Qt5.10.1/5.10.1/msvc2015
|
||||
* QT_WIN64_DIR - .../Qt/Qt5.10.1/5.10.1/msvc2015_64
|
||||
* VLD_DIR - .../Visual Leak Detector
|
||||
* JAVA_HOME - .../Java/jdk1.x.x_xxx
|
||||
* path
|
||||
- append path to git.exe
|
||||
- append path to jdk/bin
|
||||
- append path to VisualStudio/Common7/Tools
|
||||
- append path to VisualStudio/Common7/IDE
|
||||
- append path to .../Microsoft SDKs/Windows/v7.1A/Bin (for uuidgen in deploy script)
|
||||
- append path to .../WiX Toolset v3.11/bin
|
||||
- append path to .../WinRAR
|
||||
Sourcetrail is:
|
||||
* free
|
||||
* working offline
|
||||
* operating on Windows, macOS and Linux
|
||||
* supporting C, C++, Java and Python
|
||||
* offering an SDK ([SourcetrailDB](https://github.com/CoatiSoftware/SourcetrailDB)) to write custom language extensions
|
||||
|
||||
##### ccache
|
||||
## Support Sourcetrail via Patreon
|
||||
|
||||
* install ccache
|
||||
* if ccache is in path it will be used for recompilation
|
||||
The ongoing development and regular software releases are made possible entirely by the support of [these awesome patrons](SPONSORS.md)! If you'd like to join them, please consider [becoming a patron](https://www.patreon.com/sourcetrail) of Sourcetrail.
|
||||
|
||||
##### Clang setup
|
||||
## Using Sourcetrail
|
||||
|
||||
For Windows:
|
||||
Execute Cmake twice (once for each target compiler (32 and 64 bit)). Set the respective build path to ${CLANG_DIR}/build_win32 or ${CLANG_DIR}/build_win64
|
||||
To setup Sourcetrail on your machine, you can either download the respective build for your operating system from our list of [Releases](https://www.sourcetrail.com/downloads) and install it on your machine, or use one of the following package managers:
|
||||
|
||||
##### Boost setup
|
||||
* Use the [Chocolatey package](https://chocolatey.org/packages/sourcetrail) with `choco install sourcetrail`
|
||||
|
||||
For Windows:
|
||||
Build the Boost libs for 32 and 64 bit. Make sure that the platform specific libs are located in ${BOOST_DIR}/lib32-msvc-14 and ${BOOST_DIR}/lib64-msvc-14.
|
||||
After your installation is complete, follow our [Quick Start Guide](https://www.sourcetrail.com/documentation/#QUICKSTARTGUIDE) to get to know Sourcetrail.
|
||||
|
||||
For Mac:
|
||||
## How to Report Issues
|
||||
|
||||
You can post all your feature requests and bug reports on our [issue tracker](https://github.com/CoatiSoftware/Sourcetrail/issues).
|
||||
|
||||
### Reporting
|
||||
|
||||
Use the following template:
|
||||
|
||||
* platform version:
|
||||
* Sourcetrail version:
|
||||
* description of the problem:
|
||||
* steps to reproduce the problem:
|
||||
|
||||
|
||||
### Supporting
|
||||
|
||||
If you want to support a certain feature request or you have the same bug that another user already reported, please let us know:
|
||||
* post a comment with "+1" to the issue
|
||||
* or send an email to support@sourcetrail.com with the issue ID
|
||||
|
||||
## How to Contribute
|
||||
|
||||
* Please read and follow the steps in [CONTRIBUTING.md](CONTRIBUTING.md) file.
|
||||
* You may want to look out for issues labeled [good first issue](https://github.com/CoatiSoftware/Sourcetrail/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) to find some initial tasks to tackle.
|
||||
* If you are looking for more information about Sourcetrail software development, please refer to our [wiki](https://github.com/CoatiSoftware/Sourcetrail/wiki).
|
||||
|
||||
# How to Build
|
||||
|
||||
Building Sourcetrail requires several dependencies to be in place on your machine. However, our CMake based setup allows to disable indexing support for specific languages which reduces the number of dependencies to a minimum.
|
||||
|
||||
## Building the bare minimum
|
||||
|
||||
### Required Tools
|
||||
|
||||
#### Git
|
||||
|
||||
This is required for generating the Sourcetrail version number. Get it from: https://git-scm.com/download.
|
||||
|
||||
Make sure `git` is available in added to your `PATH` environment variable.
|
||||
|
||||
#### CMake v3.12
|
||||
|
||||
This is used for generating a build configuration. Get it from: https://cmake.org/download/
|
||||
|
||||
### Additional tools for Windows
|
||||
|
||||
#### Visual Studio
|
||||
|
||||
### Additional tools for Unix
|
||||
|
||||
#### ccache
|
||||
|
||||
This is optionally used to speed up rebuilds if found in `PATH`.
|
||||
|
||||
### Required dependencies
|
||||
|
||||
#### Boost 1.67
|
||||
For the __msvc__ compiler pre-built binaries can be downloaded from [sourceforge.net/projects/boost/files/boost-binaries](https://sourceforge.net/projects/boost/files/boost-binaries/)
|
||||
|
||||
For building on Unix:
|
||||
```
|
||||
$ ./bootstrap.sh --with-libraries=filesystem,program_options,system,date_time
|
||||
$ ./b2 --link=static --variant=release --threading=multi --runtime-link=static --cxxflags=-fPIC
|
||||
```
|
||||
|
||||
##### Botan setup
|
||||
#### Qt 5.12
|
||||
|
||||
For Windows
|
||||
__Note__: still causes style issues on Windows, resort to Qt 5.10
|
||||
|
||||
Extract the contents of your Botan package into "${BOTAN_DIR}/win32". Duplicate that folder and rename it "win64".
|
||||
For the __msvc__ compiler pre-built binaries can be downloaded from [download.qt.io/official_releases/qt](http://download.qt.io/official_releases/qt/)
|
||||
|
||||
Build 32 bit debug lib in ${BOTAN_DIR}/win32/debug
|
||||
$ python configure.py --cc=msvc --cpu=x86_32 --disable-shared --no-optimizations --with-debug-info
|
||||
### Building
|
||||
|
||||
Build 32 bit release lib in ${BOTAN_DIR}/win32/release
|
||||
$ python configure.py --cc=msvc --cpu=x86_32 --disable-shared
|
||||
#### For Windows / Visual Studio
|
||||
```
|
||||
$ cd Sourcetrail
|
||||
$ mkdir -p build/win64
|
||||
$ cd build/win64
|
||||
$ cmake -G "Visual Studio 15 2017 Win64" -DBOOST_ROOT=<path/to/boost_1_68_0> -DQt5_DIR=<path/to/Qt/version/platform/compiler/lib/cmake/Qt5> ../..
|
||||
```
|
||||
If you are using the gui, we recommend that you activate advanced mode. Also you may be required to add some of the defines via the "Add Entry" button.
|
||||
|
||||
To build the 64 bit lib start the VS command prompt with the "amd64" argument as described here:https://msdn.microsoft.com/en-us/library/x4d2c09s.aspx
|
||||
After generating the build configuration, just open the Sourcetrail.sln file that was generated by CMake and build the Sourcetrail project.
|
||||
|
||||
Build 64 bit debug lib in ${BOTAN_DIR}/win64/debug
|
||||
$ python configure.py --cc=msvc --cpu=x86_64 --disable-shared --no-optimizations --with-debug-info
|
||||
#### For Unix
|
||||
|
||||
Build 64 bit release lib in ${BOTAN_DIR}/win64/release
|
||||
$ python configure.py --cc=msvc --cpu=x86_64 --disable-shared
|
||||
```
|
||||
$ cd Sourcetrail
|
||||
$ mkdir -p build/Release
|
||||
$ cd build/Release
|
||||
$ cmake -DCMAKE_BUILD_TYPE="Release" -DBOOST_ROOT=<path/to/boost_1_68_0> -DQt5_DIR=<path/to/Qt/version/platform/compiler/lib/cmake/Qt5> ../..
|
||||
$ make Sourcetrail
|
||||
```
|
||||
|
||||
### Running
|
||||
|
||||
Run Sourcetrail from within the build directory. During execution Sourcetrail needs resources from `bin/app/data` and `bin/app/user`. Cmake creates symlinks to these directories within the build directory.
|
||||
|
||||
|
||||
For MacOS and Linux
|
||||
## Enable C/C++ Language Support
|
||||
|
||||
Build release lib in ${BOTAN_DIR}/release
|
||||
Build debug lib in ${BOTAN_DIR}/debug
|
||||
### Required dependencies
|
||||
|
||||
for Mac:
|
||||
$ mkdir debug/release
|
||||
$ cd debug/release
|
||||
$ python ../configure.py --disable-shared --disable-modules=darwin_secrandom (--with-debug-info)
|
||||
$ make -j 4
|
||||
#### LLVM/Clang 9.0.0
|
||||
|
||||
for Linux:
|
||||
$ python configure.py --disable-shared
|
||||
##### Windows
|
||||
For the __msvc__ compiler, follow [these steps](https://clang.llvm.org/get_started.html) to build the project. Make sure to check out the correct tag and to run the cmake command exactly as described.
|
||||
|
||||
#### Settings
|
||||
##### Unix
|
||||
For Unix, follow this [installation guide](http://clang.llvm.org/docs/LibASTMatchersTutorial.html)
|
||||
|
||||
Run setup script:
|
||||
$ ./script/setup.sh
|
||||
Build with `-DLLVM_ENABLE_RTTI=ON`.
|
||||
|
||||
### Release
|
||||
### Building
|
||||
|
||||
#### App
|
||||
* create release build
|
||||
* make sure it uses the Sourcetrail icon
|
||||
* obfuscate the executable using upx
|
||||
Run CMake with these additional options:
|
||||
```
|
||||
-DClang_DIR=<path/to/llvm_build/lib/cmake/clang>
|
||||
-DBUILD_CXX_LANGUAGE_PACKAGE=ON
|
||||
```
|
||||
|
||||
#### Data folder
|
||||
* put data folder in working directory
|
||||
* add empty log folder
|
||||
* add working tictactoe.xml project to /projects/tictactoe with sources in /projects/tictactoe/src
|
||||
* add empty app settings with one recent project tictactoe.xml
|
||||
* leave window_settings.ini with correct Sourcetrail start layout
|
||||
## Enable Java Language Support
|
||||
|
||||
#### Package
|
||||
* add app
|
||||
### Required dependencies
|
||||
|
||||
#### Updating Clang on UNIX
|
||||
#### JDK 1.8
|
||||
|
||||
$ cd .../clang_llvm
|
||||
Install JDK and make sure the `JAVA_HOME` environment variable is set:
|
||||
```
|
||||
JAVA_HOME=.../Java/jdk1.x.x_xxx
|
||||
```
|
||||
|
||||
$ cd llvm
|
||||
$ git pull origin master
|
||||
Also make sure `<jdk_root>/bin` is available in your `PATH` environmen variable.
|
||||
|
||||
$ cd tools/clang
|
||||
$ git pull origin master
|
||||
#### Maven
|
||||
Install Maven and make sure both `M2_HOME` and `MAVEN_HOME` environment variables are set:
|
||||
```
|
||||
M2_HOME=.../apache-maven-x.x.x
|
||||
MAVEN_HOME=.../apache-maven-x.x.x
|
||||
```
|
||||
|
||||
$ cd tools/extra/
|
||||
$ git pull origin master
|
||||
Also make sure `.../apache-maven-x.x.x/bin` is available in your `PATH` environmen variable.
|
||||
|
||||
$ cd ../../../../../build_debug
|
||||
$ cmake -G Ninja -DLLVM_ENABLE_RTTI=ON ../llvm
|
||||
$ ninja -j4 check-all
|
||||
### Building
|
||||
|
||||
$ cd ../build_release
|
||||
$ cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=ON ../llvm
|
||||
$ ninja -j4 check-all
|
||||
Run CMake with these additional options:
|
||||
```
|
||||
-DBUILD_JAVA_LANGUAGE_PACKAGE=ON
|
||||
```
|
||||
|
||||
# Update CMakeLists.txt symlink directory
|
||||
# Update cmake/linux_package.cmake clang include path
|
||||
# Update LLVM version in dockerfiles
|
||||
## Enable Python Language Support
|
||||
|
||||
#### Remarks
|
||||
### Required dependencies
|
||||
|
||||
* Boost lib dir: rename library directory for your system (e.g.: 'lib32-msvc-12.0') to 'lib'
|
||||
#### WinRAR (for Windows only)
|
||||
|
||||
### Tagging
|
||||
### Building
|
||||
|
||||
$ git tag -a VERSION_NUMBER -m "DESCRIPTION"
|
||||
$ git push --tags
|
||||
Run CMake with these additional options:
|
||||
```
|
||||
-DBUILD_PYTHON_LANGUAGE_PACKAGE=ON
|
||||
```
|
||||
|
||||
### Loader gif creation from png sequence
|
||||
## Packaging
|
||||
|
||||
// from png sequence
|
||||
convert -delay 3 -loop 0 souretrail_*.png souretrail.gif
|
||||
### Windows
|
||||
|
||||
// less colors
|
||||
gifsicle --colors 255 souretrail.gif > color.gif
|
||||
#### Required Tools
|
||||
|
||||
// crop size
|
||||
gifsicle --crop 0,5+0x-5 color.gif > crop.gif
|
||||
##### Visual Studio
|
||||
|
||||
// add transparency
|
||||
gifsicle --unoptimize --disposal=previous --transparent="#FFFFFF" crop.gif > trans.gif
|
||||
##### Wix 3.11
|
||||
|
||||
// resize
|
||||
gifsicle --resize-height 18 trans.gif > loader.gif
|
||||
##### Wix extension for Visual Studio
|
||||
|
||||
##### WinRAR
|
||||
|
||||
Make sure to append these directories to your `PATH` environment variable:
|
||||
* VisualStudio/Common7/Tools
|
||||
* VisualStudio/Common7/IDE
|
||||
* .../Microsoft SDKs/Windows/v7.1A/Bin (for uuidgen in deploy script)
|
||||
* .../WiX Toolset v3.11/bin
|
||||
* .../WinRAR
|
||||
|
||||
Run `./script/deploy_windows.sh` script which will generate 32bit/64bit builds and packages these into a portable `.zip` file and a Wix-based Windows installer, each.
|
||||
|
||||
### macOS
|
||||
|
||||
After building, run the `bundle_install.sh` script within the build directory which will create a `Sourcetrail.app` bundle and generate a `Sourcetrail_<version>.dmg` container.
|
||||
|
||||
### Linux
|
||||
|
||||
Run `./script/buildonly.sh package`
|
||||
|
||||
|
||||
# How to Run the Tests
|
||||
|
||||
The automated test suite of Sourcetrail is powered by [Catch2](https://github.com/catchorg/Catch2). To run the tests, simply execute the `Sourcetrail_test` binary. Before executing, please make sure to set the working directory to `./bin/test`.
|
||||
|
||||
|
||||
# License
|
||||
|
||||
Sourcetrail is licensed under the [GNU General Public License Version 3](LICENSE.txt).
|
||||
|
||||
# Trademark
|
||||
|
||||
The "Sourcetrail" name is a trademark owned by Coati Software and is not included within the assets licensed under the GNU GPLv3.
|
||||
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
# Sponsors
|
||||
|
||||
Sponsors [via Patreon](https://www.patreon.com/sourcetrail).
|
||||
|
||||
## Legendary Coatis
|
||||
|
||||
* David Manouchehri
|
||||
* Manik Singhal
|
||||
* Mario van Beek
|
||||
* Timothee Besset
|
||||
|
||||
## Super Coatis
|
||||
|
||||
* Alexis Jeandet
|
||||
* Edward Gibbs
|
||||
* Jonathan Nemo
|
||||
* Louis St-Amour
|
||||
* Mario Lioni
|
||||
* Simon Pintarelli
|
||||
|
||||
## Regular Coatis
|
||||
|
||||
* Alex B
|
||||
* Andreas
|
||||
* Anton
|
||||
* Daniel Nissenbaum
|
||||
* Frederic Simonis
|
||||
* IndustrialRobot
|
||||
* Jason Stevens
|
||||
* Jeffrey Hofer
|
||||
* John Borland
|
||||
* kale
|
||||
* Matěj Týč
|
||||
* Matt Alexander
|
||||
* Nakul Dhotre
|
||||
* Nathan
|
||||
* Nathan Loofbourrow
|
||||
* Rui Pires
|
||||
* Sam Tuke
|
||||
* Stephan Roslen
|
||||
* Traxes
|
||||
* Werner de Groot
|
||||
* Yang, Wenbo
|
||||
|
||||
_Note: This file will be updated at the beginning of each month._
|
||||
@@ -1,47 +0,0 @@
|
||||
Copyright (C) 1999-2013,2014,2015 Jack Lloyd
|
||||
2001 Peter J Jones
|
||||
2004-2007 Justin Karneges
|
||||
2004 Vaclav Ovsik
|
||||
2005 Matthew Gregan
|
||||
2005-2006 Matt Johnston
|
||||
2006 Luca Piccarreta
|
||||
2007 Yves Jerschow
|
||||
2007-2008 FlexSecure GmbH
|
||||
2007-2008 Technische Universitat Darmstadt
|
||||
2007-2008,2010,2014 Falko Strenzke
|
||||
2007-2008 Martin Doering
|
||||
2007 Manuel Hartl
|
||||
2007 Christoph Ludwig
|
||||
2007 Patrick Sona
|
||||
2008 Copyright Projet SECRET, INRIA, Rocquencourt
|
||||
2008 Bhaskar Biswas and Nicolas Sendrier
|
||||
2008 Google Inc.
|
||||
2010 Olivier de Gaalon
|
||||
2012 Vojtech Kral
|
||||
2012-2014 Markus Wanner
|
||||
2013 Joel Low
|
||||
2014 cryptosource GmbH
|
||||
2014 Andrew Moon
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions, and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions, and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -1,174 +0,0 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
The Qt Toolkit is Copyright (C) 2015 The Qt Company Ltd.
|
||||
Contact: http://www.qt.io/licensing/
|
||||
|
||||
You may use, distribute and copy the Qt Toolkit under the terms of
|
||||
GNU Lesser General Public License version 3, which is displayed below.
|
||||
This license makes reference to the version 3 of the GNU General
|
||||
Public License, which you can find in the LICENSE.GPLv3 file.
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies of this
|
||||
licensedocument, but changing it is not allowed.
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the
|
||||
GNU General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort
|
||||
to ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this
|
||||
license document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that, taken
|
||||
together, effectively do not restrict modification of the portions of
|
||||
the Library contained in the Combined Work and reverse engineering for
|
||||
debugging such modifications, if you also do each of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this
|
||||
license document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of
|
||||
this License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with
|
||||
the Library. A suitable mechanism is one that (a) uses at run
|
||||
time a copy of the Library already present on the user's
|
||||
computer system, and (b) will operate properly with a modified
|
||||
version of the Library that is interface-compatible with the
|
||||
Linked Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would
|
||||
otherwise be required to provide such information under section 6
|
||||
of the GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the Application
|
||||
with a modified version of the Linked Version. (If you use option
|
||||
4d0, the Installation Information must accompany the Minimal
|
||||
Corresponding Source and Corresponding Application Code. If you
|
||||
use option 4d1, you must provide the Installation Information in
|
||||
the manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the Library
|
||||
side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities, conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of
|
||||
it is a work based on the Library, and explaining where to find
|
||||
the accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
as you received it specifies that a certain numbered version of the
|
||||
GNU Lesser General Public License "or any later version" applies to
|
||||
it, you have the option of following the terms and conditions either
|
||||
of that published version or of any later version published by the
|
||||
Free Software Foundation. If the Library as you received it does not
|
||||
specify a version number of the GNU Lesser General Public License,
|
||||
you may choose any version of the GNU Lesser General Public License
|
||||
ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the Library.
|
||||
@@ -179,7 +179,7 @@
|
||||
<struct></struct>
|
||||
<enum></enum>
|
||||
<typedef></typedef>
|
||||
<template_parameter_type></template_parameter_type>
|
||||
<template_parameter></template_parameter>
|
||||
<type_parameter></type_parameter>
|
||||
|
||||
<function></function>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
<config>
|
||||
<window>
|
||||
<background>#494949</background>
|
||||
<separator>#CCCCCC</separator>
|
||||
<scrollbar>
|
||||
<background>transparent</background>
|
||||
@@ -100,17 +101,18 @@
|
||||
<navigation>
|
||||
<background>#494949</background>
|
||||
<text>#CCCCCC</text>
|
||||
<line>#CCCCCC</line>
|
||||
<line>#FFF</line>
|
||||
</navigation>
|
||||
|
||||
<file>
|
||||
<background>#CCCCCC</background>
|
||||
<background>#AAAAAA</background>
|
||||
<hover>#999999</hover>
|
||||
|
||||
<title>
|
||||
<text>black</text>
|
||||
<normal>#CCCCCC</normal>
|
||||
<hover>#BBBBBB</hover>
|
||||
<press>#AAAAAA</press>
|
||||
<hover>#CCCCCC</hover>
|
||||
<press>#CCCCCC</press>
|
||||
<icon>black</icon>
|
||||
<border>#B1B1B1</border>
|
||||
<hatching>grey</hatching>
|
||||
@@ -142,7 +144,7 @@
|
||||
</line_number>
|
||||
|
||||
<syntax>
|
||||
<normal>#D4D4D4</normal>
|
||||
<text>#D4D4D4</text>
|
||||
<directive>#00A0B6</directive>
|
||||
<keyword>#00BCD6</keyword>
|
||||
<type>#FF5961</type>
|
||||
@@ -283,9 +285,6 @@
|
||||
<typedef>
|
||||
<like>type</like>
|
||||
</typedef>
|
||||
<template_parameter_type>
|
||||
<like>type</like>
|
||||
</template_parameter_type>
|
||||
<type_parameter>
|
||||
<like>type</like>
|
||||
</type_parameter>
|
||||
@@ -348,6 +347,9 @@
|
||||
<normal>#B05151</normal>
|
||||
</hatching>
|
||||
</namespace>
|
||||
<module>
|
||||
<like>namespace</like>
|
||||
</module>
|
||||
<package>
|
||||
<like>namespace</like>
|
||||
</package>
|
||||
@@ -374,6 +376,9 @@
|
||||
<macro>
|
||||
<like>file</like>
|
||||
</macro>
|
||||
<annotation>
|
||||
<like>file</like>
|
||||
</annotation>
|
||||
|
||||
<access>
|
||||
<fill>
|
||||
@@ -476,6 +481,14 @@
|
||||
<normal>#797979</normal>
|
||||
</default>
|
||||
|
||||
<type_use>
|
||||
<like>default</like>
|
||||
</type_use>
|
||||
|
||||
<inheritance>
|
||||
<like>default</like>
|
||||
</inheritance>
|
||||
|
||||
<override>
|
||||
<normal>#BA5ECC</normal>
|
||||
</override>
|
||||
@@ -489,31 +502,28 @@
|
||||
<normal>#00A0B6</normal>
|
||||
</use>
|
||||
|
||||
<template_argument>
|
||||
<normal>#D93D5F</normal>
|
||||
</template_argument>
|
||||
<type_argument>
|
||||
<like>template_argument</like>
|
||||
<normal>#D93D5F</normal>
|
||||
</type_argument>
|
||||
<template_default_argument>
|
||||
<like>template_argument</like>
|
||||
</template_default_argument>
|
||||
<template_specialization>
|
||||
<like>template_argument</like>
|
||||
<like>type_argument</like>
|
||||
</template_specialization>
|
||||
<template_member_specialization>
|
||||
<like>template_argument</like>
|
||||
</template_member_specialization>
|
||||
|
||||
<include>
|
||||
<normal>#4E82F6</normal>
|
||||
</include>
|
||||
<import>
|
||||
<like>include</like>
|
||||
</import>
|
||||
<macro_use>
|
||||
<normal>#4E82F6</normal>
|
||||
<like>include</like>
|
||||
</macro_use>
|
||||
<annotation_use>
|
||||
<like>include</like>
|
||||
</annotation_use>
|
||||
|
||||
<aggregation>
|
||||
<normal>#5D5D5D</normal>
|
||||
<normal>#666666</normal>
|
||||
<focus>#6D6D6D</focus>
|
||||
</aggregation>
|
||||
</edge>
|
||||
@@ -525,12 +535,21 @@
|
||||
<background>#808080</background>
|
||||
<border>#BEBEBE</border>
|
||||
<button>
|
||||
<text>white</text>
|
||||
<text>
|
||||
<normal>#CCC</normal>
|
||||
<hover>#CCC</hover>
|
||||
<press>white</press>
|
||||
</text>
|
||||
<border>
|
||||
<normal>#CCC</normal>
|
||||
<press>#EEE</press>
|
||||
</border>
|
||||
<background>
|
||||
<normal>#808080</normal>
|
||||
<hover>#505050</hover>
|
||||
<press>#494949</press>
|
||||
</background>
|
||||
<icon>#CCC</icon>
|
||||
</button>
|
||||
</bar>
|
||||
</tab>
|
||||
@@ -571,4 +590,25 @@
|
||||
<icon_disabled>#666666</icon_disabled>
|
||||
</button>
|
||||
</screen_search>
|
||||
|
||||
<custom_trail>
|
||||
<background>#494949</background>
|
||||
<alt_background>#808080</alt_background>
|
||||
<separator>#CCCCCC</separator>
|
||||
<text>#FFFFFF</text>
|
||||
<text_disabled>darkgrey</text_disabled>
|
||||
<background_disabled>#696969</background_disabled>
|
||||
<button>
|
||||
<default>
|
||||
<text>#FFFFFF</text>
|
||||
<background>#494949</background>
|
||||
<border>#FFFFFF</border>
|
||||
</default>
|
||||
<hover>
|
||||
<text>#494949</text>
|
||||
<background>#FFFFFF</background>
|
||||
<border>#FFFFFF</border>
|
||||
</hover>
|
||||
</button>
|
||||
</custom_trail>
|
||||
</config>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
<config>
|
||||
<window>
|
||||
<background>white</background>
|
||||
<separator>#A2A2A2</separator>
|
||||
<scrollbar>
|
||||
<background>transparent</background>
|
||||
@@ -27,27 +28,27 @@
|
||||
<background>white</background>
|
||||
|
||||
<button>
|
||||
<normal>#D0D0D0</normal>
|
||||
<hover>#A2A2A2</hover>
|
||||
<press>#727272</press>
|
||||
<disabled>#F2F2F2</disabled>
|
||||
<normal>#B0B0B0</normal>
|
||||
<hover>#828282</hover>
|
||||
<press>#626262</press>
|
||||
<disabled>#E2E2E2</disabled>
|
||||
<icon>white</icon>
|
||||
<icon_disabled>#CECECE</icon_disabled>
|
||||
<icon_disabled>#9E9E9E</icon_disabled>
|
||||
</button>
|
||||
|
||||
<field>
|
||||
<text>black</text>
|
||||
<background>#D0D0D0</background>
|
||||
<border>#D0D0D0</border>
|
||||
<highlight>#A2A2A2</highlight>
|
||||
<background>white</background>
|
||||
<border>#B0B0B0</border>
|
||||
<highlight>#929292</highlight>
|
||||
</field>
|
||||
|
||||
<popup>
|
||||
<text>black</text>
|
||||
<by_text>#525252</by_text>
|
||||
<background>white</background>
|
||||
<highlight>#D0D0D0</highlight>
|
||||
<line>#D0D0D0</line>
|
||||
<highlight>#C0C0C0</highlight>
|
||||
<line>#C0C0C0</line>
|
||||
</popup>
|
||||
|
||||
<query>
|
||||
@@ -67,7 +68,7 @@
|
||||
<text>black</text>
|
||||
</normal>
|
||||
<hover>
|
||||
<fill>#5EA071</fill>
|
||||
<fill>#6DB080</fill>
|
||||
<text>black</text>
|
||||
</hover>
|
||||
</command>
|
||||
@@ -104,13 +105,14 @@
|
||||
</navigation>
|
||||
|
||||
<file>
|
||||
<background>#D0D0D0</background>
|
||||
<background>#D8D8D8</background>
|
||||
<hover>#E0E0E0</hover>
|
||||
|
||||
<title>
|
||||
<text>black</text>
|
||||
<normal>#D0D0D0</normal>
|
||||
<hover>#B2B2B2</hover>
|
||||
<press>#A2A2A2</press>
|
||||
<hover>#C0C0C0</hover>
|
||||
<press>#B5B5B5</press>
|
||||
<icon>black</icon>
|
||||
<border>white</border>
|
||||
<hatching>bright</hatching>
|
||||
@@ -126,27 +128,27 @@
|
||||
<background>white</background>
|
||||
|
||||
<title>
|
||||
<text>#A0A0A0</text>
|
||||
<text>#909090</text>
|
||||
<background>transparent</background>
|
||||
<hover>#F5F5F5</hover>
|
||||
</title>
|
||||
|
||||
<line_number>
|
||||
<text>black</text>
|
||||
<inactive_text>#A0A0A0</inactive_text>
|
||||
<inactive_text>#909090</inactive_text>
|
||||
<background>white</background>
|
||||
<marker>
|
||||
<active>#D0D0D0</active>
|
||||
<active>#C0C0C0</active>
|
||||
<focus>#727272</focus>
|
||||
</marker>
|
||||
</line_number>
|
||||
|
||||
<syntax>
|
||||
<normal>black</normal>
|
||||
<text>black</text>
|
||||
<directive>#1B8856</directive>
|
||||
<keyword>#1B8856</keyword>
|
||||
<type>#C1492D</type>
|
||||
<comment>#6B9AB2</comment>
|
||||
<comment>#3D84A8</comment>
|
||||
<number>#C1315E</number>
|
||||
<quotation>#865F9E</quotation>
|
||||
<function>#B0812C</function>
|
||||
@@ -232,7 +234,7 @@
|
||||
<node>
|
||||
<default>
|
||||
<fill>
|
||||
<normal>#E6E6E6</normal>
|
||||
<normal>#D6D6D6</normal>
|
||||
</fill>
|
||||
<border>
|
||||
<normal>#3C3C3C</normal>
|
||||
@@ -244,7 +246,7 @@
|
||||
<normal>black</normal>
|
||||
</icon>
|
||||
<hatching>
|
||||
<normal>#F5F5F5</normal>
|
||||
<normal>#F0F0F0</normal>
|
||||
</hatching>
|
||||
</default>
|
||||
|
||||
@@ -275,9 +277,6 @@
|
||||
<typedef>
|
||||
<like>type</like>
|
||||
</typedef>
|
||||
<template_parameter_type>
|
||||
<like>type</like>
|
||||
</template_parameter_type>
|
||||
<type_parameter>
|
||||
<like>type</like>
|
||||
</type_parameter>
|
||||
@@ -301,15 +300,15 @@
|
||||
|
||||
<global_variable>
|
||||
<fill>
|
||||
<normal>#7BB5D4</normal>
|
||||
<focus>#42A1D4</focus>
|
||||
<normal>#81C1E3</normal>
|
||||
<focus>#72B3D6</focus>
|
||||
</fill>
|
||||
<border>
|
||||
<normal>transparent</normal>
|
||||
<focus>#3C3C3C</focus>
|
||||
</border>
|
||||
<hatching>
|
||||
<normal>#B3D4E5</normal>
|
||||
<normal>#BBDDED</normal>
|
||||
</hatching>
|
||||
</global_variable>
|
||||
<field>
|
||||
@@ -337,6 +336,9 @@
|
||||
<normal>#FFDEDE</normal>
|
||||
</hatching>
|
||||
</namespace>
|
||||
<module>
|
||||
<like>namespace</like>
|
||||
</module>
|
||||
<package>
|
||||
<like>namespace</like>
|
||||
</package>
|
||||
@@ -357,6 +359,9 @@
|
||||
<macro>
|
||||
<like>file</like>
|
||||
</macro>
|
||||
<annotation>
|
||||
<like>file</like>
|
||||
</annotation>
|
||||
|
||||
<access>
|
||||
<fill>
|
||||
@@ -450,38 +455,50 @@
|
||||
<normal>#878787</normal>
|
||||
</default>
|
||||
|
||||
<type_use>
|
||||
<like>default</like>
|
||||
</type_use>
|
||||
|
||||
<inheritance>
|
||||
<like>default</like>
|
||||
</inheritance>
|
||||
|
||||
<override>
|
||||
<normal>#A37ACC</normal>
|
||||
</override>
|
||||
|
||||
<call>
|
||||
<normal>#F4BC3D</normal>
|
||||
<trail_focus>#878787</trail_focus>
|
||||
<trail_focus>#F56B3D</trail_focus>
|
||||
</call>
|
||||
|
||||
<use>
|
||||
<normal>#3190BA</normal>
|
||||
<normal>#4B9FC4</normal>
|
||||
</use>
|
||||
|
||||
<template_argument>
|
||||
<normal>#CF6B7C</normal>
|
||||
</template_argument>
|
||||
<type_argument>
|
||||
<like>template_argument</like>
|
||||
<like>#CF6B7C</like>
|
||||
</type_argument>
|
||||
<template_default_argument>
|
||||
<like>template_argument</like>
|
||||
</template_default_argument>
|
||||
<template_specialization>
|
||||
<like>template_argument</like>
|
||||
<like>type_argument</like>
|
||||
</template_specialization>
|
||||
<template_member_specialization>
|
||||
<like>template_argument</like>
|
||||
</template_member_specialization>
|
||||
|
||||
<include>
|
||||
<normal>#719660</normal>
|
||||
</include>
|
||||
<import>
|
||||
<like>include</like>
|
||||
</import>
|
||||
<macro_use>
|
||||
<like>include</like>
|
||||
</macro_use>
|
||||
<annotation_use>
|
||||
<like>include</like>
|
||||
</annotation_use>
|
||||
|
||||
<aggregation>
|
||||
<normal>#DDD</normal>
|
||||
<focus>#CCC</focus>
|
||||
<normal>#CCC</normal>
|
||||
<focus>#BBB</focus>
|
||||
</aggregation>
|
||||
</edge>
|
||||
</graph>
|
||||
@@ -490,14 +507,23 @@
|
||||
<background>white</background>
|
||||
<bar>
|
||||
<background>#E0E0E0</background>
|
||||
<border>#BEBEBE</border>
|
||||
<border>#A2A2A2</border>
|
||||
<button>
|
||||
<text>black</text>
|
||||
<text>
|
||||
<normal>#555</normal>
|
||||
<hover>#555</hover>
|
||||
<press>black</press>
|
||||
</text>
|
||||
<border>
|
||||
<normal>#888</normal>
|
||||
<press>#777</press>
|
||||
</border>
|
||||
<background>
|
||||
<normal>#E0E0E0</normal>
|
||||
<hover>#F0F0F0</hover>
|
||||
<press>#FFFFFF</press>
|
||||
</background>
|
||||
<icon>#555</icon>
|
||||
</button>
|
||||
</bar>
|
||||
</tab>
|
||||
@@ -538,4 +564,25 @@
|
||||
<icon_disabled>#CECECE</icon_disabled>
|
||||
</button>
|
||||
</screen_search>
|
||||
|
||||
<custom_trail>
|
||||
<background>white</background>
|
||||
<alt_background>#F5F5F5</alt_background>
|
||||
<separator>#C0C0C0</separator>
|
||||
<text>black</text>
|
||||
<text_disabled>#A0A0A0</text_disabled>
|
||||
<background_disabled>#F2F2F2</background_disabled>
|
||||
<button>
|
||||
<default>
|
||||
<text>black</text>
|
||||
<background>white</background>
|
||||
<border>lightgray</border>
|
||||
</default>
|
||||
<hover>
|
||||
<text>white</text>
|
||||
<background>#2D3C86</background>
|
||||
<border>lightgray</border>
|
||||
</hover>
|
||||
</button>
|
||||
</custom_trail>
|
||||
</config>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
<config>
|
||||
<window>
|
||||
<background>#272728</background>
|
||||
<separator>#CCC</separator>
|
||||
<scrollbar>
|
||||
<background>transparent</background>
|
||||
@@ -100,11 +101,12 @@
|
||||
<navigation>
|
||||
<background>#272728</background>
|
||||
<text>#C5C5C5</text>
|
||||
<line>#CCC</line>
|
||||
<line>#999</line>
|
||||
</navigation>
|
||||
|
||||
<file>
|
||||
<background>#5C5C5C</background>
|
||||
<hover>#6C6C6C</hover>
|
||||
|
||||
<title>
|
||||
<text>#F7F7F7</text>
|
||||
@@ -142,7 +144,7 @@
|
||||
</line_number>
|
||||
|
||||
<syntax>
|
||||
<normal>#F7F7F7</normal>
|
||||
<text>#F7F7F7</text>
|
||||
<directive>#1F9C62</directive>
|
||||
<keyword>#1F9C62</keyword>
|
||||
<type>#D95233</type>
|
||||
@@ -278,9 +280,6 @@
|
||||
<typedef>
|
||||
<like>type</like>
|
||||
</typedef>
|
||||
<template_parameter_type>
|
||||
<like>type</like>
|
||||
</template_parameter_type>
|
||||
<type_parameter>
|
||||
<like>type</like>
|
||||
</type_parameter>
|
||||
@@ -340,6 +339,9 @@
|
||||
<normal>#521B1F</normal>
|
||||
</hatching>
|
||||
</namespace>
|
||||
<module>
|
||||
<like>namespace</like>
|
||||
</module>
|
||||
<package>
|
||||
<like>namespace</like>
|
||||
</package>
|
||||
@@ -360,6 +362,9 @@
|
||||
<macro>
|
||||
<like>file</like>
|
||||
</macro>
|
||||
<annotation>
|
||||
<like>file</like>
|
||||
</annotation>
|
||||
|
||||
<access>
|
||||
<fill>
|
||||
@@ -453,6 +458,14 @@
|
||||
<normal>#797979</normal>
|
||||
</default>
|
||||
|
||||
<type_use>
|
||||
<like>default</like>
|
||||
</type_use>
|
||||
|
||||
<inheritance>
|
||||
<like>default</like>
|
||||
</inheritance>
|
||||
|
||||
<override>
|
||||
<normal>#8A5A94</normal>
|
||||
</override>
|
||||
@@ -463,31 +476,28 @@
|
||||
</call>
|
||||
|
||||
<use>
|
||||
<normal>#2A6484</normal>
|
||||
<normal>#2D6A8C</normal>
|
||||
</use>
|
||||
|
||||
<template_argument>
|
||||
<normal>#C14057</normal>
|
||||
</template_argument>
|
||||
<type_argument>
|
||||
<like>template_argument</like>
|
||||
<normal>#C14057</normal>
|
||||
</type_argument>
|
||||
<template_default_argument>
|
||||
<like>template_argument</like>
|
||||
</template_default_argument>
|
||||
<template_specialization>
|
||||
<like>template_argument</like>
|
||||
<like>type_argument</like>
|
||||
</template_specialization>
|
||||
<template_member_specialization>
|
||||
<like>template_argument</like>
|
||||
</template_member_specialization>
|
||||
|
||||
<include>
|
||||
<normal>#247368</normal>
|
||||
</include>
|
||||
<import>
|
||||
<like>include</like>
|
||||
</import>
|
||||
<macro_use>
|
||||
<normal>#247368</normal>
|
||||
<like>include</like>
|
||||
</macro_use>
|
||||
<annotation_use>
|
||||
<like>include</like>
|
||||
</annotation_use>
|
||||
|
||||
<aggregation>
|
||||
<normal>#4D4D4D</normal>
|
||||
@@ -502,12 +512,21 @@
|
||||
<background>#555555</background>
|
||||
<border>#BEBEBE</border>
|
||||
<button>
|
||||
<text>white</text>
|
||||
<text>
|
||||
<normal>#AAA</normal>
|
||||
<hover>#AAA</hover>
|
||||
<press>white</press>
|
||||
</text>
|
||||
<border>
|
||||
<normal>#777</normal>
|
||||
<press>#999</press>
|
||||
</border>
|
||||
<background>
|
||||
<normal>#555555</normal>
|
||||
<hover>#2F2F2F</hover>
|
||||
<press>#272728</press>
|
||||
</background>
|
||||
<icon>#AAA</icon>
|
||||
</button>
|
||||
</bar>
|
||||
</tab>
|
||||
@@ -548,4 +567,25 @@
|
||||
<icon_disabled>#555555</icon_disabled>
|
||||
</button>
|
||||
</screen_search>
|
||||
|
||||
<custom_trail>
|
||||
<background>#272728</background>
|
||||
<alt_background>#555555</alt_background>
|
||||
<separator>#CCC</separator>
|
||||
<text>#F7F7F7</text>
|
||||
<text_disabled>darkgrey</text_disabled>
|
||||
<background_disabled>#474748</background_disabled>
|
||||
<button>
|
||||
<default>
|
||||
<text>#F7F7F7</text>
|
||||
<background>#272728</background>
|
||||
<border>#F7F7F7</border>
|
||||
</default>
|
||||
<hover>
|
||||
<text>#272728</text>
|
||||
<background>#F7F7F7</background>
|
||||
<border>#F7F7F7</border>
|
||||
</hover>
|
||||
</button>
|
||||
</custom_trail>
|
||||
</config>
|
||||
|
||||
@@ -54,7 +54,7 @@ struct dim3;
|
||||
#define __DELETE
|
||||
#endif
|
||||
|
||||
// Make sure nobody can create instances of the special varible types. nvcc
|
||||
// Make sure nobody can create instances of the special variable types. nvcc
|
||||
// also disallows taking address of special variables, so we disable address-of
|
||||
// operator as well.
|
||||
#define __CUDA_DISALLOW_BUILTINVAR_ACCESS(TypeName) \
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -277,6 +277,9 @@ inline __device__ long long __ldg(const long long *ptr) {
|
||||
inline __device__ unsigned char __ldg(const unsigned char *ptr) {
|
||||
return __nvvm_ldg_uc(ptr);
|
||||
}
|
||||
inline __device__ signed char __ldg(const signed char *ptr) {
|
||||
return __nvvm_ldg_uc((const unsigned char *)ptr);
|
||||
}
|
||||
inline __device__ unsigned short __ldg(const unsigned short *ptr) {
|
||||
return __nvvm_ldg_us(ptr);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,466 @@
|
||||
/*===-- __clang_cuda_libdevice_declares.h - decls for libdevice functions --===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef __CLANG_CUDA_LIBDEVICE_DECLARES_H__
|
||||
#define __CLANG_CUDA_LIBDEVICE_DECLARES_H__
|
||||
|
||||
extern "C" {
|
||||
|
||||
__device__ int __nv_abs(int __a);
|
||||
__device__ double __nv_acos(double __a);
|
||||
__device__ float __nv_acosf(float __a);
|
||||
__device__ double __nv_acosh(double __a);
|
||||
__device__ float __nv_acoshf(float __a);
|
||||
__device__ double __nv_asin(double __a);
|
||||
__device__ float __nv_asinf(float __a);
|
||||
__device__ double __nv_asinh(double __a);
|
||||
__device__ float __nv_asinhf(float __a);
|
||||
__device__ double __nv_atan2(double __a, double __b);
|
||||
__device__ float __nv_atan2f(float __a, float __b);
|
||||
__device__ double __nv_atan(double __a);
|
||||
__device__ float __nv_atanf(float __a);
|
||||
__device__ double __nv_atanh(double __a);
|
||||
__device__ float __nv_atanhf(float __a);
|
||||
__device__ int __nv_brev(int __a);
|
||||
__device__ long long __nv_brevll(long long __a);
|
||||
__device__ int __nv_byte_perm(int __a, int __b, int __c);
|
||||
__device__ double __nv_cbrt(double __a);
|
||||
__device__ float __nv_cbrtf(float __a);
|
||||
__device__ double __nv_ceil(double __a);
|
||||
__device__ float __nv_ceilf(float __a);
|
||||
__device__ int __nv_clz(int __a);
|
||||
__device__ int __nv_clzll(long long __a);
|
||||
__device__ double __nv_copysign(double __a, double __b);
|
||||
__device__ float __nv_copysignf(float __a, float __b);
|
||||
__device__ double __nv_cos(double __a);
|
||||
__device__ float __nv_cosf(float __a);
|
||||
__device__ double __nv_cosh(double __a);
|
||||
__device__ float __nv_coshf(float __a);
|
||||
__device__ double __nv_cospi(double __a);
|
||||
__device__ float __nv_cospif(float __a);
|
||||
__device__ double __nv_cyl_bessel_i0(double __a);
|
||||
__device__ float __nv_cyl_bessel_i0f(float __a);
|
||||
__device__ double __nv_cyl_bessel_i1(double __a);
|
||||
__device__ float __nv_cyl_bessel_i1f(float __a);
|
||||
__device__ double __nv_dadd_rd(double __a, double __b);
|
||||
__device__ double __nv_dadd_rn(double __a, double __b);
|
||||
__device__ double __nv_dadd_ru(double __a, double __b);
|
||||
__device__ double __nv_dadd_rz(double __a, double __b);
|
||||
__device__ double __nv_ddiv_rd(double __a, double __b);
|
||||
__device__ double __nv_ddiv_rn(double __a, double __b);
|
||||
__device__ double __nv_ddiv_ru(double __a, double __b);
|
||||
__device__ double __nv_ddiv_rz(double __a, double __b);
|
||||
__device__ double __nv_dmul_rd(double __a, double __b);
|
||||
__device__ double __nv_dmul_rn(double __a, double __b);
|
||||
__device__ double __nv_dmul_ru(double __a, double __b);
|
||||
__device__ double __nv_dmul_rz(double __a, double __b);
|
||||
__device__ float __nv_double2float_rd(double __a);
|
||||
__device__ float __nv_double2float_rn(double __a);
|
||||
__device__ float __nv_double2float_ru(double __a);
|
||||
__device__ float __nv_double2float_rz(double __a);
|
||||
__device__ int __nv_double2hiint(double __a);
|
||||
__device__ int __nv_double2int_rd(double __a);
|
||||
__device__ int __nv_double2int_rn(double __a);
|
||||
__device__ int __nv_double2int_ru(double __a);
|
||||
__device__ int __nv_double2int_rz(double __a);
|
||||
__device__ long long __nv_double2ll_rd(double __a);
|
||||
__device__ long long __nv_double2ll_rn(double __a);
|
||||
__device__ long long __nv_double2ll_ru(double __a);
|
||||
__device__ long long __nv_double2ll_rz(double __a);
|
||||
__device__ int __nv_double2loint(double __a);
|
||||
__device__ unsigned int __nv_double2uint_rd(double __a);
|
||||
__device__ unsigned int __nv_double2uint_rn(double __a);
|
||||
__device__ unsigned int __nv_double2uint_ru(double __a);
|
||||
__device__ unsigned int __nv_double2uint_rz(double __a);
|
||||
__device__ unsigned long long __nv_double2ull_rd(double __a);
|
||||
__device__ unsigned long long __nv_double2ull_rn(double __a);
|
||||
__device__ unsigned long long __nv_double2ull_ru(double __a);
|
||||
__device__ unsigned long long __nv_double2ull_rz(double __a);
|
||||
__device__ unsigned long long __nv_double_as_longlong(double __a);
|
||||
__device__ double __nv_drcp_rd(double __a);
|
||||
__device__ double __nv_drcp_rn(double __a);
|
||||
__device__ double __nv_drcp_ru(double __a);
|
||||
__device__ double __nv_drcp_rz(double __a);
|
||||
__device__ double __nv_dsqrt_rd(double __a);
|
||||
__device__ double __nv_dsqrt_rn(double __a);
|
||||
__device__ double __nv_dsqrt_ru(double __a);
|
||||
__device__ double __nv_dsqrt_rz(double __a);
|
||||
__device__ double __nv_dsub_rd(double __a, double __b);
|
||||
__device__ double __nv_dsub_rn(double __a, double __b);
|
||||
__device__ double __nv_dsub_ru(double __a, double __b);
|
||||
__device__ double __nv_dsub_rz(double __a, double __b);
|
||||
__device__ double __nv_erfc(double __a);
|
||||
__device__ float __nv_erfcf(float __a);
|
||||
__device__ double __nv_erfcinv(double __a);
|
||||
__device__ float __nv_erfcinvf(float __a);
|
||||
__device__ double __nv_erfcx(double __a);
|
||||
__device__ float __nv_erfcxf(float __a);
|
||||
__device__ double __nv_erf(double __a);
|
||||
__device__ float __nv_erff(float __a);
|
||||
__device__ double __nv_erfinv(double __a);
|
||||
__device__ float __nv_erfinvf(float __a);
|
||||
__device__ double __nv_exp10(double __a);
|
||||
__device__ float __nv_exp10f(float __a);
|
||||
__device__ double __nv_exp2(double __a);
|
||||
__device__ float __nv_exp2f(float __a);
|
||||
__device__ double __nv_exp(double __a);
|
||||
__device__ float __nv_expf(float __a);
|
||||
__device__ double __nv_expm1(double __a);
|
||||
__device__ float __nv_expm1f(float __a);
|
||||
__device__ double __nv_fabs(double __a);
|
||||
__device__ float __nv_fabsf(float __a);
|
||||
__device__ float __nv_fadd_rd(float __a, float __b);
|
||||
__device__ float __nv_fadd_rn(float __a, float __b);
|
||||
__device__ float __nv_fadd_ru(float __a, float __b);
|
||||
__device__ float __nv_fadd_rz(float __a, float __b);
|
||||
__device__ float __nv_fast_cosf(float __a);
|
||||
__device__ float __nv_fast_exp10f(float __a);
|
||||
__device__ float __nv_fast_expf(float __a);
|
||||
__device__ float __nv_fast_fdividef(float __a, float __b);
|
||||
__device__ float __nv_fast_log10f(float __a);
|
||||
__device__ float __nv_fast_log2f(float __a);
|
||||
__device__ float __nv_fast_logf(float __a);
|
||||
__device__ float __nv_fast_powf(float __a, float __b);
|
||||
__device__ void __nv_fast_sincosf(float __a, float *__sptr, float *__cptr);
|
||||
__device__ float __nv_fast_sinf(float __a);
|
||||
__device__ float __nv_fast_tanf(float __a);
|
||||
__device__ double __nv_fdim(double __a, double __b);
|
||||
__device__ float __nv_fdimf(float __a, float __b);
|
||||
__device__ float __nv_fdiv_rd(float __a, float __b);
|
||||
__device__ float __nv_fdiv_rn(float __a, float __b);
|
||||
__device__ float __nv_fdiv_ru(float __a, float __b);
|
||||
__device__ float __nv_fdiv_rz(float __a, float __b);
|
||||
__device__ int __nv_ffs(int __a);
|
||||
__device__ int __nv_ffsll(long long __a);
|
||||
__device__ int __nv_finitef(float __a);
|
||||
__device__ unsigned short __nv_float2half_rn(float __a);
|
||||
__device__ int __nv_float2int_rd(float __a);
|
||||
__device__ int __nv_float2int_rn(float __a);
|
||||
__device__ int __nv_float2int_ru(float __a);
|
||||
__device__ int __nv_float2int_rz(float __a);
|
||||
__device__ long long __nv_float2ll_rd(float __a);
|
||||
__device__ long long __nv_float2ll_rn(float __a);
|
||||
__device__ long long __nv_float2ll_ru(float __a);
|
||||
__device__ long long __nv_float2ll_rz(float __a);
|
||||
__device__ unsigned int __nv_float2uint_rd(float __a);
|
||||
__device__ unsigned int __nv_float2uint_rn(float __a);
|
||||
__device__ unsigned int __nv_float2uint_ru(float __a);
|
||||
__device__ unsigned int __nv_float2uint_rz(float __a);
|
||||
__device__ unsigned long long __nv_float2ull_rd(float __a);
|
||||
__device__ unsigned long long __nv_float2ull_rn(float __a);
|
||||
__device__ unsigned long long __nv_float2ull_ru(float __a);
|
||||
__device__ unsigned long long __nv_float2ull_rz(float __a);
|
||||
__device__ int __nv_float_as_int(float __a);
|
||||
__device__ unsigned int __nv_float_as_uint(float __a);
|
||||
__device__ double __nv_floor(double __a);
|
||||
__device__ float __nv_floorf(float __a);
|
||||
__device__ double __nv_fma(double __a, double __b, double __c);
|
||||
__device__ float __nv_fmaf(float __a, float __b, float __c);
|
||||
__device__ float __nv_fmaf_ieee_rd(float __a, float __b, float __c);
|
||||
__device__ float __nv_fmaf_ieee_rn(float __a, float __b, float __c);
|
||||
__device__ float __nv_fmaf_ieee_ru(float __a, float __b, float __c);
|
||||
__device__ float __nv_fmaf_ieee_rz(float __a, float __b, float __c);
|
||||
__device__ float __nv_fmaf_rd(float __a, float __b, float __c);
|
||||
__device__ float __nv_fmaf_rn(float __a, float __b, float __c);
|
||||
__device__ float __nv_fmaf_ru(float __a, float __b, float __c);
|
||||
__device__ float __nv_fmaf_rz(float __a, float __b, float __c);
|
||||
__device__ double __nv_fma_rd(double __a, double __b, double __c);
|
||||
__device__ double __nv_fma_rn(double __a, double __b, double __c);
|
||||
__device__ double __nv_fma_ru(double __a, double __b, double __c);
|
||||
__device__ double __nv_fma_rz(double __a, double __b, double __c);
|
||||
__device__ double __nv_fmax(double __a, double __b);
|
||||
__device__ float __nv_fmaxf(float __a, float __b);
|
||||
__device__ double __nv_fmin(double __a, double __b);
|
||||
__device__ float __nv_fminf(float __a, float __b);
|
||||
__device__ double __nv_fmod(double __a, double __b);
|
||||
__device__ float __nv_fmodf(float __a, float __b);
|
||||
__device__ float __nv_fmul_rd(float __a, float __b);
|
||||
__device__ float __nv_fmul_rn(float __a, float __b);
|
||||
__device__ float __nv_fmul_ru(float __a, float __b);
|
||||
__device__ float __nv_fmul_rz(float __a, float __b);
|
||||
__device__ float __nv_frcp_rd(float __a);
|
||||
__device__ float __nv_frcp_rn(float __a);
|
||||
__device__ float __nv_frcp_ru(float __a);
|
||||
__device__ float __nv_frcp_rz(float __a);
|
||||
__device__ double __nv_frexp(double __a, int *__b);
|
||||
__device__ float __nv_frexpf(float __a, int *__b);
|
||||
__device__ float __nv_frsqrt_rn(float __a);
|
||||
__device__ float __nv_fsqrt_rd(float __a);
|
||||
__device__ float __nv_fsqrt_rn(float __a);
|
||||
__device__ float __nv_fsqrt_ru(float __a);
|
||||
__device__ float __nv_fsqrt_rz(float __a);
|
||||
__device__ float __nv_fsub_rd(float __a, float __b);
|
||||
__device__ float __nv_fsub_rn(float __a, float __b);
|
||||
__device__ float __nv_fsub_ru(float __a, float __b);
|
||||
__device__ float __nv_fsub_rz(float __a, float __b);
|
||||
__device__ int __nv_hadd(int __a, int __b);
|
||||
__device__ float __nv_half2float(unsigned short __h);
|
||||
__device__ double __nv_hiloint2double(int __a, int __b);
|
||||
__device__ double __nv_hypot(double __a, double __b);
|
||||
__device__ float __nv_hypotf(float __a, float __b);
|
||||
__device__ int __nv_ilogb(double __a);
|
||||
__device__ int __nv_ilogbf(float __a);
|
||||
__device__ double __nv_int2double_rn(int __a);
|
||||
__device__ float __nv_int2float_rd(int __a);
|
||||
__device__ float __nv_int2float_rn(int __a);
|
||||
__device__ float __nv_int2float_ru(int __a);
|
||||
__device__ float __nv_int2float_rz(int __a);
|
||||
__device__ float __nv_int_as_float(int __a);
|
||||
__device__ int __nv_isfinited(double __a);
|
||||
__device__ int __nv_isinfd(double __a);
|
||||
__device__ int __nv_isinff(float __a);
|
||||
__device__ int __nv_isnand(double __a);
|
||||
__device__ int __nv_isnanf(float __a);
|
||||
__device__ double __nv_j0(double __a);
|
||||
__device__ float __nv_j0f(float __a);
|
||||
__device__ double __nv_j1(double __a);
|
||||
__device__ float __nv_j1f(float __a);
|
||||
__device__ float __nv_jnf(int __a, float __b);
|
||||
__device__ double __nv_jn(int __a, double __b);
|
||||
__device__ double __nv_ldexp(double __a, int __b);
|
||||
__device__ float __nv_ldexpf(float __a, int __b);
|
||||
__device__ double __nv_lgamma(double __a);
|
||||
__device__ float __nv_lgammaf(float __a);
|
||||
__device__ double __nv_ll2double_rd(long long __a);
|
||||
__device__ double __nv_ll2double_rn(long long __a);
|
||||
__device__ double __nv_ll2double_ru(long long __a);
|
||||
__device__ double __nv_ll2double_rz(long long __a);
|
||||
__device__ float __nv_ll2float_rd(long long __a);
|
||||
__device__ float __nv_ll2float_rn(long long __a);
|
||||
__device__ float __nv_ll2float_ru(long long __a);
|
||||
__device__ float __nv_ll2float_rz(long long __a);
|
||||
__device__ long long __nv_llabs(long long __a);
|
||||
__device__ long long __nv_llmax(long long __a, long long __b);
|
||||
__device__ long long __nv_llmin(long long __a, long long __b);
|
||||
__device__ long long __nv_llrint(double __a);
|
||||
__device__ long long __nv_llrintf(float __a);
|
||||
__device__ long long __nv_llround(double __a);
|
||||
__device__ long long __nv_llroundf(float __a);
|
||||
__device__ double __nv_log10(double __a);
|
||||
__device__ float __nv_log10f(float __a);
|
||||
__device__ double __nv_log1p(double __a);
|
||||
__device__ float __nv_log1pf(float __a);
|
||||
__device__ double __nv_log2(double __a);
|
||||
__device__ float __nv_log2f(float __a);
|
||||
__device__ double __nv_logb(double __a);
|
||||
__device__ float __nv_logbf(float __a);
|
||||
__device__ double __nv_log(double __a);
|
||||
__device__ float __nv_logf(float __a);
|
||||
__device__ double __nv_longlong_as_double(long long __a);
|
||||
__device__ int __nv_max(int __a, int __b);
|
||||
__device__ int __nv_min(int __a, int __b);
|
||||
__device__ double __nv_modf(double __a, double *__b);
|
||||
__device__ float __nv_modff(float __a, float *__b);
|
||||
__device__ int __nv_mul24(int __a, int __b);
|
||||
__device__ long long __nv_mul64hi(long long __a, long long __b);
|
||||
__device__ int __nv_mulhi(int __a, int __b);
|
||||
__device__ double __nv_nan(const signed char *__a);
|
||||
__device__ float __nv_nanf(const signed char *__a);
|
||||
__device__ double __nv_nearbyint(double __a);
|
||||
__device__ float __nv_nearbyintf(float __a);
|
||||
__device__ double __nv_nextafter(double __a, double __b);
|
||||
__device__ float __nv_nextafterf(float __a, float __b);
|
||||
__device__ double __nv_norm3d(double __a, double __b, double __c);
|
||||
__device__ float __nv_norm3df(float __a, float __b, float __c);
|
||||
__device__ double __nv_norm4d(double __a, double __b, double __c, double __d);
|
||||
__device__ float __nv_norm4df(float __a, float __b, float __c, float __d);
|
||||
__device__ double __nv_normcdf(double __a);
|
||||
__device__ float __nv_normcdff(float __a);
|
||||
__device__ double __nv_normcdfinv(double __a);
|
||||
__device__ float __nv_normcdfinvf(float __a);
|
||||
__device__ float __nv_normf(int __a, const float *__b);
|
||||
__device__ double __nv_norm(int __a, const double *__b);
|
||||
__device__ int __nv_popc(int __a);
|
||||
__device__ int __nv_popcll(long long __a);
|
||||
__device__ double __nv_pow(double __a, double __b);
|
||||
__device__ float __nv_powf(float __a, float __b);
|
||||
__device__ double __nv_powi(double __a, int __b);
|
||||
__device__ float __nv_powif(float __a, int __b);
|
||||
__device__ double __nv_rcbrt(double __a);
|
||||
__device__ float __nv_rcbrtf(float __a);
|
||||
__device__ double __nv_rcp64h(double __a);
|
||||
__device__ double __nv_remainder(double __a, double __b);
|
||||
__device__ float __nv_remainderf(float __a, float __b);
|
||||
__device__ double __nv_remquo(double __a, double __b, int *__c);
|
||||
__device__ float __nv_remquof(float __a, float __b, int *__c);
|
||||
__device__ int __nv_rhadd(int __a, int __b);
|
||||
__device__ double __nv_rhypot(double __a, double __b);
|
||||
__device__ float __nv_rhypotf(float __a, float __b);
|
||||
__device__ double __nv_rint(double __a);
|
||||
__device__ float __nv_rintf(float __a);
|
||||
__device__ double __nv_rnorm3d(double __a, double __b, double __c);
|
||||
__device__ float __nv_rnorm3df(float __a, float __b, float __c);
|
||||
__device__ double __nv_rnorm4d(double __a, double __b, double __c, double __d);
|
||||
__device__ float __nv_rnorm4df(float __a, float __b, float __c, float __d);
|
||||
__device__ float __nv_rnormf(int __a, const float *__b);
|
||||
__device__ double __nv_rnorm(int __a, const double *__b);
|
||||
__device__ double __nv_round(double __a);
|
||||
__device__ float __nv_roundf(float __a);
|
||||
__device__ double __nv_rsqrt(double __a);
|
||||
__device__ float __nv_rsqrtf(float __a);
|
||||
__device__ int __nv_sad(int __a, int __b, int __c);
|
||||
__device__ float __nv_saturatef(float __a);
|
||||
__device__ double __nv_scalbn(double __a, int __b);
|
||||
__device__ float __nv_scalbnf(float __a, int __b);
|
||||
__device__ int __nv_signbitd(double __a);
|
||||
__device__ int __nv_signbitf(float __a);
|
||||
__device__ void __nv_sincos(double __a, double *__b, double *__c);
|
||||
__device__ void __nv_sincosf(float __a, float *__b, float *__c);
|
||||
__device__ void __nv_sincospi(double __a, double *__b, double *__c);
|
||||
__device__ void __nv_sincospif(float __a, float *__b, float *__c);
|
||||
__device__ double __nv_sin(double __a);
|
||||
__device__ float __nv_sinf(float __a);
|
||||
__device__ double __nv_sinh(double __a);
|
||||
__device__ float __nv_sinhf(float __a);
|
||||
__device__ double __nv_sinpi(double __a);
|
||||
__device__ float __nv_sinpif(float __a);
|
||||
__device__ double __nv_sqrt(double __a);
|
||||
__device__ float __nv_sqrtf(float __a);
|
||||
__device__ double __nv_tan(double __a);
|
||||
__device__ float __nv_tanf(float __a);
|
||||
__device__ double __nv_tanh(double __a);
|
||||
__device__ float __nv_tanhf(float __a);
|
||||
__device__ double __nv_tgamma(double __a);
|
||||
__device__ float __nv_tgammaf(float __a);
|
||||
__device__ double __nv_trunc(double __a);
|
||||
__device__ float __nv_truncf(float __a);
|
||||
__device__ int __nv_uhadd(unsigned int __a, unsigned int __b);
|
||||
__device__ double __nv_uint2double_rn(unsigned int __i);
|
||||
__device__ float __nv_uint2float_rd(unsigned int __a);
|
||||
__device__ float __nv_uint2float_rn(unsigned int __a);
|
||||
__device__ float __nv_uint2float_ru(unsigned int __a);
|
||||
__device__ float __nv_uint2float_rz(unsigned int __a);
|
||||
__device__ float __nv_uint_as_float(unsigned int __a);
|
||||
__device__ double __nv_ull2double_rd(unsigned long long __a);
|
||||
__device__ double __nv_ull2double_rn(unsigned long long __a);
|
||||
__device__ double __nv_ull2double_ru(unsigned long long __a);
|
||||
__device__ double __nv_ull2double_rz(unsigned long long __a);
|
||||
__device__ float __nv_ull2float_rd(unsigned long long __a);
|
||||
__device__ float __nv_ull2float_rn(unsigned long long __a);
|
||||
__device__ float __nv_ull2float_ru(unsigned long long __a);
|
||||
__device__ float __nv_ull2float_rz(unsigned long long __a);
|
||||
__device__ unsigned long long __nv_ullmax(unsigned long long __a,
|
||||
unsigned long long __b);
|
||||
__device__ unsigned long long __nv_ullmin(unsigned long long __a,
|
||||
unsigned long long __b);
|
||||
__device__ unsigned int __nv_umax(unsigned int __a, unsigned int __b);
|
||||
__device__ unsigned int __nv_umin(unsigned int __a, unsigned int __b);
|
||||
__device__ unsigned int __nv_umul24(unsigned int __a, unsigned int __b);
|
||||
__device__ unsigned long long __nv_umul64hi(unsigned long long __a,
|
||||
unsigned long long __b);
|
||||
__device__ unsigned int __nv_umulhi(unsigned int __a, unsigned int __b);
|
||||
__device__ unsigned int __nv_urhadd(unsigned int __a, unsigned int __b);
|
||||
__device__ unsigned int __nv_usad(unsigned int __a, unsigned int __b,
|
||||
unsigned int __c);
|
||||
#if CUDA_VERSION >= 9000 && CUDA_VERSION < 9020
|
||||
__device__ int __nv_vabs2(int __a);
|
||||
__device__ int __nv_vabs4(int __a);
|
||||
__device__ int __nv_vabsdiffs2(int __a, int __b);
|
||||
__device__ int __nv_vabsdiffs4(int __a, int __b);
|
||||
__device__ int __nv_vabsdiffu2(int __a, int __b);
|
||||
__device__ int __nv_vabsdiffu4(int __a, int __b);
|
||||
__device__ int __nv_vabsss2(int __a);
|
||||
__device__ int __nv_vabsss4(int __a);
|
||||
__device__ int __nv_vadd2(int __a, int __b);
|
||||
__device__ int __nv_vadd4(int __a, int __b);
|
||||
__device__ int __nv_vaddss2(int __a, int __b);
|
||||
__device__ int __nv_vaddss4(int __a, int __b);
|
||||
__device__ int __nv_vaddus2(int __a, int __b);
|
||||
__device__ int __nv_vaddus4(int __a, int __b);
|
||||
__device__ int __nv_vavgs2(int __a, int __b);
|
||||
__device__ int __nv_vavgs4(int __a, int __b);
|
||||
__device__ int __nv_vavgu2(int __a, int __b);
|
||||
__device__ int __nv_vavgu4(int __a, int __b);
|
||||
__device__ int __nv_vcmpeq2(int __a, int __b);
|
||||
__device__ int __nv_vcmpeq4(int __a, int __b);
|
||||
__device__ int __nv_vcmpges2(int __a, int __b);
|
||||
__device__ int __nv_vcmpges4(int __a, int __b);
|
||||
__device__ int __nv_vcmpgeu2(int __a, int __b);
|
||||
__device__ int __nv_vcmpgeu4(int __a, int __b);
|
||||
__device__ int __nv_vcmpgts2(int __a, int __b);
|
||||
__device__ int __nv_vcmpgts4(int __a, int __b);
|
||||
__device__ int __nv_vcmpgtu2(int __a, int __b);
|
||||
__device__ int __nv_vcmpgtu4(int __a, int __b);
|
||||
__device__ int __nv_vcmples2(int __a, int __b);
|
||||
__device__ int __nv_vcmples4(int __a, int __b);
|
||||
__device__ int __nv_vcmpleu2(int __a, int __b);
|
||||
__device__ int __nv_vcmpleu4(int __a, int __b);
|
||||
__device__ int __nv_vcmplts2(int __a, int __b);
|
||||
__device__ int __nv_vcmplts4(int __a, int __b);
|
||||
__device__ int __nv_vcmpltu2(int __a, int __b);
|
||||
__device__ int __nv_vcmpltu4(int __a, int __b);
|
||||
__device__ int __nv_vcmpne2(int __a, int __b);
|
||||
__device__ int __nv_vcmpne4(int __a, int __b);
|
||||
__device__ int __nv_vhaddu2(int __a, int __b);
|
||||
__device__ int __nv_vhaddu4(int __a, int __b);
|
||||
__device__ int __nv_vmaxs2(int __a, int __b);
|
||||
__device__ int __nv_vmaxs4(int __a, int __b);
|
||||
__device__ int __nv_vmaxu2(int __a, int __b);
|
||||
__device__ int __nv_vmaxu4(int __a, int __b);
|
||||
__device__ int __nv_vmins2(int __a, int __b);
|
||||
__device__ int __nv_vmins4(int __a, int __b);
|
||||
__device__ int __nv_vminu2(int __a, int __b);
|
||||
__device__ int __nv_vminu4(int __a, int __b);
|
||||
__device__ int __nv_vneg2(int __a);
|
||||
__device__ int __nv_vneg4(int __a);
|
||||
__device__ int __nv_vnegss2(int __a);
|
||||
__device__ int __nv_vnegss4(int __a);
|
||||
__device__ int __nv_vsads2(int __a, int __b);
|
||||
__device__ int __nv_vsads4(int __a, int __b);
|
||||
__device__ int __nv_vsadu2(int __a, int __b);
|
||||
__device__ int __nv_vsadu4(int __a, int __b);
|
||||
__device__ int __nv_vseteq2(int __a, int __b);
|
||||
__device__ int __nv_vseteq4(int __a, int __b);
|
||||
__device__ int __nv_vsetges2(int __a, int __b);
|
||||
__device__ int __nv_vsetges4(int __a, int __b);
|
||||
__device__ int __nv_vsetgeu2(int __a, int __b);
|
||||
__device__ int __nv_vsetgeu4(int __a, int __b);
|
||||
__device__ int __nv_vsetgts2(int __a, int __b);
|
||||
__device__ int __nv_vsetgts4(int __a, int __b);
|
||||
__device__ int __nv_vsetgtu2(int __a, int __b);
|
||||
__device__ int __nv_vsetgtu4(int __a, int __b);
|
||||
__device__ int __nv_vsetles2(int __a, int __b);
|
||||
__device__ int __nv_vsetles4(int __a, int __b);
|
||||
__device__ int __nv_vsetleu2(int __a, int __b);
|
||||
__device__ int __nv_vsetleu4(int __a, int __b);
|
||||
__device__ int __nv_vsetlts2(int __a, int __b);
|
||||
__device__ int __nv_vsetlts4(int __a, int __b);
|
||||
__device__ int __nv_vsetltu2(int __a, int __b);
|
||||
__device__ int __nv_vsetltu4(int __a, int __b);
|
||||
__device__ int __nv_vsetne2(int __a, int __b);
|
||||
__device__ int __nv_vsetne4(int __a, int __b);
|
||||
__device__ int __nv_vsub2(int __a, int __b);
|
||||
__device__ int __nv_vsub4(int __a, int __b);
|
||||
__device__ int __nv_vsubss2(int __a, int __b);
|
||||
__device__ int __nv_vsubss4(int __a, int __b);
|
||||
__device__ int __nv_vsubus2(int __a, int __b);
|
||||
__device__ int __nv_vsubus4(int __a, int __b);
|
||||
#endif // CUDA_VERSION
|
||||
__device__ double __nv_y0(double __a);
|
||||
__device__ float __nv_y0f(float __a);
|
||||
__device__ double __nv_y1(double __a);
|
||||
__device__ float __nv_y1f(float __a);
|
||||
__device__ float __nv_ynf(int __a, float __b);
|
||||
__device__ double __nv_yn(int __a, double __b);
|
||||
} // extern "C"
|
||||
#endif // __CLANG_CUDA_LIBDEVICE_DECLARES_H__
|
||||
@@ -62,10 +62,15 @@
|
||||
#include "cuda.h"
|
||||
#if !defined(CUDA_VERSION)
|
||||
#error "cuda.h did not define CUDA_VERSION"
|
||||
#elif CUDA_VERSION < 7000 || CUDA_VERSION > 9000
|
||||
#elif CUDA_VERSION < 7000 || CUDA_VERSION > 10000
|
||||
#error "Unsupported CUDA version!"
|
||||
#endif
|
||||
|
||||
#pragma push_macro("__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__")
|
||||
#if CUDA_VERSION >= 10000
|
||||
#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
|
||||
#endif
|
||||
|
||||
// Make largest subset of device functions available during host
|
||||
// compilation -- SM_35 for the time being.
|
||||
#ifndef __CUDA_ARCH__
|
||||
@@ -84,6 +89,9 @@
|
||||
#define __DEVICE_FUNCTIONS_H__
|
||||
#define __MATH_FUNCTIONS_H__
|
||||
#define __COMMON_FUNCTIONS_H__
|
||||
// device_functions_decls is replaced by __clang_cuda_device_functions.h
|
||||
// included below.
|
||||
#define __DEVICE_FUNCTIONS_DECLS_H__
|
||||
|
||||
#undef __CUDACC__
|
||||
#if CUDA_VERSION < 9000
|
||||
@@ -97,11 +105,17 @@
|
||||
#include "host_config.h"
|
||||
#include "host_defines.h"
|
||||
|
||||
// Temporarily replace "nv_weak" with weak, so __attribute__((nv_weak)) in
|
||||
// cuda_device_runtime_api.h ends up being __attribute__((weak)) which is the
|
||||
// functional equivalent of what we need.
|
||||
#pragma push_macro("nv_weak")
|
||||
#define nv_weak weak
|
||||
#undef __CUDABE__
|
||||
#undef __CUDA_LIBDEVICE__
|
||||
#define __CUDACC__
|
||||
#include "cuda_runtime.h"
|
||||
|
||||
#pragma pop_macro("nv_weak")
|
||||
#undef __CUDACC__
|
||||
#define __CUDABE__
|
||||
|
||||
@@ -137,20 +151,22 @@ inline __host__ double __signbitd(double x) {
|
||||
}
|
||||
#endif
|
||||
|
||||
// We need decls for functions in CUDA's libdevice with __device__
|
||||
// attribute only. Alas they come either as __host__ __device__ or
|
||||
// with no attributes at all. To work around that, define __CUDA_RTC__
|
||||
// which produces HD variant and undef __host__ which gives us desided
|
||||
// decls with __device__ attribute.
|
||||
#pragma push_macro("__host__")
|
||||
#define __host__
|
||||
#define __CUDACC_RTC__
|
||||
#include "device_functions_decls.h"
|
||||
#undef __CUDACC_RTC__
|
||||
// CUDA 9.1 no longer provides declarations for libdevice functions, so we need
|
||||
// to provide our own.
|
||||
#include <__clang_cuda_libdevice_declares.h>
|
||||
|
||||
// Temporarily poison __host__ macro to ensure it's not used by any of
|
||||
// the headers we're about to include.
|
||||
#define __host__ UNEXPECTED_HOST_ATTRIBUTE
|
||||
// Wrappers for many device-side standard library functions became compiler
|
||||
// builtins in CUDA-9 and have been removed from the CUDA headers. Clang now
|
||||
// provides its own implementation of the wrappers.
|
||||
#if CUDA_VERSION >= 9000
|
||||
#include <__clang_cuda_device_functions.h>
|
||||
#endif
|
||||
|
||||
// __THROW is redefined to be empty by device_functions_decls.h in CUDA. Clang's
|
||||
// counterpart does not do it, so we need to make it empty here to keep
|
||||
// following CUDA includes happy.
|
||||
#undef __THROW
|
||||
#define __THROW
|
||||
|
||||
// CUDA 8.0.41 relies on __USE_FAST_MATH__ and __CUDA_PREC_DIV's values.
|
||||
// Previous versions used to check whether they are defined or not.
|
||||
@@ -167,24 +183,20 @@ inline __host__ double __signbitd(double x) {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Temporarily poison __host__ macro to ensure it's not used by any of
|
||||
// the headers we're about to include.
|
||||
#pragma push_macro("__host__")
|
||||
#define __host__ UNEXPECTED_HOST_ATTRIBUTE
|
||||
|
||||
// device_functions.hpp and math_functions*.hpp use 'static
|
||||
// __forceinline__' (with no __device__) for definitions of device
|
||||
// functions. Temporarily redefine __forceinline__ to include
|
||||
// __device__.
|
||||
#pragma push_macro("__forceinline__")
|
||||
#define __forceinline__ __device__ __inline__ __attribute__((always_inline))
|
||||
|
||||
#pragma push_macro("__float2half_rn")
|
||||
#if CUDA_VERSION >= 9000
|
||||
// CUDA-9 has conflicting prototypes for __float2half_rn(float f) in
|
||||
// cuda_fp16.h[pp] and device_functions.hpp. We need to get the one in
|
||||
// device_functions.hpp out of the way.
|
||||
#define __float2half_rn __float2half_rn_disabled
|
||||
#endif
|
||||
|
||||
#if CUDA_VERSION < 9000
|
||||
#include "device_functions.hpp"
|
||||
#pragma pop_macro("__float2half_rn")
|
||||
|
||||
#endif
|
||||
|
||||
// math_function.hpp uses the __USE_FAST_MATH__ macro to determine whether we
|
||||
// get the slow-but-accurate or fast-but-inaccurate versions of functions like
|
||||
@@ -196,17 +208,32 @@ inline __host__ double __signbitd(double x) {
|
||||
#if defined(__CLANG_CUDA_APPROX_TRANSCENDENTALS__)
|
||||
#define __USE_FAST_MATH__ 1
|
||||
#endif
|
||||
|
||||
#if CUDA_VERSION >= 9000
|
||||
// CUDA-9.2 needs host-side memcpy for some host functions in
|
||||
// device_functions.hpp
|
||||
#if CUDA_VERSION >= 9020
|
||||
#include <string.h>
|
||||
#endif
|
||||
#include "crt/math_functions.hpp"
|
||||
#else
|
||||
#include "math_functions.hpp"
|
||||
#endif
|
||||
|
||||
#pragma pop_macro("__USE_FAST_MATH__")
|
||||
|
||||
#if CUDA_VERSION < 9000
|
||||
#include "math_functions_dbl_ptx3.hpp"
|
||||
#endif
|
||||
#pragma pop_macro("__forceinline__")
|
||||
|
||||
// Pull in host-only functions that are only available when neither
|
||||
// __CUDACC__ nor __CUDABE__ are defined.
|
||||
#undef __MATH_FUNCTIONS_HPP__
|
||||
#undef __CUDABE__
|
||||
#if CUDA_VERSION < 9000
|
||||
#include "math_functions.hpp"
|
||||
#endif
|
||||
// Alas, additional overloads for these functions are hard to get to.
|
||||
// Considering that we only need these overloads for a few functions,
|
||||
// we can provide them here.
|
||||
@@ -222,22 +249,36 @@ static inline float normcdfinv(float __a) { return normcdfinvf(__a); }
|
||||
static inline float normcdf(float __a) { return normcdff(__a); }
|
||||
static inline float erfcx(float __a) { return erfcxf(__a); }
|
||||
|
||||
#if CUDA_VERSION < 9000
|
||||
// For some reason single-argument variant is not always declared by
|
||||
// CUDA headers. Alas, device_functions.hpp included below needs it.
|
||||
static inline __device__ void __brkpt(int __c) { __brkpt(); }
|
||||
#endif
|
||||
|
||||
// Now include *.hpp with definitions of various GPU functions. Alas,
|
||||
// a lot of thins get declared/defined with __host__ attribute which
|
||||
// we don't want and we have to define it out. We also have to include
|
||||
// {device,math}_functions.hpp again in order to extract the other
|
||||
// branch of #if/else inside.
|
||||
|
||||
#define __host__
|
||||
#undef __CUDABE__
|
||||
#define __CUDACC__
|
||||
#if CUDA_VERSION >= 9000
|
||||
// Some atomic functions became compiler builtins in CUDA-9 , so we need their
|
||||
// declarations.
|
||||
#include "device_atomic_functions.h"
|
||||
#endif
|
||||
#undef __DEVICE_FUNCTIONS_HPP__
|
||||
#include "device_atomic_functions.hpp"
|
||||
#if CUDA_VERSION >= 9000
|
||||
#include "crt/device_functions.hpp"
|
||||
#include "crt/device_double_functions.hpp"
|
||||
#else
|
||||
#include "device_functions.hpp"
|
||||
#define __CUDABE__
|
||||
#include "device_double_functions.h"
|
||||
#undef __CUDABE__
|
||||
#endif
|
||||
#include "sm_20_atomic_functions.hpp"
|
||||
#include "sm_20_intrinsics.hpp"
|
||||
#include "sm_32_atomic_functions.hpp"
|
||||
@@ -251,8 +292,11 @@ static inline __device__ void __brkpt(int __c) { __brkpt(); }
|
||||
// reason about our code.
|
||||
|
||||
#if CUDA_VERSION >= 8000
|
||||
#pragma push_macro("__CUDA_ARCH__")
|
||||
#undef __CUDA_ARCH__
|
||||
#include "sm_60_atomic_functions.hpp"
|
||||
#include "sm_61_intrinsics.hpp"
|
||||
#pragma pop_macro("__CUDA_ARCH__")
|
||||
#endif
|
||||
|
||||
#undef __MATH_FUNCTIONS_HPP__
|
||||
@@ -279,7 +323,11 @@ static inline __device__ void __brkpt(int __c) { __brkpt(); }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if CUDA_VERSION >= 9000
|
||||
#include "crt/math_functions.hpp"
|
||||
#else
|
||||
#include "math_functions.hpp"
|
||||
#endif
|
||||
#pragma pop_macro("_GLIBCXX_MATH_H")
|
||||
#pragma pop_macro("_LIBCPP_VERSION")
|
||||
#pragma pop_macro("__GNUC__")
|
||||
@@ -376,6 +424,7 @@ __device__ inline __cuda_builtin_gridDim_t::operator dim3() const {
|
||||
#pragma pop_macro("dim3")
|
||||
#pragma pop_macro("uint3")
|
||||
#pragma pop_macro("__USE_FAST_MATH__")
|
||||
#pragma pop_macro("__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__")
|
||||
|
||||
#endif // __CUDA__
|
||||
#endif // __CLANG_CUDA_RUNTIME_WRAPPER_H__
|
||||
|
||||
@@ -20,15 +20,18 @@
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
#ifndef _WMMINTRIN_AES_H
|
||||
#define _WMMINTRIN_AES_H
|
||||
|
||||
#include <emmintrin.h>
|
||||
#ifndef __WMMINTRIN_H
|
||||
#error "Never use <__wmmintrin_aes.h> directly; include <wmmintrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __WMMINTRIN_AES_H
|
||||
#define __WMMINTRIN_AES_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("aes")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("aes"), __min_vector_width__(128)))
|
||||
|
||||
/// \brief Performs a single round of AES encryption using the Equivalent
|
||||
/// Performs a single round of AES encryption using the Equivalent
|
||||
/// Inverse Cipher, transforming the state value from the first source
|
||||
/// operand using a 128-bit round key value contained in the second source
|
||||
/// operand, and writes the result to the destination.
|
||||
@@ -48,7 +51,7 @@ _mm_aesenc_si128(__m128i __V, __m128i __R)
|
||||
return (__m128i)__builtin_ia32_aesenc128((__v2di)__V, (__v2di)__R);
|
||||
}
|
||||
|
||||
/// \brief Performs the final round of AES encryption using the Equivalent
|
||||
/// Performs the final round of AES encryption using the Equivalent
|
||||
/// Inverse Cipher, transforming the state value from the first source
|
||||
/// operand using a 128-bit round key value contained in the second source
|
||||
/// operand, and writes the result to the destination.
|
||||
@@ -68,7 +71,7 @@ _mm_aesenclast_si128(__m128i __V, __m128i __R)
|
||||
return (__m128i)__builtin_ia32_aesenclast128((__v2di)__V, (__v2di)__R);
|
||||
}
|
||||
|
||||
/// \brief Performs a single round of AES decryption using the Equivalent
|
||||
/// Performs a single round of AES decryption using the Equivalent
|
||||
/// Inverse Cipher, transforming the state value from the first source
|
||||
/// operand using a 128-bit round key value contained in the second source
|
||||
/// operand, and writes the result to the destination.
|
||||
@@ -88,7 +91,7 @@ _mm_aesdec_si128(__m128i __V, __m128i __R)
|
||||
return (__m128i)__builtin_ia32_aesdec128((__v2di)__V, (__v2di)__R);
|
||||
}
|
||||
|
||||
/// \brief Performs the final round of AES decryption using the Equivalent
|
||||
/// Performs the final round of AES decryption using the Equivalent
|
||||
/// Inverse Cipher, transforming the state value from the first source
|
||||
/// operand using a 128-bit round key value contained in the second source
|
||||
/// operand, and writes the result to the destination.
|
||||
@@ -108,7 +111,7 @@ _mm_aesdeclast_si128(__m128i __V, __m128i __R)
|
||||
return (__m128i)__builtin_ia32_aesdeclast128((__v2di)__V, (__v2di)__R);
|
||||
}
|
||||
|
||||
/// \brief Applies the AES InvMixColumns() transformation to an expanded key
|
||||
/// Applies the AES InvMixColumns() transformation to an expanded key
|
||||
/// contained in the source operand, and writes the result to the
|
||||
/// destination.
|
||||
///
|
||||
@@ -125,7 +128,7 @@ _mm_aesimc_si128(__m128i __V)
|
||||
return (__m128i)__builtin_ia32_aesimc128((__v2di)__V);
|
||||
}
|
||||
|
||||
/// \brief Generates a round key for AES encyption, operating on 128-bit data
|
||||
/// Generates a round key for AES encryption, operating on 128-bit data
|
||||
/// specified in the first source operand and using an 8-bit round constant
|
||||
/// specified by the second source operand, and writes the result to the
|
||||
/// destination.
|
||||
@@ -148,4 +151,4 @@ _mm_aesimc_si128(__m128i __V)
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif /* _WMMINTRIN_AES_H */
|
||||
#endif /* __WMMINTRIN_AES_H */
|
||||
|
||||
@@ -20,10 +20,15 @@
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
#ifndef _WMMINTRIN_PCLMUL_H
|
||||
#define _WMMINTRIN_PCLMUL_H
|
||||
|
||||
/// \brief Multiplies two 64-bit integer values, which are selected from source
|
||||
#ifndef __WMMINTRIN_H
|
||||
#error "Never use <__wmmintrin_pclmul.h> directly; include <wmmintrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __WMMINTRIN_PCLMUL_H
|
||||
#define __WMMINTRIN_PCLMUL_H
|
||||
|
||||
/// Multiplies two 64-bit integer values, which are selected from source
|
||||
/// operands using the immediate-value operand. The multiplication is a
|
||||
/// carry-less multiplication, and the 128-bit integer product is stored in
|
||||
/// the destination.
|
||||
@@ -50,8 +55,8 @@
|
||||
/// Bit[4]=1 indicates that bits[127:64] of operand \a __Y are used.
|
||||
/// \returns The 128-bit integer vector containing the result of the carry-less
|
||||
/// multiplication of the selected 64-bit values.
|
||||
#define _mm_clmulepi64_si128(__X, __Y, __I) \
|
||||
((__m128i)__builtin_ia32_pclmulqdq128((__v2di)(__m128i)(__X), \
|
||||
(__v2di)(__m128i)(__Y), (char)(__I)))
|
||||
#define _mm_clmulepi64_si128(X, Y, I) \
|
||||
((__m128i)__builtin_ia32_pclmulqdq128((__v2di)(__m128i)(X), \
|
||||
(__v2di)(__m128i)(Y), (char)(I)))
|
||||
|
||||
#endif /* _WMMINTRIN_PCLMUL_H */
|
||||
#endif /* __WMMINTRIN_PCLMUL_H */
|
||||
|
||||
@@ -53,7 +53,7 @@ static __inline unsigned char __DEFAULT_FN_ATTRS
|
||||
_addcarry_u32(unsigned char __cf, unsigned int __x, unsigned int __y,
|
||||
unsigned int *__p)
|
||||
{
|
||||
return __builtin_ia32_addcarry_u32(__cf, __x, __y, __p);
|
||||
return __builtin_ia32_addcarryx_u32(__cf, __x, __y, __p);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
@@ -61,7 +61,7 @@ static __inline unsigned char __DEFAULT_FN_ATTRS
|
||||
_addcarry_u64(unsigned char __cf, unsigned long long __x,
|
||||
unsigned long long __y, unsigned long long *__p)
|
||||
{
|
||||
return __builtin_ia32_addcarry_u64(__cf, __x, __y, __p);
|
||||
return __builtin_ia32_addcarryx_u64(__cf, __x, __y, __p);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -9492,49 +9492,51 @@ vec_splat_u32(signed char __a) {
|
||||
|
||||
/* vec_sr */
|
||||
|
||||
static __inline__ vector signed char __ATTRS_o_ai
|
||||
vec_sr(vector signed char __a, vector unsigned char __b) {
|
||||
vector unsigned char __res = (vector unsigned char)__a >> __b;
|
||||
return (vector signed char)__res;
|
||||
}
|
||||
|
||||
// vec_sr does modulo arithmetic on __b first, so __b is allowed to be more
|
||||
// than the length of __a.
|
||||
static __inline__ vector unsigned char __ATTRS_o_ai
|
||||
vec_sr(vector unsigned char __a, vector unsigned char __b) {
|
||||
return __a >> __b;
|
||||
return __a >>
|
||||
(__b % (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
|
||||
}
|
||||
|
||||
static __inline__ vector signed short __ATTRS_o_ai
|
||||
vec_sr(vector signed short __a, vector unsigned short __b) {
|
||||
vector unsigned short __res = (vector unsigned short)__a >> __b;
|
||||
return (vector signed short)__res;
|
||||
static __inline__ vector signed char __ATTRS_o_ai
|
||||
vec_sr(vector signed char __a, vector unsigned char __b) {
|
||||
return (vector signed char)vec_sr((vector unsigned char)__a, __b);
|
||||
}
|
||||
|
||||
static __inline__ vector unsigned short __ATTRS_o_ai
|
||||
vec_sr(vector unsigned short __a, vector unsigned short __b) {
|
||||
return __a >> __b;
|
||||
return __a >>
|
||||
(__b % (vector unsigned short)(sizeof(unsigned short) * __CHAR_BIT__));
|
||||
}
|
||||
|
||||
static __inline__ vector signed int __ATTRS_o_ai
|
||||
vec_sr(vector signed int __a, vector unsigned int __b) {
|
||||
vector unsigned int __res = (vector unsigned int)__a >> __b;
|
||||
return (vector signed int)__res;
|
||||
static __inline__ vector short __ATTRS_o_ai vec_sr(vector short __a,
|
||||
vector unsigned short __b) {
|
||||
return (vector short)vec_sr((vector unsigned short)__a, __b);
|
||||
}
|
||||
|
||||
static __inline__ vector unsigned int __ATTRS_o_ai
|
||||
vec_sr(vector unsigned int __a, vector unsigned int __b) {
|
||||
return __a >> __b;
|
||||
return __a >>
|
||||
(__b % (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
|
||||
}
|
||||
|
||||
static __inline__ vector int __ATTRS_o_ai vec_sr(vector int __a,
|
||||
vector unsigned int __b) {
|
||||
return (vector int)vec_sr((vector unsigned int)__a, __b);
|
||||
}
|
||||
|
||||
#ifdef __POWER8_VECTOR__
|
||||
static __inline__ vector signed long long __ATTRS_o_ai
|
||||
vec_sr(vector signed long long __a, vector unsigned long long __b) {
|
||||
vector unsigned long long __res = (vector unsigned long long)__a >> __b;
|
||||
return (vector signed long long)__res;
|
||||
}
|
||||
|
||||
static __inline__ vector unsigned long long __ATTRS_o_ai
|
||||
vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
|
||||
return __a >> __b;
|
||||
return __a >> (__b % (vector unsigned long long)(sizeof(unsigned long long) *
|
||||
__CHAR_BIT__));
|
||||
}
|
||||
|
||||
static __inline__ vector long long __ATTRS_o_ai
|
||||
vec_sr(vector long long __a, vector unsigned long long __b) {
|
||||
return (vector long long)vec_sr((vector unsigned long long)__a, __b);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -9544,12 +9546,12 @@ vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
|
||||
|
||||
static __inline__ vector signed char __ATTRS_o_ai
|
||||
vec_vsrb(vector signed char __a, vector unsigned char __b) {
|
||||
return __a >> (vector signed char)__b;
|
||||
return vec_sr(__a, __b);
|
||||
}
|
||||
|
||||
static __inline__ vector unsigned char __ATTRS_o_ai
|
||||
vec_vsrb(vector unsigned char __a, vector unsigned char __b) {
|
||||
return __a >> __b;
|
||||
return vec_sr(__a, __b);
|
||||
}
|
||||
|
||||
/* vec_vsrh */
|
||||
@@ -9558,12 +9560,12 @@ vec_vsrb(vector unsigned char __a, vector unsigned char __b) {
|
||||
|
||||
static __inline__ vector short __ATTRS_o_ai
|
||||
vec_vsrh(vector short __a, vector unsigned short __b) {
|
||||
return __a >> (vector short)__b;
|
||||
return vec_sr(__a, __b);
|
||||
}
|
||||
|
||||
static __inline__ vector unsigned short __ATTRS_o_ai
|
||||
vec_vsrh(vector unsigned short __a, vector unsigned short __b) {
|
||||
return __a >> __b;
|
||||
return vec_sr(__a, __b);
|
||||
}
|
||||
|
||||
/* vec_vsrw */
|
||||
@@ -9572,12 +9574,12 @@ vec_vsrh(vector unsigned short __a, vector unsigned short __b) {
|
||||
|
||||
static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a,
|
||||
vector unsigned int __b) {
|
||||
return __a >> (vector int)__b;
|
||||
return vec_sr(__a, __b);
|
||||
}
|
||||
|
||||
static __inline__ vector unsigned int __ATTRS_o_ai
|
||||
vec_vsrw(vector unsigned int __a, vector unsigned int __b) {
|
||||
return __a >> __b;
|
||||
return vec_sr(__a, __b);
|
||||
}
|
||||
|
||||
/* vec_sra */
|
||||
@@ -16353,67 +16355,82 @@ vec_revb(vector unsigned __int128 __a) {
|
||||
|
||||
/* vec_xl */
|
||||
|
||||
typedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));
|
||||
typedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));
|
||||
typedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));
|
||||
typedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));
|
||||
typedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));
|
||||
typedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));
|
||||
typedef vector float unaligned_vec_float __attribute__((aligned(1)));
|
||||
|
||||
static inline __ATTRS_o_ai vector signed char vec_xl(signed long long __offset,
|
||||
signed char *__ptr) {
|
||||
return *(vector signed char *)(__ptr + __offset);
|
||||
return *(unaligned_vec_schar *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned char
|
||||
vec_xl(signed long long __offset, unsigned char *__ptr) {
|
||||
return *(vector unsigned char *)(__ptr + __offset);
|
||||
return *(unaligned_vec_uchar*)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector signed short vec_xl(signed long long __offset,
|
||||
signed short *__ptr) {
|
||||
return *(vector signed short *)(__ptr + __offset);
|
||||
return *(unaligned_vec_sshort *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned short
|
||||
vec_xl(signed long long __offset, unsigned short *__ptr) {
|
||||
return *(vector unsigned short *)(__ptr + __offset);
|
||||
return *(unaligned_vec_ushort *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector signed int vec_xl(signed long long __offset,
|
||||
signed int *__ptr) {
|
||||
return *(vector signed int *)(__ptr + __offset);
|
||||
return *(unaligned_vec_sint *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned int vec_xl(signed long long __offset,
|
||||
unsigned int *__ptr) {
|
||||
return *(vector unsigned int *)(__ptr + __offset);
|
||||
return *(unaligned_vec_uint *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector float vec_xl(signed long long __offset,
|
||||
float *__ptr) {
|
||||
return *(vector float *)(__ptr + __offset);
|
||||
return *(unaligned_vec_float *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
#ifdef __VSX__
|
||||
typedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));
|
||||
typedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));
|
||||
typedef vector double unaligned_vec_double __attribute__((aligned(1)));
|
||||
|
||||
static inline __ATTRS_o_ai vector signed long long
|
||||
vec_xl(signed long long __offset, signed long long *__ptr) {
|
||||
return *(vector signed long long *)(__ptr + __offset);
|
||||
return *(unaligned_vec_sll *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned long long
|
||||
vec_xl(signed long long __offset, unsigned long long *__ptr) {
|
||||
return *(vector unsigned long long *)(__ptr + __offset);
|
||||
return *(unaligned_vec_ull *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector double vec_xl(signed long long __offset,
|
||||
double *__ptr) {
|
||||
return *(vector double *)(__ptr + __offset);
|
||||
return *(unaligned_vec_double *)(__ptr + __offset);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
|
||||
typedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));
|
||||
typedef vector unsigned __int128 unaligned_vec_ui128
|
||||
__attribute__((aligned(1)));
|
||||
static inline __ATTRS_o_ai vector signed __int128
|
||||
vec_xl(signed long long __offset, signed __int128 *__ptr) {
|
||||
return *(vector signed __int128 *)(__ptr + __offset);
|
||||
return *(unaligned_vec_si128 *)(__ptr + __offset);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector unsigned __int128
|
||||
vec_xl(signed long long __offset, unsigned __int128 *__ptr) {
|
||||
return *(vector unsigned __int128 *)(__ptr + __offset);
|
||||
return *(unaligned_vec_ui128 *)(__ptr + __offset);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -16498,62 +16515,62 @@ vec_xl_be(signed long long __offset, unsigned __int128 *__ptr) {
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed char __vec,
|
||||
signed long long __offset,
|
||||
signed char *__ptr) {
|
||||
*(vector signed char *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_schar *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned char __vec,
|
||||
signed long long __offset,
|
||||
unsigned char *__ptr) {
|
||||
*(vector unsigned char *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_uchar *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed short __vec,
|
||||
signed long long __offset,
|
||||
signed short *__ptr) {
|
||||
*(vector signed short *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_sshort *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec,
|
||||
signed long long __offset,
|
||||
unsigned short *__ptr) {
|
||||
*(vector unsigned short *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_ushort *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed int __vec,
|
||||
signed long long __offset,
|
||||
signed int *__ptr) {
|
||||
*(vector signed int *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_sint *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned int __vec,
|
||||
signed long long __offset,
|
||||
unsigned int *__ptr) {
|
||||
*(vector unsigned int *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_uint *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector float __vec,
|
||||
signed long long __offset,
|
||||
float *__ptr) {
|
||||
*(vector float *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_float *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
#ifdef __VSX__
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed long long __vec,
|
||||
signed long long __offset,
|
||||
signed long long *__ptr) {
|
||||
*(vector signed long long *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_sll *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,
|
||||
signed long long __offset,
|
||||
unsigned long long *__ptr) {
|
||||
*(vector unsigned long long *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_ull *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector double __vec,
|
||||
signed long long __offset,
|
||||
double *__ptr) {
|
||||
*(vector double *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_double *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -16561,13 +16578,13 @@ static inline __ATTRS_o_ai void vec_xst(vector double __vec,
|
||||
static inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,
|
||||
signed long long __offset,
|
||||
signed __int128 *__ptr) {
|
||||
*(vector signed __int128 *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_si128 *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,
|
||||
signed long long __offset,
|
||||
unsigned __int128 *__ptr) {
|
||||
*(vector unsigned __int128 *)(__ptr + __offset) = __vec;
|
||||
*(unaligned_vec_ui128 *)(__ptr + __offset) = __vec;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -27,9 +27,9 @@
|
||||
#include <pmmintrin.h>
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4a")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4a"), __min_vector_width__(128)))
|
||||
|
||||
/// \brief Extracts the specified bits from the lower 64 bits of the 128-bit
|
||||
/// Extracts the specified bits from the lower 64 bits of the 128-bit
|
||||
/// integer vector operand at the index \a idx and of the length \a len.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -57,7 +57,7 @@
|
||||
((__m128i)__builtin_ia32_extrqi((__v2di)(__m128i)(x), \
|
||||
(char)(len), (char)(idx)))
|
||||
|
||||
/// \brief Extracts the specified bits from the lower 64 bits of the 128-bit
|
||||
/// Extracts the specified bits from the lower 64 bits of the 128-bit
|
||||
/// integer vector operand at the index and of the length specified by
|
||||
/// \a __y.
|
||||
///
|
||||
@@ -82,7 +82,7 @@ _mm_extract_si64(__m128i __x, __m128i __y)
|
||||
return (__m128i)__builtin_ia32_extrq((__v2di)__x, (__v16qi)__y);
|
||||
}
|
||||
|
||||
/// \brief Inserts bits of a specified length from the source integer vector
|
||||
/// Inserts bits of a specified length from the source integer vector
|
||||
/// \a y into the lower 64 bits of the destination integer vector \a x at
|
||||
/// the index \a idx and of the length \a len.
|
||||
///
|
||||
@@ -120,7 +120,7 @@ _mm_extract_si64(__m128i __x, __m128i __y)
|
||||
(__v2di)(__m128i)(y), \
|
||||
(char)(len), (char)(idx)))
|
||||
|
||||
/// \brief Inserts bits of a specified length from the source integer vector
|
||||
/// Inserts bits of a specified length from the source integer vector
|
||||
/// \a __y into the lower 64 bits of the destination integer vector \a __x
|
||||
/// at the index and of the length specified by \a __y.
|
||||
///
|
||||
@@ -152,7 +152,7 @@ _mm_insert_si64(__m128i __x, __m128i __y)
|
||||
return (__m128i)__builtin_ia32_insertq((__v2di)__x, (__v2di)__y);
|
||||
}
|
||||
|
||||
/// \brief Stores a 64-bit double-precision value in a 64-bit memory location.
|
||||
/// Stores a 64-bit double-precision value in a 64-bit memory location.
|
||||
/// To minimize caching, the data is flagged as non-temporal (unlikely to be
|
||||
/// used again soon).
|
||||
///
|
||||
@@ -170,7 +170,7 @@ _mm_stream_sd(double *__p, __m128d __a)
|
||||
__builtin_ia32_movntsd(__p, (__v2df)__a);
|
||||
}
|
||||
|
||||
/// \brief Stores a 32-bit single-precision floating-point value in a 32-bit
|
||||
/// Stores a 32-bit single-precision floating-point value in a 32-bit
|
||||
/// memory location. To minimize caching, the data is flagged as
|
||||
/// non-temporal (unlikely to be used again soon).
|
||||
///
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+6249
-5167
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,7 @@
|
||||
#define __AVX512BITALGINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512bitalg")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512bitalg"), __min_vector_width__(512)))
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_popcnt_epi16(__m512i __A)
|
||||
@@ -48,7 +48,7 @@ _mm512_mask_popcnt_epi16(__m512i __A, __mmask32 __U, __m512i __B)
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_popcnt_epi16(__mmask32 __U, __m512i __B)
|
||||
{
|
||||
return _mm512_mask_popcnt_epi16((__m512i) _mm512_setzero_hi(),
|
||||
return _mm512_mask_popcnt_epi16((__m512i) _mm512_setzero_si512(),
|
||||
__U,
|
||||
__B);
|
||||
}
|
||||
@@ -70,7 +70,7 @@ _mm512_mask_popcnt_epi8(__m512i __A, __mmask64 __U, __m512i __B)
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_popcnt_epi8(__mmask64 __U, __m512i __B)
|
||||
{
|
||||
return _mm512_mask_popcnt_epi8((__m512i) _mm512_setzero_qi(),
|
||||
return _mm512_mask_popcnt_epi8((__m512i) _mm512_setzero_si512(),
|
||||
__U,
|
||||
__B);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,7 @@
|
||||
#define __AVX512CDINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512cd")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512cd"), __min_vector_width__(512)))
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_conflict_epi64 (__m512i __A)
|
||||
@@ -82,49 +82,45 @@ _mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A)
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_lzcnt_epi32 (__m512i __A)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
|
||||
(__v16si) _mm512_setzero_si512 (),
|
||||
(__mmask16) -1);
|
||||
return (__m512i) __builtin_ia32_vplzcntd_512 ((__v16si) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_lzcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
|
||||
(__v16si) __W,
|
||||
(__mmask16) __U);
|
||||
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
|
||||
(__v16si)_mm512_lzcnt_epi32(__A),
|
||||
(__v16si)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_lzcnt_epi32 (__mmask16 __U, __m512i __A)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
|
||||
(__v16si) _mm512_setzero_si512 (),
|
||||
(__mmask16) __U);
|
||||
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
|
||||
(__v16si)_mm512_lzcnt_epi32(__A),
|
||||
(__v16si)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_lzcnt_epi64 (__m512i __A)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
|
||||
(__v8di) _mm512_setzero_si512 (),
|
||||
(__mmask8) -1);
|
||||
return (__m512i) __builtin_ia32_vplzcntq_512 ((__v8di) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_lzcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
|
||||
(__v8di) __W,
|
||||
(__mmask8) __U);
|
||||
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
|
||||
(__v8di)_mm512_lzcnt_epi64(__A),
|
||||
(__v8di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_lzcnt_epi64 (__mmask8 __U, __m512i __A)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
|
||||
(__v8di) _mm512_setzero_si512 (),
|
||||
(__mmask8) __U);
|
||||
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
|
||||
(__v8di)_mm512_lzcnt_epi64(__A),
|
||||
(__v8di)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -27,21 +27,21 @@
|
||||
#ifndef __AVX512ERINTRIN_H
|
||||
#define __AVX512ERINTRIN_H
|
||||
|
||||
// exp2a23
|
||||
#define _mm512_exp2a23_round_pd(A, R) __extension__ ({ \
|
||||
/* exp2a23 */
|
||||
#define _mm512_exp2a23_round_pd(A, R) \
|
||||
(__m512d)__builtin_ia32_exp2pd_mask((__v8df)(__m512d)(A), \
|
||||
(__v8df)_mm512_setzero_pd(), \
|
||||
(__mmask8)-1, (int)(R)); })
|
||||
(__mmask8)-1, (int)(R))
|
||||
|
||||
#define _mm512_mask_exp2a23_round_pd(S, M, A, R) __extension__ ({ \
|
||||
#define _mm512_mask_exp2a23_round_pd(S, M, A, R) \
|
||||
(__m512d)__builtin_ia32_exp2pd_mask((__v8df)(__m512d)(A), \
|
||||
(__v8df)(__m512d)(S), (__mmask8)(M), \
|
||||
(int)(R)); })
|
||||
(int)(R))
|
||||
|
||||
#define _mm512_maskz_exp2a23_round_pd(M, A, R) __extension__ ({ \
|
||||
#define _mm512_maskz_exp2a23_round_pd(M, A, R) \
|
||||
(__m512d)__builtin_ia32_exp2pd_mask((__v8df)(__m512d)(A), \
|
||||
(__v8df)_mm512_setzero_pd(), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm512_exp2a23_pd(A) \
|
||||
_mm512_exp2a23_round_pd((A), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -52,20 +52,20 @@
|
||||
#define _mm512_maskz_exp2a23_pd(M, A) \
|
||||
_mm512_maskz_exp2a23_round_pd((M), (A), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
#define _mm512_exp2a23_round_ps(A, R) __extension__ ({ \
|
||||
#define _mm512_exp2a23_round_ps(A, R) \
|
||||
(__m512)__builtin_ia32_exp2ps_mask((__v16sf)(__m512)(A), \
|
||||
(__v16sf)_mm512_setzero_ps(), \
|
||||
(__mmask16)-1, (int)(R)); })
|
||||
(__mmask16)-1, (int)(R))
|
||||
|
||||
#define _mm512_mask_exp2a23_round_ps(S, M, A, R) __extension__ ({ \
|
||||
#define _mm512_mask_exp2a23_round_ps(S, M, A, R) \
|
||||
(__m512)__builtin_ia32_exp2ps_mask((__v16sf)(__m512)(A), \
|
||||
(__v16sf)(__m512)(S), (__mmask16)(M), \
|
||||
(int)(R)); })
|
||||
(int)(R))
|
||||
|
||||
#define _mm512_maskz_exp2a23_round_ps(M, A, R) __extension__ ({ \
|
||||
#define _mm512_maskz_exp2a23_round_ps(M, A, R) \
|
||||
(__m512)__builtin_ia32_exp2ps_mask((__v16sf)(__m512)(A), \
|
||||
(__v16sf)_mm512_setzero_ps(), \
|
||||
(__mmask16)(M), (int)(R)); })
|
||||
(__mmask16)(M), (int)(R))
|
||||
|
||||
#define _mm512_exp2a23_ps(A) \
|
||||
_mm512_exp2a23_round_ps((A), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -76,21 +76,21 @@
|
||||
#define _mm512_maskz_exp2a23_ps(M, A) \
|
||||
_mm512_maskz_exp2a23_round_ps((M), (A), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
// rsqrt28
|
||||
#define _mm512_rsqrt28_round_pd(A, R) __extension__ ({ \
|
||||
/* rsqrt28 */
|
||||
#define _mm512_rsqrt28_round_pd(A, R) \
|
||||
(__m512d)__builtin_ia32_rsqrt28pd_mask((__v8df)(__m512d)(A), \
|
||||
(__v8df)_mm512_setzero_pd(), \
|
||||
(__mmask8)-1, (int)(R)); })
|
||||
(__mmask8)-1, (int)(R))
|
||||
|
||||
#define _mm512_mask_rsqrt28_round_pd(S, M, A, R) __extension__ ({ \
|
||||
#define _mm512_mask_rsqrt28_round_pd(S, M, A, R) \
|
||||
(__m512d)__builtin_ia32_rsqrt28pd_mask((__v8df)(__m512d)(A), \
|
||||
(__v8df)(__m512d)(S), (__mmask8)(M), \
|
||||
(int)(R)); })
|
||||
(int)(R))
|
||||
|
||||
#define _mm512_maskz_rsqrt28_round_pd(M, A, R) __extension__ ({ \
|
||||
#define _mm512_maskz_rsqrt28_round_pd(M, A, R) \
|
||||
(__m512d)__builtin_ia32_rsqrt28pd_mask((__v8df)(__m512d)(A), \
|
||||
(__v8df)_mm512_setzero_pd(), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm512_rsqrt28_pd(A) \
|
||||
_mm512_rsqrt28_round_pd((A), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -101,20 +101,20 @@
|
||||
#define _mm512_maskz_rsqrt28_pd(M, A) \
|
||||
_mm512_maskz_rsqrt28_round_pd((M), (A), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
#define _mm512_rsqrt28_round_ps(A, R) __extension__ ({ \
|
||||
#define _mm512_rsqrt28_round_ps(A, R) \
|
||||
(__m512)__builtin_ia32_rsqrt28ps_mask((__v16sf)(__m512)(A), \
|
||||
(__v16sf)_mm512_setzero_ps(), \
|
||||
(__mmask16)-1, (int)(R)); })
|
||||
(__mmask16)-1, (int)(R))
|
||||
|
||||
#define _mm512_mask_rsqrt28_round_ps(S, M, A, R) __extension__ ({ \
|
||||
#define _mm512_mask_rsqrt28_round_ps(S, M, A, R) \
|
||||
(__m512)__builtin_ia32_rsqrt28ps_mask((__v16sf)(__m512)(A), \
|
||||
(__v16sf)(__m512)(S), (__mmask16)(M), \
|
||||
(int)(R)); })
|
||||
(int)(R))
|
||||
|
||||
#define _mm512_maskz_rsqrt28_round_ps(M, A, R) __extension__ ({ \
|
||||
#define _mm512_maskz_rsqrt28_round_ps(M, A, R) \
|
||||
(__m512)__builtin_ia32_rsqrt28ps_mask((__v16sf)(__m512)(A), \
|
||||
(__v16sf)_mm512_setzero_ps(), \
|
||||
(__mmask16)(M), (int)(R)); })
|
||||
(__mmask16)(M), (int)(R))
|
||||
|
||||
#define _mm512_rsqrt28_ps(A) \
|
||||
_mm512_rsqrt28_round_ps((A), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -125,23 +125,23 @@
|
||||
#define _mm512_maskz_rsqrt28_ps(M, A) \
|
||||
_mm512_maskz_rsqrt28_round_ps((M), (A), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
#define _mm_rsqrt28_round_ss(A, B, R) __extension__ ({ \
|
||||
#define _mm_rsqrt28_round_ss(A, B, R) \
|
||||
(__m128)__builtin_ia32_rsqrt28ss_round_mask((__v4sf)(__m128)(A), \
|
||||
(__v4sf)(__m128)(B), \
|
||||
(__v4sf)_mm_setzero_ps(), \
|
||||
(__mmask8)-1, (int)(R)); })
|
||||
(__mmask8)-1, (int)(R))
|
||||
|
||||
#define _mm_mask_rsqrt28_round_ss(S, M, A, B, R) __extension__ ({ \
|
||||
#define _mm_mask_rsqrt28_round_ss(S, M, A, B, R) \
|
||||
(__m128)__builtin_ia32_rsqrt28ss_round_mask((__v4sf)(__m128)(A), \
|
||||
(__v4sf)(__m128)(B), \
|
||||
(__v4sf)(__m128)(S), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm_maskz_rsqrt28_round_ss(M, A, B, R) __extension__ ({ \
|
||||
#define _mm_maskz_rsqrt28_round_ss(M, A, B, R) \
|
||||
(__m128)__builtin_ia32_rsqrt28ss_round_mask((__v4sf)(__m128)(A), \
|
||||
(__v4sf)(__m128)(B), \
|
||||
(__v4sf)_mm_setzero_ps(), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm_rsqrt28_ss(A, B) \
|
||||
_mm_rsqrt28_round_ss((A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -152,23 +152,23 @@
|
||||
#define _mm_maskz_rsqrt28_ss(M, A, B) \
|
||||
_mm_maskz_rsqrt28_round_ss((M), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
#define _mm_rsqrt28_round_sd(A, B, R) __extension__ ({ \
|
||||
#define _mm_rsqrt28_round_sd(A, B, R) \
|
||||
(__m128d)__builtin_ia32_rsqrt28sd_round_mask((__v2df)(__m128d)(A), \
|
||||
(__v2df)(__m128d)(B), \
|
||||
(__v2df)_mm_setzero_pd(), \
|
||||
(__mmask8)-1, (int)(R)); })
|
||||
(__mmask8)-1, (int)(R))
|
||||
|
||||
#define _mm_mask_rsqrt28_round_sd(S, M, A, B, R) __extension__ ({ \
|
||||
#define _mm_mask_rsqrt28_round_sd(S, M, A, B, R) \
|
||||
(__m128d)__builtin_ia32_rsqrt28sd_round_mask((__v2df)(__m128d)(A), \
|
||||
(__v2df)(__m128d)(B), \
|
||||
(__v2df)(__m128d)(S), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm_maskz_rsqrt28_round_sd(M, A, B, R) __extension__ ({ \
|
||||
#define _mm_maskz_rsqrt28_round_sd(M, A, B, R) \
|
||||
(__m128d)__builtin_ia32_rsqrt28sd_round_mask((__v2df)(__m128d)(A), \
|
||||
(__v2df)(__m128d)(B), \
|
||||
(__v2df)_mm_setzero_pd(), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm_rsqrt28_sd(A, B) \
|
||||
_mm_rsqrt28_round_sd((A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -179,21 +179,21 @@
|
||||
#define _mm_maskz_rsqrt28_sd(M, A, B) \
|
||||
_mm_maskz_rsqrt28_round_sd((M), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
// rcp28
|
||||
#define _mm512_rcp28_round_pd(A, R) __extension__ ({ \
|
||||
/* rcp28 */
|
||||
#define _mm512_rcp28_round_pd(A, R) \
|
||||
(__m512d)__builtin_ia32_rcp28pd_mask((__v8df)(__m512d)(A), \
|
||||
(__v8df)_mm512_setzero_pd(), \
|
||||
(__mmask8)-1, (int)(R)); })
|
||||
(__mmask8)-1, (int)(R))
|
||||
|
||||
#define _mm512_mask_rcp28_round_pd(S, M, A, R) __extension__ ({ \
|
||||
#define _mm512_mask_rcp28_round_pd(S, M, A, R) \
|
||||
(__m512d)__builtin_ia32_rcp28pd_mask((__v8df)(__m512d)(A), \
|
||||
(__v8df)(__m512d)(S), (__mmask8)(M), \
|
||||
(int)(R)); })
|
||||
(int)(R))
|
||||
|
||||
#define _mm512_maskz_rcp28_round_pd(M, A, R) __extension__ ({ \
|
||||
#define _mm512_maskz_rcp28_round_pd(M, A, R) \
|
||||
(__m512d)__builtin_ia32_rcp28pd_mask((__v8df)(__m512d)(A), \
|
||||
(__v8df)_mm512_setzero_pd(), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm512_rcp28_pd(A) \
|
||||
_mm512_rcp28_round_pd((A), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -204,20 +204,20 @@
|
||||
#define _mm512_maskz_rcp28_pd(M, A) \
|
||||
_mm512_maskz_rcp28_round_pd((M), (A), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
#define _mm512_rcp28_round_ps(A, R) __extension__ ({ \
|
||||
#define _mm512_rcp28_round_ps(A, R) \
|
||||
(__m512)__builtin_ia32_rcp28ps_mask((__v16sf)(__m512)(A), \
|
||||
(__v16sf)_mm512_setzero_ps(), \
|
||||
(__mmask16)-1, (int)(R)); })
|
||||
(__mmask16)-1, (int)(R))
|
||||
|
||||
#define _mm512_mask_rcp28_round_ps(S, M, A, R) __extension__ ({ \
|
||||
#define _mm512_mask_rcp28_round_ps(S, M, A, R) \
|
||||
(__m512)__builtin_ia32_rcp28ps_mask((__v16sf)(__m512)(A), \
|
||||
(__v16sf)(__m512)(S), (__mmask16)(M), \
|
||||
(int)(R)); })
|
||||
(int)(R))
|
||||
|
||||
#define _mm512_maskz_rcp28_round_ps(M, A, R) __extension__ ({ \
|
||||
#define _mm512_maskz_rcp28_round_ps(M, A, R) \
|
||||
(__m512)__builtin_ia32_rcp28ps_mask((__v16sf)(__m512)(A), \
|
||||
(__v16sf)_mm512_setzero_ps(), \
|
||||
(__mmask16)(M), (int)(R)); })
|
||||
(__mmask16)(M), (int)(R))
|
||||
|
||||
#define _mm512_rcp28_ps(A) \
|
||||
_mm512_rcp28_round_ps((A), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -228,23 +228,23 @@
|
||||
#define _mm512_maskz_rcp28_ps(M, A) \
|
||||
_mm512_maskz_rcp28_round_ps((M), (A), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
#define _mm_rcp28_round_ss(A, B, R) __extension__ ({ \
|
||||
#define _mm_rcp28_round_ss(A, B, R) \
|
||||
(__m128)__builtin_ia32_rcp28ss_round_mask((__v4sf)(__m128)(A), \
|
||||
(__v4sf)(__m128)(B), \
|
||||
(__v4sf)_mm_setzero_ps(), \
|
||||
(__mmask8)-1, (int)(R)); })
|
||||
(__mmask8)-1, (int)(R))
|
||||
|
||||
#define _mm_mask_rcp28_round_ss(S, M, A, B, R) __extension__ ({ \
|
||||
#define _mm_mask_rcp28_round_ss(S, M, A, B, R) \
|
||||
(__m128)__builtin_ia32_rcp28ss_round_mask((__v4sf)(__m128)(A), \
|
||||
(__v4sf)(__m128)(B), \
|
||||
(__v4sf)(__m128)(S), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm_maskz_rcp28_round_ss(M, A, B, R) __extension__ ({ \
|
||||
#define _mm_maskz_rcp28_round_ss(M, A, B, R) \
|
||||
(__m128)__builtin_ia32_rcp28ss_round_mask((__v4sf)(__m128)(A), \
|
||||
(__v4sf)(__m128)(B), \
|
||||
(__v4sf)_mm_setzero_ps(), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm_rcp28_ss(A, B) \
|
||||
_mm_rcp28_round_ss((A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -255,23 +255,23 @@
|
||||
#define _mm_maskz_rcp28_ss(M, A, B) \
|
||||
_mm_maskz_rcp28_round_ss((M), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
#define _mm_rcp28_round_sd(A, B, R) __extension__ ({ \
|
||||
#define _mm_rcp28_round_sd(A, B, R) \
|
||||
(__m128d)__builtin_ia32_rcp28sd_round_mask((__v2df)(__m128d)(A), \
|
||||
(__v2df)(__m128d)(B), \
|
||||
(__v2df)_mm_setzero_pd(), \
|
||||
(__mmask8)-1, (int)(R)); })
|
||||
(__mmask8)-1, (int)(R))
|
||||
|
||||
#define _mm_mask_rcp28_round_sd(S, M, A, B, R) __extension__ ({ \
|
||||
#define _mm_mask_rcp28_round_sd(S, M, A, B, R) \
|
||||
(__m128d)__builtin_ia32_rcp28sd_round_mask((__v2df)(__m128d)(A), \
|
||||
(__v2df)(__m128d)(B), \
|
||||
(__v2df)(__m128d)(S), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm_maskz_rcp28_round_sd(M, A, B, R) __extension__ ({ \
|
||||
#define _mm_maskz_rcp28_round_sd(M, A, B, R) \
|
||||
(__m128d)__builtin_ia32_rcp28sd_round_mask((__v2df)(__m128d)(A), \
|
||||
(__v2df)(__m128d)(B), \
|
||||
(__v2df)_mm_setzero_pd(), \
|
||||
(__mmask8)(M), (int)(R)); })
|
||||
(__mmask8)(M), (int)(R))
|
||||
|
||||
#define _mm_rcp28_sd(A, B) \
|
||||
_mm_rcp28_round_sd((A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||
@@ -282,4 +282,4 @@
|
||||
#define _mm_maskz_rcp28_sd(M, A, B) \
|
||||
_mm_maskz_rcp28_round_sd((M), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
#endif // __AVX512ERINTRIN_H
|
||||
#endif /* __AVX512ERINTRIN_H */
|
||||
|
||||
+3007
-3553
File diff suppressed because it is too large
Load Diff
@@ -29,62 +29,52 @@
|
||||
#define __IFMAINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512ifma")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512ifma"), __min_vector_width__(512)))
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_madd52hi_epu64 (__m512i __X, __m512i __Y, __m512i __Z)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpmadd52huq512_mask ((__v8di) __X,
|
||||
(__v8di) __Y,
|
||||
(__v8di) __Z,
|
||||
(__mmask8) -1);
|
||||
return (__m512i)__builtin_ia32_vpmadd52huq512((__v8di) __X, (__v8di) __Y,
|
||||
(__v8di) __Z);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_madd52hi_epu64 (__m512i __W, __mmask8 __M, __m512i __X,
|
||||
__m512i __Y)
|
||||
_mm512_mask_madd52hi_epu64 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpmadd52huq512_mask ((__v8di) __W,
|
||||
(__v8di) __X,
|
||||
(__v8di) __Y,
|
||||
(__mmask8) __M);
|
||||
return (__m512i)__builtin_ia32_selectq_512(__M,
|
||||
(__v8di)_mm512_madd52hi_epu64(__W, __X, __Y),
|
||||
(__v8di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_madd52hi_epu64 (__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpmadd52huq512_maskz ((__v8di) __X,
|
||||
(__v8di) __Y,
|
||||
(__v8di) __Z,
|
||||
(__mmask8) __M);
|
||||
return (__m512i)__builtin_ia32_selectq_512(__M,
|
||||
(__v8di)_mm512_madd52hi_epu64(__X, __Y, __Z),
|
||||
(__v8di)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_madd52lo_epu64 (__m512i __X, __m512i __Y, __m512i __Z)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __X,
|
||||
(__v8di) __Y,
|
||||
(__v8di) __Z,
|
||||
(__mmask8) -1);
|
||||
return (__m512i)__builtin_ia32_vpmadd52luq512((__v8di) __X, (__v8di) __Y,
|
||||
(__v8di) __Z);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_madd52lo_epu64 (__m512i __W, __mmask8 __M, __m512i __X,
|
||||
__m512i __Y)
|
||||
_mm512_mask_madd52lo_epu64 (__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __W,
|
||||
(__v8di) __X,
|
||||
(__v8di) __Y,
|
||||
(__mmask8) __M);
|
||||
return (__m512i)__builtin_ia32_selectq_512(__M,
|
||||
(__v8di)_mm512_madd52lo_epu64(__W, __X, __Y),
|
||||
(__v8di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_madd52lo_epu64 (__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpmadd52luq512_maskz ((__v8di) __X,
|
||||
(__v8di) __Y,
|
||||
(__v8di) __Z,
|
||||
(__mmask8) __M);
|
||||
return (__m512i)__builtin_ia32_selectq_512(__M,
|
||||
(__v8di)_mm512_madd52lo_epu64(__X, __Y, __Z),
|
||||
(__v8di)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
@@ -29,121 +29,105 @@
|
||||
#define __IFMAVLINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512ifma,avx512vl")))
|
||||
#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512ifma,avx512vl"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512ifma,avx512vl"), __min_vector_width__(256)))
|
||||
|
||||
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_madd52hi_epu64 (__m128i __X, __m128i __Y, __m128i __Z)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpmadd52huq128_mask ((__v2di) __X,
|
||||
(__v2di) __Y,
|
||||
(__v2di) __Z,
|
||||
(__mmask8) -1);
|
||||
return (__m128i)__builtin_ia32_vpmadd52huq128((__v2di) __X, (__v2di) __Y,
|
||||
(__v2di) __Z);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_madd52hi_epu64 (__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpmadd52huq128_mask ((__v2di) __W,
|
||||
(__v2di) __X,
|
||||
(__v2di) __Y,
|
||||
(__mmask8) __M);
|
||||
return (__m128i)__builtin_ia32_selectq_128(__M,
|
||||
(__v2di)_mm_madd52hi_epu64(__W, __X, __Y),
|
||||
(__v2di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_madd52hi_epu64 (__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpmadd52huq128_maskz ((__v2di) __X,
|
||||
(__v2di) __Y,
|
||||
(__v2di) __Z,
|
||||
(__mmask8) __M);
|
||||
return (__m128i)__builtin_ia32_selectq_128(__M,
|
||||
(__v2di)_mm_madd52hi_epu64(__X, __Y, __Z),
|
||||
(__v2di)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_madd52hi_epu64 (__m256i __X, __m256i __Y, __m256i __Z)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpmadd52huq256_mask ((__v4di) __X,
|
||||
(__v4di) __Y,
|
||||
(__v4di) __Z,
|
||||
(__mmask8) -1);
|
||||
return (__m256i)__builtin_ia32_vpmadd52huq256((__v4di)__X, (__v4di)__Y,
|
||||
(__v4di)__Z);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_mask_madd52hi_epu64 (__m256i __W, __mmask8 __M, __m256i __X,
|
||||
__m256i __Y)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_madd52hi_epu64 (__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpmadd52huq256_mask ((__v4di) __W,
|
||||
(__v4di) __X,
|
||||
(__v4di) __Y,
|
||||
(__mmask8) __M);
|
||||
return (__m256i)__builtin_ia32_selectq_256(__M,
|
||||
(__v4di)_mm256_madd52hi_epu64(__W, __X, __Y),
|
||||
(__v4di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_madd52hi_epu64 (__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpmadd52huq256_maskz ((__v4di) __X,
|
||||
(__v4di) __Y,
|
||||
(__v4di) __Z,
|
||||
(__mmask8) __M);
|
||||
return (__m256i)__builtin_ia32_selectq_256(__M,
|
||||
(__v4di)_mm256_madd52hi_epu64(__X, __Y, __Z),
|
||||
(__v4di)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_madd52lo_epu64 (__m128i __X, __m128i __Y, __m128i __Z)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpmadd52luq128_mask ((__v2di) __X,
|
||||
(__v2di) __Y,
|
||||
(__v2di) __Z,
|
||||
(__mmask8) -1);
|
||||
return (__m128i)__builtin_ia32_vpmadd52luq128((__v2di)__X, (__v2di)__Y,
|
||||
(__v2di)__Z);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_madd52lo_epu64 (__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpmadd52luq128_mask ((__v2di) __W,
|
||||
(__v2di) __X,
|
||||
(__v2di) __Y,
|
||||
(__mmask8) __M);
|
||||
return (__m128i)__builtin_ia32_selectq_128(__M,
|
||||
(__v2di)_mm_madd52lo_epu64(__W, __X, __Y),
|
||||
(__v2di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_madd52lo_epu64 (__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpmadd52luq128_maskz ((__v2di) __X,
|
||||
(__v2di) __Y,
|
||||
(__v2di) __Z,
|
||||
(__mmask8) __M);
|
||||
return (__m128i)__builtin_ia32_selectq_128(__M,
|
||||
(__v2di)_mm_madd52lo_epu64(__X, __Y, __Z),
|
||||
(__v2di)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_madd52lo_epu64 (__m256i __X, __m256i __Y, __m256i __Z)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpmadd52luq256_mask ((__v4di) __X,
|
||||
(__v4di) __Y,
|
||||
(__v4di) __Z,
|
||||
(__mmask8) -1);
|
||||
return (__m256i)__builtin_ia32_vpmadd52luq256((__v4di)__X, (__v4di)__Y,
|
||||
(__v4di)__Z);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_mask_madd52lo_epu64 (__m256i __W, __mmask8 __M, __m256i __X,
|
||||
__m256i __Y)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_madd52lo_epu64 (__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpmadd52luq256_mask ((__v4di) __W,
|
||||
(__v4di) __X,
|
||||
(__v4di) __Y,
|
||||
(__mmask8) __M);
|
||||
return (__m256i)__builtin_ia32_selectq_256(__M,
|
||||
(__v4di)_mm256_madd52lo_epu64(__W, __X, __Y),
|
||||
(__v4di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_madd52lo_epu64 (__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpmadd52luq256_maskz ((__v4di) __X,
|
||||
(__v4di) __Y,
|
||||
(__v4di) __Z,
|
||||
(__mmask8) __M);
|
||||
return (__m256i)__builtin_ia32_selectq_256(__M,
|
||||
(__v4di)_mm256_madd52lo_epu64(__X, __Y, __Z),
|
||||
(__v4di)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS128
|
||||
#undef __DEFAULT_FN_ATTRS256
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*===------------- avx512pfintrin.h - PF intrinsics ------------------===
|
||||
/*===------------- avx512pfintrin.h - PF intrinsics ------------------------===
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
@@ -31,80 +31,80 @@
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512pf")))
|
||||
|
||||
#define _mm512_mask_prefetch_i32gather_pd(index, mask, addr, scale, hint) __extension__ ({\
|
||||
#define _mm512_mask_prefetch_i32gather_pd(index, mask, addr, scale, hint) \
|
||||
__builtin_ia32_gatherpfdpd((__mmask8)(mask), (__v8si)(__m256i)(index), \
|
||||
(long long const *)(addr), (int)(scale), \
|
||||
(int)(hint)); })
|
||||
|
||||
#define _mm512_prefetch_i32gather_pd(index, addr, scale, hint) __extension__ ({\
|
||||
(void const *)(addr), (int)(scale), \
|
||||
(int)(hint))
|
||||
|
||||
#define _mm512_prefetch_i32gather_pd(index, addr, scale, hint) \
|
||||
__builtin_ia32_gatherpfdpd((__mmask8) -1, (__v8si)(__m256i)(index), \
|
||||
(long long const *)(addr), (int)(scale), \
|
||||
(int)(hint)); })
|
||||
(void const *)(addr), (int)(scale), \
|
||||
(int)(hint))
|
||||
|
||||
#define _mm512_mask_prefetch_i32gather_ps(index, mask, addr, scale, hint) ({\
|
||||
#define _mm512_mask_prefetch_i32gather_ps(index, mask, addr, scale, hint) \
|
||||
__builtin_ia32_gatherpfdps((__mmask16)(mask), \
|
||||
(__v16si)(__m512i)(index), (int const *)(addr), \
|
||||
(int)(scale), (int)(hint)); })
|
||||
(__v16si)(__m512i)(index), (void const *)(addr), \
|
||||
(int)(scale), (int)(hint))
|
||||
|
||||
#define _mm512_prefetch_i32gather_ps(index, addr, scale, hint) ({\
|
||||
#define _mm512_prefetch_i32gather_ps(index, addr, scale, hint) \
|
||||
__builtin_ia32_gatherpfdps((__mmask16) -1, \
|
||||
(__v16si)(__m512i)(index), (int const *)(addr), \
|
||||
(int)(scale), (int)(hint)); })
|
||||
(__v16si)(__m512i)(index), (void const *)(addr), \
|
||||
(int)(scale), (int)(hint))
|
||||
|
||||
#define _mm512_mask_prefetch_i64gather_pd(index, mask, addr, scale, hint) __extension__ ({\
|
||||
#define _mm512_mask_prefetch_i64gather_pd(index, mask, addr, scale, hint) \
|
||||
__builtin_ia32_gatherpfqpd((__mmask8)(mask), (__v8di)(__m512i)(index), \
|
||||
(long long const *)(addr), (int)(scale), \
|
||||
(int)(hint)); })
|
||||
(void const *)(addr), (int)(scale), \
|
||||
(int)(hint))
|
||||
|
||||
#define _mm512_prefetch_i64gather_pd(index, addr, scale, hint) __extension__ ({\
|
||||
#define _mm512_prefetch_i64gather_pd(index, addr, scale, hint) \
|
||||
__builtin_ia32_gatherpfqpd((__mmask8) -1, (__v8di)(__m512i)(index), \
|
||||
(long long const *)(addr), (int)(scale), \
|
||||
(int)(hint)); })
|
||||
|
||||
#define _mm512_mask_prefetch_i64gather_ps(index, mask, addr, scale, hint) ({\
|
||||
(void const *)(addr), (int)(scale), \
|
||||
(int)(hint))
|
||||
|
||||
#define _mm512_mask_prefetch_i64gather_ps(index, mask, addr, scale, hint) \
|
||||
__builtin_ia32_gatherpfqps((__mmask8)(mask), (__v8di)(__m512i)(index), \
|
||||
(int const *)(addr), (int)(scale), (int)(hint)); })
|
||||
(void const *)(addr), (int)(scale), (int)(hint))
|
||||
|
||||
#define _mm512_prefetch_i64gather_ps(index, addr, scale, hint) ({\
|
||||
#define _mm512_prefetch_i64gather_ps(index, addr, scale, hint) \
|
||||
__builtin_ia32_gatherpfqps((__mmask8) -1, (__v8di)(__m512i)(index), \
|
||||
(int const *)(addr), (int)(scale), (int)(hint)); })
|
||||
(void const *)(addr), (int)(scale), (int)(hint))
|
||||
|
||||
#define _mm512_prefetch_i32scatter_pd(addr, index, scale, hint) __extension__ ({\
|
||||
#define _mm512_prefetch_i32scatter_pd(addr, index, scale, hint) \
|
||||
__builtin_ia32_scatterpfdpd((__mmask8)-1, (__v8si)(__m256i)(index), \
|
||||
(long long *)(addr), (int)(scale), \
|
||||
(int)(hint)); })
|
||||
(void *)(addr), (int)(scale), \
|
||||
(int)(hint))
|
||||
|
||||
#define _mm512_mask_prefetch_i32scatter_pd(addr, mask, index, scale, hint) __extension__ ({\
|
||||
#define _mm512_mask_prefetch_i32scatter_pd(addr, mask, index, scale, hint) \
|
||||
__builtin_ia32_scatterpfdpd((__mmask8)(mask), (__v8si)(__m256i)(index), \
|
||||
(long long *)(addr), (int)(scale), \
|
||||
(int)(hint)); })
|
||||
(void *)(addr), (int)(scale), \
|
||||
(int)(hint))
|
||||
|
||||
#define _mm512_prefetch_i32scatter_ps(addr, index, scale, hint) __extension__ ({\
|
||||
#define _mm512_prefetch_i32scatter_ps(addr, index, scale, hint) \
|
||||
__builtin_ia32_scatterpfdps((__mmask16)-1, (__v16si)(__m512i)(index), \
|
||||
(int *)(addr), (int)(scale), (int)(hint)); })
|
||||
(void *)(addr), (int)(scale), (int)(hint))
|
||||
|
||||
#define _mm512_mask_prefetch_i32scatter_ps(addr, mask, index, scale, hint) __extension__ ({\
|
||||
#define _mm512_mask_prefetch_i32scatter_ps(addr, mask, index, scale, hint) \
|
||||
__builtin_ia32_scatterpfdps((__mmask16)(mask), \
|
||||
(__v16si)(__m512i)(index), (int *)(addr), \
|
||||
(int)(scale), (int)(hint)); })
|
||||
(__v16si)(__m512i)(index), (void *)(addr), \
|
||||
(int)(scale), (int)(hint))
|
||||
|
||||
#define _mm512_prefetch_i64scatter_pd(addr, index, scale, hint) __extension__ ({\
|
||||
#define _mm512_prefetch_i64scatter_pd(addr, index, scale, hint) \
|
||||
__builtin_ia32_scatterpfqpd((__mmask8)-1, (__v8di)(__m512i)(index), \
|
||||
(long long *)(addr), (int)(scale), \
|
||||
(int)(hint)); })
|
||||
(void *)(addr), (int)(scale), \
|
||||
(int)(hint))
|
||||
|
||||
#define _mm512_mask_prefetch_i64scatter_pd(addr, mask, index, scale, hint) __extension__ ({\
|
||||
#define _mm512_mask_prefetch_i64scatter_pd(addr, mask, index, scale, hint) \
|
||||
__builtin_ia32_scatterpfqpd((__mmask8)(mask), (__v8di)(__m512i)(index), \
|
||||
(long long *)(addr), (int)(scale), \
|
||||
(int)(hint)); })
|
||||
(void *)(addr), (int)(scale), \
|
||||
(int)(hint))
|
||||
|
||||
#define _mm512_prefetch_i64scatter_ps(addr, index, scale, hint) __extension__ ({\
|
||||
#define _mm512_prefetch_i64scatter_ps(addr, index, scale, hint) \
|
||||
__builtin_ia32_scatterpfqps((__mmask8)-1, (__v8di)(__m512i)(index), \
|
||||
(int *)(addr), (int)(scale), (int)(hint)); })
|
||||
(void *)(addr), (int)(scale), (int)(hint))
|
||||
|
||||
#define _mm512_mask_prefetch_i64scatter_ps(addr, mask, index, scale, hint) __extension__ ({\
|
||||
#define _mm512_mask_prefetch_i64scatter_ps(addr, mask, index, scale, hint) \
|
||||
__builtin_ia32_scatterpfqps((__mmask8)(mask), (__v8di)(__m512i)(index), \
|
||||
(int *)(addr), (int)(scale), (int)(hint)); })
|
||||
(void *)(addr), (int)(scale), (int)(hint))
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
#define __AVX512VBMI2INTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi2")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi2"), __min_vector_width__(512)))
|
||||
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
@@ -44,7 +44,7 @@ static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_compress_epi16(__mmask32 __U, __m512i __D)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi) __D,
|
||||
(__v32hi) _mm512_setzero_hi(),
|
||||
(__v32hi) _mm512_setzero_si512(),
|
||||
__U);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_compress_epi8(__mmask64 __U, __m512i __D)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi) __D,
|
||||
(__v64qi) _mm512_setzero_qi(),
|
||||
(__v64qi) _mm512_setzero_si512(),
|
||||
__U);
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_expand_epi16(__mmask32 __U, __m512i __D)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_expandhi512_mask ((__v32hi) __D,
|
||||
(__v32hi) _mm512_setzero_hi(),
|
||||
(__v32hi) _mm512_setzero_si512(),
|
||||
__U);
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_expand_epi8(__mmask64 __U, __m512i __D)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_expandqi512_mask ((__v64qi) __D,
|
||||
(__v64qi) _mm512_setzero_qi(),
|
||||
(__v64qi) _mm512_setzero_si512(),
|
||||
__U);
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_expandloadu_epi16(__mmask32 __U, void const *__P)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_expandloadhi512_mask ((const __v32hi *)__P,
|
||||
(__v32hi) _mm512_setzero_hi(),
|
||||
(__v32hi) _mm512_setzero_si512(),
|
||||
__U);
|
||||
}
|
||||
|
||||
@@ -138,250 +138,230 @@ static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_expandloadu_epi8(__mmask64 __U, void const *__P)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_expandloadqi512_mask ((const __v64qi *)__P,
|
||||
(__v64qi) _mm512_setzero_qi(),
|
||||
(__v64qi) _mm512_setzero_si512(),
|
||||
__U);
|
||||
}
|
||||
|
||||
#define _mm512_mask_shldi_epi64(S, U, A, B, I) __extension__ ({ \
|
||||
(__m512i)__builtin_ia32_vpshldq512_mask((__v8di)(A), \
|
||||
(__v8di)(B), \
|
||||
(int)(I), \
|
||||
(__v8di)(S), \
|
||||
(__mmask8)(U)); })
|
||||
|
||||
#define _mm512_maskz_shldi_epi64(U, A, B, I) \
|
||||
_mm512_mask_shldi_epi64(_mm512_setzero_hi(), (U), (A), (B), (I))
|
||||
|
||||
#define _mm512_shldi_epi64(A, B, I) \
|
||||
_mm512_mask_shldi_epi64(_mm512_undefined(), (__mmask8)(-1), (A), (B), (I))
|
||||
(__m512i)__builtin_ia32_vpshldq512((__v8di)(__m512i)(A), \
|
||||
(__v8di)(__m512i)(B), (int)(I))
|
||||
|
||||
#define _mm512_mask_shldi_epi32(S, U, A, B, I) __extension__ ({ \
|
||||
(__m512i)__builtin_ia32_vpshldd512_mask((__v16si)(A), \
|
||||
(__v16si)(B), \
|
||||
(int)(I), \
|
||||
(__v16si)(S), \
|
||||
(__mmask16)(U)); })
|
||||
#define _mm512_mask_shldi_epi64(S, U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectq_512((__mmask8)(U), \
|
||||
(__v8di)_mm512_shldi_epi64((A), (B), (I)), \
|
||||
(__v8di)(__m512i)(S))
|
||||
|
||||
#define _mm512_maskz_shldi_epi32(U, A, B, I) \
|
||||
_mm512_mask_shldi_epi32(_mm512_setzero_hi(), (U), (A), (B), (I))
|
||||
#define _mm512_maskz_shldi_epi64(U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectq_512((__mmask8)(U), \
|
||||
(__v8di)_mm512_shldi_epi64((A), (B), (I)), \
|
||||
(__v8di)_mm512_setzero_si512())
|
||||
|
||||
#define _mm512_shldi_epi32(A, B, I) \
|
||||
_mm512_mask_shldi_epi32(_mm512_undefined(), (__mmask16)(-1), (A), (B), (I))
|
||||
(__m512i)__builtin_ia32_vpshldd512((__v16si)(__m512i)(A), \
|
||||
(__v16si)(__m512i)(B), (int)(I))
|
||||
|
||||
#define _mm512_mask_shldi_epi16(S, U, A, B, I) __extension__ ({ \
|
||||
(__m512i)__builtin_ia32_vpshldw512_mask((__v32hi)(A), \
|
||||
(__v32hi)(B), \
|
||||
(int)(I), \
|
||||
(__v32hi)(S), \
|
||||
(__mmask32)(U)); })
|
||||
#define _mm512_mask_shldi_epi32(S, U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectd_512((__mmask16)(U), \
|
||||
(__v16si)_mm512_shldi_epi32((A), (B), (I)), \
|
||||
(__v16si)(__m512i)(S))
|
||||
|
||||
#define _mm512_maskz_shldi_epi16(U, A, B, I) \
|
||||
_mm512_mask_shldi_epi16(_mm512_setzero_hi(), (U), (A), (B), (I))
|
||||
#define _mm512_maskz_shldi_epi32(U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectd_512((__mmask16)(U), \
|
||||
(__v16si)_mm512_shldi_epi32((A), (B), (I)), \
|
||||
(__v16si)_mm512_setzero_si512())
|
||||
|
||||
#define _mm512_shldi_epi16(A, B, I) \
|
||||
_mm512_mask_shldi_epi16(_mm512_undefined(), (__mmask32)(-1), (A), (B), (I))
|
||||
(__m512i)__builtin_ia32_vpshldw512((__v32hi)(__m512i)(A), \
|
||||
(__v32hi)(__m512i)(B), (int)(I))
|
||||
|
||||
#define _mm512_mask_shrdi_epi64(S, U, A, B, I) __extension__ ({ \
|
||||
(__m512i)__builtin_ia32_vpshrdq512_mask((__v8di)(A), \
|
||||
(__v8di)(B), \
|
||||
(int)(I), \
|
||||
(__v8di)(S), \
|
||||
(__mmask8)(U)); })
|
||||
#define _mm512_mask_shldi_epi16(S, U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
|
||||
(__v32hi)_mm512_shldi_epi16((A), (B), (I)), \
|
||||
(__v32hi)(__m512i)(S))
|
||||
|
||||
#define _mm512_maskz_shrdi_epi64(U, A, B, I) \
|
||||
_mm512_mask_shrdi_epi64(_mm512_setzero_hi(), (U), (A), (B), (I))
|
||||
#define _mm512_maskz_shldi_epi16(U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
|
||||
(__v32hi)_mm512_shldi_epi16((A), (B), (I)), \
|
||||
(__v32hi)_mm512_setzero_si512())
|
||||
|
||||
#define _mm512_shrdi_epi64(A, B, I) \
|
||||
_mm512_mask_shrdi_epi64(_mm512_undefined(), (__mmask8)(-1), (A), (B), (I))
|
||||
(__m512i)__builtin_ia32_vpshrdq512((__v8di)(__m512i)(A), \
|
||||
(__v8di)(__m512i)(B), (int)(I))
|
||||
|
||||
#define _mm512_mask_shrdi_epi32(S, U, A, B, I) __extension__ ({ \
|
||||
(__m512i)__builtin_ia32_vpshrdd512_mask((__v16si)(A), \
|
||||
(__v16si)(B), \
|
||||
(int)(I), \
|
||||
(__v16si)(S), \
|
||||
(__mmask16)(U)); })
|
||||
#define _mm512_mask_shrdi_epi64(S, U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectq_512((__mmask8)(U), \
|
||||
(__v8di)_mm512_shrdi_epi64((A), (B), (I)), \
|
||||
(__v8di)(__m512i)(S))
|
||||
|
||||
#define _mm512_maskz_shrdi_epi32(U, A, B, I) \
|
||||
_mm512_mask_shrdi_epi32(_mm512_setzero_hi(), (U), (A), (B), (I))
|
||||
#define _mm512_maskz_shrdi_epi64(U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectq_512((__mmask8)(U), \
|
||||
(__v8di)_mm512_shrdi_epi64((A), (B), (I)), \
|
||||
(__v8di)_mm512_setzero_si512())
|
||||
|
||||
#define _mm512_shrdi_epi32(A, B, I) \
|
||||
_mm512_mask_shrdi_epi32(_mm512_undefined(), (__mmask16)(-1), (A), (B), (I))
|
||||
(__m512i)__builtin_ia32_vpshrdd512((__v16si)(__m512i)(A), \
|
||||
(__v16si)(__m512i)(B), (int)(I))
|
||||
|
||||
#define _mm512_mask_shrdi_epi16(S, U, A, B, I) __extension__ ({ \
|
||||
(__m512i)__builtin_ia32_vpshrdw512_mask((__v32hi)(A), \
|
||||
(__v32hi)(B), \
|
||||
(int)(I), \
|
||||
(__v32hi)(S), \
|
||||
(__mmask32)(U)); })
|
||||
#define _mm512_mask_shrdi_epi32(S, U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectd_512((__mmask16)(U), \
|
||||
(__v16si)_mm512_shrdi_epi32((A), (B), (I)), \
|
||||
(__v16si)(__m512i)(S))
|
||||
|
||||
#define _mm512_maskz_shrdi_epi16(U, A, B, I) \
|
||||
_mm512_mask_shrdi_epi16(_mm512_setzero_hi(), (U), (A), (B), (I))
|
||||
#define _mm512_maskz_shrdi_epi32(U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectd_512((__mmask16)(U), \
|
||||
(__v16si)_mm512_shrdi_epi32((A), (B), (I)), \
|
||||
(__v16si)_mm512_setzero_si512())
|
||||
|
||||
#define _mm512_shrdi_epi16(A, B, I) \
|
||||
_mm512_mask_shrdi_epi16(_mm512_undefined(), (__mmask32)(-1), (A), (B), (I))
|
||||
(__m512i)__builtin_ia32_vpshrdw512((__v32hi)(__m512i)(A), \
|
||||
(__v32hi)(__m512i)(B), (int)(I))
|
||||
|
||||
#define _mm512_mask_shrdi_epi16(S, U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
|
||||
(__v32hi)_mm512_shrdi_epi16((A), (B), (I)), \
|
||||
(__v32hi)(__m512i)(S))
|
||||
|
||||
#define _mm512_maskz_shrdi_epi16(U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectw_512((__mmask32)(U), \
|
||||
(__v32hi)_mm512_shrdi_epi16((A), (B), (I)), \
|
||||
(__v32hi)_mm512_setzero_si512())
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_shldv_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B)
|
||||
_mm512_shldv_epi64(__m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshldvq512_mask ((__v8di) __S,
|
||||
(__v8di) __A,
|
||||
(__v8di) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_vpshldvq512((__v8di)__A, (__v8di)__B,
|
||||
(__v8di)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_shldv_epi64(__mmask8 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_mask_shldv_epi64(__m512i __A, __mmask8 __U, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshldvq512_maskz ((__v8di) __S,
|
||||
(__v8di) __A,
|
||||
(__v8di) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_selectq_512(__U,
|
||||
(__v8di)_mm512_shldv_epi64(__A, __B, __C),
|
||||
(__v8di)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_shldv_epi64(__m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_maskz_shldv_epi64(__mmask8 __U, __m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshldvq512_mask ((__v8di) __S,
|
||||
(__v8di) __A,
|
||||
(__v8di) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m512i)__builtin_ia32_selectq_512(__U,
|
||||
(__v8di)_mm512_shldv_epi64(__A, __B, __C),
|
||||
(__v8di)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_shldv_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
|
||||
_mm512_shldv_epi32(__m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshldvd512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_vpshldvd512((__v16si)__A, (__v16si)__B,
|
||||
(__v16si)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_shldv_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_mask_shldv_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshldvd512_maskz ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_shldv_epi32(__A, __B, __C),
|
||||
(__v16si)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_shldv_epi32(__m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_maskz_shldv_epi32(__mmask16 __U, __m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshldvd512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) -1);
|
||||
}
|
||||
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_shldv_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshldvw512_mask ((__v32hi) __S,
|
||||
(__v32hi) __A,
|
||||
(__v32hi) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_shldv_epi32(__A, __B, __C),
|
||||
(__v16si)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_shldv_epi16(__mmask32 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_shldv_epi16(__m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshldvw512_maskz ((__v32hi) __S,
|
||||
(__v32hi) __A,
|
||||
(__v32hi) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_vpshldvw512((__v32hi)__A, (__v32hi)__B,
|
||||
(__v32hi)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_shldv_epi16(__m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_mask_shldv_epi16(__m512i __A, __mmask32 __U, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshldvw512_mask ((__v32hi) __S,
|
||||
(__v32hi) __A,
|
||||
(__v32hi) __B,
|
||||
(__mmask32) -1);
|
||||
return (__m512i)__builtin_ia32_selectw_512(__U,
|
||||
(__v32hi)_mm512_shldv_epi16(__A, __B, __C),
|
||||
(__v32hi)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_shrdv_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B)
|
||||
_mm512_maskz_shldv_epi16(__mmask32 __U, __m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshrdvq512_mask ((__v8di) __S,
|
||||
(__v8di) __A,
|
||||
(__v8di) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_selectw_512(__U,
|
||||
(__v32hi)_mm512_shldv_epi16(__A, __B, __C),
|
||||
(__v32hi)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_shrdv_epi64(__mmask8 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_shrdv_epi64(__m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshrdvq512_maskz ((__v8di) __S,
|
||||
(__v8di) __A,
|
||||
(__v8di) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_vpshrdvq512((__v8di)__A, (__v8di)__B,
|
||||
(__v8di)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_shrdv_epi64(__m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_mask_shrdv_epi64(__m512i __A, __mmask8 __U, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshrdvq512_mask ((__v8di) __S,
|
||||
(__v8di) __A,
|
||||
(__v8di) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m512i)__builtin_ia32_selectq_512(__U,
|
||||
(__v8di)_mm512_shrdv_epi64(__A, __B, __C),
|
||||
(__v8di)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_shrdv_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
|
||||
_mm512_maskz_shrdv_epi64(__mmask8 __U, __m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshrdvd512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_selectq_512(__U,
|
||||
(__v8di)_mm512_shrdv_epi64(__A, __B, __C),
|
||||
(__v8di)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_shrdv_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_shrdv_epi32(__m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshrdvd512_maskz ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
__U);
|
||||
return (__m512i)__builtin_ia32_vpshrdvd512((__v16si)__A, (__v16si)__B,
|
||||
(__v16si)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_shrdv_epi32(__m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_mask_shrdv_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshrdvd512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) -1);
|
||||
}
|
||||
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_shrdv_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshrdvw512_mask ((__v32hi) __S,
|
||||
(__v32hi) __A,
|
||||
(__v32hi) __B,
|
||||
__U);
|
||||
return (__m512i) __builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_shrdv_epi32(__A, __B, __C),
|
||||
(__v16si)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_shrdv_epi16(__mmask32 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_maskz_shrdv_epi32(__mmask16 __U, __m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshrdvw512_maskz ((__v32hi) __S,
|
||||
(__v32hi) __A,
|
||||
(__v32hi) __B,
|
||||
__U);
|
||||
return (__m512i) __builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_shrdv_epi32(__A, __B, __C),
|
||||
(__v16si)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_shrdv_epi16(__m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_shrdv_epi16(__m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpshrdvw512_mask ((__v32hi) __S,
|
||||
(__v32hi) __A,
|
||||
(__v32hi) __B,
|
||||
(__mmask32) -1);
|
||||
return (__m512i)__builtin_ia32_vpshrdvw512((__v32hi)__A, (__v32hi)__B,
|
||||
(__v32hi)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_shrdv_epi16(__m512i __A, __mmask32 __U, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i)__builtin_ia32_selectw_512(__U,
|
||||
(__v32hi)_mm512_shrdv_epi16(__A, __B, __C),
|
||||
(__v32hi)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_shrdv_epi16(__mmask32 __U, __m512i __A, __m512i __B, __m512i __C)
|
||||
{
|
||||
return (__m512i)__builtin_ia32_selectw_512(__U,
|
||||
(__v32hi)_mm512_shrdv_epi16(__A, __B, __C),
|
||||
(__v32hi)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -29,106 +29,88 @@
|
||||
#define __VBMIINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi"), __min_vector_width__(512)))
|
||||
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask2_permutex2var_epi8 (__m512i __A, __m512i __I,
|
||||
__mmask64 __U, __m512i __B)
|
||||
_mm512_permutex2var_epi8(__m512i __A, __m512i __I, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpermi2varqi512_mask ((__v64qi) __A,
|
||||
(__v64qi) __I
|
||||
/* idx */ ,
|
||||
(__v64qi) __B,
|
||||
(__mmask64) __U);
|
||||
return (__m512i)__builtin_ia32_vpermi2varqi512((__v64qi)__A, (__v64qi)__I,
|
||||
(__v64qi) __B);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_permutex2var_epi8 (__m512i __A, __m512i __I, __m512i __B)
|
||||
_mm512_mask_permutex2var_epi8(__m512i __A, __mmask64 __U, __m512i __I,
|
||||
__m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpermt2varqi512_mask ((__v64qi) __I
|
||||
/* idx */ ,
|
||||
(__v64qi) __A,
|
||||
(__v64qi) __B,
|
||||
(__mmask64) -1);
|
||||
return (__m512i)__builtin_ia32_selectb_512(__U,
|
||||
(__v64qi)_mm512_permutex2var_epi8(__A, __I, __B),
|
||||
(__v64qi)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_permutex2var_epi8 (__m512i __A, __mmask64 __U,
|
||||
__m512i __I, __m512i __B)
|
||||
_mm512_mask2_permutex2var_epi8(__m512i __A, __m512i __I, __mmask64 __U,
|
||||
__m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpermt2varqi512_mask ((__v64qi) __I
|
||||
/* idx */ ,
|
||||
(__v64qi) __A,
|
||||
(__v64qi) __B,
|
||||
(__mmask64) __U);
|
||||
return (__m512i)__builtin_ia32_selectb_512(__U,
|
||||
(__v64qi)_mm512_permutex2var_epi8(__A, __I, __B),
|
||||
(__v64qi)__I);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_permutex2var_epi8 (__mmask64 __U, __m512i __A,
|
||||
__m512i __I, __m512i __B)
|
||||
_mm512_maskz_permutex2var_epi8(__mmask64 __U, __m512i __A, __m512i __I,
|
||||
__m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpermt2varqi512_maskz ((__v64qi) __I
|
||||
/* idx */ ,
|
||||
(__v64qi) __A,
|
||||
(__v64qi) __B,
|
||||
(__mmask64) __U);
|
||||
return (__m512i)__builtin_ia32_selectb_512(__U,
|
||||
(__v64qi)_mm512_permutex2var_epi8(__A, __I, __B),
|
||||
(__v64qi)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_permutexvar_epi8 (__m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B,
|
||||
(__v64qi) __A,
|
||||
(__v64qi) _mm512_undefined_epi32 (),
|
||||
(__mmask64) -1);
|
||||
return (__m512i)__builtin_ia32_permvarqi512((__v64qi) __B, (__v64qi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_permutexvar_epi8 (__mmask64 __M, __m512i __A,
|
||||
__m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B,
|
||||
(__v64qi) __A,
|
||||
(__v64qi) _mm512_setzero_si512(),
|
||||
(__mmask64) __M);
|
||||
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
|
||||
(__v64qi)_mm512_permutexvar_epi8(__A, __B),
|
||||
(__v64qi)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_permutexvar_epi8 (__m512i __W, __mmask64 __M, __m512i __A,
|
||||
__m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B,
|
||||
(__v64qi) __A,
|
||||
(__v64qi) __W,
|
||||
(__mmask64) __M);
|
||||
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
|
||||
(__v64qi)_mm512_permutexvar_epi8(__A, __B),
|
||||
(__v64qi)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_multishift_epi64_epi8 (__m512i __W, __mmask64 __M, __m512i __X, __m512i __Y)
|
||||
_mm512_multishift_epi64_epi8(__m512i __X, __m512i __Y)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
|
||||
(__v64qi) __Y,
|
||||
(__v64qi) __W,
|
||||
(__mmask64) __M);
|
||||
return (__m512i)__builtin_ia32_vpmultishiftqb512((__v64qi)__X, (__v64qi) __Y);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_multishift_epi64_epi8 (__mmask64 __M, __m512i __X, __m512i __Y)
|
||||
_mm512_mask_multishift_epi64_epi8(__m512i __W, __mmask64 __M, __m512i __X,
|
||||
__m512i __Y)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
|
||||
(__v64qi) __Y,
|
||||
(__v64qi) _mm512_setzero_si512 (),
|
||||
(__mmask64) __M);
|
||||
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
|
||||
(__v64qi)_mm512_multishift_epi64_epi8(__X, __Y),
|
||||
(__v64qi)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_multishift_epi64_epi8 (__m512i __X, __m512i __Y)
|
||||
_mm512_maskz_multishift_epi64_epi8(__mmask64 __M, __m512i __X, __m512i __Y)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
|
||||
(__v64qi) __Y,
|
||||
(__v64qi) _mm512_undefined_epi32 (),
|
||||
(__mmask64) -1);
|
||||
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
|
||||
(__v64qi)_mm512_multishift_epi64_epi8(__X, __Y),
|
||||
(__v64qi)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -29,219 +29,174 @@
|
||||
#define __VBMIVLINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi,avx512vl")))
|
||||
#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi,avx512vl"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi,avx512vl"), __min_vector_width__(256)))
|
||||
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_mask2_permutex2var_epi8 (__m128i __A, __m128i __I, __mmask16 __U,
|
||||
__m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_permutex2var_epi8(__m128i __A, __m128i __I, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpermi2varqi128_mask ((__v16qi) __A,
|
||||
(__v16qi) __I
|
||||
/* idx */ ,
|
||||
(__v16qi) __B,
|
||||
(__mmask16)
|
||||
__U);
|
||||
return (__m128i)__builtin_ia32_vpermi2varqi128((__v16qi)__A,
|
||||
(__v16qi)__I,
|
||||
(__v16qi)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_mask2_permutex2var_epi8 (__m256i __A, __m256i __I,
|
||||
__mmask32 __U, __m256i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_permutex2var_epi8(__m128i __A, __mmask16 __U, __m128i __I,
|
||||
__m128i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpermi2varqi256_mask ((__v32qi) __A,
|
||||
(__v32qi) __I
|
||||
/* idx */ ,
|
||||
(__v32qi) __B,
|
||||
(__mmask32)
|
||||
__U);
|
||||
return (__m128i)__builtin_ia32_selectb_128(__U,
|
||||
(__v16qi)_mm_permutex2var_epi8(__A, __I, __B),
|
||||
(__v16qi)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_permutex2var_epi8 (__m128i __A, __m128i __I, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask2_permutex2var_epi8(__m128i __A, __m128i __I, __mmask16 __U,
|
||||
__m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpermt2varqi128_mask ((__v16qi) __I
|
||||
/* idx */ ,
|
||||
(__v16qi) __A,
|
||||
(__v16qi) __B,
|
||||
(__mmask16) -
|
||||
1);
|
||||
return (__m128i)__builtin_ia32_selectb_128(__U,
|
||||
(__v16qi)_mm_permutex2var_epi8(__A, __I, __B),
|
||||
(__v16qi)__I);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_mask_permutex2var_epi8 (__m128i __A, __mmask16 __U, __m128i __I,
|
||||
__m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_permutex2var_epi8(__mmask16 __U, __m128i __A, __m128i __I,
|
||||
__m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpermt2varqi128_mask ((__v16qi) __I
|
||||
/* idx */ ,
|
||||
(__v16qi) __A,
|
||||
(__v16qi) __B,
|
||||
(__mmask16)
|
||||
__U);
|
||||
return (__m128i)__builtin_ia32_selectb_128(__U,
|
||||
(__v16qi)_mm_permutex2var_epi8(__A, __I, __B),
|
||||
(__v16qi)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_maskz_permutex2var_epi8 (__mmask16 __U, __m128i __A, __m128i __I,
|
||||
__m128i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_permutex2var_epi8(__m256i __A, __m256i __I, __m256i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpermt2varqi128_maskz ((__v16qi) __I
|
||||
/* idx */ ,
|
||||
(__v16qi) __A,
|
||||
(__v16qi) __B,
|
||||
(__mmask16)
|
||||
__U);
|
||||
return (__m256i)__builtin_ia32_vpermi2varqi256((__v32qi)__A, (__v32qi)__I,
|
||||
(__v32qi)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_permutex2var_epi8 (__m256i __A, __m256i __I, __m256i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_permutex2var_epi8(__m256i __A, __mmask32 __U, __m256i __I,
|
||||
__m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpermt2varqi256_mask ((__v32qi) __I
|
||||
/* idx */ ,
|
||||
(__v32qi) __A,
|
||||
(__v32qi) __B,
|
||||
(__mmask32) -
|
||||
1);
|
||||
return (__m256i)__builtin_ia32_selectb_256(__U,
|
||||
(__v32qi)_mm256_permutex2var_epi8(__A, __I, __B),
|
||||
(__v32qi)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_mask_permutex2var_epi8 (__m256i __A, __mmask32 __U,
|
||||
__m256i __I, __m256i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask2_permutex2var_epi8(__m256i __A, __m256i __I, __mmask32 __U,
|
||||
__m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpermt2varqi256_mask ((__v32qi) __I
|
||||
/* idx */ ,
|
||||
(__v32qi) __A,
|
||||
(__v32qi) __B,
|
||||
(__mmask32)
|
||||
__U);
|
||||
return (__m256i)__builtin_ia32_selectb_256(__U,
|
||||
(__v32qi)_mm256_permutex2var_epi8(__A, __I, __B),
|
||||
(__v32qi)__I);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_maskz_permutex2var_epi8 (__mmask32 __U, __m256i __A,
|
||||
__m256i __I, __m256i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_permutex2var_epi8(__mmask32 __U, __m256i __A, __m256i __I,
|
||||
__m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpermt2varqi256_maskz ((__v32qi) __I
|
||||
/* idx */ ,
|
||||
(__v32qi) __A,
|
||||
(__v32qi) __B,
|
||||
(__mmask32)
|
||||
__U);
|
||||
return (__m256i)__builtin_ia32_selectb_256(__U,
|
||||
(__v32qi)_mm256_permutex2var_epi8(__A, __I, __B),
|
||||
(__v32qi)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_permutexvar_epi8 (__m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_permvarqi128_mask ((__v16qi) __B,
|
||||
(__v16qi) __A,
|
||||
(__v16qi) _mm_undefined_si128 (),
|
||||
(__mmask16) -1);
|
||||
return (__m128i)__builtin_ia32_permvarqi128((__v16qi)__B, (__v16qi)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_permutexvar_epi8 (__mmask16 __M, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_permvarqi128_mask ((__v16qi) __B,
|
||||
(__v16qi) __A,
|
||||
(__v16qi) _mm_setzero_si128 (),
|
||||
(__mmask16) __M);
|
||||
return (__m128i)__builtin_ia32_selectb_128((__mmask16)__M,
|
||||
(__v16qi)_mm_permutexvar_epi8(__A, __B),
|
||||
(__v16qi)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_permutexvar_epi8 (__m128i __W, __mmask16 __M, __m128i __A,
|
||||
__m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_permvarqi128_mask ((__v16qi) __B,
|
||||
(__v16qi) __A,
|
||||
(__v16qi) __W,
|
||||
(__mmask16) __M);
|
||||
return (__m128i)__builtin_ia32_selectb_128((__mmask16)__M,
|
||||
(__v16qi)_mm_permutexvar_epi8(__A, __B),
|
||||
(__v16qi)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_permutexvar_epi8 (__m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_permvarqi256_mask ((__v32qi) __B,
|
||||
(__v32qi) __A,
|
||||
(__v32qi) _mm256_undefined_si256 (),
|
||||
(__mmask32) -1);
|
||||
return (__m256i)__builtin_ia32_permvarqi256((__v32qi) __B, (__v32qi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_permutexvar_epi8 (__mmask32 __M, __m256i __A,
|
||||
__m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_permvarqi256_mask ((__v32qi) __B,
|
||||
(__v32qi) __A,
|
||||
(__v32qi) _mm256_setzero_si256 (),
|
||||
(__mmask32) __M);
|
||||
return (__m256i)__builtin_ia32_selectb_256((__mmask32)__M,
|
||||
(__v32qi)_mm256_permutexvar_epi8(__A, __B),
|
||||
(__v32qi)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_permutexvar_epi8 (__m256i __W, __mmask32 __M, __m256i __A,
|
||||
__m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_permvarqi256_mask ((__v32qi) __B,
|
||||
(__v32qi) __A,
|
||||
(__v32qi) __W,
|
||||
(__mmask32) __M);
|
||||
return (__m256i)__builtin_ia32_selectb_256((__mmask32)__M,
|
||||
(__v32qi)_mm256_permutexvar_epi8(__A, __B),
|
||||
(__v32qi)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_mask_multishift_epi64_epi8 (__m128i __W, __mmask16 __M, __m128i __X, __m128i __Y)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_multishift_epi64_epi8(__m128i __X, __m128i __Y)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpmultishiftqb128_mask ((__v16qi) __X,
|
||||
(__v16qi) __Y,
|
||||
(__v16qi) __W,
|
||||
(__mmask16) __M);
|
||||
return (__m128i)__builtin_ia32_vpmultishiftqb128((__v16qi)__X, (__v16qi)__Y);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_maskz_multishift_epi64_epi8 (__mmask16 __M, __m128i __X, __m128i __Y)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_multishift_epi64_epi8(__m128i __W, __mmask16 __M, __m128i __X,
|
||||
__m128i __Y)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpmultishiftqb128_mask ((__v16qi) __X,
|
||||
(__v16qi) __Y,
|
||||
(__v16qi)
|
||||
_mm_setzero_si128 (),
|
||||
(__mmask16) __M);
|
||||
return (__m128i)__builtin_ia32_selectb_128((__mmask16)__M,
|
||||
(__v16qi)_mm_multishift_epi64_epi8(__X, __Y),
|
||||
(__v16qi)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_multishift_epi64_epi8 (__m128i __X, __m128i __Y)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_multishift_epi64_epi8(__mmask16 __M, __m128i __X, __m128i __Y)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpmultishiftqb128_mask ((__v16qi) __X,
|
||||
(__v16qi) __Y,
|
||||
(__v16qi)
|
||||
_mm_undefined_si128 (),
|
||||
(__mmask16) -1);
|
||||
return (__m128i)__builtin_ia32_selectb_128((__mmask16)__M,
|
||||
(__v16qi)_mm_multishift_epi64_epi8(__X, __Y),
|
||||
(__v16qi)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_mask_multishift_epi64_epi8 (__m256i __W, __mmask32 __M, __m256i __X, __m256i __Y)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_multishift_epi64_epi8(__m256i __X, __m256i __Y)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpmultishiftqb256_mask ((__v32qi) __X,
|
||||
(__v32qi) __Y,
|
||||
(__v32qi) __W,
|
||||
(__mmask32) __M);
|
||||
return (__m256i)__builtin_ia32_vpmultishiftqb256((__v32qi)__X, (__v32qi)__Y);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_maskz_multishift_epi64_epi8 (__mmask32 __M, __m256i __X, __m256i __Y)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_multishift_epi64_epi8(__m256i __W, __mmask32 __M, __m256i __X,
|
||||
__m256i __Y)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpmultishiftqb256_mask ((__v32qi) __X,
|
||||
(__v32qi) __Y,
|
||||
(__v32qi)
|
||||
_mm256_setzero_si256 (),
|
||||
(__mmask32) __M);
|
||||
return (__m256i)__builtin_ia32_selectb_256((__mmask32)__M,
|
||||
(__v32qi)_mm256_multishift_epi64_epi8(__X, __Y),
|
||||
(__v32qi)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_multishift_epi64_epi8 (__m256i __X, __m256i __Y)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_multishift_epi64_epi8(__mmask32 __M, __m256i __X, __m256i __Y)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpmultishiftqb256_mask ((__v32qi) __X,
|
||||
(__v32qi) __Y,
|
||||
(__v32qi)
|
||||
_mm256_undefined_si256 (),
|
||||
(__mmask32) -1);
|
||||
return (__m256i)__builtin_ia32_selectb_256((__mmask32)__M,
|
||||
(__v32qi)_mm256_multishift_epi64_epi8(__X, __Y),
|
||||
(__v32qi)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS128
|
||||
#undef __DEFAULT_FN_ATTRS256
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*===------------- avx512vlbitalgintrin.h - BITALG intrinsics ------------------===
|
||||
/*===---- avx512vlbitalgintrin.h - BITALG intrinsics -----------------------===
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
@@ -29,15 +29,16 @@
|
||||
#define __AVX512VLBITALGINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512bitalg")))
|
||||
#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512bitalg"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512bitalg"), __min_vector_width__(256)))
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_popcnt_epi16(__m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpopcntw_256((__v16hi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_popcnt_epi16(__m256i __A, __mmask16 __U, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_selectw_256((__mmask16) __U,
|
||||
@@ -45,7 +46,7 @@ _mm256_mask_popcnt_epi16(__m256i __A, __mmask16 __U, __m256i __B)
|
||||
(__v16hi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_popcnt_epi16(__mmask16 __U, __m256i __B)
|
||||
{
|
||||
return _mm256_mask_popcnt_epi16((__m256i) _mm256_setzero_si256(),
|
||||
@@ -53,35 +54,35 @@ _mm256_maskz_popcnt_epi16(__mmask16 __U, __m256i __B)
|
||||
__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_popcnt_epi16(__m128i __A)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_popcnt_epi16(__m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpopcntw_128((__v8hi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_mask_popcnt_epi16(__m128i __A, __mmask8 __U, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_popcnt_epi16(__m128i __A, __mmask8 __U, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_selectw_128((__mmask8) __U,
|
||||
(__v8hi) _mm128_popcnt_epi16(__B),
|
||||
(__v8hi) _mm_popcnt_epi16(__B),
|
||||
(__v8hi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_maskz_popcnt_epi16(__mmask8 __U, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_popcnt_epi16(__mmask8 __U, __m128i __B)
|
||||
{
|
||||
return _mm128_mask_popcnt_epi16((__m128i) _mm_setzero_si128(),
|
||||
return _mm_mask_popcnt_epi16((__m128i) _mm_setzero_si128(),
|
||||
__U,
|
||||
__B);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_popcnt_epi8(__m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpopcntb_256((__v32qi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_popcnt_epi8(__m256i __A, __mmask32 __U, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_selectb_256((__mmask32) __U,
|
||||
@@ -89,7 +90,7 @@ _mm256_mask_popcnt_epi8(__m256i __A, __mmask32 __U, __m256i __B)
|
||||
(__v32qi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_popcnt_epi8(__mmask32 __U, __m256i __B)
|
||||
{
|
||||
return _mm256_mask_popcnt_epi8((__m256i) _mm256_setzero_si256(),
|
||||
@@ -97,61 +98,62 @@ _mm256_maskz_popcnt_epi8(__mmask32 __U, __m256i __B)
|
||||
__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_popcnt_epi8(__m128i __A)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_popcnt_epi8(__m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpopcntb_128((__v16qi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_mask_popcnt_epi8(__m128i __A, __mmask16 __U, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_popcnt_epi8(__m128i __A, __mmask16 __U, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_selectb_128((__mmask16) __U,
|
||||
(__v16qi) _mm128_popcnt_epi8(__B),
|
||||
(__v16qi) _mm_popcnt_epi8(__B),
|
||||
(__v16qi) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_maskz_popcnt_epi8(__mmask16 __U, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_popcnt_epi8(__mmask16 __U, __m128i __B)
|
||||
{
|
||||
return _mm128_mask_popcnt_epi8((__m128i) _mm_setzero_si128(),
|
||||
return _mm_mask_popcnt_epi8((__m128i) _mm_setzero_si128(),
|
||||
__U,
|
||||
__B);
|
||||
}
|
||||
|
||||
static __inline__ __mmask32 __DEFAULT_FN_ATTRS
|
||||
_mm256_mask_bitshuffle_epi32_mask(__mmask32 __U, __m256i __A, __m256i __B)
|
||||
static __inline__ __mmask32 __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_bitshuffle_epi64_mask(__mmask32 __U, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__mmask32) __builtin_ia32_vpshufbitqmb256_mask((__v32qi) __A,
|
||||
(__v32qi) __B,
|
||||
__U);
|
||||
}
|
||||
|
||||
static __inline__ __mmask32 __DEFAULT_FN_ATTRS
|
||||
_mm256_bitshuffle_epi32_mask(__m256i __A, __m256i __B)
|
||||
static __inline__ __mmask32 __DEFAULT_FN_ATTRS256
|
||||
_mm256_bitshuffle_epi64_mask(__m256i __A, __m256i __B)
|
||||
{
|
||||
return _mm256_mask_bitshuffle_epi32_mask((__mmask32) -1,
|
||||
return _mm256_mask_bitshuffle_epi64_mask((__mmask32) -1,
|
||||
__A,
|
||||
__B);
|
||||
}
|
||||
|
||||
static __inline__ __mmask16 __DEFAULT_FN_ATTRS
|
||||
_mm128_mask_bitshuffle_epi16_mask(__mmask16 __U, __m128i __A, __m128i __B)
|
||||
static __inline__ __mmask16 __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_bitshuffle_epi64_mask(__mmask16 __U, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__mmask16) __builtin_ia32_vpshufbitqmb128_mask((__v16qi) __A,
|
||||
(__v16qi) __B,
|
||||
__U);
|
||||
}
|
||||
|
||||
static __inline__ __mmask16 __DEFAULT_FN_ATTRS
|
||||
_mm128_bitshuffle_epi16_mask(__m128i __A, __m128i __B)
|
||||
static __inline__ __mmask16 __DEFAULT_FN_ATTRS128
|
||||
_mm_bitshuffle_epi64_mask(__m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm128_mask_bitshuffle_epi16_mask((__mmask16) -1,
|
||||
return _mm_mask_bitshuffle_epi64_mask((__mmask16) -1,
|
||||
__A,
|
||||
__B);
|
||||
}
|
||||
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS128
|
||||
#undef __DEFAULT_FN_ATTRS256
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
/*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ---------------------------===
|
||||
/*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -28,35 +28,36 @@
|
||||
#define __AVX512VLCDINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd")))
|
||||
#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(256)))
|
||||
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_broadcastmb_epi64 (__mmask8 __A)
|
||||
{
|
||||
{
|
||||
return (__m128i) _mm_set1_epi64x((long long) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_broadcastmb_epi64 (__mmask8 __A)
|
||||
{
|
||||
return (__m256i) _mm256_set1_epi64x((long long)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_broadcastmw_epi32 (__mmask16 __A)
|
||||
{
|
||||
return (__m128i) _mm_set1_epi32((int)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_broadcastmw_epi32 (__mmask16 __A)
|
||||
{
|
||||
return (__m256i) _mm256_set1_epi32((int)__A);
|
||||
}
|
||||
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_conflict_epi64 (__m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpconflictdi_128_mask ((__v2di) __A,
|
||||
@@ -64,7 +65,7 @@ _mm_conflict_epi64 (__m128i __A)
|
||||
(__mmask8) -1);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpconflictdi_128_mask ((__v2di) __A,
|
||||
@@ -72,16 +73,16 @@ _mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_conflict_epi64 (__mmask8 __U, __m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpconflictdi_128_mask ((__v2di) __A,
|
||||
(__v2di)
|
||||
_mm_setzero_di (),
|
||||
_mm_setzero_si128 (),
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_conflict_epi64 (__m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpconflictdi_256_mask ((__v4di) __A,
|
||||
@@ -89,7 +90,7 @@ _mm256_conflict_epi64 (__m256i __A)
|
||||
(__mmask8) -1);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpconflictdi_256_mask ((__v4di) __A,
|
||||
@@ -97,7 +98,7 @@ _mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpconflictdi_256_mask ((__v4di) __A,
|
||||
@@ -105,7 +106,7 @@ _mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A)
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_conflict_epi32 (__m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpconflictsi_128_mask ((__v4si) __A,
|
||||
@@ -113,7 +114,7 @@ _mm_conflict_epi32 (__m128i __A)
|
||||
(__mmask8) -1);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpconflictsi_128_mask ((__v4si) __A,
|
||||
@@ -121,7 +122,7 @@ _mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpconflictsi_128_mask ((__v4si) __A,
|
||||
@@ -129,7 +130,7 @@ _mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A)
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_conflict_epi32 (__m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpconflictsi_256_mask ((__v8si) __A,
|
||||
@@ -137,7 +138,7 @@ _mm256_conflict_epi32 (__m256i __A)
|
||||
(__mmask8) -1);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpconflictsi_256_mask ((__v8si) __A,
|
||||
@@ -145,7 +146,7 @@ _mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpconflictsi_256_mask ((__v8si) __A,
|
||||
@@ -154,110 +155,95 @@ _mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_lzcnt_epi32 (__m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vplzcntd_128_mask ((__v4si) __A,
|
||||
(__v4si)
|
||||
_mm_setzero_si128 (),
|
||||
(__mmask8) -1);
|
||||
return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_lzcnt_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vplzcntd_128_mask ((__v4si) __A,
|
||||
(__v4si) __W,
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
|
||||
(__v4si)_mm_lzcnt_epi32(__A),
|
||||
(__v4si)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_lzcnt_epi32 (__mmask8 __U, __m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vplzcntd_128_mask ((__v4si) __A,
|
||||
(__v4si)
|
||||
_mm_setzero_si128 (),
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
|
||||
(__v4si)_mm_lzcnt_epi32(__A),
|
||||
(__v4si)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_lzcnt_epi32 (__m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vplzcntd_256_mask ((__v8si) __A,
|
||||
(__v8si)
|
||||
_mm256_setzero_si256 (),
|
||||
(__mmask8) -1);
|
||||
return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_lzcnt_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vplzcntd_256_mask ((__v8si) __A,
|
||||
(__v8si) __W,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
|
||||
(__v8si)_mm256_lzcnt_epi32(__A),
|
||||
(__v8si)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_lzcnt_epi32 (__mmask8 __U, __m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vplzcntd_256_mask ((__v8si) __A,
|
||||
(__v8si)
|
||||
_mm256_setzero_si256 (),
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
|
||||
(__v8si)_mm256_lzcnt_epi32(__A),
|
||||
(__v8si)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_lzcnt_epi64 (__m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vplzcntq_128_mask ((__v2di) __A,
|
||||
(__v2di)
|
||||
_mm_setzero_di (),
|
||||
(__mmask8) -1);
|
||||
return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_lzcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vplzcntq_128_mask ((__v2di) __A,
|
||||
(__v2di) __W,
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
|
||||
(__v2di)_mm_lzcnt_epi64(__A),
|
||||
(__v2di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_lzcnt_epi64 (__mmask8 __U, __m128i __A)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vplzcntq_128_mask ((__v2di) __A,
|
||||
(__v2di)
|
||||
_mm_setzero_di (),
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
|
||||
(__v2di)_mm_lzcnt_epi64(__A),
|
||||
(__v2di)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_lzcnt_epi64 (__m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vplzcntq_256_mask ((__v4di) __A,
|
||||
(__v4di)
|
||||
_mm256_setzero_si256 (),
|
||||
(__mmask8) -1);
|
||||
return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_lzcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vplzcntq_256_mask ((__v4di) __A,
|
||||
(__v4di) __W,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
|
||||
(__v4di)_mm256_lzcnt_epi64(__A),
|
||||
(__v4di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_lzcnt_epi64 (__mmask8 __U, __m256i __A)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vplzcntq_256_mask ((__v4di) __A,
|
||||
(__v4di)
|
||||
_mm256_setzero_si256 (),
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
|
||||
(__v4di)_mm256_lzcnt_epi64(__A),
|
||||
(__v4di)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS128
|
||||
#undef __DEFAULT_FN_ATTRS256
|
||||
|
||||
#endif /* __AVX512VLCDINTRIN_H */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+2971
-3035
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -29,226 +29,195 @@
|
||||
#define __AVX512VLVNNIINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512vnni")))
|
||||
#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512vnni"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512vnni"), __min_vector_width__(256)))
|
||||
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_mask_dpbusd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpbusd256_mask ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_maskz_dpbusd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpbusd256_maskz ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_dpbusd_epi32(__m256i __S, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpbusd256_mask ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m256i)__builtin_ia32_vpdpbusd256((__v8si)__S, (__v8si)__A,
|
||||
(__v8si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_mask_dpbusds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_dpbusd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpbusds256_mask ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256(__U,
|
||||
(__v8si)_mm256_dpbusd_epi32(__S, __A, __B),
|
||||
(__v8si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_maskz_dpbusds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_dpbusd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpbusds256_maskz ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256(__U,
|
||||
(__v8si)_mm256_dpbusd_epi32(__S, __A, __B),
|
||||
(__v8si)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_dpbusds_epi32(__m256i __S, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpbusds256_mask ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m256i)__builtin_ia32_vpdpbusds256((__v8si)__S, (__v8si)__A,
|
||||
(__v8si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_mask_dpwssd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_dpbusds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpwssd256_mask ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256(__U,
|
||||
(__v8si)_mm256_dpbusds_epi32(__S, __A, __B),
|
||||
(__v8si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_maskz_dpwssd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_dpbusds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpwssd256_maskz ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256(__U,
|
||||
(__v8si)_mm256_dpbusds_epi32(__S, __A, __B),
|
||||
(__v8si)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_dpwssd_epi32(__m256i __S, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpwssd256_mask ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m256i)__builtin_ia32_vpdpwssd256((__v8si)__S, (__v8si)__A,
|
||||
(__v8si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_mask_dpwssds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_dpwssd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpwssds256_mask ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256(__U,
|
||||
(__v8si)_mm256_dpwssd_epi32(__S, __A, __B),
|
||||
(__v8si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
_mm256_maskz_dpwssds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_dpwssd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpwssds256_maskz ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256(__U,
|
||||
(__v8si)_mm256_dpwssd_epi32(__S, __A, __B),
|
||||
(__v8si)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_dpwssds_epi32(__m256i __S, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vpdpwssds256_mask ((__v8si) __S,
|
||||
(__v8si) __A,
|
||||
(__v8si) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m256i)__builtin_ia32_vpdpwssds256((__v8si)__S, (__v8si)__A,
|
||||
(__v8si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_mask_dpbusd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_dpwssds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpbusd128_mask ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256(__U,
|
||||
(__v8si)_mm256_dpwssds_epi32(__S, __A, __B),
|
||||
(__v8si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_maskz_dpbusd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_dpwssds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpbusd128_maskz ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m256i)__builtin_ia32_selectd_256(__U,
|
||||
(__v8si)_mm256_dpwssds_epi32(__S, __A, __B),
|
||||
(__v8si)_mm256_setzero_si256());
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_dpbusd_epi32(__m128i __S, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_dpbusd_epi32(__m128i __S, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpbusd128_mask ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m128i)__builtin_ia32_vpdpbusd128((__v4si)__S, (__v4si)__A,
|
||||
(__v4si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_mask_dpbusds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_dpbusd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpbusds128_mask ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectd_128(__U,
|
||||
(__v4si)_mm_dpbusd_epi32(__S, __A, __B),
|
||||
(__v4si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_maskz_dpbusds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_dpbusd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpbusds128_maskz ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectd_128(__U,
|
||||
(__v4si)_mm_dpbusd_epi32(__S, __A, __B),
|
||||
(__v4si)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_dpbusds_epi32(__m128i __S, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_dpbusds_epi32(__m128i __S, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpbusds128_mask ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m128i)__builtin_ia32_vpdpbusds128((__v4si)__S, (__v4si)__A,
|
||||
(__v4si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_mask_dpwssd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_dpbusds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpwssd128_mask ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectd_128(__U,
|
||||
(__v4si)_mm_dpbusds_epi32(__S, __A, __B),
|
||||
(__v4si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_maskz_dpwssd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_dpbusds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpwssd128_maskz ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectd_128(__U,
|
||||
(__v4si)_mm_dpbusds_epi32(__S, __A, __B),
|
||||
(__v4si)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_dpwssd_epi32(__m128i __S, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_dpwssd_epi32(__m128i __S, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpwssd128_mask ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m128i)__builtin_ia32_vpdpwssd128((__v4si)__S, (__v4si)__A,
|
||||
(__v4si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_mask_dpwssds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_dpwssd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpwssds128_mask ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectd_128(__U,
|
||||
(__v4si)_mm_dpwssd_epi32(__S, __A, __B),
|
||||
(__v4si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_maskz_dpwssds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_dpwssd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpwssds128_maskz ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) __U);
|
||||
return (__m128i)__builtin_ia32_selectd_128(__U,
|
||||
(__v4si)_mm_dpwssd_epi32(__S, __A, __B),
|
||||
(__v4si)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm128_dpwssds_epi32(__m128i __S, __m128i __A, __m128i __B)
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_dpwssds_epi32(__m128i __S, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_vpdpwssds128_mask ((__v4si) __S,
|
||||
(__v4si) __A,
|
||||
(__v4si) __B,
|
||||
(__mmask8) -1);
|
||||
return (__m128i)__builtin_ia32_vpdpwssds128((__v4si)__S, (__v4si)__A,
|
||||
(__v4si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_dpwssds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i)__builtin_ia32_selectd_128(__U,
|
||||
(__v4si)_mm_dpwssds_epi32(__S, __A, __B),
|
||||
(__v4si)__S);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_dpwssds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i)__builtin_ia32_selectd_128(__U,
|
||||
(__v4si)_mm_dpwssds_epi32(__S, __A, __B),
|
||||
(__v4si)_mm_setzero_si128());
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS128
|
||||
#undef __DEFAULT_FN_ATTRS256
|
||||
|
||||
#endif
|
||||
|
||||
@@ -29,117 +29,100 @@
|
||||
#define __AVX512VNNIINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vnni")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vnni"), __min_vector_width__(512)))
|
||||
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_dpbusd_epi32(__m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i)__builtin_ia32_vpdpbusd512((__v16si)__S, (__v16si)__A,
|
||||
(__v16si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_dpbusd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpbusd512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) __U);
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_dpbusd_epi32(__S, __A, __B),
|
||||
(__v16si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_dpbusd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpbusd512_maskz ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_dpbusd_epi32(__m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpbusd512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) -1);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_dpbusds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpbusds512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) __U);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_dpbusds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpbusds512_maskz ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) __U);
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_dpbusd_epi32(__S, __A, __B),
|
||||
(__v16si)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_dpbusds_epi32(__m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpbusds512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) -1);
|
||||
return (__m512i)__builtin_ia32_vpdpbusds512((__v16si)__S, (__v16si)__A,
|
||||
(__v16si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
|
||||
_mm512_mask_dpbusds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpwssd512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) __U);
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_dpbusds_epi32(__S, __A, __B),
|
||||
(__v16si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_dpwssd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_maskz_dpbusds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpwssd512_maskz ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) __U);
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_dpbusds_epi32(__S, __A, __B),
|
||||
(__v16si)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_dpwssd_epi32(__m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpwssd512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) -1);
|
||||
return (__m512i)__builtin_ia32_vpdpwssd512((__v16si)__S, (__v16si)__A,
|
||||
(__v16si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_dpwssds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
|
||||
_mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpwssds512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) __U);
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_dpwssd_epi32(__S, __A, __B),
|
||||
(__v16si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_dpwssds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
_mm512_maskz_dpwssd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpwssds512_maskz ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) __U);
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_dpwssd_epi32(__S, __A, __B),
|
||||
(__v16si)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_dpwssds_epi32(__m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vpdpwssds512_mask ((__v16si) __S,
|
||||
(__v16si) __A,
|
||||
(__v16si) __B,
|
||||
(__mmask16) -1);
|
||||
return (__m512i)__builtin_ia32_vpdpwssds512((__v16si)__S, (__v16si)__A,
|
||||
(__v16si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_mask_dpwssds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_dpwssds_epi32(__S, __A, __B),
|
||||
(__v16si)__S);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS
|
||||
_mm512_maskz_dpwssds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i)__builtin_ia32_selectd_512(__U,
|
||||
(__v16si)_mm512_dpwssds_epi32(__S, __A, __B),
|
||||
(__v16si)_mm512_setzero_si512());
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/*===------------- avx512vpopcntdqintrin.h - AVX512VPOPCNTDQ intrinsics
|
||||
*------------------===
|
||||
/*===----- avx512vpopcntdqintrin.h - AVX512VPOPCNTDQ intrinsics-------------===
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
@@ -32,8 +31,7 @@
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntd" \
|
||||
"q")))
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq"), __min_vector_width__(512)))
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_popcnt_epi64(__m512i __A) {
|
||||
return (__m512i)__builtin_ia32_vpopcntq_512((__v8di)__A);
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/*===------------- avx512vpopcntdqintrin.h - AVX512VPOPCNTDQ intrinsics
|
||||
*------------------===
|
||||
/*===---- avx512vpopcntdqintrin.h - AVX512VPOPCNTDQ intrinsics -------------===
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
@@ -31,69 +30,76 @@
|
||||
#define __AVX512VPOPCNTDQVLINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq,avx512vl")))
|
||||
#define __DEFAULT_FN_ATTRS128 \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq,avx512vl"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS256 \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq,avx512vl"), __min_vector_width__(256)))
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_popcnt_epi64(__m128i __A) {
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_popcnt_epi64(__m128i __A) {
|
||||
return (__m128i)__builtin_ia32_vpopcntq_128((__v2di)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_popcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) {
|
||||
return (__m128i)__builtin_ia32_selectq_128(
|
||||
(__mmask8)__U, (__v2di)_mm_popcnt_epi64(__A), (__v2di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_popcnt_epi64(__mmask8 __U, __m128i __A) {
|
||||
return _mm_mask_popcnt_epi64((__m128i)_mm_setzero_si128(), __U, __A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_popcnt_epi32(__m128i __A) {
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_popcnt_epi32(__m128i __A) {
|
||||
return (__m128i)__builtin_ia32_vpopcntd_128((__v4si)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_mask_popcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) {
|
||||
return (__m128i)__builtin_ia32_selectd_128(
|
||||
(__mmask8)__U, (__v4si)_mm_popcnt_epi32(__A), (__v4si)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS128
|
||||
_mm_maskz_popcnt_epi32(__mmask8 __U, __m128i __A) {
|
||||
return _mm_mask_popcnt_epi32((__m128i)_mm_setzero_si128(), __U, __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_popcnt_epi64(__m256i __A) {
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_popcnt_epi64(__m256i __A) {
|
||||
return (__m256i)__builtin_ia32_vpopcntq_256((__v4di)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_popcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) {
|
||||
return (__m256i)__builtin_ia32_selectq_256(
|
||||
(__mmask8)__U, (__v4di)_mm256_popcnt_epi64(__A), (__v4di)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_popcnt_epi64(__mmask8 __U, __m256i __A) {
|
||||
return _mm256_mask_popcnt_epi64((__m256i)_mm256_setzero_si256(), __U, __A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS _mm256_popcnt_epi32(__m256i __A) {
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_popcnt_epi32(__m256i __A) {
|
||||
return (__m256i)__builtin_ia32_vpopcntd_256((__v8si)__A);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_mask_popcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) {
|
||||
return (__m256i)__builtin_ia32_selectd_256(
|
||||
(__mmask8)__U, (__v8si)_mm256_popcnt_epi32(__A), (__v8si)__W);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS256
|
||||
_mm256_maskz_popcnt_epi32(__mmask8 __U, __m256i __A) {
|
||||
return _mm256_mask_popcnt_epi32((__m256i)_mm256_setzero_si256(), __U, __A);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS128
|
||||
#undef __DEFAULT_FN_ATTRS256
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -49,7 +49,7 @@
|
||||
to use it as a potentially faster version of BSF. */
|
||||
#define __RELAXED_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
|
||||
|
||||
/// \brief Counts the number of trailing zero bits in the operand.
|
||||
/// Counts the number of trailing zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -62,10 +62,10 @@
|
||||
static __inline__ unsigned short __RELAXED_FN_ATTRS
|
||||
__tzcnt_u16(unsigned short __X)
|
||||
{
|
||||
return __X ? __builtin_ctzs(__X) : 16;
|
||||
return __builtin_ia32_tzcnt_u16(__X);
|
||||
}
|
||||
|
||||
/// \brief Performs a bitwise AND of the second operand with the one's
|
||||
/// Performs a bitwise AND of the second operand with the one's
|
||||
/// complement of the first operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -85,7 +85,7 @@ __andn_u32(unsigned int __X, unsigned int __Y)
|
||||
}
|
||||
|
||||
/* AMD-specified, double-leading-underscore version of BEXTR */
|
||||
/// \brief Extracts the specified bits from the first operand and returns them
|
||||
/// Extracts the specified bits from the first operand and returns them
|
||||
/// in the least significant bits of the result.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -100,6 +100,7 @@ __andn_u32(unsigned int __X, unsigned int __Y)
|
||||
/// number of bits to be extracted.
|
||||
/// \returns An unsigned integer whose least significant bits contain the
|
||||
/// extracted bits.
|
||||
/// \see _bextr_u32
|
||||
static __inline__ unsigned int __DEFAULT_FN_ATTRS
|
||||
__bextr_u32(unsigned int __X, unsigned int __Y)
|
||||
{
|
||||
@@ -107,7 +108,7 @@ __bextr_u32(unsigned int __X, unsigned int __Y)
|
||||
}
|
||||
|
||||
/* Intel-specified, single-leading-underscore version of BEXTR */
|
||||
/// \brief Extracts the specified bits from the first operand and returns them
|
||||
/// Extracts the specified bits from the first operand and returns them
|
||||
/// in the least significant bits of the result.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -124,13 +125,14 @@ __bextr_u32(unsigned int __X, unsigned int __Y)
|
||||
/// Bits [7:0] specify the number of bits.
|
||||
/// \returns An unsigned integer whose least significant bits contain the
|
||||
/// extracted bits.
|
||||
/// \see __bextr_u32
|
||||
static __inline__ unsigned int __DEFAULT_FN_ATTRS
|
||||
_bextr_u32(unsigned int __X, unsigned int __Y, unsigned int __Z)
|
||||
{
|
||||
return __builtin_ia32_bextr_u32 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8)));
|
||||
}
|
||||
|
||||
/// \brief Clears all bits in the source except for the least significant bit
|
||||
/// Clears all bits in the source except for the least significant bit
|
||||
/// containing a value of 1 and returns the result.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -147,7 +149,7 @@ __blsi_u32(unsigned int __X)
|
||||
return __X & -__X;
|
||||
}
|
||||
|
||||
/// \brief Creates a mask whose bits are set to 1, using bit 0 up to and
|
||||
/// Creates a mask whose bits are set to 1, using bit 0 up to and
|
||||
/// including the least significant bit that is set to 1 in the source
|
||||
/// operand and returns the result.
|
||||
///
|
||||
@@ -164,7 +166,7 @@ __blsmsk_u32(unsigned int __X)
|
||||
return __X ^ (__X - 1);
|
||||
}
|
||||
|
||||
/// \brief Clears the least significant bit that is set to 1 in the source
|
||||
/// Clears the least significant bit that is set to 1 in the source
|
||||
/// operand and returns the result.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -181,7 +183,7 @@ __blsr_u32(unsigned int __X)
|
||||
return __X & (__X - 1);
|
||||
}
|
||||
|
||||
/// \brief Counts the number of trailing zero bits in the operand.
|
||||
/// Counts the number of trailing zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -194,10 +196,10 @@ __blsr_u32(unsigned int __X)
|
||||
static __inline__ unsigned int __RELAXED_FN_ATTRS
|
||||
__tzcnt_u32(unsigned int __X)
|
||||
{
|
||||
return __X ? __builtin_ctz(__X) : 32;
|
||||
return __builtin_ia32_tzcnt_u32(__X);
|
||||
}
|
||||
|
||||
/// \brief Counts the number of trailing zero bits in the operand.
|
||||
/// Counts the number of trailing zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -210,7 +212,7 @@ __tzcnt_u32(unsigned int __X)
|
||||
static __inline__ int __RELAXED_FN_ATTRS
|
||||
_mm_tzcnt_32(unsigned int __X)
|
||||
{
|
||||
return __X ? __builtin_ctz(__X) : 32;
|
||||
return __builtin_ia32_tzcnt_u32(__X);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
@@ -226,7 +228,7 @@ _mm_tzcnt_32(unsigned int __X)
|
||||
|
||||
#define _tzcnt_u64(a) (__tzcnt_u64((a)))
|
||||
|
||||
/// \brief Performs a bitwise AND of the second operand with the one's
|
||||
/// Performs a bitwise AND of the second operand with the one's
|
||||
/// complement of the first operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -246,7 +248,7 @@ __andn_u64 (unsigned long long __X, unsigned long long __Y)
|
||||
}
|
||||
|
||||
/* AMD-specified, double-leading-underscore version of BEXTR */
|
||||
/// \brief Extracts the specified bits from the first operand and returns them
|
||||
/// Extracts the specified bits from the first operand and returns them
|
||||
/// in the least significant bits of the result.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -261,6 +263,7 @@ __andn_u64 (unsigned long long __X, unsigned long long __Y)
|
||||
/// the number of bits to be extracted.
|
||||
/// \returns An unsigned 64-bit integer whose least significant bits contain the
|
||||
/// extracted bits.
|
||||
/// \see _bextr_u64
|
||||
static __inline__ unsigned long long __DEFAULT_FN_ATTRS
|
||||
__bextr_u64(unsigned long long __X, unsigned long long __Y)
|
||||
{
|
||||
@@ -268,7 +271,7 @@ __bextr_u64(unsigned long long __X, unsigned long long __Y)
|
||||
}
|
||||
|
||||
/* Intel-specified, single-leading-underscore version of BEXTR */
|
||||
/// \brief Extracts the specified bits from the first operand and returns them
|
||||
/// Extracts the specified bits from the first operand and returns them
|
||||
/// in the least significant bits of the result.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -285,13 +288,14 @@ __bextr_u64(unsigned long long __X, unsigned long long __Y)
|
||||
/// Bits [7:0] specify the number of bits.
|
||||
/// \returns An unsigned 64-bit integer whose least significant bits contain the
|
||||
/// extracted bits.
|
||||
/// \see __bextr_u64
|
||||
static __inline__ unsigned long long __DEFAULT_FN_ATTRS
|
||||
_bextr_u64(unsigned long long __X, unsigned int __Y, unsigned int __Z)
|
||||
{
|
||||
return __builtin_ia32_bextr_u64 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8)));
|
||||
}
|
||||
|
||||
/// \brief Clears all bits in the source except for the least significant bit
|
||||
/// Clears all bits in the source except for the least significant bit
|
||||
/// containing a value of 1 and returns the result.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -308,7 +312,7 @@ __blsi_u64(unsigned long long __X)
|
||||
return __X & -__X;
|
||||
}
|
||||
|
||||
/// \brief Creates a mask whose bits are set to 1, using bit 0 up to and
|
||||
/// Creates a mask whose bits are set to 1, using bit 0 up to and
|
||||
/// including the least significant bit that is set to 1 in the source
|
||||
/// operand and returns the result.
|
||||
///
|
||||
@@ -325,7 +329,7 @@ __blsmsk_u64(unsigned long long __X)
|
||||
return __X ^ (__X - 1);
|
||||
}
|
||||
|
||||
/// \brief Clears the least significant bit that is set to 1 in the source
|
||||
/// Clears the least significant bit that is set to 1 in the source
|
||||
/// operand and returns the result.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -342,7 +346,7 @@ __blsr_u64(unsigned long long __X)
|
||||
return __X & (__X - 1);
|
||||
}
|
||||
|
||||
/// \brief Counts the number of trailing zero bits in the operand.
|
||||
/// Counts the number of trailing zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -355,10 +359,10 @@ __blsr_u64(unsigned long long __X)
|
||||
static __inline__ unsigned long long __RELAXED_FN_ATTRS
|
||||
__tzcnt_u64(unsigned long long __X)
|
||||
{
|
||||
return __X ? __builtin_ctzll(__X) : 64;
|
||||
return __builtin_ia32_tzcnt_u64(__X);
|
||||
}
|
||||
|
||||
/// \brief Counts the number of trailing zero bits in the operand.
|
||||
/// Counts the number of trailing zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -371,7 +375,7 @@ __tzcnt_u64(unsigned long long __X)
|
||||
static __inline__ long long __RELAXED_FN_ATTRS
|
||||
_mm_tzcnt_64(unsigned long long __X)
|
||||
{
|
||||
return __X ? __builtin_ctzll(__X) : 64;
|
||||
return __builtin_ia32_tzcnt_u64(__X);
|
||||
}
|
||||
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*===---- cetintrin.h - CET intrinsic ------------------------------------===
|
||||
/*===---- cetintrin.h - CET intrinsic --------------------------------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -42,6 +42,16 @@ static __inline__ void __DEFAULT_FN_ATTRS _incsspq(unsigned long long __a) {
|
||||
}
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
#ifdef __x86_64__
|
||||
static __inline__ void __DEFAULT_FN_ATTRS _inc_ssp(unsigned int __a) {
|
||||
__builtin_ia32_incsspq(__a);
|
||||
}
|
||||
#else /* __x86_64__ */
|
||||
static __inline__ void __DEFAULT_FN_ATTRS _inc_ssp(unsigned int __a) {
|
||||
__builtin_ia32_incsspd((int)__a);
|
||||
}
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
static __inline__ unsigned int __DEFAULT_FN_ATTRS _rdsspd(unsigned int __a) {
|
||||
return __builtin_ia32_rdsspd(__a);
|
||||
}
|
||||
@@ -52,6 +62,16 @@ static __inline__ unsigned long long __DEFAULT_FN_ATTRS _rdsspq(unsigned long lo
|
||||
}
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
#ifdef __x86_64__
|
||||
static __inline__ unsigned long long __DEFAULT_FN_ATTRS _get_ssp(void) {
|
||||
return __builtin_ia32_rdsspq(0);
|
||||
}
|
||||
#else /* __x86_64__ */
|
||||
static __inline__ unsigned int __DEFAULT_FN_ATTRS _get_ssp(void) {
|
||||
return __builtin_ia32_rdsspd(0);
|
||||
}
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
static __inline__ void __DEFAULT_FN_ATTRS _saveprevssp() {
|
||||
__builtin_ia32_saveprevssp();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*===---- cldemoteintrin.h - CLDEMOTE intrinsic ----------------------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
|
||||
#error "Never use <cldemoteintrin.h> directly; include <x86intrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __CLDEMOTEINTRIN_H
|
||||
#define __CLDEMOTEINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("cldemote")))
|
||||
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
_cldemote(const void * __P) {
|
||||
__builtin_ia32_cldemote(__P);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif
|
||||
@@ -1,4 +1,4 @@
|
||||
/*===---- clflushoptintrin.h - CLFLUSHOPT intrinsic ------------------------------------===
|
||||
/*===---- clflushoptintrin.h - CLFLUSHOPT intrinsic ------------------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("clwb")))
|
||||
|
||||
/// \brief Writes back to memory the cache line (if modified) that contains the
|
||||
/// Writes back to memory the cache line (if modified) that contains the
|
||||
/// linear address specified in \a __p from any level of the cache hierarchy in
|
||||
/// the cache coherence domain
|
||||
///
|
||||
|
||||
@@ -20,18 +20,18 @@
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
#ifndef __X86INTRIN_H
|
||||
#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
|
||||
#error "Never use <clzerointrin.h> directly; include <x86intrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef _CLZEROINTRIN_H
|
||||
#define _CLZEROINTRIN_H
|
||||
#ifndef __CLZEROINTRIN_H
|
||||
#define __CLZEROINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("clzero")))
|
||||
|
||||
/// \brief Loads the cache line address and zero's out the cacheline
|
||||
/// Loads the cache line address and zero's out the cacheline
|
||||
///
|
||||
/// \headerfile <clzerointrin.h>
|
||||
///
|
||||
@@ -45,6 +45,6 @@ _mm_clzero (void * __line)
|
||||
__builtin_ia32_clzero ((void *)__line);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif /* _CLZEROINTRIN_H */
|
||||
#endif /* __CLZEROINTRIN_H */
|
||||
|
||||
@@ -156,6 +156,7 @@
|
||||
#define bit_SMEP 0x00000080
|
||||
#define bit_BMI2 0x00000100
|
||||
#define bit_ENH_MOVSB 0x00000200
|
||||
#define bit_INVPCID 0x00000400
|
||||
#define bit_RTM 0x00000800
|
||||
#define bit_MPX 0x00004000
|
||||
#define bit_AVX512F 0x00010000
|
||||
@@ -166,7 +167,7 @@
|
||||
#define bit_CLFLUSHOPT 0x00800000
|
||||
#define bit_CLWB 0x01000000
|
||||
#define bit_AVX512PF 0x04000000
|
||||
#define bit_AVX51SER 0x08000000
|
||||
#define bit_AVX512ER 0x08000000
|
||||
#define bit_AVX512CD 0x10000000
|
||||
#define bit_SHA 0x20000000
|
||||
#define bit_AVX512BW 0x40000000
|
||||
@@ -177,6 +178,7 @@
|
||||
#define bit_AVX512VBMI 0x00000002
|
||||
#define bit_PKU 0x00000004
|
||||
#define bit_OSPKE 0x00000010
|
||||
#define bit_WAITPKG 0x00000020
|
||||
#define bit_AVX512VBMI2 0x00000040
|
||||
#define bit_SHSTK 0x00000080
|
||||
#define bit_GFNI 0x00000100
|
||||
@@ -186,10 +188,14 @@
|
||||
#define bit_AVX512BITALG 0x00001000
|
||||
#define bit_AVX512VPOPCNTDQ 0x00004000
|
||||
#define bit_RDPID 0x00400000
|
||||
#define bit_CLDEMOTE 0x02000000
|
||||
#define bit_MOVDIRI 0x08000000
|
||||
#define bit_MOVDIR64B 0x10000000
|
||||
|
||||
/* Features in %edx for leaf 7 sub-leaf 0 */
|
||||
#define bit_AVX5124VNNIW 0x00000004
|
||||
#define bit_AVX5124FMAPS 0x00000008
|
||||
#define bit_PCONFIG 0x00040000
|
||||
#define bit_IBT 0x00100000
|
||||
|
||||
/* Features in %eax for leaf 13 sub-leaf 1 */
|
||||
@@ -197,6 +203,9 @@
|
||||
#define bit_XSAVEC 0x00000002
|
||||
#define bit_XSAVES 0x00000008
|
||||
|
||||
/* Features in %eax for leaf 0x14 sub-leaf 0 */
|
||||
#define bit_PTWRITE 0x00000010
|
||||
|
||||
/* Features in %ecx for leaf 0x80000001 */
|
||||
#define bit_LAHF_LM 0x00000001
|
||||
#define bit_ABM 0x00000020
|
||||
@@ -215,8 +224,9 @@
|
||||
#define bit_3DNOWP 0x40000000
|
||||
#define bit_3DNOW 0x80000000
|
||||
|
||||
/* Features in %ebx for leaf 0x80000001 */
|
||||
/* Features in %ebx for leaf 0x80000008 */
|
||||
#define bit_CLZERO 0x00000001
|
||||
#define bit_WBNOINVD 0x00000200
|
||||
|
||||
|
||||
#if __i386__
|
||||
|
||||
@@ -24,28 +24,36 @@
|
||||
#ifndef __CLANG_CUDA_WRAPPERS_ALGORITHM
|
||||
#define __CLANG_CUDA_WRAPPERS_ALGORITHM
|
||||
|
||||
// This header defines __device__ overloads of std::min/max, but only if we're
|
||||
// <= C++11. In C++14, these functions are constexpr, and so are implicitly
|
||||
// __host__ __device__.
|
||||
// This header defines __device__ overloads of std::min/max.
|
||||
//
|
||||
// We don't support the initializer_list overloads because
|
||||
// initializer_list::begin() and end() are not __host__ __device__ functions.
|
||||
// Ideally we'd declare these functions only if we're <= C++11. In C++14,
|
||||
// these functions are constexpr, and so are implicitly __host__ __device__.
|
||||
//
|
||||
// When compiling in C++14 mode, we could force std::min/max to have different
|
||||
// implementations for host and device, by declaring the device overloads
|
||||
// before the constexpr overloads appear. We choose not to do this because
|
||||
|
||||
// a) why write our own implementation when we can use one from the standard
|
||||
// library? and
|
||||
// b) libstdc++ is evil and declares min/max inside a header that is included
|
||||
// *before* we include <algorithm>. So we'd have to unconditionally
|
||||
// declare our __device__ overloads of min/max, but that would pollute
|
||||
// things for people who choose not to include <algorithm>.
|
||||
// However, the compiler being in C++14 mode does not imply that the standard
|
||||
// library supports C++14. There is no macro we can test to check that the
|
||||
// stdlib has constexpr std::min/max. Thus we have to unconditionally define
|
||||
// our device overloads.
|
||||
//
|
||||
// A host+device function cannot be overloaded, and a constexpr function
|
||||
// implicitly become host device if there's no explicitly host or device
|
||||
// overload preceding it. So the simple thing to do would be to declare our
|
||||
// device min/max overloads, and then #include_next <algorithm>. This way our
|
||||
// device overloads would come first, and so if we have a C++14 stdlib, its
|
||||
// min/max won't become host+device and conflict with our device overloads.
|
||||
//
|
||||
// But that also doesn't work. libstdc++ is evil and declares std::min/max in
|
||||
// an internal header that is included *before* <algorithm>. Thus by the time
|
||||
// we're inside of this file, std::min/max may already have been declared, and
|
||||
// thus we can't prevent them from becoming host+device if they're constexpr.
|
||||
//
|
||||
// Therefore we perpetrate the following hack: We mark our __device__ overloads
|
||||
// with __attribute__((enable_if(true, ""))). This causes the signature of the
|
||||
// function to change without changing anything else about it. (Except that
|
||||
// overload resolution will prefer it over the __host__ __device__ version
|
||||
// rather than considering them equally good).
|
||||
|
||||
#include_next <algorithm>
|
||||
|
||||
#if __cplusplus <= 201103L
|
||||
|
||||
// We need to define these overloads in exactly the namespace our standard
|
||||
// library uses (including the right inline namespace), otherwise they won't be
|
||||
// picked up by other functions in the standard library (e.g. functions in
|
||||
@@ -59,30 +67,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#pragma push_macro("_CPP14_CONSTEXPR")
|
||||
#if __cplusplus >= 201402L
|
||||
#define _CPP14_CONSTEXPR constexpr
|
||||
#else
|
||||
#define _CPP14_CONSTEXPR
|
||||
#endif
|
||||
|
||||
template <class __T, class __Cmp>
|
||||
inline __device__ const __T &
|
||||
__attribute__((enable_if(true, "")))
|
||||
inline _CPP14_CONSTEXPR __host__ __device__ const __T &
|
||||
max(const __T &__a, const __T &__b, __Cmp __cmp) {
|
||||
return __cmp(__a, __b) ? __b : __a;
|
||||
}
|
||||
|
||||
template <class __T>
|
||||
inline __device__ const __T &
|
||||
__attribute__((enable_if(true, "")))
|
||||
inline _CPP14_CONSTEXPR __host__ __device__ const __T &
|
||||
max(const __T &__a, const __T &__b) {
|
||||
return __a < __b ? __b : __a;
|
||||
}
|
||||
|
||||
template <class __T, class __Cmp>
|
||||
inline __device__ const __T &
|
||||
__attribute__((enable_if(true, "")))
|
||||
inline _CPP14_CONSTEXPR __host__ __device__ const __T &
|
||||
min(const __T &__a, const __T &__b, __Cmp __cmp) {
|
||||
return __cmp(__b, __a) ? __b : __a;
|
||||
}
|
||||
|
||||
template <class __T>
|
||||
inline __device__ const __T &
|
||||
__attribute__((enable_if(true, "")))
|
||||
inline _CPP14_CONSTEXPR __host__ __device__ const __T &
|
||||
min(const __T &__a, const __T &__b) {
|
||||
return __a < __b ? __a : __b;
|
||||
}
|
||||
|
||||
#pragma pop_macro("_CPP14_CONSTEXPR")
|
||||
|
||||
#ifdef _LIBCPP_END_NAMESPACE_STD
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
#else
|
||||
@@ -92,5 +113,4 @@ _GLIBCXX_END_NAMESPACE_VERSION
|
||||
} // namespace std
|
||||
#endif
|
||||
|
||||
#endif // __cplusplus <= 201103L
|
||||
#endif // __CLANG_CUDA_WRAPPERS_ALGORITHM
|
||||
|
||||
@@ -73,10 +73,12 @@ __device__ inline void operator delete[](void *ptr,
|
||||
|
||||
// Sized delete, C++14 only.
|
||||
#if __cplusplus >= 201402L
|
||||
__device__ void operator delete(void *ptr, __SIZE_TYPE__ size) CUDA_NOEXCEPT {
|
||||
__device__ inline void operator delete(void *ptr,
|
||||
__SIZE_TYPE__ size) CUDA_NOEXCEPT {
|
||||
::operator delete(ptr);
|
||||
}
|
||||
__device__ void operator delete[](void *ptr, __SIZE_TYPE__ size) CUDA_NOEXCEPT {
|
||||
__device__ inline void operator delete[](void *ptr,
|
||||
__SIZE_TYPE__ size) CUDA_NOEXCEPT {
|
||||
::operator delete(ptr);
|
||||
}
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -21,18 +21,25 @@
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#if !defined __X86INTRIN_H && !defined __EMMINTRIN_H && !defined __IMMINTRIN_H
|
||||
#error "Never use <f16cintrin.h> directly; include <emmintrin.h> instead."
|
||||
#if !defined __IMMINTRIN_H
|
||||
#error "Never use <f16cintrin.h> directly; include <immintrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __F16CINTRIN_H
|
||||
#define __F16CINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("f16c")))
|
||||
#define __DEFAULT_FN_ATTRS128 \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("f16c"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS256 \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("f16c"), __min_vector_width__(256)))
|
||||
|
||||
/// \brief Converts a 16-bit half-precision float value into a 32-bit float
|
||||
/* NOTE: Intel documents the 128-bit versions of these as being in emmintrin.h,
|
||||
* but that's because icc can emulate these without f16c using a library call.
|
||||
* Since we don't do that let's leave these in f16cintrin.h.
|
||||
*/
|
||||
|
||||
/// Converts a 16-bit half-precision float value into a 32-bit float
|
||||
/// value.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -42,7 +49,7 @@
|
||||
/// \param __a
|
||||
/// A 16-bit half-precision float value.
|
||||
/// \returns The converted 32-bit float value.
|
||||
static __inline float __DEFAULT_FN_ATTRS
|
||||
static __inline float __DEFAULT_FN_ATTRS128
|
||||
_cvtsh_ss(unsigned short __a)
|
||||
{
|
||||
__v8hi v = {(short)__a, 0, 0, 0, 0, 0, 0, 0};
|
||||
@@ -50,7 +57,7 @@ _cvtsh_ss(unsigned short __a)
|
||||
return r[0];
|
||||
}
|
||||
|
||||
/// \brief Converts a 32-bit single-precision float value to a 16-bit
|
||||
/// Converts a 32-bit single-precision float value to a 16-bit
|
||||
/// half-precision float value.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -72,11 +79,11 @@ _cvtsh_ss(unsigned short __a)
|
||||
/// 011: Truncate \n
|
||||
/// 1XX: Use MXCSR.RC for rounding
|
||||
/// \returns The converted 16-bit half-precision float value.
|
||||
#define _cvtss_sh(a, imm) __extension__ ({ \
|
||||
#define _cvtss_sh(a, imm) \
|
||||
(unsigned short)(((__v8hi)__builtin_ia32_vcvtps2ph((__v4sf){a, 0, 0, 0}, \
|
||||
(imm)))[0]); })
|
||||
(imm)))[0])
|
||||
|
||||
/// \brief Converts a 128-bit vector containing 32-bit float values into a
|
||||
/// Converts a 128-bit vector containing 32-bit float values into a
|
||||
/// 128-bit vector containing 16-bit half-precision float values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -99,10 +106,10 @@ _cvtsh_ss(unsigned short __a)
|
||||
/// \returns A 128-bit vector containing converted 16-bit half-precision float
|
||||
/// values. The lower 64 bits are used to store the converted 16-bit
|
||||
/// half-precision floating-point values.
|
||||
#define _mm_cvtps_ph(a, imm) __extension__ ({ \
|
||||
(__m128i)__builtin_ia32_vcvtps2ph((__v4sf)(__m128)(a), (imm)); })
|
||||
#define _mm_cvtps_ph(a, imm) \
|
||||
(__m128i)__builtin_ia32_vcvtps2ph((__v4sf)(__m128)(a), (imm))
|
||||
|
||||
/// \brief Converts a 128-bit vector containing 16-bit half-precision float
|
||||
/// Converts a 128-bit vector containing 16-bit half-precision float
|
||||
/// values into a 128-bit vector containing 32-bit float values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -113,12 +120,57 @@ _cvtsh_ss(unsigned short __a)
|
||||
/// A 128-bit vector containing 16-bit half-precision float values. The lower
|
||||
/// 64 bits are used in the conversion.
|
||||
/// \returns A 128-bit vector of [4 x float] containing converted float values.
|
||||
static __inline __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_cvtph_ps(__m128i __a)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vcvtph2ps((__v8hi)__a);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
/// Converts a 256-bit vector of [8 x float] into a 128-bit vector
|
||||
/// containing 16-bit half-precision float values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// \code
|
||||
/// __m128i _mm256_cvtps_ph(__m256 a, const int imm);
|
||||
/// \endcode
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VCVTPS2PH </c> instruction.
|
||||
///
|
||||
/// \param a
|
||||
/// A 256-bit vector containing 32-bit single-precision float values to be
|
||||
/// converted to 16-bit half-precision float values.
|
||||
/// \param imm
|
||||
/// An immediate value controlling rounding using bits [2:0]: \n
|
||||
/// 000: Nearest \n
|
||||
/// 001: Down \n
|
||||
/// 010: Up \n
|
||||
/// 011: Truncate \n
|
||||
/// 1XX: Use MXCSR.RC for rounding
|
||||
/// \returns A 128-bit vector containing the converted 16-bit half-precision
|
||||
/// float values.
|
||||
#define _mm256_cvtps_ph(a, imm) \
|
||||
(__m128i)__builtin_ia32_vcvtps2ph256((__v8sf)(__m256)(a), (imm))
|
||||
|
||||
/// Converts a 128-bit vector containing 16-bit half-precision float
|
||||
/// values into a 256-bit vector of [8 x float].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VCVTPH2PS </c> instruction.
|
||||
///
|
||||
/// \param __a
|
||||
/// A 128-bit vector containing 16-bit half-precision float values to be
|
||||
/// converted to 32-bit single-precision float values.
|
||||
/// \returns A vector of [8 x float] containing the converted 32-bit
|
||||
/// single-precision float values.
|
||||
static __inline __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_cvtph_ps(__m128i __a)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vcvtph2ps256((__v8hi)__a);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS128
|
||||
#undef __DEFAULT_FN_ATTRS256
|
||||
|
||||
#endif /* __F16CINTRIN_H */
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef __FLOAT_H
|
||||
#define __FLOAT_H
|
||||
#ifndef __CLANG_FLOAT_H
|
||||
#define __CLANG_FLOAT_H
|
||||
|
||||
/* If we're on MinGW, fall back to the system's float.h, which might have
|
||||
* additional definitions provided for Windows.
|
||||
@@ -85,6 +85,9 @@
|
||||
# undef FLT_DECIMAL_DIG
|
||||
# undef DBL_DECIMAL_DIG
|
||||
# undef LDBL_DECIMAL_DIG
|
||||
# undef FLT_HAS_SUBNORM
|
||||
# undef DBL_HAS_SUBNORM
|
||||
# undef LDBL_HAS_SUBNORM
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -141,6 +144,9 @@
|
||||
# define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
|
||||
# define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
|
||||
# define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
|
||||
# define FLT_HAS_SUBNORM __FLT_HAS_DENORM__
|
||||
# define DBL_HAS_SUBNORM __DBL_HAS_DENORM__
|
||||
# define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
|
||||
#endif
|
||||
|
||||
#ifdef __STDC_WANT_IEC_60559_TYPES_EXT__
|
||||
@@ -157,4 +163,4 @@
|
||||
# define FLT16_TRUE_MIN __FLT16_TRUE_MIN__
|
||||
#endif /* __STDC_WANT_IEC_60559_TYPES_EXT__ */
|
||||
|
||||
#endif /* __FLOAT_H */
|
||||
#endif /* __CLANG_FLOAT_H */
|
||||
|
||||
@@ -31,200 +31,202 @@
|
||||
#include <pmmintrin.h>
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("fma4")))
|
||||
#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("fma4"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("fma4"), __min_vector_width__(256)))
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddps((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_macc_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddpd((__v2df)__A, (__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_macc_ss(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddss((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_macc_sd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsd((__v2df)__A, (__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_msub_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddps((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_msub_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddpd((__v2df)__A, (__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_msub_ss(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddss((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_msub_sd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsd((__v2df)__A, (__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_nmacc_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddps(-(__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_nmacc_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddpd(-(__v2df)__A, (__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_nmacc_ss(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddss(-(__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_nmacc_sd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsd(-(__v2df)__A, (__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_nmsub_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddps(-(__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_nmsub_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddpd(-(__v2df)__A, (__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_nmsub_ss(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddss(-(__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_nmsub_sd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsd(-(__v2df)__A, (__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_maddsub_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_maddsub_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_msubadd_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_msubadd_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_macc_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddps256((__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_macc_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddpd256((__v4df)__A, (__v4df)__B, (__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_msub_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddps256((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_msub_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddpd256((__v4df)__A, (__v4df)__B, -(__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_nmacc_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddps256(-(__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_nmacc_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddpd256(-(__v4df)__A, (__v4df)__B, (__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_nmsub_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddps256(-(__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_nmsub_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddpd256(-(__v4df)__A, (__v4df)__B, -(__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_maddsub_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_maddsub_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, (__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_msubadd_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_msubadd_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, -(__v4df)__C);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS128
|
||||
#undef __DEFAULT_FN_ATTRS256
|
||||
|
||||
#endif /* __FMA4INTRIN_H */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*===---- fma4intrin.h - FMA4 intrinsics -----------------------------------===
|
||||
/*===---- fmaintrin.h - FMA intrinsics -------------------------------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -29,200 +29,202 @@
|
||||
#define __FMAINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("fma")))
|
||||
#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("fma"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("fma"), __min_vector_width__(256)))
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddps((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fmadd_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddpd((__v2df)__A, (__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fmadd_ss(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fmadd_sd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, (__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fmsub_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddps((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fmsub_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddpd((__v2df)__A, (__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fmsub_ss(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fmsub_sd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, (__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddps(-(__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddpd(-(__v2df)__A, (__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fnmadd_ss(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, -(__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fnmadd_sd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, -(__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddps(-(__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddpd(-(__v2df)__A, (__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fnmsub_ss(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddss3((__v4sf)__A, -(__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fnmsub_sd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsd3((__v2df)__A, -(__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, (__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128 __DEFAULT_FN_ATTRS128
|
||||
_mm_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C)
|
||||
{
|
||||
return (__m128)__builtin_ia32_vfmaddsubps((__v4sf)__A, (__v4sf)__B, -(__v4sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m128d __DEFAULT_FN_ATTRS128
|
||||
_mm_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C)
|
||||
{
|
||||
return (__m128d)__builtin_ia32_vfmaddsubpd((__v2df)__A, (__v2df)__B, -(__v2df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_fmadd_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddps256((__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_fmadd_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddpd256((__v4df)__A, (__v4df)__B, (__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_fmsub_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddps256((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_fmsub_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddpd256((__v4df)__A, (__v4df)__B, -(__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddps256(-(__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddpd256(-(__v4df)__A, (__v4df)__B, (__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddps256(-(__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddpd256(-(__v4df)__A, (__v4df)__B, -(__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, (__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, (__v4df)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256 __DEFAULT_FN_ATTRS256
|
||||
_mm256_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vfmaddsubps256((__v8sf)__A, (__v8sf)__B, -(__v8sf)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256d __DEFAULT_FN_ATTRS256
|
||||
_mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C)
|
||||
{
|
||||
return (__m256d)__builtin_ia32_vfmaddsubpd256((__v4df)__A, (__v4df)__B, -(__v4df)__C);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS128
|
||||
#undef __DEFAULT_FN_ATTRS256
|
||||
|
||||
#endif /* __FMAINTRIN_H */
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("fxsr")))
|
||||
|
||||
/// \brief Saves the XMM, MMX, MXCSR and x87 FPU registers into a 512-byte
|
||||
/// Saves the XMM, MMX, MXCSR and x87 FPU registers into a 512-byte
|
||||
/// memory region pointed to by the input parameter \a __p.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -43,10 +43,10 @@
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
_fxsave(void *__p)
|
||||
{
|
||||
return __builtin_ia32_fxsave(__p);
|
||||
__builtin_ia32_fxsave(__p);
|
||||
}
|
||||
|
||||
/// \brief Restores the XMM, MMX, MXCSR and x87 FPU registers from the 512-byte
|
||||
/// Restores the XMM, MMX, MXCSR and x87 FPU registers from the 512-byte
|
||||
/// memory region pointed to by the input parameter \a __p. The contents of
|
||||
/// this memory region should have been written to by a previous \c _fxsave
|
||||
/// or \c _fxsave64 intrinsic.
|
||||
@@ -61,11 +61,11 @@ _fxsave(void *__p)
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
_fxrstor(void *__p)
|
||||
{
|
||||
return __builtin_ia32_fxrstor(__p);
|
||||
__builtin_ia32_fxrstor(__p);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
/// \brief Saves the XMM, MMX, MXCSR and x87 FPU registers into a 512-byte
|
||||
/// Saves the XMM, MMX, MXCSR and x87 FPU registers into a 512-byte
|
||||
/// memory region pointed to by the input parameter \a __p.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -78,10 +78,10 @@ _fxrstor(void *__p)
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
_fxsave64(void *__p)
|
||||
{
|
||||
return __builtin_ia32_fxsave64(__p);
|
||||
__builtin_ia32_fxsave64(__p);
|
||||
}
|
||||
|
||||
/// \brief Restores the XMM, MMX, MXCSR and x87 FPU registers from the 512-byte
|
||||
/// Restores the XMM, MMX, MXCSR and x87 FPU registers from the 512-byte
|
||||
/// memory region pointed to by the input parameter \a __p. The contents of
|
||||
/// this memory region should have been written to by a previous \c _fxsave
|
||||
/// or \c _fxsave64 intrinsic.
|
||||
@@ -96,7 +96,7 @@ _fxsave64(void *__p)
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
_fxrstor64(void *__p)
|
||||
{
|
||||
return __builtin_ia32_fxrstor64(__p);
|
||||
__builtin_ia32_fxrstor64(__p);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -29,104 +29,108 @@
|
||||
#define __GFNIINTRIN_H
|
||||
|
||||
|
||||
#define _mm_gf2p8affineinv_epi64_epi8(A, B, I) __extension__ ({ \
|
||||
#define _mm_gf2p8affineinv_epi64_epi8(A, B, I) \
|
||||
(__m128i)__builtin_ia32_vgf2p8affineinvqb_v16qi((__v16qi)(__m128i)(A), \
|
||||
(__v16qi)(__m128i)(B), \
|
||||
(char)(I)); })
|
||||
(char)(I))
|
||||
|
||||
#define _mm_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, I) __extension__ ({ \
|
||||
#define _mm_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, I) \
|
||||
(__m128i)__builtin_ia32_selectb_128((__mmask16)(U), \
|
||||
(__v16qi)_mm_gf2p8affineinv_epi64_epi8(A, B, I), \
|
||||
(__v16qi)(__m128i)(S)); })
|
||||
(__v16qi)(__m128i)(S))
|
||||
|
||||
|
||||
#define _mm_maskz_gf2p8affineinv_epi64_epi8(U, A, B, I) __extension__ ({ \
|
||||
#define _mm_maskz_gf2p8affineinv_epi64_epi8(U, A, B, I) \
|
||||
(__m128i)_mm_mask_gf2p8affineinv_epi64_epi8((__m128i)_mm_setzero_si128(), \
|
||||
U, A, B, I); })
|
||||
U, A, B, I)
|
||||
|
||||
|
||||
#define _mm256_gf2p8affineinv_epi64_epi8(A, B, I) __extension__ ({ \
|
||||
#define _mm256_gf2p8affineinv_epi64_epi8(A, B, I) \
|
||||
(__m256i)__builtin_ia32_vgf2p8affineinvqb_v32qi((__v32qi)(__m256i)(A), \
|
||||
(__v32qi)(__m256i)(B), \
|
||||
(char)(I)); })
|
||||
(char)(I))
|
||||
|
||||
#define _mm256_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, I) __extension__ ({ \
|
||||
#define _mm256_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, I) \
|
||||
(__m256i)__builtin_ia32_selectb_256((__mmask32)(U), \
|
||||
(__v32qi)_mm256_gf2p8affineinv_epi64_epi8(A, B, I), \
|
||||
(__v32qi)(__m256i)(S)); })
|
||||
(__v32qi)(__m256i)(S))
|
||||
|
||||
#define _mm256_maskz_gf2p8affineinv_epi64_epi8(U, A, B, I) __extension__ ({ \
|
||||
#define _mm256_maskz_gf2p8affineinv_epi64_epi8(U, A, B, I) \
|
||||
(__m256i)_mm256_mask_gf2p8affineinv_epi64_epi8((__m256i)_mm256_setzero_si256(), \
|
||||
U, A, B, I); })
|
||||
U, A, B, I)
|
||||
|
||||
|
||||
#define _mm512_gf2p8affineinv_epi64_epi8(A, B, I) __extension__ ({ \
|
||||
#define _mm512_gf2p8affineinv_epi64_epi8(A, B, I) \
|
||||
(__m512i)__builtin_ia32_vgf2p8affineinvqb_v64qi((__v64qi)(__m512i)(A), \
|
||||
(__v64qi)(__m512i)(B), \
|
||||
(char)(I)); })
|
||||
(char)(I))
|
||||
|
||||
#define _mm512_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, I) __extension__ ({ \
|
||||
#define _mm512_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectb_512((__mmask64)(U), \
|
||||
(__v64qi)_mm512_gf2p8affineinv_epi64_epi8(A, B, I), \
|
||||
(__v64qi)(__m512i)(S)); })
|
||||
(__v64qi)(__m512i)(S))
|
||||
|
||||
#define _mm512_maskz_gf2p8affineinv_epi64_epi8(U, A, B, I) __extension__ ({ \
|
||||
(__m512i)_mm512_mask_gf2p8affineinv_epi64_epi8((__m512i)_mm512_setzero_qi(), \
|
||||
U, A, B, I); })
|
||||
#define _mm512_maskz_gf2p8affineinv_epi64_epi8(U, A, B, I) \
|
||||
(__m512i)_mm512_mask_gf2p8affineinv_epi64_epi8((__m512i)_mm512_setzero_si512(), \
|
||||
U, A, B, I)
|
||||
|
||||
#define _mm_gf2p8affine_epi64_epi8(A, B, I) __extension__ ({ \
|
||||
#define _mm_gf2p8affine_epi64_epi8(A, B, I) \
|
||||
(__m128i)__builtin_ia32_vgf2p8affineqb_v16qi((__v16qi)(__m128i)(A), \
|
||||
(__v16qi)(__m128i)(B), \
|
||||
(char)(I)); })
|
||||
(char)(I))
|
||||
|
||||
#define _mm_mask_gf2p8affine_epi64_epi8(S, U, A, B, I) __extension__ ({ \
|
||||
#define _mm_mask_gf2p8affine_epi64_epi8(S, U, A, B, I) \
|
||||
(__m128i)__builtin_ia32_selectb_128((__mmask16)(U), \
|
||||
(__v16qi)_mm_gf2p8affine_epi64_epi8(A, B, I), \
|
||||
(__v16qi)(__m128i)(S)); })
|
||||
(__v16qi)(__m128i)(S))
|
||||
|
||||
|
||||
#define _mm_maskz_gf2p8affine_epi64_epi8(U, A, B, I) __extension__ ({ \
|
||||
#define _mm_maskz_gf2p8affine_epi64_epi8(U, A, B, I) \
|
||||
(__m128i)_mm_mask_gf2p8affine_epi64_epi8((__m128i)_mm_setzero_si128(), \
|
||||
U, A, B, I); })
|
||||
U, A, B, I)
|
||||
|
||||
|
||||
#define _mm256_gf2p8affine_epi64_epi8(A, B, I) __extension__ ({ \
|
||||
#define _mm256_gf2p8affine_epi64_epi8(A, B, I) \
|
||||
(__m256i)__builtin_ia32_vgf2p8affineqb_v32qi((__v32qi)(__m256i)(A), \
|
||||
(__v32qi)(__m256i)(B), \
|
||||
(char)(I)); })
|
||||
(char)(I))
|
||||
|
||||
#define _mm256_mask_gf2p8affine_epi64_epi8(S, U, A, B, I) __extension__ ({ \
|
||||
#define _mm256_mask_gf2p8affine_epi64_epi8(S, U, A, B, I) \
|
||||
(__m256i)__builtin_ia32_selectb_256((__mmask32)(U), \
|
||||
(__v32qi)_mm256_gf2p8affine_epi64_epi8(A, B, I), \
|
||||
(__v32qi)(__m256i)(S)); })
|
||||
(__v32qi)(__m256i)(S))
|
||||
|
||||
#define _mm256_maskz_gf2p8affine_epi64_epi8(U, A, B, I) __extension__ ({ \
|
||||
#define _mm256_maskz_gf2p8affine_epi64_epi8(U, A, B, I) \
|
||||
(__m256i)_mm256_mask_gf2p8affine_epi64_epi8((__m256i)_mm256_setzero_si256(), \
|
||||
U, A, B, I); })
|
||||
U, A, B, I)
|
||||
|
||||
|
||||
#define _mm512_gf2p8affine_epi64_epi8(A, B, I) __extension__ ({ \
|
||||
#define _mm512_gf2p8affine_epi64_epi8(A, B, I) \
|
||||
(__m512i)__builtin_ia32_vgf2p8affineqb_v64qi((__v64qi)(__m512i)(A), \
|
||||
(__v64qi)(__m512i)(B), \
|
||||
(char)(I)); })
|
||||
(char)(I))
|
||||
|
||||
#define _mm512_mask_gf2p8affine_epi64_epi8(S, U, A, B, I) __extension__ ({ \
|
||||
#define _mm512_mask_gf2p8affine_epi64_epi8(S, U, A, B, I) \
|
||||
(__m512i)__builtin_ia32_selectb_512((__mmask64)(U), \
|
||||
(__v64qi)_mm512_gf2p8affine_epi64_epi8(A, B, I), \
|
||||
(__v64qi)(__m512i)(S)); })
|
||||
(__v64qi)(__m512i)(S))
|
||||
|
||||
#define _mm512_maskz_gf2p8affine_epi64_epi8(U, A, B, I) __extension__ ({ \
|
||||
(__m512i)_mm512_mask_gf2p8affine_epi64_epi8((__m512i)_mm512_setzero_qi(), \
|
||||
U, A, B, I); })
|
||||
#define _mm512_maskz_gf2p8affine_epi64_epi8(U, A, B, I) \
|
||||
(__m512i)_mm512_mask_gf2p8affine_epi64_epi8((__m512i)_mm512_setzero_si512(), \
|
||||
U, A, B, I)
|
||||
|
||||
/* Default attributes for simple form (no masking). */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("gfni")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("gfni"), __min_vector_width__(128)))
|
||||
|
||||
/* Default attributes for YMM unmasked form. */
|
||||
#define __DEFAULT_FN_ATTRS_Y __attribute__((__always_inline__, __nodebug__, __target__("avx,gfni"), __min_vector_width__(256)))
|
||||
|
||||
/* Default attributes for ZMM forms. */
|
||||
#define __DEFAULT_FN_ATTRS_F __attribute__((__always_inline__, __nodebug__, __target__("avx512bw,gfni")))
|
||||
#define __DEFAULT_FN_ATTRS_Z __attribute__((__always_inline__, __nodebug__, __target__("avx512bw,gfni"), __min_vector_width__(512)))
|
||||
|
||||
/* Default attributes for VLX forms. */
|
||||
#define __DEFAULT_FN_ATTRS_VL __attribute__((__always_inline__, __nodebug__, __target__("avx512bw,avx512vl,gfni")))
|
||||
#define __DEFAULT_FN_ATTRS_VL128 __attribute__((__always_inline__, __nodebug__, __target__("avx512bw,avx512vl,gfni"), __min_vector_width__(128)))
|
||||
#define __DEFAULT_FN_ATTRS_VL256 __attribute__((__always_inline__, __nodebug__, __target__("avx512bw,avx512vl,gfni"), __min_vector_width__(256)))
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_gf2p8mul_epi8(__m128i __A, __m128i __B)
|
||||
@@ -135,7 +139,7 @@ _mm_gf2p8mul_epi8(__m128i __A, __m128i __B)
|
||||
(__v16qi) __B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS_VL
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS_VL128
|
||||
_mm_mask_gf2p8mul_epi8(__m128i __S, __mmask16 __U, __m128i __A, __m128i __B)
|
||||
{
|
||||
return (__m128i) __builtin_ia32_selectb_128(__U,
|
||||
@@ -143,21 +147,21 @@ _mm_mask_gf2p8mul_epi8(__m128i __S, __mmask16 __U, __m128i __A, __m128i __B)
|
||||
(__v16qi) __S);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS_VL
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS_VL128
|
||||
_mm_maskz_gf2p8mul_epi8(__mmask16 __U, __m128i __A, __m128i __B)
|
||||
{
|
||||
return _mm_mask_gf2p8mul_epi8((__m128i)_mm_setzero_si128(),
|
||||
__U, __A, __B);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS_Y
|
||||
_mm256_gf2p8mul_epi8(__m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_vgf2p8mulb_v32qi((__v32qi) __A,
|
||||
(__v32qi) __B);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS_VL
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS_VL256
|
||||
_mm256_mask_gf2p8mul_epi8(__m256i __S, __mmask32 __U, __m256i __A, __m256i __B)
|
||||
{
|
||||
return (__m256i) __builtin_ia32_selectb_256(__U,
|
||||
@@ -165,21 +169,21 @@ _mm256_mask_gf2p8mul_epi8(__m256i __S, __mmask32 __U, __m256i __A, __m256i __B)
|
||||
(__v32qi) __S);
|
||||
}
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS_VL
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS_VL256
|
||||
_mm256_maskz_gf2p8mul_epi8(__mmask32 __U, __m256i __A, __m256i __B)
|
||||
{
|
||||
return _mm256_mask_gf2p8mul_epi8((__m256i)_mm256_setzero_si256(),
|
||||
__U, __A, __B);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS_F
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS_Z
|
||||
_mm512_gf2p8mul_epi8(__m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_vgf2p8mulb_v64qi((__v64qi) __A,
|
||||
(__v64qi) __B);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS_F
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS_Z
|
||||
_mm512_mask_gf2p8mul_epi8(__m512i __S, __mmask64 __U, __m512i __A, __m512i __B)
|
||||
{
|
||||
return (__m512i) __builtin_ia32_selectb_512(__U,
|
||||
@@ -187,16 +191,18 @@ _mm512_mask_gf2p8mul_epi8(__m512i __S, __mmask64 __U, __m512i __A, __m512i __B)
|
||||
(__v64qi) __S);
|
||||
}
|
||||
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS_F
|
||||
static __inline__ __m512i __DEFAULT_FN_ATTRS_Z
|
||||
_mm512_maskz_gf2p8mul_epi8(__mmask64 __U, __m512i __A, __m512i __B)
|
||||
{
|
||||
return _mm512_mask_gf2p8mul_epi8((__m512i)_mm512_setzero_qi(),
|
||||
return _mm512_mask_gf2p8mul_epi8((__m512i)_mm512_setzero_si512(),
|
||||
__U, __A, __B);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS_F
|
||||
#undef __DEFAULT_FN_ATTRS_VL
|
||||
#undef __DEFAULT_FN_ATTRS_Y
|
||||
#undef __DEFAULT_FN_ATTRS_Z
|
||||
#undef __DEFAULT_FN_ATTRS_VL128
|
||||
#undef __DEFAULT_FN_ATTRS_VL256
|
||||
|
||||
#endif // __GFNIINTRIN_H
|
||||
#endif /* __GFNIINTRIN_H */
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@ __TM_failure_code(void* const __TM_buff)
|
||||
|
||||
/* These intrinsics are being made available for compatibility with
|
||||
the IBM XL compiler. For documentation please see the "z/OS XL
|
||||
C/C++ Programming Guide" publically available on the web. */
|
||||
C/C++ Programming Guide" publicly available on the web. */
|
||||
|
||||
static __inline long __attribute__((__always_inline__, __nodebug__))
|
||||
__TM_simple_begin ()
|
||||
|
||||
@@ -70,4 +70,9 @@ __rdtscp(unsigned int *__A) {
|
||||
|
||||
#define _rdpmc(A) __rdpmc(A)
|
||||
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__))
|
||||
_wbinvd(void) {
|
||||
__builtin_ia32_wbinvd();
|
||||
}
|
||||
|
||||
#endif /* __IA32INTRIN_H */
|
||||
|
||||
@@ -68,55 +68,11 @@
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX2__)
|
||||
#include <avx2intrin.h>
|
||||
#endif
|
||||
|
||||
/* The 256-bit versions of functions in f16cintrin.h.
|
||||
Intel documents these as being in immintrin.h, and
|
||||
they depend on typedefs from avxintrin.h. */
|
||||
|
||||
/// \brief Converts a 256-bit vector of [8 x float] into a 128-bit vector
|
||||
/// containing 16-bit half-precision float values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// \code
|
||||
/// __m128i _mm256_cvtps_ph(__m256 a, const int imm);
|
||||
/// \endcode
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VCVTPS2PH </c> instruction.
|
||||
///
|
||||
/// \param a
|
||||
/// A 256-bit vector containing 32-bit single-precision float values to be
|
||||
/// converted to 16-bit half-precision float values.
|
||||
/// \param imm
|
||||
/// An immediate value controlling rounding using bits [2:0]: \n
|
||||
/// 000: Nearest \n
|
||||
/// 001: Down \n
|
||||
/// 010: Up \n
|
||||
/// 011: Truncate \n
|
||||
/// 1XX: Use MXCSR.RC for rounding
|
||||
/// \returns A 128-bit vector containing the converted 16-bit half-precision
|
||||
/// float values.
|
||||
#define _mm256_cvtps_ph(a, imm) __extension__ ({ \
|
||||
(__m128i)__builtin_ia32_vcvtps2ph256((__v8sf)(__m256)(a), (imm)); })
|
||||
|
||||
/// \brief Converts a 128-bit vector containing 16-bit half-precision float
|
||||
/// values into a 256-bit vector of [8 x float].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VCVTPH2PS </c> instruction.
|
||||
///
|
||||
/// \param __a
|
||||
/// A 128-bit vector containing 16-bit half-precision float values to be
|
||||
/// converted to 32-bit single-precision float values.
|
||||
/// \returns A vector of [8 x float] containing the converted 32-bit
|
||||
/// single-precision float values.
|
||||
static __inline __m256 __attribute__((__always_inline__, __nodebug__, __target__("f16c")))
|
||||
_mm256_cvtph_ps(__m128i __a)
|
||||
{
|
||||
return (__m256)__builtin_ia32_vcvtph2ps256((__v8hi)__a);
|
||||
}
|
||||
#endif /* __AVX2__ */
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__F16C__)
|
||||
#include <f16cintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__VPCLMULQDQ__)
|
||||
#include <vpclmulqdqintrin.h>
|
||||
@@ -134,6 +90,10 @@ _mm256_cvtph_ps(__m128i __a)
|
||||
#include <lzcntintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__POPCNT__)
|
||||
#include <popcntintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FMA__)
|
||||
#include <fmaintrin.h>
|
||||
#endif
|
||||
@@ -247,6 +207,18 @@ _mm256_cvtph_ps(__m128i __a)
|
||||
#include <gfniintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RDPID__)
|
||||
/// Returns the value of the IA32_TSC_AUX MSR (0xc0000103).
|
||||
///
|
||||
/// \headerfile <immintrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> RDPID </c> instruction.
|
||||
static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("rdpid")))
|
||||
_rdpid_u32(void) {
|
||||
return __builtin_ia32_rdpid();
|
||||
}
|
||||
#endif // __RDPID__
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RDRND__)
|
||||
static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
|
||||
_rdrand16_step(unsigned short *__p)
|
||||
@@ -310,30 +282,89 @@ _readgsbase_u64(void)
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
|
||||
_writefsbase_u32(unsigned int __V)
|
||||
{
|
||||
return __builtin_ia32_wrfsbase32(__V);
|
||||
__builtin_ia32_wrfsbase32(__V);
|
||||
}
|
||||
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
|
||||
_writefsbase_u64(unsigned long long __V)
|
||||
{
|
||||
return __builtin_ia32_wrfsbase64(__V);
|
||||
__builtin_ia32_wrfsbase64(__V);
|
||||
}
|
||||
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
|
||||
_writegsbase_u32(unsigned int __V)
|
||||
{
|
||||
return __builtin_ia32_wrgsbase32(__V);
|
||||
__builtin_ia32_wrgsbase32(__V);
|
||||
}
|
||||
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
|
||||
_writegsbase_u64(unsigned long long __V)
|
||||
{
|
||||
return __builtin_ia32_wrgsbase64(__V);
|
||||
__builtin_ia32_wrgsbase64(__V);
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* __FSGSBASE__ */
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__MOVBE__)
|
||||
|
||||
/* The structs used below are to force the load/store to be unaligned. This
|
||||
* is accomplished with the __packed__ attribute. The __may_alias__ prevents
|
||||
* tbaa metadata from being generated based on the struct and the type of the
|
||||
* field inside of it.
|
||||
*/
|
||||
|
||||
static __inline__ short __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
|
||||
_loadbe_i16(void const * __P) {
|
||||
struct __loadu_i16 {
|
||||
short __v;
|
||||
} __attribute__((__packed__, __may_alias__));
|
||||
return __builtin_bswap16(((struct __loadu_i16*)__P)->__v);
|
||||
}
|
||||
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
|
||||
_storebe_i16(void * __P, short __D) {
|
||||
struct __storeu_i16 {
|
||||
short __v;
|
||||
} __attribute__((__packed__, __may_alias__));
|
||||
((struct __storeu_i16*)__P)->__v = __builtin_bswap16(__D);
|
||||
}
|
||||
|
||||
static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
|
||||
_loadbe_i32(void const * __P) {
|
||||
struct __loadu_i32 {
|
||||
int __v;
|
||||
} __attribute__((__packed__, __may_alias__));
|
||||
return __builtin_bswap32(((struct __loadu_i32*)__P)->__v);
|
||||
}
|
||||
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
|
||||
_storebe_i32(void * __P, int __D) {
|
||||
struct __storeu_i32 {
|
||||
int __v;
|
||||
} __attribute__((__packed__, __may_alias__));
|
||||
((struct __storeu_i32*)__P)->__v = __builtin_bswap32(__D);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
static __inline__ long long __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
|
||||
_loadbe_i64(void const * __P) {
|
||||
struct __loadu_i64 {
|
||||
long long __v;
|
||||
} __attribute__((__packed__, __may_alias__));
|
||||
return __builtin_bswap64(((struct __loadu_i64*)__P)->__v);
|
||||
}
|
||||
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("movbe")))
|
||||
_storebe_i64(void * __P, long long __D) {
|
||||
struct __storeu_i64 {
|
||||
long long __v;
|
||||
} __attribute__((__packed__, __may_alias__));
|
||||
((struct __storeu_i64*)__P)->__v = __builtin_bswap64(__D);
|
||||
}
|
||||
#endif
|
||||
#endif /* __MOVBE */
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RTM__)
|
||||
#include <rtmintrin.h>
|
||||
#include <xtestintrin.h>
|
||||
@@ -371,4 +402,125 @@ _writegsbase_u64(unsigned long long __V)
|
||||
* whereas others are also available at all times. */
|
||||
#include <adxintrin.h>
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RDSEED__)
|
||||
#include <rdseedintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__WBNOINVD__)
|
||||
#include <wbnoinvdintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__CLDEMOTE__)
|
||||
#include <cldemoteintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__WAITPKG__)
|
||||
#include <waitpkgintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || \
|
||||
defined(__MOVDIRI__) || defined(__MOVDIR64B__)
|
||||
#include <movdirintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__PCONFIG__)
|
||||
#include <pconfigintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SGX__)
|
||||
#include <sgxintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__PTWRITE__)
|
||||
#include <ptwriteintrin.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MSC_VER) || __has_feature(modules) || defined(__INVPCID__)
|
||||
#include <invpcidintrin.h>
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
/* Define the default attributes for these intrinsics */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked Exchange HLE
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange_HLEAcquire(long volatile *_Target, long _Value) {
|
||||
__asm__ __volatile__(".byte 0xf2 ; lock ; xchg %0, %1"
|
||||
: "+r" (_Value), "+m" (*_Target) :: "memory");
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange_HLERelease(long volatile *_Target, long _Value) {
|
||||
__asm__ __volatile__(".byte 0xf3 ; lock ; xchg %0, %1"
|
||||
: "+r" (_Value), "+m" (*_Target) :: "memory");
|
||||
return _Value;
|
||||
}
|
||||
#endif
|
||||
#if defined(__x86_64__)
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange64_HLEAcquire(__int64 volatile *_Target, __int64 _Value) {
|
||||
__asm__ __volatile__(".byte 0xf2 ; lock ; xchg %0, %1"
|
||||
: "+r" (_Value), "+m" (*_Target) :: "memory");
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange64_HLERelease(__int64 volatile *_Target, __int64 _Value) {
|
||||
__asm__ __volatile__(".byte 0xf3 ; lock ; xchg %0, %1"
|
||||
: "+r" (_Value), "+m" (*_Target) :: "memory");
|
||||
return _Value;
|
||||
}
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked Compare Exchange HLE
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange_HLEAcquire(long volatile *_Destination,
|
||||
long _Exchange, long _Comparand) {
|
||||
__asm__ __volatile__(".byte 0xf2 ; lock ; cmpxchg %2, %1"
|
||||
: "+a" (_Comparand), "+m" (*_Destination)
|
||||
: "r" (_Exchange) : "memory");
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange_HLERelease(long volatile *_Destination,
|
||||
long _Exchange, long _Comparand) {
|
||||
__asm__ __volatile__(".byte 0xf3 ; lock ; cmpxchg %2, %1"
|
||||
: "+a" (_Comparand), "+m" (*_Destination)
|
||||
: "r" (_Exchange) : "memory");
|
||||
return _Comparand;
|
||||
}
|
||||
#endif
|
||||
#if defined(__x86_64__)
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange64_HLEAcquire(__int64 volatile *_Destination,
|
||||
__int64 _Exchange, __int64 _Comparand) {
|
||||
__asm__ __volatile__(".byte 0xf2 ; lock ; cmpxchg %2, %1"
|
||||
: "+a" (_Comparand), "+m" (*_Destination)
|
||||
: "r" (_Exchange) : "memory");
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange64_HLERelease(__int64 volatile *_Destination,
|
||||
__int64 _Exchange, __int64 _Comparand) {
|
||||
__asm__ __volatile__(".byte 0xf3 ; lock ; cmpxchg %2, %1"
|
||||
: "+a" (_Comparand), "+m" (*_Destination)
|
||||
: "r" (_Exchange) : "memory");
|
||||
return _Comparand;
|
||||
}
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#endif /* __IMMINTRIN_H */
|
||||
|
||||
+166
-516
@@ -38,7 +38,7 @@
|
||||
#include <armintr.h>
|
||||
#endif
|
||||
|
||||
#if defined(_M_ARM64)
|
||||
#if defined(__aarch64__)
|
||||
#include <arm64intr.h>
|
||||
#endif
|
||||
|
||||
@@ -83,14 +83,13 @@ void __incfsdword(unsigned long);
|
||||
void __incfsword(unsigned long);
|
||||
unsigned long __indword(unsigned short);
|
||||
void __indwordstring(unsigned short, unsigned long *, unsigned long);
|
||||
void __int2c(void);
|
||||
void __invlpg(void *);
|
||||
unsigned short __inword(unsigned short);
|
||||
void __inwordstring(unsigned short, unsigned short *, unsigned long);
|
||||
void __lidt(void *);
|
||||
unsigned __int64 __ll_lshift(unsigned __int64, int);
|
||||
__int64 __ll_rshift(__int64, int);
|
||||
unsigned int __lzcnt(unsigned int);
|
||||
unsigned short __lzcnt16(unsigned short);
|
||||
static __inline__
|
||||
void __movsb(unsigned char *, unsigned char const *, size_t);
|
||||
static __inline__
|
||||
@@ -140,6 +139,7 @@ void __svm_stgi(void);
|
||||
void __svm_vmload(size_t);
|
||||
void __svm_vmrun(size_t);
|
||||
void __svm_vmsave(size_t);
|
||||
void __ud2(void);
|
||||
unsigned __int64 __ull_rshift(unsigned __int64, int);
|
||||
void __vmx_off(void);
|
||||
void __vmx_vmptrst(unsigned __int64 *);
|
||||
@@ -161,25 +161,15 @@ static __inline__
|
||||
unsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask);
|
||||
static __inline__
|
||||
unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask);
|
||||
static __inline__
|
||||
unsigned char _bittest(long const *, long);
|
||||
static __inline__
|
||||
unsigned char _bittestandcomplement(long *, long);
|
||||
static __inline__
|
||||
unsigned char _bittestandreset(long *, long);
|
||||
static __inline__
|
||||
unsigned char _bittestandset(long *, long);
|
||||
void __cdecl _disable(void);
|
||||
void __cdecl _enable(void);
|
||||
long _InterlockedAddLargeStatistic(__int64 volatile *_Addend, long _Value);
|
||||
unsigned char _interlockedbittestandreset(long volatile *, long);
|
||||
unsigned char _interlockedbittestandset(long volatile *, long);
|
||||
long _InterlockedCompareExchange_HLEAcquire(long volatile *, long, long);
|
||||
long _InterlockedCompareExchange_HLERelease(long volatile *, long, long);
|
||||
__int64 _InterlockedcompareExchange64_HLEAcquire(__int64 volatile *, __int64,
|
||||
__int64);
|
||||
__int64 _InterlockedCompareExchange64_HLERelease(__int64 volatile *, __int64,
|
||||
__int64);
|
||||
void *_InterlockedCompareExchangePointer_HLEAcquire(void *volatile *, void *,
|
||||
void *);
|
||||
void *_InterlockedCompareExchangePointer_HLERelease(void *volatile *, void *,
|
||||
@@ -227,7 +217,6 @@ void __incgsbyte(unsigned long);
|
||||
void __incgsdword(unsigned long);
|
||||
void __incgsqword(unsigned long);
|
||||
void __incgsword(unsigned long);
|
||||
unsigned __int64 __lzcnt64(unsigned __int64);
|
||||
static __inline__
|
||||
void __movsq(unsigned long long *, unsigned long long const *, size_t);
|
||||
static __inline__
|
||||
@@ -256,24 +245,15 @@ void __writegsbyte(unsigned long, unsigned char);
|
||||
void __writegsdword(unsigned long, unsigned long);
|
||||
void __writegsqword(unsigned long, unsigned __int64);
|
||||
void __writegsword(unsigned long, unsigned short);
|
||||
static __inline__
|
||||
unsigned char _BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask);
|
||||
static __inline__
|
||||
unsigned char _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask);
|
||||
static __inline__
|
||||
unsigned char _bittest64(__int64 const *, __int64);
|
||||
static __inline__
|
||||
unsigned char _bittestandcomplement64(__int64 *, __int64);
|
||||
static __inline__
|
||||
unsigned char _bittestandreset64(__int64 *, __int64);
|
||||
static __inline__
|
||||
unsigned char _bittestandset64(__int64 *, __int64);
|
||||
long _InterlockedAnd_np(long volatile *_Value, long _Mask);
|
||||
short _InterlockedAnd16_np(short volatile *_Value, short _Mask);
|
||||
__int64 _InterlockedAnd64_np(__int64 volatile *_Value, __int64 _Mask);
|
||||
char _InterlockedAnd8_np(char volatile *_Value, char _Mask);
|
||||
unsigned char _interlockedbittestandreset64(__int64 volatile *, __int64);
|
||||
static __inline__
|
||||
unsigned char _interlockedbittestandset64(__int64 volatile *, __int64);
|
||||
long _InterlockedCompareExchange_np(long volatile *_Destination, long _Exchange,
|
||||
long _Comparand);
|
||||
@@ -287,10 +267,6 @@ unsigned char _InterlockedCompareExchange128_np(__int64 volatile *_Destination,
|
||||
__int64 *_ComparandResult);
|
||||
short _InterlockedCompareExchange16_np(short volatile *_Destination,
|
||||
short _Exchange, short _Comparand);
|
||||
__int64 _InterlockedCompareExchange64_HLEAcquire(__int64 volatile *, __int64,
|
||||
__int64);
|
||||
__int64 _InterlockedCompareExchange64_HLERelease(__int64 volatile *, __int64,
|
||||
__int64);
|
||||
__int64 _InterlockedCompareExchange64_np(__int64 volatile *_Destination,
|
||||
__int64 _Exchange, __int64 _Comparand);
|
||||
void *_InterlockedCompareExchangePointer_np(void *volatile *_Destination,
|
||||
@@ -320,7 +296,12 @@ unsigned __int64 _umul128(unsigned __int64,
|
||||
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
#if defined(__x86_64__) || defined(__arm__)
|
||||
#if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
|
||||
|
||||
static __inline__
|
||||
unsigned char _BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask);
|
||||
static __inline__
|
||||
unsigned char _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask);
|
||||
|
||||
static __inline__
|
||||
__int64 _InterlockedDecrement64(__int64 volatile *_Addend);
|
||||
@@ -341,525 +322,164 @@ __int64 _InterlockedAnd64(__int64 volatile *_Value, __int64 _Mask);
|
||||
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Bit Counting and Testing
|
||||
\*----------------------------------------------------------------------------*/
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_bittest(long const *_BitBase, long _BitPos) {
|
||||
return (*_BitBase >> _BitPos) & 1;
|
||||
}
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_bittestandcomplement(long *_BitBase, long _BitPos) {
|
||||
unsigned char _Res = (*_BitBase >> _BitPos) & 1;
|
||||
*_BitBase = *_BitBase ^ (1 << _BitPos);
|
||||
return _Res;
|
||||
}
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_bittestandreset(long *_BitBase, long _BitPos) {
|
||||
unsigned char _Res = (*_BitBase >> _BitPos) & 1;
|
||||
*_BitBase = *_BitBase & ~(1 << _BitPos);
|
||||
return _Res;
|
||||
}
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_bittestandset(long *_BitBase, long _BitPos) {
|
||||
unsigned char _Res = (*_BitBase >> _BitPos) & 1;
|
||||
*_BitBase = *_BitBase | (1 << _BitPos);
|
||||
return _Res;
|
||||
}
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_interlockedbittestandset_acq(long volatile *_BitBase, long _BitPos) {
|
||||
long _PrevVal = __atomic_fetch_or(_BitBase, 1l << _BitPos, __ATOMIC_ACQUIRE);
|
||||
return (_PrevVal >> _BitPos) & 1;
|
||||
}
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_interlockedbittestandset_nf(long volatile *_BitBase, long _BitPos) {
|
||||
long _PrevVal = __atomic_fetch_or(_BitBase, 1l << _BitPos, __ATOMIC_RELAXED);
|
||||
return (_PrevVal >> _BitPos) & 1;
|
||||
}
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_interlockedbittestandset_rel(long volatile *_BitBase, long _BitPos) {
|
||||
long _PrevVal = __atomic_fetch_or(_BitBase, 1l << _BitPos, __ATOMIC_RELEASE);
|
||||
return (_PrevVal >> _BitPos) & 1;
|
||||
}
|
||||
#endif
|
||||
#ifdef __x86_64__
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_bittest64(__int64 const *_BitBase, __int64 _BitPos) {
|
||||
return (*_BitBase >> _BitPos) & 1;
|
||||
}
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_bittestandcomplement64(__int64 *_BitBase, __int64 _BitPos) {
|
||||
unsigned char _Res = (*_BitBase >> _BitPos) & 1;
|
||||
*_BitBase = *_BitBase ^ (1ll << _BitPos);
|
||||
return _Res;
|
||||
}
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_bittestandreset64(__int64 *_BitBase, __int64 _BitPos) {
|
||||
unsigned char _Res = (*_BitBase >> _BitPos) & 1;
|
||||
*_BitBase = *_BitBase & ~(1ll << _BitPos);
|
||||
return _Res;
|
||||
}
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_bittestandset64(__int64 *_BitBase, __int64 _BitPos) {
|
||||
unsigned char _Res = (*_BitBase >> _BitPos) & 1;
|
||||
*_BitBase = *_BitBase | (1ll << _BitPos);
|
||||
return _Res;
|
||||
}
|
||||
static __inline__ unsigned char __DEFAULT_FN_ATTRS
|
||||
_interlockedbittestandset64(__int64 volatile *_BitBase, __int64 _BitPos) {
|
||||
long long _PrevVal =
|
||||
__atomic_fetch_or(_BitBase, 1ll << _BitPos, __ATOMIC_SEQ_CST);
|
||||
return (_PrevVal >> _BitPos) & 1;
|
||||
}
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked Exchange Add
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd8_acq(char volatile *_Addend, char _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd8_nf(char volatile *_Addend, char _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd8_rel(char volatile *_Addend, char _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd16_acq(short volatile *_Addend, short _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd16_nf(short volatile *_Addend, short _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd16_rel(short volatile *_Addend, short _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd_acq(long volatile *_Addend, long _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd_nf(long volatile *_Addend, long _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd_rel(long volatile *_Addend, long _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd64_acq(__int64 volatile *_Addend, __int64 _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd64_nf(__int64 volatile *_Addend, __int64 _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchangeAdd64_rel(__int64 volatile *_Addend, __int64 _Value) {
|
||||
return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELEASE);
|
||||
}
|
||||
char _InterlockedExchangeAdd8_acq(char volatile *_Addend, char _Value);
|
||||
char _InterlockedExchangeAdd8_nf(char volatile *_Addend, char _Value);
|
||||
char _InterlockedExchangeAdd8_rel(char volatile *_Addend, char _Value);
|
||||
short _InterlockedExchangeAdd16_acq(short volatile *_Addend, short _Value);
|
||||
short _InterlockedExchangeAdd16_nf(short volatile *_Addend, short _Value);
|
||||
short _InterlockedExchangeAdd16_rel(short volatile *_Addend, short _Value);
|
||||
long _InterlockedExchangeAdd_acq(long volatile *_Addend, long _Value);
|
||||
long _InterlockedExchangeAdd_nf(long volatile *_Addend, long _Value);
|
||||
long _InterlockedExchangeAdd_rel(long volatile *_Addend, long _Value);
|
||||
__int64 _InterlockedExchangeAdd64_acq(__int64 volatile *_Addend, __int64 _Value);
|
||||
__int64 _InterlockedExchangeAdd64_nf(__int64 volatile *_Addend, __int64 _Value);
|
||||
__int64 _InterlockedExchangeAdd64_rel(__int64 volatile *_Addend, __int64 _Value);
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked Increment
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedIncrement16_acq(short volatile *_Value) {
|
||||
return __atomic_add_fetch(_Value, 1, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedIncrement16_nf(short volatile *_Value) {
|
||||
return __atomic_add_fetch(_Value, 1, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedIncrement16_rel(short volatile *_Value) {
|
||||
return __atomic_add_fetch(_Value, 1, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedIncrement_acq(long volatile *_Value) {
|
||||
return __atomic_add_fetch(_Value, 1, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedIncrement_nf(long volatile *_Value) {
|
||||
return __atomic_add_fetch(_Value, 1, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedIncrement_rel(long volatile *_Value) {
|
||||
return __atomic_add_fetch(_Value, 1, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedIncrement64_acq(__int64 volatile *_Value) {
|
||||
return __atomic_add_fetch(_Value, 1, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedIncrement64_nf(__int64 volatile *_Value) {
|
||||
return __atomic_add_fetch(_Value, 1, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedIncrement64_rel(__int64 volatile *_Value) {
|
||||
return __atomic_add_fetch(_Value, 1, __ATOMIC_RELEASE);
|
||||
}
|
||||
short _InterlockedIncrement16_acq(short volatile *_Value);
|
||||
short _InterlockedIncrement16_nf(short volatile *_Value);
|
||||
short _InterlockedIncrement16_rel(short volatile *_Value);
|
||||
long _InterlockedIncrement_acq(long volatile *_Value);
|
||||
long _InterlockedIncrement_nf(long volatile *_Value);
|
||||
long _InterlockedIncrement_rel(long volatile *_Value);
|
||||
__int64 _InterlockedIncrement64_acq(__int64 volatile *_Value);
|
||||
__int64 _InterlockedIncrement64_nf(__int64 volatile *_Value);
|
||||
__int64 _InterlockedIncrement64_rel(__int64 volatile *_Value);
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked Decrement
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedDecrement16_acq(short volatile *_Value) {
|
||||
return __atomic_sub_fetch(_Value, 1, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedDecrement16_nf(short volatile *_Value) {
|
||||
return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedDecrement16_rel(short volatile *_Value) {
|
||||
return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedDecrement_acq(long volatile *_Value) {
|
||||
return __atomic_sub_fetch(_Value, 1, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedDecrement_nf(long volatile *_Value) {
|
||||
return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedDecrement_rel(long volatile *_Value) {
|
||||
return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedDecrement64_acq(__int64 volatile *_Value) {
|
||||
return __atomic_sub_fetch(_Value, 1, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedDecrement64_nf(__int64 volatile *_Value) {
|
||||
return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedDecrement64_rel(__int64 volatile *_Value) {
|
||||
return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELEASE);
|
||||
}
|
||||
short _InterlockedDecrement16_acq(short volatile *_Value);
|
||||
short _InterlockedDecrement16_nf(short volatile *_Value);
|
||||
short _InterlockedDecrement16_rel(short volatile *_Value);
|
||||
long _InterlockedDecrement_acq(long volatile *_Value);
|
||||
long _InterlockedDecrement_nf(long volatile *_Value);
|
||||
long _InterlockedDecrement_rel(long volatile *_Value);
|
||||
__int64 _InterlockedDecrement64_acq(__int64 volatile *_Value);
|
||||
__int64 _InterlockedDecrement64_nf(__int64 volatile *_Value);
|
||||
__int64 _InterlockedDecrement64_rel(__int64 volatile *_Value);
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked And
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd8_acq(char volatile *_Value, char _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd8_nf(char volatile *_Value, char _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd8_rel(char volatile *_Value, char _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd16_acq(short volatile *_Value, short _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd16_nf(short volatile *_Value, short _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd16_rel(short volatile *_Value, short _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd_acq(long volatile *_Value, long _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd_nf(long volatile *_Value, long _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd_rel(long volatile *_Value, long _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd64_acq(__int64 volatile *_Value, __int64 _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd64_nf(__int64 volatile *_Value, __int64 _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedAnd64_rel(__int64 volatile *_Value, __int64 _Mask) {
|
||||
return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
char _InterlockedAnd8_acq(char volatile *_Value, char _Mask);
|
||||
char _InterlockedAnd8_nf(char volatile *_Value, char _Mask);
|
||||
char _InterlockedAnd8_rel(char volatile *_Value, char _Mask);
|
||||
short _InterlockedAnd16_acq(short volatile *_Value, short _Mask);
|
||||
short _InterlockedAnd16_nf(short volatile *_Value, short _Mask);
|
||||
short _InterlockedAnd16_rel(short volatile *_Value, short _Mask);
|
||||
long _InterlockedAnd_acq(long volatile *_Value, long _Mask);
|
||||
long _InterlockedAnd_nf(long volatile *_Value, long _Mask);
|
||||
long _InterlockedAnd_rel(long volatile *_Value, long _Mask);
|
||||
__int64 _InterlockedAnd64_acq(__int64 volatile *_Value, __int64 _Mask);
|
||||
__int64 _InterlockedAnd64_nf(__int64 volatile *_Value, __int64 _Mask);
|
||||
__int64 _InterlockedAnd64_rel(__int64 volatile *_Value, __int64 _Mask);
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Bit Counting and Testing
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
unsigned char _interlockedbittestandset_acq(long volatile *_BitBase,
|
||||
long _BitPos);
|
||||
unsigned char _interlockedbittestandset_nf(long volatile *_BitBase,
|
||||
long _BitPos);
|
||||
unsigned char _interlockedbittestandset_rel(long volatile *_BitBase,
|
||||
long _BitPos);
|
||||
unsigned char _interlockedbittestandreset_acq(long volatile *_BitBase,
|
||||
long _BitPos);
|
||||
unsigned char _interlockedbittestandreset_nf(long volatile *_BitBase,
|
||||
long _BitPos);
|
||||
unsigned char _interlockedbittestandreset_rel(long volatile *_BitBase,
|
||||
long _BitPos);
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked Or
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr8_acq(char volatile *_Value, char _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr8_nf(char volatile *_Value, char _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr8_rel(char volatile *_Value, char _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr16_acq(short volatile *_Value, short _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr16_nf(short volatile *_Value, short _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr16_rel(short volatile *_Value, short _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr_acq(long volatile *_Value, long _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr_nf(long volatile *_Value, long _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr_rel(long volatile *_Value, long _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr64_acq(__int64 volatile *_Value, __int64 _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr64_nf(__int64 volatile *_Value, __int64 _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedOr64_rel(__int64 volatile *_Value, __int64 _Mask) {
|
||||
return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
char _InterlockedOr8_acq(char volatile *_Value, char _Mask);
|
||||
char _InterlockedOr8_nf(char volatile *_Value, char _Mask);
|
||||
char _InterlockedOr8_rel(char volatile *_Value, char _Mask);
|
||||
short _InterlockedOr16_acq(short volatile *_Value, short _Mask);
|
||||
short _InterlockedOr16_nf(short volatile *_Value, short _Mask);
|
||||
short _InterlockedOr16_rel(short volatile *_Value, short _Mask);
|
||||
long _InterlockedOr_acq(long volatile *_Value, long _Mask);
|
||||
long _InterlockedOr_nf(long volatile *_Value, long _Mask);
|
||||
long _InterlockedOr_rel(long volatile *_Value, long _Mask);
|
||||
__int64 _InterlockedOr64_acq(__int64 volatile *_Value, __int64 _Mask);
|
||||
__int64 _InterlockedOr64_nf(__int64 volatile *_Value, __int64 _Mask);
|
||||
__int64 _InterlockedOr64_rel(__int64 volatile *_Value, __int64 _Mask);
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked Xor
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor8_acq(char volatile *_Value, char _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor8_nf(char volatile *_Value, char _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor8_rel(char volatile *_Value, char _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor16_acq(short volatile *_Value, short _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor16_nf(short volatile *_Value, short _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor16_rel(short volatile *_Value, short _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor_acq(long volatile *_Value, long _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor_nf(long volatile *_Value, long _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor_rel(long volatile *_Value, long _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor64_acq(__int64 volatile *_Value, __int64 _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_ACQUIRE);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor64_nf(__int64 volatile *_Value, __int64 _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELAXED);
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedXor64_rel(__int64 volatile *_Value, __int64 _Mask) {
|
||||
return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELEASE);
|
||||
}
|
||||
char _InterlockedXor8_acq(char volatile *_Value, char _Mask);
|
||||
char _InterlockedXor8_nf(char volatile *_Value, char _Mask);
|
||||
char _InterlockedXor8_rel(char volatile *_Value, char _Mask);
|
||||
short _InterlockedXor16_acq(short volatile *_Value, short _Mask);
|
||||
short _InterlockedXor16_nf(short volatile *_Value, short _Mask);
|
||||
short _InterlockedXor16_rel(short volatile *_Value, short _Mask);
|
||||
long _InterlockedXor_acq(long volatile *_Value, long _Mask);
|
||||
long _InterlockedXor_nf(long volatile *_Value, long _Mask);
|
||||
long _InterlockedXor_rel(long volatile *_Value, long _Mask);
|
||||
__int64 _InterlockedXor64_acq(__int64 volatile *_Value, __int64 _Mask);
|
||||
__int64 _InterlockedXor64_nf(__int64 volatile *_Value, __int64 _Mask);
|
||||
__int64 _InterlockedXor64_rel(__int64 volatile *_Value, __int64 _Mask);
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked Exchange
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange8_acq(char volatile *_Target, char _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_ACQUIRE);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange8_nf(char volatile *_Target, char _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELAXED);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange8_rel(char volatile *_Target, char _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELEASE);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange16_acq(short volatile *_Target, short _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_ACQUIRE);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange16_nf(short volatile *_Target, short _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELAXED);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange16_rel(short volatile *_Target, short _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELEASE);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange_acq(long volatile *_Target, long _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_ACQUIRE);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange_nf(long volatile *_Target, long _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELAXED);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange_rel(long volatile *_Target, long _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELEASE);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange64_acq(__int64 volatile *_Target, __int64 _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_ACQUIRE);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange64_nf(__int64 volatile *_Target, __int64 _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELAXED);
|
||||
return _Value;
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedExchange64_rel(__int64 volatile *_Target, __int64 _Value) {
|
||||
__atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELEASE);
|
||||
return _Value;
|
||||
}
|
||||
char _InterlockedExchange8_acq(char volatile *_Target, char _Value);
|
||||
char _InterlockedExchange8_nf(char volatile *_Target, char _Value);
|
||||
char _InterlockedExchange8_rel(char volatile *_Target, char _Value);
|
||||
short _InterlockedExchange16_acq(short volatile *_Target, short _Value);
|
||||
short _InterlockedExchange16_nf(short volatile *_Target, short _Value);
|
||||
short _InterlockedExchange16_rel(short volatile *_Target, short _Value);
|
||||
long _InterlockedExchange_acq(long volatile *_Target, long _Value);
|
||||
long _InterlockedExchange_nf(long volatile *_Target, long _Value);
|
||||
long _InterlockedExchange_rel(long volatile *_Target, long _Value);
|
||||
__int64 _InterlockedExchange64_acq(__int64 volatile *_Target, __int64 _Value);
|
||||
__int64 _InterlockedExchange64_nf(__int64 volatile *_Target, __int64 _Value);
|
||||
__int64 _InterlockedExchange64_rel(__int64 volatile *_Target, __int64 _Value);
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Interlocked Compare Exchange
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange8_acq(char volatile *_Destination,
|
||||
char _Exchange, char _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange8_nf(char volatile *_Destination,
|
||||
char _Exchange, char _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_RELAXED);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ char __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange8_rel(char volatile *_Destination,
|
||||
char _Exchange, char _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_RELEASE);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange16_acq(short volatile *_Destination,
|
||||
short _Exchange, short _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange16_nf(short volatile *_Destination,
|
||||
short _Exchange, short _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_RELAXED);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ short __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange16_rel(short volatile *_Destination,
|
||||
short _Exchange, short _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_RELEASE);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange_acq(long volatile *_Destination,
|
||||
long _Exchange, long _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange_nf(long volatile *_Destination,
|
||||
long _Exchange, long _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_RELAXED);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ long __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange_rel(long volatile *_Destination,
|
||||
long _Exchange, long _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_RELEASE);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange64_acq(__int64 volatile *_Destination,
|
||||
__int64 _Exchange, __int64 _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange64_nf(__int64 volatile *_Destination,
|
||||
__int64 _Exchange, __int64 _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_RELAXED);
|
||||
return _Comparand;
|
||||
}
|
||||
static __inline__ __int64 __DEFAULT_FN_ATTRS
|
||||
_InterlockedCompareExchange64_rel(__int64 volatile *_Destination,
|
||||
__int64 _Exchange, __int64 _Comparand) {
|
||||
__atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0,
|
||||
__ATOMIC_SEQ_CST, __ATOMIC_RELEASE);
|
||||
return _Comparand;
|
||||
}
|
||||
char _InterlockedCompareExchange8_acq(char volatile *_Destination,
|
||||
char _Exchange, char _Comparand);
|
||||
char _InterlockedCompareExchange8_nf(char volatile *_Destination,
|
||||
char _Exchange, char _Comparand);
|
||||
char _InterlockedCompareExchange8_rel(char volatile *_Destination,
|
||||
char _Exchange, char _Comparand);
|
||||
short _InterlockedCompareExchange16_acq(short volatile *_Destination,
|
||||
short _Exchange, short _Comparand);
|
||||
short _InterlockedCompareExchange16_nf(short volatile *_Destination,
|
||||
short _Exchange, short _Comparand);
|
||||
short _InterlockedCompareExchange16_rel(short volatile *_Destination,
|
||||
short _Exchange, short _Comparand);
|
||||
long _InterlockedCompareExchange_acq(long volatile *_Destination,
|
||||
long _Exchange, long _Comparand);
|
||||
long _InterlockedCompareExchange_nf(long volatile *_Destination,
|
||||
long _Exchange, long _Comparand);
|
||||
long _InterlockedCompareExchange_rel(long volatile *_Destination,
|
||||
long _Exchange, long _Comparand);
|
||||
__int64 _InterlockedCompareExchange64_acq(__int64 volatile *_Destination,
|
||||
__int64 _Exchange, __int64 _Comparand);
|
||||
__int64 _InterlockedCompareExchange64_nf(__int64 volatile *_Destination,
|
||||
__int64 _Exchange, __int64 _Comparand);
|
||||
__int64 _InterlockedCompareExchange64_rel(__int64 volatile *_Destination,
|
||||
__int64 _Exchange, __int64 _Comparand);
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------------*\
|
||||
@@ -868,33 +488,40 @@ _InterlockedCompareExchange64_rel(__int64 volatile *_Destination,
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__movsb(unsigned char *__dst, unsigned char const *__src, size_t __n) {
|
||||
__asm__("rep movsb" : : "D"(__dst), "S"(__src), "c"(__n));
|
||||
__asm__ __volatile__("rep movsb" : "+D"(__dst), "+S"(__src), "+c"(__n)
|
||||
: : "memory");
|
||||
}
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__movsd(unsigned long *__dst, unsigned long const *__src, size_t __n) {
|
||||
__asm__("rep movsl" : : "D"(__dst), "S"(__src), "c"(__n));
|
||||
__asm__ __volatile__("rep movsl" : "+D"(__dst), "+S"(__src), "+c"(__n)
|
||||
: : "memory");
|
||||
}
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__movsw(unsigned short *__dst, unsigned short const *__src, size_t __n) {
|
||||
__asm__("rep movsw" : : "D"(__dst), "S"(__src), "c"(__n));
|
||||
__asm__ __volatile__("rep movsw" : "+D"(__dst), "+S"(__src), "+c"(__n)
|
||||
: : "memory");
|
||||
}
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__stosd(unsigned long *__dst, unsigned long __x, size_t __n) {
|
||||
__asm__("rep stosl" : : "D"(__dst), "a"(__x), "c"(__n));
|
||||
__asm__ __volatile__("rep stosl" : "+D"(__dst), "+c"(__n) : "a"(__x)
|
||||
: "memory");
|
||||
}
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__stosw(unsigned short *__dst, unsigned short __x, size_t __n) {
|
||||
__asm__("rep stosw" : : "D"(__dst), "a"(__x), "c"(__n));
|
||||
__asm__ __volatile__("rep stosw" : "+D"(__dst), "+c"(__n) : "a"(__x)
|
||||
: "memory");
|
||||
}
|
||||
#endif
|
||||
#ifdef __x86_64__
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__movsq(unsigned long long *__dst, unsigned long long const *__src, size_t __n) {
|
||||
__asm__("rep movsq" : : "D"(__dst), "S"(__src), "c"(__n));
|
||||
__asm__ __volatile__("rep movsq" : "+D"(__dst), "+S"(__src), "+c"(__n)
|
||||
: : "memory");
|
||||
}
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__stosq(unsigned __int64 *__dst, unsigned __int64 __x, size_t __n) {
|
||||
__asm__("rep stosq" : : "D"(__dst), "a"(__x), "c"(__n));
|
||||
__asm__ __volatile__("rep stosq" : "+D"(__dst), "+c"(__n) : "a"(__x)
|
||||
: "memory");
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -905,7 +532,7 @@ __stosq(unsigned __int64 *__dst, unsigned __int64 __x, size_t __n) {
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__cpuid(int __info[4], int __level) {
|
||||
__asm__ ("cpuid" : "=a"(__info[0]), "=b" (__info[1]), "=c"(__info[2]), "=d"(__info[3])
|
||||
: "a"(__level));
|
||||
: "a"(__level), "c"(0));
|
||||
}
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__cpuidex(int __info[4], int __level, int __ecx) {
|
||||
@@ -922,12 +549,35 @@ static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__halt(void) {
|
||||
__asm__ volatile ("hlt");
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
__nop(void) {
|
||||
__asm__ volatile ("nop");
|
||||
}
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* MS AArch64 specific
|
||||
\*----------------------------------------------------------------------------*/
|
||||
#if defined(__aarch64__)
|
||||
unsigned __int64 __getReg(int);
|
||||
long _InterlockedAdd(long volatile *Addend, long Value);
|
||||
__int64 _ReadStatusReg(int);
|
||||
void _WriteStatusReg(int, __int64);
|
||||
|
||||
static inline unsigned short _byteswap_ushort (unsigned short val) {
|
||||
return __builtin_bswap16(val);
|
||||
}
|
||||
static inline unsigned long _byteswap_ulong (unsigned long val) {
|
||||
return __builtin_bswap32(val);
|
||||
}
|
||||
static inline unsigned __int64 _byteswap_uint64 (unsigned __int64 val) {
|
||||
return __builtin_bswap64(val);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------------*\
|
||||
|* Privileged intrinsics
|
||||
\*----------------------------------------------------------------------------*/
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
/*===------------- invpcidintrin.h - INVPCID intrinsic ---------------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef __IMMINTRIN_H
|
||||
#error "Never use <invpcidintrin.h> directly; include <immintrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __INVPCIDINTRIN_H
|
||||
#define __INVPCIDINTRIN_H
|
||||
|
||||
static __inline__ void
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("invpcid")))
|
||||
_invpcid(unsigned int __type, void *__descriptor) {
|
||||
__builtin_ia32_invpcid(__type, __descriptor);
|
||||
}
|
||||
|
||||
#endif /* __INVPCIDINTRIN_H */
|
||||
@@ -31,7 +31,7 @@
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("lwp")))
|
||||
|
||||
/// \brief Parses the LWPCB at the specified address and enables
|
||||
/// Parses the LWPCB at the specified address and enables
|
||||
/// profiling if valid.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -48,7 +48,7 @@ __llwpcb (void *__addr)
|
||||
__builtin_ia32_llwpcb(__addr);
|
||||
}
|
||||
|
||||
/// \brief Flushes the LWP state to memory and returns the address of the LWPCB.
|
||||
/// Flushes the LWP state to memory and returns the address of the LWPCB.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -58,12 +58,12 @@ __llwpcb (void *__addr)
|
||||
/// Address to the current Lightweight Profiling Control Block (LWPCB).
|
||||
/// If LWP is not currently enabled, returns NULL.
|
||||
static __inline__ void* __DEFAULT_FN_ATTRS
|
||||
__slwpcb ()
|
||||
__slwpcb (void)
|
||||
{
|
||||
return __builtin_ia32_slwpcb();
|
||||
}
|
||||
|
||||
/// \brief Inserts programmed event record into the LWP event ring buffer
|
||||
/// Inserts programmed event record into the LWP event ring buffer
|
||||
/// and advances the ring buffer pointer.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -84,7 +84,7 @@ __slwpcb ()
|
||||
(__builtin_ia32_lwpins32((unsigned int) (DATA2), (unsigned int) (DATA1), \
|
||||
(unsigned int) (FLAGS)))
|
||||
|
||||
/// \brief Decrements the LWP programmed value sample event counter. If the result is
|
||||
/// Decrements the LWP programmed value sample event counter. If the result is
|
||||
/// negative, inserts an event record into the LWP event ring buffer in memory
|
||||
/// and advances the ring buffer pointer.
|
||||
///
|
||||
@@ -104,7 +104,7 @@ __slwpcb ()
|
||||
|
||||
#ifdef __x86_64__
|
||||
|
||||
/// \brief Inserts programmed event record into the LWP event ring buffer
|
||||
/// Inserts programmed event record into the LWP event ring buffer
|
||||
/// and advances the ring buffer pointer.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -125,7 +125,7 @@ __slwpcb ()
|
||||
(__builtin_ia32_lwpins64((unsigned long long) (DATA2), (unsigned int) (DATA1), \
|
||||
(unsigned int) (FLAGS)))
|
||||
|
||||
/// \brief Decrements the LWP programmed value sample event counter. If the result is
|
||||
/// Decrements the LWP programmed value sample event counter. If the result is
|
||||
/// negative, inserts an event record into the LWP event ring buffer in memory
|
||||
/// and advances the ring buffer pointer.
|
||||
///
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("lzcnt")))
|
||||
|
||||
/// \brief Counts the number of leading zero bits in the operand.
|
||||
#ifndef _MSC_VER
|
||||
/// Counts the number of leading zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -41,13 +42,10 @@
|
||||
/// An unsigned 16-bit integer whose leading zeros are to be counted.
|
||||
/// \returns An unsigned 16-bit integer containing the number of leading zero
|
||||
/// bits in the operand.
|
||||
static __inline__ unsigned short __DEFAULT_FN_ATTRS
|
||||
__lzcnt16(unsigned short __X)
|
||||
{
|
||||
return __X ? __builtin_clzs(__X) : 16;
|
||||
}
|
||||
#define __lzcnt16(X) __builtin_ia32_lzcnt_u16((unsigned short)(X))
|
||||
#endif // _MSC_VER
|
||||
|
||||
/// \brief Counts the number of leading zero bits in the operand.
|
||||
/// Counts the number of leading zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -57,13 +55,14 @@ __lzcnt16(unsigned short __X)
|
||||
/// An unsigned 32-bit integer whose leading zeros are to be counted.
|
||||
/// \returns An unsigned 32-bit integer containing the number of leading zero
|
||||
/// bits in the operand.
|
||||
/// \see _lzcnt_u32
|
||||
static __inline__ unsigned int __DEFAULT_FN_ATTRS
|
||||
__lzcnt32(unsigned int __X)
|
||||
{
|
||||
return __X ? __builtin_clz(__X) : 32;
|
||||
return __builtin_ia32_lzcnt_u32(__X);
|
||||
}
|
||||
|
||||
/// \brief Counts the number of leading zero bits in the operand.
|
||||
/// Counts the number of leading zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -73,14 +72,16 @@ __lzcnt32(unsigned int __X)
|
||||
/// An unsigned 32-bit integer whose leading zeros are to be counted.
|
||||
/// \returns An unsigned 32-bit integer containing the number of leading zero
|
||||
/// bits in the operand.
|
||||
/// \see __lzcnt32
|
||||
static __inline__ unsigned int __DEFAULT_FN_ATTRS
|
||||
_lzcnt_u32(unsigned int __X)
|
||||
{
|
||||
return __X ? __builtin_clz(__X) : 32;
|
||||
return __builtin_ia32_lzcnt_u32(__X);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
/// \brief Counts the number of leading zero bits in the operand.
|
||||
#ifndef _MSC_VER
|
||||
/// Counts the number of leading zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -90,13 +91,11 @@ _lzcnt_u32(unsigned int __X)
|
||||
/// An unsigned 64-bit integer whose leading zeros are to be counted.
|
||||
/// \returns An unsigned 64-bit integer containing the number of leading zero
|
||||
/// bits in the operand.
|
||||
static __inline__ unsigned long long __DEFAULT_FN_ATTRS
|
||||
__lzcnt64(unsigned long long __X)
|
||||
{
|
||||
return __X ? __builtin_clzll(__X) : 64;
|
||||
}
|
||||
/// \see _lzcnt_u64
|
||||
#define __lzcnt64(X) __builtin_ia32_lzcnt_u64((unsigned long long)(X))
|
||||
#endif // _MSC_VER
|
||||
|
||||
/// \brief Counts the number of leading zero bits in the operand.
|
||||
/// Counts the number of leading zero bits in the operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -106,10 +105,11 @@ __lzcnt64(unsigned long long __X)
|
||||
/// An unsigned 64-bit integer whose leading zeros are to be counted.
|
||||
/// \returns An unsigned 64-bit integer containing the number of leading zero
|
||||
/// bits in the operand.
|
||||
/// \see __lzcnt64
|
||||
static __inline__ unsigned long long __DEFAULT_FN_ATTRS
|
||||
_lzcnt_u64(unsigned long long __X)
|
||||
{
|
||||
return __X ? __builtin_clzll(__X) : 64;
|
||||
return __builtin_ia32_lzcnt_u64(__X);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
typedef float __v2sf __attribute__((__vector_size__(8)));
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnow")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnow"), __min_vector_width__(64)))
|
||||
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("3dnow")))
|
||||
_m_femms(void) {
|
||||
__builtin_ia32_femms();
|
||||
}
|
||||
@@ -134,7 +134,7 @@ _m_pmulhrw(__m64 __m1, __m64 __m2) {
|
||||
|
||||
/* Handle the 3dnowa instructions here. */
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnowa")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("3dnowa"), __min_vector_width__(64)))
|
||||
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
_m_pf2iw(__m64 __m) {
|
||||
|
||||
@@ -32,27 +32,27 @@ typedef short __v4hi __attribute__((__vector_size__(8)));
|
||||
typedef char __v8qi __attribute__((__vector_size__(8)));
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("mmx")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("mmx"), __min_vector_width__(64)))
|
||||
|
||||
/// \brief Clears the MMX state by setting the state of the x87 stack registers
|
||||
/// Clears the MMX state by setting the state of the x87 stack registers
|
||||
/// to empty.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> EMMS </c> instruction.
|
||||
///
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("mmx")))
|
||||
_mm_empty(void)
|
||||
{
|
||||
__builtin_ia32_emms();
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector, setting the lower 32 bits to the
|
||||
/// Constructs a 64-bit integer vector, setting the lower 32 bits to the
|
||||
/// value of the 32-bit integer parameter and setting the upper 32 bits to 0.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VMOVD / MOVD </c> instruction.
|
||||
/// This intrinsic corresponds to the <c> MOVD </c> instruction.
|
||||
///
|
||||
/// \param __i
|
||||
/// A 32-bit integer value.
|
||||
@@ -64,12 +64,12 @@ _mm_cvtsi32_si64(int __i)
|
||||
return (__m64)__builtin_ia32_vec_init_v2si(__i, 0);
|
||||
}
|
||||
|
||||
/// \brief Returns the lower 32 bits of a 64-bit integer vector as a 32-bit
|
||||
/// Returns the lower 32 bits of a 64-bit integer vector as a 32-bit
|
||||
/// signed integer.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VMOVD / MOVD </c> instruction.
|
||||
/// This intrinsic corresponds to the <c> MOVD </c> instruction.
|
||||
///
|
||||
/// \param __m
|
||||
/// A 64-bit integer vector.
|
||||
@@ -81,11 +81,11 @@ _mm_cvtsi64_si32(__m64 __m)
|
||||
return __builtin_ia32_vec_ext_v2si((__v2si)__m, 0);
|
||||
}
|
||||
|
||||
/// \brief Casts a 64-bit signed integer value into a 64-bit integer vector.
|
||||
/// Casts a 64-bit signed integer value into a 64-bit integer vector.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VMOVQ / MOVD </c> instruction.
|
||||
/// This intrinsic corresponds to the <c> MOVQ </c> instruction.
|
||||
///
|
||||
/// \param __i
|
||||
/// A 64-bit signed integer.
|
||||
@@ -97,11 +97,11 @@ _mm_cvtsi64_m64(long long __i)
|
||||
return (__m64)__i;
|
||||
}
|
||||
|
||||
/// \brief Casts a 64-bit integer vector into a 64-bit signed integer value.
|
||||
/// Casts a 64-bit integer vector into a 64-bit signed integer value.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VMOVQ / MOVD </c> instruction.
|
||||
/// This intrinsic corresponds to the <c> MOVQ </c> instruction.
|
||||
///
|
||||
/// \param __m
|
||||
/// A 64-bit integer vector.
|
||||
@@ -113,7 +113,7 @@ _mm_cvtm64_si64(__m64 __m)
|
||||
return (long long)__m;
|
||||
}
|
||||
|
||||
/// \brief Converts 16-bit signed integers from both 64-bit integer vector
|
||||
/// Converts 16-bit signed integers from both 64-bit integer vector
|
||||
/// parameters of [4 x i16] into 8-bit signed integer values, and constructs
|
||||
/// a 64-bit integer vector of [8 x i8] as the result. Positive values
|
||||
/// greater than 0x7F are saturated to 0x7F. Negative values less than 0x80
|
||||
@@ -143,7 +143,7 @@ _mm_packs_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_packsswb((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Converts 32-bit signed integers from both 64-bit integer vector
|
||||
/// Converts 32-bit signed integers from both 64-bit integer vector
|
||||
/// parameters of [2 x i32] into 16-bit signed integer values, and constructs
|
||||
/// a 64-bit integer vector of [4 x i16] as the result. Positive values
|
||||
/// greater than 0x7FFF are saturated to 0x7FFF. Negative values less than
|
||||
@@ -173,7 +173,7 @@ _mm_packs_pi32(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_packssdw((__v2si)__m1, (__v2si)__m2);
|
||||
}
|
||||
|
||||
/// \brief Converts 16-bit signed integers from both 64-bit integer vector
|
||||
/// Converts 16-bit signed integers from both 64-bit integer vector
|
||||
/// parameters of [4 x i16] into 8-bit unsigned integer values, and
|
||||
/// constructs a 64-bit integer vector of [8 x i8] as the result. Values
|
||||
/// greater than 0xFF are saturated to 0xFF. Values less than 0 are saturated
|
||||
@@ -203,7 +203,7 @@ _mm_packs_pu16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_packuswb((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Unpacks the upper 32 bits from two 64-bit integer vectors of [8 x i8]
|
||||
/// Unpacks the upper 32 bits from two 64-bit integer vectors of [8 x i8]
|
||||
/// and interleaves them into a 64-bit integer vector of [8 x i8].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -230,7 +230,7 @@ _mm_unpackhi_pi8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_punpckhbw((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Unpacks the upper 32 bits from two 64-bit integer vectors of
|
||||
/// Unpacks the upper 32 bits from two 64-bit integer vectors of
|
||||
/// [4 x i16] and interleaves them into a 64-bit integer vector of [4 x i16].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -253,7 +253,7 @@ _mm_unpackhi_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_punpckhwd((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Unpacks the upper 32 bits from two 64-bit integer vectors of
|
||||
/// Unpacks the upper 32 bits from two 64-bit integer vectors of
|
||||
/// [2 x i32] and interleaves them into a 64-bit integer vector of [2 x i32].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -274,7 +274,7 @@ _mm_unpackhi_pi32(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_punpckhdq((__v2si)__m1, (__v2si)__m2);
|
||||
}
|
||||
|
||||
/// \brief Unpacks the lower 32 bits from two 64-bit integer vectors of [8 x i8]
|
||||
/// Unpacks the lower 32 bits from two 64-bit integer vectors of [8 x i8]
|
||||
/// and interleaves them into a 64-bit integer vector of [8 x i8].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -301,7 +301,7 @@ _mm_unpacklo_pi8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_punpcklbw((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Unpacks the lower 32 bits from two 64-bit integer vectors of
|
||||
/// Unpacks the lower 32 bits from two 64-bit integer vectors of
|
||||
/// [4 x i16] and interleaves them into a 64-bit integer vector of [4 x i16].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -324,7 +324,7 @@ _mm_unpacklo_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_punpcklwd((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Unpacks the lower 32 bits from two 64-bit integer vectors of
|
||||
/// Unpacks the lower 32 bits from two 64-bit integer vectors of
|
||||
/// [2 x i32] and interleaves them into a 64-bit integer vector of [2 x i32].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -345,7 +345,7 @@ _mm_unpacklo_pi32(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_punpckldq((__v2si)__m1, (__v2si)__m2);
|
||||
}
|
||||
|
||||
/// \brief Adds each 8-bit integer element of the first 64-bit integer vector
|
||||
/// Adds each 8-bit integer element of the first 64-bit integer vector
|
||||
/// of [8 x i8] to the corresponding 8-bit integer element of the second
|
||||
/// 64-bit integer vector of [8 x i8]. The lower 8 bits of the results are
|
||||
/// packed into a 64-bit integer vector of [8 x i8].
|
||||
@@ -366,7 +366,7 @@ _mm_add_pi8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Adds each 16-bit integer element of the first 64-bit integer vector
|
||||
/// Adds each 16-bit integer element of the first 64-bit integer vector
|
||||
/// of [4 x i16] to the corresponding 16-bit integer element of the second
|
||||
/// 64-bit integer vector of [4 x i16]. The lower 16 bits of the results are
|
||||
/// packed into a 64-bit integer vector of [4 x i16].
|
||||
@@ -387,7 +387,7 @@ _mm_add_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_paddw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Adds each 32-bit integer element of the first 64-bit integer vector
|
||||
/// Adds each 32-bit integer element of the first 64-bit integer vector
|
||||
/// of [2 x i32] to the corresponding 32-bit integer element of the second
|
||||
/// 64-bit integer vector of [2 x i32]. The lower 32 bits of the results are
|
||||
/// packed into a 64-bit integer vector of [2 x i32].
|
||||
@@ -408,7 +408,7 @@ _mm_add_pi32(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_paddd((__v2si)__m1, (__v2si)__m2);
|
||||
}
|
||||
|
||||
/// \brief Adds each 8-bit signed integer element of the first 64-bit integer
|
||||
/// Adds each 8-bit signed integer element of the first 64-bit integer
|
||||
/// vector of [8 x i8] to the corresponding 8-bit signed integer element of
|
||||
/// the second 64-bit integer vector of [8 x i8]. Positive sums greater than
|
||||
/// 0x7F are saturated to 0x7F. Negative sums less than 0x80 are saturated to
|
||||
@@ -430,7 +430,7 @@ _mm_adds_pi8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_paddsb((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Adds each 16-bit signed integer element of the first 64-bit integer
|
||||
/// Adds each 16-bit signed integer element of the first 64-bit integer
|
||||
/// vector of [4 x i16] to the corresponding 16-bit signed integer element of
|
||||
/// the second 64-bit integer vector of [4 x i16]. Positive sums greater than
|
||||
/// 0x7FFF are saturated to 0x7FFF. Negative sums less than 0x8000 are
|
||||
@@ -453,7 +453,7 @@ _mm_adds_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_paddsw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Adds each 8-bit unsigned integer element of the first 64-bit integer
|
||||
/// Adds each 8-bit unsigned integer element of the first 64-bit integer
|
||||
/// vector of [8 x i8] to the corresponding 8-bit unsigned integer element of
|
||||
/// the second 64-bit integer vector of [8 x i8]. Sums greater than 0xFF are
|
||||
/// saturated to 0xFF. The results are packed into a 64-bit integer vector of
|
||||
@@ -475,7 +475,7 @@ _mm_adds_pu8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_paddusb((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Adds each 16-bit unsigned integer element of the first 64-bit integer
|
||||
/// Adds each 16-bit unsigned integer element of the first 64-bit integer
|
||||
/// vector of [4 x i16] to the corresponding 16-bit unsigned integer element
|
||||
/// of the second 64-bit integer vector of [4 x i16]. Sums greater than
|
||||
/// 0xFFFF are saturated to 0xFFFF. The results are packed into a 64-bit
|
||||
@@ -497,7 +497,7 @@ _mm_adds_pu16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_paddusw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Subtracts each 8-bit integer element of the second 64-bit integer
|
||||
/// Subtracts each 8-bit integer element of the second 64-bit integer
|
||||
/// vector of [8 x i8] from the corresponding 8-bit integer element of the
|
||||
/// first 64-bit integer vector of [8 x i8]. The lower 8 bits of the results
|
||||
/// are packed into a 64-bit integer vector of [8 x i8].
|
||||
@@ -518,7 +518,7 @@ _mm_sub_pi8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_psubb((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Subtracts each 16-bit integer element of the second 64-bit integer
|
||||
/// Subtracts each 16-bit integer element of the second 64-bit integer
|
||||
/// vector of [4 x i16] from the corresponding 16-bit integer element of the
|
||||
/// first 64-bit integer vector of [4 x i16]. The lower 16 bits of the
|
||||
/// results are packed into a 64-bit integer vector of [4 x i16].
|
||||
@@ -539,7 +539,7 @@ _mm_sub_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_psubw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Subtracts each 32-bit integer element of the second 64-bit integer
|
||||
/// Subtracts each 32-bit integer element of the second 64-bit integer
|
||||
/// vector of [2 x i32] from the corresponding 32-bit integer element of the
|
||||
/// first 64-bit integer vector of [2 x i32]. The lower 32 bits of the
|
||||
/// results are packed into a 64-bit integer vector of [2 x i32].
|
||||
@@ -560,7 +560,7 @@ _mm_sub_pi32(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_psubd((__v2si)__m1, (__v2si)__m2);
|
||||
}
|
||||
|
||||
/// \brief Subtracts each 8-bit signed integer element of the second 64-bit
|
||||
/// Subtracts each 8-bit signed integer element of the second 64-bit
|
||||
/// integer vector of [8 x i8] from the corresponding 8-bit signed integer
|
||||
/// element of the first 64-bit integer vector of [8 x i8]. Positive results
|
||||
/// greater than 0x7F are saturated to 0x7F. Negative results less than 0x80
|
||||
@@ -583,7 +583,7 @@ _mm_subs_pi8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_psubsb((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Subtracts each 16-bit signed integer element of the second 64-bit
|
||||
/// Subtracts each 16-bit signed integer element of the second 64-bit
|
||||
/// integer vector of [4 x i16] from the corresponding 16-bit signed integer
|
||||
/// element of the first 64-bit integer vector of [4 x i16]. Positive results
|
||||
/// greater than 0x7FFF are saturated to 0x7FFF. Negative results less than
|
||||
@@ -606,7 +606,7 @@ _mm_subs_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_psubsw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Subtracts each 8-bit unsigned integer element of the second 64-bit
|
||||
/// Subtracts each 8-bit unsigned integer element of the second 64-bit
|
||||
/// integer vector of [8 x i8] from the corresponding 8-bit unsigned integer
|
||||
/// element of the first 64-bit integer vector of [8 x i8].
|
||||
///
|
||||
@@ -630,7 +630,7 @@ _mm_subs_pu8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_psubusb((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Subtracts each 16-bit unsigned integer element of the second 64-bit
|
||||
/// Subtracts each 16-bit unsigned integer element of the second 64-bit
|
||||
/// integer vector of [4 x i16] from the corresponding 16-bit unsigned
|
||||
/// integer element of the first 64-bit integer vector of [4 x i16].
|
||||
///
|
||||
@@ -654,7 +654,7 @@ _mm_subs_pu16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_psubusw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Multiplies each 16-bit signed integer element of the first 64-bit
|
||||
/// Multiplies each 16-bit signed integer element of the first 64-bit
|
||||
/// integer vector of [4 x i16] by the corresponding 16-bit signed integer
|
||||
/// element of the second 64-bit integer vector of [4 x i16] and get four
|
||||
/// 32-bit products. Adds adjacent pairs of products to get two 32-bit sums.
|
||||
@@ -681,7 +681,7 @@ _mm_madd_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_pmaddwd((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Multiplies each 16-bit signed integer element of the first 64-bit
|
||||
/// Multiplies each 16-bit signed integer element of the first 64-bit
|
||||
/// integer vector of [4 x i16] by the corresponding 16-bit signed integer
|
||||
/// element of the second 64-bit integer vector of [4 x i16]. Packs the upper
|
||||
/// 16 bits of the 32-bit products into a 64-bit integer vector of [4 x i16].
|
||||
@@ -702,7 +702,7 @@ _mm_mulhi_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_pmulhw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Multiplies each 16-bit signed integer element of the first 64-bit
|
||||
/// Multiplies each 16-bit signed integer element of the first 64-bit
|
||||
/// integer vector of [4 x i16] by the corresponding 16-bit signed integer
|
||||
/// element of the second 64-bit integer vector of [4 x i16]. Packs the lower
|
||||
/// 16 bits of the 32-bit products into a 64-bit integer vector of [4 x i16].
|
||||
@@ -723,7 +723,7 @@ _mm_mullo_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_pmullw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Left-shifts each 16-bit signed integer element of the first
|
||||
/// Left-shifts each 16-bit signed integer element of the first
|
||||
/// parameter, which is a 64-bit integer vector of [4 x i16], by the number
|
||||
/// of bits specified by the second parameter, which is a 64-bit integer. The
|
||||
/// lower 16 bits of the results are packed into a 64-bit integer vector of
|
||||
@@ -746,7 +746,7 @@ _mm_sll_pi16(__m64 __m, __m64 __count)
|
||||
return (__m64)__builtin_ia32_psllw((__v4hi)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Left-shifts each 16-bit signed integer element of a 64-bit integer
|
||||
/// Left-shifts each 16-bit signed integer element of a 64-bit integer
|
||||
/// vector of [4 x i16] by the number of bits specified by a 32-bit integer.
|
||||
/// The lower 16 bits of the results are packed into a 64-bit integer vector
|
||||
/// of [4 x i16].
|
||||
@@ -768,7 +768,7 @@ _mm_slli_pi16(__m64 __m, int __count)
|
||||
return (__m64)__builtin_ia32_psllwi((__v4hi)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Left-shifts each 32-bit signed integer element of the first
|
||||
/// Left-shifts each 32-bit signed integer element of the first
|
||||
/// parameter, which is a 64-bit integer vector of [2 x i32], by the number
|
||||
/// of bits specified by the second parameter, which is a 64-bit integer. The
|
||||
/// lower 32 bits of the results are packed into a 64-bit integer vector of
|
||||
@@ -791,7 +791,7 @@ _mm_sll_pi32(__m64 __m, __m64 __count)
|
||||
return (__m64)__builtin_ia32_pslld((__v2si)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Left-shifts each 32-bit signed integer element of a 64-bit integer
|
||||
/// Left-shifts each 32-bit signed integer element of a 64-bit integer
|
||||
/// vector of [2 x i32] by the number of bits specified by a 32-bit integer.
|
||||
/// The lower 32 bits of the results are packed into a 64-bit integer vector
|
||||
/// of [2 x i32].
|
||||
@@ -813,7 +813,7 @@ _mm_slli_pi32(__m64 __m, int __count)
|
||||
return (__m64)__builtin_ia32_pslldi((__v2si)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Left-shifts the first 64-bit integer parameter by the number of bits
|
||||
/// Left-shifts the first 64-bit integer parameter by the number of bits
|
||||
/// specified by the second 64-bit integer parameter. The lower 64 bits of
|
||||
/// result are returned.
|
||||
///
|
||||
@@ -833,7 +833,7 @@ _mm_sll_si64(__m64 __m, __m64 __count)
|
||||
return (__m64)__builtin_ia32_psllq((__v1di)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Left-shifts the first parameter, which is a 64-bit integer, by the
|
||||
/// Left-shifts the first parameter, which is a 64-bit integer, by the
|
||||
/// number of bits specified by the second parameter, which is a 32-bit
|
||||
/// integer. The lower 64 bits of result are returned.
|
||||
///
|
||||
@@ -853,7 +853,7 @@ _mm_slli_si64(__m64 __m, int __count)
|
||||
return (__m64)__builtin_ia32_psllqi((__v1di)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts each 16-bit integer element of the first parameter,
|
||||
/// Right-shifts each 16-bit integer element of the first parameter,
|
||||
/// which is a 64-bit integer vector of [4 x i16], by the number of bits
|
||||
/// specified by the second parameter, which is a 64-bit integer.
|
||||
///
|
||||
@@ -877,7 +877,7 @@ _mm_sra_pi16(__m64 __m, __m64 __count)
|
||||
return (__m64)__builtin_ia32_psraw((__v4hi)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts each 16-bit integer element of a 64-bit integer vector
|
||||
/// Right-shifts each 16-bit integer element of a 64-bit integer vector
|
||||
/// of [4 x i16] by the number of bits specified by a 32-bit integer.
|
||||
///
|
||||
/// High-order bits are filled with the sign bit of the initial value of each
|
||||
@@ -900,7 +900,7 @@ _mm_srai_pi16(__m64 __m, int __count)
|
||||
return (__m64)__builtin_ia32_psrawi((__v4hi)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts each 32-bit integer element of the first parameter,
|
||||
/// Right-shifts each 32-bit integer element of the first parameter,
|
||||
/// which is a 64-bit integer vector of [2 x i32], by the number of bits
|
||||
/// specified by the second parameter, which is a 64-bit integer.
|
||||
///
|
||||
@@ -924,7 +924,7 @@ _mm_sra_pi32(__m64 __m, __m64 __count)
|
||||
return (__m64)__builtin_ia32_psrad((__v2si)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts each 32-bit integer element of a 64-bit integer vector
|
||||
/// Right-shifts each 32-bit integer element of a 64-bit integer vector
|
||||
/// of [2 x i32] by the number of bits specified by a 32-bit integer.
|
||||
///
|
||||
/// High-order bits are filled with the sign bit of the initial value of each
|
||||
@@ -947,7 +947,7 @@ _mm_srai_pi32(__m64 __m, int __count)
|
||||
return (__m64)__builtin_ia32_psradi((__v2si)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts each 16-bit integer element of the first parameter,
|
||||
/// Right-shifts each 16-bit integer element of the first parameter,
|
||||
/// which is a 64-bit integer vector of [4 x i16], by the number of bits
|
||||
/// specified by the second parameter, which is a 64-bit integer.
|
||||
///
|
||||
@@ -970,7 +970,7 @@ _mm_srl_pi16(__m64 __m, __m64 __count)
|
||||
return (__m64)__builtin_ia32_psrlw((__v4hi)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts each 16-bit integer element of a 64-bit integer vector
|
||||
/// Right-shifts each 16-bit integer element of a 64-bit integer vector
|
||||
/// of [4 x i16] by the number of bits specified by a 32-bit integer.
|
||||
///
|
||||
/// High-order bits are cleared. The 16-bit results are packed into a 64-bit
|
||||
@@ -992,7 +992,7 @@ _mm_srli_pi16(__m64 __m, int __count)
|
||||
return (__m64)__builtin_ia32_psrlwi((__v4hi)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts each 32-bit integer element of the first parameter,
|
||||
/// Right-shifts each 32-bit integer element of the first parameter,
|
||||
/// which is a 64-bit integer vector of [2 x i32], by the number of bits
|
||||
/// specified by the second parameter, which is a 64-bit integer.
|
||||
///
|
||||
@@ -1015,7 +1015,7 @@ _mm_srl_pi32(__m64 __m, __m64 __count)
|
||||
return (__m64)__builtin_ia32_psrld((__v2si)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts each 32-bit integer element of a 64-bit integer vector
|
||||
/// Right-shifts each 32-bit integer element of a 64-bit integer vector
|
||||
/// of [2 x i32] by the number of bits specified by a 32-bit integer.
|
||||
///
|
||||
/// High-order bits are cleared. The 32-bit results are packed into a 64-bit
|
||||
@@ -1037,7 +1037,7 @@ _mm_srli_pi32(__m64 __m, int __count)
|
||||
return (__m64)__builtin_ia32_psrldi((__v2si)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts the first 64-bit integer parameter by the number of bits
|
||||
/// Right-shifts the first 64-bit integer parameter by the number of bits
|
||||
/// specified by the second 64-bit integer parameter.
|
||||
///
|
||||
/// High-order bits are cleared.
|
||||
@@ -1057,7 +1057,7 @@ _mm_srl_si64(__m64 __m, __m64 __count)
|
||||
return (__m64)__builtin_ia32_psrlq((__v1di)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Right-shifts the first parameter, which is a 64-bit integer, by the
|
||||
/// Right-shifts the first parameter, which is a 64-bit integer, by the
|
||||
/// number of bits specified by the second parameter, which is a 32-bit
|
||||
/// integer.
|
||||
///
|
||||
@@ -1078,7 +1078,7 @@ _mm_srli_si64(__m64 __m, int __count)
|
||||
return (__m64)__builtin_ia32_psrlqi((__v1di)__m, __count);
|
||||
}
|
||||
|
||||
/// \brief Performs a bitwise AND of two 64-bit integer vectors.
|
||||
/// Performs a bitwise AND of two 64-bit integer vectors.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -1096,7 +1096,7 @@ _mm_and_si64(__m64 __m1, __m64 __m2)
|
||||
return __builtin_ia32_pand((__v1di)__m1, (__v1di)__m2);
|
||||
}
|
||||
|
||||
/// \brief Performs a bitwise NOT of the first 64-bit integer vector, and then
|
||||
/// Performs a bitwise NOT of the first 64-bit integer vector, and then
|
||||
/// performs a bitwise AND of the intermediate result and the second 64-bit
|
||||
/// integer vector.
|
||||
///
|
||||
@@ -1117,7 +1117,7 @@ _mm_andnot_si64(__m64 __m1, __m64 __m2)
|
||||
return __builtin_ia32_pandn((__v1di)__m1, (__v1di)__m2);
|
||||
}
|
||||
|
||||
/// \brief Performs a bitwise OR of two 64-bit integer vectors.
|
||||
/// Performs a bitwise OR of two 64-bit integer vectors.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -1135,7 +1135,7 @@ _mm_or_si64(__m64 __m1, __m64 __m2)
|
||||
return __builtin_ia32_por((__v1di)__m1, (__v1di)__m2);
|
||||
}
|
||||
|
||||
/// \brief Performs a bitwise exclusive OR of two 64-bit integer vectors.
|
||||
/// Performs a bitwise exclusive OR of two 64-bit integer vectors.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -1153,7 +1153,7 @@ _mm_xor_si64(__m64 __m1, __m64 __m2)
|
||||
return __builtin_ia32_pxor((__v1di)__m1, (__v1di)__m2);
|
||||
}
|
||||
|
||||
/// \brief Compares the 8-bit integer elements of two 64-bit integer vectors of
|
||||
/// Compares the 8-bit integer elements of two 64-bit integer vectors of
|
||||
/// [8 x i8] to determine if the element of the first vector is equal to the
|
||||
/// corresponding element of the second vector.
|
||||
///
|
||||
@@ -1175,7 +1175,7 @@ _mm_cmpeq_pi8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_pcmpeqb((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Compares the 16-bit integer elements of two 64-bit integer vectors of
|
||||
/// Compares the 16-bit integer elements of two 64-bit integer vectors of
|
||||
/// [4 x i16] to determine if the element of the first vector is equal to the
|
||||
/// corresponding element of the second vector.
|
||||
///
|
||||
@@ -1197,7 +1197,7 @@ _mm_cmpeq_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_pcmpeqw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Compares the 32-bit integer elements of two 64-bit integer vectors of
|
||||
/// Compares the 32-bit integer elements of two 64-bit integer vectors of
|
||||
/// [2 x i32] to determine if the element of the first vector is equal to the
|
||||
/// corresponding element of the second vector.
|
||||
///
|
||||
@@ -1219,7 +1219,7 @@ _mm_cmpeq_pi32(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_pcmpeqd((__v2si)__m1, (__v2si)__m2);
|
||||
}
|
||||
|
||||
/// \brief Compares the 8-bit integer elements of two 64-bit integer vectors of
|
||||
/// Compares the 8-bit integer elements of two 64-bit integer vectors of
|
||||
/// [8 x i8] to determine if the element of the first vector is greater than
|
||||
/// the corresponding element of the second vector.
|
||||
///
|
||||
@@ -1241,7 +1241,7 @@ _mm_cmpgt_pi8(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_pcmpgtb((__v8qi)__m1, (__v8qi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Compares the 16-bit integer elements of two 64-bit integer vectors of
|
||||
/// Compares the 16-bit integer elements of two 64-bit integer vectors of
|
||||
/// [4 x i16] to determine if the element of the first vector is greater than
|
||||
/// the corresponding element of the second vector.
|
||||
///
|
||||
@@ -1263,7 +1263,7 @@ _mm_cmpgt_pi16(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_pcmpgtw((__v4hi)__m1, (__v4hi)__m2);
|
||||
}
|
||||
|
||||
/// \brief Compares the 32-bit integer elements of two 64-bit integer vectors of
|
||||
/// Compares the 32-bit integer elements of two 64-bit integer vectors of
|
||||
/// [2 x i32] to determine if the element of the first vector is greater than
|
||||
/// the corresponding element of the second vector.
|
||||
///
|
||||
@@ -1285,20 +1285,20 @@ _mm_cmpgt_pi32(__m64 __m1, __m64 __m2)
|
||||
return (__m64)__builtin_ia32_pcmpgtd((__v2si)__m1, (__v2si)__m2);
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector initialized to zero.
|
||||
/// Constructs a 64-bit integer vector initialized to zero.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VXORPS / XORPS </c> instruction.
|
||||
/// This intrinsic corresponds to the <c> PXOR </c> instruction.
|
||||
///
|
||||
/// \returns An initialized 64-bit integer vector with all elements set to zero.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
_mm_setzero_si64(void)
|
||||
{
|
||||
return (__m64){ 0LL };
|
||||
return __extension__ (__m64){ 0LL };
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector initialized with the specified
|
||||
/// Constructs a 64-bit integer vector initialized with the specified
|
||||
/// 32-bit integer values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1319,7 +1319,7 @@ _mm_set_pi32(int __i1, int __i0)
|
||||
return (__m64)__builtin_ia32_vec_init_v2si(__i0, __i1);
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector initialized with the specified
|
||||
/// Constructs a 64-bit integer vector initialized with the specified
|
||||
/// 16-bit integer values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1342,7 +1342,7 @@ _mm_set_pi16(short __s3, short __s2, short __s1, short __s0)
|
||||
return (__m64)__builtin_ia32_vec_init_v4hi(__s0, __s1, __s2, __s3);
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector initialized with the specified
|
||||
/// Constructs a 64-bit integer vector initialized with the specified
|
||||
/// 8-bit integer values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1375,13 +1375,14 @@ _mm_set_pi8(char __b7, char __b6, char __b5, char __b4, char __b3, char __b2,
|
||||
__b4, __b5, __b6, __b7);
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector of [2 x i32], with each of the
|
||||
/// Constructs a 64-bit integer vector of [2 x i32], with each of the
|
||||
/// 32-bit integer vector elements set to the specified 32-bit integer
|
||||
/// value.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VPSHUFD / PSHUFD </c> instruction.
|
||||
/// This intrinsic is a utility function and does not correspond to a specific
|
||||
/// instruction.
|
||||
///
|
||||
/// \param __i
|
||||
/// A 32-bit integer value used to initialize each vector element of the
|
||||
@@ -1393,13 +1394,14 @@ _mm_set1_pi32(int __i)
|
||||
return _mm_set_pi32(__i, __i);
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector of [4 x i16], with each of the
|
||||
/// Constructs a 64-bit integer vector of [4 x i16], with each of the
|
||||
/// 16-bit integer vector elements set to the specified 16-bit integer
|
||||
/// value.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VPSHUFLW / PSHUFLW </c> instruction.
|
||||
/// This intrinsic is a utility function and does not correspond to a specific
|
||||
/// instruction.
|
||||
///
|
||||
/// \param __w
|
||||
/// A 16-bit integer value used to initialize each vector element of the
|
||||
@@ -1411,13 +1413,13 @@ _mm_set1_pi16(short __w)
|
||||
return _mm_set_pi16(__w, __w, __w, __w);
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector of [8 x i8], with each of the
|
||||
/// Constructs a 64-bit integer vector of [8 x i8], with each of the
|
||||
/// 8-bit integer vector elements set to the specified 8-bit integer value.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VPUNPCKLBW + VPSHUFLW / PUNPCKLBW +
|
||||
/// PSHUFLW </c> instruction.
|
||||
/// This intrinsic is a utility function and does not correspond to a specific
|
||||
/// instruction.
|
||||
///
|
||||
/// \param __b
|
||||
/// An 8-bit integer value used to initialize each vector element of the
|
||||
@@ -1429,7 +1431,7 @@ _mm_set1_pi8(char __b)
|
||||
return _mm_set_pi8(__b, __b, __b, __b, __b, __b, __b, __b);
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector, initialized in reverse order with
|
||||
/// Constructs a 64-bit integer vector, initialized in reverse order with
|
||||
/// the specified 32-bit integer values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1450,7 +1452,7 @@ _mm_setr_pi32(int __i0, int __i1)
|
||||
return _mm_set_pi32(__i1, __i0);
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector, initialized in reverse order with
|
||||
/// Constructs a 64-bit integer vector, initialized in reverse order with
|
||||
/// the specified 16-bit integer values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1473,7 +1475,7 @@ _mm_setr_pi16(short __w0, short __w1, short __w2, short __w3)
|
||||
return _mm_set_pi16(__w3, __w2, __w1, __w0);
|
||||
}
|
||||
|
||||
/// \brief Constructs a 64-bit integer vector, initialized in reverse order with
|
||||
/// Constructs a 64-bit integer vector, initialized in reverse order with
|
||||
/// the specified 8-bit integer values.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
|
||||
@@ -38,6 +38,7 @@ module _Builtin_intrinsics [system] [extern_c] {
|
||||
explicit module neon {
|
||||
requires neon
|
||||
header "arm_neon.h"
|
||||
header "arm_fp16.h"
|
||||
export *
|
||||
}
|
||||
}
|
||||
@@ -62,6 +63,17 @@ module _Builtin_intrinsics [system] [extern_c] {
|
||||
textual header "fma4intrin.h"
|
||||
textual header "mwaitxintrin.h"
|
||||
textual header "clzerointrin.h"
|
||||
textual header "wbnoinvdintrin.h"
|
||||
textual header "cldemoteintrin.h"
|
||||
textual header "waitpkgintrin.h"
|
||||
textual header "movdirintrin.h"
|
||||
textual header "pconfigintrin.h"
|
||||
textual header "sgxintrin.h"
|
||||
textual header "ptwriteintrin.h"
|
||||
textual header "invpcidintrin.h"
|
||||
|
||||
textual header "__wmmintrin_aes.h"
|
||||
textual header "__wmmintrin_pclmul.h"
|
||||
|
||||
explicit module mm_malloc {
|
||||
requires !freestanding
|
||||
@@ -128,14 +140,6 @@ module _Builtin_intrinsics [system] [extern_c] {
|
||||
export aes
|
||||
export pclmul
|
||||
}
|
||||
|
||||
explicit module aes {
|
||||
header "__wmmintrin_aes.h"
|
||||
}
|
||||
|
||||
explicit module pclmul {
|
||||
header "__wmmintrin_pclmul.h"
|
||||
}
|
||||
}
|
||||
|
||||
explicit module systemz {
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
/*===------------------------- movdirintrin.h ------------------------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
|
||||
#error "Never use <movdirintrin.h> directly; include <x86intrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef _MOVDIRINTRIN_H
|
||||
#define _MOVDIRINTRIN_H
|
||||
|
||||
/* Move doubleword as direct store */
|
||||
static __inline__ void
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("movdiri")))
|
||||
_directstoreu_u32 (void *__dst, unsigned int __value)
|
||||
{
|
||||
__builtin_ia32_directstore_u32((unsigned int *)__dst, (unsigned int)__value);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
|
||||
/* Move quadword as direct store */
|
||||
static __inline__ void
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("movdiri")))
|
||||
_directstoreu_u64 (void *__dst, unsigned long __value)
|
||||
{
|
||||
__builtin_ia32_directstore_u64((unsigned long *)__dst, __value);
|
||||
}
|
||||
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
/*
|
||||
* movdir64b - Move 64 bytes as direct store.
|
||||
* The destination must be 64 byte aligned, and the store is atomic.
|
||||
* The source address has no alignment requirement, and the load from
|
||||
* the source address is not atomic.
|
||||
*/
|
||||
static __inline__ void
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("movdir64b")))
|
||||
_movdir64b (void *__dst __attribute__((align_value(64))), const void *__src)
|
||||
{
|
||||
__builtin_ia32_movdir64b(__dst, __src);
|
||||
}
|
||||
|
||||
#endif /* _MOVDIRINTRIN_H */
|
||||
@@ -25,8 +25,8 @@
|
||||
#error "Never use <mwaitxintrin.h> directly; include <x86intrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef _MWAITXINTRIN_H
|
||||
#define _MWAITXINTRIN_H
|
||||
#ifndef __MWAITXINTRIN_H
|
||||
#define __MWAITXINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("mwaitx")))
|
||||
@@ -44,4 +44,4 @@ _mm_mwaitx(unsigned __extensions, unsigned __hints, unsigned __clock)
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif /* _MWAITXINTRIN_H */
|
||||
#endif /* __MWAITXINTRIN_H */
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef _NMMINTRIN_H
|
||||
#define _NMMINTRIN_H
|
||||
#ifndef __NMMINTRIN_H
|
||||
#define __NMMINTRIN_H
|
||||
|
||||
/* To match expectations of gcc we put the sse4.2 definitions into smmintrin.h,
|
||||
just include it now then. */
|
||||
#include <smmintrin.h>
|
||||
#endif /* _NMMINTRIN_H */
|
||||
#endif /* __NMMINTRIN_H */
|
||||
|
||||
@@ -22,6 +22,14 @@
|
||||
#endif //cl_khr_3d_image_writes
|
||||
#endif //__OPENCL_C_VERSION__ < CL_VERSION_2_0
|
||||
|
||||
#if __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
#ifndef cl_intel_planar_yuv
|
||||
#define cl_intel_planar_yuv
|
||||
#endif // cl_intel_planar_yuv
|
||||
#pragma OPENCL EXTENSION cl_intel_planar_yuv : begin
|
||||
#pragma OPENCL EXTENSION cl_intel_planar_yuv : end
|
||||
#endif // __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
|
||||
#define __ovld __attribute__((overloadable))
|
||||
#define __conv __attribute__((convergent))
|
||||
|
||||
@@ -11540,7 +11548,7 @@ half16 __ovld __cnfn select(half16 a, half16 b, ushort16 c);
|
||||
*
|
||||
* vstoren write sizeof (gentypen) bytes given by data to address (p + (offset * n)).
|
||||
*
|
||||
* The address computed as (p + (offset * n)) must be
|
||||
* The address computed as (p + (offset * n)) must be
|
||||
* 8-bit aligned if gentype is char, uchar;
|
||||
* 16-bit aligned if gentype is short, ushort, half;
|
||||
* 32-bit aligned if gentype is int, uint, float;
|
||||
@@ -12862,7 +12870,7 @@ void __ovld mem_fence(cl_mem_fence_flags flags);
|
||||
* Read memory barrier that orders only
|
||||
* loads.
|
||||
* The flags argument specifies the memory
|
||||
* address space and can be set to to a
|
||||
* address space and can be set to a
|
||||
* combination of the following literal
|
||||
* values:
|
||||
* CLK_LOCAL_MEM_FENCE
|
||||
@@ -12874,7 +12882,7 @@ void __ovld read_mem_fence(cl_mem_fence_flags flags);
|
||||
* Write memory barrier that orders only
|
||||
* stores.
|
||||
* The flags argument specifies the memory
|
||||
* address space and can be set to to a
|
||||
* address space and can be set to a
|
||||
* combination of the following literal
|
||||
* values:
|
||||
* CLK_LOCAL_MEM_FENCE
|
||||
@@ -12888,7 +12896,7 @@ void __ovld write_mem_fence(cl_mem_fence_flags flags);
|
||||
cl_mem_fence_flags __ovld get_fence(const void *ptr);
|
||||
cl_mem_fence_flags __ovld get_fence(void *ptr);
|
||||
|
||||
/**
|
||||
/**
|
||||
* Builtin functions to_global, to_local, and to_private need to be declared as Clang builtin functions
|
||||
* and checked in Sema since they should be declared as
|
||||
* addr gentype* to_addr (gentype*);
|
||||
@@ -13773,7 +13781,7 @@ ulong __ovld atomic_fetch_max_explicit(volatile atomic_ulong *object, long opera
|
||||
// add/sub: atomic type argument can be uintptr_t/intptr_t, value type argument can be ptrdiff_t.
|
||||
// or/xor/and/min/max: atomic type argument can be intptr_t/uintptr_t, value type argument can be intptr_t/uintptr_t.
|
||||
|
||||
#if defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics)
|
||||
#if defined(cl_khr_int64_base_atomics) && defined(cl_khr_int64_extended_atomics)
|
||||
uintptr_t __ovld atomic_fetch_add(volatile atomic_uintptr_t *object, ptrdiff_t operand);
|
||||
uintptr_t __ovld atomic_fetch_add_explicit(volatile atomic_uintptr_t *object, ptrdiff_t operand, memory_order order);
|
||||
uintptr_t __ovld atomic_fetch_add_explicit(volatile atomic_uintptr_t *object, ptrdiff_t operand, memory_order order, memory_scope scope);
|
||||
@@ -14571,7 +14579,7 @@ int printf(__constant const char* st, ...);
|
||||
* only. The filter_mode specified in sampler
|
||||
* must be set to CLK_FILTER_NEAREST; otherwise
|
||||
* the values returned are undefined.
|
||||
|
||||
|
||||
* The read_image{f|i|ui} calls that take
|
||||
* integer coordinates must use a sampler with
|
||||
* normalized coordinates set to
|
||||
@@ -14602,6 +14610,7 @@ int4 __purefn __ovld read_imagei(read_only image3d_t image, sampler_t sampler, f
|
||||
uint4 __purefn __ovld read_imageui(read_only image3d_t image, sampler_t sampler, int4 coord);
|
||||
uint4 __purefn __ovld read_imageui(read_only image3d_t image, sampler_t sampler, float4 coord);
|
||||
|
||||
#if __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
float4 __purefn __ovld read_imagef(read_only image2d_array_t image_array, sampler_t sampler, int4 coord);
|
||||
float4 __purefn __ovld read_imagef(read_only image2d_array_t image_array, sampler_t sampler, float4 coord);
|
||||
|
||||
@@ -14609,6 +14618,7 @@ int4 __purefn __ovld read_imagei(read_only image2d_array_t image_array, sampler_
|
||||
int4 __purefn __ovld read_imagei(read_only image2d_array_t image_array, sampler_t sampler, float4 coord);
|
||||
uint4 __purefn __ovld read_imageui(read_only image2d_array_t image_array, sampler_t sampler, int4 coord);
|
||||
uint4 __purefn __ovld read_imageui(read_only image2d_array_t image_array, sampler_t sampler, float4 coord);
|
||||
#endif // __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
|
||||
float4 __purefn __ovld read_imagef(read_only image1d_t image, sampler_t sampler, int coord);
|
||||
float4 __purefn __ovld read_imagef(read_only image1d_t image, sampler_t sampler, float coord);
|
||||
@@ -14618,6 +14628,7 @@ int4 __purefn __ovld read_imagei(read_only image1d_t image, sampler_t sampler, f
|
||||
uint4 __purefn __ovld read_imageui(read_only image1d_t image, sampler_t sampler, int coord);
|
||||
uint4 __purefn __ovld read_imageui(read_only image1d_t image, sampler_t sampler, float coord);
|
||||
|
||||
#if __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
float4 __purefn __ovld read_imagef(read_only image1d_array_t image_array, sampler_t sampler, int2 coord);
|
||||
float4 __purefn __ovld read_imagef(read_only image1d_array_t image_array, sampler_t sampler, float2 coord);
|
||||
|
||||
@@ -14625,6 +14636,7 @@ int4 __purefn __ovld read_imagei(read_only image1d_array_t image_array, sampler_
|
||||
int4 __purefn __ovld read_imagei(read_only image1d_array_t image_array, sampler_t sampler, float2 coord);
|
||||
uint4 __purefn __ovld read_imageui(read_only image1d_array_t image_array, sampler_t sampler, int2 coord);
|
||||
uint4 __purefn __ovld read_imageui(read_only image1d_array_t image_array, sampler_t sampler, float2 coord);
|
||||
#endif // __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
|
||||
#ifdef cl_khr_depth_images
|
||||
float __purefn __ovld read_imagef(read_only image2d_depth_t image, sampler_t sampler, float2 coord);
|
||||
@@ -14727,6 +14739,8 @@ uint4 __purefn __ovld read_imageui(read_only image3d_t image, sampler_t sampler,
|
||||
#endif //cl_khr_mipmap_image
|
||||
#endif //__OPENCL_C_VERSION__ >= CL_VERSION_2_0
|
||||
|
||||
#if __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
|
||||
/**
|
||||
* Sampler-less Image Access
|
||||
*/
|
||||
@@ -14760,24 +14774,31 @@ float4 __purefn __ovld read_imagef(read_only image3d_t image, int4 coord);
|
||||
int4 __purefn __ovld read_imagei(read_only image3d_t image, int4 coord);
|
||||
uint4 __purefn __ovld read_imageui(read_only image3d_t image, int4 coord);
|
||||
|
||||
#endif // __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
|
||||
// Image read functions returning half4 type
|
||||
#ifdef cl_khr_fp16
|
||||
half4 __purefn __ovld read_imageh(read_only image1d_t image, sampler_t sampler, int coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image1d_t image, sampler_t sampler, float coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image1d_array_t image, sampler_t sampler, int2 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image1d_array_t image, sampler_t sampler, float2 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image2d_t image, sampler_t sampler, int2 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image2d_t image, sampler_t sampler, float2 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image3d_t image, sampler_t sampler, int4 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image3d_t image, sampler_t sampler, float4 coord);
|
||||
#if __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
half4 __purefn __ovld read_imageh(read_only image1d_array_t image, sampler_t sampler, int2 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image1d_array_t image, sampler_t sampler, float2 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image2d_array_t image, sampler_t sampler, int4 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image2d_array_t image, sampler_t sampler, float4 coord);
|
||||
/**
|
||||
* Sampler-less Image Access
|
||||
*/
|
||||
half4 __purefn __ovld read_imageh(read_only image1d_t image, int coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image2d_t image, int2 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image3d_t image, int4 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image1d_array_t image, int2 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image2d_array_t image, int4 coord);
|
||||
half4 __purefn __ovld read_imageh(read_only image1d_buffer_t image, int coord);
|
||||
#endif // __OPENCL_C_VERSION__ >= CL_VERSION_1_2
|
||||
#endif //cl_khr_fp16
|
||||
|
||||
// Image read functions for read_write images
|
||||
@@ -15421,8 +15442,8 @@ int __ovld __cnfn get_image_channel_data_type(read_write image2d_array_msaa_dept
|
||||
#define CLK_DEPTH_STENCIL 0x10BE
|
||||
#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0
|
||||
#define CLK_sRGB 0x10BF
|
||||
#define CLK_sRGBA 0x10C1
|
||||
#define CLK_sRGBx 0x10C0
|
||||
#define CLK_sRGBA 0x10C1
|
||||
#define CLK_sBGRA 0x10C2
|
||||
#define CLK_ABGR 0x10C3
|
||||
#endif //__OPENCL_C_VERSION__ >= CL_VERSION_2_0
|
||||
@@ -15707,7 +15728,6 @@ double __ovld __conv work_group_scan_inclusive_max(double x);
|
||||
|
||||
// OpenCL v2.0 s6.13.16 - Pipe Functions
|
||||
#if __OPENCL_C_VERSION__ >= CL_VERSION_2_0
|
||||
#define PIPE_RESERVE_ID_VALID_BIT (1U << 30)
|
||||
#define CLK_NULL_RESERVE_ID (__builtin_astype(((void*)(__SIZE_MAX__)), reserve_id_t))
|
||||
bool __ovld is_valid_reserve_id(reserve_id_t reserve_id);
|
||||
#endif //__OPENCL_C_VERSION__ >= CL_VERSION_2_0
|
||||
@@ -16193,6 +16213,637 @@ void __ovld __conv intel_sub_group_block_write_us4( __global ushort* p, u
|
||||
void __ovld __conv intel_sub_group_block_write_us8( __global ushort* p, ushort8 data );
|
||||
#endif // cl_intel_subgroups_short
|
||||
|
||||
#ifdef cl_intel_device_side_avc_motion_estimation
|
||||
#pragma OPENCL EXTENSION cl_intel_device_side_avc_motion_estimation : begin
|
||||
|
||||
#define CLK_AVC_ME_MAJOR_16x16_INTEL 0x0
|
||||
#define CLK_AVC_ME_MAJOR_16x8_INTEL 0x1
|
||||
#define CLK_AVC_ME_MAJOR_8x16_INTEL 0x2
|
||||
#define CLK_AVC_ME_MAJOR_8x8_INTEL 0x3
|
||||
|
||||
#define CLK_AVC_ME_MINOR_8x8_INTEL 0x0
|
||||
#define CLK_AVC_ME_MINOR_8x4_INTEL 0x1
|
||||
#define CLK_AVC_ME_MINOR_4x8_INTEL 0x2
|
||||
#define CLK_AVC_ME_MINOR_4x4_INTEL 0x3
|
||||
|
||||
#define CLK_AVC_ME_MAJOR_FORWARD_INTEL 0x0
|
||||
#define CLK_AVC_ME_MAJOR_BACKWARD_INTEL 0x1
|
||||
#define CLK_AVC_ME_MAJOR_BIDIRECTIONAL_INTEL 0x2
|
||||
|
||||
#define CLK_AVC_ME_PARTITION_MASK_ALL_INTEL 0x0
|
||||
#define CLK_AVC_ME_PARTITION_MASK_16x16_INTEL 0x7E
|
||||
#define CLK_AVC_ME_PARTITION_MASK_16x8_INTEL 0x7D
|
||||
#define CLK_AVC_ME_PARTITION_MASK_8x16_INTEL 0x7B
|
||||
#define CLK_AVC_ME_PARTITION_MASK_8x8_INTEL 0x77
|
||||
#define CLK_AVC_ME_PARTITION_MASK_8x4_INTEL 0x6F
|
||||
#define CLK_AVC_ME_PARTITION_MASK_4x8_INTEL 0x5F
|
||||
#define CLK_AVC_ME_PARTITION_MASK_4x4_INTEL 0x3F
|
||||
|
||||
#define CLK_AVC_ME_SLICE_TYPE_PRED_INTEL 0x0
|
||||
#define CLK_AVC_ME_SLICE_TYPE_BPRED_INTEL 0x1
|
||||
#define CLK_AVC_ME_SLICE_TYPE_INTRA_INTEL 0x2
|
||||
|
||||
#define CLK_AVC_ME_SEARCH_WINDOW_EXHAUSTIVE_INTEL 0x0
|
||||
#define CLK_AVC_ME_SEARCH_WINDOW_SMALL_INTEL 0x1
|
||||
#define CLK_AVC_ME_SEARCH_WINDOW_TINY_INTEL 0x2
|
||||
#define CLK_AVC_ME_SEARCH_WINDOW_EXTRA_TINY_INTEL 0x3
|
||||
#define CLK_AVC_ME_SEARCH_WINDOW_DIAMOND_INTEL 0x4
|
||||
#define CLK_AVC_ME_SEARCH_WINDOW_LARGE_DIAMOND_INTEL 0x5
|
||||
#define CLK_AVC_ME_SEARCH_WINDOW_RESERVED0_INTEL 0x6
|
||||
#define CLK_AVC_ME_SEARCH_WINDOW_RESERVED1_INTEL 0x7
|
||||
#define CLK_AVC_ME_SEARCH_WINDOW_CUSTOM_INTEL 0x8
|
||||
|
||||
#define CLK_AVC_ME_SAD_ADJUST_MODE_NONE_INTEL 0x0
|
||||
#define CLK_AVC_ME_SAD_ADJUST_MODE_HAAR_INTEL 0x2
|
||||
|
||||
#define CLK_AVC_ME_SUBPIXEL_MODE_INTEGER_INTEL 0x0
|
||||
#define CLK_AVC_ME_SUBPIXEL_MODE_HPEL_INTEL 0x1
|
||||
#define CLK_AVC_ME_SUBPIXEL_MODE_QPEL_INTEL 0x3
|
||||
|
||||
#define CLK_AVC_ME_COST_PRECISION_QPEL_INTEL 0x0
|
||||
#define CLK_AVC_ME_COST_PRECISION_HPEL_INTEL 0x1
|
||||
#define CLK_AVC_ME_COST_PRECISION_PEL_INTEL 0x2
|
||||
#define CLK_AVC_ME_COST_PRECISION_DPEL_INTEL 0x3
|
||||
|
||||
#define CLK_AVC_ME_BIDIR_WEIGHT_QUARTER_INTEL 0x10
|
||||
#define CLK_AVC_ME_BIDIR_WEIGHT_THIRD_INTEL 0x15
|
||||
#define CLK_AVC_ME_BIDIR_WEIGHT_HALF_INTEL 0x20
|
||||
#define CLK_AVC_ME_BIDIR_WEIGHT_TWO_THIRD_INTEL 0x2B
|
||||
#define CLK_AVC_ME_BIDIR_WEIGHT_THREE_QUARTER_INTEL 0x30
|
||||
|
||||
#define CLK_AVC_ME_BORDER_REACHED_LEFT_INTEL 0x0
|
||||
#define CLK_AVC_ME_BORDER_REACHED_RIGHT_INTEL 0x2
|
||||
#define CLK_AVC_ME_BORDER_REACHED_TOP_INTEL 0x4
|
||||
#define CLK_AVC_ME_BORDER_REACHED_BOTTOM_INTEL 0x8
|
||||
|
||||
#define CLK_AVC_ME_INTRA_16x16_INTEL 0x0
|
||||
#define CLK_AVC_ME_INTRA_8x8_INTEL 0x1
|
||||
#define CLK_AVC_ME_INTRA_4x4_INTEL 0x2
|
||||
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_PARTITION_16x16_INTEL 0x0
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_PARTITION_8x8_INTEL 0x4000
|
||||
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_16x16_FORWARD_ENABLE_INTEL (0x1 << 24)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_16x16_BACKWARD_ENABLE_INTEL (0x2 << 24)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_16x16_DUAL_ENABLE_INTEL (0x3 << 24)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_FORWARD_ENABLE_INTEL (0x55 << 24)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_BACKWARD_ENABLE_INTEL (0xAA << 24)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_DUAL_ENABLE_INTEL (0xFF << 24)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_0_FORWARD_ENABLE_INTEL (0x1 << 24)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_0_BACKWARD_ENABLE_INTEL (0x2 << 24)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_1_FORWARD_ENABLE_INTEL (0x1 << 26)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_1_BACKWARD_ENABLE_INTEL (0x2 << 26)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_2_FORWARD_ENABLE_INTEL (0x1 << 28)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_2_BACKWARD_ENABLE_INTEL (0x2 << 28)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_3_FORWARD_ENABLE_INTEL (0x1 << 30)
|
||||
#define CLK_AVC_ME_SKIP_BLOCK_8x8_3_BACKWARD_ENABLE_INTEL (0x2 << 30)
|
||||
|
||||
#define CLK_AVC_ME_BLOCK_BASED_SKIP_4x4_INTEL 0x00
|
||||
#define CLK_AVC_ME_BLOCK_BASED_SKIP_8x8_INTEL 0x80
|
||||
|
||||
#define CLK_AVC_ME_INTRA_LUMA_PARTITION_MASK_ALL_INTEL 0x0
|
||||
#define CLK_AVC_ME_INTRA_LUMA_PARTITION_MASK_16x16_INTEL 0x6
|
||||
#define CLK_AVC_ME_INTRA_LUMA_PARTITION_MASK_8x8_INTEL 0x5
|
||||
#define CLK_AVC_ME_INTRA_LUMA_PARTITION_MASK_4x4_INTEL 0x3
|
||||
|
||||
#define CLK_AVC_ME_INTRA_NEIGHBOR_LEFT_MASK_ENABLE_INTEL 0x60
|
||||
#define CLK_AVC_ME_INTRA_NEIGHBOR_UPPER_MASK_ENABLE_INTEL 0x10
|
||||
#define CLK_AVC_ME_INTRA_NEIGHBOR_UPPER_RIGHT_MASK_ENABLE_INTEL 0x8
|
||||
#define CLK_AVC_ME_INTRA_NEIGHBOR_UPPER_LEFT_MASK_ENABLE_INTEL 0x4
|
||||
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_VERTICAL_INTEL 0x0
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_INTEL 0x1
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_DC_INTEL 0x2
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_LEFT_INTEL 0x3
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_RIGHT_INTEL 0x4
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_PLANE_INTEL 0x4
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_VERTICAL_RIGHT_INTEL 0x5
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_DOWN_INTEL 0x6
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_VERTICAL_LEFT_INTEL 0x7
|
||||
#define CLK_AVC_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_UP_INTEL 0x8
|
||||
#define CLK_AVC_ME_CHROMA_PREDICTOR_MODE_DC_INTEL 0x0
|
||||
#define CLK_AVC_ME_CHROMA_PREDICTOR_MODE_HORIZONTAL_INTEL 0x1
|
||||
#define CLK_AVC_ME_CHROMA_PREDICTOR_MODE_VERTICAL_INTEL 0x2
|
||||
#define CLK_AVC_ME_CHROMA_PREDICTOR_MODE_PLANE_INTEL 0x3
|
||||
|
||||
#define CLK_AVC_ME_FRAME_FORWARD_INTEL 0x1
|
||||
#define CLK_AVC_ME_FRAME_BACKWARD_INTEL 0x2
|
||||
#define CLK_AVC_ME_FRAME_DUAL_INTEL 0x3
|
||||
|
||||
#define CLK_AVC_ME_INTERLACED_SCAN_TOP_FIELD_INTEL 0x0
|
||||
#define CLK_AVC_ME_INTERLACED_SCAN_BOTTOM_FIELD_INTEL 0x1
|
||||
|
||||
#define CLK_AVC_ME_INITIALIZE_INTEL 0x0
|
||||
|
||||
#define CLK_AVC_IME_PAYLOAD_INITIALIZE_INTEL 0x0
|
||||
#define CLK_AVC_REF_PAYLOAD_INITIALIZE_INTEL 0x0
|
||||
#define CLK_AVC_SIC_PAYLOAD_INITIALIZE_INTEL 0x0
|
||||
|
||||
#define CLK_AVC_IME_RESULT_INITIALIZE_INTEL 0x0
|
||||
#define CLK_AVC_REF_RESULT_INITIALIZE_INTEL 0x0
|
||||
#define CLK_AVC_SIC_RESULT_INITIALIZE_INTEL 0x0
|
||||
|
||||
#define CLK_AVC_IME_RESULT_SINGLE_REFERENCE_STREAMOUT_INITIALIZE_INTEL 0x0
|
||||
#define CLK_AVC_IME_RESULT_SINGLE_REFERENCE_STREAMIN_INITIALIZE_INTEL 0x0
|
||||
#define CLK_AVC_IME_RESULT_DUAL_REFERENCE_STREAMOUT_INITIALIZE_INTEL 0x0
|
||||
#define CLK_AVC_IME_RESULT_DUAL_REFERENCE_STREAMIN_INITIALIZE_INTEL 0x0
|
||||
|
||||
// MCE built-in functions
|
||||
uchar __ovld
|
||||
intel_sub_group_avc_mce_get_default_inter_base_multi_reference_penalty(
|
||||
uchar slice_type, uchar qp);
|
||||
ulong __ovld intel_sub_group_avc_mce_get_default_inter_shape_penalty(
|
||||
uchar slice_type, uchar qp);
|
||||
uchar __ovld intel_sub_group_avc_mce_get_default_inter_direction_penalty(
|
||||
uchar slice_type, uchar qp);
|
||||
uint __ovld intel_sub_group_avc_mce_get_default_intra_luma_shape_penalty(
|
||||
uchar slice_type, uchar qp);
|
||||
uint2 __ovld
|
||||
intel_sub_group_avc_mce_get_default_inter_motion_vector_cost_table(
|
||||
uchar slice_type, uchar qp);
|
||||
uchar __ovld intel_sub_group_avc_mce_get_default_intra_luma_mode_penalty(
|
||||
uchar slice_type, uchar qp);
|
||||
|
||||
uint2 __ovld intel_sub_group_avc_mce_get_default_high_penalty_cost_table();
|
||||
uint2 __ovld intel_sub_group_avc_mce_get_default_medium_penalty_cost_table();
|
||||
uint2 __ovld intel_sub_group_avc_mce_get_default_low_penalty_cost_table();
|
||||
uint __ovld intel_sub_group_avc_mce_get_default_non_dc_luma_intra_penalty();
|
||||
uchar __ovld
|
||||
intel_sub_group_avc_mce_get_default_intra_chroma_mode_base_penalty();
|
||||
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_mce_set_inter_base_multi_reference_penalty(
|
||||
uchar reference_base_penalty, intel_sub_group_avc_mce_payload_t payload);
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_mce_set_inter_shape_penalty(
|
||||
ulong packed_shape_penalty, intel_sub_group_avc_mce_payload_t payload);
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_mce_set_inter_direction_penalty(
|
||||
uchar direction_cost, intel_sub_group_avc_mce_payload_t payload);
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_mce_set_motion_vector_cost_function(
|
||||
ulong packed_cost_center_delta, uint2 packed_cost_table,
|
||||
uchar cost_precision, intel_sub_group_avc_mce_payload_t payload);
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_mce_set_ac_only_haar(
|
||||
intel_sub_group_avc_mce_payload_t payload);
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_mce_set_source_interlaced_field_polarity(
|
||||
uchar src_field_polarity, intel_sub_group_avc_mce_payload_t payload);
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_mce_set_single_reference_interlaced_field_polarity(
|
||||
uchar ref_field_polarity, intel_sub_group_avc_mce_payload_t payload);
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_mce_set_dual_reference_interlaced_field_polarities(
|
||||
uchar fwd_ref_field_polarity, uchar bwd_ref_field_polarity,
|
||||
intel_sub_group_avc_mce_payload_t payload);
|
||||
|
||||
ulong __ovld intel_sub_group_avc_mce_get_motion_vectors(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
ushort __ovld intel_sub_group_avc_mce_get_inter_distortions(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
ushort __ovld intel_sub_group_avc_mce_get_best_inter_distortion(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_mce_get_inter_major_shape(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_mce_get_inter_minor_shapes(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_mce_get_inter_directions(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_mce_get_inter_motion_vector_count(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
uint __ovld intel_sub_group_avc_mce_get_inter_reference_ids(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
uchar __ovld
|
||||
intel_sub_group_avc_mce_get_inter_reference_interlaced_field_polarities(
|
||||
uint packed_reference_ids, uint packed_reference_parameter_field_polarities,
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
|
||||
// IME built-in functions
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_initialize(
|
||||
ushort2 src_coord, uchar partition_mask, uchar sad_adjustment);
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_single_reference(
|
||||
short2 ref_offset, uchar search_window_config,
|
||||
intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_dual_reference(
|
||||
short2 fwd_ref_offset, short2 bwd_ref_offset, uchar search_window_config,
|
||||
intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_max_motion_vector_count(
|
||||
uchar max_motion_vector_count, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_unidirectional_mix_disable(
|
||||
intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_early_search_termination_threshold(
|
||||
uchar threshold, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_weighted_sad(
|
||||
uint packed_sad_weights, intel_sub_group_avc_ime_payload_t payload);
|
||||
|
||||
__attribute__((deprecated("If you use the latest Intel driver, please use "
|
||||
"intel_sub_group_avc_ime_ref_window_size instead",
|
||||
"intel_sub_group_avc_ime_ref_window_size")))
|
||||
ushort2 __ovld
|
||||
intel_sub_group_ime_ref_window_size(uchar search_window_config, char dual_ref);
|
||||
ushort2 __ovld intel_sub_group_avc_ime_ref_window_size(
|
||||
uchar search_window_config, char dual_ref);
|
||||
short2 __ovld intel_sub_group_avc_ime_adjust_ref_offset(
|
||||
short2 ref_offset, ushort2 src_coord, ushort2 ref_window_size,
|
||||
ushort2 image_size);
|
||||
|
||||
intel_sub_group_avc_ime_result_t __ovld
|
||||
intel_sub_group_avc_ime_evaluate_with_single_reference(
|
||||
read_only image2d_t src_image, read_only image2d_t ref_image,
|
||||
sampler_t vme_media_sampler, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_result_t __ovld
|
||||
intel_sub_group_avc_ime_evaluate_with_dual_reference(
|
||||
read_only image2d_t src_image, read_only image2d_t fwd_ref_image,
|
||||
read_only image2d_t bwd_ref_image, sampler_t vme_media_sampler,
|
||||
intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_result_single_reference_streamout_t __ovld
|
||||
intel_sub_group_avc_ime_evaluate_with_single_reference_streamout(
|
||||
read_only image2d_t src_image, read_only image2d_t ref_image,
|
||||
sampler_t vme_media_sampler, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_result_dual_reference_streamout_t __ovld
|
||||
intel_sub_group_avc_ime_evaluate_with_dual_reference_streamout(
|
||||
read_only image2d_t src_image, read_only image2d_t fwd_ref_image,
|
||||
read_only image2d_t bwd_ref_image, sampler_t vme_media_sampler,
|
||||
intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_result_t __ovld
|
||||
intel_sub_group_avc_ime_evaluate_with_single_reference_streamin(
|
||||
read_only image2d_t src_image, read_only image2d_t ref_image,
|
||||
sampler_t vme_media_sampler, intel_sub_group_avc_ime_payload_t payload,
|
||||
intel_sub_group_avc_ime_single_reference_streamin_t streamin_components);
|
||||
intel_sub_group_avc_ime_result_t __ovld
|
||||
intel_sub_group_avc_ime_evaluate_with_dual_reference_streamin(
|
||||
read_only image2d_t src_image, read_only image2d_t fwd_ref_image,
|
||||
read_only image2d_t bwd_ref_image, sampler_t vme_media_sampler,
|
||||
intel_sub_group_avc_ime_payload_t payload,
|
||||
intel_sub_group_avc_ime_dual_reference_streamin_t streamin_components);
|
||||
intel_sub_group_avc_ime_result_single_reference_streamout_t __ovld
|
||||
intel_sub_group_avc_ime_evaluate_with_single_reference_streaminout(
|
||||
read_only image2d_t src_image, read_only image2d_t ref_image,
|
||||
sampler_t vme_media_sampler, intel_sub_group_avc_ime_payload_t payload,
|
||||
intel_sub_group_avc_ime_single_reference_streamin_t streamin_components);
|
||||
intel_sub_group_avc_ime_result_dual_reference_streamout_t __ovld
|
||||
intel_sub_group_avc_ime_evaluate_with_dual_reference_streaminout(
|
||||
read_only image2d_t src_image, read_only image2d_t fwd_ref_image,
|
||||
read_only image2d_t bwd_ref_image, sampler_t vme_media_sampler,
|
||||
intel_sub_group_avc_ime_payload_t payload,
|
||||
intel_sub_group_avc_ime_dual_reference_streamin_t streamin_components);
|
||||
|
||||
intel_sub_group_avc_ime_single_reference_streamin_t __ovld
|
||||
intel_sub_group_avc_ime_get_single_reference_streamin(
|
||||
intel_sub_group_avc_ime_result_single_reference_streamout_t result);
|
||||
intel_sub_group_avc_ime_dual_reference_streamin_t __ovld
|
||||
intel_sub_group_avc_ime_get_dual_reference_streamin(
|
||||
intel_sub_group_avc_ime_result_dual_reference_streamout_t result);
|
||||
intel_sub_group_avc_ime_result_t __ovld
|
||||
intel_sub_group_avc_ime_strip_single_reference_streamout(
|
||||
intel_sub_group_avc_ime_result_single_reference_streamout_t result);
|
||||
intel_sub_group_avc_ime_result_t __ovld
|
||||
intel_sub_group_avc_ime_strip_dual_reference_streamout(
|
||||
intel_sub_group_avc_ime_result_dual_reference_streamout_t result);
|
||||
|
||||
uint __ovld intel_sub_group_avc_ime_get_streamout_major_shape_motion_vectors(
|
||||
intel_sub_group_avc_ime_result_single_reference_streamout_t result,
|
||||
uchar major_shape);
|
||||
ushort __ovld intel_sub_group_avc_ime_get_streamout_major_shape_distortions(
|
||||
intel_sub_group_avc_ime_result_single_reference_streamout_t result,
|
||||
uchar major_shape);
|
||||
uchar __ovld intel_sub_group_avc_ime_get_streamout_major_shape_reference_ids(
|
||||
intel_sub_group_avc_ime_result_single_reference_streamout_t result,
|
||||
uchar major_shape);
|
||||
uint __ovld intel_sub_group_avc_ime_get_streamout_major_shape_motion_vectors(
|
||||
intel_sub_group_avc_ime_result_dual_reference_streamout_t result,
|
||||
uchar major_shape, uchar direction);
|
||||
ushort __ovld intel_sub_group_avc_ime_get_streamout_major_shape_distortions(
|
||||
intel_sub_group_avc_ime_result_dual_reference_streamout_t result,
|
||||
uchar major_shape, uchar direction);
|
||||
uchar __ovld intel_sub_group_avc_ime_get_streamout_major_shape_reference_ids(
|
||||
intel_sub_group_avc_ime_result_dual_reference_streamout_t result,
|
||||
uchar major_shape, uchar direction);
|
||||
|
||||
uchar __ovld intel_sub_group_avc_ime_get_border_reached(
|
||||
uchar image_select, intel_sub_group_avc_ime_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_ime_get_truncated_search_indication(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
uchar __ovld
|
||||
intel_sub_group_avc_ime_get_unidirectional_early_search_termination(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
uint __ovld intel_sub_group_avc_ime_get_weighting_pattern_minimum_motion_vector(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
ushort __ovld intel_sub_group_avc_ime_get_weighting_pattern_minimum_distortion(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
|
||||
// REF built-in functions
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_fme_initialize(
|
||||
ushort2 src_coord, ulong motion_vectors, uchar major_shapes,
|
||||
uchar minor_shapes, uchar directions, uchar pixel_resolution,
|
||||
uchar sad_adjustment);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_bme_initialize(
|
||||
ushort2 src_coord, ulong motion_vectors, uchar major_shapes,
|
||||
uchar minor_shapes, uchar directions, uchar pixel_resolution,
|
||||
uchar bidirectional_weight, uchar sad_adjustment);
|
||||
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_bidirectional_mix_disable(
|
||||
intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_bilinear_filter_enable(
|
||||
intel_sub_group_avc_ref_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_ref_result_t __ovld
|
||||
intel_sub_group_avc_ref_evaluate_with_single_reference(
|
||||
read_only image2d_t src_image, read_only image2d_t ref_image,
|
||||
sampler_t vme_media_sampler, intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_ref_result_t __ovld
|
||||
intel_sub_group_avc_ref_evaluate_with_dual_reference(
|
||||
read_only image2d_t src_image, read_only image2d_t fwd_ref_image,
|
||||
read_only image2d_t bwd_ref_image, sampler_t vme_media_sampler,
|
||||
intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_ref_result_t __ovld
|
||||
intel_sub_group_avc_ref_evaluate_with_multi_reference(
|
||||
read_only image2d_t src_image, uint packed_reference_ids,
|
||||
sampler_t vme_media_sampler, intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_ref_result_t __ovld
|
||||
intel_sub_group_avc_ref_evaluate_with_multi_reference(
|
||||
read_only image2d_t src_image, uint packed_reference_ids,
|
||||
uchar packed_reference_field_polarities, sampler_t vme_media_sampler,
|
||||
intel_sub_group_avc_ref_payload_t payload);
|
||||
|
||||
// SIC built-in functions
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_initialize(
|
||||
ushort2 src_coord);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_configure_skc(
|
||||
uint skip_block_partition_type, uint skip_motion_vector_mask,
|
||||
ulong motion_vectors, uchar bidirectional_weight, uchar skip_sad_adjustment,
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_configure_ipe(
|
||||
uchar luma_intra_partition_mask, uchar intra_neighbour_availabilty,
|
||||
uchar left_edge_luma_pixels, uchar upper_left_corner_luma_pixel,
|
||||
uchar upper_edge_luma_pixels, uchar upper_right_edge_luma_pixels,
|
||||
uchar intra_sad_adjustment, intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_configure_ipe(
|
||||
uchar luma_intra_partition_mask, uchar intra_neighbour_availabilty,
|
||||
uchar left_edge_luma_pixels, uchar upper_left_corner_luma_pixel,
|
||||
uchar upper_edge_luma_pixels, uchar upper_right_edge_luma_pixels,
|
||||
ushort left_edge_chroma_pixels, ushort upper_left_corner_chroma_pixel,
|
||||
ushort upper_edge_chroma_pixels, uchar intra_sad_adjustment,
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
uint __ovld
|
||||
intel_sub_group_avc_sic_get_motion_vector_mask(
|
||||
uint skip_block_partition_type, uchar direction);
|
||||
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_intra_luma_shape_penalty(
|
||||
uint packed_shape_cost, intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_intra_luma_mode_cost_function(
|
||||
uchar luma_mode_penalty, uint luma_packed_neighbor_modes,
|
||||
uint luma_packed_non_dc_penalty, intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_intra_chroma_mode_cost_function(
|
||||
uchar chroma_mode_penalty, intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_skc_bilinear_filter_enable(
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_skc_forward_transform_enable(
|
||||
ulong packed_sad_coefficients, intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_block_based_raw_skip_sad(
|
||||
uchar block_based_skip_type,
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_sic_result_t __ovld
|
||||
intel_sub_group_avc_sic_evaluate_ipe(
|
||||
read_only image2d_t src_image, sampler_t vme_media_sampler,
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_result_t __ovld
|
||||
intel_sub_group_avc_sic_evaluate_with_single_reference(
|
||||
read_only image2d_t src_image, read_only image2d_t ref_image,
|
||||
sampler_t vme_media_sampler, intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_result_t __ovld
|
||||
intel_sub_group_avc_sic_evaluate_with_dual_reference(
|
||||
read_only image2d_t src_image, read_only image2d_t fwd_ref_image,
|
||||
read_only image2d_t bwd_ref_image, sampler_t vme_media_sampler,
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_result_t __ovld
|
||||
intel_sub_group_avc_sic_evaluate_with_multi_reference(
|
||||
read_only image2d_t src_image, uint packed_reference_ids,
|
||||
sampler_t vme_media_sampler, intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_result_t __ovld
|
||||
intel_sub_group_avc_sic_evaluate_with_multi_reference(
|
||||
read_only image2d_t src_image, uint packed_reference_ids,
|
||||
uchar packed_reference_field_polarities, sampler_t vme_media_sampler,
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
uchar __ovld intel_sub_group_avc_sic_get_ipe_luma_shape(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
ushort __ovld intel_sub_group_avc_sic_get_best_ipe_luma_distortion(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
ushort __ovld intel_sub_group_avc_sic_get_best_ipe_chroma_distortion(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
ulong __ovld intel_sub_group_avc_sic_get_packed_ipe_luma_modes(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_sic_get_ipe_chroma_mode(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
uint __ovld intel_sub_group_avc_sic_get_packed_skc_luma_count_threshold(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
ulong __ovld intel_sub_group_avc_sic_get_packed_skc_luma_sum_threshold(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
ushort __ovld intel_sub_group_avc_sic_get_inter_raw_sads(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
|
||||
// Wrappers
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_inter_base_multi_reference_penalty(
|
||||
uchar reference_base_penalty, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_inter_base_multi_reference_penalty(
|
||||
uchar reference_base_penalty, intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_inter_base_multi_reference_penalty(
|
||||
uchar reference_base_penalty, intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_inter_shape_penalty(
|
||||
ulong packed_shape_cost, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_inter_shape_penalty(
|
||||
ulong packed_shape_cost, intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_inter_shape_penalty(
|
||||
ulong packed_shape_cost, intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_inter_direction_penalty(
|
||||
uchar direction_cost, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_inter_direction_penalty(
|
||||
uchar direction_cost, intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_inter_direction_penalty(
|
||||
uchar direction_cost, intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_motion_vector_cost_function(
|
||||
ulong packed_cost_center_delta, uint2 packed_cost_table,
|
||||
uchar cost_precision, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_motion_vector_cost_function(
|
||||
ulong packed_cost_center_delta, uint2 packed_cost_table,
|
||||
uchar cost_precision, intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_motion_vector_cost_function(
|
||||
ulong packed_cost_center_delta, uint2 packed_cost_table,
|
||||
uchar cost_precision, intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_source_interlaced_field_polarity(
|
||||
uchar src_field_polarity, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_source_interlaced_field_polarity(
|
||||
uchar src_field_polarity, intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_source_interlaced_field_polarity(
|
||||
uchar src_field_polarity, intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_single_reference_interlaced_field_polarity(
|
||||
uchar ref_field_polarity, intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_single_reference_interlaced_field_polarity(
|
||||
uchar ref_field_polarity, intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_single_reference_interlaced_field_polarity(
|
||||
uchar ref_field_polarity, intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_dual_reference_interlaced_field_polarities(
|
||||
uchar fwd_ref_field_polarity, uchar bwd_ref_field_polarity,
|
||||
intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_dual_reference_interlaced_field_polarities(
|
||||
uchar fwd_ref_field_polarity, uchar bwd_ref_field_polarity,
|
||||
intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_dual_reference_interlaced_field_polarities(
|
||||
uchar fwd_ref_field_polarity, uchar bwd_ref_field_polarity,
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_ime_set_ac_only_haar(
|
||||
intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_ref_set_ac_only_haar(
|
||||
intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_sic_set_ac_only_haar(
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
|
||||
ulong __ovld intel_sub_group_avc_ime_get_motion_vectors(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
ulong __ovld intel_sub_group_avc_ref_get_motion_vectors(
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
|
||||
ushort __ovld intel_sub_group_avc_ime_get_inter_distortions(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
ushort __ovld intel_sub_group_avc_ref_get_inter_distortions(
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
ushort __ovld intel_sub_group_avc_sic_get_inter_distortions(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
|
||||
ushort __ovld intel_sub_group_avc_ime_get_best_inter_distortion(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
ushort __ovld intel_sub_group_avc_ref_get_best_inter_distortion(
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
|
||||
uchar __ovld intel_sub_group_avc_ime_get_inter_major_shape(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_ref_get_inter_major_shape(
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_ime_get_inter_minor_shapes(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_ref_get_inter_minor_shapes(
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
|
||||
uchar __ovld intel_sub_group_avc_ime_get_inter_directions(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_ref_get_inter_directions(
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
|
||||
uchar __ovld intel_sub_group_avc_ime_get_inter_motion_vector_count(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
uchar __ovld intel_sub_group_avc_ref_get_inter_motion_vector_count(
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
|
||||
uint __ovld intel_sub_group_avc_ime_get_inter_reference_ids(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
uint __ovld intel_sub_group_avc_ref_get_inter_reference_ids(
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
|
||||
uchar __ovld
|
||||
intel_sub_group_avc_ime_get_inter_reference_interlaced_field_polarities(
|
||||
uint packed_reference_ids, uint packed_reference_parameter_field_polarities,
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
uchar __ovld
|
||||
intel_sub_group_avc_ref_get_inter_reference_interlaced_field_polarities(
|
||||
uint packed_reference_ids, uint packed_reference_parameter_field_polarities,
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
|
||||
// Type conversion functions
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_ime_convert_to_mce_payload(
|
||||
intel_sub_group_avc_ime_payload_t payload);
|
||||
intel_sub_group_avc_ime_payload_t __ovld
|
||||
intel_sub_group_avc_mce_convert_to_ime_payload(
|
||||
intel_sub_group_avc_mce_payload_t payload);
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_ref_convert_to_mce_payload(
|
||||
intel_sub_group_avc_ref_payload_t payload);
|
||||
intel_sub_group_avc_ref_payload_t __ovld
|
||||
intel_sub_group_avc_mce_convert_to_ref_payload(
|
||||
intel_sub_group_avc_mce_payload_t payload);
|
||||
intel_sub_group_avc_mce_payload_t __ovld
|
||||
intel_sub_group_avc_sic_convert_to_mce_payload(
|
||||
intel_sub_group_avc_sic_payload_t payload);
|
||||
intel_sub_group_avc_sic_payload_t __ovld
|
||||
intel_sub_group_avc_mce_convert_to_sic_payload(
|
||||
intel_sub_group_avc_mce_payload_t payload);
|
||||
|
||||
intel_sub_group_avc_mce_result_t __ovld
|
||||
intel_sub_group_avc_ime_convert_to_mce_result(
|
||||
intel_sub_group_avc_ime_result_t result);
|
||||
intel_sub_group_avc_ime_result_t __ovld
|
||||
intel_sub_group_avc_mce_convert_to_ime_result(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
intel_sub_group_avc_mce_result_t __ovld
|
||||
intel_sub_group_avc_ref_convert_to_mce_result(
|
||||
intel_sub_group_avc_ref_result_t result);
|
||||
intel_sub_group_avc_ref_result_t __ovld
|
||||
intel_sub_group_avc_mce_convert_to_ref_result(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
intel_sub_group_avc_mce_result_t __ovld
|
||||
intel_sub_group_avc_sic_convert_to_mce_result(
|
||||
intel_sub_group_avc_sic_result_t result);
|
||||
intel_sub_group_avc_sic_result_t __ovld
|
||||
intel_sub_group_avc_mce_convert_to_sic_result(
|
||||
intel_sub_group_avc_mce_result_t result);
|
||||
#pragma OPENCL EXTENSION cl_intel_device_side_avc_motion_estimation : end
|
||||
#endif // cl_intel_device_side_avc_motion_estimation
|
||||
|
||||
#ifdef cl_amd_media_ops
|
||||
uint __ovld amd_bitalign(uint a, uint b, uint c);
|
||||
uint2 __ovld amd_bitalign(uint2 a, uint2 b, uint2 c);
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/*===---- pconfigintrin.h - X86 platform configuration ---------------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
|
||||
#error "Never use <pconfigintrin.h> directly; include <x86intrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __PCONFIGINTRIN_H
|
||||
#define __PCONFIGINTRIN_H
|
||||
|
||||
#define __PCONFIG_KEY_PROGRAM 0x00000001
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("pconfig")))
|
||||
|
||||
static __inline unsigned int __DEFAULT_FN_ATTRS
|
||||
_pconfig_u32(unsigned int __leaf, __SIZE_TYPE__ __d[])
|
||||
{
|
||||
unsigned int __result;
|
||||
__asm__ ("pconfig"
|
||||
: "=a" (__result), "=b" (__d[0]), "=c" (__d[1]), "=d" (__d[2])
|
||||
: "a" (__leaf), "b" (__d[0]), "c" (__d[1]), "d" (__d[2])
|
||||
: "cc");
|
||||
return __result;
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif
|
||||
@@ -1,4 +1,4 @@
|
||||
/*===------------- pkuintrin.h - PKU intrinsics ------------------===
|
||||
/*===---- pkuintrin.h - PKU intrinsics -------------------------------------===
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
@@ -40,7 +40,7 @@ _rdpkru_u32(void)
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
_wrpkru(unsigned int __val)
|
||||
{
|
||||
return __builtin_ia32_wrpkru(__val);
|
||||
__builtin_ia32_wrpkru(__val);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("sse3")))
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("sse3"), __min_vector_width__(128)))
|
||||
|
||||
/// \brief Loads data from an unaligned memory location to elements in a 128-bit
|
||||
/// Loads data from an unaligned memory location to elements in a 128-bit
|
||||
/// vector.
|
||||
///
|
||||
/// If the address of the data is not 16-byte aligned, the instruction may
|
||||
@@ -50,7 +50,7 @@ _mm_lddqu_si128(__m128i const *__p)
|
||||
return (__m128i)__builtin_ia32_lddqu((char const *)__p);
|
||||
}
|
||||
|
||||
/// \brief Adds the even-indexed values and subtracts the odd-indexed values of
|
||||
/// Adds the even-indexed values and subtracts the odd-indexed values of
|
||||
/// two 128-bit vectors of [4 x float].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -69,7 +69,7 @@ _mm_addsub_ps(__m128 __a, __m128 __b)
|
||||
return __builtin_ia32_addsubps((__v4sf)__a, (__v4sf)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally adds the adjacent pairs of values contained in two
|
||||
/// Horizontally adds the adjacent pairs of values contained in two
|
||||
/// 128-bit vectors of [4 x float].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -92,7 +92,7 @@ _mm_hadd_ps(__m128 __a, __m128 __b)
|
||||
return __builtin_ia32_haddps((__v4sf)__a, (__v4sf)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally subtracts the adjacent pairs of values contained in two
|
||||
/// Horizontally subtracts the adjacent pairs of values contained in two
|
||||
/// 128-bit vectors of [4 x float].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -115,7 +115,7 @@ _mm_hsub_ps(__m128 __a, __m128 __b)
|
||||
return __builtin_ia32_hsubps((__v4sf)__a, (__v4sf)__b);
|
||||
}
|
||||
|
||||
/// \brief Moves and duplicates odd-indexed values from a 128-bit vector
|
||||
/// Moves and duplicates odd-indexed values from a 128-bit vector
|
||||
/// of [4 x float] to float values stored in a 128-bit vector of
|
||||
/// [4 x float].
|
||||
///
|
||||
@@ -137,7 +137,7 @@ _mm_movehdup_ps(__m128 __a)
|
||||
return __builtin_shufflevector((__v4sf)__a, (__v4sf)__a, 1, 1, 3, 3);
|
||||
}
|
||||
|
||||
/// \brief Duplicates even-indexed values from a 128-bit vector of
|
||||
/// Duplicates even-indexed values from a 128-bit vector of
|
||||
/// [4 x float] to float values stored in a 128-bit vector of [4 x float].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -158,7 +158,7 @@ _mm_moveldup_ps(__m128 __a)
|
||||
return __builtin_shufflevector((__v4sf)__a, (__v4sf)__a, 0, 0, 2, 2);
|
||||
}
|
||||
|
||||
/// \brief Adds the even-indexed values and subtracts the odd-indexed values of
|
||||
/// Adds the even-indexed values and subtracts the odd-indexed values of
|
||||
/// two 128-bit vectors of [2 x double].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -177,7 +177,7 @@ _mm_addsub_pd(__m128d __a, __m128d __b)
|
||||
return __builtin_ia32_addsubpd((__v2df)__a, (__v2df)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally adds the pairs of values contained in two 128-bit
|
||||
/// Horizontally adds the pairs of values contained in two 128-bit
|
||||
/// vectors of [2 x double].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -200,7 +200,7 @@ _mm_hadd_pd(__m128d __a, __m128d __b)
|
||||
return __builtin_ia32_haddpd((__v2df)__a, (__v2df)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally subtracts the pairs of values contained in two 128-bit
|
||||
/// Horizontally subtracts the pairs of values contained in two 128-bit
|
||||
/// vectors of [2 x double].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -223,13 +223,13 @@ _mm_hsub_pd(__m128d __a, __m128d __b)
|
||||
return __builtin_ia32_hsubpd((__v2df)__a, (__v2df)__b);
|
||||
}
|
||||
|
||||
/// \brief Moves and duplicates one double-precision value to double-precision
|
||||
/// Moves and duplicates one double-precision value to double-precision
|
||||
/// values stored in a 128-bit vector of [2 x double].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
/// \code
|
||||
/// __m128d _mm_loaddup_pd(double const * dp);
|
||||
/// __m128d _mm_loaddup_pd(double const *dp);
|
||||
/// \endcode
|
||||
///
|
||||
/// This intrinsic corresponds to the <c> VMOVDDUP </c> instruction.
|
||||
@@ -240,7 +240,7 @@ _mm_hsub_pd(__m128d __a, __m128d __b)
|
||||
/// duplicated values.
|
||||
#define _mm_loaddup_pd(dp) _mm_load1_pd(dp)
|
||||
|
||||
/// \brief Moves and duplicates the double-precision value in the lower bits of
|
||||
/// Moves and duplicates the double-precision value in the lower bits of
|
||||
/// a 128-bit vector of [2 x double] to double-precision values stored in a
|
||||
/// 128-bit vector of [2 x double].
|
||||
///
|
||||
@@ -259,7 +259,7 @@ _mm_movedup_pd(__m128d __a)
|
||||
return __builtin_shufflevector((__v2df)__a, (__v2df)__a, 0, 0);
|
||||
}
|
||||
|
||||
/// \brief Establishes a linear address memory range to be monitored and puts
|
||||
/// Establishes a linear address memory range to be monitored and puts
|
||||
/// the processor in the monitor event pending state. Data stored in the
|
||||
/// monitored address range causes the processor to exit the pending state.
|
||||
///
|
||||
@@ -280,7 +280,7 @@ _mm_monitor(void const *__p, unsigned __extensions, unsigned __hints)
|
||||
__builtin_ia32_monitor((void *)__p, __extensions, __hints);
|
||||
}
|
||||
|
||||
/// \brief Used with the MONITOR instruction to wait while the processor is in
|
||||
/// Used with the MONITOR instruction to wait while the processor is in
|
||||
/// the monitor event pending state. Data stored in the monitored address
|
||||
/// range causes the processor to exit the pending state.
|
||||
///
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef _POPCNTINTRIN_H
|
||||
#define _POPCNTINTRIN_H
|
||||
#ifndef __POPCNTINTRIN_H
|
||||
#define __POPCNTINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("popcnt")))
|
||||
|
||||
/// \brief Counts the number of bits in the source operand having a value of 1.
|
||||
/// Counts the number of bits in the source operand having a value of 1.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -43,7 +43,7 @@ _mm_popcnt_u32(unsigned int __A)
|
||||
return __builtin_popcount(__A);
|
||||
}
|
||||
|
||||
/// \brief Counts the number of bits in the source operand having a value of 1.
|
||||
/// Counts the number of bits in the source operand having a value of 1.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -60,7 +60,7 @@ _popcnt32(int __A)
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
/// \brief Counts the number of bits in the source operand having a value of 1.
|
||||
/// Counts the number of bits in the source operand having a value of 1.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -76,7 +76,7 @@ _mm_popcnt_u64(unsigned long long __A)
|
||||
return __builtin_popcountll(__A);
|
||||
}
|
||||
|
||||
/// \brief Counts the number of bits in the source operand having a value of 1.
|
||||
/// Counts the number of bits in the source operand having a value of 1.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -95,4 +95,4 @@ _popcnt64(long long __A)
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif /* _POPCNTINTRIN_H */
|
||||
#endif /* __POPCNTINTRIN_H */
|
||||
|
||||
@@ -28,8 +28,7 @@
|
||||
#ifndef __PRFCHWINTRIN_H
|
||||
#define __PRFCHWINTRIN_H
|
||||
|
||||
#if defined(__PRFCHW__) || defined(__3dNOW__)
|
||||
/// \brief Loads a memory sequence containing the specified memory address into
|
||||
/// Loads a memory sequence containing the specified memory address into
|
||||
/// all data cache levels. The cache-coherency state is set to exclusive.
|
||||
/// Data can be read from and written to the cache line without additional
|
||||
/// delay.
|
||||
@@ -46,7 +45,7 @@ _m_prefetch(void *__P)
|
||||
__builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */);
|
||||
}
|
||||
|
||||
/// \brief Loads a memory sequence containing the specified memory address into
|
||||
/// Loads a memory sequence containing the specified memory address into
|
||||
/// the L1 data cache and sets the cache-coherency to modified. This
|
||||
/// provides a hint to the processor that the cache line will be modified.
|
||||
/// It is intended for use when the cache line will be written to shortly
|
||||
@@ -66,6 +65,5 @@ _m_prefetchw(void *__P)
|
||||
{
|
||||
__builtin_prefetch (__P, 1, 3 /* _MM_HINT_T0 */);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __PRFCHWINTRIN_H */
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
/*===------------ ptwriteintrin.h - PTWRITE intrinsic --------------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
|
||||
#error "Never use <ptwriteintrin.h> directly; include <x86intrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __PTWRITEINTRIN_H
|
||||
#define __PTWRITEINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("ptwrite")))
|
||||
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
_ptwrite32(unsigned int __value) {
|
||||
__builtin_ia32_ptwrite32(__value);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
|
||||
static __inline__ void __DEFAULT_FN_ATTRS
|
||||
_ptwrite64(unsigned long long __value) {
|
||||
__builtin_ia32_ptwrite64(__value);
|
||||
}
|
||||
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif /* __PTWRITEINTRIN_H */
|
||||
@@ -21,7 +21,7 @@
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef __X86INTRIN_H
|
||||
#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
|
||||
#error "Never use <rdseedintrin.h> directly; include <x86intrin.h> instead."
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/*===---- sgxintrin.h - X86 SGX intrinsics configuration -------------------===
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
|
||||
#error "Never use <sgxintrin.h> directly; include <x86intrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef __SGXINTRIN_H
|
||||
#define __SGXINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS \
|
||||
__attribute__((__always_inline__, __nodebug__, __target__("sgx")))
|
||||
|
||||
static __inline unsigned int __DEFAULT_FN_ATTRS
|
||||
_enclu_u32(unsigned int __leaf, __SIZE_TYPE__ __d[])
|
||||
{
|
||||
unsigned int __result;
|
||||
__asm__ ("enclu"
|
||||
: "=a" (__result), "=b" (__d[0]), "=c" (__d[1]), "=d" (__d[2])
|
||||
: "a" (__leaf), "b" (__d[0]), "c" (__d[1]), "d" (__d[2])
|
||||
: "cc");
|
||||
return __result;
|
||||
}
|
||||
|
||||
static __inline unsigned int __DEFAULT_FN_ATTRS
|
||||
_encls_u32(unsigned int __leaf, __SIZE_TYPE__ __d[])
|
||||
{
|
||||
unsigned int __result;
|
||||
__asm__ ("encls"
|
||||
: "=a" (__result), "=b" (__d[0]), "=c" (__d[1]), "=d" (__d[2])
|
||||
: "a" (__leaf), "b" (__d[0]), "c" (__d[1]), "d" (__d[2])
|
||||
: "cc");
|
||||
return __result;
|
||||
}
|
||||
|
||||
static __inline unsigned int __DEFAULT_FN_ATTRS
|
||||
_enclv_u32(unsigned int __leaf, __SIZE_TYPE__ __d[])
|
||||
{
|
||||
unsigned int __result;
|
||||
__asm__ ("enclv"
|
||||
: "=a" (__result), "=b" (__d[0]), "=c" (__d[1]), "=d" (__d[2])
|
||||
: "a" (__leaf), "b" (__d[0]), "c" (__d[1]), "d" (__d[2])
|
||||
: "cc");
|
||||
return __result;
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#endif
|
||||
@@ -29,10 +29,10 @@
|
||||
#define __SHAINTRIN_H
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sha")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sha"), __min_vector_width__(128)))
|
||||
|
||||
#define _mm_sha1rnds4_epu32(V1, V2, M) __extension__ ({ \
|
||||
__builtin_ia32_sha1rnds4((__v4si)(__m128i)(V1), (__v4si)(__m128i)(V2), (M)); })
|
||||
#define _mm_sha1rnds4_epu32(V1, V2, M) \
|
||||
__builtin_ia32_sha1rnds4((__v4si)(__m128i)(V1), (__v4si)(__m128i)(V2), (M))
|
||||
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_sha1nexte_epu32(__m128i __X, __m128i __Y)
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
*===-----------------------------------------------------------------------===
|
||||
*/
|
||||
|
||||
#ifndef _SMMINTRIN_H
|
||||
#define _SMMINTRIN_H
|
||||
#ifndef __SMMINTRIN_H
|
||||
#define __SMMINTRIN_H
|
||||
|
||||
#include <tmmintrin.h>
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4.1")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse4.1"), __min_vector_width__(128)))
|
||||
|
||||
/* SSE4 Rounding macros. */
|
||||
#define _MM_FROUND_TO_NEAREST_INT 0x00
|
||||
@@ -46,7 +46,7 @@
|
||||
#define _MM_FROUND_RINT (_MM_FROUND_RAISE_EXC | _MM_FROUND_CUR_DIRECTION)
|
||||
#define _MM_FROUND_NEARBYINT (_MM_FROUND_NO_EXC | _MM_FROUND_CUR_DIRECTION)
|
||||
|
||||
/// \brief Rounds up each element of the 128-bit vector of [4 x float] to an
|
||||
/// Rounds up each element of the 128-bit vector of [4 x float] to an
|
||||
/// integer and returns the rounded values in a 128-bit vector of
|
||||
/// [4 x float].
|
||||
///
|
||||
@@ -63,7 +63,7 @@
|
||||
/// \returns A 128-bit vector of [4 x float] containing the rounded values.
|
||||
#define _mm_ceil_ps(X) _mm_round_ps((X), _MM_FROUND_CEIL)
|
||||
|
||||
/// \brief Rounds up each element of the 128-bit vector of [2 x double] to an
|
||||
/// Rounds up each element of the 128-bit vector of [2 x double] to an
|
||||
/// integer and returns the rounded values in a 128-bit vector of
|
||||
/// [2 x double].
|
||||
///
|
||||
@@ -80,7 +80,7 @@
|
||||
/// \returns A 128-bit vector of [2 x double] containing the rounded values.
|
||||
#define _mm_ceil_pd(X) _mm_round_pd((X), _MM_FROUND_CEIL)
|
||||
|
||||
/// \brief Copies three upper elements of the first 128-bit vector operand to
|
||||
/// Copies three upper elements of the first 128-bit vector operand to
|
||||
/// the corresponding three upper elements of the 128-bit result vector of
|
||||
/// [4 x float]. Rounds up the lowest element of the second 128-bit vector
|
||||
/// operand to an integer and copies it to the lowest element of the 128-bit
|
||||
@@ -105,7 +105,7 @@
|
||||
/// values.
|
||||
#define _mm_ceil_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_CEIL)
|
||||
|
||||
/// \brief Copies the upper element of the first 128-bit vector operand to the
|
||||
/// Copies the upper element of the first 128-bit vector operand to the
|
||||
/// corresponding upper element of the 128-bit result vector of [2 x double].
|
||||
/// Rounds up the lower element of the second 128-bit vector operand to an
|
||||
/// integer and copies it to the lower element of the 128-bit result vector
|
||||
@@ -130,7 +130,7 @@
|
||||
/// values.
|
||||
#define _mm_ceil_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_CEIL)
|
||||
|
||||
/// \brief Rounds down each element of the 128-bit vector of [4 x float] to an
|
||||
/// Rounds down each element of the 128-bit vector of [4 x float] to an
|
||||
/// an integer and returns the rounded values in a 128-bit vector of
|
||||
/// [4 x float].
|
||||
///
|
||||
@@ -147,7 +147,7 @@
|
||||
/// \returns A 128-bit vector of [4 x float] containing the rounded values.
|
||||
#define _mm_floor_ps(X) _mm_round_ps((X), _MM_FROUND_FLOOR)
|
||||
|
||||
/// \brief Rounds down each element of the 128-bit vector of [2 x double] to an
|
||||
/// Rounds down each element of the 128-bit vector of [2 x double] to an
|
||||
/// integer and returns the rounded values in a 128-bit vector of
|
||||
/// [2 x double].
|
||||
///
|
||||
@@ -164,7 +164,7 @@
|
||||
/// \returns A 128-bit vector of [2 x double] containing the rounded values.
|
||||
#define _mm_floor_pd(X) _mm_round_pd((X), _MM_FROUND_FLOOR)
|
||||
|
||||
/// \brief Copies three upper elements of the first 128-bit vector operand to
|
||||
/// Copies three upper elements of the first 128-bit vector operand to
|
||||
/// the corresponding three upper elements of the 128-bit result vector of
|
||||
/// [4 x float]. Rounds down the lowest element of the second 128-bit vector
|
||||
/// operand to an integer and copies it to the lowest element of the 128-bit
|
||||
@@ -189,7 +189,7 @@
|
||||
/// values.
|
||||
#define _mm_floor_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_FLOOR)
|
||||
|
||||
/// \brief Copies the upper element of the first 128-bit vector operand to the
|
||||
/// Copies the upper element of the first 128-bit vector operand to the
|
||||
/// corresponding upper element of the 128-bit result vector of [2 x double].
|
||||
/// Rounds down the lower element of the second 128-bit vector operand to an
|
||||
/// integer and copies it to the lower element of the 128-bit result vector
|
||||
@@ -214,7 +214,7 @@
|
||||
/// values.
|
||||
#define _mm_floor_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_FLOOR)
|
||||
|
||||
/// \brief Rounds each element of the 128-bit vector of [4 x float] to an
|
||||
/// Rounds each element of the 128-bit vector of [4 x float] to an
|
||||
/// integer value according to the rounding control specified by the second
|
||||
/// argument and returns the rounded values in a 128-bit vector of
|
||||
/// [4 x float].
|
||||
@@ -244,10 +244,10 @@
|
||||
/// 10: Upward (toward positive infinity) \n
|
||||
/// 11: Truncated
|
||||
/// \returns A 128-bit vector of [4 x float] containing the rounded values.
|
||||
#define _mm_round_ps(X, M) __extension__ ({ \
|
||||
(__m128)__builtin_ia32_roundps((__v4sf)(__m128)(X), (M)); })
|
||||
#define _mm_round_ps(X, M) \
|
||||
(__m128)__builtin_ia32_roundps((__v4sf)(__m128)(X), (M))
|
||||
|
||||
/// \brief Copies three upper elements of the first 128-bit vector operand to
|
||||
/// Copies three upper elements of the first 128-bit vector operand to
|
||||
/// the corresponding three upper elements of the 128-bit result vector of
|
||||
/// [4 x float]. Rounds the lowest element of the second 128-bit vector
|
||||
/// operand to an integer value according to the rounding control specified
|
||||
@@ -285,11 +285,11 @@
|
||||
/// 11: Truncated
|
||||
/// \returns A 128-bit vector of [4 x float] containing the copied and rounded
|
||||
/// values.
|
||||
#define _mm_round_ss(X, Y, M) __extension__ ({ \
|
||||
#define _mm_round_ss(X, Y, M) \
|
||||
(__m128)__builtin_ia32_roundss((__v4sf)(__m128)(X), \
|
||||
(__v4sf)(__m128)(Y), (M)); })
|
||||
(__v4sf)(__m128)(Y), (M))
|
||||
|
||||
/// \brief Rounds each element of the 128-bit vector of [2 x double] to an
|
||||
/// Rounds each element of the 128-bit vector of [2 x double] to an
|
||||
/// integer value according to the rounding control specified by the second
|
||||
/// argument and returns the rounded values in a 128-bit vector of
|
||||
/// [2 x double].
|
||||
@@ -319,10 +319,10 @@
|
||||
/// 10: Upward (toward positive infinity) \n
|
||||
/// 11: Truncated
|
||||
/// \returns A 128-bit vector of [2 x double] containing the rounded values.
|
||||
#define _mm_round_pd(X, M) __extension__ ({ \
|
||||
(__m128d)__builtin_ia32_roundpd((__v2df)(__m128d)(X), (M)); })
|
||||
#define _mm_round_pd(X, M) \
|
||||
(__m128d)__builtin_ia32_roundpd((__v2df)(__m128d)(X), (M))
|
||||
|
||||
/// \brief Copies the upper element of the first 128-bit vector operand to the
|
||||
/// Copies the upper element of the first 128-bit vector operand to the
|
||||
/// corresponding upper element of the 128-bit result vector of [2 x double].
|
||||
/// Rounds the lower element of the second 128-bit vector operand to an
|
||||
/// integer value according to the rounding control specified by the third
|
||||
@@ -360,12 +360,12 @@
|
||||
/// 11: Truncated
|
||||
/// \returns A 128-bit vector of [2 x double] containing the copied and rounded
|
||||
/// values.
|
||||
#define _mm_round_sd(X, Y, M) __extension__ ({ \
|
||||
#define _mm_round_sd(X, Y, M) \
|
||||
(__m128d)__builtin_ia32_roundsd((__v2df)(__m128d)(X), \
|
||||
(__v2df)(__m128d)(Y), (M)); })
|
||||
(__v2df)(__m128d)(Y), (M))
|
||||
|
||||
/* SSE4 Packed Blending Intrinsics. */
|
||||
/// \brief Returns a 128-bit vector of [2 x double] where the values are
|
||||
/// Returns a 128-bit vector of [2 x double] where the values are
|
||||
/// selected from either the first or second operand as specified by the
|
||||
/// third operand, the control mask.
|
||||
///
|
||||
@@ -389,13 +389,11 @@
|
||||
/// When a mask bit is 1, the corresponding 64-bit element in operand \a V2
|
||||
/// is copied to the same position in the result.
|
||||
/// \returns A 128-bit vector of [2 x double] containing the copied values.
|
||||
#define _mm_blend_pd(V1, V2, M) __extension__ ({ \
|
||||
(__m128d)__builtin_shufflevector((__v2df)(__m128d)(V1), \
|
||||
(__v2df)(__m128d)(V2), \
|
||||
(((M) & 0x01) ? 2 : 0), \
|
||||
(((M) & 0x02) ? 3 : 1)); })
|
||||
#define _mm_blend_pd(V1, V2, M) \
|
||||
(__m128d) __builtin_ia32_blendpd ((__v2df)(__m128d)(V1), \
|
||||
(__v2df)(__m128d)(V2), (int)(M))
|
||||
|
||||
/// \brief Returns a 128-bit vector of [4 x float] where the values are selected
|
||||
/// Returns a 128-bit vector of [4 x float] where the values are selected
|
||||
/// from either the first or second operand as specified by the third
|
||||
/// operand, the control mask.
|
||||
///
|
||||
@@ -419,14 +417,11 @@
|
||||
/// When a mask bit is 1, the corresponding 32-bit element in operand \a V2
|
||||
/// is copied to the same position in the result.
|
||||
/// \returns A 128-bit vector of [4 x float] containing the copied values.
|
||||
#define _mm_blend_ps(V1, V2, M) __extension__ ({ \
|
||||
(__m128)__builtin_shufflevector((__v4sf)(__m128)(V1), (__v4sf)(__m128)(V2), \
|
||||
(((M) & 0x01) ? 4 : 0), \
|
||||
(((M) & 0x02) ? 5 : 1), \
|
||||
(((M) & 0x04) ? 6 : 2), \
|
||||
(((M) & 0x08) ? 7 : 3)); })
|
||||
#define _mm_blend_ps(V1, V2, M) \
|
||||
(__m128) __builtin_ia32_blendps ((__v4sf)(__m128)(V1), \
|
||||
(__v4sf)(__m128)(V2), (int)(M))
|
||||
|
||||
/// \brief Returns a 128-bit vector of [2 x double] where the values are
|
||||
/// Returns a 128-bit vector of [2 x double] where the values are
|
||||
/// selected from either the first or second operand as specified by the
|
||||
/// third operand, the control mask.
|
||||
///
|
||||
@@ -453,7 +448,7 @@ _mm_blendv_pd (__m128d __V1, __m128d __V2, __m128d __M)
|
||||
(__v2df)__M);
|
||||
}
|
||||
|
||||
/// \brief Returns a 128-bit vector of [4 x float] where the values are
|
||||
/// Returns a 128-bit vector of [4 x float] where the values are
|
||||
/// selected from either the first or second operand as specified by the
|
||||
/// third operand, the control mask.
|
||||
///
|
||||
@@ -480,7 +475,7 @@ _mm_blendv_ps (__m128 __V1, __m128 __V2, __m128 __M)
|
||||
(__v4sf)__M);
|
||||
}
|
||||
|
||||
/// \brief Returns a 128-bit vector of [16 x i8] where the values are selected
|
||||
/// Returns a 128-bit vector of [16 x i8] where the values are selected
|
||||
/// from either of the first or second operand as specified by the third
|
||||
/// operand, the control mask.
|
||||
///
|
||||
@@ -493,7 +488,7 @@ _mm_blendv_ps (__m128 __V1, __m128 __V2, __m128 __M)
|
||||
/// \param __V2
|
||||
/// A 128-bit vector of [16 x i8].
|
||||
/// \param __M
|
||||
/// A 128-bit vector operand, with mask bits 127, 119, 111 ... 7 specifying
|
||||
/// A 128-bit vector operand, with mask bits 127, 119, 111...7 specifying
|
||||
/// how the values are to be copied. The position of the mask bit corresponds
|
||||
/// to the most significant bit of a copied value. When a mask bit is 0, the
|
||||
/// corresponding 8-bit element in operand \a __V1 is copied to the same
|
||||
@@ -507,7 +502,7 @@ _mm_blendv_epi8 (__m128i __V1, __m128i __V2, __m128i __M)
|
||||
(__v16qi)__M);
|
||||
}
|
||||
|
||||
/// \brief Returns a 128-bit vector of [8 x i16] where the values are selected
|
||||
/// Returns a 128-bit vector of [8 x i16] where the values are selected
|
||||
/// from either of the first or second operand as specified by the third
|
||||
/// operand, the control mask.
|
||||
///
|
||||
@@ -531,20 +526,12 @@ _mm_blendv_epi8 (__m128i __V1, __m128i __V2, __m128i __M)
|
||||
/// When a mask bit is 1, the corresponding 16-bit element in operand \a V2
|
||||
/// is copied to the same position in the result.
|
||||
/// \returns A 128-bit vector of [8 x i16] containing the copied values.
|
||||
#define _mm_blend_epi16(V1, V2, M) __extension__ ({ \
|
||||
(__m128i)__builtin_shufflevector((__v8hi)(__m128i)(V1), \
|
||||
(__v8hi)(__m128i)(V2), \
|
||||
(((M) & 0x01) ? 8 : 0), \
|
||||
(((M) & 0x02) ? 9 : 1), \
|
||||
(((M) & 0x04) ? 10 : 2), \
|
||||
(((M) & 0x08) ? 11 : 3), \
|
||||
(((M) & 0x10) ? 12 : 4), \
|
||||
(((M) & 0x20) ? 13 : 5), \
|
||||
(((M) & 0x40) ? 14 : 6), \
|
||||
(((M) & 0x80) ? 15 : 7)); })
|
||||
#define _mm_blend_epi16(V1, V2, M) \
|
||||
(__m128i) __builtin_ia32_pblendw128 ((__v8hi)(__m128i)(V1), \
|
||||
(__v8hi)(__m128i)(V2), (int)(M))
|
||||
|
||||
/* SSE4 Dword Multiply Instructions. */
|
||||
/// \brief Multiples corresponding elements of two 128-bit vectors of [4 x i32]
|
||||
/// Multiples corresponding elements of two 128-bit vectors of [4 x i32]
|
||||
/// and returns the lower 32 bits of the each product in a 128-bit vector of
|
||||
/// [4 x i32].
|
||||
///
|
||||
@@ -563,7 +550,7 @@ _mm_mullo_epi32 (__m128i __V1, __m128i __V2)
|
||||
return (__m128i) ((__v4su)__V1 * (__v4su)__V2);
|
||||
}
|
||||
|
||||
/// \brief Multiplies corresponding even-indexed elements of two 128-bit
|
||||
/// Multiplies corresponding even-indexed elements of two 128-bit
|
||||
/// vectors of [4 x i32] and returns a 128-bit vector of [2 x i64]
|
||||
/// containing the products.
|
||||
///
|
||||
@@ -584,7 +571,7 @@ _mm_mul_epi32 (__m128i __V1, __m128i __V2)
|
||||
}
|
||||
|
||||
/* SSE4 Floating Point Dot Product Instructions. */
|
||||
/// \brief Computes the dot product of the two 128-bit vectors of [4 x float]
|
||||
/// Computes the dot product of the two 128-bit vectors of [4 x float]
|
||||
/// and returns it in the elements of the 128-bit result vector of
|
||||
/// [4 x float].
|
||||
///
|
||||
@@ -616,11 +603,11 @@ _mm_mul_epi32 (__m128i __V1, __m128i __V2)
|
||||
/// each [4 x float] subvector. If a bit is set, the dot product is returned
|
||||
/// in the corresponding element; otherwise that element is set to zero.
|
||||
/// \returns A 128-bit vector of [4 x float] containing the dot product.
|
||||
#define _mm_dp_ps(X, Y, M) __extension__ ({ \
|
||||
#define _mm_dp_ps(X, Y, M) \
|
||||
(__m128) __builtin_ia32_dpps((__v4sf)(__m128)(X), \
|
||||
(__v4sf)(__m128)(Y), (M)); })
|
||||
(__v4sf)(__m128)(Y), (M))
|
||||
|
||||
/// \brief Computes the dot product of the two 128-bit vectors of [2 x double]
|
||||
/// Computes the dot product of the two 128-bit vectors of [2 x double]
|
||||
/// and returns it in the elements of the 128-bit result vector of
|
||||
/// [2 x double].
|
||||
///
|
||||
@@ -651,12 +638,12 @@ _mm_mul_epi32 (__m128i __V1, __m128i __V2)
|
||||
/// to the lowest element and bit [1] corresponding to the highest element of
|
||||
/// each [2 x double] vector. If a bit is set, the dot product is returned in
|
||||
/// the corresponding element; otherwise that element is set to zero.
|
||||
#define _mm_dp_pd(X, Y, M) __extension__ ({\
|
||||
#define _mm_dp_pd(X, Y, M) \
|
||||
(__m128d) __builtin_ia32_dppd((__v2df)(__m128d)(X), \
|
||||
(__v2df)(__m128d)(Y), (M)); })
|
||||
(__v2df)(__m128d)(Y), (M))
|
||||
|
||||
/* SSE4 Streaming Load Hint Instruction. */
|
||||
/// \brief Loads integer values from a 128-bit aligned memory location to a
|
||||
/// Loads integer values from a 128-bit aligned memory location to a
|
||||
/// 128-bit integer vector.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -675,7 +662,7 @@ _mm_stream_load_si128 (__m128i const *__V)
|
||||
}
|
||||
|
||||
/* SSE4 Packed Integer Min/Max Instructions. */
|
||||
/// \brief Compares the corresponding elements of two 128-bit vectors of
|
||||
/// Compares the corresponding elements of two 128-bit vectors of
|
||||
/// [16 x i8] and returns a 128-bit vector of [16 x i8] containing the lesser
|
||||
/// of the two values.
|
||||
///
|
||||
@@ -694,7 +681,7 @@ _mm_min_epi8 (__m128i __V1, __m128i __V2)
|
||||
return (__m128i) __builtin_ia32_pminsb128 ((__v16qi) __V1, (__v16qi) __V2);
|
||||
}
|
||||
|
||||
/// \brief Compares the corresponding elements of two 128-bit vectors of
|
||||
/// Compares the corresponding elements of two 128-bit vectors of
|
||||
/// [16 x i8] and returns a 128-bit vector of [16 x i8] containing the
|
||||
/// greater value of the two.
|
||||
///
|
||||
@@ -713,7 +700,7 @@ _mm_max_epi8 (__m128i __V1, __m128i __V2)
|
||||
return (__m128i) __builtin_ia32_pmaxsb128 ((__v16qi) __V1, (__v16qi) __V2);
|
||||
}
|
||||
|
||||
/// \brief Compares the corresponding elements of two 128-bit vectors of
|
||||
/// Compares the corresponding elements of two 128-bit vectors of
|
||||
/// [8 x u16] and returns a 128-bit vector of [8 x u16] containing the lesser
|
||||
/// value of the two.
|
||||
///
|
||||
@@ -732,7 +719,7 @@ _mm_min_epu16 (__m128i __V1, __m128i __V2)
|
||||
return (__m128i) __builtin_ia32_pminuw128 ((__v8hi) __V1, (__v8hi) __V2);
|
||||
}
|
||||
|
||||
/// \brief Compares the corresponding elements of two 128-bit vectors of
|
||||
/// Compares the corresponding elements of two 128-bit vectors of
|
||||
/// [8 x u16] and returns a 128-bit vector of [8 x u16] containing the
|
||||
/// greater value of the two.
|
||||
///
|
||||
@@ -751,7 +738,7 @@ _mm_max_epu16 (__m128i __V1, __m128i __V2)
|
||||
return (__m128i) __builtin_ia32_pmaxuw128 ((__v8hi) __V1, (__v8hi) __V2);
|
||||
}
|
||||
|
||||
/// \brief Compares the corresponding elements of two 128-bit vectors of
|
||||
/// Compares the corresponding elements of two 128-bit vectors of
|
||||
/// [4 x i32] and returns a 128-bit vector of [4 x i32] containing the lesser
|
||||
/// value of the two.
|
||||
///
|
||||
@@ -770,7 +757,7 @@ _mm_min_epi32 (__m128i __V1, __m128i __V2)
|
||||
return (__m128i) __builtin_ia32_pminsd128 ((__v4si) __V1, (__v4si) __V2);
|
||||
}
|
||||
|
||||
/// \brief Compares the corresponding elements of two 128-bit vectors of
|
||||
/// Compares the corresponding elements of two 128-bit vectors of
|
||||
/// [4 x i32] and returns a 128-bit vector of [4 x i32] containing the
|
||||
/// greater value of the two.
|
||||
///
|
||||
@@ -789,7 +776,7 @@ _mm_max_epi32 (__m128i __V1, __m128i __V2)
|
||||
return (__m128i) __builtin_ia32_pmaxsd128 ((__v4si) __V1, (__v4si) __V2);
|
||||
}
|
||||
|
||||
/// \brief Compares the corresponding elements of two 128-bit vectors of
|
||||
/// Compares the corresponding elements of two 128-bit vectors of
|
||||
/// [4 x u32] and returns a 128-bit vector of [4 x u32] containing the lesser
|
||||
/// value of the two.
|
||||
///
|
||||
@@ -808,7 +795,7 @@ _mm_min_epu32 (__m128i __V1, __m128i __V2)
|
||||
return (__m128i) __builtin_ia32_pminud128((__v4si) __V1, (__v4si) __V2);
|
||||
}
|
||||
|
||||
/// \brief Compares the corresponding elements of two 128-bit vectors of
|
||||
/// Compares the corresponding elements of two 128-bit vectors of
|
||||
/// [4 x u32] and returns a 128-bit vector of [4 x u32] containing the
|
||||
/// greater value of the two.
|
||||
///
|
||||
@@ -828,7 +815,7 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
}
|
||||
|
||||
/* SSE4 Insertion and Extraction from XMM Register Instructions. */
|
||||
/// \brief Takes the first argument \a X and inserts an element from the second
|
||||
/// Takes the first argument \a X and inserts an element from the second
|
||||
/// argument \a Y as selected by the third argument \a N. That result then
|
||||
/// has elements zeroed out also as selected by the third argument \a N. The
|
||||
/// resulting 128-bit vector of [4 x float] is then returned.
|
||||
@@ -870,7 +857,7 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
/// single-precision floating point elements from the operands.
|
||||
#define _mm_insert_ps(X, Y, N) __builtin_ia32_insertps128((X), (Y), (N))
|
||||
|
||||
/// \brief Extracts a 32-bit integer from a 128-bit vector of [4 x float] and
|
||||
/// Extracts a 32-bit integer from a 128-bit vector of [4 x float] and
|
||||
/// returns it, using the immediate value parameter \a N as a selector.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -893,15 +880,14 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
/// 11: Bits [127:96] of parameter \a X are returned.
|
||||
/// \returns A 32-bit integer containing the extracted 32 bits of float data.
|
||||
#define _mm_extract_ps(X, N) (__extension__ \
|
||||
({ union { int __i; float __f; } __t; \
|
||||
__v4sf __a = (__v4sf)(__m128)(X); \
|
||||
__t.__f = __a[(N) & 3]; \
|
||||
__t.__i;}))
|
||||
({ union { int __i; float __f; } __t; \
|
||||
__t.__f = __builtin_ia32_vec_ext_v4sf((__v4sf)(__m128)(X), (int)(N)); \
|
||||
__t.__i;}))
|
||||
|
||||
/* Miscellaneous insert and extract macros. */
|
||||
/* Extract a single-precision float from X at index N into D. */
|
||||
#define _MM_EXTRACT_FLOAT(D, X, N) (__extension__ ({ __v4sf __a = (__v4sf)(X); \
|
||||
(D) = __a[N]; }))
|
||||
#define _MM_EXTRACT_FLOAT(D, X, N) \
|
||||
{ (D) = __builtin_ia32_vec_ext_v4sf((__v4sf)(__m128)(X), (int)(N)); }
|
||||
|
||||
/* Or together 2 sets of indexes (X and Y) with the zeroing bits (Z) to create
|
||||
an index suitable for _mm_insert_ps. */
|
||||
@@ -912,7 +898,7 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
_MM_MK_INSERTPS_NDX((N), 0, 0x0e))
|
||||
|
||||
/* Insert int into packed integer array at index. */
|
||||
/// \brief Constructs a 128-bit vector of [16 x i8] by first making a copy of
|
||||
/// Constructs a 128-bit vector of [16 x i8] by first making a copy of
|
||||
/// the 128-bit integer vector parameter, and then inserting the lower 8 bits
|
||||
/// of an integer parameter \a I into an offset specified by the immediate
|
||||
/// value parameter \a N.
|
||||
@@ -952,12 +938,11 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
/// 1110: Bits [119:112] of the result are used for insertion. \n
|
||||
/// 1111: Bits [127:120] of the result are used for insertion.
|
||||
/// \returns A 128-bit integer vector containing the constructed values.
|
||||
#define _mm_insert_epi8(X, I, N) (__extension__ \
|
||||
({ __v16qi __a = (__v16qi)(__m128i)(X); \
|
||||
__a[(N) & 15] = (I); \
|
||||
(__m128i)__a;}))
|
||||
#define _mm_insert_epi8(X, I, N) \
|
||||
(__m128i)__builtin_ia32_vec_set_v16qi((__v16qi)(__m128i)(X), \
|
||||
(int)(I), (int)(N))
|
||||
|
||||
/// \brief Constructs a 128-bit vector of [4 x i32] by first making a copy of
|
||||
/// Constructs a 128-bit vector of [4 x i32] by first making a copy of
|
||||
/// the 128-bit integer vector parameter, and then inserting the 32-bit
|
||||
/// integer parameter \a I at the offset specified by the immediate value
|
||||
/// parameter \a N.
|
||||
@@ -985,13 +970,12 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
/// 10: Bits [95:64] of the result are used for insertion. \n
|
||||
/// 11: Bits [127:96] of the result are used for insertion.
|
||||
/// \returns A 128-bit integer vector containing the constructed values.
|
||||
#define _mm_insert_epi32(X, I, N) (__extension__ \
|
||||
({ __v4si __a = (__v4si)(__m128i)(X); \
|
||||
__a[(N) & 3] = (I); \
|
||||
(__m128i)__a;}))
|
||||
#define _mm_insert_epi32(X, I, N) \
|
||||
(__m128i)__builtin_ia32_vec_set_v4si((__v4si)(__m128i)(X), \
|
||||
(int)(I), (int)(N))
|
||||
|
||||
#ifdef __x86_64__
|
||||
/// \brief Constructs a 128-bit vector of [2 x i64] by first making a copy of
|
||||
/// Constructs a 128-bit vector of [2 x i64] by first making a copy of
|
||||
/// the 128-bit integer vector parameter, and then inserting the 64-bit
|
||||
/// integer parameter \a I, using the immediate value parameter \a N as an
|
||||
/// insertion location selector.
|
||||
@@ -1017,16 +1001,15 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
/// 0: Bits [63:0] of the result are used for insertion. \n
|
||||
/// 1: Bits [127:64] of the result are used for insertion. \n
|
||||
/// \returns A 128-bit integer vector containing the constructed values.
|
||||
#define _mm_insert_epi64(X, I, N) (__extension__ \
|
||||
({ __v2di __a = (__v2di)(__m128i)(X); \
|
||||
__a[(N) & 1] = (I); \
|
||||
(__m128i)__a;}))
|
||||
#define _mm_insert_epi64(X, I, N) \
|
||||
(__m128i)__builtin_ia32_vec_set_v2di((__v2di)(__m128i)(X), \
|
||||
(long long)(I), (int)(N))
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
/* Extract int from packed integer array at index. This returns the element
|
||||
* as a zero extended value, so it is unsigned.
|
||||
*/
|
||||
/// \brief Extracts an 8-bit element from the 128-bit integer vector of
|
||||
/// Extracts an 8-bit element from the 128-bit integer vector of
|
||||
/// [16 x i8], using the immediate value parameter \a N as a selector.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1061,11 +1044,11 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
/// \returns An unsigned integer, whose lower 8 bits are selected from the
|
||||
/// 128-bit integer vector parameter and the remaining bits are assigned
|
||||
/// zeros.
|
||||
#define _mm_extract_epi8(X, N) (__extension__ \
|
||||
({ __v16qi __a = (__v16qi)(__m128i)(X); \
|
||||
(int)(unsigned char) __a[(N) & 15];}))
|
||||
#define _mm_extract_epi8(X, N) \
|
||||
(int)(unsigned char)__builtin_ia32_vec_ext_v16qi((__v16qi)(__m128i)(X), \
|
||||
(int)(N))
|
||||
|
||||
/// \brief Extracts a 32-bit element from the 128-bit integer vector of
|
||||
/// Extracts a 32-bit element from the 128-bit integer vector of
|
||||
/// [4 x i32], using the immediate value parameter \a N as a selector.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1087,12 +1070,11 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
/// 11: Bits [127:96] of the parameter \a X are exracted.
|
||||
/// \returns An integer, whose lower 32 bits are selected from the 128-bit
|
||||
/// integer vector parameter and the remaining bits are assigned zeros.
|
||||
#define _mm_extract_epi32(X, N) (__extension__ \
|
||||
({ __v4si __a = (__v4si)(__m128i)(X); \
|
||||
(int)__a[(N) & 3];}))
|
||||
#define _mm_extract_epi32(X, N) \
|
||||
(int)__builtin_ia32_vec_ext_v4si((__v4si)(__m128i)(X), (int)(N))
|
||||
|
||||
#ifdef __x86_64__
|
||||
/// \brief Extracts a 64-bit element from the 128-bit integer vector of
|
||||
/// Extracts a 64-bit element from the 128-bit integer vector of
|
||||
/// [2 x i64], using the immediate value parameter \a N as a selector.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1111,13 +1093,12 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
||||
/// 0: Bits [63:0] are returned. \n
|
||||
/// 1: Bits [127:64] are returned. \n
|
||||
/// \returns A 64-bit integer.
|
||||
#define _mm_extract_epi64(X, N) (__extension__ \
|
||||
({ __v2di __a = (__v2di)(__m128i)(X); \
|
||||
(long long)__a[(N) & 1];}))
|
||||
#define _mm_extract_epi64(X, N) \
|
||||
(long long)__builtin_ia32_vec_ext_v2di((__v2di)(__m128i)(X), (int)(N))
|
||||
#endif /* __x86_64 */
|
||||
|
||||
/* SSE4 128-bit Packed Integer Comparisons. */
|
||||
/// \brief Tests whether the specified bits in a 128-bit integer vector are all
|
||||
/// Tests whether the specified bits in a 128-bit integer vector are all
|
||||
/// zeros.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1135,7 +1116,7 @@ _mm_testz_si128(__m128i __M, __m128i __V)
|
||||
return __builtin_ia32_ptestz128((__v2di)__M, (__v2di)__V);
|
||||
}
|
||||
|
||||
/// \brief Tests whether the specified bits in a 128-bit integer vector are all
|
||||
/// Tests whether the specified bits in a 128-bit integer vector are all
|
||||
/// ones.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1153,7 +1134,7 @@ _mm_testc_si128(__m128i __M, __m128i __V)
|
||||
return __builtin_ia32_ptestc128((__v2di)__M, (__v2di)__V);
|
||||
}
|
||||
|
||||
/// \brief Tests whether the specified bits in a 128-bit integer vector are
|
||||
/// Tests whether the specified bits in a 128-bit integer vector are
|
||||
/// neither all zeros nor all ones.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1172,7 +1153,7 @@ _mm_testnzc_si128(__m128i __M, __m128i __V)
|
||||
return __builtin_ia32_ptestnzc128((__v2di)__M, (__v2di)__V);
|
||||
}
|
||||
|
||||
/// \brief Tests whether the specified bits in a 128-bit integer vector are all
|
||||
/// Tests whether the specified bits in a 128-bit integer vector are all
|
||||
/// ones.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1189,7 +1170,7 @@ _mm_testnzc_si128(__m128i __M, __m128i __V)
|
||||
/// otherwise.
|
||||
#define _mm_test_all_ones(V) _mm_testc_si128((V), _mm_cmpeq_epi32((V), (V)))
|
||||
|
||||
/// \brief Tests whether the specified bits in a 128-bit integer vector are
|
||||
/// Tests whether the specified bits in a 128-bit integer vector are
|
||||
/// neither all zeros nor all ones.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1208,7 +1189,7 @@ _mm_testnzc_si128(__m128i __M, __m128i __V)
|
||||
/// FALSE otherwise.
|
||||
#define _mm_test_mix_ones_zeros(M, V) _mm_testnzc_si128((M), (V))
|
||||
|
||||
/// \brief Tests whether the specified bits in a 128-bit integer vector are all
|
||||
/// Tests whether the specified bits in a 128-bit integer vector are all
|
||||
/// zeros.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1227,7 +1208,7 @@ _mm_testnzc_si128(__m128i __M, __m128i __V)
|
||||
#define _mm_test_all_zeros(M, V) _mm_testz_si128 ((M), (V))
|
||||
|
||||
/* SSE4 64-bit Packed Integer Comparisons. */
|
||||
/// \brief Compares each of the corresponding 64-bit values of the 128-bit
|
||||
/// Compares each of the corresponding 64-bit values of the 128-bit
|
||||
/// integer vectors for equality.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1246,7 +1227,7 @@ _mm_cmpeq_epi64(__m128i __V1, __m128i __V2)
|
||||
}
|
||||
|
||||
/* SSE4 Packed Integer Sign-Extension. */
|
||||
/// \brief Sign-extends each of the lower eight 8-bit integer elements of a
|
||||
/// Sign-extends each of the lower eight 8-bit integer elements of a
|
||||
/// 128-bit vector of [16 x i8] to 16-bit values and returns them in a
|
||||
/// 128-bit vector of [8 x i16]. The upper eight elements of the input vector
|
||||
/// are unused.
|
||||
@@ -1267,7 +1248,7 @@ _mm_cvtepi8_epi16(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1, 2, 3, 4, 5, 6, 7), __v8hi);
|
||||
}
|
||||
|
||||
/// \brief Sign-extends each of the lower four 8-bit integer elements of a
|
||||
/// Sign-extends each of the lower four 8-bit integer elements of a
|
||||
/// 128-bit vector of [16 x i8] to 32-bit values and returns them in a
|
||||
/// 128-bit vector of [4 x i32]. The upper twelve elements of the input
|
||||
/// vector are unused.
|
||||
@@ -1277,8 +1258,8 @@ _mm_cvtepi8_epi16(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVSXBD / PMOVSXBD </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [16 x i8]. The lower four 8-bit elements are sign-
|
||||
/// extended to 32-bit values.
|
||||
/// A 128-bit vector of [16 x i8]. The lower four 8-bit elements are
|
||||
/// sign-extended to 32-bit values.
|
||||
/// \returns A 128-bit vector of [4 x i32] containing the sign-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepi8_epi32(__m128i __V)
|
||||
@@ -1288,7 +1269,7 @@ _mm_cvtepi8_epi32(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1, 2, 3), __v4si);
|
||||
}
|
||||
|
||||
/// \brief Sign-extends each of the lower two 8-bit integer elements of a
|
||||
/// Sign-extends each of the lower two 8-bit integer elements of a
|
||||
/// 128-bit integer vector of [16 x i8] to 64-bit values and returns them in
|
||||
/// a 128-bit vector of [2 x i64]. The upper fourteen elements of the input
|
||||
/// vector are unused.
|
||||
@@ -1298,8 +1279,8 @@ _mm_cvtepi8_epi32(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVSXBQ / PMOVSXBQ </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [16 x i8]. The lower two 8-bit elements are sign-
|
||||
/// extended to 64-bit values.
|
||||
/// A 128-bit vector of [16 x i8]. The lower two 8-bit elements are
|
||||
/// sign-extended to 64-bit values.
|
||||
/// \returns A 128-bit vector of [2 x i64] containing the sign-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepi8_epi64(__m128i __V)
|
||||
@@ -1309,7 +1290,7 @@ _mm_cvtepi8_epi64(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1), __v2di);
|
||||
}
|
||||
|
||||
/// \brief Sign-extends each of the lower four 16-bit integer elements of a
|
||||
/// Sign-extends each of the lower four 16-bit integer elements of a
|
||||
/// 128-bit integer vector of [8 x i16] to 32-bit values and returns them in
|
||||
/// a 128-bit vector of [4 x i32]. The upper four elements of the input
|
||||
/// vector are unused.
|
||||
@@ -1319,8 +1300,8 @@ _mm_cvtepi8_epi64(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVSXWD / PMOVSXWD </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [8 x i16]. The lower four 16-bit elements are sign-
|
||||
/// extended to 32-bit values.
|
||||
/// A 128-bit vector of [8 x i16]. The lower four 16-bit elements are
|
||||
/// sign-extended to 32-bit values.
|
||||
/// \returns A 128-bit vector of [4 x i32] containing the sign-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepi16_epi32(__m128i __V)
|
||||
@@ -1328,7 +1309,7 @@ _mm_cvtepi16_epi32(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v8hi)__V, (__v8hi)__V, 0, 1, 2, 3), __v4si);
|
||||
}
|
||||
|
||||
/// \brief Sign-extends each of the lower two 16-bit integer elements of a
|
||||
/// Sign-extends each of the lower two 16-bit integer elements of a
|
||||
/// 128-bit integer vector of [8 x i16] to 64-bit values and returns them in
|
||||
/// a 128-bit vector of [2 x i64]. The upper six elements of the input
|
||||
/// vector are unused.
|
||||
@@ -1338,8 +1319,8 @@ _mm_cvtepi16_epi32(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVSXWQ / PMOVSXWQ </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [8 x i16]. The lower two 16-bit elements are sign-
|
||||
/// extended to 64-bit values.
|
||||
/// A 128-bit vector of [8 x i16]. The lower two 16-bit elements are
|
||||
/// sign-extended to 64-bit values.
|
||||
/// \returns A 128-bit vector of [2 x i64] containing the sign-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepi16_epi64(__m128i __V)
|
||||
@@ -1347,7 +1328,7 @@ _mm_cvtepi16_epi64(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v8hi)__V, (__v8hi)__V, 0, 1), __v2di);
|
||||
}
|
||||
|
||||
/// \brief Sign-extends each of the lower two 32-bit integer elements of a
|
||||
/// Sign-extends each of the lower two 32-bit integer elements of a
|
||||
/// 128-bit integer vector of [4 x i32] to 64-bit values and returns them in
|
||||
/// a 128-bit vector of [2 x i64]. The upper two elements of the input vector
|
||||
/// are unused.
|
||||
@@ -1357,8 +1338,8 @@ _mm_cvtepi16_epi64(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVSXDQ / PMOVSXDQ </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [4 x i32]. The lower two 32-bit elements are sign-
|
||||
/// extended to 64-bit values.
|
||||
/// A 128-bit vector of [4 x i32]. The lower two 32-bit elements are
|
||||
/// sign-extended to 64-bit values.
|
||||
/// \returns A 128-bit vector of [2 x i64] containing the sign-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepi32_epi64(__m128i __V)
|
||||
@@ -1367,7 +1348,7 @@ _mm_cvtepi32_epi64(__m128i __V)
|
||||
}
|
||||
|
||||
/* SSE4 Packed Integer Zero-Extension. */
|
||||
/// \brief Zero-extends each of the lower eight 8-bit integer elements of a
|
||||
/// Zero-extends each of the lower eight 8-bit integer elements of a
|
||||
/// 128-bit vector of [16 x i8] to 16-bit values and returns them in a
|
||||
/// 128-bit vector of [8 x i16]. The upper eight elements of the input vector
|
||||
/// are unused.
|
||||
@@ -1377,8 +1358,8 @@ _mm_cvtepi32_epi64(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVZXBW / PMOVZXBW </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [16 x i8]. The lower eight 8-bit elements are zero-
|
||||
/// extended to 16-bit values.
|
||||
/// A 128-bit vector of [16 x i8]. The lower eight 8-bit elements are
|
||||
/// zero-extended to 16-bit values.
|
||||
/// \returns A 128-bit vector of [8 x i16] containing the zero-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepu8_epi16(__m128i __V)
|
||||
@@ -1386,7 +1367,7 @@ _mm_cvtepu8_epi16(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qu)__V, (__v16qu)__V, 0, 1, 2, 3, 4, 5, 6, 7), __v8hi);
|
||||
}
|
||||
|
||||
/// \brief Zero-extends each of the lower four 8-bit integer elements of a
|
||||
/// Zero-extends each of the lower four 8-bit integer elements of a
|
||||
/// 128-bit vector of [16 x i8] to 32-bit values and returns them in a
|
||||
/// 128-bit vector of [4 x i32]. The upper twelve elements of the input
|
||||
/// vector are unused.
|
||||
@@ -1396,8 +1377,8 @@ _mm_cvtepu8_epi16(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVZXBD / PMOVZXBD </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [16 x i8]. The lower four 8-bit elements are zero-
|
||||
/// extended to 32-bit values.
|
||||
/// A 128-bit vector of [16 x i8]. The lower four 8-bit elements are
|
||||
/// zero-extended to 32-bit values.
|
||||
/// \returns A 128-bit vector of [4 x i32] containing the zero-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepu8_epi32(__m128i __V)
|
||||
@@ -1405,7 +1386,7 @@ _mm_cvtepu8_epi32(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qu)__V, (__v16qu)__V, 0, 1, 2, 3), __v4si);
|
||||
}
|
||||
|
||||
/// \brief Zero-extends each of the lower two 8-bit integer elements of a
|
||||
/// Zero-extends each of the lower two 8-bit integer elements of a
|
||||
/// 128-bit integer vector of [16 x i8] to 64-bit values and returns them in
|
||||
/// a 128-bit vector of [2 x i64]. The upper fourteen elements of the input
|
||||
/// vector are unused.
|
||||
@@ -1415,8 +1396,8 @@ _mm_cvtepu8_epi32(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVZXBQ / PMOVZXBQ </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [16 x i8]. The lower two 8-bit elements are zero-
|
||||
/// extended to 64-bit values.
|
||||
/// A 128-bit vector of [16 x i8]. The lower two 8-bit elements are
|
||||
/// zero-extended to 64-bit values.
|
||||
/// \returns A 128-bit vector of [2 x i64] containing the zero-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepu8_epi64(__m128i __V)
|
||||
@@ -1424,7 +1405,7 @@ _mm_cvtepu8_epi64(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qu)__V, (__v16qu)__V, 0, 1), __v2di);
|
||||
}
|
||||
|
||||
/// \brief Zero-extends each of the lower four 16-bit integer elements of a
|
||||
/// Zero-extends each of the lower four 16-bit integer elements of a
|
||||
/// 128-bit integer vector of [8 x i16] to 32-bit values and returns them in
|
||||
/// a 128-bit vector of [4 x i32]. The upper four elements of the input
|
||||
/// vector are unused.
|
||||
@@ -1434,8 +1415,8 @@ _mm_cvtepu8_epi64(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVZXWD / PMOVZXWD </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [8 x i16]. The lower four 16-bit elements are zero-
|
||||
/// extended to 32-bit values.
|
||||
/// A 128-bit vector of [8 x i16]. The lower four 16-bit elements are
|
||||
/// zero-extended to 32-bit values.
|
||||
/// \returns A 128-bit vector of [4 x i32] containing the zero-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepu16_epi32(__m128i __V)
|
||||
@@ -1443,7 +1424,7 @@ _mm_cvtepu16_epi32(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v8hu)__V, (__v8hu)__V, 0, 1, 2, 3), __v4si);
|
||||
}
|
||||
|
||||
/// \brief Zero-extends each of the lower two 16-bit integer elements of a
|
||||
/// Zero-extends each of the lower two 16-bit integer elements of a
|
||||
/// 128-bit integer vector of [8 x i16] to 64-bit values and returns them in
|
||||
/// a 128-bit vector of [2 x i64]. The upper six elements of the input vector
|
||||
/// are unused.
|
||||
@@ -1453,8 +1434,8 @@ _mm_cvtepu16_epi32(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVZXWQ / PMOVZXWQ </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [8 x i16]. The lower two 16-bit elements are zero-
|
||||
/// extended to 64-bit values.
|
||||
/// A 128-bit vector of [8 x i16]. The lower two 16-bit elements are
|
||||
/// zero-extended to 64-bit values.
|
||||
/// \returns A 128-bit vector of [2 x i64] containing the zero-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepu16_epi64(__m128i __V)
|
||||
@@ -1462,7 +1443,7 @@ _mm_cvtepu16_epi64(__m128i __V)
|
||||
return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v8hu)__V, (__v8hu)__V, 0, 1), __v2di);
|
||||
}
|
||||
|
||||
/// \brief Zero-extends each of the lower two 32-bit integer elements of a
|
||||
/// Zero-extends each of the lower two 32-bit integer elements of a
|
||||
/// 128-bit integer vector of [4 x i32] to 64-bit values and returns them in
|
||||
/// a 128-bit vector of [2 x i64]. The upper two elements of the input vector
|
||||
/// are unused.
|
||||
@@ -1472,8 +1453,8 @@ _mm_cvtepu16_epi64(__m128i __V)
|
||||
/// This intrinsic corresponds to the <c> VPMOVZXDQ / PMOVZXDQ </c> instruction.
|
||||
///
|
||||
/// \param __V
|
||||
/// A 128-bit vector of [4 x i32]. The lower two 32-bit elements are zero-
|
||||
/// extended to 64-bit values.
|
||||
/// A 128-bit vector of [4 x i32]. The lower two 32-bit elements are
|
||||
/// zero-extended to 64-bit values.
|
||||
/// \returns A 128-bit vector of [2 x i64] containing the zero-extended values.
|
||||
static __inline__ __m128i __DEFAULT_FN_ATTRS
|
||||
_mm_cvtepu32_epi64(__m128i __V)
|
||||
@@ -1482,7 +1463,7 @@ _mm_cvtepu32_epi64(__m128i __V)
|
||||
}
|
||||
|
||||
/* SSE4 Pack with Unsigned Saturation. */
|
||||
/// \brief Converts 32-bit signed integers from both 128-bit integer vector
|
||||
/// Converts 32-bit signed integers from both 128-bit integer vector
|
||||
/// operands into 16-bit unsigned integers, and returns the packed result.
|
||||
/// Values greater than 0xFFFF are saturated to 0xFFFF. Values less than
|
||||
/// 0x0000 are saturated to 0x0000.
|
||||
@@ -1511,7 +1492,7 @@ _mm_packus_epi32(__m128i __V1, __m128i __V2)
|
||||
}
|
||||
|
||||
/* SSE4 Multiple Packed Sums of Absolute Difference. */
|
||||
/// \brief Subtracts 8-bit unsigned integer values and computes the absolute
|
||||
/// Subtracts 8-bit unsigned integer values and computes the absolute
|
||||
/// values of the differences to the corresponding bits in the destination.
|
||||
/// Then sums of the absolute differences are returned according to the bit
|
||||
/// fields in the immediate operand.
|
||||
@@ -1534,23 +1515,23 @@ _mm_packus_epi32(__m128i __V1, __m128i __V2)
|
||||
/// \code
|
||||
/// // M2 represents bit 2 of the immediate operand
|
||||
/// // M10 represents bits [1:0] of the immediate operand
|
||||
/// i = M2 * 4
|
||||
/// j = M10 * 4
|
||||
/// i = M2 * 4;
|
||||
/// j = M10 * 4;
|
||||
/// for (k = 0; k < 8; k = k + 1) {
|
||||
/// d0 = abs(X[i + k + 0] - Y[j + 0])
|
||||
/// d1 = abs(X[i + k + 1] - Y[j + 1])
|
||||
/// d2 = abs(X[i + k + 2] - Y[j + 2])
|
||||
/// d3 = abs(X[i + k + 3] - Y[j + 3])
|
||||
/// r[k] = d0 + d1 + d2 + d3
|
||||
/// d0 = abs(X[i + k + 0] - Y[j + 0]);
|
||||
/// d1 = abs(X[i + k + 1] - Y[j + 1]);
|
||||
/// d2 = abs(X[i + k + 2] - Y[j + 2]);
|
||||
/// d3 = abs(X[i + k + 3] - Y[j + 3]);
|
||||
/// r[k] = d0 + d1 + d2 + d3;
|
||||
/// }
|
||||
/// \endcode
|
||||
/// \returns A 128-bit integer vector containing the sums of the sets of
|
||||
/// absolute differences between both operands.
|
||||
#define _mm_mpsadbw_epu8(X, Y, M) __extension__ ({ \
|
||||
#define _mm_mpsadbw_epu8(X, Y, M) \
|
||||
(__m128i) __builtin_ia32_mpsadbw128((__v16qi)(__m128i)(X), \
|
||||
(__v16qi)(__m128i)(Y), (M)); })
|
||||
(__v16qi)(__m128i)(Y), (M))
|
||||
|
||||
/// \brief Finds the minimum unsigned 16-bit element in the input 128-bit
|
||||
/// Finds the minimum unsigned 16-bit element in the input 128-bit
|
||||
/// vector of [8 x u16] and returns it and along with its index.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -1604,7 +1585,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
#define _SIDD_UNIT_MASK 0x40
|
||||
|
||||
/* SSE4.2 Packed Comparison Intrinsics. */
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with implicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns a 128-bit integer vector representing the result
|
||||
/// mask of the comparison.
|
||||
@@ -1660,7 +1641,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(__m128i)__builtin_ia32_pcmpistrm128((__v16qi)(__m128i)(A), \
|
||||
(__v16qi)(__m128i)(B), (int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with implicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns an integer representing the result index of the
|
||||
/// comparison.
|
||||
@@ -1714,7 +1695,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(int)__builtin_ia32_pcmpistri128((__v16qi)(__m128i)(A), \
|
||||
(__v16qi)(__m128i)(B), (int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with explicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns a 128-bit integer vector representing the result
|
||||
/// mask of the comparison.
|
||||
@@ -1775,7 +1756,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(__v16qi)(__m128i)(B), (int)(LB), \
|
||||
(int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with explicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns an integer representing the result index of the
|
||||
/// comparison.
|
||||
@@ -1835,7 +1816,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(int)(M))
|
||||
|
||||
/* SSE4.2 Packed Comparison Intrinsics and EFlag Reading. */
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with implicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns 1 if the bit mask is zero and the length of the
|
||||
/// string in \a B is the maximum, otherwise, returns 0.
|
||||
@@ -1885,7 +1866,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(int)__builtin_ia32_pcmpistria128((__v16qi)(__m128i)(A), \
|
||||
(__v16qi)(__m128i)(B), (int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with implicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns 1 if the bit mask is non-zero, otherwise, returns
|
||||
/// 0.
|
||||
@@ -1934,7 +1915,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(int)__builtin_ia32_pcmpistric128((__v16qi)(__m128i)(A), \
|
||||
(__v16qi)(__m128i)(B), (int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with implicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns bit 0 of the resulting bit mask.
|
||||
///
|
||||
@@ -1982,7 +1963,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(int)__builtin_ia32_pcmpistrio128((__v16qi)(__m128i)(A), \
|
||||
(__v16qi)(__m128i)(B), (int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with implicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns 1 if the length of the string in \a A is less than
|
||||
/// the maximum, otherwise, returns 0.
|
||||
@@ -2032,7 +2013,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(int)__builtin_ia32_pcmpistris128((__v16qi)(__m128i)(A), \
|
||||
(__v16qi)(__m128i)(B), (int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with implicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns 1 if the length of the string in \a B is less than
|
||||
/// the maximum, otherwise, returns 0.
|
||||
@@ -2082,7 +2063,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(int)__builtin_ia32_pcmpistriz128((__v16qi)(__m128i)(A), \
|
||||
(__v16qi)(__m128i)(B), (int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with explicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns 1 if the bit mask is zero and the length of the
|
||||
/// string in \a B is the maximum, otherwise, returns 0.
|
||||
@@ -2137,7 +2118,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(__v16qi)(__m128i)(B), (int)(LB), \
|
||||
(int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with explicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns 1 if the resulting mask is non-zero, otherwise,
|
||||
/// returns 0.
|
||||
@@ -2191,7 +2172,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(__v16qi)(__m128i)(B), (int)(LB), \
|
||||
(int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with explicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns bit 0 of the resulting bit mask.
|
||||
///
|
||||
@@ -2244,7 +2225,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(__v16qi)(__m128i)(B), (int)(LB), \
|
||||
(int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with explicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns 1 if the length of the string in \a A is less than
|
||||
/// the maximum, otherwise, returns 0.
|
||||
@@ -2299,7 +2280,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(__v16qi)(__m128i)(B), (int)(LB), \
|
||||
(int)(M))
|
||||
|
||||
/// \brief Uses the immediate operand \a M to perform a comparison of string
|
||||
/// Uses the immediate operand \a M to perform a comparison of string
|
||||
/// data with explicitly defined lengths that is contained in source operands
|
||||
/// \a A and \a B. Returns 1 if the length of the string in \a B is less than
|
||||
/// the maximum, otherwise, returns 0.
|
||||
@@ -2354,7 +2335,7 @@ _mm_minpos_epu16(__m128i __V)
|
||||
(int)(M))
|
||||
|
||||
/* SSE4.2 Compare Packed Data -- Greater Than. */
|
||||
/// \brief Compares each of the corresponding 64-bit values of the 128-bit
|
||||
/// Compares each of the corresponding 64-bit values of the 128-bit
|
||||
/// integer vectors to determine if the values in the first operand are
|
||||
/// greater than those in the second operand.
|
||||
///
|
||||
@@ -2374,7 +2355,7 @@ _mm_cmpgt_epi64(__m128i __V1, __m128i __V2)
|
||||
}
|
||||
|
||||
/* SSE4.2 Accumulate CRC32. */
|
||||
/// \brief Adds the unsigned integer operand to the CRC-32C checksum of the
|
||||
/// Adds the unsigned integer operand to the CRC-32C checksum of the
|
||||
/// unsigned char operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -2394,7 +2375,7 @@ _mm_crc32_u8(unsigned int __C, unsigned char __D)
|
||||
return __builtin_ia32_crc32qi(__C, __D);
|
||||
}
|
||||
|
||||
/// \brief Adds the unsigned integer operand to the CRC-32C checksum of the
|
||||
/// Adds the unsigned integer operand to the CRC-32C checksum of the
|
||||
/// unsigned short operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -2414,7 +2395,7 @@ _mm_crc32_u16(unsigned int __C, unsigned short __D)
|
||||
return __builtin_ia32_crc32hi(__C, __D);
|
||||
}
|
||||
|
||||
/// \brief Adds the first unsigned integer operand to the CRC-32C checksum of
|
||||
/// Adds the first unsigned integer operand to the CRC-32C checksum of
|
||||
/// the second unsigned integer operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -2435,7 +2416,7 @@ _mm_crc32_u32(unsigned int __C, unsigned int __D)
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
/// \brief Adds the unsigned integer operand to the CRC-32C checksum of the
|
||||
/// Adds the unsigned integer operand to the CRC-32C checksum of the
|
||||
/// unsigned 64-bit integer operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -2458,8 +2439,6 @@ _mm_crc32_u64(unsigned long long __C, unsigned long long __D)
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
|
||||
#ifdef __POPCNT__
|
||||
#include <popcntintrin.h>
|
||||
#endif
|
||||
|
||||
#endif /* _SMMINTRIN_H */
|
||||
#endif /* __SMMINTRIN_H */
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
*
|
||||
* To accommodate targets that are missing types that are exactly 8, 16, 32, or
|
||||
* 64 bits wide, this implementation takes an approach of cascading
|
||||
* redefintions, redefining __int_leastN_t to successively smaller exact-width
|
||||
* redefinitions, redefining __int_leastN_t to successively smaller exact-width
|
||||
* types. It is therefore important that the types are defined in order of
|
||||
* descending widths.
|
||||
*
|
||||
@@ -461,7 +461,7 @@ typedef __UINTMAX_TYPE__ uintmax_t;
|
||||
* As in the type definitions, this section takes an approach of
|
||||
* successive-shrinking to determine which limits to use for the standard (8,
|
||||
* 16, 32, 64) bit widths when they don't have exact representations. It is
|
||||
* therefore important that the defintions be kept in order of decending
|
||||
* therefore important that the definitions be kept in order of decending
|
||||
* widths.
|
||||
*
|
||||
* Note that C++ should not check __STDC_LIMIT_MACROS here, contrary to the
|
||||
|
||||
@@ -27,9 +27,10 @@
|
||||
#include <pmmintrin.h>
|
||||
|
||||
/* Define the default attributes for the functions in this file. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("ssse3")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("ssse3"), __min_vector_width__(64)))
|
||||
#define __DEFAULT_FN_ATTRS_MMX __attribute__((__always_inline__, __nodebug__, __target__("mmx,ssse3"), __min_vector_width__(64)))
|
||||
|
||||
/// \brief Computes the absolute value of each of the packed 8-bit signed
|
||||
/// Computes the absolute value of each of the packed 8-bit signed
|
||||
/// integers in the source operand and stores the 8-bit unsigned integer
|
||||
/// results in the destination.
|
||||
///
|
||||
@@ -41,13 +42,13 @@
|
||||
/// A 64-bit vector of [8 x i8].
|
||||
/// \returns A 64-bit integer vector containing the absolute values of the
|
||||
/// elements in the operand.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_abs_pi8(__m64 __a)
|
||||
{
|
||||
return (__m64)__builtin_ia32_pabsb((__v8qi)__a);
|
||||
}
|
||||
|
||||
/// \brief Computes the absolute value of each of the packed 8-bit signed
|
||||
/// Computes the absolute value of each of the packed 8-bit signed
|
||||
/// integers in the source operand and stores the 8-bit unsigned integer
|
||||
/// results in the destination.
|
||||
///
|
||||
@@ -65,7 +66,7 @@ _mm_abs_epi8(__m128i __a)
|
||||
return (__m128i)__builtin_ia32_pabsb128((__v16qi)__a);
|
||||
}
|
||||
|
||||
/// \brief Computes the absolute value of each of the packed 16-bit signed
|
||||
/// Computes the absolute value of each of the packed 16-bit signed
|
||||
/// integers in the source operand and stores the 16-bit unsigned integer
|
||||
/// results in the destination.
|
||||
///
|
||||
@@ -77,13 +78,13 @@ _mm_abs_epi8(__m128i __a)
|
||||
/// A 64-bit vector of [4 x i16].
|
||||
/// \returns A 64-bit integer vector containing the absolute values of the
|
||||
/// elements in the operand.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_abs_pi16(__m64 __a)
|
||||
{
|
||||
return (__m64)__builtin_ia32_pabsw((__v4hi)__a);
|
||||
}
|
||||
|
||||
/// \brief Computes the absolute value of each of the packed 16-bit signed
|
||||
/// Computes the absolute value of each of the packed 16-bit signed
|
||||
/// integers in the source operand and stores the 16-bit unsigned integer
|
||||
/// results in the destination.
|
||||
///
|
||||
@@ -101,7 +102,7 @@ _mm_abs_epi16(__m128i __a)
|
||||
return (__m128i)__builtin_ia32_pabsw128((__v8hi)__a);
|
||||
}
|
||||
|
||||
/// \brief Computes the absolute value of each of the packed 32-bit signed
|
||||
/// Computes the absolute value of each of the packed 32-bit signed
|
||||
/// integers in the source operand and stores the 32-bit unsigned integer
|
||||
/// results in the destination.
|
||||
///
|
||||
@@ -113,13 +114,13 @@ _mm_abs_epi16(__m128i __a)
|
||||
/// A 64-bit vector of [2 x i32].
|
||||
/// \returns A 64-bit integer vector containing the absolute values of the
|
||||
/// elements in the operand.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_abs_pi32(__m64 __a)
|
||||
{
|
||||
return (__m64)__builtin_ia32_pabsd((__v2si)__a);
|
||||
}
|
||||
|
||||
/// \brief Computes the absolute value of each of the packed 32-bit signed
|
||||
/// Computes the absolute value of each of the packed 32-bit signed
|
||||
/// integers in the source operand and stores the 32-bit unsigned integer
|
||||
/// results in the destination.
|
||||
///
|
||||
@@ -137,7 +138,7 @@ _mm_abs_epi32(__m128i __a)
|
||||
return (__m128i)__builtin_ia32_pabsd128((__v4si)__a);
|
||||
}
|
||||
|
||||
/// \brief Concatenates the two 128-bit integer vector operands, and
|
||||
/// Concatenates the two 128-bit integer vector operands, and
|
||||
/// right-shifts the result by the number of bytes specified in the immediate
|
||||
/// operand.
|
||||
///
|
||||
@@ -157,11 +158,11 @@ _mm_abs_epi32(__m128i __a)
|
||||
/// An immediate operand specifying how many bytes to right-shift the result.
|
||||
/// \returns A 128-bit integer vector containing the concatenated right-shifted
|
||||
/// value.
|
||||
#define _mm_alignr_epi8(a, b, n) __extension__ ({ \
|
||||
#define _mm_alignr_epi8(a, b, n) \
|
||||
(__m128i)__builtin_ia32_palignr128((__v16qi)(__m128i)(a), \
|
||||
(__v16qi)(__m128i)(b), (n)); })
|
||||
(__v16qi)(__m128i)(b), (n))
|
||||
|
||||
/// \brief Concatenates the two 64-bit integer vector operands, and right-shifts
|
||||
/// Concatenates the two 64-bit integer vector operands, and right-shifts
|
||||
/// the result by the number of bytes specified in the immediate operand.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -180,10 +181,10 @@ _mm_abs_epi32(__m128i __a)
|
||||
/// An immediate operand specifying how many bytes to right-shift the result.
|
||||
/// \returns A 64-bit integer vector containing the concatenated right-shifted
|
||||
/// value.
|
||||
#define _mm_alignr_pi8(a, b, n) __extension__ ({ \
|
||||
(__m64)__builtin_ia32_palignr((__v8qi)(__m64)(a), (__v8qi)(__m64)(b), (n)); })
|
||||
#define _mm_alignr_pi8(a, b, n) \
|
||||
(__m64)__builtin_ia32_palignr((__v8qi)(__m64)(a), (__v8qi)(__m64)(b), (n))
|
||||
|
||||
/// \brief Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// 128-bit vectors of [8 x i16].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -206,7 +207,7 @@ _mm_hadd_epi16(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_phaddw128((__v8hi)__a, (__v8hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// 128-bit vectors of [4 x i32].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -229,7 +230,7 @@ _mm_hadd_epi32(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_phaddd128((__v4si)__a, (__v4si)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// 64-bit vectors of [4 x i16].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -246,13 +247,13 @@ _mm_hadd_epi32(__m128i __a, __m128i __b)
|
||||
/// destination.
|
||||
/// \returns A 64-bit vector of [4 x i16] containing the horizontal sums of both
|
||||
/// operands.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_hadd_pi16(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_phaddw((__v4hi)__a, (__v4hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// 64-bit vectors of [2 x i32].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -269,15 +270,16 @@ _mm_hadd_pi16(__m64 __a, __m64 __b)
|
||||
/// destination.
|
||||
/// \returns A 64-bit vector of [2 x i32] containing the horizontal sums of both
|
||||
/// operands.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_hadd_pi32(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_phaddd((__v2si)__a, (__v2si)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// 128-bit vectors of [8 x i16]. Positive sums greater than 7FFFh are
|
||||
/// saturated to 7FFFh. Negative sums less than 8000h are saturated to 8000h.
|
||||
/// Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// 128-bit vectors of [8 x i16]. Positive sums greater than 0x7FFF are
|
||||
/// saturated to 0x7FFF. Negative sums less than 0x8000 are saturated to
|
||||
/// 0x8000.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -299,9 +301,10 @@ _mm_hadds_epi16(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_phaddsw128((__v8hi)__a, (__v8hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// 64-bit vectors of [4 x i16]. Positive sums greater than 7FFFh are
|
||||
/// saturated to 7FFFh. Negative sums less than 8000h are saturated to 8000h.
|
||||
/// Horizontally adds the adjacent pairs of values contained in 2 packed
|
||||
/// 64-bit vectors of [4 x i16]. Positive sums greater than 0x7FFF are
|
||||
/// saturated to 0x7FFF. Negative sums less than 0x8000 are saturated to
|
||||
/// 0x8000.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -317,13 +320,13 @@ _mm_hadds_epi16(__m128i __a, __m128i __b)
|
||||
/// destination.
|
||||
/// \returns A 64-bit vector of [4 x i16] containing the horizontal saturated
|
||||
/// sums of both operands.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_hadds_pi16(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_phaddsw((__v4hi)__a, (__v4hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// packed 128-bit vectors of [8 x i16].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -346,7 +349,7 @@ _mm_hsub_epi16(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_phsubw128((__v8hi)__a, (__v8hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// packed 128-bit vectors of [4 x i32].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -369,7 +372,7 @@ _mm_hsub_epi32(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_phsubd128((__v4si)__a, (__v4si)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// packed 64-bit vectors of [4 x i16].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -386,13 +389,13 @@ _mm_hsub_epi32(__m128i __a, __m128i __b)
|
||||
/// the destination.
|
||||
/// \returns A 64-bit vector of [4 x i16] containing the horizontal differences
|
||||
/// of both operands.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_hsub_pi16(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_phsubw((__v4hi)__a, (__v4hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// packed 64-bit vectors of [2 x i32].
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
@@ -409,16 +412,16 @@ _mm_hsub_pi16(__m64 __a, __m64 __b)
|
||||
/// the destination.
|
||||
/// \returns A 64-bit vector of [2 x i32] containing the horizontal differences
|
||||
/// of both operands.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_hsub_pi32(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_phsubd((__v2si)__a, (__v2si)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// packed 128-bit vectors of [8 x i16]. Positive differences greater than
|
||||
/// 7FFFh are saturated to 7FFFh. Negative differences less than 8000h are
|
||||
/// saturated to 8000h.
|
||||
/// 0x7FFF are saturated to 0x7FFF. Negative differences less than 0x8000 are
|
||||
/// saturated to 0x8000.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -440,10 +443,10 @@ _mm_hsubs_epi16(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_phsubsw128((__v8hi)__a, (__v8hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// Horizontally subtracts the adjacent pairs of values contained in 2
|
||||
/// packed 64-bit vectors of [4 x i16]. Positive differences greater than
|
||||
/// 7FFFh are saturated to 7FFFh. Negative differences less than 8000h are
|
||||
/// saturated to 8000h.
|
||||
/// 0x7FFF are saturated to 0x7FFF. Negative differences less than 0x8000 are
|
||||
/// saturated to 0x8000.
|
||||
///
|
||||
/// \headerfile <x86intrin.h>
|
||||
///
|
||||
@@ -459,13 +462,13 @@ _mm_hsubs_epi16(__m128i __a, __m128i __b)
|
||||
/// the destination.
|
||||
/// \returns A 64-bit vector of [4 x i16] containing the horizontal saturated
|
||||
/// differences of both operands.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_hsubs_pi16(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_phsubsw((__v4hi)__a, (__v4hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Multiplies corresponding pairs of packed 8-bit unsigned integer
|
||||
/// Multiplies corresponding pairs of packed 8-bit unsigned integer
|
||||
/// values contained in the first source operand and packed 8-bit signed
|
||||
/// integer values contained in the second source operand, adds pairs of
|
||||
/// contiguous products with signed saturation, and writes the 16-bit sums to
|
||||
@@ -499,7 +502,7 @@ _mm_maddubs_epi16(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_pmaddubsw128((__v16qi)__a, (__v16qi)__b);
|
||||
}
|
||||
|
||||
/// \brief Multiplies corresponding pairs of packed 8-bit unsigned integer
|
||||
/// Multiplies corresponding pairs of packed 8-bit unsigned integer
|
||||
/// values contained in the first source operand and packed 8-bit signed
|
||||
/// integer values contained in the second source operand, adds pairs of
|
||||
/// contiguous products with signed saturation, and writes the 16-bit sums to
|
||||
@@ -523,13 +526,13 @@ _mm_maddubs_epi16(__m128i __a, __m128i __b)
|
||||
/// \a R1 := (\a __a2 * \a __b2) + (\a __a3 * \a __b3) \n
|
||||
/// \a R2 := (\a __a4 * \a __b4) + (\a __a5 * \a __b5) \n
|
||||
/// \a R3 := (\a __a6 * \a __b6) + (\a __a7 * \a __b7)
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_maddubs_pi16(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_pmaddubsw((__v8qi)__a, (__v8qi)__b);
|
||||
}
|
||||
|
||||
/// \brief Multiplies packed 16-bit signed integer values, truncates the 32-bit
|
||||
/// Multiplies packed 16-bit signed integer values, truncates the 32-bit
|
||||
/// products to the 18 most significant bits by right-shifting, rounds the
|
||||
/// truncated value by adding 1, and writes bits [16:1] to the destination.
|
||||
///
|
||||
@@ -549,7 +552,7 @@ _mm_mulhrs_epi16(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_pmulhrsw128((__v8hi)__a, (__v8hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Multiplies packed 16-bit signed integer values, truncates the 32-bit
|
||||
/// Multiplies packed 16-bit signed integer values, truncates the 32-bit
|
||||
/// products to the 18 most significant bits by right-shifting, rounds the
|
||||
/// truncated value by adding 1, and writes bits [16:1] to the destination.
|
||||
///
|
||||
@@ -563,13 +566,13 @@ _mm_mulhrs_epi16(__m128i __a, __m128i __b)
|
||||
/// A 64-bit vector of [4 x i16] containing one of the source operands.
|
||||
/// \returns A 64-bit vector of [4 x i16] containing the rounded and scaled
|
||||
/// products of both operands.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_mulhrs_pi16(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_pmulhrsw((__v4hi)__a, (__v4hi)__b);
|
||||
}
|
||||
|
||||
/// \brief Copies the 8-bit integers from a 128-bit integer vector to the
|
||||
/// Copies the 8-bit integers from a 128-bit integer vector to the
|
||||
/// destination or clears 8-bit values in the destination, as specified by
|
||||
/// the second source operand.
|
||||
///
|
||||
@@ -595,7 +598,7 @@ _mm_shuffle_epi8(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_pshufb128((__v16qi)__a, (__v16qi)__b);
|
||||
}
|
||||
|
||||
/// \brief Copies the 8-bit integers from a 64-bit integer vector to the
|
||||
/// Copies the 8-bit integers from a 64-bit integer vector to the
|
||||
/// destination or clears 8-bit values in the destination, as specified by
|
||||
/// the second source operand.
|
||||
///
|
||||
@@ -614,13 +617,13 @@ _mm_shuffle_epi8(__m128i __a, __m128i __b)
|
||||
/// destination. \n
|
||||
/// Bits [3:0] select the source byte to be copied.
|
||||
/// \returns A 64-bit integer vector containing the copied or cleared values.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_shuffle_pi8(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_pshufb((__v8qi)__a, (__v8qi)__b);
|
||||
}
|
||||
|
||||
/// \brief For each 8-bit integer in the first source operand, perform one of
|
||||
/// For each 8-bit integer in the first source operand, perform one of
|
||||
/// the following actions as specified by the second source operand.
|
||||
///
|
||||
/// If the byte in the second source is negative, calculate the two's
|
||||
@@ -646,7 +649,7 @@ _mm_sign_epi8(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_psignb128((__v16qi)__a, (__v16qi)__b);
|
||||
}
|
||||
|
||||
/// \brief For each 16-bit integer in the first source operand, perform one of
|
||||
/// For each 16-bit integer in the first source operand, perform one of
|
||||
/// the following actions as specified by the second source operand.
|
||||
///
|
||||
/// If the word in the second source is negative, calculate the two's
|
||||
@@ -672,7 +675,7 @@ _mm_sign_epi16(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_psignw128((__v8hi)__a, (__v8hi)__b);
|
||||
}
|
||||
|
||||
/// \brief For each 32-bit integer in the first source operand, perform one of
|
||||
/// For each 32-bit integer in the first source operand, perform one of
|
||||
/// the following actions as specified by the second source operand.
|
||||
///
|
||||
/// If the doubleword in the second source is negative, calculate the two's
|
||||
@@ -698,7 +701,7 @@ _mm_sign_epi32(__m128i __a, __m128i __b)
|
||||
return (__m128i)__builtin_ia32_psignd128((__v4si)__a, (__v4si)__b);
|
||||
}
|
||||
|
||||
/// \brief For each 8-bit integer in the first source operand, perform one of
|
||||
/// For each 8-bit integer in the first source operand, perform one of
|
||||
/// the following actions as specified by the second source operand.
|
||||
///
|
||||
/// If the byte in the second source is negative, calculate the two's
|
||||
@@ -718,13 +721,13 @@ _mm_sign_epi32(__m128i __a, __m128i __b)
|
||||
/// A 64-bit integer vector containing control bytes corresponding to
|
||||
/// positions in the destination.
|
||||
/// \returns A 64-bit integer vector containing the resultant values.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_sign_pi8(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_psignb((__v8qi)__a, (__v8qi)__b);
|
||||
}
|
||||
|
||||
/// \brief For each 16-bit integer in the first source operand, perform one of
|
||||
/// For each 16-bit integer in the first source operand, perform one of
|
||||
/// the following actions as specified by the second source operand.
|
||||
///
|
||||
/// If the word in the second source is negative, calculate the two's
|
||||
@@ -744,13 +747,13 @@ _mm_sign_pi8(__m64 __a, __m64 __b)
|
||||
/// A 64-bit integer vector containing control words corresponding to
|
||||
/// positions in the destination.
|
||||
/// \returns A 64-bit integer vector containing the resultant values.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_sign_pi16(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_psignw((__v4hi)__a, (__v4hi)__b);
|
||||
}
|
||||
|
||||
/// \brief For each 32-bit integer in the first source operand, perform one of
|
||||
/// For each 32-bit integer in the first source operand, perform one of
|
||||
/// the following actions as specified by the second source operand.
|
||||
///
|
||||
/// If the doubleword in the second source is negative, calculate the two's
|
||||
@@ -770,12 +773,13 @@ _mm_sign_pi16(__m64 __a, __m64 __b)
|
||||
/// A 64-bit integer vector containing two control doublewords corresponding
|
||||
/// to positions in the destination.
|
||||
/// \returns A 64-bit integer vector containing the resultant values.
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS
|
||||
static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX
|
||||
_mm_sign_pi32(__m64 __a, __m64 __b)
|
||||
{
|
||||
return (__m64)__builtin_ia32_psignd((__v2si)__a, (__v2si)__b);
|
||||
}
|
||||
|
||||
#undef __DEFAULT_FN_ATTRS
|
||||
#undef __DEFAULT_FN_ATTRS_MMX
|
||||
|
||||
#endif /* __TMMINTRIN_H */
|
||||
|
||||
@@ -154,8 +154,12 @@ struct _Unwind_Control_Block {
|
||||
struct _Unwind_Exception {
|
||||
_Unwind_Exception_Class exception_class;
|
||||
_Unwind_Exception_Cleanup_Fn exception_cleanup;
|
||||
#if !defined (__USING_SJLJ_EXCEPTIONS__) && defined (__SEH__)
|
||||
_Unwind_Word private_[6];
|
||||
#else
|
||||
_Unwind_Word private_1;
|
||||
_Unwind_Word private_2;
|
||||
#endif
|
||||
/* The Itanium ABI requires that _Unwind_Exception objects are "double-word
|
||||
* aligned". GCC has interpreted this to mean "use the maximum useful
|
||||
* alignment for the target"; so do we. */
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
#define __VAESINTRIN_H
|
||||
|
||||
/* Default attributes for YMM forms. */
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("vaes")))
|
||||
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("vaes"), __min_vector_width__(256)))
|
||||
|
||||
/* Default attributes for ZMM forms. */
|
||||
#define __DEFAULT_FN_ATTRS_F __attribute__((__always_inline__, __nodebug__, __target__("avx512f,vaes")))
|
||||
#define __DEFAULT_FN_ATTRS_F __attribute__((__always_inline__, __nodebug__, __target__("avx512f,vaes"), __min_vector_width__(512)))
|
||||
|
||||
|
||||
static __inline__ __m256i __DEFAULT_FN_ATTRS
|
||||
|
||||
@@ -381,7 +381,7 @@ vec_insert_and_zero(const unsigned long long *__ptr) {
|
||||
static inline __ATTRS_o_ai vector float
|
||||
vec_insert_and_zero(const float *__ptr) {
|
||||
vector float __vec = (vector float)0;
|
||||
__vec[0] = *__ptr;
|
||||
__vec[1] = *__ptr;
|
||||
return __vec;
|
||||
}
|
||||
#endif
|
||||
@@ -5942,13 +5942,13 @@ vec_orc(vector unsigned long long __a, vector unsigned long long __b) {
|
||||
|
||||
static inline __ATTRS_o_ai vector float
|
||||
vec_orc(vector float __a, vector float __b) {
|
||||
return (vector float)((vector unsigned int)__a &
|
||||
return (vector float)((vector unsigned int)__a |
|
||||
~(vector unsigned int)__b);
|
||||
}
|
||||
|
||||
static inline __ATTRS_o_ai vector double
|
||||
vec_orc(vector double __a, vector double __b) {
|
||||
return (vector double)((vector unsigned long long)__a &
|
||||
return (vector double)((vector unsigned long long)__a |
|
||||
~(vector unsigned long long)__b);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -28,15 +28,15 @@
|
||||
#ifndef __VPCLMULQDQINTRIN_H
|
||||
#define __VPCLMULQDQINTRIN_H
|
||||
|
||||
#define _mm256_clmulepi64_epi128(A, B, I) __extension__ ({ \
|
||||
#define _mm256_clmulepi64_epi128(A, B, I) \
|
||||
(__m256i)__builtin_ia32_pclmulqdq256((__v4di)(__m256i)(A), \
|
||||
(__v4di)(__m256i)(B), \
|
||||
(char)(I)); })
|
||||
(char)(I))
|
||||
|
||||
#define _mm512_clmulepi64_epi128(A, B, I) __extension__ ({ \
|
||||
#define _mm512_clmulepi64_epi128(A, B, I) \
|
||||
(__m512i)__builtin_ia32_pclmulqdq512((__v8di)(__m512i)(A), \
|
||||
(__v8di)(__m512i)(B), \
|
||||
(char)(I)); })
|
||||
(char)(I))
|
||||
|
||||
#endif // __VPCLMULQDQINTRIN_H
|
||||
#endif /* __VPCLMULQDQINTRIN_H */
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user