mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2026-01-17 22:11:42 +01:00
Compare commits
940 Commits
avu/render
...
jbr-20+8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1040897cd | ||
|
|
923462467e | ||
|
|
2f3e494b80 | ||
|
|
e804236f05 | ||
|
|
adaf3b9014 | ||
|
|
48b77a6969 | ||
|
|
8ec3197683 | ||
|
|
61e072d11c | ||
|
|
36c00fdd74 | ||
|
|
2bd90c2149 | ||
|
|
2a1d9cfead | ||
|
|
4d796ee8ab | ||
|
|
f0f78a9125 | ||
|
|
1451642317 | ||
|
|
8159a1ab70 | ||
|
|
7318b22209 | ||
|
|
2ae8e31183 | ||
|
|
893909558b | ||
|
|
da9cc5c9f4 | ||
|
|
330adc03a9 | ||
|
|
28bbdc5ebb | ||
|
|
a6faf5d33a | ||
|
|
0ca5cb13a3 | ||
|
|
7c3cfd13e3 | ||
|
|
8c9d5ad4f8 | ||
|
|
0ca74f538e | ||
|
|
1e270ea4f5 | ||
|
|
b17269ad52 | ||
|
|
350808a5a3 | ||
|
|
d0c365a7b9 | ||
|
|
80dc6cebc9 | ||
|
|
228e8e94fe | ||
|
|
852e71d9f0 | ||
|
|
0599a05f8c | ||
|
|
987656d690 | ||
|
|
2660a9268b | ||
|
|
ef8486a1a4 | ||
|
|
62f22633d1 | ||
|
|
b28f9dab80 | ||
|
|
54854d9300 | ||
|
|
75c1e99968 | ||
|
|
c29242ebb0 | ||
|
|
7841e5cc38 | ||
|
|
e9f97b2e8c | ||
|
|
59d85bad34 | ||
|
|
66f59c2c16 | ||
|
|
0dda3c14eb | ||
|
|
620c8a045f | ||
|
|
7ec0132ad3 | ||
|
|
80bd8c3549 | ||
|
|
15f4b30459 | ||
|
|
4c1cd66d22 | ||
|
|
6346c3338c | ||
|
|
604a115a5b | ||
|
|
59e495e4d3 | ||
|
|
799a2c844d | ||
|
|
52cc6cd063 | ||
|
|
3582fd9e93 | ||
|
|
53fc495e3a | ||
|
|
db1e44c2dd | ||
|
|
2c73a1f39d | ||
|
|
e8975be94b | ||
|
|
9c19d89c9c | ||
|
|
b1817a30a0 | ||
|
|
eeb345a286 | ||
|
|
89458e36af | ||
|
|
3d3e3df8f0 | ||
|
|
17e65bbd23 | ||
|
|
1c055076e0 | ||
|
|
011958d30b | ||
|
|
984cd02dfb | ||
|
|
4b4d35289a | ||
|
|
43c47b1ad7 | ||
|
|
5425573bb4 | ||
|
|
a3e07d950a | ||
|
|
2ea3f546c2 | ||
|
|
971479153d | ||
|
|
618f3a82a4 | ||
|
|
43588648ca | ||
|
|
7b418f9aba | ||
|
|
41ef2b2490 | ||
|
|
d991ec4f9f | ||
|
|
b7b917a0a8 | ||
|
|
a37465b8fa | ||
|
|
632d2d2690 | ||
|
|
84b4e9bb41 | ||
|
|
e7f8003edd | ||
|
|
cdc1582d1d | ||
|
|
ec1d338e15 | ||
|
|
c2cbeb3ee8 | ||
|
|
f1001a06b3 | ||
|
|
5d1c44871a | ||
|
|
d0a2f13dea | ||
|
|
83339500ba | ||
|
|
879ea78037 | ||
|
|
78c514d085 | ||
|
|
ac93ab0e0a | ||
|
|
67dd3f7343 | ||
|
|
243c76f59f | ||
|
|
ddb106be7a | ||
|
|
1af7c33df5 | ||
|
|
d67e7ccda5 | ||
|
|
977e09489d | ||
|
|
96a542feb2 | ||
|
|
2cb659e7f4 | ||
|
|
bbc57483ce | ||
|
|
e062dff1bf | ||
|
|
a41b12f430 | ||
|
|
e02627ca0a | ||
|
|
2ff22087f2 | ||
|
|
a6bab2a379 | ||
|
|
f5a7de8627 | ||
|
|
612d8c6cb1 | ||
|
|
d7f0de272c | ||
|
|
dfbc6919e1 | ||
|
|
4e6cd67fec | ||
|
|
4dc421caa0 | ||
|
|
af86cd3d8c | ||
|
|
6cd1c0c14e | ||
|
|
4a4d8ed83b | ||
|
|
5a96a5db13 | ||
|
|
b65f7ec2f1 | ||
|
|
6c8d0e617f | ||
|
|
e72742eeb5 | ||
|
|
b9de0a7556 | ||
|
|
5ae4320921 | ||
|
|
efed7a7f65 | ||
|
|
b2010a7481 | ||
|
|
ea8b75cfe4 | ||
|
|
6882f0eb39 | ||
|
|
92067e2003 | ||
|
|
2677dd6d23 | ||
|
|
4f3f74c141 | ||
|
|
87340fd540 | ||
|
|
bc7a1ea249 | ||
|
|
84f23149e2 | ||
|
|
4dd236b40a | ||
|
|
522b65743c | ||
|
|
441c33f0b1 | ||
|
|
2342684f2c | ||
|
|
0143cf1d46 | ||
|
|
0184f46bdf | ||
|
|
cca91f7bcc | ||
|
|
b4e2ce0094 | ||
|
|
f3abb82989 | ||
|
|
92deab5465 | ||
|
|
70fce07a38 | ||
|
|
15d3329edd | ||
|
|
757a742ac7 | ||
|
|
890bcedd49 | ||
|
|
c8e0315114 | ||
|
|
3ad3950560 | ||
|
|
fb27ddcbe5 | ||
|
|
3bb2dc8e7f | ||
|
|
c7c20661ee | ||
|
|
be58cbc417 | ||
|
|
109e21af66 | ||
|
|
adf40d25a1 | ||
|
|
292d909e81 | ||
|
|
a7f83582d3 | ||
|
|
02fae60740 | ||
|
|
5d588eda97 | ||
|
|
3471ac9a90 | ||
|
|
fd89ab8dac | ||
|
|
dbab827bee | ||
|
|
3216d198f3 | ||
|
|
2bf6285c80 | ||
|
|
c83fcbd18f | ||
|
|
74ac5df96f | ||
|
|
5e3ecff7a6 | ||
|
|
535804554d | ||
|
|
73b83e0188 | ||
|
|
2583feb21b | ||
|
|
44fb92e2aa | ||
|
|
f528124f57 | ||
|
|
572c14efc6 | ||
|
|
6e18883d8f | ||
|
|
ce36f6ea85 | ||
|
|
fff7f35300 | ||
|
|
128c6c648c | ||
|
|
31f7fc043b | ||
|
|
d9ca438d06 | ||
|
|
e8568b890a | ||
|
|
7f0e9bd632 | ||
|
|
728157fa03 | ||
|
|
59d0c739ac | ||
|
|
4545ed6842 | ||
|
|
0fd1b68972 | ||
|
|
0e906975a8 | ||
|
|
2baf526fce | ||
|
|
ea12615d2f | ||
|
|
393dc7ade7 | ||
|
|
e5491a2605 | ||
|
|
04c47da118 | ||
|
|
3164c98f4c | ||
|
|
3b9059a147 | ||
|
|
c3806b93c4 | ||
|
|
f42dab8592 | ||
|
|
39715f3da7 | ||
|
|
21db9a507b | ||
|
|
c79baaa811 | ||
|
|
62fbc3f883 | ||
|
|
0c1aa2bc8a | ||
|
|
c33fa55cf8 | ||
|
|
59980ac8e4 | ||
|
|
fc01666a58 | ||
|
|
fed3af8ae0 | ||
|
|
95c8022958 | ||
|
|
0c37008917 | ||
|
|
46251bc6e2 | ||
|
|
bba6be79e0 | ||
|
|
2579373dd0 | ||
|
|
cb6e9cb728 | ||
|
|
0494291490 | ||
|
|
25f4b04365 | ||
|
|
0225eb434c | ||
|
|
e25982071d | ||
|
|
b542bcba57 | ||
|
|
4ab77ac60d | ||
|
|
e9d9cc6d0a | ||
|
|
87aa3ce03e | ||
|
|
81ee7d28f8 | ||
|
|
3c08e6b311 | ||
|
|
c86c51cc72 | ||
|
|
9981c85d46 | ||
|
|
54b4576f78 | ||
|
|
6aaf141f61 | ||
|
|
1877533f75 | ||
|
|
c142fbbbaf | ||
|
|
9c86c82091 | ||
|
|
eeaf0bbabc | ||
|
|
e7795851d2 | ||
|
|
460d879a75 | ||
|
|
732f1065fe | ||
|
|
d852e99ae9 | ||
|
|
a13af65043 | ||
|
|
f1967cfaab | ||
|
|
ea21c46531 | ||
|
|
1b8f466dba | ||
|
|
ac399e9777 | ||
|
|
1fec62f299 | ||
|
|
01b9f95c62 | ||
|
|
64286074ba | ||
|
|
3f1174aa47 | ||
|
|
f804f2ce8e | ||
|
|
1304390b3e | ||
|
|
11319c2aeb | ||
|
|
8cdead0c94 | ||
|
|
f93beacd2f | ||
|
|
3212dc9c6f | ||
|
|
3e60e82814 | ||
|
|
f7b183059a | ||
|
|
5564effe9c | ||
|
|
a8eb728680 | ||
|
|
a694e9e34d | ||
|
|
95e3190d96 | ||
|
|
8e7b45b820 | ||
|
|
74ca6ca25b | ||
|
|
86f63f9703 | ||
|
|
013a5eeeb9 | ||
|
|
77ad998b6e | ||
|
|
532a6ec7e3 | ||
|
|
e05b2f2c3b | ||
|
|
cce77a7001 | ||
|
|
889150b47a | ||
|
|
d1249aa5cb | ||
|
|
a79ce4e748 | ||
|
|
8dd94a2c14 | ||
|
|
569de453c3 | ||
|
|
403a9bc796 | ||
|
|
8f24d25168 | ||
|
|
a40c17b730 | ||
|
|
2a6ec88cd0 | ||
|
|
9a0fa82424 | ||
|
|
55fa19b508 | ||
|
|
32b650c024 | ||
|
|
ef3f2ed9ba | ||
|
|
35387d5cb6 | ||
|
|
9f37ba44b8 | ||
|
|
dfb24ae4b7 | ||
|
|
82a8bd7e92 | ||
|
|
cc2b792704 | ||
|
|
75c0a5b828 | ||
|
|
83a5d5996b | ||
|
|
cbaf6e807e | ||
|
|
0526402a02 | ||
|
|
834189527e | ||
|
|
ac6be16519 | ||
|
|
4ad18cf088 | ||
|
|
d8f4e97bd3 | ||
|
|
f783244caf | ||
|
|
b3a0e482ad | ||
|
|
fafe8b3f8d | ||
|
|
0b6fd4820c | ||
|
|
351560414d | ||
|
|
30e134e909 | ||
|
|
d48694d0f3 | ||
|
|
c45d613faa | ||
|
|
29ea6429d2 | ||
|
|
77c3bbf105 | ||
|
|
a5934cddca | ||
|
|
fd1bb078ea | ||
|
|
4c997ba830 | ||
|
|
1b997db734 | ||
|
|
688712f75c | ||
|
|
df063f7db1 | ||
|
|
9ccae7078e | ||
|
|
f640fc5a1e | ||
|
|
bad9ffe471 | ||
|
|
0dff3276e8 | ||
|
|
b5d965656d | ||
|
|
d53b02eb9f | ||
|
|
1a271645a8 | ||
|
|
a8edd7a12f | ||
|
|
e31003a064 | ||
|
|
5b5bc6c26e | ||
|
|
8e7a3cb5ab | ||
|
|
dc4edd3fe8 | ||
|
|
649f2d8835 | ||
|
|
d8444aa45e | ||
|
|
c4dcce4bca | ||
|
|
70f5693356 | ||
|
|
dee5121bd4 | ||
|
|
cdf6979259 | ||
|
|
f5cdabad06 | ||
|
|
9515560c54 | ||
|
|
cfc9a881af | ||
|
|
9925014035 | ||
|
|
44e8c462b4 | ||
|
|
8e01ffb3a7 | ||
|
|
2dd00f580c | ||
|
|
e291a67e96 | ||
|
|
20124ac755 | ||
|
|
c43bdf7165 | ||
|
|
604ea90d55 | ||
|
|
09b4032f8b | ||
|
|
a8fe2d97a2 | ||
|
|
b9b900a61c | ||
|
|
f190f4e638 | ||
|
|
d260a4e794 | ||
|
|
95497772e7 | ||
|
|
124c63c17c | ||
|
|
918068a115 | ||
|
|
00d06d4a82 | ||
|
|
feb223aacf | ||
|
|
c3addbb1c0 | ||
|
|
1305fb5ca8 | ||
|
|
c20b3aa9c5 | ||
|
|
7b5bd251ef | ||
|
|
28c5e483a8 | ||
|
|
da6d1fc0e0 | ||
|
|
31e50f2c76 | ||
|
|
dddd4e7c81 | ||
|
|
048bffad79 | ||
|
|
15efb2bdeb | ||
|
|
b6bd190d8d | ||
|
|
ba670ecbb9 | ||
|
|
cf7154498f | ||
|
|
570897498b | ||
|
|
0709a6a1fb | ||
|
|
2961b7eede | ||
|
|
167ce4dae2 | ||
|
|
108cd69516 | ||
|
|
b96ba19807 | ||
|
|
779b4e1d19 | ||
|
|
dbc6e11010 | ||
|
|
910053b74e | ||
|
|
7b3bf97760 | ||
|
|
86dc760f9e | ||
|
|
1504804896 | ||
|
|
af0088076d | ||
|
|
c67149be4b | ||
|
|
1f36ed1fae | ||
|
|
9b7805e3b4 | ||
|
|
c42b796f91 | ||
|
|
a814293e1f | ||
|
|
88fe19c5b2 | ||
|
|
6f9717b46b | ||
|
|
d4eeeb82cb | ||
|
|
9048cef761 | ||
|
|
549c6c22ae | ||
|
|
aa43824249 | ||
|
|
adbd200dc5 | ||
|
|
b4ab5fe1da | ||
|
|
33369719b2 | ||
|
|
b4490386fe | ||
|
|
784fa0add7 | ||
|
|
ca78f7bd76 | ||
|
|
2efa89a89e | ||
|
|
e322e77e95 | ||
|
|
40bf3b1167 | ||
|
|
17ef8cae33 | ||
|
|
caa6b74b5b | ||
|
|
28913f4747 | ||
|
|
d4b040f42d | ||
|
|
354ed1034d | ||
|
|
7746664819 | ||
|
|
2c8ada689f | ||
|
|
f3f078846f | ||
|
|
be6be15efa | ||
|
|
210a06a287 | ||
|
|
64f95cfb32 | ||
|
|
ddb55ede2c | ||
|
|
699ad45b43 | ||
|
|
784a0f0496 | ||
|
|
7e13cdb799 | ||
|
|
7905788e96 | ||
|
|
47fe9ef5bf | ||
|
|
62e1e7950b | ||
|
|
de7467146f | ||
|
|
9c92da5249 | ||
|
|
a5c25d8837 | ||
|
|
e93be3acdf | ||
|
|
7ac40f3b9f | ||
|
|
53b37fe153 | ||
|
|
08288819dd | ||
|
|
4cdb97893c | ||
|
|
9918b6d384 | ||
|
|
f67c5361cc | ||
|
|
239b4bb020 | ||
|
|
0d2952e5b3 | ||
|
|
fdc8455c45 | ||
|
|
20f55abd27 | ||
|
|
925084c496 | ||
|
|
bdf9902f75 | ||
|
|
17aacde50f | ||
|
|
9dc9a64fa4 | ||
|
|
64782a7524 | ||
|
|
b0db33333a | ||
|
|
651cbebb96 | ||
|
|
c8cc94a384 | ||
|
|
740169ce1c | ||
|
|
13cbb3a416 | ||
|
|
1f9521e6cb | ||
|
|
a716f7934b | ||
|
|
4c9ea7e66a | ||
|
|
b206d2d149 | ||
|
|
2728770e3d | ||
|
|
ef17ee4dea | ||
|
|
72f286a9ba | ||
|
|
b8db0c383b | ||
|
|
d579916a6b | ||
|
|
26c03c1860 | ||
|
|
a802b9816a | ||
|
|
bf0623b11f | ||
|
|
3f5e48a44e | ||
|
|
5b583e4792 | ||
|
|
3b1ec3e660 | ||
|
|
58b6937b09 | ||
|
|
6458ebc8e4 | ||
|
|
82c77ca807 | ||
|
|
d4de475747 | ||
|
|
50c37f53f2 | ||
|
|
6037ccdd50 | ||
|
|
270cf67e5f | ||
|
|
d51f4f471f | ||
|
|
8fa46c8f72 | ||
|
|
7cf71bc2d3 | ||
|
|
affbd72aa3 | ||
|
|
9e2d9ac59a | ||
|
|
2bf5c9a687 | ||
|
|
70008da6b4 | ||
|
|
d7b43af591 | ||
|
|
9f8bfab290 | ||
|
|
f080430440 | ||
|
|
834d92dd72 | ||
|
|
198cec9e1b | ||
|
|
97200a78b1 | ||
|
|
31d981e5ea | ||
|
|
a144988600 | ||
|
|
e26d3b3c01 | ||
|
|
c74a9235fc | ||
|
|
535fba8bfc | ||
|
|
af05139133 | ||
|
|
19017358b1 | ||
|
|
0f801fe6fd | ||
|
|
701ea3beaa | ||
|
|
5e680d0594 | ||
|
|
b9c396625c | ||
|
|
ad8914616b | ||
|
|
7e211d7daa | ||
|
|
7039c6616a | ||
|
|
453e8beb43 | ||
|
|
33d0363e03 | ||
|
|
302a6c068d | ||
|
|
0408f9c543 | ||
|
|
a7df5a4063 | ||
|
|
406cf611d9 | ||
|
|
1cf83a403f | ||
|
|
5cdb4b1960 | ||
|
|
46d5b682db | ||
|
|
68bff04515 | ||
|
|
d917e1874e | ||
|
|
695d8656c5 | ||
|
|
09da87cf5c | ||
|
|
7acdcc1034 | ||
|
|
f62b2bd9cd | ||
|
|
02da5f9970 | ||
|
|
ed714af854 | ||
|
|
7d4df6a83f | ||
|
|
ae030bcbc5 | ||
|
|
f12d044929 | ||
|
|
97544be5b6 | ||
|
|
47b86690b6 | ||
|
|
983f75caa6 | ||
|
|
af64d316c0 | ||
|
|
cc445926cf | ||
|
|
523d553e13 | ||
|
|
f3da7ff66e | ||
|
|
53bf1bfdab | ||
|
|
9d4b25e788 | ||
|
|
c254c9d095 | ||
|
|
e833c1d179 | ||
|
|
e7d52e25a2 | ||
|
|
2cf7c01759 | ||
|
|
ce5024f66f | ||
|
|
ff3db52044 | ||
|
|
8fc8fdca96 | ||
|
|
cf4a4966a8 | ||
|
|
3d12c0225b | ||
|
|
b2a58bec4a | ||
|
|
39526e28bc | ||
|
|
a1795901ee | ||
|
|
f7ba3b7e42 | ||
|
|
07612281b0 | ||
|
|
729164f534 | ||
|
|
9ff40346dd | ||
|
|
1855e9d201 | ||
|
|
6d595614a2 | ||
|
|
9254e12993 | ||
|
|
395aea307f | ||
|
|
3475e12fa6 | ||
|
|
cb5ef3da19 | ||
|
|
13d4ddc35b | ||
|
|
6633855ca7 | ||
|
|
d5cd2f2caa | ||
|
|
dfeeb6f8f3 | ||
|
|
68b2057205 | ||
|
|
f3b1f60a29 | ||
|
|
2471f8f7c5 | ||
|
|
31bc689977 | ||
|
|
33f34d540e | ||
|
|
444a0d98ac | ||
|
|
08400f18ba | ||
|
|
fe807217a7 | ||
|
|
50f99c3208 | ||
|
|
bbaeacb597 | ||
|
|
0f580974a6 | ||
|
|
5a8e1e43a4 | ||
|
|
fb297705f6 | ||
|
|
8cd87e731b | ||
|
|
c76a06aeb5 | ||
|
|
0530f4e517 | ||
|
|
1a6533225d | ||
|
|
c2ccf4ca85 | ||
|
|
03dca565cf | ||
|
|
86c9241cce | ||
|
|
fbe9266622 | ||
|
|
19043538e1 | ||
|
|
53ef59c402 | ||
|
|
a9c2ab67c4 | ||
|
|
e90b579b29 | ||
|
|
b42c1ad108 | ||
|
|
9b6d0a7e94 | ||
|
|
53a0acee06 | ||
|
|
8f400b9aab | ||
|
|
e0baf012b1 | ||
|
|
17695962ac | ||
|
|
b97a4f6cdc | ||
|
|
7aafc69a96 | ||
|
|
2adef6a1f8 | ||
|
|
4aede33fbf | ||
|
|
0207d761f4 | ||
|
|
33ed0365c3 | ||
|
|
ac28be721f | ||
|
|
0cb0ecf443 | ||
|
|
f1143b1b57 | ||
|
|
d46f404b31 | ||
|
|
f4b05a1168 | ||
|
|
f7a4be75fb | ||
|
|
d4b473d890 | ||
|
|
da2339cf69 | ||
|
|
f2e10dce78 | ||
|
|
fa564e9d58 | ||
|
|
d0c8ff8fdf | ||
|
|
7e940efcbc | ||
|
|
c6dd2ab9d7 | ||
|
|
d9c1364dde | ||
|
|
aaa897148a | ||
|
|
2cc40afa07 | ||
|
|
0164145afc | ||
|
|
03276a5153 | ||
|
|
3ee1e60595 | ||
|
|
512db0ff31 | ||
|
|
fcb35ed40e | ||
|
|
bdd64d6f7d | ||
|
|
5d0e8b6981 | ||
|
|
975316e3e5 | ||
|
|
0901548833 | ||
|
|
dae4c493e4 | ||
|
|
94b473e464 | ||
|
|
900d967da5 | ||
|
|
d482d7f5b9 | ||
|
|
edff51e5fd | ||
|
|
267144311c | ||
|
|
59b0de6bc7 | ||
|
|
db4405d0f8 | ||
|
|
7e948f7ccb | ||
|
|
3fa99844a6 | ||
|
|
4285e3d6db | ||
|
|
560e2927e3 | ||
|
|
e5b56bafa9 | ||
|
|
5a89cb01bc | ||
|
|
bc28baeba9 | ||
|
|
aa2fc54b61 | ||
|
|
7e1cce8cb5 | ||
|
|
3419beec7f | ||
|
|
e01cd7c3ed | ||
|
|
a941bc2de6 | ||
|
|
65f0829d64 | ||
|
|
130ce7c6b8 | ||
|
|
b623398555 | ||
|
|
04f02ac6b2 | ||
|
|
024a240e1b | ||
|
|
c8cff1bd6f | ||
|
|
c15e10fb6c | ||
|
|
b92ce2699b | ||
|
|
c68419f2f7 | ||
|
|
6fb84e2c91 | ||
|
|
a9b9831f2a | ||
|
|
b021d37cec | ||
|
|
78d371266a | ||
|
|
f7791ad0ea | ||
|
|
5ad6286b73 | ||
|
|
a9d46f3413 | ||
|
|
6e3e470dac | ||
|
|
d959c22a95 | ||
|
|
230726ea58 | ||
|
|
ecf00785f2 | ||
|
|
5c39a36641 | ||
|
|
47d3c2a175 | ||
|
|
bf0e625fe0 | ||
|
|
0960ecc407 | ||
|
|
590337e2f2 | ||
|
|
4662e06bff | ||
|
|
7df48f97d2 | ||
|
|
32dd1eef88 | ||
|
|
45f1b72a6e | ||
|
|
39ec58b63c | ||
|
|
68c5957b9e | ||
|
|
bf439f8c93 | ||
|
|
b7a34f728d | ||
|
|
8e07839179 | ||
|
|
b12e7f1bf9 | ||
|
|
1aa87e0078 | ||
|
|
74be2d9ef6 | ||
|
|
8e10c2bfc7 | ||
|
|
9ec27d0e9f | ||
|
|
91e6bf6791 | ||
|
|
3da7e393ee | ||
|
|
c41a283f52 | ||
|
|
41d5809caf | ||
|
|
5d4ea9b954 | ||
|
|
96641c0c42 | ||
|
|
67f1bd7ff1 | ||
|
|
062db59eeb | ||
|
|
ee4a6c23ee | ||
|
|
1499e5eac0 | ||
|
|
2f62f15b09 | ||
|
|
905bcbe34e | ||
|
|
8d28734ede | ||
|
|
f1dd559e20 | ||
|
|
4fe0ca9ec3 | ||
|
|
bde7a7ae03 | ||
|
|
2d8c649054 | ||
|
|
b647a1259b | ||
|
|
dbf0905ff4 | ||
|
|
39fa52b5f7 | ||
|
|
42261d752a | ||
|
|
b6c6cc5d99 | ||
|
|
778ed1a760 | ||
|
|
aa6c568a06 | ||
|
|
956d44d2da | ||
|
|
f6a79e340f | ||
|
|
ef7cc2105c | ||
|
|
645be42f76 | ||
|
|
a50b06e851 | ||
|
|
c37c8e5d34 | ||
|
|
124ba45fb8 | ||
|
|
0e06bf3b04 | ||
|
|
a277590c89 | ||
|
|
5264881a15 | ||
|
|
e94b05c720 | ||
|
|
3eb49fecea | ||
|
|
2e332c2760 | ||
|
|
c328f8fa2a | ||
|
|
4d6fb51551 | ||
|
|
0d1a3053cd | ||
|
|
24fe8ad74c | ||
|
|
f347ff9986 | ||
|
|
ebc012ece2 | ||
|
|
8c460b043e | ||
|
|
3df4b034fb | ||
|
|
a6fc485a22 | ||
|
|
a113e166e9 | ||
|
|
e4e1e8f66c | ||
|
|
308c068b36 | ||
|
|
d76c1089ef | ||
|
|
005a330387 | ||
|
|
e2cfe2e14a | ||
|
|
b6cdfd685d | ||
|
|
25e9901aea | ||
|
|
6f526e1bc3 | ||
|
|
a7e07fdbc1 | ||
|
|
7a0c8b14aa | ||
|
|
0b35460fa0 | ||
|
|
a0219da966 | ||
|
|
ce5ae51773 | ||
|
|
59e9700c4e | ||
|
|
28c112fcf0 | ||
|
|
34bb0a5e6e | ||
|
|
33b9d77065 | ||
|
|
a75299c3ab | ||
|
|
407abf5d65 | ||
|
|
625821dae7 | ||
|
|
b544b8b7d4 | ||
|
|
ba9ee8cb28 | ||
|
|
deb06539b0 | ||
|
|
cbaeb00fce | ||
|
|
2776ff3b03 | ||
|
|
409157d2af | ||
|
|
b5a646ee6c | ||
|
|
26048ea21e | ||
|
|
37e1835be7 | ||
|
|
26d24263c7 | ||
|
|
ccec5d1e85 | ||
|
|
7f44f572ea | ||
|
|
13596cdf69 | ||
|
|
49e24f0cd8 | ||
|
|
1fcbaa4116 | ||
|
|
e51ca1dee3 | ||
|
|
3cfd38caf1 | ||
|
|
c78392db4d | ||
|
|
5acac2238f | ||
|
|
bddef71518 | ||
|
|
6ff2d89ea1 | ||
|
|
199832a710 | ||
|
|
a82417fa19 | ||
|
|
d7341ae42e | ||
|
|
07d24509a6 | ||
|
|
6030c0e403 | ||
|
|
72bcf2aa03 | ||
|
|
2f19144249 | ||
|
|
cdb476888a | ||
|
|
4caf1ef389 | ||
|
|
27ad1d5549 | ||
|
|
239ac2a5d4 | ||
|
|
67ecd30327 | ||
|
|
8071b2311c | ||
|
|
774928f944 | ||
|
|
e3791ecfe4 | ||
|
|
f8eb7a892f | ||
|
|
b2b4ee212f | ||
|
|
168b226b0f | ||
|
|
48f19e43c5 | ||
|
|
0ef3d8551d | ||
|
|
e0e15def24 | ||
|
|
7846971381 | ||
|
|
7159976335 | ||
|
|
3deb58a89a | ||
|
|
8fc201e5bb | ||
|
|
f5bbade9e4 | ||
|
|
97bd4c255a | ||
|
|
8db5247ebc | ||
|
|
cfdbde11f0 | ||
|
|
8df5f1058f | ||
|
|
e0382c5523 | ||
|
|
37a513003c | ||
|
|
d5b6c7bde1 | ||
|
|
6f6486e977 | ||
|
|
171a7cdd5d | ||
|
|
1b44f6c483 | ||
|
|
7ef6993576 | ||
|
|
c6e0416495 | ||
|
|
6e55a72f25 | ||
|
|
8f59422d35 | ||
|
|
8a9aeff18c | ||
|
|
b2ba9fc9f6 | ||
|
|
0c420e03ae | ||
|
|
1606d5545b | ||
|
|
f086d945c3 | ||
|
|
73ba7fdce8 | ||
|
|
b1b9674663 | ||
|
|
eb8d067b56 | ||
|
|
d8331737ad | ||
|
|
19fb8ab8b9 | ||
|
|
1b9987cb08 | ||
|
|
447ae00616 | ||
|
|
a27ba1a3db | ||
|
|
744b822ab1 | ||
|
|
5848a60c01 | ||
|
|
3d2d039538 | ||
|
|
36350bf1be | ||
|
|
a6e2e223ea | ||
|
|
2c461acfeb | ||
|
|
66340372d5 | ||
|
|
410a25d59a | ||
|
|
ed8e8ac289 | ||
|
|
d3e781de08 | ||
|
|
0df4748216 | ||
|
|
6520843f86 | ||
|
|
63eb0b7e86 | ||
|
|
f2bc447659 | ||
|
|
be93318576 | ||
|
|
777f813e9b | ||
|
|
22e2067349 | ||
|
|
37ecbb461c | ||
|
|
176bb23de1 | ||
|
|
ec97da93c1 | ||
|
|
140419fe0e | ||
|
|
6a33974a6b | ||
|
|
295be6f10f | ||
|
|
7cb368b34d | ||
|
|
7eb15593e1 | ||
|
|
e44465d4d6 | ||
|
|
c10749a6a7 | ||
|
|
f235955eef | ||
|
|
f58c9a659b | ||
|
|
f710393e35 | ||
|
|
704b9a66bb | ||
|
|
94811c0dc7 | ||
|
|
3d6d7b7e73 | ||
|
|
7156f98e32 | ||
|
|
f786e2a22f | ||
|
|
c6743489d2 | ||
|
|
0b3d409540 | ||
|
|
bc0379ea1a | ||
|
|
0b8dd4ac82 | ||
|
|
e990fec195 | ||
|
|
81d7eafd91 | ||
|
|
796494d0fe | ||
|
|
e534c133af | ||
|
|
e21b527b18 | ||
|
|
e9bddc18ab | ||
|
|
ebfa27b9f0 | ||
|
|
e32377e456 | ||
|
|
e1f140d270 | ||
|
|
e17118aa8a | ||
|
|
f7a37f5886 | ||
|
|
d889319a86 | ||
|
|
593d2b7dab | ||
|
|
65850431ed | ||
|
|
a0cccb5479 | ||
|
|
742644e291 | ||
|
|
d792cbcc06 | ||
|
|
9b7e42c0f0 | ||
|
|
6cc4bb1169 | ||
|
|
194bc08a89 | ||
|
|
25669bb667 | ||
|
|
45180633d3 | ||
|
|
fdece9ac71 | ||
|
|
25080e0c3a | ||
|
|
a10c5597d9 | ||
|
|
d888c80bba | ||
|
|
fdc147e354 | ||
|
|
8f0eb5d401 | ||
|
|
0a82c4ebc3 | ||
|
|
5974f5fed3 | ||
|
|
e0d361cea9 | ||
|
|
9473c383c6 | ||
|
|
a0f6dd3291 | ||
|
|
bd361bc077 | ||
|
|
4042dba3d0 | ||
|
|
a276cd2d59 | ||
|
|
cf57d72fe8 | ||
|
|
6458a56e60 | ||
|
|
1cd7850f87 | ||
|
|
15f15830f0 | ||
|
|
a5caffd4a5 | ||
|
|
c1db70d827 | ||
|
|
782ae3801c | ||
|
|
9f73fb5a72 | ||
|
|
02fec1e6e5 | ||
|
|
5b7d066ca5 | ||
|
|
6a192206b8 | ||
|
|
9df93a180c | ||
|
|
646c8aaeec | ||
|
|
ef7a9f8170 | ||
|
|
ac274c4ca6 | ||
|
|
5d8d6da36a | ||
|
|
8122466fbb | ||
|
|
940e94f194 | ||
|
|
110d906432 | ||
|
|
8040aa0073 | ||
|
|
689f80cbad | ||
|
|
c9065915b6 | ||
|
|
88018c4d3e | ||
|
|
81f128b903 | ||
|
|
7becf13e61 | ||
|
|
a0042de411 | ||
|
|
89a1d055d9 | ||
|
|
cb08b4e86a | ||
|
|
01916e1920 | ||
|
|
414265bd83 | ||
|
|
9008cfad45 | ||
|
|
c156bcc599 | ||
|
|
7c0864752a | ||
|
|
da8fd4547f | ||
|
|
b33c6e52c1 | ||
|
|
ba23f14025 | ||
|
|
7b274feba5 | ||
|
|
087bccfe28 | ||
|
|
4587337e95 | ||
|
|
6d56caff3d | ||
|
|
d5d19f52ce | ||
|
|
828dc89ab8 | ||
|
|
6569666b05 | ||
|
|
40e99a19f2 | ||
|
|
890771e708 | ||
|
|
de74e0e25a | ||
|
|
9f562ef754 | ||
|
|
b0892295ee | ||
|
|
079312c835 | ||
|
|
7b19226be2 | ||
|
|
e60d8b516e | ||
|
|
aa5062584c | ||
|
|
655500a4f5 | ||
|
|
ac6a7d7b36 | ||
|
|
83cec4b6cc | ||
|
|
fd36f3730e | ||
|
|
fa1b56ede6 | ||
|
|
af7cda5d8f | ||
|
|
d24c84e768 | ||
|
|
db19dc6bb9 | ||
|
|
6e386669e3 | ||
|
|
47500b2429 | ||
|
|
fc3edf2412 | ||
|
|
022e71704c | ||
|
|
dbda0e2bda | ||
|
|
26c7c92bc9 |
46
.github/actions/config/action.yml
vendored
Normal file
46
.github/actions/config/action.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Config'
|
||||
description: 'Read JDK Configuration Variables'
|
||||
inputs:
|
||||
var:
|
||||
description: 'The name of the variable to read'
|
||||
required: true
|
||||
outputs:
|
||||
value:
|
||||
description: 'The value of the configuration variable'
|
||||
value: ${{ steps.read-config.outputs.value }}
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: 'Read configuration variable from repo'
|
||||
id: read-config
|
||||
run: |
|
||||
# Extract value from configuration file
|
||||
value="$(grep -h ${{ inputs.var }}= make/conf/github-actions.conf | cut -d '=' -f 2-)"
|
||||
echo "::set-output name=value::$value"
|
||||
shell: bash
|
||||
80
.github/actions/do-build/action.yml
vendored
Normal file
80
.github/actions/do-build/action.yml
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Do build'
|
||||
description: 'Build the JDK using make'
|
||||
inputs:
|
||||
make-target:
|
||||
description: 'Make target(s)'
|
||||
required: true
|
||||
platform:
|
||||
description: 'Platform name'
|
||||
required: true
|
||||
debug-suffix:
|
||||
description: 'File name suffix denoting debug level, possibly empty'
|
||||
required: false
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: 'Build'
|
||||
id: build
|
||||
run: >
|
||||
make LOG=info ${{ inputs.make-target }}
|
||||
|| bash ./.github/scripts/gen-build-failure-report.sh "$GITHUB_STEP_SUMMARY"
|
||||
shell: bash
|
||||
|
||||
- name: 'Check for failure'
|
||||
id: check
|
||||
run: |
|
||||
# Check for failure marker file
|
||||
build_dir="$(ls -d build/*)"
|
||||
if [[ -e $build_dir/build-failure ]]; then
|
||||
# Collect relevant log files
|
||||
mkdir failure-logs
|
||||
cp \
|
||||
$build_dir/spec.gmk \
|
||||
$build_dir/build.log \
|
||||
$build_dir/configure.log \
|
||||
$build_dir/make-support/failure-summary.log \
|
||||
$build_dir/make-support/failure-logs/* \
|
||||
failure-logs/ 2> /dev/null || true
|
||||
echo '::set-output name=failure::true'
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: 'Upload build logs'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: failure-logs-${{ inputs.platform }}${{ inputs.debug-suffix }}
|
||||
path: failure-logs
|
||||
if: steps.check.outputs.failure == 'true'
|
||||
|
||||
# This is the best way I found to abort the job with an error message
|
||||
- name: 'Notify about build failures'
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: core.setFailed('Build failed. See summary for details.')
|
||||
if: steps.check.outputs.failure == 'true'
|
||||
109
.github/actions/get-bootjdk/action.yml
vendored
Normal file
109
.github/actions/get-bootjdk/action.yml
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Get BootJDK'
|
||||
description: 'Download the BootJDK from cache or source location'
|
||||
inputs:
|
||||
platform:
|
||||
description: 'Platform'
|
||||
required: true
|
||||
outputs:
|
||||
path:
|
||||
description: 'Path to the installed BootJDK'
|
||||
value: ${{ steps.path-name.outputs.path }}
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: 'Determine platform prefix'
|
||||
id: platform-prefix
|
||||
run: |
|
||||
# Convert platform name to upper case
|
||||
platform_prefix="$(echo ${{ inputs.platform }} | tr [a-z-] [A-Z_])"
|
||||
echo "::set-output name=value::$platform_prefix"
|
||||
shell: bash
|
||||
|
||||
- name: 'Get URL configuration'
|
||||
id: url
|
||||
uses: ./.github/actions/config
|
||||
with:
|
||||
var: ${{ steps.platform-prefix.outputs.value}}_BOOT_JDK_URL
|
||||
|
||||
- name: 'Get SHA256 configuration'
|
||||
id: sha256
|
||||
uses: ./.github/actions/config
|
||||
with:
|
||||
var: ${{ steps.platform-prefix.outputs.value}}_BOOT_JDK_SHA256
|
||||
|
||||
- name: 'Get file extension configuration'
|
||||
id: ext
|
||||
uses: ./.github/actions/config
|
||||
with:
|
||||
var: ${{ steps.platform-prefix.outputs.value}}_BOOT_JDK_EXT
|
||||
|
||||
- name: 'Check cache for BootJDK'
|
||||
id: get-cached-bootjdk
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: bootjdk/jdk
|
||||
key: boot-jdk-${{ inputs.platform }}-${{ steps.sha256.outputs.value }}
|
||||
|
||||
# macOS is missing sha256sum
|
||||
- name: 'Install sha256sum'
|
||||
run: |
|
||||
# Run Homebrew installation
|
||||
brew install coreutils
|
||||
shell: bash
|
||||
if: steps.get-cached-bootjdk.outputs.cache-hit != 'true' && runner.os == 'macOS'
|
||||
|
||||
- name: 'Download BootJDK'
|
||||
run: |
|
||||
# Download BootJDK and verify checksum
|
||||
mkdir -p bootjdk/jdk
|
||||
mkdir -p bootjdk/unpacked
|
||||
wget --progress=dot:mega -O bootjdk/jdk.${{ steps.ext.outputs.value }} '${{ steps.url.outputs.value }}'
|
||||
echo '${{ steps.sha256.outputs.value }} bootjdk/jdk.${{ steps.ext.outputs.value }}' | sha256sum -c >/dev/null -
|
||||
shell: bash
|
||||
if: steps.get-cached-bootjdk.outputs.cache-hit != 'true'
|
||||
|
||||
- name: 'Unpack BootJDK'
|
||||
run: |
|
||||
# Unpack the BootJDK and move files to a common location
|
||||
if [[ '${{ steps.ext.outputs.value }}' == 'tar.gz' ]]; then
|
||||
tar -xf bootjdk/jdk.${{ steps.ext.outputs.value }} -C bootjdk/unpacked
|
||||
else
|
||||
unzip -q bootjdk/jdk.${{ steps.ext.outputs.value }} -d bootjdk/unpacked
|
||||
fi
|
||||
jdk_root="$(dirname $(find bootjdk/unpacked -name bin -type d))"
|
||||
mv "$jdk_root"/* bootjdk/jdk/
|
||||
shell: bash
|
||||
if: steps.get-cached-bootjdk.outputs.cache-hit != 'true'
|
||||
|
||||
- name: 'Export path to where BootJDK is installed'
|
||||
id: path-name
|
||||
run: |
|
||||
# Export the path
|
||||
echo '::set-output name=path::bootjdk/jdk'
|
||||
shell: bash
|
||||
109
.github/actions/get-bundles/action.yml
vendored
Normal file
109
.github/actions/get-bundles/action.yml
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Get bundles'
|
||||
description: 'Download resulting JDK bundles'
|
||||
inputs:
|
||||
platform:
|
||||
description: 'Platform name'
|
||||
required: true
|
||||
debug-suffix:
|
||||
description: 'File name suffix denoting debug level, possibly empty'
|
||||
required: false
|
||||
outputs:
|
||||
jdk-path:
|
||||
description: 'Path to the installed JDK bundle'
|
||||
value: ${{ steps.path-name.outputs.jdk }}
|
||||
symbols-path:
|
||||
description: 'Path to the installed symbols bundle'
|
||||
value: ${{ steps.path-name.outputs.symbols }}
|
||||
tests-path:
|
||||
description: 'Path to the installed tests bundle'
|
||||
value: ${{ steps.path-name.outputs.tests }}
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: 'Download bundles artifact'
|
||||
id: download-bundles
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}
|
||||
path: bundles
|
||||
continue-on-error: true
|
||||
|
||||
- name: 'Download bundles artifact (retry)'
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}
|
||||
path: bundles
|
||||
if: steps.download-bundles.outcome == 'failure'
|
||||
|
||||
- name: 'Unpack bundles'
|
||||
run: |
|
||||
if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.zip ]]; then
|
||||
echo 'Unpacking jdk bundle...'
|
||||
mkdir -p bundles/jdk
|
||||
unzip -q bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.zip -d bundles/jdk
|
||||
fi
|
||||
|
||||
if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz ]]; then
|
||||
echo 'Unpacking jdk bundle...'
|
||||
mkdir -p bundles/jdk
|
||||
tar -xf bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz -C bundles/jdk
|
||||
fi
|
||||
|
||||
if [[ -e bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz ]]; then
|
||||
echo 'Unpacking symbols bundle...'
|
||||
mkdir -p bundles/symbols
|
||||
tar -xf bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz -C bundles/symbols
|
||||
fi
|
||||
|
||||
if [[ -e bundles/tests-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz ]]; then
|
||||
echo 'Unpacking tests bundle...'
|
||||
mkdir -p bundles/tests
|
||||
tar -xf bundles/tests-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz -C bundles/tests
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: 'Export paths to where bundles are installed'
|
||||
id: path-name
|
||||
run: |
|
||||
# Export the paths
|
||||
|
||||
jdk_dir="$GITHUB_WORKSPACE/$(dirname $(find bundles/jdk -name bin -type d))"
|
||||
symbols_dir="$GITHUB_WORKSPACE/$(dirname $(find bundles/symbols -name bin -type d))"
|
||||
tests_dir="$GITHUB_WORKSPACE/bundles/tests"
|
||||
|
||||
if [[ '${{ runner.os }}' == 'Windows' ]]; then
|
||||
jdk_dir="$(cygpath $jdk_dir)"
|
||||
symbols_dir="$(cygpath $symbols_dir)"
|
||||
tests_dir="$(cygpath $tests_dir)"
|
||||
fi
|
||||
|
||||
echo "::set-output name=jdk::$jdk_dir"
|
||||
echo "::set-output name=symbols::$symbols_dir"
|
||||
echo "::set-output name=tests::$tests_dir"
|
||||
shell: bash
|
||||
54
.github/actions/get-gtest/action.yml
vendored
Normal file
54
.github/actions/get-gtest/action.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Get GTest'
|
||||
description: 'Download GTest source'
|
||||
outputs:
|
||||
path:
|
||||
description: 'Path to the installed GTest'
|
||||
value: ${{ steps.path-name.outputs.path }}
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: 'Get GTest version configuration'
|
||||
id: version
|
||||
uses: ./.github/actions/config
|
||||
with:
|
||||
var: GTEST_VERSION
|
||||
|
||||
- name: 'Checkout GTest source'
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: google/googletest
|
||||
ref: 'release-${{ steps.version.outputs.value }}'
|
||||
path: gtest
|
||||
|
||||
- name: 'Export path to where GTest is installed'
|
||||
id: path-name
|
||||
run: |
|
||||
# Export the path
|
||||
echo '::set-output name=path::gtest'
|
||||
shell: bash
|
||||
72
.github/actions/get-jtreg/action.yml
vendored
Normal file
72
.github/actions/get-jtreg/action.yml
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Get JTReg'
|
||||
description: 'Download JTReg from cache or source location'
|
||||
outputs:
|
||||
path:
|
||||
description: 'Path to the installed JTReg'
|
||||
value: ${{ steps.path-name.outputs.path }}
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: 'Get JTReg version configuration'
|
||||
id: version
|
||||
uses: ./.github/actions/config
|
||||
with:
|
||||
var: JTREG_VERSION
|
||||
|
||||
- name: 'Check cache for JTReg'
|
||||
id: get-cached-jtreg
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: jtreg/installed
|
||||
key: jtreg-${{ steps.version.outputs.value }}
|
||||
|
||||
- name: 'Checkout the JTReg source'
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: openjdk/jtreg
|
||||
ref: jtreg-${{ steps.version.outputs.value }}
|
||||
path: jtreg/src
|
||||
if: steps.get-cached-jtreg.outputs.cache-hit != 'true'
|
||||
|
||||
- name: 'Build JTReg'
|
||||
run: |
|
||||
# Build JTReg and move files to the proper locations
|
||||
bash make/build.sh --jdk "$JAVA_HOME_11_X64"
|
||||
mkdir ../installed
|
||||
mv build/images/jtreg/* ../installed
|
||||
working-directory: jtreg/src
|
||||
shell: bash
|
||||
if: steps.get-cached-jtreg.outputs.cache-hit != 'true'
|
||||
|
||||
- name: 'Export path to where JTReg is installed'
|
||||
id: path-name
|
||||
run: |
|
||||
# Export the path
|
||||
echo '::set-output name=path::jtreg/installed'
|
||||
shell: bash
|
||||
44
.github/actions/get-msys2/action.yml
vendored
Normal file
44
.github/actions/get-msys2/action.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Get MSYS2'
|
||||
description: 'Download MSYS2 and prepare a Windows host'
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: 'Install MSYS2'
|
||||
uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
install: 'autoconf tar unzip zip make'
|
||||
path-type: minimal
|
||||
location: msys2
|
||||
|
||||
# We can't run bash until this is completed, so stick with pwsh
|
||||
- name: 'Set MSYS2 path'
|
||||
run: |
|
||||
# Prepend msys2/msys64/usr/bin to the PATH
|
||||
echo "$env:GITHUB_WORKSPACE/msys2/msys64/usr/bin" >> $env:GITHUB_PATH
|
||||
shell: pwsh
|
||||
77
.github/actions/upload-bundles/action.yml
vendored
Normal file
77
.github/actions/upload-bundles/action.yml
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Upload bundles'
|
||||
description: 'Upload resulting JDK bundles'
|
||||
inputs:
|
||||
platform:
|
||||
description: 'Platform name'
|
||||
required: true
|
||||
debug-suffix:
|
||||
description: 'File name suffix denoting debug level, possibly empty'
|
||||
required: false
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
|
||||
- name: 'Determine bundle names'
|
||||
id: bundles
|
||||
run: |
|
||||
# Rename bundles to consistent names
|
||||
jdk_bundle_zip="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}.zip 2> /dev/null || true)"
|
||||
jdk_bundle_tar_gz="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)"
|
||||
symbols_bundle="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}-symbols.tar.gz 2> /dev/null || true)"
|
||||
tests_bundle="$(ls build/*/bundles/jdk-*_bin-tests${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)"
|
||||
|
||||
mkdir bundles
|
||||
|
||||
if [[ "$jdk_bundle_zip" != "" ]]; then
|
||||
mv "$jdk_bundle_zip" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.zip"
|
||||
fi
|
||||
if [[ "$jdk_bundle_tar_gz" != "" ]]; then
|
||||
mv "$jdk_bundle_tar_gz" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz"
|
||||
fi
|
||||
if [[ "$symbols_bundle" != "" ]]; then
|
||||
mv "$symbols_bundle" "bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz"
|
||||
fi
|
||||
if [[ "$tests_bundle" != "" ]]; then
|
||||
mv "$tests_bundle" "bundles/tests-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz"
|
||||
fi
|
||||
|
||||
if [[ "$jdk_bundle_zip$jdk_bundle_tar_gz$symbols_bundle$tests_bundle" != "" ]]; then
|
||||
echo '::set-output name=bundles-found::true'
|
||||
else
|
||||
echo '::set-output name=bundles-found::false'
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: 'Upload bundles artifact'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}
|
||||
path: bundles
|
||||
retention-days: 1
|
||||
if: steps.bundles.outputs.bundles-found == 'true'
|
||||
51
.github/scripts/gen-build-failure-report.sh
vendored
Normal file
51
.github/scripts/gen-build-failure-report.sh
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
GITHUB_STEP_SUMMARY="$1"
|
||||
BUILD_DIR="$(ls -d build/*)"
|
||||
|
||||
# Send signal to the do-build action that we failed
|
||||
touch "$BUILD_DIR/build-failure"
|
||||
|
||||
(
|
||||
echo '### :boom: Build failure summary'
|
||||
echo ''
|
||||
echo 'The build failed. Here follows the failure summary from the build.'
|
||||
echo '<details><summary><b>View build failure summary</b></summary>'
|
||||
echo ''
|
||||
echo '```'
|
||||
if [[ -f "$BUILD_DIR/make-support/failure-summary.log" ]]; then
|
||||
cat "$BUILD_DIR/make-support/failure-summary.log"
|
||||
else
|
||||
echo "Failure summary ($BUILD_DIR/make-support/failure-summary.log) not found"
|
||||
fi
|
||||
echo '```'
|
||||
echo '</details>'
|
||||
echo ''
|
||||
|
||||
echo ''
|
||||
echo ':arrow_right: To see the entire test log, click the job in the list to the left. To download logs, see the `failure-logs` [artifact above](#artifacts).'
|
||||
) >> $GITHUB_STEP_SUMMARY
|
||||
92
.github/scripts/gen-test-results.sh
vendored
Normal file
92
.github/scripts/gen-test-results.sh
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
GITHUB_STEP_SUMMARY="$1"
|
||||
|
||||
test_suite_name=$(cat build/run-test-prebuilt/test-support/test-last-ids.txt)
|
||||
results_dir=build/run-test-prebuilt/test-results/$test_suite_name/text
|
||||
report_dir=build/run-test-prebuilt/test-support/$test_suite_name
|
||||
|
||||
failures=$(sed -E -e 's/(.*)\.(java|sh)/\1/' -e '/^#/d' $results_dir/newfailures.txt 2> /dev/null || true)
|
||||
errors=$(sed -E -e 's/(.*)\.(java|sh)/\1/' -e '/^#/d' $results_dir/other_errors.txt 2> /dev/null || true)
|
||||
|
||||
if [[ "$failures" = "" && "$errors" = "" ]]; then
|
||||
# If we have nothing to report, exit this step now
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "### Test output for failed tests" >> $GITHUB_STEP_SUMMARY
|
||||
for test in $failures $errors; do
|
||||
anchor="$(echo "$test" | tr [A-Z/] [a-z_])"
|
||||
base_path="$(echo "$test" | tr '#' '_')"
|
||||
report_file="$report_dir/$base_path.jtr"
|
||||
hs_err_files=$(ls $report_dir/$base_path/hs_err*.log 2> /dev/null || true)
|
||||
echo "#### <a id="$anchor">$test"
|
||||
|
||||
echo '<details><summary>View test results</summary>'
|
||||
echo ''
|
||||
echo '```'
|
||||
if [[ -f "$report_file" ]]; then
|
||||
cat "$report_file"
|
||||
else
|
||||
echo "Error: Result file $report_file not found"
|
||||
fi
|
||||
echo '```'
|
||||
echo '</details>'
|
||||
echo ''
|
||||
|
||||
if [[ "$hs_err_files" != "" ]]; then
|
||||
echo '<details><summary>View HotSpot error log</summary>'
|
||||
echo ''
|
||||
for hs_err in $hs_err_files; do
|
||||
echo '```'
|
||||
echo "$hs_err:"
|
||||
echo ''
|
||||
cat "$hs_err"
|
||||
echo '```'
|
||||
done
|
||||
|
||||
echo '</details>'
|
||||
echo ''
|
||||
fi
|
||||
|
||||
done >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
# With many failures, the summary can easily exceed 1024 kB, the limit set by Github
|
||||
# Trim it down if so.
|
||||
summary_size=$(wc -c < $GITHUB_STEP_SUMMARY)
|
||||
if [[ $summary_size -gt 1000000 ]]; then
|
||||
# Trim to below 1024 kB, and cut off after the last detail group
|
||||
head -c 1000000 $GITHUB_STEP_SUMMARY | tac | sed -n -e '/<\/details>/,$ p' | tac > $GITHUB_STEP_SUMMARY.tmp
|
||||
mv $GITHUB_STEP_SUMMARY.tmp $GITHUB_STEP_SUMMARY
|
||||
(
|
||||
echo ''
|
||||
echo ':x: **WARNING: Summary is too large and has been truncated.**'
|
||||
echo ''
|
||||
) >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
echo ':arrow_right: To see the entire test log, click the job in the list to the left.' >> $GITHUB_STEP_SUMMARY
|
||||
69
.github/scripts/gen-test-summary.sh
vendored
Normal file
69
.github/scripts/gen-test-summary.sh
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
GITHUB_STEP_SUMMARY="$1"
|
||||
|
||||
test_suite_name=$(cat build/run-test-prebuilt/test-support/test-last-ids.txt)
|
||||
results_dir=build/run-test-prebuilt/test-results/$test_suite_name/text
|
||||
|
||||
if [[ ! -f build/run-test-prebuilt/make-support/exit-with-error ]]; then
|
||||
# There were no failures, exit now
|
||||
exit
|
||||
fi
|
||||
|
||||
failures=$(sed -E -e 's/(.*)\.(java|sh)/\1/' -e '/^#/d' $results_dir/newfailures.txt 2> /dev/null || true)
|
||||
errors=$(sed -E -e 's/(.*)\.(java|sh)/\1/' -e '/^#/d' $results_dir/other_errors.txt 2> /dev/null || true)
|
||||
failure_count=$(echo $failures | wc -w || true)
|
||||
error_count=$(echo $errors | wc -w || true)
|
||||
|
||||
if [[ "$failures" = "" && "$errors" = "" ]]; then
|
||||
# We know something went wrong, but not what
|
||||
echo '::set-output name=error-message::Unspecified test suite failure. Please see log for job for details.'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo '::set-output name=failure::true'
|
||||
echo "::set-output name=error-message::Test run reported $failure_count test failure(s) and $error_count error(s). See summary for details."
|
||||
|
||||
echo '### :boom: Test failures summary' >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
if [[ "$failures" != "" ]]; then
|
||||
echo '' >> $GITHUB_STEP_SUMMARY
|
||||
echo 'These tests reported failure:' >> $GITHUB_STEP_SUMMARY
|
||||
for test in $failures; do
|
||||
anchor="$(echo "$test" | tr [A-Z/] [a-z_])"
|
||||
echo "* [$test](#user-content-$anchor)"
|
||||
done >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
|
||||
if [[ "$errors" != "" ]]; then
|
||||
echo '' >> $GITHUB_STEP_SUMMARY
|
||||
echo 'These tests reported errors:' >> $GITHUB_STEP_SUMMARY
|
||||
for test in $errors; do
|
||||
anchor="$(echo "$test" | tr [A-Z/] [a-z_])"
|
||||
echo "* [$test](#user-content-$anchor)"
|
||||
done >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
154
.github/workflows/build-cross-compile.yml
vendored
Normal file
154
.github/workflows/build-cross-compile.yml
vendored
Normal file
@@ -0,0 +1,154 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Build (cross-compile)'
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
gcc-major-version:
|
||||
required: false
|
||||
type: string
|
||||
default: '10'
|
||||
apt-gcc-version:
|
||||
required: false
|
||||
type: string
|
||||
default: '10.3.0-1ubuntu1~20.04'
|
||||
apt-gcc-cross-suffix:
|
||||
required: false
|
||||
type: string
|
||||
default: 'cross1'
|
||||
|
||||
jobs:
|
||||
build-cross-compile:
|
||||
name: build
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target-cpu:
|
||||
- aarch64
|
||||
- arm
|
||||
- s390x
|
||||
- ppc64le
|
||||
include:
|
||||
- target-cpu: aarch64
|
||||
debian-arch: arm64
|
||||
gnu-arch: aarch64
|
||||
- target-cpu: arm
|
||||
debian-arch: armhf
|
||||
gnu-arch: arm
|
||||
gnu-abi: eabihf
|
||||
- target-cpu: s390x
|
||||
debian-arch: s390x
|
||||
gnu-arch: s390x
|
||||
- target-cpu: ppc64le
|
||||
debian-arch: ppc64el
|
||||
gnu-arch: powerpc64le
|
||||
|
||||
steps:
|
||||
- name: 'Checkout the JDK source'
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: 'Get the BootJDK'
|
||||
id: bootjdk
|
||||
uses: ./.github/actions/get-bootjdk
|
||||
with:
|
||||
platform: linux-x64
|
||||
|
||||
# Use linux-x64 JDK bundle as build JDK
|
||||
- name: 'Get build JDK'
|
||||
id: buildjdk
|
||||
uses: ./.github/actions/get-bundles
|
||||
with:
|
||||
platform: linux-x64
|
||||
|
||||
# Upgrading apt to solve libc6 installation bugs, see JDK-8260460.
|
||||
- name: 'Install toolchain and dependencies'
|
||||
run: |
|
||||
# Install dependencies using apt-get
|
||||
sudo apt-get update
|
||||
sudo apt-get install --only-upgrade apt
|
||||
sudo apt-get install \
|
||||
gcc-${{ inputs.gcc-major-version }}=${{ inputs.apt-gcc-version }} \
|
||||
g++-${{ inputs.gcc-major-version }}=${{ inputs.apt-gcc-version }} \
|
||||
gcc-${{ inputs.gcc-major-version }}-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}=${{ inputs.apt-gcc-version }}${{ inputs.apt-gcc-cross-suffix }} \
|
||||
g++-${{ inputs.gcc-major-version }}-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}=${{ inputs.apt-gcc-version }}${{ inputs.apt-gcc-cross-suffix }} \
|
||||
libxrandr-dev libxtst-dev libcups2-dev libasound2-dev
|
||||
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ inputs.gcc-major-version }} 100 --slave /usr/bin/g++ g++ /usr/bin/g++-${{ inputs.gcc-major-version }}
|
||||
|
||||
- name: 'Check cache for sysroot'
|
||||
id: get-cached-sysroot
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: sysroot
|
||||
key: sysroot-${{ matrix.debian-arch }}-${{ hashFiles('./.github/workflows/build-cross-compile.yml') }}
|
||||
|
||||
- name: 'Install sysroot dependencies'
|
||||
run: sudo apt-get install debootstrap qemu-user-static
|
||||
if: steps.get-cached-sysroot.outputs.cache-hit != 'true'
|
||||
|
||||
- name: 'Create sysroot'
|
||||
run: >
|
||||
sudo qemu-debootstrap
|
||||
--arch=${{ matrix.debian-arch }}
|
||||
--verbose
|
||||
--include=fakeroot,symlinks,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxrandr-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype6-dev,libpng-dev
|
||||
--resolve-deps
|
||||
buster
|
||||
sysroot
|
||||
https://httpredir.debian.org/debian/
|
||||
if: steps.get-cached-sysroot.outputs.cache-hit != 'true'
|
||||
|
||||
- name: 'Prepare sysroot'
|
||||
run: |
|
||||
# Prepare sysroot and remove unused files to minimize cache
|
||||
sudo chroot sysroot symlinks -cr .
|
||||
sudo chown ${USER} -R sysroot
|
||||
rm -rf sysroot/{dev,proc,run,sys}
|
||||
if: steps.get-cached-sysroot.outputs.cache-hit != 'true'
|
||||
|
||||
- name: 'Configure'
|
||||
run: >
|
||||
bash configure
|
||||
--with-conf-name=linux-${{ matrix.target-cpu }}
|
||||
--with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA}
|
||||
--with-boot-jdk=${{ steps.bootjdk.outputs.path }}
|
||||
--with-zlib=system
|
||||
--enable-debug
|
||||
--disable-precompiled-headers
|
||||
--openjdk-target=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}
|
||||
--with-sysroot=sysroot
|
||||
--with-build-jdk=${{ steps.buildjdk.outputs.jdk-path }}
|
||||
CC=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}-gcc-10
|
||||
CXX=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}-g++-10
|
||||
|
||||
- name: 'Build'
|
||||
id: build
|
||||
uses: ./.github/actions/do-build
|
||||
with:
|
||||
make-target: 'hotspot'
|
||||
platform: linux-${{ matrix.target-cpu }}
|
||||
132
.github/workflows/build-linux.yml
vendored
Normal file
132
.github/workflows/build-linux.yml
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Build (linux)'
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
platform:
|
||||
required: true
|
||||
type: string
|
||||
extra-conf-options:
|
||||
required: false
|
||||
type: string
|
||||
make-target:
|
||||
required: false
|
||||
type: string
|
||||
default: 'product-bundles test-bundles'
|
||||
debug-levels:
|
||||
required: false
|
||||
type: string
|
||||
default: '[ "debug", "release" ]'
|
||||
apt-gcc-version:
|
||||
required: true
|
||||
type: string
|
||||
apt-architecture:
|
||||
required: false
|
||||
type: string
|
||||
apt-extra-packages:
|
||||
required: false
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
name: build
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
debug-level: ${{ fromJSON(inputs.debug-levels) }}
|
||||
include:
|
||||
- debug-level: debug
|
||||
flags: --with-debug-level=fastdebug
|
||||
suffix: -debug
|
||||
|
||||
steps:
|
||||
- name: 'Checkout the JDK source'
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: 'Get the BootJDK'
|
||||
id: bootjdk
|
||||
uses: ./.github/actions/get-bootjdk
|
||||
with:
|
||||
platform: linux-x64
|
||||
|
||||
- name: 'Get JTReg'
|
||||
id: jtreg
|
||||
uses: ./.github/actions/get-jtreg
|
||||
|
||||
- name: 'Get GTest'
|
||||
id: gtest
|
||||
uses: ./.github/actions/get-gtest
|
||||
|
||||
- name: 'Set architecture'
|
||||
id: arch
|
||||
run: |
|
||||
# Set a proper suffix for packages if using a different architecture
|
||||
if [[ '${{ inputs.apt-architecture }}' != '' ]]; then
|
||||
echo '::set-output name=suffix:::${{ inputs.apt-architecture }}'
|
||||
fi
|
||||
|
||||
# Upgrading apt to solve libc6 installation bugs, see JDK-8260460.
|
||||
- name: 'Install toolchain and dependencies'
|
||||
run: |
|
||||
# Install dependencies using apt-get
|
||||
if [[ '${{ inputs.apt-architecture }}' != '' ]]; then
|
||||
sudo dpkg --add-architecture ${{ inputs.apt-architecture }}
|
||||
fi
|
||||
sudo apt-get update
|
||||
sudo apt-get install --only-upgrade apt
|
||||
sudo apt-get install gcc-${{ inputs.apt-gcc-version }} g++-${{ inputs.apt-gcc-version }} libxrandr-dev${{ steps.arch.outputs.suffix }} libxtst-dev${{ steps.arch.outputs.suffix }} libcups2-dev${{ steps.arch.outputs.suffix }} libasound2-dev${{ steps.arch.outputs.suffix }} ${{ inputs.apt-extra-packages }}
|
||||
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10
|
||||
|
||||
- name: 'Configure'
|
||||
run: >
|
||||
bash configure
|
||||
--with-conf-name=${{ inputs.platform }}
|
||||
${{ matrix.flags }}
|
||||
--with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA}
|
||||
--with-boot-jdk=${{ steps.bootjdk.outputs.path }}
|
||||
--with-jtreg=${{ steps.jtreg.outputs.path }}
|
||||
--with-gtest=${{ steps.gtest.outputs.path }}
|
||||
--enable-jtreg-failure-handler
|
||||
--with-zlib=system
|
||||
${{ inputs.extra-conf-options }}
|
||||
|
||||
- name: 'Build'
|
||||
id: build
|
||||
uses: ./.github/actions/do-build
|
||||
with:
|
||||
make-target: '${{ inputs.make-target }}'
|
||||
platform: ${{ inputs.platform }}
|
||||
debug-suffix: '${{ matrix.suffix }}'
|
||||
|
||||
- name: 'Upload bundles'
|
||||
uses: ./.github/actions/upload-bundles
|
||||
with:
|
||||
platform: ${{ inputs.platform }}
|
||||
debug-suffix: '${{ matrix.suffix }}'
|
||||
114
.github/workflows/build-macos.yml
vendored
Normal file
114
.github/workflows/build-macos.yml
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Build (macos)'
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
platform:
|
||||
required: true
|
||||
type: string
|
||||
extra-conf-options:
|
||||
required: false
|
||||
type: string
|
||||
make-target:
|
||||
required: false
|
||||
type: string
|
||||
default: 'product-bundles test-bundles'
|
||||
debug-levels:
|
||||
required: false
|
||||
type: string
|
||||
default: '[ "debug", "release" ]'
|
||||
xcode-toolset-version:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
build-macos:
|
||||
name: build
|
||||
runs-on: macos-11
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
debug-level: ${{ fromJSON(inputs.debug-levels) }}
|
||||
include:
|
||||
- debug-level: debug
|
||||
flags: --with-debug-level=fastdebug
|
||||
suffix: -debug
|
||||
|
||||
steps:
|
||||
- name: 'Checkout the JDK source'
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: 'Get the BootJDK'
|
||||
id: bootjdk
|
||||
uses: ./.github/actions/get-bootjdk
|
||||
with:
|
||||
platform: macos-x64
|
||||
|
||||
- name: 'Get JTReg'
|
||||
id: jtreg
|
||||
uses: ./.github/actions/get-jtreg
|
||||
|
||||
- name: 'Get GTest'
|
||||
id: gtest
|
||||
uses: ./.github/actions/get-gtest
|
||||
|
||||
- name: 'Install toolchain and dependencies'
|
||||
run: |
|
||||
# Run Homebrew installation and xcode-select
|
||||
brew install make
|
||||
sudo xcode-select --switch /Applications/Xcode_${{ inputs.xcode-toolset-version }}.app/Contents/Developer
|
||||
# This will make GNU make available as 'make' and not only as 'gmake'
|
||||
echo '/usr/local/opt/make/libexec/gnubin' >> $GITHUB_PATH
|
||||
|
||||
- name: 'Configure'
|
||||
run: >
|
||||
bash configure
|
||||
--with-conf-name=${{ inputs.platform }}
|
||||
${{ matrix.flags }}
|
||||
--with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA}
|
||||
--with-boot-jdk=${{ steps.bootjdk.outputs.path }}
|
||||
--with-jtreg=${{ steps.jtreg.outputs.path }}
|
||||
--with-gtest=${{ steps.gtest.outputs.path }}
|
||||
--enable-jtreg-failure-handler
|
||||
--with-zlib=system
|
||||
${{ inputs.extra-conf-options }}
|
||||
|
||||
- name: 'Build'
|
||||
id: build
|
||||
uses: ./.github/actions/do-build
|
||||
with:
|
||||
make-target: '${{ inputs.make-target }}'
|
||||
platform: ${{ inputs.platform }}
|
||||
debug-suffix: '${{ matrix.suffix }}'
|
||||
|
||||
- name: 'Upload bundles'
|
||||
uses: ./.github/actions/upload-bundles
|
||||
with:
|
||||
platform: ${{ inputs.platform }}
|
||||
debug-suffix: '${{ matrix.suffix }}'
|
||||
131
.github/workflows/build-windows.yml
vendored
Normal file
131
.github/workflows/build-windows.yml
vendored
Normal file
@@ -0,0 +1,131 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Build (windows)'
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
platform:
|
||||
required: true
|
||||
type: string
|
||||
extra-conf-options:
|
||||
required: false
|
||||
type: string
|
||||
make-target:
|
||||
required: false
|
||||
type: string
|
||||
default: 'product-bundles test-bundles'
|
||||
debug-levels:
|
||||
required: false
|
||||
type: string
|
||||
default: '[ "debug", "release" ]'
|
||||
msvc-toolset-version:
|
||||
required: true
|
||||
type: string
|
||||
msvc-toolset-architecture:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
env:
|
||||
# These are needed to make the MSYS2 bash work properly
|
||||
MSYS2_PATH_TYPE: minimal
|
||||
CHERE_INVOKING: 1
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
name: build
|
||||
runs-on: windows-2019
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
debug-level: ${{ fromJSON(inputs.debug-levels) }}
|
||||
include:
|
||||
- debug-level: debug
|
||||
flags: --with-debug-level=fastdebug
|
||||
suffix: -debug
|
||||
|
||||
steps:
|
||||
- name: 'Checkout the JDK source'
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: 'Get MSYS2'
|
||||
uses: ./.github/actions/get-msys2
|
||||
|
||||
- name: 'Get the BootJDK'
|
||||
id: bootjdk
|
||||
uses: ./.github/actions/get-bootjdk
|
||||
with:
|
||||
platform: windows-x64
|
||||
|
||||
- name: 'Get JTReg'
|
||||
id: jtreg
|
||||
uses: ./.github/actions/get-jtreg
|
||||
|
||||
- name: 'Get GTest'
|
||||
id: gtest
|
||||
uses: ./.github/actions/get-gtest
|
||||
|
||||
- name: 'Install toolchain and dependencies'
|
||||
run: |
|
||||
# Run Visual Studio Installer
|
||||
'/c/Program Files (x86)/Microsoft Visual Studio/Installer/vs_installer.exe' \
|
||||
modify --quiet --installPath 'C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise' \
|
||||
--add Microsoft.VisualStudio.Component.VC.${{ inputs.msvc-toolset-version }}.${{ inputs.msvc-toolset-architecture }}
|
||||
|
||||
- name: 'Configure'
|
||||
run: >
|
||||
bash configure
|
||||
--with-conf-name=${{ inputs.platform }}
|
||||
${{ matrix.flags }}
|
||||
--with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA}
|
||||
--with-boot-jdk=${{ steps.bootjdk.outputs.path }}
|
||||
--with-jtreg=${{ steps.jtreg.outputs.path }}
|
||||
--with-gtest=${{ steps.gtest.outputs.path }}
|
||||
--enable-jtreg-failure-handler
|
||||
--with-msvc-toolset-version=${{ inputs.msvc-toolset-version }}
|
||||
${{ inputs.extra-conf-options }}
|
||||
env:
|
||||
# We need a minimal PATH on Windows
|
||||
# Set PATH to "", so just GITHUB_PATH is included
|
||||
PATH: ''
|
||||
|
||||
- name: 'Build'
|
||||
id: build
|
||||
uses: ./.github/actions/do-build
|
||||
with:
|
||||
make-target: '${{ inputs.make-target }}'
|
||||
platform: ${{ inputs.platform }}
|
||||
debug-suffix: '${{ matrix.suffix }}'
|
||||
|
||||
- name: 'Upload bundles'
|
||||
uses: ./.github/actions/upload-bundles
|
||||
with:
|
||||
platform: ${{ inputs.platform }}
|
||||
debug-suffix: '${{ matrix.suffix }}'
|
||||
331
.github/workflows/main.yml
vendored
Normal file
331
.github/workflows/main.yml
vendored
Normal file
@@ -0,0 +1,331 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'OpenJDK GHA Sanity Checks'
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- master
|
||||
- pr/*
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
platforms:
|
||||
description: 'Platform(s) to execute on (comma separated, e.g. "linux-x64, macos, aarch64")'
|
||||
required: true
|
||||
default: 'linux-x64, linux-x86, linux-x64-variants, linux-cross-compile, macos-x64, macos-aarch64, windows-x64, windows-aarch64'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
|
||||
###
|
||||
### Determine platforms to include
|
||||
###
|
||||
|
||||
select:
|
||||
name: 'Select platforms'
|
||||
runs-on: ubuntu-20.04
|
||||
outputs:
|
||||
linux-x64: ${{ steps.include.outputs.linux-x64 }}
|
||||
linux-x86: ${{ steps.include.outputs.linux-x86 }}
|
||||
linux-x64-variants: ${{ steps.include.outputs.linux-x64-variants }}
|
||||
linux-cross-compile: ${{ steps.include.outputs.linux-cross-compile }}
|
||||
macos-x64: ${{ steps.include.outputs.macos-x64 }}
|
||||
macos-aarch64: ${{ steps.include.outputs.macos-aarch64 }}
|
||||
windows-x64: ${{ steps.include.outputs.windows-x64 }}
|
||||
windows-aarch64: ${{ steps.include.outputs.windows-aarch64 }}
|
||||
|
||||
steps:
|
||||
# This function must be inlined in main.yml, or we'd be forced to checkout the repo
|
||||
- name: 'Check what jobs to run'
|
||||
id: include
|
||||
run: |
|
||||
# Determine which platform jobs to run
|
||||
|
||||
# Returns 'true' if the input platform list matches any of the platform monikers given as argument,
|
||||
# 'false' otherwise.
|
||||
# arg $1: platform name or names to look for
|
||||
function check_platform() {
|
||||
if [[ '${{ !secrets.JDK_SUBMIT_FILTER || startsWith(github.ref, 'refs/heads/submit/') }}' == 'false' ]]; then
|
||||
# If JDK_SUBMIT_FILTER is set, and this is not a "submit/" branch, don't run anything
|
||||
echo 'false'
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ $GITHUB_EVENT_NAME == workflow_dispatch ]]; then
|
||||
input='${{ github.event.inputs.platforms }}'
|
||||
elif [[ $GITHUB_EVENT_NAME == push ]]; then
|
||||
input='${{ secrets.JDK_SUBMIT_PLATFORMS }}'
|
||||
else
|
||||
echo 'Internal error in GHA'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
normalized_input="$(echo ,$input, | tr -d ' ')"
|
||||
if [[ "$normalized_input" == ",," ]]; then
|
||||
# For an empty input, assume all platforms should run
|
||||
echo 'true'
|
||||
return
|
||||
else
|
||||
# Check for all acceptable platform names
|
||||
for part in $* ; do
|
||||
if echo "$normalized_input" | grep -q -e ",$part," ; then
|
||||
echo 'true'
|
||||
return
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo 'false'
|
||||
}
|
||||
|
||||
echo "::set-output name=linux-x64::$(check_platform linux-x64 linux x64)"
|
||||
echo "::set-output name=linux-x86::$(check_platform linux-x86 linux x86)"
|
||||
echo "::set-output name=linux-x64-variants::$(check_platform linux-x64-variants variants)"
|
||||
echo "::set-output name=linux-cross-compile::$(check_platform linux-cross-compile cross-compile)"
|
||||
echo "::set-output name=macos-x64::$(check_platform macos-x64 macos x64)"
|
||||
echo "::set-output name=macos-aarch64::$(check_platform macos-aarch64 macos aarch64)"
|
||||
echo "::set-output name=windows-x64::$(check_platform windows-x64 windows x64)"
|
||||
echo "::set-output name=windows-aarch64::$(check_platform windows-aarch64 windows aarch64)"
|
||||
|
||||
###
|
||||
### Build jobs
|
||||
###
|
||||
|
||||
build-linux-x64:
|
||||
name: linux-x64
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-linux.yml
|
||||
with:
|
||||
platform: linux-x64
|
||||
apt-gcc-version: '10=10.3.0-1ubuntu1~20.04'
|
||||
# The linux-x64 jdk bundle is used as buildjdk for the cross-compile job
|
||||
if: needs.select.outputs.linux-x64 == 'true' || needs.select.outputs.linux-cross-compile == 'true'
|
||||
|
||||
build-linux-x86:
|
||||
name: linux-x86
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-linux.yml
|
||||
with:
|
||||
platform: linux-x86
|
||||
apt-gcc-version: '10-multilib'
|
||||
apt-architecture: 'i386'
|
||||
# Some multilib libraries do not have proper inter-dependencies, so we have to
|
||||
# install their dependencies manually.
|
||||
apt-extra-packages: 'libfreetype6-dev:i386 libtiff-dev:i386 libcupsimage2-dev:i386'
|
||||
extra-conf-options: '--with-target-bits=32'
|
||||
if: needs.select.outputs.linux-x86 == 'true'
|
||||
|
||||
build-linux-x64-hs-nopch:
|
||||
name: linux-x64-hs-nopch
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-linux.yml
|
||||
with:
|
||||
platform: linux-x64
|
||||
make-target: 'hotspot'
|
||||
debug-levels: '[ "debug" ]'
|
||||
apt-gcc-version: '10=10.3.0-1ubuntu1~20.04'
|
||||
extra-conf-options: '--disable-precompiled-headers'
|
||||
if: needs.select.outputs.linux-x64-variants == 'true'
|
||||
|
||||
build-linux-x64-hs-zero:
|
||||
name: linux-x64-hs-zero
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-linux.yml
|
||||
with:
|
||||
platform: linux-x64
|
||||
make-target: 'hotspot'
|
||||
debug-levels: '[ "debug" ]'
|
||||
apt-gcc-version: '10=10.3.0-1ubuntu1~20.04'
|
||||
extra-conf-options: '--with-jvm-variants=zero --disable-precompiled-headers'
|
||||
if: needs.select.outputs.linux-x64-variants == 'true'
|
||||
|
||||
build-linux-x64-hs-minimal:
|
||||
name: linux-x64-hs-minimal
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-linux.yml
|
||||
with:
|
||||
platform: linux-x64
|
||||
make-target: 'hotspot'
|
||||
debug-levels: '[ "debug" ]'
|
||||
apt-gcc-version: '10=10.3.0-1ubuntu1~20.04'
|
||||
extra-conf-options: '--with-jvm-variants=minimal --disable-precompiled-headers'
|
||||
if: needs.select.outputs.linux-x64-variants == 'true'
|
||||
|
||||
build-linux-x64-hs-optimized:
|
||||
name: linux-x64-hs-optimized
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-linux.yml
|
||||
with:
|
||||
platform: linux-x64
|
||||
make-target: 'hotspot'
|
||||
# Technically this is not the "debug" level, but we can't inject a new matrix state for just this job
|
||||
debug-levels: '[ "debug" ]'
|
||||
apt-gcc-version: '10=10.3.0-1ubuntu1~20.04'
|
||||
extra-conf-options: '--with-debug-level=optimized --disable-precompiled-headers'
|
||||
if: needs.select.outputs.linux-x64-variants == 'true'
|
||||
|
||||
build-linux-cross-compile:
|
||||
name: linux-cross-compile
|
||||
needs:
|
||||
- select
|
||||
- build-linux-x64
|
||||
uses: ./.github/workflows/build-cross-compile.yml
|
||||
if: needs.select.outputs.linux-cross-compile == 'true'
|
||||
|
||||
build-macos-x64:
|
||||
name: macos-x64
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-macos.yml
|
||||
with:
|
||||
platform: macos-x64
|
||||
xcode-toolset-version: '11.7'
|
||||
if: needs.select.outputs.macos-x64 == 'true'
|
||||
|
||||
build-macos-aarch64:
|
||||
name: macos-aarch64
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-macos.yml
|
||||
with:
|
||||
platform: macos-aarch64
|
||||
xcode-toolset-version: '12.4'
|
||||
extra-conf-options: '--openjdk-target=aarch64-apple-darwin'
|
||||
if: needs.select.outputs.macos-aarch64 == 'true'
|
||||
|
||||
build-windows-x64:
|
||||
name: windows-x64
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-windows.yml
|
||||
with:
|
||||
platform: windows-x64
|
||||
msvc-toolset-version: '14.25'
|
||||
msvc-toolset-architecture: 'x86.x64'
|
||||
if: needs.select.outputs.windows-x64 == 'true'
|
||||
|
||||
build-windows-aarch64:
|
||||
name: windows-aarch64
|
||||
needs: select
|
||||
uses: ./.github/workflows/build-windows.yml
|
||||
with:
|
||||
platform: windows-aarch64
|
||||
msvc-toolset-version: '14.29'
|
||||
msvc-toolset-architecture: 'arm64'
|
||||
make-target: 'hotspot'
|
||||
extra-conf-options: '--openjdk-target=aarch64-unknown-cygwin'
|
||||
if: needs.select.outputs.windows-aarch64 == 'true'
|
||||
|
||||
###
|
||||
### Test jobs
|
||||
###
|
||||
|
||||
test-linux-x64:
|
||||
name: linux-x64
|
||||
needs:
|
||||
- build-linux-x64
|
||||
uses: ./.github/workflows/test.yml
|
||||
with:
|
||||
platform: linux-x64
|
||||
bootjdk-platform: linux-x64
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
test-linux-x86:
|
||||
name: linux-x86
|
||||
needs:
|
||||
- build-linux-x86
|
||||
uses: ./.github/workflows/test.yml
|
||||
with:
|
||||
platform: linux-x86
|
||||
bootjdk-platform: linux-x64
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
test-macos-x64:
|
||||
name: macos-x64
|
||||
needs:
|
||||
- build-macos-x64
|
||||
uses: ./.github/workflows/test.yml
|
||||
with:
|
||||
platform: macos-x64
|
||||
bootjdk-platform: macos-x64
|
||||
runs-on: macos-11
|
||||
|
||||
test-windows-x64:
|
||||
name: windows-x64
|
||||
needs:
|
||||
- build-windows-x64
|
||||
uses: ./.github/workflows/test.yml
|
||||
with:
|
||||
platform: windows-x64
|
||||
bootjdk-platform: windows-x64
|
||||
runs-on: windows-2019
|
||||
|
||||
# Remove bundles so they are not misconstrued as binary distributions from the JDK project
|
||||
remove-bundles:
|
||||
name: 'Remove bundle artifacts'
|
||||
runs-on: ubuntu-20.04
|
||||
if: always()
|
||||
needs:
|
||||
- build-linux-x64
|
||||
- build-linux-x86
|
||||
- build-linux-x64-hs-nopch
|
||||
- build-linux-x64-hs-zero
|
||||
- build-linux-x64-hs-minimal
|
||||
- build-linux-x64-hs-optimized
|
||||
- build-linux-cross-compile
|
||||
- build-macos-x64
|
||||
- build-macos-aarch64
|
||||
- build-windows-x64
|
||||
- build-windows-aarch64
|
||||
- test-linux-x64
|
||||
- test-linux-x86
|
||||
- test-macos-x64
|
||||
- test-windows-x64
|
||||
|
||||
steps:
|
||||
# Hack to get hold of the api environment variables that are only defined for actions
|
||||
- name: 'Get API configuration'
|
||||
id: api
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: 'return { url: process.env["ACTIONS_RUNTIME_URL"], token: process.env["ACTIONS_RUNTIME_TOKEN"] }'
|
||||
|
||||
- name: 'Remove bundle artifacts'
|
||||
run: |
|
||||
# Find and remove all bundle artifacts
|
||||
ALL_ARTIFACT_URLS="$(curl -s \
|
||||
-H 'Accept: application/json;api-version=6.0-preview' \
|
||||
-H 'Authorization: Bearer ${{ fromJson(steps.api.outputs.result).token }}' \
|
||||
'${{ fromJson(steps.api.outputs.result).url }}_apis/pipelines/workflows/${{ github.run_id }}/artifacts?api-version=6.0-preview')"
|
||||
BUNDLE_ARTIFACT_URLS="$(echo "$ALL_ARTIFACT_URLS" | jq -r -c '.value | map(select(.name|startswith("bundles-"))) | .[].url')"
|
||||
for url in $BUNDLE_ARTIFACT_URLS; do
|
||||
echo "Removing $url"
|
||||
curl -s \
|
||||
-H 'Accept: application/json;api-version=6.0-preview' \
|
||||
-H 'Authorization: Bearer ${{ fromJson(steps.api.outputs.result).token }}' \
|
||||
-X DELETE "$url" \
|
||||
|| echo "Failed to remove bundle"
|
||||
done
|
||||
1773
.github/workflows/submit.yml
vendored
1773
.github/workflows/submit.yml
vendored
File diff suppressed because it is too large
Load Diff
205
.github/workflows/test.yml
vendored
Normal file
205
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,205 @@
|
||||
#
|
||||
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation. Oracle designates this
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
name: 'Run tests'
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
platform:
|
||||
required: true
|
||||
type: string
|
||||
bootjdk-platform:
|
||||
required: true
|
||||
type: string
|
||||
runs-on:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
env:
|
||||
# These are needed to make the MSYS2 bash work properly
|
||||
MSYS2_PATH_TYPE: minimal
|
||||
CHERE_INVOKING: 1
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: test
|
||||
runs-on: ${{ inputs.runs-on }}
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test-name:
|
||||
- 'jdk/tier1 part 1'
|
||||
- 'jdk/tier1 part 2'
|
||||
- 'jdk/tier1 part 3'
|
||||
- 'langtools/tier1'
|
||||
- 'hs/tier1 common'
|
||||
- 'hs/tier1 compiler'
|
||||
- 'hs/tier1 gc'
|
||||
- 'hs/tier1 runtime'
|
||||
- 'hs/tier1 serviceability'
|
||||
|
||||
include:
|
||||
- test-name: 'jdk/tier1 part 1'
|
||||
test-suite: 'test/jdk/:tier1_part1'
|
||||
|
||||
- test-name: 'jdk/tier1 part 2'
|
||||
test-suite: 'test/jdk/:tier1_part2'
|
||||
|
||||
- test-name: 'jdk/tier1 part 3'
|
||||
test-suite: 'test/jdk/:tier1_part3'
|
||||
|
||||
- test-name: 'langtools/tier1'
|
||||
test-suite: 'test/langtools/:tier1'
|
||||
|
||||
- test-name: 'hs/tier1 common'
|
||||
test-suite: 'test/hotspot/jtreg/:tier1_common'
|
||||
debug-suffix: -debug
|
||||
|
||||
- test-name: 'hs/tier1 compiler'
|
||||
test-suite: 'test/hotspot/jtreg/:tier1_compiler'
|
||||
debug-suffix: -debug
|
||||
|
||||
- test-name: 'hs/tier1 gc'
|
||||
test-suite: 'test/hotspot/jtreg/:tier1_gc'
|
||||
debug-suffix: -debug
|
||||
|
||||
- test-name: 'hs/tier1 runtime'
|
||||
test-suite: 'test/hotspot/jtreg/:tier1_runtime'
|
||||
debug-suffix: -debug
|
||||
|
||||
- test-name: 'hs/tier1 serviceability'
|
||||
test-suite: 'test/hotspot/jtreg/:tier1_serviceability'
|
||||
debug-suffix: -debug
|
||||
|
||||
steps:
|
||||
- name: 'Checkout the JDK source'
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: 'Get MSYS2'
|
||||
uses: ./.github/actions/get-msys2
|
||||
if: runner.os == 'Windows'
|
||||
|
||||
- name: 'Get the BootJDK'
|
||||
id: bootjdk
|
||||
uses: ./.github/actions/get-bootjdk
|
||||
with:
|
||||
platform: ${{ inputs.bootjdk-platform }}
|
||||
|
||||
- name: 'Get JTReg'
|
||||
id: jtreg
|
||||
uses: ./.github/actions/get-jtreg
|
||||
|
||||
- name: 'Get bundles'
|
||||
id: bundles
|
||||
uses: ./.github/actions/get-bundles
|
||||
with:
|
||||
platform: ${{ inputs.platform }}
|
||||
debug-suffix: ${{ matrix.debug-suffix }}
|
||||
|
||||
- name: 'Install dependencies'
|
||||
run: |
|
||||
# On macOS we need to install some dependencies for testing
|
||||
brew install make
|
||||
sudo xcode-select --switch /Applications/Xcode_11.7.app/Contents/Developer
|
||||
# This will make GNU make available as 'make' and not only as 'gmake'
|
||||
echo '/usr/local/opt/make/libexec/gnubin' >> $GITHUB_PATH
|
||||
if: runner.os == 'macOS'
|
||||
|
||||
- name: 'Set PATH'
|
||||
id: path
|
||||
run: |
|
||||
# We need a minimal PATH on Windows
|
||||
# Set PATH to "", so just GITHUB_PATH is included
|
||||
if [[ '${{ runner.os }}' == 'Windows' ]]; then
|
||||
echo "::set-output name=value::"
|
||||
else
|
||||
echo "::set-output name=value::$PATH"
|
||||
fi
|
||||
|
||||
- name: 'Run tests'
|
||||
id: run-tests
|
||||
run: >
|
||||
make test-prebuilt
|
||||
TEST='${{ matrix.test-suite }}'
|
||||
BOOT_JDK=${{ steps.bootjdk.outputs.path }}
|
||||
JT_HOME=${{ steps.jtreg.outputs.path }}
|
||||
JDK_IMAGE_DIR=${{ steps.bundles.outputs.jdk-path }}
|
||||
SYMBOLS_IMAGE_DIR=${{ steps.bundles.outputs.symbols-path }}
|
||||
TEST_IMAGE_DIR=${{ steps.bundles.outputs.tests-path }}
|
||||
JTREG='JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash;VERBOSE=fail,error,time;KEYWORDS=!headful'
|
||||
&& bash ./.github/scripts/gen-test-summary.sh "$GITHUB_STEP_SUMMARY"
|
||||
env:
|
||||
PATH: ${{ steps.path.outputs.value }}
|
||||
|
||||
# This is a separate step, since if the markdown from a step gets bigger than
|
||||
# 1024 kB it is skipped, but then the short summary above is still generated
|
||||
- name: 'Generate test report'
|
||||
run: bash ./.github/scripts/gen-test-results.sh "$GITHUB_STEP_SUMMARY"
|
||||
if: always()
|
||||
|
||||
- name: 'Package test results'
|
||||
id: package
|
||||
run: |
|
||||
# Package test-results and relevant parts of test-support
|
||||
mkdir results
|
||||
|
||||
if [[ -d build/run-test-prebuilt/test-results ]]; then
|
||||
cd build/run-test-prebuilt/test-results/
|
||||
zip -r -9 "$GITHUB_WORKSPACE/results/test-results.zip" .
|
||||
cd $GITHUB_WORKSPACE
|
||||
else
|
||||
echo '::warning ::Missing test-results directory'
|
||||
fi
|
||||
|
||||
if [[ -d build/run-test-prebuilt/test-support ]]; then
|
||||
cd build/run-test-prebuilt/test-support/
|
||||
zip -r -9 "$GITHUB_WORKSPACE/results/test-support.zip" . -i *.jtr -i */hs_err*.log -i */replay*.log
|
||||
cd $GITHUB_WORKSPACE
|
||||
else
|
||||
echo '::warning ::Missing test-support directory'
|
||||
fi
|
||||
|
||||
artifact_name="results-${{ inputs.platform }}-$(echo ${{ matrix.test-name }} | tr '/ ' '__')"
|
||||
echo "::set-output name=artifact-name::$artifact_name"
|
||||
if: always()
|
||||
|
||||
- name: 'Upload test results'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: results
|
||||
name: ${{ steps.package.outputs.artifact-name }}
|
||||
if: always()
|
||||
|
||||
# This is the best way I found to abort the job with an error message
|
||||
- name: 'Notify about test failures'
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: core.setFailed('${{ steps.run-tests.outputs.error-message }}')
|
||||
if: steps.run-tests.outputs.failure == 'true'
|
||||
@@ -1,7 +1,7 @@
|
||||
[general]
|
||||
project=jdk
|
||||
jbs=JDK
|
||||
version=19
|
||||
version=20
|
||||
|
||||
[checks]
|
||||
error=author,committer,reviewers,merge,issues,executable,symlink,message,hg-tag,whitespace,problemlists
|
||||
|
||||
@@ -810,7 +810,7 @@ ls build/linux-aarch64-server-release/</code></pre></li>
|
||||
<p><a href="http://github.com/icecc/icecream">icecc/icecream</a> is a simple way to setup a distributed compiler network. If you have multiple machines available for building the JDK, you can drastically cut individual build times by utilizing it.</p>
|
||||
<p>To use, setup an icecc network, and install icecc on the build machine. Then run <code>configure</code> using <code>--enable-icecc</code>.</p>
|
||||
<h3 id="using-sjavac">Using sjavac</h3>
|
||||
<p>To speed up Java compilation, especially incremental compilations, you can try the experimental sjavac compiler by using <code>--enable-sjavac</code>.</p>
|
||||
<p>To speed up compilation of Java code, especially during incremental compilations, the sjavac server is automatically enabled in the configuration step by default. To explicitly enable or disable sjavac, use either <code>--enable-javac-server</code> or <code>--disable-javac-server</code>.</p>
|
||||
<h3 id="building-the-right-target">Building the Right Target</h3>
|
||||
<p>Selecting the proper target to build can have dramatic impact on build time. For normal usage, <code>jdk</code> or the default target is just fine. You only need to build <code>images</code> for shipping, or if your tests require it.</p>
|
||||
<p>See also <a href="#using-fine-grained-make-targets">Using Fine-Grained Make Targets</a> on how to build an even smaller subset of the product.</p>
|
||||
|
||||
@@ -1296,8 +1296,10 @@ run `configure` using `--enable-icecc`.
|
||||
|
||||
### Using sjavac
|
||||
|
||||
To speed up Java compilation, especially incremental compilations, you can try
|
||||
the experimental sjavac compiler by using `--enable-sjavac`.
|
||||
To speed up compilation of Java code, especially during incremental compilations,
|
||||
the sjavac server is automatically enabled in the configuration step by default.
|
||||
To explicitly enable or disable sjavac, use either `--enable-javac-server`
|
||||
or `--disable-javac-server`.
|
||||
|
||||
### Building the Right Target
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -226,13 +226,6 @@ else
|
||||
JMOD_FLAGS += --exclude '**{_the.*,_*.marker*,*.diz,*.debuginfo,*.dSYM/**,*.dSYM}'
|
||||
endif
|
||||
|
||||
# For reproducible builds specify the jmod --date using SOURCE_DATE in ISO-8601
|
||||
ifeq ($(ENABLE_REPRODUCIBLE_BUILD), true)
|
||||
JMOD_SOURCE_DATE := --date $(SOURCE_DATE_ISO_8601)
|
||||
else
|
||||
JMOD_SOURCE_DATE :=
|
||||
endif
|
||||
|
||||
# Create jmods in the support dir and then move them into place to keep the
|
||||
# module path in $(IMAGES_OUTPUTDIR)/jmods valid at all times.
|
||||
$(eval $(call SetupExecute, create_$(JMOD_FILE), \
|
||||
@@ -244,7 +237,7 @@ $(eval $(call SetupExecute, create_$(JMOD_FILE), \
|
||||
COMMAND := $(JMOD) create --module-version $(VERSION_SHORT) \
|
||||
--target-platform '$(OPENJDK_MODULE_TARGET_PLATFORM)' \
|
||||
--module-path $(JMODS_DIR) $(JMOD_FLAGS) \
|
||||
$(JMOD_SOURCE_DATE) \
|
||||
--date $(SOURCE_DATE_ISO_8601) \
|
||||
$(JMODS_SUPPORT_DIR)/$(JMOD_FILE), \
|
||||
POST_COMMAND := $(MV) $(JMODS_SUPPORT_DIR)/$(JMOD_FILE) $(JMODS_DIR)/$(JMOD_FILE), \
|
||||
))
|
||||
|
||||
@@ -104,14 +104,14 @@ JAVADOC_DISABLED_DOCLINT_PACKAGES := org.w3c.* javax.smartcardio
|
||||
|
||||
# The initial set of options for javadoc
|
||||
JAVADOC_OPTIONS := -use -keywords -notimestamp \
|
||||
-serialwarn -encoding ISO-8859-1 -docencoding UTF-8 -breakiterator \
|
||||
-encoding ISO-8859-1 -docencoding UTF-8 -breakiterator \
|
||||
-splitIndex --system none -javafx --expand-requires transitive \
|
||||
--override-methods=summary
|
||||
|
||||
# The reference options must stay stable to allow for comparisons across the
|
||||
# development cycle.
|
||||
REFERENCE_OPTIONS := -XDignore.symbol.file=true -use -keywords -notimestamp \
|
||||
-serialwarn -encoding ISO-8859-1 -breakiterator -splitIndex --system none \
|
||||
-encoding ISO-8859-1 -breakiterator -splitIndex --system none \
|
||||
-html5 -javafx --expand-requires transitive
|
||||
|
||||
# Should we add DRAFT stamps to the generated javadoc?
|
||||
|
||||
@@ -436,21 +436,24 @@ else # $(HAS_SPEC)=true
|
||||
|
||||
define PrintFailureReports
|
||||
$(if $(filter none, $(LOG_REPORT)), , \
|
||||
$(RM) $(MAKESUPPORT_OUTPUTDIR)/failure-summary.log ; \
|
||||
$(if $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*.log), \
|
||||
$(PRINTF) "\n=== Output from failing command(s) repeated here ===\n" $(NEWLINE) \
|
||||
$(foreach logfile, $(sort $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*.log)), \
|
||||
$(PRINTF) "* For target $(notdir $(basename $(logfile))):\n" $(NEWLINE) \
|
||||
$(if $(filter all, $(LOG_REPORT)), \
|
||||
$(GREP) -v -e "^Note: including file:" < $(logfile) || true $(NEWLINE) \
|
||||
, \
|
||||
($(GREP) -v -e "^Note: including file:" < $(logfile) || true) | $(HEAD) -n 15 $(NEWLINE) \
|
||||
if test `$(WC) -l < $(logfile)` -gt 15; then \
|
||||
$(ECHO) " ... (rest of output omitted)" ; \
|
||||
fi $(NEWLINE) \
|
||||
) \
|
||||
) \
|
||||
$(PRINTF) "\n* All command lines available in $(MAKESUPPORT_OUTPUTDIR)/failure-logs.\n" $(NEWLINE) \
|
||||
$(PRINTF) "=== End of repeated output ===\n" \
|
||||
( \
|
||||
$(PRINTF) "\n=== Output from failing command(s) repeated here ===\n" ; \
|
||||
$(foreach logfile, $(sort $(wildcard $(MAKESUPPORT_OUTPUTDIR)/failure-logs/*.log)), \
|
||||
$(PRINTF) "* For target $(notdir $(basename $(logfile))):\n" ; \
|
||||
$(if $(filter all, $(LOG_REPORT)), \
|
||||
$(GREP) -v -e "^Note: including file:" < $(logfile) || true ; \
|
||||
, \
|
||||
($(GREP) -v -e "^Note: including file:" < $(logfile) || true) | $(HEAD) -n 15 ; \
|
||||
if test `$(WC) -l < $(logfile)` -gt 15; then \
|
||||
$(ECHO) " ... (rest of output omitted)" ; \
|
||||
fi ; \
|
||||
) \
|
||||
) \
|
||||
$(PRINTF) "\n* All command lines available in $(MAKESUPPORT_OUTPUTDIR)/failure-logs.\n" ; \
|
||||
$(PRINTF) "=== End of repeated output ===\n" ; \
|
||||
) >> $(MAKESUPPORT_OUTPUTDIR)/failure-summary.log \
|
||||
) \
|
||||
)
|
||||
endef
|
||||
@@ -465,7 +468,8 @@ else # $(HAS_SPEC)=true
|
||||
else \
|
||||
$(PRINTF) "\nNo indication of failed target found.\n" ; \
|
||||
$(PRINTF) "HELP: Try searching the build log for '] Error'.\n" ; \
|
||||
fi \
|
||||
fi >> $(MAKESUPPORT_OUTPUTDIR)/failure-summary.log ; \
|
||||
$(CAT) $(MAKESUPPORT_OUTPUTDIR)/failure-summary.log \
|
||||
)
|
||||
endef
|
||||
|
||||
|
||||
@@ -116,6 +116,82 @@ AC_DEFUN([BASIC_EVAL_BUILD_DEVKIT_VARIABLE],
|
||||
fi
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
AC_DEFUN([BASIC_SETUP_XCODE_SYSROOT],
|
||||
[
|
||||
AC_MSG_CHECKING([for sdk name])
|
||||
AC_ARG_WITH([sdk-name], [AS_HELP_STRING([--with-sdk-name],
|
||||
[use the Xcode platform SDK of the given name. @<:@macosx@:>@])],
|
||||
[SDK_NAME=$with_sdk_name]
|
||||
)
|
||||
if test "x$SDK_NAME" = x; then
|
||||
SDK_NAME=macosx
|
||||
fi
|
||||
AC_MSG_RESULT([$SDK_NAME])
|
||||
|
||||
if test "x$DEVKIT_ROOT" != x; then
|
||||
# We need to use xcodebuild from the devkit, if provided
|
||||
UTIL_LOOKUP_PROGS(XCODEBUILD, xcodebuild, $DEVKIT_TOOLCHAIN_PATH)
|
||||
if test "x$XCODEBUILD" = x; then
|
||||
AC_MSG_ERROR([No xcodebuild tool found in the provided devkit])
|
||||
fi
|
||||
XCODEBUILD_OUTPUT=`"$XCODEBUILD" -version 2>&1`
|
||||
if test $? -ne 0; then
|
||||
AC_MSG_ERROR([The xcodebuild tool in the devkit reports an error: $XCODEBUILD_OUTPUT])
|
||||
fi
|
||||
else
|
||||
UTIL_LOOKUP_PROGS(XCODEBUILD, xcodebuild)
|
||||
if test "x$XCODEBUILD" != x; then
|
||||
XCODEBUILD_OUTPUT=`"$XCODEBUILD" -version 2>&1`
|
||||
if test $? -ne 0; then
|
||||
AC_MSG_WARN([Ignoring the located xcodebuild tool $XCODEBUILD due to an error: $XCODEBUILD_OUTPUT])
|
||||
XCODEBUILD=
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$SYSROOT" != x; then
|
||||
if ! test -f "$SYSROOT/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h"; then
|
||||
AC_MSG_ERROR([Invalid sysroot, framework headers not found])
|
||||
fi
|
||||
if test "x$with_sdk_name" != x; then
|
||||
AC_MSG_WARN([--with-sdk-name will be ignored since a sysroot or devkit is provided])
|
||||
fi
|
||||
AC_MSG_NOTICE([Setting sysroot from devkit or --with-sysroot])
|
||||
else
|
||||
if test "x$XCODEBUILD" != x; then
|
||||
SYSROOT=`"$XCODEBUILD" -sdk "$SDK_NAME" -version | $GREP '^Path: ' | $SED 's/Path: //'`
|
||||
if test "x$SYSROOT" = x; then
|
||||
AC_MSG_ERROR([No sysroot found for SDK $SDK_NAME from xcodebuild. Check your Xcode installation.])
|
||||
fi
|
||||
if ! test -f "$SYSROOT/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h"; then
|
||||
AC_MSG_ERROR([Unable to find required framework headers, provide a path to an SDK via --with-sysroot or --with-sdk-name and be sure Xcode is installed properly])
|
||||
fi
|
||||
AC_MSG_NOTICE([Setting sysroot from xcodebuild with SDK $SDK_NAME])
|
||||
else
|
||||
UTIL_LOOKUP_PROGS(XCRUN, xcrun)
|
||||
if test "x$XCRUN" != x; then
|
||||
XCRUN_SDK_PATH=`"$XCRUN" --show-sdk-path -sdk "$SDK_NAME"`
|
||||
fi
|
||||
|
||||
if test "x$XCRUN_SDK_PATH" != x && test -f "$XCRUN_SDK_PATH/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h"; then
|
||||
AC_MSG_NOTICE([Setting sysroot from xcrun with SDK $SDK_NAME])
|
||||
SYSROOT="$XCRUN_SDK_PATH"
|
||||
elif test -f /System/Library/Frameworks/Foundation.framework/Headers/Foundation.h; then
|
||||
AC_MSG_WARN([No devkit provided and no xcodebuild found. Proceeding using system headers.])
|
||||
if test "x$with_sdk_name" != x; then
|
||||
AC_MSG_WARN([--with-sdk-name will be ignored since no xcodebuild could be found])
|
||||
fi
|
||||
else
|
||||
AC_MSG_NOTICE([No devkit provided, no xcodebuild tool and no system headers found in the system.])
|
||||
AC_MSG_NOTICE([Check that Xcode is properly installed, or set a devkit with --with-devkit,])
|
||||
AC_MSG_NOTICE([or override SDK selection using --with-sysroot or --with-sdk-name.])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
|
||||
[
|
||||
@@ -218,87 +294,22 @@ AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
|
||||
)
|
||||
|
||||
if test "x$OPENJDK_BUILD_OS" = "xmacosx"; then
|
||||
# If a devkit has been supplied, find xcodebuild in the toolchain_path.
|
||||
# If not, detect if Xcode is installed by running xcodebuild -version
|
||||
# if no Xcode installed, xcodebuild exits with 1
|
||||
# if Xcode is installed, even if xcode-select is misconfigured, then it exits with 0
|
||||
if test "x$DEVKIT_ROOT" != x || /usr/bin/xcodebuild -version >/dev/null 2>&1; then
|
||||
# We need to use xcodebuild in the toolchain dir provided by the user
|
||||
UTIL_LOOKUP_PROGS(XCODEBUILD, xcodebuild, $TOOLCHAIN_PATH)
|
||||
if test x$XCODEBUILD = x; then
|
||||
# fall back on the stub binary in /usr/bin/xcodebuild
|
||||
XCODEBUILD=/usr/bin/xcodebuild
|
||||
fi
|
||||
else
|
||||
# this should result in SYSROOT being empty, unless --with-sysroot is provided
|
||||
# when only the command line tools are installed there are no SDKs, so headers
|
||||
# are copied into the system frameworks
|
||||
XCODEBUILD=
|
||||
AC_SUBST(XCODEBUILD)
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([for sdk name])
|
||||
AC_ARG_WITH([sdk-name], [AS_HELP_STRING([--with-sdk-name],
|
||||
[use the platform SDK of the given name. @<:@macosx@:>@])],
|
||||
[SDKNAME=$with_sdk_name]
|
||||
)
|
||||
AC_MSG_RESULT([$SDKNAME])
|
||||
|
||||
# if toolchain path is specified then don't rely on system headers, they may not compile
|
||||
HAVE_SYSTEM_FRAMEWORK_HEADERS=0
|
||||
test -z "$TOOLCHAIN_PATH" && \
|
||||
HAVE_SYSTEM_FRAMEWORK_HEADERS=`test ! -f /System/Library/Frameworks/Foundation.framework/Headers/Foundation.h; echo $?`
|
||||
|
||||
if test -z "$SYSROOT"; then
|
||||
if test -n "$XCODEBUILD"; then
|
||||
# if we don't have system headers, use default SDK name (last resort)
|
||||
if test -z "$SDKNAME" -a $HAVE_SYSTEM_FRAMEWORK_HEADERS -eq 0; then
|
||||
SDKNAME=${SDKNAME:-macosx}
|
||||
fi
|
||||
|
||||
if test -n "$SDKNAME"; then
|
||||
# Call xcodebuild to determine SYSROOT
|
||||
SYSROOT=`"$XCODEBUILD" -sdk $SDKNAME -version | $GREP '^Path: ' | $SED 's/Path: //'`
|
||||
fi
|
||||
else
|
||||
if test $HAVE_SYSTEM_FRAMEWORK_HEADERS -eq 0; then
|
||||
AC_MSG_ERROR([No xcodebuild tool and no system framework headers found, use --with-sysroot or --with-sdk-name to provide a path to a valid SDK])
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# warn user if --with-sdk-name was also set
|
||||
if test -n "$with_sdk_name"; then
|
||||
AC_MSG_WARN([Both SYSROOT and --with-sdk-name are set, only SYSROOT will be used])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $HAVE_SYSTEM_FRAMEWORK_HEADERS -eq 0 -a -z "$SYSROOT"; then
|
||||
# If no system framework headers, then SYSROOT must be set, or we won't build
|
||||
AC_MSG_ERROR([Unable to determine SYSROOT and no headers found in /System/Library/Frameworks. Check Xcode configuration, --with-sysroot or --with-sdk-name arguments.])
|
||||
fi
|
||||
|
||||
# Perform a basic sanity test
|
||||
if test ! -f "$SYSROOT/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h"; then
|
||||
if test -z "$SYSROOT"; then
|
||||
AC_MSG_ERROR([Unable to find required framework headers, provide a path to an SDK via --with-sysroot or --with-sdk-name and be sure Xcode is installed properly])
|
||||
else
|
||||
AC_MSG_ERROR([Invalid SDK or SYSROOT path, dependent framework headers not found])
|
||||
fi
|
||||
fi
|
||||
|
||||
# set SDKROOT too, Xcode tools will pick it up
|
||||
SDKROOT="$SYSROOT"
|
||||
AC_SUBST(SDKROOT)
|
||||
BASIC_SETUP_XCODE_SYSROOT
|
||||
fi
|
||||
|
||||
# Prepend the extra path to the global path
|
||||
UTIL_PREPEND_TO_PATH([PATH],$EXTRA_PATH)
|
||||
|
||||
UTIL_FIXUP_PATH([SYSROOT])
|
||||
|
||||
AC_MSG_CHECKING([for sysroot])
|
||||
AC_MSG_RESULT([$SYSROOT])
|
||||
AC_SUBST(SYSROOT)
|
||||
|
||||
AC_MSG_CHECKING([for toolchain path])
|
||||
AC_MSG_RESULT([$TOOLCHAIN_PATH])
|
||||
AC_SUBST(TOOLCHAIN_PATH)
|
||||
|
||||
AC_MSG_CHECKING([for extra path])
|
||||
AC_MSG_RESULT([$EXTRA_PATH])
|
||||
])
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -126,16 +126,18 @@ AC_DEFUN([BOOTJDK_DO_CHECK],
|
||||
AC_DEFUN([BOOTJDK_CHECK_ARGUMENTS],
|
||||
[
|
||||
if test "x$with_boot_jdk" != x; then
|
||||
if test -d "$with_boot_jdk"; then
|
||||
BOOT_JDK=$with_boot_jdk
|
||||
BOOT_JDK_ARG="$with_boot_jdk"
|
||||
UTIL_FIXUP_PATH(BOOT_JDK_ARG)
|
||||
if test -d "$BOOT_JDK_ARG"; then
|
||||
BOOT_JDK=$BOOT_JDK_ARG
|
||||
BOOT_JDK_FOUND=maybe
|
||||
elif test -f "$with_boot_jdk"; then
|
||||
case "$with_boot_jdk" in
|
||||
elif test -f "$BOOT_JDK_ARG"; then
|
||||
case "$BOOT_JDK_ARG" in
|
||||
*.tar.gz )
|
||||
BOOT_JDK_SUPPORT_DIR=$CONFIGURESUPPORT_OUTPUTDIR/boot-jdk
|
||||
$RM -rf $BOOT_JDK_SUPPORT_DIR
|
||||
$MKDIR -p $BOOT_JDK_SUPPORT_DIR
|
||||
$GUNZIP -c $with_boot_jdk | $TAR xf - -C $BOOT_JDK_SUPPORT_DIR
|
||||
$GUNZIP -c $BOOT_JDK_ARG | $TAR xf - -C $BOOT_JDK_SUPPORT_DIR
|
||||
|
||||
# Try to find javac to determine BOOT_JDK path
|
||||
BOOT_JDK_JAVAC_PATH=`$FIND $BOOT_JDK_SUPPORT_DIR | $GREP "/bin/javac"`
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -92,7 +92,6 @@ if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
|
||||
export PATH="$PATH:@TOOLCHAIN_PATH@"
|
||||
fi
|
||||
|
||||
export HOTSPOT_BUILD_TIME="@HOTSPOT_BUILD_TIME@"
|
||||
export USE_PRECOMPILED_HEADER="@USE_PRECOMPILED_HEADER@"
|
||||
|
||||
# Now locate the main script and run it.
|
||||
|
||||
@@ -116,6 +116,18 @@ AC_DEFUN([FLAGS_SETUP_DEBUG_SYMBOLS],
|
||||
CFLAGS_DEBUG_SYMBOLS="-g"
|
||||
ASFLAGS_DEBUG_SYMBOLS="-g"
|
||||
elif test "x$TOOLCHAIN_TYPE" = xclang; then
|
||||
if test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = "xfalse"; then
|
||||
# Check if compiler supports -fdebug-prefix-map. If so, use that to make
|
||||
# the debug symbol paths resolve to paths relative to the workspace root.
|
||||
workspace_root_trailing_slash="${WORKSPACE_ROOT%/}/"
|
||||
DEBUG_PREFIX_CFLAGS="-fdebug-prefix-map=${workspace_root_trailing_slash}="
|
||||
FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${DEBUG_PREFIX_CFLAGS}],
|
||||
IF_FALSE: [
|
||||
DEBUG_PREFIX_CFLAGS=
|
||||
]
|
||||
)
|
||||
fi
|
||||
|
||||
CFLAGS_DEBUG_SYMBOLS="-g"
|
||||
ASFLAGS_DEBUG_SYMBOLS="-g"
|
||||
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
|
||||
@@ -460,9 +472,11 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_HELPER],
|
||||
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
# Access APIs for Windows 8 and above
|
||||
# see https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt?view=msvc-170
|
||||
ALWAYS_DEFINES_JDK="-DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0602 -D_CRT_SECURE_NO_DEPRECATE \
|
||||
-D_CRT_NONSTDC_NO_DEPRECATE -DWIN32 -DIAL"
|
||||
ALWAYS_DEFINES_JVM="-DNOMINMAX -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0602"
|
||||
ALWAYS_DEFINES_JDK="-DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0602 \
|
||||
-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -DWIN32 -DIAL"
|
||||
ALWAYS_DEFINES_JVM="-DNOMINMAX -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0602 \
|
||||
-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE \
|
||||
-D_WINSOCK_DEPRECATED_NO_WARNINGS"
|
||||
fi
|
||||
|
||||
###############################################################################
|
||||
@@ -772,10 +786,8 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
|
||||
$1_TOOLCHAIN_CFLAGS="${NO_DELETE_NULL_POINTER_CHECKS_CFLAG}"
|
||||
fi
|
||||
|
||||
if test "x$TOOLCHAIN_TYPE" = xmicrosoft && test "x$ENABLE_REPRODUCIBLE_BUILD" = xtrue; then
|
||||
# Enabling deterministic creates warnings if __DATE__ or __TIME__ are
|
||||
# used, and since we are, silence that warning.
|
||||
REPRODUCIBLE_CFLAGS="-experimental:deterministic -wd5048"
|
||||
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
REPRODUCIBLE_CFLAGS="-experimental:deterministic"
|
||||
FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${REPRODUCIBLE_CFLAGS}],
|
||||
PREFIX: $3,
|
||||
IF_FALSE: [
|
||||
@@ -802,8 +814,7 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
|
||||
FILE_MACRO_CFLAGS=
|
||||
]
|
||||
)
|
||||
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft &&
|
||||
test "x$ENABLE_REPRODUCIBLE_BUILD" = xtrue; then
|
||||
elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
# There is a known issue with the pathmap if the mapping is made to the
|
||||
# empty string. Add a minimal string "s" as prefix to work around this.
|
||||
# PATHMAP_FLAGS is also added to LDFLAGS in flags-ldflags.m4.
|
||||
@@ -893,8 +904,8 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
|
||||
# $2 - Prefix for compiler variables (either BUILD_ or nothing).
|
||||
AC_DEFUN([FLAGS_SETUP_GCC6_COMPILER_FLAGS],
|
||||
[
|
||||
# These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code
|
||||
# runs afoul of the more aggressive versions of these optimisations.
|
||||
# These flags are required for GCC 6 builds as undefined behavior in OpenJDK code
|
||||
# runs afoul of the more aggressive versions of these optimizations.
|
||||
# Notably, value range propagation now assumes that the this pointer of C++
|
||||
# member functions is non-null.
|
||||
NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks"
|
||||
|
||||
@@ -128,10 +128,13 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER],
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$ENABLE_REPRODUCIBLE_BUILD" = "xtrue"; then
|
||||
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
REPRODUCIBLE_LDFLAGS="-experimental:deterministic"
|
||||
fi
|
||||
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
|
||||
REPRODUCIBLE_LDFLAGS="-experimental:deterministic"
|
||||
FLAGS_LINKER_CHECK_ARGUMENTS(ARGUMENT: [$REPRODUCIBLE_LDFLAGS],
|
||||
IF_FALSE: [
|
||||
REPRODUCIBLE_LDFLAGS=
|
||||
]
|
||||
)
|
||||
fi
|
||||
|
||||
if test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = "xfalse"; then
|
||||
|
||||
@@ -295,7 +295,7 @@ AC_DEFUN_ONCE([FLAGS_PRE_TOOLCHAIN],
|
||||
# FIXME: Don't really know how to do with this, but this was the old behavior
|
||||
GLOBAL_CPPFLAGS="$SYSROOT_CFLAGS"
|
||||
|
||||
# FIXME: For compatilibity, export this as EXTRA_CFLAGS for now.
|
||||
# FIXME: For compatibility, export this as EXTRA_CFLAGS for now.
|
||||
EXTRA_CFLAGS="$MACHINE_FLAG $USER_CFLAGS"
|
||||
EXTRA_CXXFLAGS="$MACHINE_FLAG $USER_CXXFLAGS"
|
||||
EXTRA_LDFLAGS="$MACHINE_FLAG $USER_LDFLAGS"
|
||||
|
||||
@@ -311,6 +311,13 @@ AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS],
|
||||
fi
|
||||
printf "* Boot JDK: $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
|
||||
printf "* Toolchain: $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
|
||||
if test "x$DEVKIT_NAME" != x; then
|
||||
printf "* Devkit: $DEVKIT_NAME ($DEVKIT_ROOT)\n"
|
||||
elif test "x$DEVKIT_ROOT" != x; then
|
||||
printf "* Devkit: $DEVKIT_ROOT\n"
|
||||
elif test "x$SYSROOT" != x; then
|
||||
printf "* Sysroot: $SYSROOT\n"
|
||||
fi
|
||||
printf "* C Compiler: Version $CC_VERSION_NUMBER (at ${CC#"$FIXPATH "})\n"
|
||||
printf "* C++ Compiler: Version $CXX_VERSION_NUMBER (at ${CXX#"$FIXPATH "})\n"
|
||||
|
||||
|
||||
@@ -142,10 +142,4 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_MISC],
|
||||
HOTSPOT_TARGET_CPU=arm_32
|
||||
HOTSPOT_TARGET_CPU_DEFINE="ARM32"
|
||||
fi
|
||||
|
||||
# --with-cpu-port is no longer supported
|
||||
UTIL_DEPRECATED_ARG_WITH(with-cpu-port)
|
||||
|
||||
# in jdk15 hotspot-gtest was replaced with --with-gtest
|
||||
UTIL_DEPRECATED_ARG_ENABLE(hotspot-gtest)
|
||||
])
|
||||
|
||||
@@ -23,20 +23,6 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
###############################################################################
|
||||
# Check which variant of the JDK that we want to build.
|
||||
# Currently we have:
|
||||
# normal: standard edition
|
||||
# but the custom make system may add other variants
|
||||
#
|
||||
# Effectively the JDK variant gives a name to a specific set of
|
||||
# modules to compile into the JDK.
|
||||
AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT],
|
||||
[
|
||||
# Deprecated in JDK 12
|
||||
UTIL_DEPRECATED_ARG_WITH([jdk-variant])
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
# Set the debug level
|
||||
# release: no debug information, all optimizations, no asserts.
|
||||
@@ -508,7 +494,7 @@ AC_DEFUN_ONCE([JDKOPT_ENABLE_DISABLE_FAILURE_HANDLER],
|
||||
[
|
||||
UTIL_ARG_ENABLE(NAME: jtreg-failure-handler, DEFAULT: auto,
|
||||
RESULT: BUILD_FAILURE_HANDLER,
|
||||
DESC: [enable keeping of packaged modules in jdk image],
|
||||
DESC: [enable building of the jtreg failure handler],
|
||||
DEFAULT_DESC: [enabled if jtreg is present],
|
||||
CHECKING_MSG: [if the jtreg failure handler should be built],
|
||||
CHECK_AVAILABLE: [
|
||||
@@ -727,30 +713,9 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_REPRODUCIBLE_BUILD],
|
||||
fi
|
||||
fi
|
||||
|
||||
REPRODUCIBLE_BUILD_DEFAULT=$with_source_date_present
|
||||
|
||||
if test "x$OPENJDK_BUILD_OS" = xwindows && \
|
||||
test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = xfalse; then
|
||||
# To support banning absolute paths on Windows, we must use the -pathmap
|
||||
# method, which requires reproducible builds.
|
||||
REPRODUCIBLE_BUILD_DEFAULT=true
|
||||
fi
|
||||
|
||||
UTIL_ARG_ENABLE(NAME: reproducible-build, DEFAULT: $REPRODUCIBLE_BUILD_DEFAULT,
|
||||
RESULT: ENABLE_REPRODUCIBLE_BUILD,
|
||||
DESC: [enable reproducible builds (not yet fully functional)],
|
||||
DEFAULT_DESC: [enabled if --with-source-date is given or on Windows without absolute paths])
|
||||
|
||||
if test "x$OPENJDK_BUILD_OS" = xwindows && \
|
||||
test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = xfalse && \
|
||||
test "x$ENABLE_REPRODUCIBLE_BUILD" = xfalse; then
|
||||
AC_MSG_NOTICE([On Windows it is not possible to combine --disable-reproducible-build])
|
||||
AC_MSG_NOTICE([with --disable-absolute-paths-in-output.])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
fi
|
||||
|
||||
AC_SUBST(SOURCE_DATE)
|
||||
AC_SUBST(ENABLE_REPRODUCIBLE_BUILD)
|
||||
AC_SUBST(ISO_8601_FORMAT_STRING)
|
||||
AC_SUBST(SOURCE_DATE_ISO_8601)
|
||||
|
||||
UTIL_DEPRECATED_ARG_ENABLE(reproducible-build)
|
||||
])
|
||||
|
||||
@@ -47,7 +47,7 @@ AC_DEFUN([LIB_SETUP_HSDIS_CAPSTONE],
|
||||
fi
|
||||
else
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
# There is no way to auto-detect capstone on Windowos
|
||||
# There is no way to auto-detect capstone on Windows
|
||||
AC_MSG_NOTICE([You must specify capstone location using --with-capstone=<path>])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
fi
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_STD_LIBS],
|
||||
[
|
||||
# statically link libstdc++ before C++ ABI is stablized on Linux unless
|
||||
# statically link libstdc++ before C++ ABI is stabilized on Linux unless
|
||||
# dynamic build is configured on command line.
|
||||
AC_ARG_WITH([stdc++lib], [AS_HELP_STRING([--with-stdc++lib=<static>,<dynamic>,<default>],
|
||||
[force linking of the C++ runtime on Linux to either static or dynamic, default is static with dynamic as fallback])],
|
||||
|
||||
@@ -218,7 +218,7 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS],
|
||||
VAR_OS=windows
|
||||
VAR_OS_ENV=windows.wsl
|
||||
;;
|
||||
*msys*)
|
||||
*msys* | *mingw*)
|
||||
VAR_OS=windows
|
||||
VAR_OS_ENV=windows.msys2
|
||||
;;
|
||||
@@ -384,7 +384,7 @@ AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD],
|
||||
fi
|
||||
])
|
||||
|
||||
# Check if a reduced build (32-bit on 64-bit platforms) is requested, and modify behaviour
|
||||
# Check if a reduced build (32-bit on 64-bit platforms) is requested, and modify behavior
|
||||
# accordingly. Must be done after setting up build and target system, but before
|
||||
# doing anything else with these values.
|
||||
AC_DEFUN([PLATFORM_SETUP_TARGET_CPU_BITS],
|
||||
@@ -656,9 +656,6 @@ AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET],
|
||||
PLATFORM_SET_MODULE_TARGET_OS_VALUES
|
||||
PLATFORM_SET_RELEASE_FILE_OS_VALUES
|
||||
PLATFORM_SETUP_LEGACY_VARS
|
||||
|
||||
# Deprecated in JDK 15
|
||||
UTIL_DEPRECATED_ARG_ENABLE(deprecated-ports)
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION],
|
||||
|
||||
@@ -129,7 +129,6 @@ RELEASE_FILE_OS_ARCH:=@RELEASE_FILE_OS_ARCH@
|
||||
RELEASE_FILE_LIBC:=@RELEASE_FILE_LIBC@
|
||||
|
||||
SOURCE_DATE := @SOURCE_DATE@
|
||||
ENABLE_REPRODUCIBLE_BUILD := @ENABLE_REPRODUCIBLE_BUILD@
|
||||
ISO_8601_FORMAT_STRING := @ISO_8601_FORMAT_STRING@
|
||||
|
||||
ifneq ($(SOURCE_DATE), updated)
|
||||
@@ -548,8 +547,7 @@ CPP := @CPP@
|
||||
# The linker can be gcc or ld on unix systems, or link.exe on windows systems.
|
||||
LD := @LD@
|
||||
|
||||
# Xcode SDK path
|
||||
SDKROOT:=@SDKROOT@
|
||||
SYSROOT := @SYSROOT@
|
||||
|
||||
# LDFLAGS used to link the jdk native libraries (C-code)
|
||||
LDFLAGS_JDKLIB:=@LDFLAGS_JDKLIB@
|
||||
@@ -776,7 +774,6 @@ SETFILE:=@SETFILE@
|
||||
XATTR:=@XATTR@
|
||||
JT_HOME:=@JT_HOME@
|
||||
JIB_HOME:=@JIB_HOME@
|
||||
XCODEBUILD=@XCODEBUILD@
|
||||
DTRACE := @DTRACE@
|
||||
FIXPATH := @FIXPATH@
|
||||
FIXPATH_BASE := @FIXPATH_BASE@
|
||||
|
||||
@@ -231,34 +231,8 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE],
|
||||
toolchain_var_name=VALID_TOOLCHAINS_$OPENJDK_BUILD_OS
|
||||
VALID_TOOLCHAINS=${!toolchain_var_name}
|
||||
|
||||
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
|
||||
if test -n "$XCODEBUILD"; then
|
||||
# On Mac OS X, default toolchain to clang after Xcode 5
|
||||
XCODE_VERSION_OUTPUT=`"$XCODEBUILD" -version | $HEAD -n 1`
|
||||
$ECHO "$XCODE_VERSION_OUTPUT" | $GREP "Xcode " > /dev/null
|
||||
if test $? -ne 0; then
|
||||
AC_MSG_NOTICE([xcodebuild output: $XCODE_VERSION_OUTPUT])
|
||||
AC_MSG_ERROR([Failed to determine Xcode version.])
|
||||
fi
|
||||
XCODE_MAJOR_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | \
|
||||
$SED -e 's/^Xcode \(@<:@1-9@:>@@<:@0-9.@:>@*\)/\1/' | \
|
||||
$CUT -f 1 -d .`
|
||||
AC_MSG_NOTICE([Xcode major version: $XCODE_MAJOR_VERSION])
|
||||
if test $XCODE_MAJOR_VERSION -ge 5; then
|
||||
DEFAULT_TOOLCHAIN="clang"
|
||||
else
|
||||
DEFAULT_TOOLCHAIN="gcc"
|
||||
fi
|
||||
else
|
||||
# If Xcode is not installed, but the command line tools are
|
||||
# then we can't run xcodebuild. On these systems we should
|
||||
# default to clang
|
||||
DEFAULT_TOOLCHAIN="clang"
|
||||
fi
|
||||
else
|
||||
# First toolchain type in the list is the default
|
||||
DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *}
|
||||
fi
|
||||
# First toolchain type in the list is the default
|
||||
DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *}
|
||||
|
||||
if test "x$with_toolchain_type" = xlist; then
|
||||
# List all toolchains
|
||||
@@ -341,10 +315,19 @@ AC_DEFUN_ONCE([TOOLCHAIN_PRE_DETECTION],
|
||||
# autoconf magic only relies on PATH, so update it if tools dir is specified
|
||||
OLD_PATH="$PATH"
|
||||
|
||||
if test "x$XCODE_VERSION_OUTPUT" != x; then
|
||||
# For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
|
||||
TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
|
||||
TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode $TOOLCHAIN_VERSION"
|
||||
if test "x$OPENJDK_BUILD_OS" = "xmacosx"; then
|
||||
if test "x$XCODEBUILD" != x; then
|
||||
XCODE_VERSION_OUTPUT=`"$XCODEBUILD" -version 2> /dev/null | $HEAD -n 1`
|
||||
$ECHO "$XCODE_VERSION_OUTPUT" | $GREP "^Xcode " > /dev/null
|
||||
if test $? -ne 0; then
|
||||
AC_MSG_NOTICE([xcodebuild -version output: $XCODE_VERSION_OUTPUT])
|
||||
AC_MSG_ERROR([Failed to determine Xcode version])
|
||||
fi
|
||||
|
||||
# For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
|
||||
TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
|
||||
TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode $TOOLCHAIN_VERSION"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(TOOLCHAIN_VERSION)
|
||||
|
||||
|
||||
@@ -317,7 +317,7 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
|
||||
eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}"
|
||||
eval USE_UCRT="\${VS_USE_UCRT_${VS_VERSION}}"
|
||||
eval VS_SUPPORTED="\${VS_SUPPORTED_${VS_VERSION}}"
|
||||
# The rest of the variables are already evaled while probing
|
||||
# The rest of the variables are already evaluated while probing
|
||||
AC_MSG_NOTICE([Found $VS_DESCRIPTION])
|
||||
break
|
||||
fi
|
||||
|
||||
@@ -223,10 +223,8 @@ define SetupJarArchiveBody
|
||||
# If reproducible build and the boot jdk jar supports --date option
|
||||
# then specify the --date using SOURCE_DATE in ISO-8601
|
||||
$1_JAR_OPTIONS :=
|
||||
ifeq ($$(ENABLE_REPRODUCIBLE_BUILD), true)
|
||||
ifeq ($$(BOOT_JDK_JAR_SUPPORTS_DATE), true)
|
||||
$1_JAR_OPTIONS += --date $(SOURCE_DATE_ISO_8601)
|
||||
endif
|
||||
ifeq ($$(BOOT_JDK_JAR_SUPPORTS_DATE), true)
|
||||
$1_JAR_OPTIONS += --date $(SOURCE_DATE_ISO_8601)
|
||||
endif
|
||||
ifneq (,$$($1_CHECK_COMPRESS_JAR))
|
||||
ifneq ($(COMPRESS_JARS), true)
|
||||
|
||||
@@ -359,9 +359,9 @@ define SetupCompileNativeFileBody
|
||||
$1_FLAGS := $(BASIC_ASFLAGS) $$($1_BASE_ASFLAGS)
|
||||
$1_COMPILER := $(AS)
|
||||
|
||||
# gcc assembly files must contain an appropriate relative .file
|
||||
# gcc or clang assembly files must contain an appropriate relative .file
|
||||
# path for reproducible builds.
|
||||
ifeq ($(TOOLCHAIN_TYPE), gcc)
|
||||
ifneq ($(findstring $(TOOLCHAIN_TYPE), gcc clang), )
|
||||
# If no absolute paths allowed, work out relative source file path
|
||||
# for assembly .file substitution, otherwise use full file path
|
||||
ifeq ($(ALLOW_ABSOLUTE_PATHS_IN_OUTPUT), false)
|
||||
@@ -403,11 +403,10 @@ define SetupCompileNativeFileBody
|
||||
$1_OBJ_DEPS := $$($1_SRC_FILE) $$($$($1_BASE)_COMPILE_VARDEPS_FILE) \
|
||||
$$($$($1_BASE)_EXTRA_DEPS) $$($1_VARDEPS_FILE)
|
||||
$1_COMPILE_OPTIONS := $$($1_FLAGS) $(CC_OUT_OPTION)$$($1_OBJ) $$($1_SRC_FILE)
|
||||
# For reproducible builds with gcc ensure random symbol generation is seeded deterministically
|
||||
ifeq ($(TOOLCHAIN_TYPE), gcc)
|
||||
ifeq ($$(ENABLE_REPRODUCIBLE_BUILD), true)
|
||||
$1_COMPILE_OPTIONS += -frandom-seed="$$($1_FILENAME)"
|
||||
endif
|
||||
# For reproducible builds with gcc and clang ensure random symbol generation is
|
||||
# seeded deterministically
|
||||
ifneq ($(findstring $(TOOLCHAIN_TYPE), gcc clang), )
|
||||
$1_COMPILE_OPTIONS += -frandom-seed="$$($1_FILENAME)"
|
||||
endif
|
||||
|
||||
$$($1_OBJ_JSON): $$($1_OBJ_DEPS)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -54,7 +54,7 @@ endif
|
||||
# FOLLOW_SYMLINKS - Set to explicitly follow symlinks. Affects performance of
|
||||
# finding files.
|
||||
# ZIP_OPTIONS extra options to pass to zip
|
||||
# REPRODUCIBLE override ENABLE_REPRODUCIBLE_BUILD (to make zip reproducible or not)
|
||||
# REPRODUCIBLE set to false to disable the step that makes zip reproducible
|
||||
|
||||
SetupZipArchive = $(NamedParamsMacroTemplate)
|
||||
define SetupZipArchiveBody
|
||||
@@ -130,7 +130,7 @@ define SetupZipArchiveBody
|
||||
)
|
||||
|
||||
ifeq ($$($1_REPRODUCIBLE), )
|
||||
$1_REPRODUCIBLE := $$(ENABLE_REPRODUCIBLE_BUILD)
|
||||
$1_REPRODUCIBLE := true
|
||||
endif
|
||||
|
||||
# Use a slightly shorter name for logging, but with enough path to identify this zip.
|
||||
|
||||
@@ -87,8 +87,8 @@ define SetupBuildLauncherBody
|
||||
$1_MAIN_MODULE := $(MODULE)
|
||||
endif
|
||||
|
||||
$1_JAVA_ARGS += -ms8m
|
||||
ifneq ($$($1_MAIN_CLASS), )
|
||||
$1_JAVA_ARGS += -ms8m
|
||||
$1_LAUNCHER_CLASS := -m $$($1_MAIN_MODULE)/$$($1_MAIN_CLASS)
|
||||
endif
|
||||
|
||||
@@ -97,9 +97,12 @@ define SetupBuildLauncherBody
|
||||
$$(addprefix -J, $$($1_EXTRA_JAVA_ARGS)), "$$a"$(COMMA) )) }'
|
||||
$1_CFLAGS += -DEXTRA_JAVA_ARGS=$$($1_EXTRA_JAVA_ARGS_STR)
|
||||
endif
|
||||
$1_JAVA_ARGS_STR := '{ $$(strip $$(foreach a, \
|
||||
$$(addprefix -J, $$($1_JAVA_ARGS)) $$($1_LAUNCHER_CLASS), "$$a"$(COMMA) )) }'
|
||||
$1_CFLAGS += -DJAVA_ARGS=$$($1_JAVA_ARGS_STR)
|
||||
|
||||
ifneq ($$($1_JAVA_ARGS), )
|
||||
$1_JAVA_ARGS_STR := '{ $$(strip $$(foreach a, \
|
||||
$$(addprefix -J, $$($1_JAVA_ARGS)) $$($1_LAUNCHER_CLASS), "$$a"$(COMMA) )) }'
|
||||
$1_CFLAGS += -DJAVA_ARGS=$$($1_JAVA_ARGS_STR)
|
||||
endif
|
||||
|
||||
ifeq ($(call isTargetOs, macosx), true)
|
||||
ifeq ($$($1_MACOSX_PRIVILEGED), true)
|
||||
|
||||
@@ -42,6 +42,7 @@ DOCS_MODULES= \
|
||||
jdk.hotspot.agent \
|
||||
jdk.httpserver \
|
||||
jdk.jpackage \
|
||||
jdk.incubator.concurrent \
|
||||
jdk.incubator.vector \
|
||||
jdk.jartool \
|
||||
jdk.javadoc \
|
||||
|
||||
@@ -23,21 +23,19 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
# Versions and download locations for dependencies used by pre-submit testing.
|
||||
# Versions and download locations for dependencies used by GitHub Actions (GHA)
|
||||
|
||||
BOOT_JDK_VERSION=18
|
||||
JTREG_VERSION=6.1
|
||||
JTREG_BUILD=1
|
||||
GTEST_VERSION=1.8.1
|
||||
JTREG_VERSION=6.1+2
|
||||
|
||||
LINUX_X64_BOOT_JDK_FILENAME=openjdk-18_linux-x64_bin.tar.gz
|
||||
LINUX_X64_BOOT_JDK_EXT=tar.gz
|
||||
LINUX_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk18/43f95e8614114aeaa8e8a5fcf20a682d/36/GPL/openjdk-18_linux-x64_bin.tar.gz
|
||||
LINUX_X64_BOOT_JDK_SHA256=0f60aef7b8504983d6e374fe94d09a7bedcf05ec559e812d801a33bd4ebd23d0
|
||||
|
||||
WINDOWS_X64_BOOT_JDK_FILENAME=openjdk-18_windows-x64_bin.zip
|
||||
WINDOWS_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk18/43f95e8614114aeaa8e8a5fcf20a682d/36/GPL/openjdk-18_windows-x64_bin.zip
|
||||
WINDOWS_X64_BOOT_JDK_SHA256=a5b91d4c12752d44aa75df70ae3e2311287b3e60c288b07dade106376c688277
|
||||
|
||||
MACOS_X64_BOOT_JDK_FILENAME=openjdk-18_macos-x64_bin.tar.gz
|
||||
MACOS_X64_BOOT_JDK_EXT=tar.gz
|
||||
MACOS_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk18/43f95e8614114aeaa8e8a5fcf20a682d/36/GPL/openjdk-18_macos-x64_bin.tar.gz
|
||||
MACOS_X64_BOOT_JDK_SHA256=527b61b4265caf45cdcbacfcf8fbcd0b4b280bede1eff32a5b252d855ff0534b
|
||||
|
||||
WINDOWS_X64_BOOT_JDK_EXT=zip
|
||||
WINDOWS_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk18/43f95e8614114aeaa8e8a5fcf20a682d/36/GPL/openjdk-18_windows-x64_bin.zip
|
||||
WINDOWS_X64_BOOT_JDK_SHA256=a5b91d4c12752d44aa75df70ae3e2311287b3e60c288b07dade106376c688277
|
||||
@@ -837,7 +837,7 @@ var getJibProfilesProfiles = function (input, common, data) {
|
||||
[ "", common.open_suffix ].forEach(function (suffix) {
|
||||
var cmpBaselineName = name + suffix + "-cmp-baseline";
|
||||
profiles[cmpBaselineName] = clone(profiles[name + suffix]);
|
||||
// Only compare the images target. This should pressumably be expanded
|
||||
// Only compare the images target. This should presumably be expanded
|
||||
// to include more build targets when possible.
|
||||
profiles[cmpBaselineName].default_make_targets = [ "images", "test-image" ];
|
||||
if (name == "linux-x64") {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -43,6 +43,7 @@ BOOT_MODULES= \
|
||||
java.rmi \
|
||||
java.security.sasl \
|
||||
java.xml \
|
||||
jdk.incubator.concurrent \
|
||||
jdk.incubator.vector \
|
||||
jdk.internal.vm.ci \
|
||||
jdk.jfr \
|
||||
|
||||
@@ -26,17 +26,17 @@
|
||||
# Default version, product, and vendor information to use,
|
||||
# unless overridden by configure
|
||||
|
||||
DEFAULT_VERSION_FEATURE=19
|
||||
DEFAULT_VERSION_FEATURE=20
|
||||
DEFAULT_VERSION_INTERIM=0
|
||||
DEFAULT_VERSION_UPDATE=0
|
||||
DEFAULT_VERSION_PATCH=0
|
||||
DEFAULT_VERSION_EXTRA1=0
|
||||
DEFAULT_VERSION_EXTRA2=0
|
||||
DEFAULT_VERSION_EXTRA3=0
|
||||
DEFAULT_VERSION_DATE=2022-09-20
|
||||
DEFAULT_VERSION_CLASSFILE_MAJOR=63 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
|
||||
DEFAULT_VERSION_DATE=2023-03-21
|
||||
DEFAULT_VERSION_CLASSFILE_MAJOR=64 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
|
||||
DEFAULT_VERSION_CLASSFILE_MINOR=0
|
||||
DEFAULT_VERSION_DOCS_API_SINCE=11
|
||||
DEFAULT_ACCEPTABLE_BOOT_VERSIONS="18 19"
|
||||
DEFAULT_JDK_SOURCE_TARGET_VERSION=19
|
||||
DEFAULT_ACCEPTABLE_BOOT_VERSIONS="18 19 20"
|
||||
DEFAULT_JDK_SOURCE_TARGET_VERSION=20
|
||||
DEFAULT_PROMOTED_VERSION_PRE=ea
|
||||
|
||||
@@ -155,6 +155,7 @@ JVM_IsFinalizationEnabled
|
||||
JVM_IsHiddenClass
|
||||
JVM_IsInterface
|
||||
JVM_IsPreviewEnabled
|
||||
JVM_IsContinuationsSupported
|
||||
JVM_IsPrimitiveClass
|
||||
JVM_IsRecord
|
||||
JVM_IsSameClassPackage
|
||||
|
||||
@@ -107,7 +107,7 @@ POTENTIAL_INI_FILES="Common7/IDE/wdexpress.isolation.ini Common7/IDE/devenv.isol
|
||||
for f in $POTENTIAL_INI_FILES; do
|
||||
if [ -f "$VS_INSTALL_DIR/$f" ]; then
|
||||
VS_VERSION_SP="$(grep ^SemanticVersion= "$VS_INSTALL_DIR/$f")"
|
||||
# Remove SemnaticVersion=
|
||||
# Remove SemanticVersion=
|
||||
VS_VERSION_SP="${VS_VERSION_SP#*=}"
|
||||
# Remove suffix of too detailed numbering starting with +
|
||||
VS_VERSION_SP="${VS_VERSION_SP%+*}"
|
||||
|
||||
@@ -42,8 +42,6 @@ ifeq ($(call check-jvm-feature, compiler2), true)
|
||||
else ifeq ($(call isBuildOs, windows), true)
|
||||
ADLC_LDFLAGS += -nologo
|
||||
ADLC_CFLAGS := -nologo -EHsc
|
||||
# NOTE: The old build also have -D_CRT_SECURE_NO_DEPRECATE but it doesn't
|
||||
# seem needed any more.
|
||||
ADLC_CFLAGS_WARNINGS := -W3 -D_CRT_SECURE_NO_WARNINGS
|
||||
endif
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2013, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -66,6 +66,10 @@ ifeq ($(VERSION_BUILD), )
|
||||
VERSION_BUILD := 0
|
||||
endif
|
||||
|
||||
ifeq ($(HOTSPOT_BUILD_TIME), )
|
||||
HOTSPOT_BUILD_TIME := $(call EpochToISO8601, $(shell $(DATE) +"%s"))
|
||||
endif
|
||||
|
||||
CFLAGS_VM_VERSION := \
|
||||
$(VERSION_CFLAGS) \
|
||||
-DHOTSPOT_VERSION_STRING='"$(VERSION_STRING)"' \
|
||||
@@ -73,12 +77,9 @@ CFLAGS_VM_VERSION := \
|
||||
-DHOTSPOT_BUILD_USER='"$(USERNAME)"' \
|
||||
-DHOTSPOT_VM_DISTRO='"$(HOTSPOT_VM_DISTRO)"' \
|
||||
-DCPU='"$(OPENJDK_TARGET_CPU_VM_VERSION)"' \
|
||||
-DHOTSPOT_BUILD_TIME='"$(HOTSPOT_BUILD_TIME)"' \
|
||||
#
|
||||
|
||||
ifneq ($(HOTSPOT_BUILD_TIME), )
|
||||
CFLAGS_VM_VERSION += -DHOTSPOT_BUILD_TIME='"$(HOTSPOT_BUILD_TIME)"'
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Disabled warnings
|
||||
|
||||
@@ -101,7 +102,7 @@ DISABLED_WARNINGS_clang := tautological-compare \
|
||||
DISABLED_WARNINGS_xlc := tautological-compare shift-negative-value
|
||||
|
||||
DISABLED_WARNINGS_microsoft := 4100 4127 4146 4201 4244 4291 4351 \
|
||||
4511 4512 4514 4624 4996
|
||||
4511 4512 4514 4624
|
||||
|
||||
################################################################################
|
||||
# Platform specific setup
|
||||
|
||||
@@ -254,7 +254,7 @@ public final class JdkIdeaAntLogger extends DefaultLogger {
|
||||
/** flag - is this the first target we encounter? */
|
||||
boolean firstTarget = true;
|
||||
|
||||
/** flag - should subsequenet failures be suppressed ? */
|
||||
/** flag - should subsequent failures be suppressed ? */
|
||||
boolean suppressTaskFailures = false;
|
||||
|
||||
/** flag - have we ran into a javac crash ? */
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<list>
|
||||
<IssueNavigationLink>
|
||||
<option name="issueRegexp" value="\d{7}" />
|
||||
<option name="linkRegexp" value="https://bugs.openjdk.java.net/browse/JDK-$0" />
|
||||
<option name="linkRegexp" value="https://bugs.openjdk.org/browse/JDK-$0" />
|
||||
</IssueNavigationLink>
|
||||
</list>
|
||||
</option>
|
||||
|
||||
@@ -243,7 +243,7 @@ public final class LangtoolsIdeaAntLogger extends DefaultLogger {
|
||||
/** flag - is this the first target we encounter? */
|
||||
boolean firstTarget = true;
|
||||
|
||||
/** flag - should subsequenet failures be suppressed ? */
|
||||
/** flag - should subsequent failures be suppressed ? */
|
||||
boolean suppressTaskFailures = false;
|
||||
|
||||
/** flag - have we ran into a javac crash ? */
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
That would reduce the list of Ant targets that get displayed for this
|
||||
file, but it also complicates the interface between the project build
|
||||
file and the main build file. For example, some imported targets
|
||||
would have to be reclared, properties would have to be restructured,
|
||||
would have to be redeclared, properties would have to be restructured,
|
||||
and it would be harder to run results (e.g. in properties) from nested
|
||||
targets.
|
||||
-->
|
||||
|
||||
@@ -89,7 +89,12 @@ public class HelloClasslist {
|
||||
String CSCSC = "string" + s + "string" + s + "string";
|
||||
String SCSCS = s + "string" + s + "string" + s;
|
||||
String SSCSS = s + s + "string" + s + s;
|
||||
String SSSSS = s + s + s + s + s;
|
||||
String S5 = s + s + s + s + s;
|
||||
String S6 = s + s + s + s + s + s;
|
||||
String S7 = s + s + s + s + s + s + s;
|
||||
String S8 = s + s + s + s + s + s + s + s;
|
||||
String S9 = s + s + s + s + s + s + s + s + s;
|
||||
String S10 = s + s + s + s + s + s + s + s + s + s;
|
||||
|
||||
String CI = "string" + i;
|
||||
String IC = i + "string";
|
||||
@@ -100,6 +105,16 @@ public class HelloClasslist {
|
||||
String CIC = "string" + i + "string";
|
||||
String CICI = "string" + i + "string" + i;
|
||||
|
||||
float f = 0.1f;
|
||||
String CF = "string" + f;
|
||||
String CFS = "string" + f + s;
|
||||
String CSCF = "string" + s + "string" + f;
|
||||
|
||||
char c = 'a';
|
||||
String CC = "string" + c;
|
||||
String CCS = "string" + c + s;
|
||||
String CSCC = "string" + s + "string" + c;
|
||||
|
||||
long l = System.currentTimeMillis();
|
||||
String CJ = "string" + l;
|
||||
String JC = l + "string";
|
||||
@@ -108,6 +123,8 @@ public class HelloClasslist {
|
||||
String CJCJC = "string" + l + "string" + l + "string";
|
||||
double d = i / 2.0;
|
||||
String CD = "string" + d;
|
||||
String CDS = "string" + d + s;
|
||||
String CSCD = "string" + s + "string" + d;
|
||||
|
||||
String newDate = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(
|
||||
LocalDateTime.now(ZoneId.of("GMT")));
|
||||
|
||||
@@ -732,7 +732,7 @@ class Bundle {
|
||||
// this is a workaround in which 'B' character
|
||||
// appearing in CLDR date-time pattern is replaced
|
||||
// with 'a' character and hence resolved with am/pm strings.
|
||||
// This workaround is based on the the fallback mechanism
|
||||
// This workaround is based on the fallback mechanism
|
||||
// specified in LDML spec for 'B' character, when a locale
|
||||
// does not have data for day period ('B')
|
||||
appendN('a', count, sb);
|
||||
|
||||
@@ -33,7 +33,6 @@ import java.util.Formatter;
|
||||
import java.util.HashSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
@@ -70,7 +69,6 @@ class ResourceBundleGenerator implements BundleGenerator {
|
||||
private static final String META_VALUE_PREFIX = "metaValue_";
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void generateBundle(String packageName, String baseName, String localeID, boolean useJava,
|
||||
Map<String, ?> map, BundleType type) throws IOException {
|
||||
String suffix = useJava ? ".java" : ".properties";
|
||||
@@ -144,56 +142,34 @@ class ResourceBundleGenerator implements BundleGenerator {
|
||||
map = newMap;
|
||||
} else {
|
||||
// generic reduction of duplicated values
|
||||
Map<String, Object> newMap = null;
|
||||
for (String key : map.keySet()) {
|
||||
Object val = map.get(key);
|
||||
String metaVal = null;
|
||||
|
||||
for (Map.Entry<String, ?> entry : map.entrySet()) {
|
||||
String k = entry.getKey();
|
||||
if (!k.equals(key) &&
|
||||
Objects.deepEquals(val, entry.getValue()) &&
|
||||
!(Objects.nonNull(newMap) && newMap.containsKey(k))) {
|
||||
if (Objects.isNull(newMap)) {
|
||||
newMap = new HashMap<>();
|
||||
Map<String, Object> newMap = new LinkedHashMap<>(map);
|
||||
Map<BundleEntryValue, BundleEntryValue> dedup = new HashMap<>(map.size());
|
||||
for (Map.Entry<String, ?> entry : map.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
Object val = entry.getValue();
|
||||
BundleEntryValue newEntry = new BundleEntryValue(key, val);
|
||||
BundleEntryValue oldEntry = dedup.putIfAbsent(newEntry, newEntry);
|
||||
if (oldEntry != null) {
|
||||
if (oldEntry.meta()) {
|
||||
if (fmt == null) {
|
||||
fmt = new Formatter();
|
||||
}
|
||||
|
||||
if (Objects.isNull(metaVal)) {
|
||||
metaVal = META_VALUE_PREFIX + key.replaceAll("[\\.-]", "_");
|
||||
|
||||
if (val instanceof String[]) {
|
||||
fmt.format(" final String[] %s = new String[] {\n", metaVal);
|
||||
for (String s : (String[]) val) {
|
||||
fmt.format(" \"%s\",\n", CLDRConverter.saveConvert(s, useJava));
|
||||
}
|
||||
fmt.format(" };\n");
|
||||
} else if (val instanceof List) {
|
||||
fmt.format(" final String[] %s = new String[] {\n", metaVal);
|
||||
for (String s : (List<String>) val) {
|
||||
fmt.format(" \"%s\",\n", CLDRConverter.saveConvert(s, useJava));
|
||||
}
|
||||
fmt.format(" };\n");
|
||||
} else {
|
||||
fmt.format(" final String %s = \"%s\";\n", metaVal, CLDRConverter.saveConvert((String)val, useJava));
|
||||
String metaVal = oldEntry.metaKey();
|
||||
if (val instanceof String[] values) {
|
||||
fmt.format(" final String[] %s = new String[] {\n", metaVal);
|
||||
for (String s : values) {
|
||||
fmt.format(" \"%s\",\n", CLDRConverter.saveConvert(s, useJava));
|
||||
}
|
||||
fmt.format(" };\n");
|
||||
} else {
|
||||
fmt.format(" final String %s = \"%s\";\n", metaVal, CLDRConverter.saveConvert((String)val, useJava));
|
||||
}
|
||||
|
||||
newMap.put(k, metaVal);
|
||||
newMap.put(oldEntry.key, oldEntry.metaKey());
|
||||
}
|
||||
}
|
||||
|
||||
if (Objects.nonNull(metaVal)) {
|
||||
newMap.put(key, metaVal);
|
||||
newMap.put(key, oldEntry.metaKey());
|
||||
}
|
||||
}
|
||||
|
||||
if (Objects.nonNull(newMap)) {
|
||||
for (String key : map.keySet()) {
|
||||
newMap.putIfAbsent(key, map.get(key));
|
||||
}
|
||||
map = newMap;
|
||||
}
|
||||
map = newMap;
|
||||
}
|
||||
|
||||
try (PrintWriter out = new PrintWriter(file, encoding)) {
|
||||
@@ -247,6 +223,58 @@ class ResourceBundleGenerator implements BundleGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
private static class BundleEntryValue {
|
||||
private final String key;
|
||||
private final Object value;
|
||||
private final int hashCode;
|
||||
private String metaKey;
|
||||
|
||||
BundleEntryValue(String key, Object value) {
|
||||
this.key = Objects.requireNonNull(key);
|
||||
this.value = Objects.requireNonNull(value);
|
||||
if (value instanceof String) {
|
||||
hashCode = value.hashCode();
|
||||
} else if (value instanceof String[] arr) {
|
||||
hashCode = Arrays.hashCode(arr);
|
||||
} else {
|
||||
throw new InternalError("Expected a string or a string array");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* mark the entry as meta
|
||||
* @return true if the entry was not meta before, false otherwise
|
||||
*/
|
||||
public boolean meta() {
|
||||
if (metaKey == null) {
|
||||
metaKey = META_VALUE_PREFIX + key.replaceAll("[\\.-]", "_");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public String metaKey() {
|
||||
return metaKey;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return hashCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof BundleEntryValue entry) {
|
||||
if (value instanceof String s) {
|
||||
return s.equals(entry.value);
|
||||
} else if (entry.value instanceof String[] otherVal) {
|
||||
return Arrays.equals((String[]) value, otherVal);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateMetaInfo(Map<String, SortedSet<String>> metaInfo) throws IOException {
|
||||
String dirName = CLDRConverter.DESTINATION_DIR + File.separator + "sun" + File.separator + "util" +
|
||||
@@ -268,27 +296,29 @@ class ResourceBundleGenerator implements BundleGenerator {
|
||||
try (PrintWriter out = new PrintWriter(file, "us-ascii")) {
|
||||
out.printf(CopyrightHeaders.getOpenJDKCopyright(CLDRConverter.copyrightYear));
|
||||
|
||||
out.printf((CLDRConverter.isBaseModule ? "package sun.util.cldr;\n\n" :
|
||||
"package sun.util.resources.cldr.provider;\n\n")
|
||||
+ "import java.util.HashMap;\n"
|
||||
+ "import java.util.Locale;\n"
|
||||
+ "import java.util.Map;\n"
|
||||
+ "import sun.util.locale.provider.LocaleDataMetaInfo;\n"
|
||||
+ "import sun.util.locale.provider.LocaleProviderAdapter;\n\n");
|
||||
out.printf("public class %s implements LocaleDataMetaInfo {\n", className);
|
||||
out.printf(" private static final Map<String, String> resourceNameToLocales = new HashMap<>(" +
|
||||
((int)(metaInfo.keySet().stream()
|
||||
.filter(k -> k.equals("AvailableLocales"))
|
||||
.count() / 0.75f) + 1) + ");\n" +
|
||||
(CLDRConverter.isBaseModule ?
|
||||
" private static final Map<Locale, String[]> parentLocalesMap = new HashMap<>(" +
|
||||
((int)(metaInfo.keySet().stream()
|
||||
.filter(k -> k.startsWith(CLDRConverter.PARENT_LOCALE_PREFIX))
|
||||
.count() / 0.75f) + 1) + ");\n" +
|
||||
" private static final Map<String, String> languageAliasMap = new HashMap<>(" +
|
||||
((int)(CLDRConverter.handlerSupplMeta.getLanguageAliasData().size() / 0.75f) + 1) + ");\n\n" :
|
||||
"\n") +
|
||||
" static {\n");
|
||||
out.printf("""
|
||||
package sun.util.%s;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import sun.util.locale.provider.LocaleDataMetaInfo;
|
||||
import sun.util.locale.provider.LocaleProviderAdapter;
|
||||
|
||||
public class %s implements LocaleDataMetaInfo {
|
||||
private static final Map<String, String> resourceNameToLocales = HashMap.newHashMap(%d);
|
||||
%s
|
||||
static {
|
||||
""", CLDRConverter.isBaseModule ? "cldr" : "resources.cldr.provider",
|
||||
className, metaInfo.keySet().stream().filter(k -> k.equals("AvailableLocales")).count(),
|
||||
CLDRConverter.isBaseModule ?
|
||||
"""
|
||||
private static final Map<Locale, String[]> parentLocalesMap = HashMap.newHashMap(%d);
|
||||
private static final Map<String, String> languageAliasMap = HashMap.newHashMap(%d);
|
||||
""".formatted(
|
||||
metaInfo.keySet().stream().filter(k -> k.startsWith(CLDRConverter.PARENT_LOCALE_PREFIX)).count(),
|
||||
CLDRConverter.handlerSupplMeta.getLanguageAliasData().size()) :
|
||||
"");
|
||||
|
||||
for (String key : metaInfo.keySet()) {
|
||||
if (key.startsWith(CLDRConverter.PARENT_LOCALE_PREFIX)) {
|
||||
@@ -301,23 +331,23 @@ class ResourceBundleGenerator implements BundleGenerator {
|
||||
}
|
||||
String[] children = toLocaleList(metaInfo.get(key), true).split(" ");
|
||||
Arrays.sort(children);
|
||||
out.printf(" new String[] {\n" +
|
||||
" ");
|
||||
out.printf(" new String[] {\n" +
|
||||
" ");
|
||||
int count = 0;
|
||||
for (int i = 0; i < children.length; i++) {
|
||||
String child = children[i];
|
||||
out.printf("\"%s\", ", child);
|
||||
count += child.length() + 4;
|
||||
if (i != children.length - 1 && count > 64) {
|
||||
out.printf("\n ");
|
||||
out.printf("\n ");
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
out.printf("\n });\n");
|
||||
out.printf("\n });\n");
|
||||
} else {
|
||||
if ("AvailableLocales".equals(key)) {
|
||||
out.printf(" resourceNameToLocales.put(\"%s\",\n", key);
|
||||
out.printf(" \"%s\");\n", toLocaleList(applyLanguageAliases(metaInfo.get(key)), false));
|
||||
out.printf(" \"%s\");\n", toLocaleList(applyLanguageAliases(metaInfo.get(key)), false));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -334,10 +364,11 @@ class ResourceBundleGenerator implements BundleGenerator {
|
||||
|
||||
// Canonical TZ names for delayed initialization
|
||||
if (CLDRConverter.isBaseModule) {
|
||||
out.printf(" private static class TZCanonicalIDMapHolder {\n");
|
||||
out.printf(" static final Map<String, String> tzCanonicalIDMap = new HashMap<>(" +
|
||||
((int)(CLDRConverter.handlerTimeZone.getData().size() / 0.75f) + 1) + ");\n");
|
||||
out.printf(" static {\n");
|
||||
out.printf("""
|
||||
private static class TZCanonicalIDMapHolder {
|
||||
static final Map<String, String> tzCanonicalIDMap = HashMap.newHashMap(%d);
|
||||
static {
|
||||
""", CLDRConverter.handlerTimeZone.getData().size());
|
||||
CLDRConverter.handlerTimeZone.getData().entrySet().stream()
|
||||
.forEach(e -> {
|
||||
String[] ids = ((String)e.getValue()).split("\\s");
|
||||
@@ -351,31 +382,35 @@ class ResourceBundleGenerator implements BundleGenerator {
|
||||
out.printf(" }\n }\n\n");
|
||||
}
|
||||
|
||||
out.printf(" @Override\n" +
|
||||
" public LocaleProviderAdapter.Type getType() {\n" +
|
||||
" return LocaleProviderAdapter.Type.CLDR;\n" +
|
||||
" }\n\n");
|
||||
out.printf("""
|
||||
@Override
|
||||
public LocaleProviderAdapter.Type getType() {
|
||||
return LocaleProviderAdapter.Type.CLDR;
|
||||
}
|
||||
|
||||
out.printf(" @Override\n" +
|
||||
" public String availableLanguageTags(String category) {\n" +
|
||||
" return resourceNameToLocales.getOrDefault(category, \"\");\n" +
|
||||
" }\n\n");
|
||||
@Override
|
||||
public String availableLanguageTags(String category) {
|
||||
return resourceNameToLocales.getOrDefault(category, "");
|
||||
}
|
||||
%s
|
||||
}
|
||||
""",
|
||||
CLDRConverter.isBaseModule ? """
|
||||
|
||||
if (CLDRConverter.isBaseModule) {
|
||||
out.printf(" @Override\n" +
|
||||
" public Map<String, String> getLanguageAliasMap() {\n" +
|
||||
" return languageAliasMap;\n" +
|
||||
" }\n\n");
|
||||
out.printf(" @Override\n" +
|
||||
" public Map<String, String> tzCanonicalIDs() {\n" +
|
||||
" return TZCanonicalIDMapHolder.tzCanonicalIDMap;\n" +
|
||||
" }\n\n");
|
||||
out.printf(" public Map<Locale, String[]> parentLocales() {\n" +
|
||||
" return parentLocalesMap;\n" +
|
||||
" }\n}");
|
||||
} else {
|
||||
out.printf("}");
|
||||
}
|
||||
@Override
|
||||
public Map<String, String> getLanguageAliasMap() {
|
||||
return languageAliasMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> tzCanonicalIDs() {
|
||||
return TZCanonicalIDMapHolder.tzCanonicalIDMap;
|
||||
}
|
||||
|
||||
public Map<Locale, String[]> parentLocales() {
|
||||
return parentLocalesMap;
|
||||
}
|
||||
""" : "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -131,7 +131,7 @@ class DTDBuilder extends DTD {
|
||||
}
|
||||
|
||||
//
|
||||
// The the id of a name from the list of names
|
||||
// The id of a name from the list of names
|
||||
//
|
||||
private short getNameId(String name) {
|
||||
Integer o = namesHash.get(name);
|
||||
|
||||
@@ -148,7 +148,7 @@ class RuleBasedBreakIteratorBuilder {
|
||||
|
||||
/**
|
||||
* Looping states actually have to be backfilled later in the process
|
||||
* than everything else. This is where a the list of states to backfill
|
||||
* than everything else. This is where the list of states to backfill
|
||||
* is accumulated. This is also used to handle .*?
|
||||
*/
|
||||
protected Vector<Integer> statesToBackfill = null;
|
||||
@@ -1300,7 +1300,7 @@ class RuleBasedBreakIteratorBuilder {
|
||||
newValues[(int)(pendingChars.charAt(i)) - 0x100] = newValue;
|
||||
|
||||
// go through the list of rows to update, and update them by calling
|
||||
// mergeStates() to merge them the the dummy state we created
|
||||
// mergeStates() to merge them the dummy state we created
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
mergeStates(rows.elementAt(i).intValue(), newValues, rows);
|
||||
}
|
||||
@@ -1881,7 +1881,7 @@ class RuleBasedBreakIteratorBuilder {
|
||||
// we have to merge the resulting state table with the auto-generated one
|
||||
// above. First copy the populated cells from row 1 over the populated
|
||||
// cells in the auto-generated table. Then copy values from row 1 of the
|
||||
// auto-generated table into all of the the unpopulated cells of the
|
||||
// auto-generated table into all of the unpopulated cells of the
|
||||
// rule-based table.
|
||||
if (backTableOffset > 1) {
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
build
|
||||
|-bin (scripts to invoke various tools, javac etc.)
|
||||
|-genrsc (generated sources - i.e. properties)
|
||||
|-gensrc (generated sources - i.e. properties)
|
||||
|-modules (compiled classes in a modular layout)
|
||||
|-jtreg (test work/results)
|
||||
|-toolclasses (tools used for building - like the property compiler)
|
||||
|
||||
@@ -169,7 +169,7 @@ import java.util.Optional;
|
||||
* The tools allows to:
|
||||
* * convert the .sym.txt into class/sig files for ct.sym
|
||||
* * in cooperation with the adjacent history Probe, construct .sym.txt files for previous platforms
|
||||
* * enhance existing .sym.txt files with a a new set .sym.txt for the current platform
|
||||
* * enhance existing .sym.txt files with a new set .sym.txt for the current platform
|
||||
*
|
||||
* To convert the .sym.txt files to class/sig files from ct.sym, run:
|
||||
* java build.tool.symbolgenerator.CreateSymbols build-ctsym <platform-description-file> <target-directory>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -233,7 +233,7 @@ $(eval $(call SetupCopyLegalFiles, COPY_LEGAL, \
|
||||
TARGETS += $(COPY_LEGAL)
|
||||
|
||||
################################################################################
|
||||
# Optionally copy libffi.so.? into the the image
|
||||
# Optionally copy libffi.so.? into the image
|
||||
|
||||
ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
|
||||
$(eval $(call SetupCopyFiles, COPY_LIBFFI, \
|
||||
@@ -247,7 +247,7 @@ ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Optionally copy hsdis into the the image
|
||||
# Optionally copy hsdis into the image
|
||||
|
||||
ifeq ($(ENABLE_HSDIS_BUNDLING), true)
|
||||
HSDIS_NAME := hsdis-$(OPENJDK_TARGET_CPU_LEGACY_LIB)$(SHARED_LIBRARY_SUFFIX)
|
||||
|
||||
@@ -459,7 +459,7 @@ else
|
||||
|
||||
HARFBUZZ_DISABLED_WARNINGS_gcc := type-limits missing-field-initializers strict-aliasing
|
||||
HARFBUZZ_DISABLED_WARNINGS_CXX_gcc := reorder delete-non-virtual-dtor strict-overflow \
|
||||
maybe-uninitialized class-memaccess unused-result extra
|
||||
maybe-uninitialized class-memaccess unused-result extra use-after-free
|
||||
HARFBUZZ_DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types \
|
||||
tautological-constant-out-of-range-compare int-to-pointer-cast \
|
||||
undef missing-field-initializers range-loop-analysis \
|
||||
|
||||
@@ -42,12 +42,15 @@ ifeq ($(call isTargetOs, macosx), true)
|
||||
MACH_EXC_HEADER := $(MIG_OUTPUT_DIR)/mach_exc.h
|
||||
MACH_EXC_USER := $(MIG_OUTPUT_DIR)/mach_excUser.c
|
||||
MACH_EXC_SERVER := $(MIG_OUTPUT_DIR)/mach_excServer.c
|
||||
ifneq ($(SYSROOT), )
|
||||
MIG_SYSROOT_FLAGS := -isysroot $(SYSROOT)
|
||||
endif
|
||||
|
||||
$(MACH_EXC_SERVER): $(SDKROOT)/usr/include/mach/mach_exc.defs
|
||||
$(MACH_EXC_SERVER): $(SYSROOT)/usr/include/mach/mach_exc.defs
|
||||
$(call MakeTargetDir)
|
||||
$(MIG) $(if $(SDKROOT), -isysroot $(SDKROOT)) \
|
||||
$(MIG) $(MIG_SYSROOT_FLAGS) \
|
||||
-server $@ -user $(MACH_EXC_USER) \
|
||||
-header $(MACH_EXC_HEADER) $(SDKROOT)/usr/include/mach/mach_exc.defs
|
||||
-header $(MACH_EXC_HEADER) $(SYSROOT)/usr/include/mach/mach_exc.defs
|
||||
|
||||
TARGETS += $(MACH_EXC_SERVER)
|
||||
endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
|
||||
@@ -129,6 +129,10 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
|
||||
JPACKAGE_TARGETS += $(BUILD_LIB_JPACKAGE)
|
||||
|
||||
JPACKAGE_WIXHELPER_SRC := \
|
||||
$(call FindSrcDirsForComponent, jdk.jpackage, libwixhelper) \
|
||||
$(call FindSrcDirsForComponent, jdk.jpackage, common)
|
||||
|
||||
# Build Wix custom action helper
|
||||
# Output library in resources dir, and symbols in the object dir
|
||||
$(eval $(call SetupJdkLibrary, BUILD_LIB_WIXHELPER, \
|
||||
@@ -136,11 +140,12 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
OUTPUT_DIR := $(JPACKAGE_OUTPUT_DIR), \
|
||||
SYMBOLS_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libwixhelper, \
|
||||
OPTIMIZATION := LOW, \
|
||||
SRC := $(JPACKAGE_WIXHELPER_SRC), \
|
||||
CXXFLAGS := $(call JpackageWithStaticCrt, $(CXXFLAGS_JDKLIB)) \
|
||||
$(JPACKAGE_CXXFLAGS_windows), \
|
||||
$(addprefix -I, $(JPACKAGE_WIXHELPER_SRC)) $(JPACKAGE_CXXFLAGS_windows), \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK), \
|
||||
LIBS := $(LIBCXX), \
|
||||
LIBS_windows := msi.lib Shlwapi.lib User32.lib, \
|
||||
LIBS_windows := User32.lib, \
|
||||
))
|
||||
|
||||
JPACKAGE_TARGETS += $(BUILD_LIB_WIXHELPER)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -36,7 +36,7 @@ fi
|
||||
# Diff exceptions
|
||||
|
||||
if [ "$OPENJDK_TARGET_OS" = "linux" ]; then
|
||||
if [ "$HOTSPOT_BUILD_TIME" = "" -o "$USE_PRECOMPILED_HEADER" = "true" ]; then
|
||||
if [ "$USE_PRECOMPILED_HEADER" = "true" ]; then
|
||||
ACCEPTED_BIN_DIFF="
|
||||
./lib/server/libjvm.so
|
||||
./hotspot/gtest/server/libjvm.so
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -28,6 +28,14 @@
|
||||
# available, or extract values automatically from the environment if missing.
|
||||
# This is robust, but slower.
|
||||
function setup() {
|
||||
|
||||
# Make regexp tests case insensitive
|
||||
shopt -s nocasematch
|
||||
# Prohibit msys2 from meddling with paths
|
||||
export MSYS2_ARG_CONV_EXCL="*"
|
||||
# Make sure WSL gets a copy of the path
|
||||
export WSLENV=PATH/l
|
||||
|
||||
while getopts "e:p:r:t:c:qmi" opt; do
|
||||
case "$opt" in
|
||||
e) PATHTOOL="$OPTARG" ;;
|
||||
@@ -87,13 +95,6 @@ function setup() {
|
||||
wintemp_win="$($CMD /q /c echo %TEMP% 2>/dev/null | tr -d \\n\\r)"
|
||||
WINTEMP="$($PATHTOOL -u "$wintemp_win")"
|
||||
fi
|
||||
|
||||
# Make regexp tests case insensitive
|
||||
shopt -s nocasematch
|
||||
# Prohibit msys2 from meddling with paths
|
||||
export MSYS2_ARG_CONV_EXCL="*"
|
||||
# Make sure WSL gets a copy of the path
|
||||
export WSLENV=PATH/l
|
||||
}
|
||||
|
||||
# Cleanup handling
|
||||
@@ -147,14 +148,13 @@ function import_path() {
|
||||
if [[ "$path" != "" ]]; then
|
||||
# Store current unix path
|
||||
unixpath="$path"
|
||||
# Now turn it into a windows path
|
||||
winpath="$($PATHTOOL -w "$path" 2>/dev/null)"
|
||||
# If it fails, try again with an added .exe (needed on WSL)
|
||||
if [[ $? -ne 0 ]]; then
|
||||
# If $unixpath does not exist, add .exe (needed on WSL)
|
||||
if [[ ! -e "$unixpath" ]]; then
|
||||
unixpath="$unixpath.exe"
|
||||
winpath="$($PATHTOOL -w "$unixpath" 2>/dev/null)"
|
||||
fi
|
||||
if [[ $? -eq 0 ]]; then
|
||||
# Now turn it into a windows path
|
||||
winpath="$($PATHTOOL -w "$unixpath" 2>/dev/null)"
|
||||
if [[ $? -eq 0 && -e "$unixpath" ]]; then
|
||||
if [[ ! "$winpath" =~ ^"$ENVROOT"\\.*$ ]] ; then
|
||||
# If it is not in envroot, it's a generic windows path
|
||||
if [[ ! $winpath =~ ^[-_.:\\a-zA-Z0-9]*$ ]] ; then
|
||||
@@ -299,6 +299,19 @@ function convert_path() {
|
||||
if [[ $arg =~ ^([^/]*|-[^:=]*[:=]|.*file://|/[a-zA-Z:]{1,3}:?)($DRIVEPREFIX/)([a-z])(/[^/]+.*$) ]] ; then
|
||||
prefix="${BASH_REMATCH[1]}"
|
||||
winpath="${BASH_REMATCH[3]}:${BASH_REMATCH[4]}"
|
||||
|
||||
# If the thing in its entirety points to an existing path, use that instead of thinking
|
||||
# we have a prefix. This can only happen if the top-level directory has a single-letter name.
|
||||
if [[ ${#prefix} -eq 2 && "${prefix:0:1}" == "/" ]]; then
|
||||
possiblepath="${BASH_REMATCH[1]}/${BASH_REMATCH[3]}${BASH_REMATCH[4]}"
|
||||
if [[ -e "$possiblepath" || -e "$(dirname $possiblepath)" || -e "$(echo $possiblepath | cut -d / -f 1-5)" ]] ; then
|
||||
prefix=
|
||||
drivepart="${possiblepath:1:1}"
|
||||
pathpart="${possiblepath:2}"
|
||||
winpath="$drivepart:$pathpart"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Change slash to backslash (or vice versa if mixed mode)
|
||||
if [[ $MIXEDMODE != true ]]; then
|
||||
winpath="${winpath//'/'/'\'}"
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
# directory.
|
||||
# - open a terminal program and run these commands:
|
||||
# cd "${JDK_CHECKOUT}"/src/jdk.compiler/share/data/symbols
|
||||
# bash ../../scripts/generate-symbol-data.sh "${JDK_N_INSTALL}"
|
||||
# bash ../../../../../make/scripts/generate-symbol-data.sh "${JDK_N_INSTALL}"
|
||||
# - this command will generate or update data for "--release N" into the ${JDK_CHECKOUT}/src/jdk.compiler/share/data/symbols
|
||||
# directory, updating all registration necessary. If the goal was to update the data, and there are no
|
||||
# new or changed files in the ${JDK_CHECKOUT}/src/jdk.compiler/share/data/symbols directory after running this script,
|
||||
@@ -73,5 +73,5 @@ $1/bin/java --add-exports jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED \
|
||||
--add-exports jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED \
|
||||
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
|
||||
--add-modules jdk.jdeps \
|
||||
../../../make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java \
|
||||
../../../../../make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java \
|
||||
build-description-incremental symbols include.list
|
||||
|
||||
@@ -22,11 +22,11 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
# Usage: ./logger.sh theloggfile acommand arg1 arg2
|
||||
# Usage: ./logger.sh thelogfile acommand arg1 arg2
|
||||
#
|
||||
# Execute acommand with args, in such a way that
|
||||
# both stdout and stderr from acommand are appended to
|
||||
# theloggfile.
|
||||
# thelogfile.
|
||||
#
|
||||
# Preserve stdout and stderr, so that the stdout
|
||||
# from logger.sh is the same from acommand and equally
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@@ -30,7 +30,7 @@
|
||||
# typically beginning with -c.
|
||||
#
|
||||
# This script will run the shell command line and it will also store a simple
|
||||
# log of the the time it takes to execute the command in the OUTPUT_FILE, using
|
||||
# log of the time it takes to execute the command in the OUTPUT_FILE, using
|
||||
# utility for time measure specified with TIME_CMD option.
|
||||
#
|
||||
# Type of time measure utility is specified with TIME_CMD_TYPE option.
|
||||
|
||||
@@ -874,7 +874,7 @@ BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exesigtest := -ljvm
|
||||
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
BUILD_HOTSPOT_JTREG_EXECUTABLES_CFLAGS_exeFPRegs := -MT
|
||||
BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c libTestJNI.c
|
||||
BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c libTestJNI.c libCompleteExit.c libTestPsig.c
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libatExit := jvm.lib
|
||||
else
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libbootclssearch_agent += -lpthread
|
||||
@@ -1512,6 +1512,7 @@ else
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libgetphase002 += -lpthread
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libterminatedThread += -lpthread
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libatExit += -ljvm
|
||||
BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libCompleteExit += -lpthread
|
||||
endif
|
||||
|
||||
# This evaluation is expensive and should only be done if this target was
|
||||
|
||||
@@ -55,18 +55,18 @@ BUILD_JDK_JTREG_EXECUTABLES_CFLAGS_exeJliLaunchTest := \
|
||||
|
||||
# Platform specific setup
|
||||
ifeq ($(call isTargetOs, windows), true)
|
||||
BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c exelauncher.c
|
||||
BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c \
|
||||
libExplicitAttach.c libImplicitAttach.c \
|
||||
exelauncher.c
|
||||
|
||||
WIN_LIB_JAVA := $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := $(WIN_LIB_JAVA)
|
||||
WIN_LIB_JLI := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := $(WIN_LIB_JLI)
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeCallerAccessTest := jvm.lib
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerClassLoaderTest := jvm.lib
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerLookupTest := jvm.lib
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerResourceBundle := jvm.lib
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerGetResource := jvm.lib
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerTest := $(LIBCXX) jvm.lib
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exerevokeall := advapi32.lib
|
||||
BUILD_JDK_JTREG_EXECUTABLES_CFLAGS_exeNullCallerTest := /EHsc
|
||||
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libAsyncStackWalk := /EHsc
|
||||
BUILD_JDK_JTREG_LIBRARIES_CFLAGS_libAsyncInvokers := /EHsc
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libLinkerInvokerUnnamed := /EHsc
|
||||
@@ -77,6 +77,7 @@ ifeq ($(call isTargetOs, windows), true)
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libLinkerInvokerUnnamed := $(LIBCXX)
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libLinkerInvokerModule := $(LIBCXX)
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libLoaderLookupInvoker := $(LIBCXX)
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTracePinnedThreads := jvm.lib
|
||||
else
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libstringPlatformChars := -ljava
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libDirectIO := -ljava
|
||||
@@ -86,6 +87,10 @@ else
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libLinkerInvokerUnnamed := $(LIBCXX) -pthread
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libLinkerInvokerModule := $(LIBCXX) -pthread
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libLoaderLookupInvoker := $(LIBCXX) -pthread
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libExplicitAttach := -ljvm
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libExplicitAttach := -pthread
|
||||
BUILD_JDK_JTREG_LIBRARIES_LDFLAGS_libImplicitAttach := -pthread
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTracePinnedThreads := -ljvm
|
||||
BUILD_JDK_JTREG_EXCLUDE += exerevokeall.c
|
||||
ifeq ($(call isTargetOs, linux), true)
|
||||
BUILD_JDK_JTREG_LIBRARIES_LIBS_libInheritedChannel := -ljava
|
||||
@@ -93,10 +98,7 @@ else
|
||||
endif
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeJliLaunchTest := -ljli
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeCallerAccessTest := -ljvm
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerClassLoaderTest := -ljvm
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerLookupTest := -ljvm
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerResourceBundle := -ljvm
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerGetResource := -ljvm
|
||||
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerTest := $(LIBCXX) -ljvm
|
||||
endif
|
||||
|
||||
ifeq ($(call isTargetOs, macosx), true)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -40,11 +40,11 @@
|
||||
|
||||
package j2dbench;
|
||||
|
||||
import java.util.Vector;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Enumeration;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Vector;
|
||||
|
||||
public class Result {
|
||||
public static final int RATE_UNKNOWN = 0;
|
||||
@@ -243,7 +243,7 @@ public class Result {
|
||||
int repsPerRun;
|
||||
int unitsPerRep;
|
||||
Vector times;
|
||||
Hashtable modifiers;
|
||||
LinkedHashMap modifiers;
|
||||
Throwable error;
|
||||
|
||||
public Result(Test test) {
|
||||
@@ -277,7 +277,7 @@ public class Result {
|
||||
this.error = t;
|
||||
}
|
||||
|
||||
public void setModifiers(Hashtable modifiers) {
|
||||
public void setModifiers(LinkedHashMap modifiers) {
|
||||
this.modifiers = modifiers;
|
||||
}
|
||||
|
||||
@@ -297,7 +297,7 @@ public class Result {
|
||||
return ((long) getRepsPerRun()) * ((long) getUnitsPerRep());
|
||||
}
|
||||
|
||||
public Hashtable getModifiers() {
|
||||
public LinkedHashMap getModifiers() {
|
||||
return modifiers;
|
||||
}
|
||||
|
||||
@@ -423,11 +423,11 @@ public class Result {
|
||||
System.out.println(test+" averaged "+getAverageString());
|
||||
}
|
||||
if (true) {
|
||||
Enumeration enum_ = modifiers.keys();
|
||||
Iterator iter_ = modifiers.keySet().iterator();
|
||||
System.out.print(" with");
|
||||
String sep = " ";
|
||||
while (enum_.hasMoreElements()) {
|
||||
Modifier mod = (Modifier) enum_.nextElement();
|
||||
while (iter_.hasNext()) {
|
||||
Modifier mod = (Modifier) iter_.next();
|
||||
Object v = modifiers.get(mod);
|
||||
System.out.print(sep);
|
||||
System.out.print(mod.getAbbreviatedModifierDescription(v));
|
||||
@@ -442,9 +442,9 @@ public class Result {
|
||||
"num-reps=\""+getRepsPerRun()+"\" "+
|
||||
"num-units=\""+getUnitsPerRep()+"\" "+
|
||||
"name=\""+test.getTreeName()+"\">");
|
||||
Enumeration enum_ = modifiers.keys();
|
||||
while (enum_.hasMoreElements()) {
|
||||
Modifier mod = (Modifier) enum_.nextElement();
|
||||
Iterator iter_ = modifiers.keySet().iterator();
|
||||
while (iter_.hasNext()) {
|
||||
Modifier mod = (Modifier) iter_.next();
|
||||
Object v = modifiers.get(mod);
|
||||
String val = mod.getModifierValueName(v);
|
||||
pw.println(" <option "+
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -40,15 +40,15 @@
|
||||
|
||||
package j2dbench;
|
||||
|
||||
import java.awt.AlphaComposite;
|
||||
import java.awt.Canvas;
|
||||
import java.awt.Image;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.AlphaComposite;
|
||||
import java.awt.Color;
|
||||
import java.awt.Image;
|
||||
import java.awt.Toolkit;
|
||||
import java.util.Hashtable;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import j2dbench.tests.GraphicsTests;
|
||||
|
||||
@@ -105,12 +105,12 @@ public class TestEnvironment implements Node.Visitor {
|
||||
Image srcImage;
|
||||
boolean stopped;
|
||||
ResultSet results;
|
||||
Hashtable modifiers;
|
||||
LinkedHashMap modifiers;
|
||||
Timer timer;
|
||||
|
||||
public TestEnvironment() {
|
||||
results = new ResultSet();
|
||||
modifiers = new Hashtable();
|
||||
modifiers = new LinkedHashMap();
|
||||
timer = Timer.getImpl();
|
||||
}
|
||||
|
||||
@@ -246,8 +246,8 @@ public class TestEnvironment implements Node.Visitor {
|
||||
modifiers.remove(o);
|
||||
}
|
||||
|
||||
public Hashtable getModifiers() {
|
||||
return (Hashtable) modifiers.clone();
|
||||
public LinkedHashMap getModifiers() {
|
||||
return (LinkedHashMap) modifiers.clone();
|
||||
}
|
||||
|
||||
public void record(Result result) {
|
||||
|
||||
@@ -1920,7 +1920,24 @@ void MachPrologNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
|
||||
|
||||
if (C->stub_function() == NULL) {
|
||||
BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
|
||||
bs->nmethod_entry_barrier(&_masm);
|
||||
if (BarrierSet::barrier_set()->barrier_set_nmethod() != NULL) {
|
||||
// Dummy labels for just measuring the code size
|
||||
Label dummy_slow_path;
|
||||
Label dummy_continuation;
|
||||
Label dummy_guard;
|
||||
Label* slow_path = &dummy_slow_path;
|
||||
Label* continuation = &dummy_continuation;
|
||||
Label* guard = &dummy_guard;
|
||||
if (!Compile::current()->output()->in_scratch_emit_size()) {
|
||||
// Use real labels from actual stub when not emitting code for the purpose of measuring its size
|
||||
C2EntryBarrierStub* stub = Compile::current()->output()->entry_barrier_table()->add_entry_barrier();
|
||||
slow_path = &stub->slow_path();
|
||||
continuation = &stub->continuation();
|
||||
guard = &stub->guard();
|
||||
}
|
||||
// In the C2 code, we move the non-hot part of nmethod entry barriers out-of-line to a stub.
|
||||
bs->nmethod_entry_barrier(&_masm, slow_path, continuation, guard);
|
||||
}
|
||||
}
|
||||
|
||||
if (VerifyStackAtCalls) {
|
||||
@@ -2432,6 +2449,19 @@ const bool Matcher::match_rule_supported(int opcode) {
|
||||
return ret_value; // Per default match rules are supported.
|
||||
}
|
||||
|
||||
const bool Matcher::match_rule_supported_superword(int opcode, int vlen, BasicType bt) {
|
||||
if (UseSVE == 0) {
|
||||
// ConvD2I and ConvL2F are not profitable to be vectorized on NEON, because no direct
|
||||
// NEON instructions support them. But the match rule support for them is profitable for
|
||||
// Vector API intrinsics.
|
||||
if ((opcode == Op_VectorCastD2X && bt == T_INT) ||
|
||||
(opcode == Op_VectorCastL2X && bt == T_FLOAT)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return match_rule_supported_vector(opcode, vlen, bt);
|
||||
}
|
||||
|
||||
// Identify extra cases that we might want to provide match rules for vector nodes and
|
||||
// other intrinsics guarded with vector length (vlen) and element type (bt).
|
||||
const bool Matcher::match_rule_supported_vector(int opcode, int vlen, BasicType bt) {
|
||||
@@ -2466,8 +2496,13 @@ const bool Matcher::match_rule_supported_vector(int opcode, int vlen, BasicType
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case Op_VectorMaskGen:
|
||||
case Op_LoadVectorGather:
|
||||
case Op_StoreVectorScatter:
|
||||
case Op_CompressV:
|
||||
case Op_CompressM:
|
||||
case Op_ExpandV:
|
||||
case Op_VectorLongToMask:
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
@@ -2485,6 +2520,11 @@ const bool Matcher::match_rule_supported_vector_masked(int opcode, int vlen, Bas
|
||||
masked_op_sve_supported(opcode, vlen, bt);
|
||||
}
|
||||
|
||||
const bool Matcher::vector_needs_partial_operations(Node* node, const TypeVect* vt) {
|
||||
// Only SVE has partial vector operations
|
||||
return (UseSVE > 0) && partial_op_sve_needed(node, vt);
|
||||
}
|
||||
|
||||
const RegMask* Matcher::predicate_reg_mask(void) {
|
||||
return &_PR_REG_mask;
|
||||
}
|
||||
@@ -2696,11 +2736,17 @@ bool size_fits_all_mem_uses(AddPNode* addp, int shift) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool can_combine_with_imm(Node* binary_node, Node* replicate_node) {
|
||||
if (UseSVE == 0 || !VectorNode::is_invariant_vector(replicate_node)){
|
||||
// Binary src (Replicate con)
|
||||
bool is_valid_sve_arith_imm_pattern(Node* n, Node* m) {
|
||||
if (n == NULL || m == NULL) {
|
||||
return false;
|
||||
}
|
||||
Node* imm_node = replicate_node->in(1);
|
||||
|
||||
if (UseSVE == 0 || !VectorNode::is_invariant_vector(m)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Node* imm_node = m->in(1);
|
||||
if (!imm_node->is_Con()) {
|
||||
return false;
|
||||
}
|
||||
@@ -2710,11 +2756,11 @@ bool can_combine_with_imm(Node* binary_node, Node* replicate_node) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (binary_node->Opcode()) {
|
||||
switch (n->Opcode()) {
|
||||
case Op_AndV:
|
||||
case Op_OrV:
|
||||
case Op_XorV: {
|
||||
Assembler::SIMD_RegVariant T = Assembler::elemType_to_regVariant(Matcher::vector_element_basic_type(binary_node));
|
||||
Assembler::SIMD_RegVariant T = Assembler::elemType_to_regVariant(Matcher::vector_element_basic_type(n));
|
||||
uint64_t value = t->isa_long() ? (uint64_t)imm_node->get_long() : (uint64_t)imm_node->get_int();
|
||||
return Assembler::operand_valid_for_sve_logical_immediate(Assembler::regVariant_to_elemBits(T), value);
|
||||
}
|
||||
@@ -2730,22 +2776,24 @@ bool can_combine_with_imm(Node* binary_node, Node* replicate_node) {
|
||||
}
|
||||
}
|
||||
|
||||
bool is_vector_arith_imm_pattern(Node* n, Node* m) {
|
||||
// (XorV src (Replicate m1))
|
||||
// (XorVMask src (MaskAll m1))
|
||||
bool is_vector_bitwise_not_pattern(Node* n, Node* m) {
|
||||
if (n != NULL && m != NULL) {
|
||||
return can_combine_with_imm(n, m);
|
||||
return (n->Opcode() == Op_XorV || n->Opcode() == Op_XorVMask) &&
|
||||
VectorNode::is_all_ones_vector(m);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Should the matcher clone input 'm' of node 'n'?
|
||||
bool Matcher::pd_clone_node(Node* n, Node* m, Matcher::MStack& mstack) {
|
||||
// ShiftV src (ShiftCntV con)
|
||||
// Binary src (Replicate con)
|
||||
if (is_vshift_con_pattern(n, m) || is_vector_arith_imm_pattern(n, m)) {
|
||||
if (is_vshift_con_pattern(n, m) ||
|
||||
is_vector_bitwise_not_pattern(n, m) ||
|
||||
is_valid_sve_arith_imm_pattern(n, m)) {
|
||||
mstack.push(m, Visit);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2790,10 +2838,6 @@ bool Matcher::pd_clone_address_expressions(AddPNode* m, Matcher::MStack& mstack,
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Parse::do_one_bytecode_targeted() {
|
||||
return false;
|
||||
}
|
||||
|
||||
#define MOV_VOLATILE(REG, BASE, INDEX, SCALE, DISP, SCRATCH, INSN) \
|
||||
C2_MacroAssembler _masm(&cbuf); \
|
||||
{ \
|
||||
@@ -3814,11 +3858,17 @@ encode %{
|
||||
ciEnv::current()->record_failure("CodeCache is full");
|
||||
return;
|
||||
}
|
||||
// Emit stub for static call
|
||||
address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
|
||||
if (stub == NULL) {
|
||||
ciEnv::current()->record_failure("CodeCache is full");
|
||||
return;
|
||||
if (CodeBuffer::supports_shared_stubs() && _method->can_be_statically_bound()) {
|
||||
// Calls of the same statically bound method can share
|
||||
// a stub to the interpreter.
|
||||
cbuf.shared_stub_to_interp_for(_method, cbuf.insts()->mark_off());
|
||||
} else {
|
||||
// Emit stub for static call
|
||||
address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
|
||||
if (stub == NULL) {
|
||||
ciEnv::current()->record_failure("CodeCache is full");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3926,7 +3976,7 @@ encode %{
|
||||
Register tmp = as_Register($tmp2$$reg);
|
||||
Label cont;
|
||||
Label object_has_monitor;
|
||||
Label cas_failed;
|
||||
Label no_count;
|
||||
|
||||
assert_different_registers(oop, box, tmp, disp_hdr);
|
||||
|
||||
@@ -3962,9 +4012,6 @@ encode %{
|
||||
// If the compare-and-exchange succeeded, then we found an unlocked
|
||||
// object, will have now locked it will continue at label cont
|
||||
|
||||
__ bind(cas_failed);
|
||||
// We did not see an unlocked object so try the fast recursive case.
|
||||
|
||||
// Check if the owner is self by comparing the value in the
|
||||
// markWord of object (disp_hdr) with the stack pointer.
|
||||
__ mov(rscratch1, sp);
|
||||
@@ -4009,6 +4056,11 @@ encode %{
|
||||
__ bind(cont);
|
||||
// flag == EQ indicates success
|
||||
// flag == NE indicates failure
|
||||
__ br(Assembler::NE, no_count);
|
||||
|
||||
__ increment(Address(rthread, JavaThread::held_monitor_count_offset()));
|
||||
|
||||
__ bind(no_count);
|
||||
%}
|
||||
|
||||
enc_class aarch64_enc_fast_unlock(iRegP object, iRegP box, iRegP tmp, iRegP tmp2) %{
|
||||
@@ -4019,6 +4071,7 @@ encode %{
|
||||
Register tmp = as_Register($tmp2$$reg);
|
||||
Label cont;
|
||||
Label object_has_monitor;
|
||||
Label no_count;
|
||||
|
||||
assert_different_registers(oop, box, tmp, disp_hdr);
|
||||
|
||||
@@ -4077,6 +4130,11 @@ encode %{
|
||||
__ bind(cont);
|
||||
// flag == EQ indicates success
|
||||
// flag == NE indicates failure
|
||||
__ br(Assembler::NE, no_count);
|
||||
|
||||
__ decrement(Address(rthread, JavaThread::held_monitor_count_offset()));
|
||||
|
||||
__ bind(no_count);
|
||||
%}
|
||||
|
||||
%}
|
||||
@@ -4441,6 +4499,16 @@ operand immI_65535()
|
||||
interface(CONST_INTER);
|
||||
%}
|
||||
|
||||
operand immI_positive()
|
||||
%{
|
||||
predicate(n->get_int() > 0);
|
||||
match(ConI);
|
||||
|
||||
op_cost(0);
|
||||
format %{ %}
|
||||
interface(CONST_INTER);
|
||||
%}
|
||||
|
||||
operand immL_255()
|
||||
%{
|
||||
predicate(n->get_long() == 255L);
|
||||
@@ -8662,7 +8730,6 @@ instruct countTrailingZerosL(iRegINoSp dst, iRegL src) %{
|
||||
//
|
||||
|
||||
instruct popCountI(iRegINoSp dst, iRegIorL2I src, vRegF tmp) %{
|
||||
predicate(UsePopCountInstruction);
|
||||
match(Set dst (PopCountI src));
|
||||
effect(TEMP tmp);
|
||||
ins_cost(INSN_COST * 13);
|
||||
@@ -8684,7 +8751,6 @@ instruct popCountI(iRegINoSp dst, iRegIorL2I src, vRegF tmp) %{
|
||||
%}
|
||||
|
||||
instruct popCountI_mem(iRegINoSp dst, memory4 mem, vRegF tmp) %{
|
||||
predicate(UsePopCountInstruction);
|
||||
match(Set dst (PopCountI (LoadI mem)));
|
||||
effect(TEMP tmp);
|
||||
ins_cost(INSN_COST * 13);
|
||||
@@ -8707,7 +8773,6 @@ instruct popCountI_mem(iRegINoSp dst, memory4 mem, vRegF tmp) %{
|
||||
|
||||
// Note: Long.bitCount(long) returns an int.
|
||||
instruct popCountL(iRegINoSp dst, iRegL src, vRegD tmp) %{
|
||||
predicate(UsePopCountInstruction);
|
||||
match(Set dst (PopCountL src));
|
||||
effect(TEMP tmp);
|
||||
ins_cost(INSN_COST * 13);
|
||||
@@ -8727,7 +8792,6 @@ instruct popCountL(iRegINoSp dst, iRegL src, vRegD tmp) %{
|
||||
%}
|
||||
|
||||
instruct popCountL_mem(iRegINoSp dst, memory8 mem, vRegD tmp) %{
|
||||
predicate(UsePopCountInstruction);
|
||||
match(Set dst (PopCountL (LoadL mem)));
|
||||
effect(TEMP tmp);
|
||||
ins_cost(INSN_COST * 13);
|
||||
@@ -11136,7 +11200,7 @@ instruct mulHiL_rReg(iRegLNoSp dst, iRegL src1, iRegL src2, rFlagsReg cr)
|
||||
match(Set dst (MulHiL src1 src2));
|
||||
|
||||
ins_cost(INSN_COST * 7);
|
||||
format %{ "smulh $dst, $src1, $src2, \t# mulhi" %}
|
||||
format %{ "smulh $dst, $src1, $src2\t# mulhi" %}
|
||||
|
||||
ins_encode %{
|
||||
__ smulh(as_Register($dst$$reg),
|
||||
@@ -11147,6 +11211,22 @@ instruct mulHiL_rReg(iRegLNoSp dst, iRegL src1, iRegL src2, rFlagsReg cr)
|
||||
ins_pipe(lmul_reg_reg);
|
||||
%}
|
||||
|
||||
instruct umulHiL_rReg(iRegLNoSp dst, iRegL src1, iRegL src2, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (UMulHiL src1 src2));
|
||||
|
||||
ins_cost(INSN_COST * 7);
|
||||
format %{ "umulh $dst, $src1, $src2\t# umulhi" %}
|
||||
|
||||
ins_encode %{
|
||||
__ umulh(as_Register($dst$$reg),
|
||||
as_Register($src1$$reg),
|
||||
as_Register($src2$$reg));
|
||||
%}
|
||||
|
||||
ins_pipe(lmul_reg_reg);
|
||||
%}
|
||||
|
||||
// Combined Integer Multiply & Add/Sub
|
||||
|
||||
instruct maddI(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2, iRegIorL2I src3) %{
|
||||
@@ -11345,7 +11425,7 @@ instruct modI(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
|
||||
|
||||
ins_cost(INSN_COST * 22);
|
||||
format %{ "sdivw rscratch1, $src1, $src2\n\t"
|
||||
"msubw($dst, rscratch1, $src2, $src1" %}
|
||||
"msubw $dst, rscratch1, $src2, $src1" %}
|
||||
|
||||
ins_encode(aarch64_enc_modw(dst, src1, src2));
|
||||
ins_pipe(idiv_reg_reg);
|
||||
@@ -11358,12 +11438,76 @@ instruct modL(iRegLNoSp dst, iRegL src1, iRegL src2) %{
|
||||
|
||||
ins_cost(INSN_COST * 38);
|
||||
format %{ "sdiv rscratch1, $src1, $src2\n"
|
||||
"msub($dst, rscratch1, $src2, $src1" %}
|
||||
"msub $dst, rscratch1, $src2, $src1" %}
|
||||
|
||||
ins_encode(aarch64_enc_mod(dst, src1, src2));
|
||||
ins_pipe(ldiv_reg_reg);
|
||||
%}
|
||||
|
||||
// Unsigned Integer Divide
|
||||
|
||||
instruct UdivI_reg_reg(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
|
||||
match(Set dst (UDivI src1 src2));
|
||||
|
||||
ins_cost(INSN_COST * 19);
|
||||
format %{ "udivw $dst, $src1, $src2" %}
|
||||
|
||||
ins_encode %{
|
||||
__ udivw($dst$$Register, $src1$$Register, $src2$$Register);
|
||||
%}
|
||||
|
||||
ins_pipe(idiv_reg_reg);
|
||||
%}
|
||||
|
||||
// Unsigned Long Divide
|
||||
|
||||
instruct UdivL_reg_reg(iRegLNoSp dst, iRegL src1, iRegL src2) %{
|
||||
match(Set dst (UDivL src1 src2));
|
||||
|
||||
ins_cost(INSN_COST * 35);
|
||||
format %{ "udiv $dst, $src1, $src2" %}
|
||||
|
||||
ins_encode %{
|
||||
__ udiv($dst$$Register, $src1$$Register, $src2$$Register);
|
||||
%}
|
||||
|
||||
ins_pipe(ldiv_reg_reg);
|
||||
%}
|
||||
|
||||
// Unsigned Integer Remainder
|
||||
|
||||
instruct UmodI_reg_reg(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
|
||||
match(Set dst (UModI src1 src2));
|
||||
|
||||
ins_cost(INSN_COST * 22);
|
||||
format %{ "udivw rscratch1, $src1, $src2\n\t"
|
||||
"msubw $dst, rscratch1, $src2, $src1" %}
|
||||
|
||||
ins_encode %{
|
||||
__ udivw(rscratch1, $src1$$Register, $src2$$Register);
|
||||
__ msubw($dst$$Register, rscratch1, $src2$$Register, $src1$$Register);
|
||||
%}
|
||||
|
||||
ins_pipe(idiv_reg_reg);
|
||||
%}
|
||||
|
||||
// Unsigned Long Remainder
|
||||
|
||||
instruct UModL_reg_reg(iRegLNoSp dst, iRegL src1, iRegL src2) %{
|
||||
match(Set dst (UModL src1 src2));
|
||||
|
||||
ins_cost(INSN_COST * 38);
|
||||
format %{ "udiv rscratch1, $src1, $src2\n"
|
||||
"msub $dst, rscratch1, $src2, $src1" %}
|
||||
|
||||
ins_encode %{
|
||||
__ udiv(rscratch1, $src1$$Register, $src2$$Register);
|
||||
__ msub($dst$$Register, rscratch1, $src2$$Register, $src1$$Register);
|
||||
%}
|
||||
|
||||
ins_pipe(ldiv_reg_reg);
|
||||
%}
|
||||
|
||||
// Integer Shifts
|
||||
|
||||
// Shift Left Register
|
||||
@@ -15493,10 +15637,10 @@ instruct overflowAddL_reg_imm(rFlagsReg cr, iRegL op1, immLAddSub op2)
|
||||
%{
|
||||
match(Set cr (OverflowAddL op1 op2));
|
||||
|
||||
format %{ "cmn $op1, $op2\t# overflow check long" %}
|
||||
format %{ "adds zr, $op1, $op2\t# overflow check long" %}
|
||||
ins_cost(INSN_COST);
|
||||
ins_encode %{
|
||||
__ cmn($op1$$Register, $op2$$constant);
|
||||
__ adds(zr, $op1$$Register, $op2$$constant);
|
||||
%}
|
||||
|
||||
ins_pipe(icmp_reg_imm);
|
||||
|
||||
@@ -4721,7 +4721,7 @@ instruct vsll16B_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsra8B_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsra8B_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate((n->as_Vector()->length() == 4 || n->as_Vector()->length() == 8) &&
|
||||
assert_not_var_shift(n));
|
||||
match(Set dst (RShiftVB src (RShiftCntV shift)));
|
||||
@@ -4736,7 +4736,7 @@ instruct vsra8B_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsra16B_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsra16B_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 16 && assert_not_var_shift(n));
|
||||
match(Set dst (RShiftVB src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -4750,7 +4750,7 @@ instruct vsra16B_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsrl8B_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsrl8B_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate((n->as_Vector()->length() == 4 || n->as_Vector()->length() == 8) &&
|
||||
assert_not_var_shift(n));
|
||||
match(Set dst (URShiftVB src (RShiftCntV shift)));
|
||||
@@ -4770,7 +4770,7 @@ instruct vsrl8B_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsrl16B_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsrl16B_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 16 && assert_not_var_shift(n));
|
||||
match(Set dst (URShiftVB src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -4978,7 +4978,7 @@ instruct vsll8S_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsra4S_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsra4S_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate((n->as_Vector()->length() == 2 || n->as_Vector()->length() == 4) &&
|
||||
assert_not_var_shift(n));
|
||||
match(Set dst (RShiftVS src (RShiftCntV shift)));
|
||||
@@ -4993,7 +4993,7 @@ instruct vsra4S_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsra8S_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsra8S_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 8 && assert_not_var_shift(n));
|
||||
match(Set dst (RShiftVS src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5007,7 +5007,7 @@ instruct vsra8S_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsrl4S_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsrl4S_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate((n->as_Vector()->length() == 2 || n->as_Vector()->length() == 4) &&
|
||||
assert_not_var_shift(n));
|
||||
match(Set dst (URShiftVS src (RShiftCntV shift)));
|
||||
@@ -5027,7 +5027,7 @@ instruct vsrl4S_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsrl8S_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsrl8S_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 8 && assert_not_var_shift(n));
|
||||
match(Set dst (URShiftVS src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5218,7 +5218,7 @@ instruct vsll4I_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsra2I_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsra2I_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 2 && assert_not_var_shift(n));
|
||||
match(Set dst (RShiftVI src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5231,7 +5231,7 @@ instruct vsra2I_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsra4I_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsra4I_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 4 && assert_not_var_shift(n));
|
||||
match(Set dst (RShiftVI src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5244,7 +5244,7 @@ instruct vsra4I_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsrl2I_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsrl2I_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 2 && assert_not_var_shift(n));
|
||||
match(Set dst (URShiftVI src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5257,7 +5257,7 @@ instruct vsrl2I_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsrl4I_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsrl4I_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 4 && assert_not_var_shift(n));
|
||||
match(Set dst (URShiftVI src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5356,7 +5356,7 @@ instruct vsll2L_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsra2L_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsra2L_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 2 && assert_not_var_shift(n));
|
||||
match(Set dst (RShiftVL src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5369,7 +5369,7 @@ instruct vsra2L_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsrl2L_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsrl2L_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 2 && assert_not_var_shift(n));
|
||||
match(Set dst (URShiftVL src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5382,7 +5382,7 @@ instruct vsrl2L_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsraa8B_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsraa8B_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 8);
|
||||
match(Set dst (AddVB dst (RShiftVB src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5396,7 +5396,7 @@ instruct vsraa8B_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsraa16B_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsraa16B_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 16);
|
||||
match(Set dst (AddVB dst (RShiftVB src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5410,7 +5410,7 @@ instruct vsraa16B_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsraa4S_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsraa4S_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 4);
|
||||
match(Set dst (AddVS dst (RShiftVS src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5424,7 +5424,7 @@ instruct vsraa4S_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsraa8S_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsraa8S_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 8);
|
||||
match(Set dst (AddVS dst (RShiftVS src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5438,7 +5438,7 @@ instruct vsraa8S_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsraa2I_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsraa2I_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 2);
|
||||
match(Set dst (AddVI dst (RShiftVI src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5451,7 +5451,7 @@ instruct vsraa2I_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsraa4I_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsraa4I_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 4);
|
||||
match(Set dst (AddVI dst (RShiftVI src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5464,7 +5464,7 @@ instruct vsraa4I_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsraa2L_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsraa2L_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 2);
|
||||
match(Set dst (AddVL dst (RShiftVL src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5477,7 +5477,7 @@ instruct vsraa2L_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsrla8B_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsrla8B_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 8);
|
||||
match(Set dst (AddVB dst (URShiftVB src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5492,7 +5492,7 @@ instruct vsrla8B_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsrla16B_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsrla16B_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 16);
|
||||
match(Set dst (AddVB dst (URShiftVB src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5507,7 +5507,7 @@ instruct vsrla16B_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsrla4S_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsrla4S_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 4);
|
||||
match(Set dst (AddVS dst (URShiftVS src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5522,7 +5522,7 @@ instruct vsrla4S_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsrla8S_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsrla8S_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 8);
|
||||
match(Set dst (AddVS dst (URShiftVS src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5537,7 +5537,7 @@ instruct vsrla8S_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsrla2I_imm(vecD dst, vecD src, immI shift) %{
|
||||
instruct vsrla2I_imm(vecD dst, vecD src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 2);
|
||||
match(Set dst (AddVI dst (URShiftVI src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5550,7 +5550,7 @@ instruct vsrla2I_imm(vecD dst, vecD src, immI shift) %{
|
||||
ins_pipe(vshift64_imm);
|
||||
%}
|
||||
|
||||
instruct vsrla4I_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsrla4I_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 4);
|
||||
match(Set dst (AddVI dst (URShiftVI src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5563,7 +5563,7 @@ instruct vsrla4I_imm(vecX dst, vecX src, immI shift) %{
|
||||
ins_pipe(vshift128_imm);
|
||||
%}
|
||||
|
||||
instruct vsrla2L_imm(vecX dst, vecX src, immI shift) %{
|
||||
instruct vsrla2L_imm(vecX dst, vecX src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == 2);
|
||||
match(Set dst (AddVL dst (URShiftVL src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -5683,14 +5683,58 @@ instruct vround2D_reg(vecX dst, vecX src, immI rmode) %{
|
||||
ins_pipe(vdop_fp128);
|
||||
%}
|
||||
|
||||
instruct vpopcount4I(vecX dst, vecX src) %{
|
||||
predicate(UsePopCountInstruction && n->as_Vector()->length() == 4);
|
||||
instruct vpopcountID(vecD dst, vecD src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() < 16);
|
||||
match(Set dst (PopCountVI src));
|
||||
format %{
|
||||
"cnt $dst, $src\t# vector (16B)\n\t"
|
||||
"uaddlp $dst, $dst\t# vector (16B)\n\t"
|
||||
"uaddlp $dst, $dst\t# vector (8H)"
|
||||
ins_cost(3 * INSN_COST);
|
||||
format %{ "vpopcountI $dst, $src\t# vector (8B/4H/2S)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
__ cnt(as_FloatRegister($dst$$reg), __ T8B,
|
||||
as_FloatRegister($src$$reg));
|
||||
if (bt == T_SHORT || bt == T_INT) {
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T8B,
|
||||
as_FloatRegister($dst$$reg));
|
||||
if (bt == T_INT) {
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T4H,
|
||||
as_FloatRegister($dst$$reg));
|
||||
}
|
||||
}
|
||||
%}
|
||||
ins_pipe(pipe_class_default);
|
||||
%}
|
||||
|
||||
instruct vpopcountIX(vecX dst, vecX src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 16);
|
||||
match(Set dst (PopCountVI src));
|
||||
ins_cost(3 * INSN_COST);
|
||||
format %{ "vpopcountI $dst, $src\t# vector (16B/8H/4S)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
__ cnt(as_FloatRegister($dst$$reg), __ T16B,
|
||||
as_FloatRegister($src$$reg));
|
||||
if (bt == T_SHORT || bt == T_INT) {
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T16B,
|
||||
as_FloatRegister($dst$$reg));
|
||||
if (bt == T_INT) {
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T8H,
|
||||
as_FloatRegister($dst$$reg));
|
||||
}
|
||||
}
|
||||
%}
|
||||
ins_pipe(pipe_class_default);
|
||||
%}
|
||||
|
||||
// If the PopCountVL is generated by auto-vectorization, the dst basic
|
||||
// type is T_INT. And once we have unified the type definition for
|
||||
// Vector API and auto-vectorization, this rule can be merged with
|
||||
// "vpopcountLX" rule.
|
||||
instruct vpopcountLD(vecD dst, vecX src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() < 16 &&
|
||||
n->bottom_type()->is_vect()->element_basic_type() == T_INT);
|
||||
match(Set dst (PopCountVL src));
|
||||
ins_cost(5 * INSN_COST);
|
||||
format %{ "vpopcountL $dst, $src\t# vector (2S)" %}
|
||||
ins_encode %{
|
||||
__ cnt(as_FloatRegister($dst$$reg), __ T16B,
|
||||
as_FloatRegister($src$$reg));
|
||||
@@ -5698,24 +5742,28 @@ instruct vpopcount4I(vecX dst, vecX src) %{
|
||||
as_FloatRegister($dst$$reg));
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T8H,
|
||||
as_FloatRegister($dst$$reg));
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T4S,
|
||||
as_FloatRegister($dst$$reg));
|
||||
__ xtn(as_FloatRegister($dst$$reg), __ T2S,
|
||||
as_FloatRegister($dst$$reg), __ T2D);
|
||||
%}
|
||||
ins_pipe(pipe_class_default);
|
||||
%}
|
||||
|
||||
instruct vpopcount2I(vecD dst, vecD src) %{
|
||||
predicate(UsePopCountInstruction && n->as_Vector()->length() == 2);
|
||||
match(Set dst (PopCountVI src));
|
||||
format %{
|
||||
"cnt $dst, $src\t# vector (8B)\n\t"
|
||||
"uaddlp $dst, $dst\t# vector (8B)\n\t"
|
||||
"uaddlp $dst, $dst\t# vector (4H)"
|
||||
%}
|
||||
instruct vpopcountLX(vecX dst, vecX src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 16 &&
|
||||
n->bottom_type()->is_vect()->element_basic_type() == T_LONG);
|
||||
match(Set dst (PopCountVL src));
|
||||
ins_cost(4 * INSN_COST);
|
||||
format %{ "vpopcountL $dst, $src\t# vector (2D)" %}
|
||||
ins_encode %{
|
||||
__ cnt(as_FloatRegister($dst$$reg), __ T8B,
|
||||
__ cnt(as_FloatRegister($dst$$reg), __ T16B,
|
||||
as_FloatRegister($src$$reg));
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T8B,
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T16B,
|
||||
as_FloatRegister($dst$$reg));
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T4H,
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T8H,
|
||||
as_FloatRegister($dst$$reg));
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T4S,
|
||||
as_FloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(pipe_class_default);
|
||||
@@ -5921,3 +5969,131 @@ instruct vmask_tolong16B(iRegLNoSp dst, vecX src) %{
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
//------------------------- CountLeadingZerosV -----------------------------
|
||||
|
||||
instruct countLeadingZerosVD(vecD dst, vecD src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 8);
|
||||
match(Set dst (CountLeadingZerosV src));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "countLeadingZerosV $dst, $src\t# vector (8B/4H/2S)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
Assembler::SIMD_Arrangement size = __ esize2arrangement((unsigned)type2aelembytes(bt), false);
|
||||
__ clz(as_FloatRegister($dst$$reg), size, as_FloatRegister($src$$reg));
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct countLeadingZerosVX(vecX dst, vecX src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 16);
|
||||
match(Set dst (CountLeadingZerosV src));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "countLeadingZerosV $dst, $src\t# vector (16B/8H/4S/2D)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
Assembler::SIMD_Arrangement size = __ esize2arrangement((unsigned)type2aelembytes(bt), true);
|
||||
if (bt != T_LONG) {
|
||||
__ clz(as_FloatRegister($dst$$reg), size, as_FloatRegister($src$$reg));
|
||||
} else {
|
||||
__ umov(rscratch1, as_FloatRegister($src$$reg), __ D, 0);
|
||||
__ clz(rscratch1, rscratch1);
|
||||
__ mov(as_FloatRegister($dst$$reg), __ D, 0, rscratch1);
|
||||
__ umov(rscratch1, as_FloatRegister($src$$reg), __ D, 1);
|
||||
__ clz(rscratch1, rscratch1);
|
||||
__ mov(as_FloatRegister($dst$$reg), __ D, 1, rscratch1);
|
||||
}
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
//------------------------- CountTrailingZerosV ----------------------------
|
||||
|
||||
instruct countTrailingZerosVD(vecD dst, vecD src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 8);
|
||||
match(Set dst (CountTrailingZerosV src));
|
||||
ins_cost(3 * INSN_COST);
|
||||
format %{ "countTrailingZerosV $dst, $src\t# vector (8B/4H/2S)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
Assembler::SIMD_Arrangement size = __ esize2arrangement((unsigned)type2aelembytes(bt), false);
|
||||
__ neon_reverse_bits(as_FloatRegister($dst$$reg), as_FloatRegister($src$$reg), bt, false);
|
||||
__ clz(as_FloatRegister($dst$$reg), size, as_FloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct countTrailingZerosVX(vecX dst, vecX src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 16);
|
||||
match(Set dst (CountTrailingZerosV src));
|
||||
ins_cost(3 * INSN_COST);
|
||||
format %{ "countTrailingZerosV $dst, $src\t# vector (16B/8H/4S/2D)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
Assembler::SIMD_Arrangement size = __ esize2arrangement((unsigned)type2aelembytes(bt), true);
|
||||
__ neon_reverse_bits(as_FloatRegister($dst$$reg), as_FloatRegister($src$$reg), bt, true);
|
||||
if (bt != T_LONG) {
|
||||
__ clz(as_FloatRegister($dst$$reg), size, as_FloatRegister($dst$$reg));
|
||||
} else {
|
||||
__ umov(rscratch1, as_FloatRegister($dst$$reg), __ D, 0);
|
||||
__ clz(rscratch1, rscratch1);
|
||||
__ mov(as_FloatRegister($dst$$reg), __ D, 0, rscratch1);
|
||||
__ umov(rscratch1, as_FloatRegister($dst$$reg), __ D, 1);
|
||||
__ clz(rscratch1, rscratch1);
|
||||
__ mov(as_FloatRegister($dst$$reg), __ D, 1, rscratch1);
|
||||
}
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
//------------------------------ ReverseV -----------------------------------
|
||||
|
||||
instruct vreverseD(vecD dst, vecD src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 8);
|
||||
match(Set dst (ReverseV src));
|
||||
ins_cost(2 * INSN_COST);
|
||||
format %{ "ReverseV $dst, $src\t# vector (D)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
__ neon_reverse_bits(as_FloatRegister($dst$$reg), as_FloatRegister($src$$reg), bt, false);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct vreverseX(vecX dst, vecX src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 16);
|
||||
match(Set dst (ReverseV src));
|
||||
ins_cost(2 * INSN_COST);
|
||||
format %{ "ReverseV $dst, $src\t# vector (X)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
__ neon_reverse_bits(as_FloatRegister($dst$$reg), as_FloatRegister($src$$reg), bt, true);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
//---------------------------- ReverseBytesV --------------------------------
|
||||
|
||||
instruct vreverseBytesD(vecD dst, vecD src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 8);
|
||||
match(Set dst (ReverseBytesV src));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "ReverseBytesV $dst, $src\t# vector (D)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
__ neon_reverse_bytes(as_FloatRegister($dst$$reg), as_FloatRegister($src$$reg), bt, false);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
instruct vreverseBytesX(vecX dst, vecX src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 16);
|
||||
match(Set dst (ReverseBytesV src));
|
||||
ins_cost(INSN_COST);
|
||||
format %{ "ReverseBytesV $dst, $src\t# vector (X)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
__ neon_reverse_bytes(as_FloatRegister($dst$$reg), as_FloatRegister($src$$reg), bt, true);
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
@@ -2199,7 +2199,7 @@ instruct vsll$1$2_imm`'(vec$4 dst, vec$4 src, immI shift) %{
|
||||
%}')dnl
|
||||
dnl
|
||||
define(`VSRA_IMM', `
|
||||
instruct vsra$1$2_imm`'(vec$4 dst, vec$4 src, immI shift) %{
|
||||
instruct vsra$1$2_imm`'(vec$4 dst, vec$4 src, immI_positive shift) %{
|
||||
PREDICATE(`$1$2', $1, assert_not_var_shift(n))
|
||||
match(Set dst (RShiftV$2 src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -2221,7 +2221,7 @@ instruct vsra$1$2_imm`'(vec$4 dst, vec$4 src, immI shift) %{
|
||||
%}')dnl
|
||||
dnl
|
||||
define(`VSRL_IMM', `
|
||||
instruct vsrl$1$2_imm`'(vec$4 dst, vec$4 src, immI shift) %{
|
||||
instruct vsrl$1$2_imm`'(vec$4 dst, vec$4 src, immI_positive shift) %{
|
||||
PREDICATE(`$1$2', $1, assert_not_var_shift(n))
|
||||
match(Set dst (URShiftV$2 src (RShiftCntV shift)));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -2253,7 +2253,7 @@ instruct vsrl$1$2_imm`'(vec$4 dst, vec$4 src, immI shift) %{
|
||||
%}')dnl
|
||||
dnl
|
||||
define(`VSRLA_IMM', `
|
||||
instruct vsrla$1$2_imm`'(vec$4 dst, vec$4 src, immI shift) %{
|
||||
instruct vsrla$1$2_imm`'(vec$4 dst, vec$4 src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == $1);
|
||||
match(Set dst (AddV$2 dst (URShiftV$2 src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -2277,7 +2277,7 @@ instruct vsrla$1$2_imm`'(vec$4 dst, vec$4 src, immI shift) %{
|
||||
%}')dnl
|
||||
dnl
|
||||
define(`VSRAA_IMM', `
|
||||
instruct vsraa$1$2_imm`'(vec$4 dst, vec$4 src, immI shift) %{
|
||||
instruct vsraa$1$2_imm`'(vec$4 dst, vec$4 src, immI_positive shift) %{
|
||||
predicate(n->as_Vector()->length() == $1);
|
||||
match(Set dst (AddV$2 dst (RShiftV$2 src (RShiftCntV shift))));
|
||||
ins_cost(INSN_COST);
|
||||
@@ -2445,28 +2445,50 @@ instruct vround2D_reg(vecX dst, vecX src, immI rmode) %{
|
||||
ins_pipe(vdop_fp128);
|
||||
%}
|
||||
dnl
|
||||
define(`VPOPCOUNT', `
|
||||
instruct vpopcount$1$2`'(vec$5 dst, vec$5 src) %{
|
||||
predicate(UsePopCountInstruction && n->as_Vector()->length() == $1);
|
||||
match(Set dst (PopCountVI src));
|
||||
format %{
|
||||
"cnt $dst, $src\t# vector ($3B)\n\t"
|
||||
"uaddlp $dst, $dst\t# vector ($3B)\n\t"
|
||||
"uaddlp $dst, $dst\t# vector ($4H)"
|
||||
%}
|
||||
ins_encode %{
|
||||
__ cnt(as_FloatRegister($dst$$reg), __ T$3B,
|
||||
as_FloatRegister($src$$reg));
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T$3B,
|
||||
define(`VPOPCOUNT', `dnl
|
||||
ifelse($1$2, `LD', `
|
||||
// If the PopCountVL is generated by auto-vectorization, the dst basic
|
||||
// type is T_INT. And once we have unified the type definition for
|
||||
// Vector API and auto-vectorization, this rule can be merged with
|
||||
// "vpopcountLX" rule.', `')
|
||||
instruct vpopcount$1$2`'(vec$2 dst, vec$3 src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() $4 16`'ifelse($1$2, `LD', ` &&
|
||||
n->bottom_type()->is_vect()->element_basic_type() == T_INT', $1$2, `LX', ` &&
|
||||
n->bottom_type()->is_vect()->element_basic_type() == T_LONG', `'));
|
||||
match(Set dst (PopCountV$1 src));
|
||||
ins_cost($5 * INSN_COST);
|
||||
format %{ "vpopcount$1 $dst, $src\t# vector ($6)" %}
|
||||
ins_encode %{dnl
|
||||
ifelse($1, `I', `
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);', `')
|
||||
__ cnt(as_FloatRegister($dst$$reg), __ T`'ifelse($3, D, 8, 16)B,
|
||||
as_FloatRegister($src$$reg));dnl
|
||||
ifelse($1, `L', `
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T16B,
|
||||
as_FloatRegister($dst$$reg));
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T$4H,
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T8H,
|
||||
as_FloatRegister($dst$$reg));
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T4S,
|
||||
as_FloatRegister($dst$$reg));', `
|
||||
if (bt == T_SHORT || bt == T_INT) {
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T`'ifelse($2, D, 8, 16)B,
|
||||
as_FloatRegister($dst$$reg));
|
||||
if (bt == T_INT) {
|
||||
__ uaddlp(as_FloatRegister($dst$$reg), __ T`'ifelse($2, D, 4, 8)H,
|
||||
as_FloatRegister($dst$$reg));
|
||||
}
|
||||
}')dnl
|
||||
ifelse($1$2, `LD', `
|
||||
__ xtn(as_FloatRegister($dst$$reg), __ T2S,
|
||||
as_FloatRegister($dst$$reg), __ T2D);', `')
|
||||
%}
|
||||
ins_pipe(pipe_class_default);
|
||||
%}')dnl
|
||||
dnl $1 $2 $3 $4 $5
|
||||
VPOPCOUNT(4, I, 16, 8, X)
|
||||
VPOPCOUNT(2, I, 8, 4, D)
|
||||
dnl $1 $2 $3 $4 $5 $6
|
||||
VPOPCOUNT(I, D, D, <, 3, 8B/4H/2S)
|
||||
VPOPCOUNT(I, X, X, ==, 3, 16B/8H/4S)
|
||||
VPOPCOUNT(L, D, X, <, 5, 2S)
|
||||
VPOPCOUNT(L, X, X, ==, 4, 2D)
|
||||
dnl
|
||||
dnl VMASK_TRUECOUNT($1, $2 )
|
||||
dnl VMASK_TRUECOUNT(suffix, reg)
|
||||
@@ -2647,3 +2669,81 @@ instruct vmask_tolong16B(iRegLNoSp dst, vecX src) %{
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}
|
||||
|
||||
dnl
|
||||
dnl CLTZ_D($1 )
|
||||
dnl CLTZ_D(op_name)
|
||||
define(`CLTZ_D', `
|
||||
instruct count$1D(vecD dst, vecD src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 8);
|
||||
match(Set dst (Count$1 src));
|
||||
ins_cost(ifelse($1, `TrailingZerosV', `3 * ', `')INSN_COST);
|
||||
format %{ "count$1 $dst, $src\t# vector (8B/4H/2S)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
Assembler::SIMD_Arrangement size = __ esize2arrangement((unsigned)type2aelembytes(bt), false);dnl
|
||||
ifelse($1, `TrailingZerosV', `
|
||||
__ neon_reverse_bits(as_FloatRegister($dst$$reg), as_FloatRegister($src$$reg), bt, false);', `')
|
||||
__ clz(as_FloatRegister($dst$$reg), size, as_FloatRegister($ifelse($1, `TrailingZerosV', dst, src)$$reg));
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}')dnl
|
||||
dnl
|
||||
dnl CLTZ_X($1 )
|
||||
dnl CLTZ_X(op_name)
|
||||
define(`CLTZ_X', `
|
||||
instruct count$1X(vecX dst, vecX src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == 16);
|
||||
match(Set dst (Count$1 src));
|
||||
ins_cost(ifelse($1, `TrailingZerosV', `3 * ', `')INSN_COST);
|
||||
format %{ "count$1 $dst, $src\t# vector (16B/8H/4S/2D)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
Assembler::SIMD_Arrangement size = __ esize2arrangement((unsigned)type2aelembytes(bt), true);dnl
|
||||
ifelse($1, `TrailingZerosV', `
|
||||
__ neon_reverse_bits(as_FloatRegister($dst$$reg), as_FloatRegister($src$$reg), bt, true);', `')
|
||||
if (bt != T_LONG) {
|
||||
__ clz(as_FloatRegister($dst$$reg), size, as_FloatRegister($ifelse($1, `TrailingZerosV', dst, src)$$reg));
|
||||
} else {
|
||||
__ umov(rscratch1, as_FloatRegister($ifelse($1, `TrailingZerosV', dst, src)$$reg), __ D, 0);
|
||||
__ clz(rscratch1, rscratch1);
|
||||
__ mov(as_FloatRegister($dst$$reg), __ D, 0, rscratch1);
|
||||
__ umov(rscratch1, as_FloatRegister($ifelse($1, `TrailingZerosV', dst, src)$$reg), __ D, 1);
|
||||
__ clz(rscratch1, rscratch1);
|
||||
__ mov(as_FloatRegister($dst$$reg), __ D, 1, rscratch1);
|
||||
}
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}')dnl
|
||||
dnl
|
||||
//------------------------- CountLeadingZerosV -----------------------------
|
||||
CLTZ_D(LeadingZerosV)
|
||||
CLTZ_X(LeadingZerosV)
|
||||
|
||||
//------------------------- CountTrailingZerosV ----------------------------
|
||||
CLTZ_D(TrailingZerosV)
|
||||
CLTZ_X(TrailingZerosV)
|
||||
|
||||
dnl
|
||||
dnl REVERSE($1, $2, $3, $4 )
|
||||
dnl REVERSE(insn_name, op_name, type, insn)
|
||||
define(`REVERSE', `
|
||||
instruct $1(vec$3 dst, vec$3 src) %{
|
||||
predicate(n->as_Vector()->length_in_bytes() == ifelse($3, D, 8, 16));
|
||||
match(Set dst ($2 src));
|
||||
ins_cost(ifelse($2, `ReverseV', `2 * ', `')INSN_COST);
|
||||
format %{ "$2 $dst, $src\t# vector ($3)" %}
|
||||
ins_encode %{
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
__ $4(as_FloatRegister($dst$$reg), as_FloatRegister($src$$reg), bt, ifelse($3, D, false, true));
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
%}')dnl
|
||||
dnl
|
||||
//------------------------------ ReverseV -----------------------------------
|
||||
REVERSE(vreverseD, ReverseV, D, neon_reverse_bits)
|
||||
REVERSE(vreverseX, ReverseV, X, neon_reverse_bits)
|
||||
|
||||
//---------------------------- ReverseBytesV --------------------------------
|
||||
REVERSE(vreverseBytesD, ReverseBytesV, D, neon_reverse_bytes)
|
||||
REVERSE(vreverseBytesX, ReverseBytesV, X, neon_reverse_bytes)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -90,7 +90,7 @@ int AbstractInterpreter::size_activation(int max_stack,
|
||||
// for the callee's params we only need to account for the extra
|
||||
// locals.
|
||||
int size = overhead +
|
||||
(callee_locals - callee_params) +
|
||||
(callee_locals - callee_params) * Interpreter::stackElementWords +
|
||||
monitors * frame::interpreter_frame_monitor_size() +
|
||||
// On the top frame, at all times SP <= ESP, and SP is
|
||||
// 16-aligned. We ensure this by adjusting SP on method
|
||||
@@ -135,7 +135,7 @@ void AbstractInterpreter::layout_activation(Method* method,
|
||||
// NOTE the difference in using sender_sp and
|
||||
// interpreter_frame_sender_sp interpreter_frame_sender_sp is
|
||||
// the original sp of the caller (the unextended_sp) and
|
||||
// sender_sp is fp+8/16 (32bit/64bit) XXX
|
||||
// sender_sp is fp+16
|
||||
//
|
||||
// The interpreted method entry on AArch64 aligns SP to 16 bytes
|
||||
// before generating the fixed part of the activation frame. So there
|
||||
@@ -165,6 +165,19 @@ void AbstractInterpreter::layout_activation(Method* method,
|
||||
popframe_extra_args;
|
||||
interpreter_frame->interpreter_frame_set_last_sp(esp);
|
||||
|
||||
// We have to add extra reserved slots to max_stack. There are 3 users of the extra slots,
|
||||
// none of which are at the same time, so we just need to make sure there is enough room
|
||||
// for the biggest user:
|
||||
// -reserved slot for exception handler
|
||||
// -reserved slots for JSR292. Method::extra_stack_entries() is the size.
|
||||
// -reserved slots for TraceBytecodes
|
||||
int max_stack = method->constMethod()->max_stack() + MAX2(3, Method::extra_stack_entries());
|
||||
intptr_t* extended_sp = (intptr_t*) monbot -
|
||||
(max_stack * Interpreter::stackElementWords) -
|
||||
popframe_extra_args;
|
||||
extended_sp = align_down(extended_sp, StackAlignmentInBytes);
|
||||
interpreter_frame->interpreter_frame_set_extended_sp(extended_sp);
|
||||
|
||||
// All frames but the initial (oldest) interpreter frame we fill in have
|
||||
// a value for sender_sp that allows walking the stack but isn't
|
||||
// truly correct. Correct the value here.
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "memory/resourceArea.hpp"
|
||||
|
||||
#ifndef PRODUCT
|
||||
const uintptr_t Assembler::asm_bp = 0x00007fffee09ac88;
|
||||
const uintptr_t Assembler::asm_bp = 0x0000ffffac221240;
|
||||
#endif
|
||||
|
||||
static float unpack(unsigned value);
|
||||
@@ -155,10 +155,6 @@ void Address::lea(MacroAssembler *as, Register r) const {
|
||||
}
|
||||
}
|
||||
|
||||
void Assembler::adrp(Register reg1, const Address &dest, uint64_t &byte_offset) {
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
|
||||
#undef __
|
||||
|
||||
#define starti Instruction_aarch64 current_insn(this);
|
||||
@@ -189,7 +185,7 @@ void Assembler::adrp(Register reg1, const Address &dest, uint64_t &byte_offset)
|
||||
offset >>= 2;
|
||||
starti;
|
||||
f(1, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5);
|
||||
rf(Rd, 0);
|
||||
zrf(Rd, 0);
|
||||
}
|
||||
|
||||
// An "all-purpose" add/subtract immediate, per ARM documentation:
|
||||
|
||||
@@ -142,16 +142,18 @@ REGISTER_DECLARATION(Register, rthread, r28);
|
||||
REGISTER_DECLARATION(Register, rheapbase, r27);
|
||||
// constant pool cache
|
||||
REGISTER_DECLARATION(Register, rcpool, r26);
|
||||
// monitors allocated on stack
|
||||
REGISTER_DECLARATION(Register, rmonitors, r25);
|
||||
// r25 is a callee-saved temp
|
||||
// REGISTER_DECLARATION(Register, unused, r25);
|
||||
// locals on stack
|
||||
REGISTER_DECLARATION(Register, rlocals, r24);
|
||||
// bytecode pointer
|
||||
REGISTER_DECLARATION(Register, rbcp, r22);
|
||||
// Dispatch table base
|
||||
REGISTER_DECLARATION(Register, rdispatch, r21);
|
||||
// Java stack pointer
|
||||
// Java expression stack pointer
|
||||
REGISTER_DECLARATION(Register, esp, r20);
|
||||
// Sender's SP while in interpreter
|
||||
REGISTER_DECLARATION(Register, r19_sender_sp, r19);
|
||||
|
||||
// Preserved predicate register with all elements set TRUE.
|
||||
REGISTER_DECLARATION(PRegister, ptrue, p7);
|
||||
@@ -218,7 +220,7 @@ public:
|
||||
return extend(uval, msb - lsb);
|
||||
}
|
||||
|
||||
static void patch(address a, int msb, int lsb, uint64_t val) {
|
||||
static ALWAYSINLINE void patch(address a, int msb, int lsb, uint64_t val) {
|
||||
int nbits = msb - lsb + 1;
|
||||
guarantee(val < (1ULL << nbits), "Field too big for insn");
|
||||
assert_cond(msb >= lsb);
|
||||
@@ -716,7 +718,7 @@ public:
|
||||
wrap_label(Rd, L, &Assembler::_adrp);
|
||||
}
|
||||
|
||||
void adrp(Register Rd, const Address &dest, uint64_t &offset);
|
||||
void adrp(Register Rd, const Address &dest, uint64_t &offset) = delete;
|
||||
|
||||
#undef INSN
|
||||
|
||||
@@ -768,7 +770,7 @@ public:
|
||||
INSN(andw, 0b000, true);
|
||||
INSN(orrw, 0b001, true);
|
||||
INSN(eorw, 0b010, true);
|
||||
INSN(andr, 0b100, false);
|
||||
INSN(andr, 0b100, false);
|
||||
INSN(orr, 0b101, false);
|
||||
INSN(eor, 0b110, false);
|
||||
|
||||
@@ -794,15 +796,15 @@ public:
|
||||
starti; \
|
||||
f(opcode, 31, 29), f(0b100101, 28, 23), f(shift/16, 22, 21), \
|
||||
f(imm, 20, 5); \
|
||||
rf(Rd, 0); \
|
||||
zrf(Rd, 0); \
|
||||
}
|
||||
|
||||
INSN(movnw, 0b000);
|
||||
INSN(movzw, 0b010);
|
||||
INSN(movkw, 0b011);
|
||||
INSN(movn, 0b100);
|
||||
INSN(movz, 0b110);
|
||||
INSN(movk, 0b111);
|
||||
INSN(movn, 0b100);
|
||||
INSN(movz, 0b110);
|
||||
INSN(movk, 0b111);
|
||||
|
||||
#undef INSN
|
||||
|
||||
@@ -1104,12 +1106,12 @@ public:
|
||||
rf(RM, 0);
|
||||
}
|
||||
|
||||
#define INSN(NAME, opc) \
|
||||
void NAME(Register RN) { \
|
||||
branch_reg(opc, 0, 0, RN, r0); \
|
||||
#define INSN(NAME, opc) \
|
||||
void NAME(Register RN) { \
|
||||
branch_reg(opc, 0, 0, RN, r0); \
|
||||
}
|
||||
|
||||
INSN(br, 0b0000);
|
||||
INSN(br, 0b0000);
|
||||
INSN(blr, 0b0001);
|
||||
INSN(ret, 0b0010);
|
||||
|
||||
@@ -1117,9 +1119,9 @@ public:
|
||||
|
||||
#undef INSN
|
||||
|
||||
#define INSN(NAME, opc) \
|
||||
void NAME() { \
|
||||
branch_reg(opc, 0, 0, dummy_reg, r0); \
|
||||
#define INSN(NAME, opc) \
|
||||
void NAME() { \
|
||||
branch_reg(opc, 0, 0, dummy_reg, r0); \
|
||||
}
|
||||
|
||||
INSN(eret, 0b0100);
|
||||
@@ -1208,44 +1210,46 @@ public:
|
||||
}
|
||||
|
||||
// bytes
|
||||
INSN3(stxrb, byte, 0b000, 0);
|
||||
INSN3(stxrb, byte, 0b000, 0);
|
||||
INSN3(stlxrb, byte, 0b000, 1);
|
||||
INSN2(ldxrb, byte, 0b010, 0);
|
||||
INSN2(ldxrb, byte, 0b010, 0);
|
||||
INSN2(ldaxrb, byte, 0b010, 1);
|
||||
INSN2(stlrb, byte, 0b100, 1);
|
||||
INSN2(ldarb, byte, 0b110, 1);
|
||||
INSN2(stlrb, byte, 0b100, 1);
|
||||
INSN2(ldarb, byte, 0b110, 1);
|
||||
|
||||
// halfwords
|
||||
INSN3(stxrh, halfword, 0b000, 0);
|
||||
INSN3(stxrh, halfword, 0b000, 0);
|
||||
INSN3(stlxrh, halfword, 0b000, 1);
|
||||
INSN2(ldxrh, halfword, 0b010, 0);
|
||||
INSN2(ldxrh, halfword, 0b010, 0);
|
||||
INSN2(ldaxrh, halfword, 0b010, 1);
|
||||
INSN2(stlrh, halfword, 0b100, 1);
|
||||
INSN2(ldarh, halfword, 0b110, 1);
|
||||
INSN2(stlrh, halfword, 0b100, 1);
|
||||
INSN2(ldarh, halfword, 0b110, 1);
|
||||
|
||||
// words
|
||||
INSN3(stxrw, word, 0b000, 0);
|
||||
INSN3(stxrw, word, 0b000, 0);
|
||||
INSN3(stlxrw, word, 0b000, 1);
|
||||
INSN4(stxpw, word, 0b001, 0);
|
||||
INSN4(stxpw, word, 0b001, 0);
|
||||
INSN4(stlxpw, word, 0b001, 1);
|
||||
INSN2(ldxrw, word, 0b010, 0);
|
||||
INSN2(ldxrw, word, 0b010, 0);
|
||||
INSN2(ldaxrw, word, 0b010, 1);
|
||||
INSN_FOO(ldxpw, word, 0b011, 0);
|
||||
INSN2(stlrw, word, 0b100, 1);
|
||||
INSN2(ldarw, word, 0b110, 1);
|
||||
// pairs of words
|
||||
INSN_FOO(ldxpw, word, 0b011, 0);
|
||||
INSN_FOO(ldaxpw, word, 0b011, 1);
|
||||
INSN2(stlrw, word, 0b100, 1);
|
||||
INSN2(ldarw, word, 0b110, 1);
|
||||
|
||||
// xwords
|
||||
INSN3(stxr, xword, 0b000, 0);
|
||||
INSN3(stxr, xword, 0b000, 0);
|
||||
INSN3(stlxr, xword, 0b000, 1);
|
||||
INSN4(stxp, xword, 0b001, 0);
|
||||
INSN4(stxp, xword, 0b001, 0);
|
||||
INSN4(stlxp, xword, 0b001, 1);
|
||||
INSN2(ldxr, xword, 0b010, 0);
|
||||
INSN2(ldxr, xword, 0b010, 0);
|
||||
INSN2(ldaxr, xword, 0b010, 1);
|
||||
INSN_FOO(ldxp, xword, 0b011, 0);
|
||||
INSN2(stlr, xword, 0b100, 1);
|
||||
INSN2(ldar, xword, 0b110, 1);
|
||||
// pairs of xwords
|
||||
INSN_FOO(ldxp, xword, 0b011, 0);
|
||||
INSN_FOO(ldaxp, xword, 0b011, 1);
|
||||
INSN2(stlr, xword, 0b100, 1);
|
||||
INSN2(ldar, xword, 0b110, 1);
|
||||
|
||||
#undef INSN2
|
||||
#undef INSN3
|
||||
@@ -1271,10 +1275,10 @@ public:
|
||||
assert(Rs != Rn && Rs != Rt, "unpredictable instruction"); \
|
||||
lse_cas(Rs, Rt, Rn, sz, a, r, true); \
|
||||
}
|
||||
INSN(cas, false, false)
|
||||
INSN(casa, true, false)
|
||||
INSN(casl, false, true)
|
||||
INSN(casal, true, true)
|
||||
INSN(cas, false, false)
|
||||
INSN(casa, true, false)
|
||||
INSN(casl, false, true)
|
||||
INSN(casal, true, true)
|
||||
#undef INSN
|
||||
|
||||
// CASP
|
||||
@@ -1286,10 +1290,10 @@ public:
|
||||
Rs != Rn && Rs1 != Rn && Rs != Rt, "invalid registers"); \
|
||||
lse_cas(Rs, Rt, Rn, sz, a, r, false); \
|
||||
}
|
||||
INSN(casp, false, false)
|
||||
INSN(caspa, true, false)
|
||||
INSN(caspl, false, true)
|
||||
INSN(caspal, true, true)
|
||||
INSN(casp, false, false)
|
||||
INSN(caspa, true, false)
|
||||
INSN(caspl, false, true)
|
||||
INSN(caspal, true, true)
|
||||
#undef INSN
|
||||
|
||||
// 8.1 Atomic operations
|
||||
@@ -1415,17 +1419,17 @@ public:
|
||||
ld_st1(size, p1, V, L, Rt1, Rt2, adr, no_allocate); \
|
||||
}
|
||||
|
||||
INSN(stpw, 0b00, 0b101, 0, 0, false);
|
||||
INSN(ldpw, 0b00, 0b101, 0, 1, false);
|
||||
INSN(stpw, 0b00, 0b101, 0, 0, false);
|
||||
INSN(ldpw, 0b00, 0b101, 0, 1, false);
|
||||
INSN(ldpsw, 0b01, 0b101, 0, 1, false);
|
||||
INSN(stp, 0b10, 0b101, 0, 0, false);
|
||||
INSN(ldp, 0b10, 0b101, 0, 1, false);
|
||||
INSN(stp, 0b10, 0b101, 0, 0, false);
|
||||
INSN(ldp, 0b10, 0b101, 0, 1, false);
|
||||
|
||||
// Load/store no-allocate pair (offset)
|
||||
INSN(stnpw, 0b00, 0b101, 0, 0, true);
|
||||
INSN(ldnpw, 0b00, 0b101, 0, 1, true);
|
||||
INSN(stnp, 0b10, 0b101, 0, 0, true);
|
||||
INSN(ldnp, 0b10, 0b101, 0, 1, true);
|
||||
INSN(stnp, 0b10, 0b101, 0, 0, true);
|
||||
INSN(ldnp, 0b10, 0b101, 0, 1, true);
|
||||
|
||||
#undef INSN
|
||||
|
||||
@@ -1475,21 +1479,21 @@ public:
|
||||
ld_st2(Rt, adr, size, op); \
|
||||
} \
|
||||
|
||||
INSN(str, 0b11, 0b00);
|
||||
INSN(str, 0b11, 0b00);
|
||||
INSN(strw, 0b10, 0b00);
|
||||
INSN(strb, 0b00, 0b00);
|
||||
INSN(strh, 0b01, 0b00);
|
||||
|
||||
INSN(ldr, 0b11, 0b01);
|
||||
INSN(ldr, 0b11, 0b01);
|
||||
INSN(ldrw, 0b10, 0b01);
|
||||
INSN(ldrb, 0b00, 0b01);
|
||||
INSN(ldrh, 0b01, 0b01);
|
||||
|
||||
INSN(ldrsb, 0b00, 0b10);
|
||||
INSN(ldrsb, 0b00, 0b10);
|
||||
INSN(ldrsbw, 0b00, 0b11);
|
||||
INSN(ldrsh, 0b01, 0b10);
|
||||
INSN(ldrsh, 0b01, 0b10);
|
||||
INSN(ldrshw, 0b01, 0b11);
|
||||
INSN(ldrsw, 0b10, 0b10);
|
||||
INSN(ldrsw, 0b10, 0b10);
|
||||
|
||||
#undef INSN
|
||||
|
||||
@@ -1569,13 +1573,13 @@ public:
|
||||
op_shifted_reg(current_insn, 0b01010, kind, shift, size, op); \
|
||||
}
|
||||
|
||||
INSN(andr, 1, 0b00, 0);
|
||||
INSN(orr, 1, 0b01, 0);
|
||||
INSN(eor, 1, 0b10, 0);
|
||||
INSN(ands, 1, 0b11, 0);
|
||||
INSN(andw, 0, 0b00, 0);
|
||||
INSN(orrw, 0, 0b01, 0);
|
||||
INSN(eorw, 0, 0b10, 0);
|
||||
INSN(andr, 1, 0b00, 0);
|
||||
INSN(orr, 1, 0b01, 0);
|
||||
INSN(eor, 1, 0b10, 0);
|
||||
INSN(ands, 1, 0b11, 0);
|
||||
INSN(andw, 0, 0b00, 0);
|
||||
INSN(orrw, 0, 0b01, 0);
|
||||
INSN(eorw, 0, 0b10, 0);
|
||||
INSN(andsw, 0, 0b11, 0);
|
||||
|
||||
#undef INSN
|
||||
@@ -1597,13 +1601,13 @@ public:
|
||||
assert(false, " can't be used with immediate operand"); \
|
||||
}
|
||||
|
||||
INSN(bic, 1, 0b00, 1);
|
||||
INSN(orn, 1, 0b01, 1);
|
||||
INSN(eon, 1, 0b10, 1);
|
||||
INSN(bics, 1, 0b11, 1);
|
||||
INSN(bicw, 0, 0b00, 1);
|
||||
INSN(ornw, 0, 0b01, 1);
|
||||
INSN(eonw, 0, 0b10, 1);
|
||||
INSN(bic, 1, 0b00, 1);
|
||||
INSN(orn, 1, 0b01, 1);
|
||||
INSN(eon, 1, 0b10, 1);
|
||||
INSN(bics, 1, 0b11, 1);
|
||||
INSN(bicw, 0, 0b00, 1);
|
||||
INSN(ornw, 0, 0b01, 1);
|
||||
INSN(eonw, 0, 0b10, 1);
|
||||
INSN(bicsw, 0, 0b11, 1);
|
||||
|
||||
#undef INSN
|
||||
@@ -1636,13 +1640,13 @@ void mvnw(Register Rd, Register Rm,
|
||||
op_shifted_reg(current_insn, 0b01011, kind, shift, size, op); \
|
||||
}
|
||||
|
||||
INSN(add, 1, 0b000);
|
||||
INSN(sub, 1, 0b10);
|
||||
INSN(add, 1, 0b000);
|
||||
INSN(sub, 1, 0b10);
|
||||
INSN(addw, 0, 0b000);
|
||||
INSN(subw, 0, 0b10);
|
||||
|
||||
INSN(adds, 1, 0b001);
|
||||
INSN(subs, 1, 0b11);
|
||||
INSN(adds, 1, 0b001);
|
||||
INSN(subs, 1, 0b11);
|
||||
INSN(addsw, 0, 0b001);
|
||||
INSN(subsw, 0, 0b11);
|
||||
|
||||
@@ -1667,8 +1671,8 @@ void mvnw(Register Rd, Register Rm,
|
||||
|
||||
INSN(addw, 0b000);
|
||||
INSN(subw, 0b010);
|
||||
INSN(add, 0b100);
|
||||
INSN(sub, 0b110);
|
||||
INSN(add, 0b100);
|
||||
INSN(sub, 0b110);
|
||||
|
||||
#undef INSN
|
||||
|
||||
@@ -1682,8 +1686,8 @@ void mvnw(Register Rd, Register Rm,
|
||||
|
||||
INSN(addsw, 0b001);
|
||||
INSN(subsw, 0b011);
|
||||
INSN(adds, 0b101);
|
||||
INSN(subs, 0b111);
|
||||
INSN(adds, 0b101);
|
||||
INSN(subs, 0b111);
|
||||
|
||||
#undef INSN
|
||||
|
||||
@@ -1722,14 +1726,14 @@ void mvnw(Register Rd, Register Rm,
|
||||
add_sub_carry(op, Rd, Rn, Rm); \
|
||||
}
|
||||
|
||||
INSN(adcw, 0b000);
|
||||
INSN(adcw, 0b000);
|
||||
INSN(adcsw, 0b001);
|
||||
INSN(sbcw, 0b010);
|
||||
INSN(sbcw, 0b010);
|
||||
INSN(sbcsw, 0b011);
|
||||
INSN(adc, 0b100);
|
||||
INSN(adcs, 0b101);
|
||||
INSN(sbc,0b110);
|
||||
INSN(sbcs, 0b111);
|
||||
INSN(adc, 0b100);
|
||||
INSN(adcs, 0b101);
|
||||
INSN(sbc, 0b110);
|
||||
INSN(sbcs, 0b111);
|
||||
|
||||
#undef INSN
|
||||
|
||||
@@ -1782,14 +1786,14 @@ void mvnw(Register Rd, Register Rm,
|
||||
conditional_select(op, op2, Rd, Rn, Rm, cond); \
|
||||
}
|
||||
|
||||
INSN(cselw, 0b000, 0b00);
|
||||
INSN(cselw, 0b000, 0b00);
|
||||
INSN(csincw, 0b000, 0b01);
|
||||
INSN(csinvw, 0b010, 0b00);
|
||||
INSN(csnegw, 0b010, 0b01);
|
||||
INSN(csel, 0b100, 0b00);
|
||||
INSN(csinc, 0b100, 0b01);
|
||||
INSN(csinv, 0b110, 0b00);
|
||||
INSN(csneg, 0b110, 0b01);
|
||||
INSN(csel, 0b100, 0b00);
|
||||
INSN(csinc, 0b100, 0b01);
|
||||
INSN(csinv, 0b110, 0b00);
|
||||
INSN(csneg, 0b110, 0b01);
|
||||
|
||||
#undef INSN
|
||||
|
||||
@@ -1855,7 +1859,7 @@ void mvnw(Register Rd, Register Rm,
|
||||
|
||||
#undef INSN
|
||||
|
||||
// (2 sources)
|
||||
// Data-processing (2 source)
|
||||
#define INSN(NAME, op29, opcode) \
|
||||
void NAME(Register Rd, Register Rn, Register Rm) { \
|
||||
starti; \
|
||||
@@ -1879,7 +1883,7 @@ void mvnw(Register Rd, Register Rm,
|
||||
|
||||
#undef INSN
|
||||
|
||||
// (3 sources)
|
||||
// Data-processing (3 source)
|
||||
void data_processing(unsigned op54, unsigned op31, unsigned o0,
|
||||
Register Rd, Register Rn, Register Rm,
|
||||
Register Ra) {
|
||||
@@ -1894,10 +1898,10 @@ void mvnw(Register Rd, Register Rm,
|
||||
data_processing(op54, op31, o0, Rd, Rn, Rm, Ra); \
|
||||
}
|
||||
|
||||
INSN(maddw, 0b000, 0b000, 0);
|
||||
INSN(msubw, 0b000, 0b000, 1);
|
||||
INSN(madd, 0b100, 0b000, 0);
|
||||
INSN(msub, 0b100, 0b000, 1);
|
||||
INSN(maddw, 0b000, 0b000, 0);
|
||||
INSN(msubw, 0b000, 0b000, 1);
|
||||
INSN(madd, 0b100, 0b000, 0);
|
||||
INSN(msub, 0b100, 0b000, 1);
|
||||
INSN(smaddl, 0b100, 0b001, 0);
|
||||
INSN(smsubl, 0b100, 0b001, 1);
|
||||
INSN(umaddl, 0b100, 0b101, 0);
|
||||
@@ -1930,31 +1934,17 @@ void mvnw(Register Rd, Register Rm,
|
||||
data_processing(op31, type, opcode, Vd, Vn); \
|
||||
}
|
||||
|
||||
private:
|
||||
INSN(i_fmovs, 0b000, 0b00, 0b000000);
|
||||
public:
|
||||
INSN(fabss, 0b000, 0b00, 0b000001);
|
||||
INSN(fnegs, 0b000, 0b00, 0b000010);
|
||||
INSN(fmovs, 0b000, 0b00, 0b000000);
|
||||
INSN(fabss, 0b000, 0b00, 0b000001);
|
||||
INSN(fnegs, 0b000, 0b00, 0b000010);
|
||||
INSN(fsqrts, 0b000, 0b00, 0b000011);
|
||||
INSN(fcvts, 0b000, 0b00, 0b000101); // Single-precision to double-precision
|
||||
INSN(fcvts, 0b000, 0b00, 0b000101); // Single-precision to double-precision
|
||||
|
||||
private:
|
||||
INSN(i_fmovd, 0b000, 0b01, 0b000000);
|
||||
public:
|
||||
INSN(fabsd, 0b000, 0b01, 0b000001);
|
||||
INSN(fnegd, 0b000, 0b01, 0b000010);
|
||||
INSN(fmovd, 0b000, 0b01, 0b000000);
|
||||
INSN(fabsd, 0b000, 0b01, 0b000001);
|
||||
INSN(fnegd, 0b000, 0b01, 0b000010);
|
||||
INSN(fsqrtd, 0b000, 0b01, 0b000011);
|
||||
INSN(fcvtd, 0b000, 0b01, 0b000100); // Double-precision to single-precision
|
||||
|
||||
void fmovd(FloatRegister Vd, FloatRegister Vn) {
|
||||
assert(Vd != Vn, "should be");
|
||||
i_fmovd(Vd, Vn);
|
||||
}
|
||||
|
||||
void fmovs(FloatRegister Vd, FloatRegister Vn) {
|
||||
assert(Vd != Vn, "should be");
|
||||
i_fmovs(Vd, Vn);
|
||||
}
|
||||
INSN(fcvtd, 0b000, 0b01, 0b000100); // Double-precision to single-precision
|
||||
|
||||
private:
|
||||
void _fcvt_narrow_extend(FloatRegister Vd, SIMD_Arrangement Ta,
|
||||
@@ -2034,15 +2024,15 @@ public:
|
||||
data_processing(op31, type, o1, o0, Vd, Vn, Vm, Va); \
|
||||
}
|
||||
|
||||
INSN(fmadds, 0b000, 0b00, 0, 0);
|
||||
INSN(fmsubs, 0b000, 0b00, 0, 1);
|
||||
INSN(fmadds, 0b000, 0b00, 0, 0);
|
||||
INSN(fmsubs, 0b000, 0b00, 0, 1);
|
||||
INSN(fnmadds, 0b000, 0b00, 1, 0);
|
||||
INSN(fnmsubs, 0b000, 0b00, 1, 1);
|
||||
|
||||
INSN(fmaddd, 0b000, 0b01, 0, 0);
|
||||
INSN(fmsubd, 0b000, 0b01, 0, 1);
|
||||
INSN(fmaddd, 0b000, 0b01, 0, 0);
|
||||
INSN(fmsubd, 0b000, 0b01, 0, 1);
|
||||
INSN(fnmaddd, 0b000, 0b01, 1, 0);
|
||||
INSN(fnmsub, 0b000, 0b01, 1, 1);
|
||||
INSN(fnmsub, 0b000, 0b01, 1, 1);
|
||||
|
||||
#undef INSN
|
||||
|
||||
@@ -2072,7 +2062,7 @@ public:
|
||||
|
||||
#undef INSN
|
||||
|
||||
// Floating-point<->integer conversions
|
||||
// Conversion between floating-point and integer
|
||||
void float_int_convert(unsigned sflag, unsigned ftype,
|
||||
unsigned rmode, unsigned opcode,
|
||||
Register Rd, Register Rn) {
|
||||
@@ -2110,9 +2100,9 @@ public:
|
||||
|
||||
#undef INSN
|
||||
|
||||
#define INSN(NAME, sflag, type, rmode, opcode) \
|
||||
#define INSN(NAME, sflag, type, rmode, opcode) \
|
||||
void NAME(FloatRegister Vd, Register Rn) { \
|
||||
float_int_convert(sflag, type, rmode, opcode, as_Register(Vd), Rn); \
|
||||
float_int_convert(sflag, type, rmode, opcode, as_Register(Vd), Rn); \
|
||||
}
|
||||
|
||||
INSN(fmovs, 0b0, 0b00, 0b00, 0b111);
|
||||
@@ -2242,6 +2232,8 @@ public:
|
||||
movi(Vn, T1D, 0);
|
||||
}
|
||||
|
||||
// Floating-point data-processing (1 source)
|
||||
|
||||
// Floating-point rounding
|
||||
// type: half-precision = 11
|
||||
// single = 00
|
||||
@@ -2429,6 +2421,7 @@ public:
|
||||
|
||||
#undef INSN
|
||||
|
||||
// Advanced SIMD three different
|
||||
#define INSN(NAME, opc, opc2, acceptT2D) \
|
||||
void NAME(FloatRegister Vd, SIMD_Arrangement T, FloatRegister Vn, FloatRegister Vm) { \
|
||||
guarantee(T != T1Q && T != T1D, "incorrect arrangement"); \
|
||||
@@ -2670,9 +2663,9 @@ public:
|
||||
f(opc, 31, 10), rf(Vn, 5), rf(Vd, 0); \
|
||||
}
|
||||
|
||||
INSN(aese, 0b0100111000101000010010);
|
||||
INSN(aesd, 0b0100111000101000010110);
|
||||
INSN(aesmc, 0b0100111000101000011010);
|
||||
INSN(aese, 0b0100111000101000010010);
|
||||
INSN(aesd, 0b0100111000101000010110);
|
||||
INSN(aesmc, 0b0100111000101000011010);
|
||||
INSN(aesimc, 0b0100111000101000011110);
|
||||
|
||||
#undef INSN
|
||||
@@ -3128,24 +3121,25 @@ public:
|
||||
sve_predicate_reg_insn(op1, op2, Zdn_or_Zd_or_Vd, T, Pg, Znm_or_Vn); \
|
||||
}
|
||||
|
||||
INSN(sve_abs, 0b00000100, 0b010110101); // vector abs, unary
|
||||
INSN(sve_add, 0b00000100, 0b000000000); // vector add
|
||||
INSN(sve_and, 0b00000100, 0b011010000); // vector and
|
||||
INSN(sve_andv, 0b00000100, 0b011010001); // bitwise and reduction to scalar
|
||||
INSN(sve_asr, 0b00000100, 0b010000100); // vector arithmetic shift right
|
||||
INSN(sve_bic, 0b00000100, 0b011011000); // vector bitwise clear
|
||||
INSN(sve_cnt, 0b00000100, 0b011010101); // count non-zero bits
|
||||
INSN(sve_cpy, 0b00000101, 0b100000100); // copy scalar to each active vector element
|
||||
INSN(sve_eor, 0b00000100, 0b011001000); // vector eor
|
||||
INSN(sve_eorv, 0b00000100, 0b011001001); // bitwise xor reduction to scalar
|
||||
INSN(sve_lsl, 0b00000100, 0b010011100); // vector logical shift left
|
||||
INSN(sve_lsr, 0b00000100, 0b010001100); // vector logical shift right
|
||||
INSN(sve_mul, 0b00000100, 0b010000000); // vector mul
|
||||
INSN(sve_neg, 0b00000100, 0b010111101); // vector neg, unary
|
||||
INSN(sve_not, 0b00000100, 0b011110101); // bitwise invert vector, unary
|
||||
INSN(sve_orr, 0b00000100, 0b011000000); // vector or
|
||||
INSN(sve_orv, 0b00000100, 0b011000001); // bitwise or reduction to scalar
|
||||
INSN(sve_smax, 0b00000100, 0b001000000); // signed maximum vectors
|
||||
INSN(sve_abs, 0b00000100, 0b010110101); // vector abs, unary
|
||||
INSN(sve_add, 0b00000100, 0b000000000); // vector add
|
||||
INSN(sve_and, 0b00000100, 0b011010000); // vector and
|
||||
INSN(sve_andv, 0b00000100, 0b011010001); // bitwise and reduction to scalar
|
||||
INSN(sve_asr, 0b00000100, 0b010000100); // vector arithmetic shift right
|
||||
INSN(sve_bic, 0b00000100, 0b011011000); // vector bitwise clear
|
||||
INSN(sve_clz, 0b00000100, 0b011001101); // vector count leading zero bits
|
||||
INSN(sve_cnt, 0b00000100, 0b011010101); // count non-zero bits
|
||||
INSN(sve_cpy, 0b00000101, 0b100000100); // copy scalar to each active vector element
|
||||
INSN(sve_eor, 0b00000100, 0b011001000); // vector eor
|
||||
INSN(sve_eorv, 0b00000100, 0b011001001); // bitwise xor reduction to scalar
|
||||
INSN(sve_lsl, 0b00000100, 0b010011100); // vector logical shift left
|
||||
INSN(sve_lsr, 0b00000100, 0b010001100); // vector logical shift right
|
||||
INSN(sve_mul, 0b00000100, 0b010000000); // vector mul
|
||||
INSN(sve_neg, 0b00000100, 0b010111101); // vector neg, unary
|
||||
INSN(sve_not, 0b00000100, 0b011110101); // bitwise invert vector, unary
|
||||
INSN(sve_orr, 0b00000100, 0b011000000); // vector or
|
||||
INSN(sve_orv, 0b00000100, 0b011000001); // bitwise or reduction to scalar
|
||||
INSN(sve_smax, 0b00000100, 0b001000000); // signed maximum vectors
|
||||
INSN(sve_smaxv, 0b00000100, 0b001000001); // signed maximum reduction to scalar
|
||||
INSN(sve_smin, 0b00000100, 0b001010000); // signed minimum vectors
|
||||
INSN(sve_sminv, 0b00000100, 0b001010001); // signed minimum reduction to scalar
|
||||
@@ -3160,22 +3154,22 @@ public:
|
||||
sve_predicate_reg_insn(op1, op2, Zd_or_Zdn_or_Vd, T, Pg, Zn_or_Zm); \
|
||||
}
|
||||
|
||||
INSN(sve_fabs, 0b00000100, 0b011100101);
|
||||
INSN(sve_fadd, 0b01100101, 0b000000100);
|
||||
INSN(sve_fadda, 0b01100101, 0b011000001); // add strictly-ordered reduction to scalar Vd
|
||||
INSN(sve_fdiv, 0b01100101, 0b001101100);
|
||||
INSN(sve_fmax, 0b01100101, 0b000110100); // floating-point maximum
|
||||
INSN(sve_fmaxv, 0b01100101, 0b000110001); // floating-point maximum recursive reduction to scalar
|
||||
INSN(sve_fmin, 0b01100101, 0b000111100); // floating-point minimum
|
||||
INSN(sve_fminv, 0b01100101, 0b000111001); // floating-point minimum recursive reduction to scalar
|
||||
INSN(sve_fmul, 0b01100101, 0b000010100);
|
||||
INSN(sve_fneg, 0b00000100, 0b011101101);
|
||||
INSN(sve_frintm, 0b01100101, 0b000010101); // floating-point round to integral value, toward minus infinity
|
||||
INSN(sve_frintn, 0b01100101, 0b000000101); // floating-point round to integral value, nearest with ties to even
|
||||
INSN(sve_frinta, 0b01100101, 0b000100101); // floating-point round to integral value, nearest with ties to away
|
||||
INSN(sve_frintp, 0b01100101, 0b000001101); // floating-point round to integral value, toward plus infinity
|
||||
INSN(sve_fsqrt, 0b01100101, 0b001101101);
|
||||
INSN(sve_fsub, 0b01100101, 0b000001100);
|
||||
INSN(sve_fabs, 0b00000100, 0b011100101);
|
||||
INSN(sve_fadd, 0b01100101, 0b000000100);
|
||||
INSN(sve_fadda, 0b01100101, 0b011000001); // add strictly-ordered reduction to scalar Vd
|
||||
INSN(sve_fdiv, 0b01100101, 0b001101100);
|
||||
INSN(sve_fmax, 0b01100101, 0b000110100); // floating-point maximum
|
||||
INSN(sve_fmaxv, 0b01100101, 0b000110001); // floating-point maximum recursive reduction to scalar
|
||||
INSN(sve_fmin, 0b01100101, 0b000111100); // floating-point minimum
|
||||
INSN(sve_fminv, 0b01100101, 0b000111001); // floating-point minimum recursive reduction to scalar
|
||||
INSN(sve_fmul, 0b01100101, 0b000010100);
|
||||
INSN(sve_fneg, 0b00000100, 0b011101101);
|
||||
INSN(sve_frintm, 0b01100101, 0b000010101); // floating-point round to integral value, toward minus infinity
|
||||
INSN(sve_frintn, 0b01100101, 0b000000101); // floating-point round to integral value, nearest with ties to even
|
||||
INSN(sve_frinta, 0b01100101, 0b000100101); // floating-point round to integral value, nearest with ties to away
|
||||
INSN(sve_frintp, 0b01100101, 0b000001101); // floating-point round to integral value, toward plus infinity
|
||||
INSN(sve_fsqrt, 0b01100101, 0b001101101);
|
||||
INSN(sve_fsub, 0b01100101, 0b000001100);
|
||||
#undef INSN
|
||||
|
||||
// SVE multiple-add/sub - predicated
|
||||
@@ -3641,20 +3635,27 @@ void sve_fcm(Condition cond, PRegister Pd, SIMD_RegVariant T,
|
||||
INSN(sve_uzp2, 0b1); // Concatenate odd elements from two predicates
|
||||
#undef INSN
|
||||
|
||||
// Predicate counted loop (SVE) (32-bit variants are not included)
|
||||
#define INSN(NAME, decode) \
|
||||
// SVE integer compare scalar count and limit
|
||||
#define INSN(NAME, sf, op) \
|
||||
void NAME(PRegister Pd, SIMD_RegVariant T, Register Rn, Register Rm) { \
|
||||
starti; \
|
||||
assert(T != Q, "invalid register variant"); \
|
||||
f(0b00100101, 31, 24), f(T, 23, 22), f(1, 21), \
|
||||
zrf(Rm, 16), f(0, 15, 13), f(1, 12), f(decode >> 1, 11, 10), \
|
||||
zrf(Rn, 5), f(decode & 1, 4), prf(Pd, 0); \
|
||||
zrf(Rm, 16), f(0, 15, 13), f(sf, 12), f(op >> 1, 11, 10), \
|
||||
zrf(Rn, 5), f(op & 1, 4), prf(Pd, 0); \
|
||||
}
|
||||
|
||||
INSN(sve_whilelt, 0b010); // While incrementing signed scalar less than scalar
|
||||
INSN(sve_whilele, 0b011); // While incrementing signed scalar less than or equal to scalar
|
||||
INSN(sve_whilelo, 0b110); // While incrementing unsigned scalar lower than scalar
|
||||
INSN(sve_whilels, 0b111); // While incrementing unsigned scalar lower than or the same as scalar
|
||||
// While incrementing signed scalar less than scalar
|
||||
INSN(sve_whileltw, 0b0, 0b010);
|
||||
INSN(sve_whilelt, 0b1, 0b010);
|
||||
// While incrementing signed scalar less than or equal to scalar
|
||||
INSN(sve_whilelew, 0b0, 0b011);
|
||||
INSN(sve_whilele, 0b1, 0b011);
|
||||
// While incrementing unsigned scalar lower than scalar
|
||||
INSN(sve_whilelow, 0b0, 0b110);
|
||||
INSN(sve_whilelo, 0b1, 0b110);
|
||||
// While incrementing unsigned scalar lower than or the same as scalar
|
||||
INSN(sve_whilelsw, 0b0, 0b111);
|
||||
INSN(sve_whilels, 0b1, 0b111);
|
||||
#undef INSN
|
||||
|
||||
// SVE predicate reverse
|
||||
@@ -3793,6 +3794,19 @@ void sve_fcm(Condition cond, PRegister Pd, SIMD_RegVariant T,
|
||||
INSN(sve_lastb, 0b1);
|
||||
#undef INSN
|
||||
|
||||
// SVE reverse within elements
|
||||
#define INSN(NAME, opc, cond) \
|
||||
void NAME(FloatRegister Zd, SIMD_RegVariant T, PRegister Pg, FloatRegister Zn) { \
|
||||
starti; \
|
||||
assert(cond, "invalid size"); \
|
||||
f(0b00000101, 31, 24), f(T, 23, 22), f(0b1001, 21, 18), f(opc, 17, 16); \
|
||||
f(0b100, 15, 13), pgrf(Pg, 10), rf(Zn, 5), rf(Zd, 0); \
|
||||
}
|
||||
|
||||
INSN(sve_revb, 0b00, T == H || T == S || T == D);
|
||||
INSN(sve_rbit, 0b11, T != Q);
|
||||
#undef INSN
|
||||
|
||||
// SVE Create index starting from general-purpose register and incremented by immediate
|
||||
void sve_index(FloatRegister Zd, SIMD_RegVariant T, Register Rn, int imm) {
|
||||
starti;
|
||||
@@ -3819,6 +3833,23 @@ void sve_fcm(Condition cond, PRegister Pd, SIMD_RegVariant T,
|
||||
f(0b001100, 15, 10), rf(Zn, 5), rf(Zd, 0);
|
||||
}
|
||||
|
||||
// Shuffle active elements of vector to the right and fill with zero
|
||||
void sve_compact(FloatRegister Zd, SIMD_RegVariant T, FloatRegister Zn, PRegister Pg) {
|
||||
starti;
|
||||
assert(T == S || T == D, "invalid size");
|
||||
f(0b00000101, 31, 24), f(T, 23, 22), f(0b100001100, 21, 13);
|
||||
pgrf(Pg, 10), rf(Zn, 5), rf(Zd, 0);
|
||||
}
|
||||
|
||||
// SVE2 Count matching elements in vector
|
||||
void sve_histcnt(FloatRegister Zd, SIMD_RegVariant T, PRegister Pg,
|
||||
FloatRegister Zn, FloatRegister Zm) {
|
||||
starti;
|
||||
assert(T == S || T == D, "invalid size");
|
||||
f(0b01000101, 31, 24), f(T, 23, 22), f(0b1, 21), rf(Zm, 16);
|
||||
f(0b110, 15, 13), pgrf(Pg, 10), rf(Zn, 5), rf(Zd, 0);
|
||||
}
|
||||
|
||||
// SVE2 bitwise permute
|
||||
#define INSN(NAME, opc) \
|
||||
void NAME(FloatRegister Zd, SIMD_RegVariant T, FloatRegister Zn, FloatRegister Zm) { \
|
||||
@@ -3830,6 +3861,7 @@ void sve_fcm(Condition cond, PRegister Pd, SIMD_RegVariant T,
|
||||
}
|
||||
|
||||
INSN(sve_bext, 0b00);
|
||||
INSN(sve_bdep, 0b01);
|
||||
#undef INSN
|
||||
|
||||
Assembler(CodeBuffer* code) : AbstractAssembler(code) {
|
||||
|
||||
@@ -300,8 +300,6 @@ void FrameMap::initialize() {
|
||||
|
||||
|
||||
Address FrameMap::make_new_address(ByteSize sp_offset) const {
|
||||
// for rbp, based address use this:
|
||||
// return Address(rbp, in_bytes(sp_offset) - (framesize() - 2) * 4);
|
||||
return Address(sp, in_bytes(sp_offset));
|
||||
}
|
||||
|
||||
|
||||
@@ -282,10 +282,9 @@ void LIR_Assembler::osr_entry() {
|
||||
__ bind(L);
|
||||
}
|
||||
#endif
|
||||
__ ldr(r19, Address(OSR_buf, slot_offset + 0));
|
||||
__ ldp(r19, r20, Address(OSR_buf, slot_offset));
|
||||
__ str(r19, frame_map()->address_for_monitor_lock(i));
|
||||
__ ldr(r19, Address(OSR_buf, slot_offset + 1*BytesPerWord));
|
||||
__ str(r19, frame_map()->address_for_monitor_object(i));
|
||||
__ str(r20, frame_map()->address_for_monitor_object(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -438,7 +437,6 @@ int LIR_Assembler::emit_unwind_handler() {
|
||||
__ unlock_object(r5, r4, r0, *stub->entry());
|
||||
}
|
||||
__ bind(*stub->continuation());
|
||||
__ dec_held_monitor_count(rthread);
|
||||
}
|
||||
|
||||
if (compilation()->env()->dtrace_method_probes()) {
|
||||
@@ -965,7 +963,7 @@ void LIR_Assembler::mem2reg(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch
|
||||
if (UseCompressedOops && !wide) {
|
||||
__ ldrw(dest->as_register(), as_Address(from_addr));
|
||||
} else {
|
||||
__ ldr(dest->as_register(), as_Address(from_addr));
|
||||
__ ldr(dest->as_register(), as_Address(from_addr));
|
||||
}
|
||||
break;
|
||||
case T_METADATA:
|
||||
@@ -2559,6 +2557,10 @@ void LIR_Assembler::emit_lock(LIR_OpLock* op) {
|
||||
Register hdr = op->hdr_opr()->as_register();
|
||||
Register lock = op->lock_opr()->as_register();
|
||||
if (UseHeavyMonitors) {
|
||||
if (op->info() != NULL) {
|
||||
add_debug_info_for_null_check_here(op->info());
|
||||
__ null_check(obj, -1);
|
||||
}
|
||||
__ b(*op->stub()->entry());
|
||||
} else if (op->code() == lir_lock) {
|
||||
assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header");
|
||||
@@ -2574,18 +2576,7 @@ void LIR_Assembler::emit_lock(LIR_OpLock* op) {
|
||||
} else {
|
||||
Unimplemented();
|
||||
}
|
||||
if (op->code() == lir_lock) {
|
||||
// If deoptimization happens in Runtime1::monitorenter, inc_held_monitor_count after backing from slowpath
|
||||
// will be skipped. Solution is:
|
||||
// 1. Increase only in fastpath
|
||||
// 2. Runtime1::monitorenter increase count after locking
|
||||
__ inc_held_monitor_count(rthread);
|
||||
}
|
||||
__ bind(*op->stub()->continuation());
|
||||
if (op->code() == lir_unlock) {
|
||||
// unlock in slowpath is JRT_Leaf stub, no deoptimization can happen
|
||||
__ dec_held_monitor_count(rthread);
|
||||
}
|
||||
}
|
||||
|
||||
void LIR_Assembler::emit_load_klass(LIR_OpLoadKlass* op) {
|
||||
@@ -2699,7 +2690,7 @@ void LIR_Assembler::emit_updatecrc32(LIR_OpUpdateCRC32* op) {
|
||||
assert_different_registers(val, crc, res);
|
||||
uint64_t offset;
|
||||
__ adrp(res, ExternalAddress(StubRoutines::crc_table_addr()), offset);
|
||||
if (offset) __ add(res, res, offset);
|
||||
__ add(res, res, offset);
|
||||
|
||||
__ mvnw(crc, crc); // ~crc
|
||||
__ update_byte_crc32(crc, val, res);
|
||||
|
||||
@@ -917,7 +917,6 @@ void LIRGenerator::do_update_CRC32(Intrinsic* x) {
|
||||
assert(UseCRC32Intrinsics, "why are we here?");
|
||||
// Make all state_for calls early since they can emit code
|
||||
LIR_Opr result = rlock_result(x);
|
||||
int flags = 0;
|
||||
switch (x->id()) {
|
||||
case vmIntrinsics::_updateCRC32: {
|
||||
LIRItem crc(x->argument_at(0), this);
|
||||
@@ -942,9 +941,9 @@ void LIRGenerator::do_update_CRC32(Intrinsic* x) {
|
||||
|
||||
LIR_Opr index = off.result();
|
||||
int offset = is_updateBytes ? arrayOopDesc::base_offset_in_bytes(T_BYTE) : 0;
|
||||
if(off.result()->is_constant()) {
|
||||
if (off.result()->is_constant()) {
|
||||
index = LIR_OprFact::illegalOpr;
|
||||
offset += off.result()->as_jint();
|
||||
offset += off.result()->as_jint();
|
||||
}
|
||||
LIR_Opr base_op = buf.result();
|
||||
|
||||
@@ -994,7 +993,6 @@ void LIRGenerator::do_update_CRC32C(Intrinsic* x) {
|
||||
assert(UseCRC32CIntrinsics, "why are we here?");
|
||||
// Make all state_for calls early since they can emit code
|
||||
LIR_Opr result = rlock_result(x);
|
||||
int flags = 0;
|
||||
switch (x->id()) {
|
||||
case vmIntrinsics::_updateBytesCRC32C:
|
||||
case vmIntrinsics::_updateDirectByteBufferCRC32C: {
|
||||
|
||||
@@ -116,6 +116,7 @@ int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register disp_hdr
|
||||
cbnz(hdr, slow_case);
|
||||
// done
|
||||
bind(done);
|
||||
increment(Address(rthread, JavaThread::held_monitor_count_offset()));
|
||||
return null_check_offset;
|
||||
}
|
||||
|
||||
@@ -147,6 +148,7 @@ void C1_MacroAssembler::unlock_object(Register hdr, Register obj, Register disp_
|
||||
}
|
||||
// done
|
||||
bind(done);
|
||||
decrement(Address(rthread, JavaThread::held_monitor_count_offset()));
|
||||
}
|
||||
|
||||
|
||||
@@ -155,7 +157,7 @@ void C1_MacroAssembler::try_allocate(Register obj, Register var_size_in_bytes, i
|
||||
if (UseTLAB) {
|
||||
tlab_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, t2, slow_case);
|
||||
} else {
|
||||
eden_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, slow_case);
|
||||
b(slow_case);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,7 +298,7 @@ void C1_MacroAssembler::build_frame(int framesize, int bang_size_in_bytes) {
|
||||
|
||||
// Insert nmethod entry barrier into frame.
|
||||
BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
|
||||
bs->nmethod_entry_barrier(this);
|
||||
bs->nmethod_entry_barrier(this, NULL /* slow_path */, NULL /* continuation */, NULL /* guard */);
|
||||
}
|
||||
|
||||
void C1_MacroAssembler::remove_frame(int framesize) {
|
||||
@@ -313,7 +315,7 @@ void C1_MacroAssembler::verified_entry(bool breakAtEntry) {
|
||||
}
|
||||
|
||||
void C1_MacroAssembler::load_parameter(int offset_in_words, Register reg) {
|
||||
// rbp, + 0: link
|
||||
// rfp, + 0: link
|
||||
// + 1: return address
|
||||
// + 2: argument with offset 0
|
||||
// + 3: argument with offset 1
|
||||
|
||||
@@ -656,56 +656,6 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
__ set_info("fast new_instance init check", dont_gc_arguments);
|
||||
}
|
||||
|
||||
// If TLAB is disabled, see if there is support for inlining contiguous
|
||||
// allocations.
|
||||
// Otherwise, just go to the slow path.
|
||||
if ((id == fast_new_instance_id || id == fast_new_instance_init_check_id) &&
|
||||
!UseTLAB && Universe::heap()->supports_inline_contig_alloc()) {
|
||||
Label slow_path;
|
||||
Register obj_size = r19;
|
||||
Register t1 = r10;
|
||||
Register t2 = r11;
|
||||
assert_different_registers(klass, obj, obj_size, t1, t2);
|
||||
|
||||
__ stp(r19, zr, Address(__ pre(sp, -2 * wordSize)));
|
||||
|
||||
if (id == fast_new_instance_init_check_id) {
|
||||
// make sure the klass is initialized
|
||||
__ ldrb(rscratch1, Address(klass, InstanceKlass::init_state_offset()));
|
||||
__ cmpw(rscratch1, InstanceKlass::fully_initialized);
|
||||
__ br(Assembler::NE, slow_path);
|
||||
}
|
||||
|
||||
#ifdef ASSERT
|
||||
// assert object can be fast path allocated
|
||||
{
|
||||
Label ok, not_ok;
|
||||
__ ldrw(obj_size, Address(klass, Klass::layout_helper_offset()));
|
||||
__ cmp(obj_size, (u1)0);
|
||||
__ br(Assembler::LE, not_ok); // make sure it's an instance (LH > 0)
|
||||
__ tstw(obj_size, Klass::_lh_instance_slow_path_bit);
|
||||
__ br(Assembler::EQ, ok);
|
||||
__ bind(not_ok);
|
||||
__ stop("assert(can be fast path allocated)");
|
||||
__ should_not_reach_here();
|
||||
__ bind(ok);
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
// get the instance size (size is positive so movl is fine for 64bit)
|
||||
__ ldrw(obj_size, Address(klass, Klass::layout_helper_offset()));
|
||||
|
||||
__ eden_allocate(obj, obj_size, 0, t1, slow_path);
|
||||
|
||||
__ initialize_object(obj, klass, obj_size, 0, t1, t2, /* is_tlab_allocated */ false);
|
||||
__ verify_oop(obj);
|
||||
__ ldp(r19, zr, Address(__ post(sp, 2 * wordSize)));
|
||||
__ ret(lr);
|
||||
|
||||
__ bind(slow_path);
|
||||
__ ldp(r19, zr, Address(__ post(sp, 2 * wordSize)));
|
||||
}
|
||||
|
||||
__ enter();
|
||||
OopMap* map = save_live_registers(sasm);
|
||||
int call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_instance), klass);
|
||||
@@ -771,51 +721,6 @@ OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
// If TLAB is disabled, see if there is support for inlining contiguous
|
||||
// allocations.
|
||||
// Otherwise, just go to the slow path.
|
||||
if (!UseTLAB && Universe::heap()->supports_inline_contig_alloc()) {
|
||||
Register arr_size = r5;
|
||||
Register t1 = r10;
|
||||
Register t2 = r11;
|
||||
Label slow_path;
|
||||
assert_different_registers(length, klass, obj, arr_size, t1, t2);
|
||||
|
||||
// check that array length is small enough for fast path.
|
||||
__ mov(rscratch1, C1_MacroAssembler::max_array_allocation_length);
|
||||
__ cmpw(length, rscratch1);
|
||||
__ br(Assembler::HI, slow_path);
|
||||
|
||||
// get the allocation size: round_up(hdr + length << (layout_helper & 0x1F))
|
||||
// since size is positive ldrw does right thing on 64bit
|
||||
__ ldrw(t1, Address(klass, Klass::layout_helper_offset()));
|
||||
// since size is positive movw does right thing on 64bit
|
||||
__ movw(arr_size, length);
|
||||
__ lslvw(arr_size, length, t1);
|
||||
__ ubfx(t1, t1, Klass::_lh_header_size_shift,
|
||||
exact_log2(Klass::_lh_header_size_mask + 1));
|
||||
__ add(arr_size, arr_size, t1);
|
||||
__ add(arr_size, arr_size, MinObjAlignmentInBytesMask); // align up
|
||||
__ andr(arr_size, arr_size, ~MinObjAlignmentInBytesMask);
|
||||
|
||||
__ eden_allocate(obj, arr_size, 0, t1, slow_path); // preserves arr_size
|
||||
|
||||
__ initialize_header(obj, klass, length, t1, t2);
|
||||
__ ldrb(t1, Address(klass, in_bytes(Klass::layout_helper_offset()) + (Klass::_lh_header_size_shift / BitsPerByte)));
|
||||
assert(Klass::_lh_header_size_shift % BitsPerByte == 0, "bytewise");
|
||||
assert(Klass::_lh_header_size_mask <= 0xFF, "bytewise");
|
||||
__ andr(t1, t1, Klass::_lh_header_size_mask);
|
||||
__ sub(arr_size, arr_size, t1); // body length
|
||||
__ add(t1, t1, obj); // body start
|
||||
__ initialize_body(t1, arr_size, 0, t1, t2);
|
||||
__ membar(Assembler::StoreStore);
|
||||
__ verify_oop(obj);
|
||||
|
||||
__ ret(lr);
|
||||
|
||||
__ bind(slow_path);
|
||||
}
|
||||
|
||||
__ enter();
|
||||
OopMap* map = save_live_registers(sasm);
|
||||
int call_offset;
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
#include "asm/assembler.inline.hpp"
|
||||
#include "opto/c2_MacroAssembler.hpp"
|
||||
#include "opto/intrinsicnode.hpp"
|
||||
#include "opto/matcher.hpp"
|
||||
#include "opto/output.hpp"
|
||||
#include "opto/subnode.hpp"
|
||||
#include "runtime/stubRoutines.hpp"
|
||||
|
||||
@@ -42,6 +44,21 @@
|
||||
|
||||
typedef void (MacroAssembler::* chr_insn)(Register Rt, const Address &adr);
|
||||
|
||||
void C2_MacroAssembler::emit_entry_barrier_stub(C2EntryBarrierStub* stub) {
|
||||
bind(stub->slow_path());
|
||||
movptr(rscratch1, (uintptr_t) StubRoutines::aarch64::method_entry_barrier());
|
||||
blr(rscratch1);
|
||||
b(stub->continuation());
|
||||
|
||||
bind(stub->guard());
|
||||
relocate(entry_guard_Relocation::spec());
|
||||
emit_int32(0); // nmethod guard value
|
||||
}
|
||||
|
||||
int C2_MacroAssembler::entry_barrier_stub_size() {
|
||||
return 4 * 6;
|
||||
}
|
||||
|
||||
// Search for str1 in str2 and return index or -1
|
||||
void C2_MacroAssembler::string_indexof(Register str2, Register str1,
|
||||
Register cnt2, Register cnt1,
|
||||
@@ -1030,6 +1047,66 @@ void C2_MacroAssembler::sve_vmask_tolong(Register dst, PRegister src, BasicType
|
||||
}
|
||||
}
|
||||
|
||||
// Unpack the mask, a long value in src, into predicate register dst based on the
|
||||
// corresponding data type. Note that dst can support at most 64 lanes.
|
||||
// Below example gives the expected dst predicate register in different types, with
|
||||
// a valid src(0x658D) on a 1024-bit vector size machine.
|
||||
// BYTE: dst = 0x00 00 00 00 00 00 00 00 00 00 00 00 00 00 65 8D
|
||||
// SHORT: dst = 0x00 00 00 00 00 00 00 00 00 00 00 00 14 11 40 51
|
||||
// INT: dst = 0x00 00 00 00 00 00 00 00 01 10 01 01 10 00 11 01
|
||||
// LONG: dst = 0x00 01 01 00 00 01 00 01 01 00 00 00 01 01 00 01
|
||||
//
|
||||
// The number of significant bits of src must be equal to lane_cnt. E.g., 0xFF658D which
|
||||
// has 24 significant bits would be an invalid input if dst predicate register refers to
|
||||
// a LONG type 1024-bit vector, which has at most 16 lanes.
|
||||
void C2_MacroAssembler::sve_vmask_fromlong(PRegister dst, Register src, BasicType bt, int lane_cnt,
|
||||
FloatRegister vtmp1, FloatRegister vtmp2) {
|
||||
assert(UseSVE == 2 && VM_Version::supports_svebitperm() &&
|
||||
lane_cnt <= 64 && is_power_of_2(lane_cnt), "unsupported");
|
||||
Assembler::SIMD_RegVariant size = elemType_to_regVariant(bt);
|
||||
// Example: src = 0x658D, bt = T_BYTE, size = B, lane_cnt = 16
|
||||
// Expected: dst = 0b01101001 10001101
|
||||
|
||||
// Put long value from general purpose register into the first lane of vector.
|
||||
// vtmp1 = 0x0000000000000000 | 0x000000000000658D
|
||||
sve_dup(vtmp1, B, 0);
|
||||
mov(vtmp1, D, 0, src);
|
||||
|
||||
// As sve_cmp generates mask value with the minimum unit in byte, we should
|
||||
// transform the value in the first lane which is mask in bit now to the
|
||||
// mask in byte, which can be done by SVE2's BDEP instruction.
|
||||
|
||||
// The first source input of BDEP instruction. Deposite each byte in every 8 bytes.
|
||||
// vtmp1 = 0x0000000000000065 | 0x000000000000008D
|
||||
if (lane_cnt <= 8) {
|
||||
// Nothing. As only one byte exsits.
|
||||
} else if (lane_cnt <= 16) {
|
||||
ins(vtmp1, B, vtmp1, 8, 1);
|
||||
mov(vtmp1, B, 1, zr);
|
||||
} else {
|
||||
sve_vector_extend(vtmp1, D, vtmp1, B);
|
||||
}
|
||||
|
||||
// The second source input of BDEP instruction, initialized with 0x01 for each byte.
|
||||
// vtmp2 = 0x01010101 0x01010101 0x01010101 0x01010101
|
||||
sve_dup(vtmp2, B, 1);
|
||||
|
||||
// BDEP vtmp1.D, vtmp1.D, vtmp2.D
|
||||
// vtmp1 = 0x0000000000000065 | 0x000000000000008D
|
||||
// vtmp2 = 0x0101010101010101 | 0x0101010101010101
|
||||
// ---------------------------------------
|
||||
// vtmp1 = 0x0001010000010001 | 0x0100000001010001
|
||||
sve_bdep(vtmp1, D, vtmp1, vtmp2);
|
||||
|
||||
if (bt != T_BYTE) {
|
||||
sve_vector_extend(vtmp1, size, vtmp1, B);
|
||||
}
|
||||
// Generate mask according to the given vector, in which the elements have been
|
||||
// extended to expected type.
|
||||
// dst = 0b01101001 10001101
|
||||
sve_cmp(Assembler::NE, dst, size, ptrue, vtmp1, 0);
|
||||
}
|
||||
|
||||
void C2_MacroAssembler::sve_compare(PRegister pd, BasicType bt, PRegister pg,
|
||||
FloatRegister zn, FloatRegister zm, int cond) {
|
||||
assert(pg->is_governing(), "This register has to be a governing predicate register");
|
||||
@@ -1113,10 +1190,12 @@ void C2_MacroAssembler::sve_vector_narrow(FloatRegister dst, SIMD_RegVariant dst
|
||||
sve_uzp1(dst, S, src, tmp);
|
||||
break;
|
||||
case H:
|
||||
assert_different_registers(dst, tmp);
|
||||
sve_uzp1(dst, S, src, tmp);
|
||||
sve_uzp1(dst, H, dst, tmp);
|
||||
break;
|
||||
case B:
|
||||
assert_different_registers(dst, tmp);
|
||||
sve_uzp1(dst, S, src, tmp);
|
||||
sve_uzp1(dst, H, dst, tmp);
|
||||
sve_uzp1(dst, B, dst, tmp);
|
||||
@@ -1128,6 +1207,7 @@ void C2_MacroAssembler::sve_vector_narrow(FloatRegister dst, SIMD_RegVariant dst
|
||||
if (dst_size == H) {
|
||||
sve_uzp1(dst, H, src, tmp);
|
||||
} else { // B
|
||||
assert_different_registers(dst, tmp);
|
||||
sve_uzp1(dst, H, src, tmp);
|
||||
sve_uzp1(dst, B, dst, tmp);
|
||||
}
|
||||
@@ -1275,35 +1355,214 @@ void C2_MacroAssembler::sve_reduce_integral(int opc, Register dst, BasicType bt,
|
||||
}
|
||||
}
|
||||
|
||||
// Set elements of the dst predicate to true if the element number is
|
||||
// in the range of [0, lane_cnt), or to false otherwise.
|
||||
void C2_MacroAssembler::sve_ptrue_lanecnt(PRegister dst, SIMD_RegVariant size, int lane_cnt) {
|
||||
// Set elements of the dst predicate to true for lanes in the range of [0, lane_cnt), or
|
||||
// to false otherwise. The input "lane_cnt" should be smaller than or equal to the supported
|
||||
// max vector length of the basic type. Clobbers: rscratch1 and the rFlagsReg.
|
||||
void C2_MacroAssembler::sve_gen_mask_imm(PRegister dst, BasicType bt, uint32_t lane_cnt) {
|
||||
uint32_t max_vector_length = Matcher::max_vector_size(bt);
|
||||
assert(lane_cnt <= max_vector_length, "unsupported input lane_cnt");
|
||||
|
||||
// Set all elements to false if the input "lane_cnt" is zero.
|
||||
if (lane_cnt == 0) {
|
||||
sve_pfalse(dst);
|
||||
return;
|
||||
}
|
||||
|
||||
SIMD_RegVariant size = elemType_to_regVariant(bt);
|
||||
assert(size != Q, "invalid size");
|
||||
|
||||
// Set all true if "lane_cnt" equals to the max lane count.
|
||||
if (lane_cnt == max_vector_length) {
|
||||
sve_ptrue(dst, size, /* ALL */ 0b11111);
|
||||
return;
|
||||
}
|
||||
|
||||
// Fixed numbers for "ptrue".
|
||||
switch(lane_cnt) {
|
||||
case 1: /* VL1 */
|
||||
case 2: /* VL2 */
|
||||
case 3: /* VL3 */
|
||||
case 4: /* VL4 */
|
||||
case 5: /* VL5 */
|
||||
case 6: /* VL6 */
|
||||
case 7: /* VL7 */
|
||||
case 8: /* VL8 */
|
||||
sve_ptrue(dst, size, lane_cnt);
|
||||
case 1: /* VL1 */
|
||||
case 2: /* VL2 */
|
||||
case 3: /* VL3 */
|
||||
case 4: /* VL4 */
|
||||
case 5: /* VL5 */
|
||||
case 6: /* VL6 */
|
||||
case 7: /* VL7 */
|
||||
case 8: /* VL8 */
|
||||
sve_ptrue(dst, size, lane_cnt);
|
||||
return;
|
||||
case 16:
|
||||
sve_ptrue(dst, size, /* VL16 */ 0b01001);
|
||||
return;
|
||||
case 32:
|
||||
sve_ptrue(dst, size, /* VL32 */ 0b01010);
|
||||
return;
|
||||
case 64:
|
||||
sve_ptrue(dst, size, /* VL64 */ 0b01011);
|
||||
return;
|
||||
case 128:
|
||||
sve_ptrue(dst, size, /* VL128 */ 0b01100);
|
||||
return;
|
||||
case 256:
|
||||
sve_ptrue(dst, size, /* VL256 */ 0b01101);
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Special patterns for "ptrue".
|
||||
if (lane_cnt == round_down_power_of_2(max_vector_length)) {
|
||||
sve_ptrue(dst, size, /* POW2 */ 0b00000);
|
||||
} else if (lane_cnt == max_vector_length - (max_vector_length % 4)) {
|
||||
sve_ptrue(dst, size, /* MUL4 */ 0b11101);
|
||||
} else if (lane_cnt == max_vector_length - (max_vector_length % 3)) {
|
||||
sve_ptrue(dst, size, /* MUL3 */ 0b11110);
|
||||
} else {
|
||||
// Encode to "whilelow" for the remaining cases.
|
||||
mov(rscratch1, lane_cnt);
|
||||
sve_whilelow(dst, size, zr, rscratch1);
|
||||
}
|
||||
}
|
||||
|
||||
// Pack active elements of src, under the control of mask, into the lowest-numbered elements of dst.
|
||||
// Any remaining elements of dst will be filled with zero.
|
||||
// Clobbers: rscratch1
|
||||
// Preserves: src, mask
|
||||
void C2_MacroAssembler::sve_compress_short(FloatRegister dst, FloatRegister src, PRegister mask,
|
||||
FloatRegister vtmp1, FloatRegister vtmp2,
|
||||
PRegister pgtmp) {
|
||||
assert(pgtmp->is_governing(), "This register has to be a governing predicate register");
|
||||
assert_different_registers(dst, src, vtmp1, vtmp2);
|
||||
assert_different_registers(mask, pgtmp);
|
||||
|
||||
// Example input: src = 8888 7777 6666 5555 4444 3333 2222 1111
|
||||
// mask = 0001 0000 0000 0001 0001 0000 0001 0001
|
||||
// Expected result: dst = 0000 0000 0000 8888 5555 4444 2222 1111
|
||||
sve_dup(vtmp2, H, 0);
|
||||
|
||||
// Extend lowest half to type INT.
|
||||
// dst = 00004444 00003333 00002222 00001111
|
||||
sve_uunpklo(dst, S, src);
|
||||
// pgtmp = 00000001 00000000 00000001 00000001
|
||||
sve_punpklo(pgtmp, mask);
|
||||
// Pack the active elements in size of type INT to the right,
|
||||
// and fill the remainings with zero.
|
||||
// dst = 00000000 00004444 00002222 00001111
|
||||
sve_compact(dst, S, dst, pgtmp);
|
||||
// Narrow the result back to type SHORT.
|
||||
// dst = 0000 0000 0000 0000 0000 4444 2222 1111
|
||||
sve_uzp1(dst, H, dst, vtmp2);
|
||||
// Count the active elements of lowest half.
|
||||
// rscratch1 = 3
|
||||
sve_cntp(rscratch1, S, ptrue, pgtmp);
|
||||
|
||||
// Repeat to the highest half.
|
||||
// pgtmp = 00000001 00000000 00000000 00000001
|
||||
sve_punpkhi(pgtmp, mask);
|
||||
// vtmp1 = 00008888 00007777 00006666 00005555
|
||||
sve_uunpkhi(vtmp1, S, src);
|
||||
// vtmp1 = 00000000 00000000 00008888 00005555
|
||||
sve_compact(vtmp1, S, vtmp1, pgtmp);
|
||||
// vtmp1 = 0000 0000 0000 0000 0000 0000 8888 5555
|
||||
sve_uzp1(vtmp1, H, vtmp1, vtmp2);
|
||||
|
||||
// Compressed low: dst = 0000 0000 0000 0000 0000 4444 2222 1111
|
||||
// Compressed high: vtmp1 = 0000 0000 0000 0000 0000 0000 8888 5555
|
||||
// Left shift(cross lane) compressed high with TRUE_CNT lanes,
|
||||
// TRUE_CNT is the number of active elements in the compressed low.
|
||||
neg(rscratch1, rscratch1);
|
||||
// vtmp2 = {4 3 2 1 0 -1 -2 -3}
|
||||
sve_index(vtmp2, H, rscratch1, 1);
|
||||
// vtmp1 = 0000 0000 0000 8888 5555 0000 0000 0000
|
||||
sve_tbl(vtmp1, H, vtmp1, vtmp2);
|
||||
|
||||
// Combine the compressed high(after shifted) with the compressed low.
|
||||
// dst = 0000 0000 0000 8888 5555 4444 2222 1111
|
||||
sve_orr(dst, dst, vtmp1);
|
||||
}
|
||||
|
||||
// Clobbers: rscratch1, rscratch2
|
||||
// Preserves: src, mask
|
||||
void C2_MacroAssembler::sve_compress_byte(FloatRegister dst, FloatRegister src, PRegister mask,
|
||||
FloatRegister vtmp1, FloatRegister vtmp2,
|
||||
FloatRegister vtmp3, FloatRegister vtmp4,
|
||||
PRegister ptmp, PRegister pgtmp) {
|
||||
assert(pgtmp->is_governing(), "This register has to be a governing predicate register");
|
||||
assert_different_registers(dst, src, vtmp1, vtmp2, vtmp3, vtmp4);
|
||||
assert_different_registers(mask, ptmp, pgtmp);
|
||||
// Example input: src = 88 77 66 55 44 33 22 11
|
||||
// mask = 01 00 00 01 01 00 01 01
|
||||
// Expected result: dst = 00 00 00 88 55 44 22 11
|
||||
|
||||
sve_dup(vtmp4, B, 0);
|
||||
// Extend lowest half to type SHORT.
|
||||
// vtmp1 = 0044 0033 0022 0011
|
||||
sve_uunpklo(vtmp1, H, src);
|
||||
// ptmp = 0001 0000 0001 0001
|
||||
sve_punpklo(ptmp, mask);
|
||||
// Count the active elements of lowest half.
|
||||
// rscratch2 = 3
|
||||
sve_cntp(rscratch2, H, ptrue, ptmp);
|
||||
// Pack the active elements in size of type SHORT to the right,
|
||||
// and fill the remainings with zero.
|
||||
// dst = 0000 0044 0022 0011
|
||||
sve_compress_short(dst, vtmp1, ptmp, vtmp2, vtmp3, pgtmp);
|
||||
// Narrow the result back to type BYTE.
|
||||
// dst = 00 00 00 00 00 44 22 11
|
||||
sve_uzp1(dst, B, dst, vtmp4);
|
||||
|
||||
// Repeat to the highest half.
|
||||
// ptmp = 0001 0000 0000 0001
|
||||
sve_punpkhi(ptmp, mask);
|
||||
// vtmp1 = 0088 0077 0066 0055
|
||||
sve_uunpkhi(vtmp2, H, src);
|
||||
// vtmp1 = 0000 0000 0088 0055
|
||||
sve_compress_short(vtmp1, vtmp2, ptmp, vtmp3, vtmp4, pgtmp);
|
||||
|
||||
sve_dup(vtmp4, B, 0);
|
||||
// vtmp1 = 00 00 00 00 00 00 88 55
|
||||
sve_uzp1(vtmp1, B, vtmp1, vtmp4);
|
||||
|
||||
// Compressed low: dst = 00 00 00 00 00 44 22 11
|
||||
// Compressed high: vtmp1 = 00 00 00 00 00 00 88 55
|
||||
// Left shift(cross lane) compressed high with TRUE_CNT lanes,
|
||||
// TRUE_CNT is the number of active elements in the compressed low.
|
||||
neg(rscratch2, rscratch2);
|
||||
// vtmp2 = {4 3 2 1 0 -1 -2 -3}
|
||||
sve_index(vtmp2, B, rscratch2, 1);
|
||||
// vtmp1 = 00 00 00 88 55 00 00 00
|
||||
sve_tbl(vtmp1, B, vtmp1, vtmp2);
|
||||
// Combine the compressed high(after shifted) with the compressed low.
|
||||
// dst = 00 00 00 88 55 44 22 11
|
||||
sve_orr(dst, dst, vtmp1);
|
||||
}
|
||||
|
||||
void C2_MacroAssembler::neon_reverse_bits(FloatRegister dst, FloatRegister src, BasicType bt, bool isQ) {
|
||||
assert(bt == T_BYTE || bt == T_SHORT || bt == T_INT || bt == T_LONG, "unsupported basic type");
|
||||
SIMD_Arrangement size = isQ ? T16B : T8B;
|
||||
if (bt == T_BYTE) {
|
||||
rbit(dst, size, src);
|
||||
} else {
|
||||
neon_reverse_bytes(dst, src, bt, isQ);
|
||||
rbit(dst, size, dst);
|
||||
}
|
||||
}
|
||||
|
||||
void C2_MacroAssembler::neon_reverse_bytes(FloatRegister dst, FloatRegister src, BasicType bt, bool isQ) {
|
||||
assert(bt == T_BYTE || bt == T_SHORT || bt == T_INT || bt == T_LONG, "unsupported basic type");
|
||||
SIMD_Arrangement size = isQ ? T16B : T8B;
|
||||
switch (bt) {
|
||||
case T_BYTE:
|
||||
if (dst != src) {
|
||||
orr(dst, size, src, src);
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
sve_ptrue(dst, size, /* VL16 */ 0b01001);
|
||||
case T_SHORT:
|
||||
rev16(dst, size, src);
|
||||
break;
|
||||
case 32:
|
||||
sve_ptrue(dst, size, /* VL32 */ 0b01010);
|
||||
case T_INT:
|
||||
rev32(dst, size, src);
|
||||
break;
|
||||
case 64:
|
||||
sve_ptrue(dst, size, /* VL64 */ 0b01011);
|
||||
break;
|
||||
case 128:
|
||||
sve_ptrue(dst, size, /* VL128 */ 0b01100);
|
||||
break;
|
||||
case 256:
|
||||
sve_ptrue(dst, size, /* VL256 */ 0b01101);
|
||||
case T_LONG:
|
||||
rev64(dst, size, src);
|
||||
break;
|
||||
default:
|
||||
assert(false, "unsupported");
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
// C2_MacroAssembler contains high-level macros for C2
|
||||
|
||||
public:
|
||||
void emit_entry_barrier_stub(C2EntryBarrierStub* stub);
|
||||
static int entry_barrier_stub_size();
|
||||
|
||||
void string_compare(Register str1, Register str2,
|
||||
Register cnt1, Register cnt2, Register result,
|
||||
@@ -64,6 +66,11 @@
|
||||
void sve_vmask_tolong(Register dst, PRegister src, BasicType bt, int lane_cnt,
|
||||
FloatRegister vtmp1, FloatRegister vtmp2);
|
||||
|
||||
// Unpack the mask, a long value in src, into predicate register dst based on the
|
||||
// corresponding data type. Note that dst can support at most 64 lanes.
|
||||
void sve_vmask_fromlong(PRegister dst, Register src, BasicType bt, int lane_cnt,
|
||||
FloatRegister vtmp1, FloatRegister vtmp2);
|
||||
|
||||
// SIMD&FP comparison
|
||||
void neon_compare(FloatRegister dst, BasicType bt, FloatRegister src1,
|
||||
FloatRegister src2, int cond, bool isQ);
|
||||
@@ -88,9 +95,11 @@
|
||||
void sve_reduce_integral(int opc, Register dst, BasicType bt, Register src1,
|
||||
FloatRegister src2, PRegister pg, FloatRegister tmp);
|
||||
|
||||
// Set elements of the dst predicate to true if the element number is
|
||||
// in the range of [0, lane_cnt), or to false otherwise.
|
||||
void sve_ptrue_lanecnt(PRegister dst, SIMD_RegVariant size, int lane_cnt);
|
||||
// Set elements of the dst predicate to true for lanes in the range of
|
||||
// [0, lane_cnt), or to false otherwise. The input "lane_cnt" should be
|
||||
// smaller than or equal to the supported max vector length of the basic
|
||||
// type. Clobbers: rscratch1 and the rFlagsReg.
|
||||
void sve_gen_mask_imm(PRegister dst, BasicType bt, uint32_t lane_cnt);
|
||||
|
||||
// Extract a scalar element from an sve vector at position 'idx'.
|
||||
// The input elements in src are expected to be of integral type.
|
||||
@@ -105,4 +114,20 @@
|
||||
FloatRegister tmp2, PRegister ptmp,
|
||||
SIMD_RegVariant T);
|
||||
|
||||
// Pack active elements of src, under the control of mask, into the
|
||||
// lowest-numbered elements of dst. Any remaining elements of dst will
|
||||
// be filled with zero.
|
||||
void sve_compress_byte(FloatRegister dst, FloatRegister src, PRegister mask,
|
||||
FloatRegister vtmp1, FloatRegister vtmp2,
|
||||
FloatRegister vtmp3, FloatRegister vtmp4,
|
||||
PRegister ptmp, PRegister pgtmp);
|
||||
|
||||
void sve_compress_short(FloatRegister dst, FloatRegister src, PRegister mask,
|
||||
FloatRegister vtmp1, FloatRegister vtmp2,
|
||||
PRegister pgtmp);
|
||||
|
||||
void neon_reverse_bits(FloatRegister dst, FloatRegister src, BasicType bt, bool isQ);
|
||||
|
||||
void neon_reverse_bytes(FloatRegister dst, FloatRegister src, BasicType bt, bool isQ);
|
||||
|
||||
#endif // CPU_AARCH64_C2_MACROASSEMBLER_AARCH64_HPP
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -22,15 +22,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef OS_AIX_OS_SHARE_AIX_HPP
|
||||
#define OS_AIX_OS_SHARE_AIX_HPP
|
||||
#include "precompiled.hpp"
|
||||
#include "asm/codeBuffer.inline.hpp"
|
||||
#include "asm/macroAssembler.hpp"
|
||||
|
||||
// misc
|
||||
void handle_unexpected_exception(Thread* thread, int sig, siginfo_t* info, address pc, address adjusted_pc);
|
||||
#ifndef PRODUCT
|
||||
void continue_with_dump(void);
|
||||
#endif
|
||||
|
||||
#define PROCFILE_LENGTH 128
|
||||
|
||||
#endif // OS_AIX_OS_SHARE_AIX_HPP
|
||||
bool CodeBuffer::pd_finalize_stubs() {
|
||||
return emit_shared_stubs_to_interp<MacroAssembler>(this, _shared_stub_to_interp_requests);
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@@ -28,8 +28,10 @@
|
||||
|
||||
private:
|
||||
void pd_initialize() {}
|
||||
bool pd_finalize_stubs();
|
||||
|
||||
public:
|
||||
void flush_bundle(bool start_new_bundle) {}
|
||||
static constexpr bool supports_shared_stubs() { return true; }
|
||||
|
||||
#endif // CPU_AARCH64_CODEBUFFER_AARCH64_HPP
|
||||
|
||||
@@ -153,6 +153,7 @@ inline void FreezeBase::relativize_interpreted_frame_metadata(const frame& f, co
|
||||
*hf.addr_at(frame::interpreter_frame_locals_offset) = frame::sender_sp_offset + f.interpreter_frame_method()->max_locals() - 1;
|
||||
|
||||
relativize_one(vfp, hfp, frame::interpreter_frame_initial_sp_offset); // == block_top == block_bottom
|
||||
relativize_one(vfp, hfp, frame::interpreter_frame_extended_sp_offset);
|
||||
|
||||
assert((hf.fp() - hf.unextended_sp()) == (f.fp() - f.unextended_sp()), "");
|
||||
assert(hf.unextended_sp() == (intptr_t*)hf.at(frame::interpreter_frame_last_sp_offset), "");
|
||||
@@ -292,6 +293,7 @@ inline void ThawBase::derelativize_interpreted_frame_metadata(const frame& hf, c
|
||||
|
||||
derelativize_one(vfp, frame::interpreter_frame_last_sp_offset);
|
||||
derelativize_one(vfp, frame::interpreter_frame_initial_sp_offset);
|
||||
derelativize_one(vfp, frame::interpreter_frame_extended_sp_offset);
|
||||
}
|
||||
|
||||
inline void ThawBase::set_interpreter_frame_bottom(const frame& f, intptr_t* bottom) {
|
||||
|
||||
@@ -30,12 +30,12 @@
|
||||
#include "compiler/oopMap.hpp"
|
||||
#include "logging/logStream.hpp"
|
||||
#include "memory/resourceArea.hpp"
|
||||
#include "prims/universalNativeInvoker.hpp"
|
||||
#include "prims/downcallLinker.hpp"
|
||||
#include "runtime/stubCodeGenerator.hpp"
|
||||
|
||||
#define __ _masm->
|
||||
|
||||
class NativeInvokerGenerator : public StubCodeGenerator {
|
||||
class DowncallStubGenerator : public StubCodeGenerator {
|
||||
BasicType* _signature;
|
||||
int _num_args;
|
||||
BasicType _ret_bt;
|
||||
@@ -50,7 +50,7 @@ class NativeInvokerGenerator : public StubCodeGenerator {
|
||||
int _framesize;
|
||||
OopMapSet* _oop_maps;
|
||||
public:
|
||||
NativeInvokerGenerator(CodeBuffer* buffer,
|
||||
DowncallStubGenerator(CodeBuffer* buffer,
|
||||
BasicType* signature,
|
||||
int num_args,
|
||||
BasicType ret_bt,
|
||||
@@ -88,16 +88,16 @@ public:
|
||||
|
||||
static const int native_invoker_code_size = 1024;
|
||||
|
||||
RuntimeStub* ProgrammableInvoker::make_native_invoker(BasicType* signature,
|
||||
int num_args,
|
||||
BasicType ret_bt,
|
||||
const ABIDescriptor& abi,
|
||||
const GrowableArray<VMReg>& input_registers,
|
||||
const GrowableArray<VMReg>& output_registers,
|
||||
bool needs_return_buffer) {
|
||||
RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature,
|
||||
int num_args,
|
||||
BasicType ret_bt,
|
||||
const ABIDescriptor& abi,
|
||||
const GrowableArray<VMReg>& input_registers,
|
||||
const GrowableArray<VMReg>& output_registers,
|
||||
bool needs_return_buffer) {
|
||||
int locs_size = 64;
|
||||
CodeBuffer code("nep_invoker_blob", native_invoker_code_size, locs_size);
|
||||
NativeInvokerGenerator g(&code, signature, num_args, ret_bt, abi, input_registers, output_registers, needs_return_buffer);
|
||||
DowncallStubGenerator g(&code, signature, num_args, ret_bt, abi, input_registers, output_registers, needs_return_buffer);
|
||||
g.generate();
|
||||
code.log_section_sizes("nep_invoker_blob");
|
||||
|
||||
@@ -120,7 +120,7 @@ RuntimeStub* ProgrammableInvoker::make_native_invoker(BasicType* signature,
|
||||
return stub;
|
||||
}
|
||||
|
||||
void NativeInvokerGenerator::generate() {
|
||||
void DowncallStubGenerator::generate() {
|
||||
enum layout {
|
||||
rfp_off,
|
||||
rfp_off2,
|
||||
@@ -28,9 +28,8 @@
|
||||
#include "runtime/jniHandles.inline.hpp"
|
||||
#include "oops/typeArrayOop.inline.hpp"
|
||||
#include "oops/oopCast.inline.hpp"
|
||||
#include "opto/matcher.hpp"
|
||||
#include "prims/foreign_globals.hpp"
|
||||
#include "prims/foreign_globals.inline.hpp"
|
||||
#include "prims/foreignGlobals.hpp"
|
||||
#include "prims/foreignGlobals.inline.hpp"
|
||||
#include "utilities/formatBuffer.hpp"
|
||||
|
||||
bool ABIDescriptor::is_volatile_reg(Register reg) const {
|
||||
@@ -91,11 +90,7 @@ int RegSpiller::pd_reg_size(VMReg reg) {
|
||||
if (reg->is_Register()) {
|
||||
return 8;
|
||||
} else if (reg->is_FloatRegister()) {
|
||||
bool use_sve = Matcher::supports_scalable_vector();
|
||||
if (use_sve) {
|
||||
return Matcher::scalable_vector_reg_size(T_BYTE);
|
||||
}
|
||||
return 16;
|
||||
return 16; // Always spill/unspill Q registers
|
||||
}
|
||||
return 0; // stack and BAD
|
||||
}
|
||||
@@ -104,12 +99,7 @@ void RegSpiller::pd_store_reg(MacroAssembler* masm, int offset, VMReg reg) {
|
||||
if (reg->is_Register()) {
|
||||
masm->spill(reg->as_Register(), true, offset);
|
||||
} else if (reg->is_FloatRegister()) {
|
||||
bool use_sve = Matcher::supports_scalable_vector();
|
||||
if (use_sve) {
|
||||
masm->spill_sve_vector(reg->as_FloatRegister(), offset, Matcher::scalable_vector_reg_size(T_BYTE));
|
||||
} else {
|
||||
masm->spill(reg->as_FloatRegister(), masm->Q, offset);
|
||||
}
|
||||
masm->spill(reg->as_FloatRegister(), masm->Q, offset);
|
||||
} else {
|
||||
// stack and BAD
|
||||
}
|
||||
@@ -119,12 +109,7 @@ void RegSpiller::pd_load_reg(MacroAssembler* masm, int offset, VMReg reg) {
|
||||
if (reg->is_Register()) {
|
||||
masm->unspill(reg->as_Register(), true, offset);
|
||||
} else if (reg->is_FloatRegister()) {
|
||||
bool use_sve = Matcher::supports_scalable_vector();
|
||||
if (use_sve) {
|
||||
masm->unspill_sve_vector(reg->as_FloatRegister(), offset, Matcher::scalable_vector_reg_size(T_BYTE));
|
||||
} else {
|
||||
masm->unspill(reg->as_FloatRegister(), masm->Q, offset);
|
||||
}
|
||||
masm->unspill(reg->as_FloatRegister(), masm->Q, offset);
|
||||
} else {
|
||||
// stack and BAD
|
||||
}
|
||||
@@ -118,7 +118,7 @@ bool frame::safe_for_sender(JavaThread *thread) {
|
||||
if (is_entry_frame()) {
|
||||
// an entry frame must have a valid fp.
|
||||
return fp_safe && is_entry_frame_valid(thread);
|
||||
} else if (is_optimized_entry_frame()) {
|
||||
} else if (is_upcall_stub_frame()) {
|
||||
return fp_safe;
|
||||
}
|
||||
|
||||
@@ -222,7 +222,7 @@ bool frame::safe_for_sender(JavaThread *thread) {
|
||||
address jcw = (address)sender.entry_frame_call_wrapper();
|
||||
|
||||
return thread->is_in_stack_range_excl(jcw, (address)sender.fp());
|
||||
} else if (sender_blob->is_optimized_entry_blob()) {
|
||||
} else if (sender_blob->is_upcall_stub()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -354,6 +354,11 @@ void frame::interpreter_frame_set_last_sp(intptr_t* sp) {
|
||||
*((intptr_t**)addr_at(interpreter_frame_last_sp_offset)) = sp;
|
||||
}
|
||||
|
||||
// Used by template based interpreter deoptimization
|
||||
void frame::interpreter_frame_set_extended_sp(intptr_t* sp) {
|
||||
*((intptr_t**)addr_at(interpreter_frame_extended_sp_offset)) = sp;
|
||||
}
|
||||
|
||||
frame frame::sender_for_entry_frame(RegisterMap* map) const {
|
||||
assert(map != NULL, "map must be set");
|
||||
// Java frame called from C; skip all C frames and return top C
|
||||
@@ -372,27 +377,27 @@ frame frame::sender_for_entry_frame(RegisterMap* map) const {
|
||||
return fr;
|
||||
}
|
||||
|
||||
OptimizedEntryBlob::FrameData* OptimizedEntryBlob::frame_data_for_frame(const frame& frame) const {
|
||||
assert(frame.is_optimized_entry_frame(), "wrong frame");
|
||||
UpcallStub::FrameData* UpcallStub::frame_data_for_frame(const frame& frame) const {
|
||||
assert(frame.is_upcall_stub_frame(), "wrong frame");
|
||||
// need unextended_sp here, since normal sp is wrong for interpreter callees
|
||||
return reinterpret_cast<OptimizedEntryBlob::FrameData*>(
|
||||
return reinterpret_cast<UpcallStub::FrameData*>(
|
||||
reinterpret_cast<address>(frame.unextended_sp()) + in_bytes(_frame_data_offset));
|
||||
}
|
||||
|
||||
bool frame::optimized_entry_frame_is_first() const {
|
||||
assert(is_optimized_entry_frame(), "must be optimzed entry frame");
|
||||
OptimizedEntryBlob* blob = _cb->as_optimized_entry_blob();
|
||||
bool frame::upcall_stub_frame_is_first() const {
|
||||
assert(is_upcall_stub_frame(), "must be optimzed entry frame");
|
||||
UpcallStub* blob = _cb->as_upcall_stub();
|
||||
JavaFrameAnchor* jfa = blob->jfa_for_frame(*this);
|
||||
return jfa->last_Java_sp() == NULL;
|
||||
}
|
||||
|
||||
frame frame::sender_for_optimized_entry_frame(RegisterMap* map) const {
|
||||
frame frame::sender_for_upcall_stub_frame(RegisterMap* map) const {
|
||||
assert(map != NULL, "map must be set");
|
||||
OptimizedEntryBlob* blob = _cb->as_optimized_entry_blob();
|
||||
UpcallStub* blob = _cb->as_upcall_stub();
|
||||
// Java frame called from C; skip all C frames and return top C
|
||||
// frame of that chunk as the sender
|
||||
JavaFrameAnchor* jfa = blob->jfa_for_frame(*this);
|
||||
assert(!optimized_entry_frame_is_first(), "must have a frame anchor to go back to");
|
||||
assert(!upcall_stub_frame_is_first(), "must have a frame anchor to go back to");
|
||||
assert(jfa->last_Java_sp() > sp(), "must be above this frame on stack");
|
||||
// Since we are walking the stack now this nested anchor is obviously walkable
|
||||
// even if it wasn't when it was stacked.
|
||||
@@ -420,7 +425,7 @@ void frame::verify_deopt_original_pc(CompiledMethod* nm, intptr_t* unextended_sp
|
||||
|
||||
address original_pc = nm->get_original_pc(&fr);
|
||||
assert(nm->insts_contains_inclusive(original_pc),
|
||||
"original PC must be in the main code section of the the compiled method (or must be immediately following it)");
|
||||
"original PC must be in the main code section of the compiled method (or must be immediately following it)");
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -599,6 +604,7 @@ void frame::describe_pd(FrameValues& values, int frame_no) {
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_method);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_mdp);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_extended_sp);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_mirror);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_cache);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_locals);
|
||||
@@ -606,13 +612,21 @@ void frame::describe_pd(FrameValues& values, int frame_no) {
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_initial_sp);
|
||||
}
|
||||
|
||||
intptr_t* ret_pc_loc = sp() - return_addr_offset;
|
||||
address ret_pc = *(address*)ret_pc_loc;
|
||||
if (Continuation::is_return_barrier_entry(ret_pc))
|
||||
values.describe(frame_no, ret_pc_loc, "return address (return barrier)");
|
||||
else
|
||||
values.describe(frame_no, ret_pc_loc, err_msg("return address for #%d", frame_no));
|
||||
values.describe(frame_no, sp() - sender_sp_offset, err_msg("saved fp for #%d", frame_no), 0);
|
||||
if (is_java_frame() || Continuation::is_continuation_enterSpecial(*this)) {
|
||||
intptr_t* ret_pc_loc;
|
||||
intptr_t* fp_loc;
|
||||
if (is_interpreted_frame()) {
|
||||
ret_pc_loc = fp() + return_addr_offset;
|
||||
fp_loc = fp();
|
||||
} else {
|
||||
ret_pc_loc = real_fp() - return_addr_offset;
|
||||
fp_loc = real_fp() - sender_sp_offset;
|
||||
}
|
||||
address ret_pc = *(address*)ret_pc_loc;
|
||||
values.describe(frame_no, ret_pc_loc,
|
||||
Continuation::is_return_barrier_entry(ret_pc) ? "return address (return barrier)" : "return address");
|
||||
values.describe(-1, fp_loc, "saved fp", 0); // "unowned" as value belongs to sender
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -662,6 +676,8 @@ void internal_pf(uintptr_t sp, uintptr_t fp, uintptr_t pc, uintptr_t bcx) {
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_method);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_mdp);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_extended_sp);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_mirror);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_cache);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_locals);
|
||||
DESCRIBE_FP_OFFSET(interpreter_frame_bcp);
|
||||
@@ -723,9 +739,15 @@ extern "C" void pf(uintptr_t sp, uintptr_t fp, uintptr_t pc,
|
||||
uintptr_t bcx, uintptr_t thread) {
|
||||
if (!reg_map) {
|
||||
reg_map = NEW_C_HEAP_OBJ(RegisterMap, mtInternal);
|
||||
::new (reg_map) RegisterMap((JavaThread*)thread, false);
|
||||
::new (reg_map) RegisterMap((JavaThread*)thread,
|
||||
RegisterMap::UpdateMap::skip,
|
||||
RegisterMap::ProcessFrames::include,
|
||||
RegisterMap::WalkContinuation::skip);
|
||||
} else {
|
||||
*reg_map = RegisterMap((JavaThread*)thread, false);
|
||||
*reg_map = RegisterMap((JavaThread*)thread,
|
||||
RegisterMap::UpdateMap::skip,
|
||||
RegisterMap::ProcessFrames::include,
|
||||
RegisterMap::WalkContinuation::skip);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -764,4 +786,3 @@ void JavaFrameAnchor::make_walkable() {
|
||||
_last_Java_pc = (address)_last_Java_sp[-1];
|
||||
vmassert(walkable(), "something went wrong");
|
||||
}
|
||||
|
||||
|
||||
@@ -47,13 +47,13 @@
|
||||
// [constant pool cache ] = cache() cache_offset
|
||||
|
||||
// [klass of method ] = mirror() mirror_offset
|
||||
// [padding ]
|
||||
// [extended SP ] extended_sp offset
|
||||
|
||||
// [methodData ] = mdp() mdx_offset
|
||||
// [Method ] = method() method_offset
|
||||
|
||||
// [last esp ] = last_sp() last_sp_offset
|
||||
// [old stack pointer ] (sender_sp) sender_sp_offset
|
||||
// [sender's SP ] (sender_sp) sender_sp_offset
|
||||
|
||||
// [old frame pointer ] <- fp = link()
|
||||
// [return pc ]
|
||||
@@ -82,8 +82,8 @@
|
||||
interpreter_frame_last_sp_offset = interpreter_frame_sender_sp_offset - 1,
|
||||
interpreter_frame_method_offset = interpreter_frame_last_sp_offset - 1,
|
||||
interpreter_frame_mdp_offset = interpreter_frame_method_offset - 1,
|
||||
interpreter_frame_padding_offset = interpreter_frame_mdp_offset - 1,
|
||||
interpreter_frame_mirror_offset = interpreter_frame_padding_offset - 1,
|
||||
interpreter_frame_extended_sp_offset = interpreter_frame_mdp_offset - 1,
|
||||
interpreter_frame_mirror_offset = interpreter_frame_extended_sp_offset - 1,
|
||||
interpreter_frame_cache_offset = interpreter_frame_mirror_offset - 1,
|
||||
interpreter_frame_locals_offset = interpreter_frame_cache_offset - 1,
|
||||
interpreter_frame_bcp_offset = interpreter_frame_locals_offset - 1,
|
||||
@@ -182,6 +182,8 @@
|
||||
// expression stack tos if we are nested in a java call
|
||||
intptr_t* interpreter_frame_last_sp() const;
|
||||
|
||||
void interpreter_frame_set_extended_sp(intptr_t* sp);
|
||||
|
||||
template <typename RegisterMapT>
|
||||
static void update_map_with_saved_link(RegisterMapT* map, intptr_t** link_addr);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user