@@ -952,8 +952,10 @@ class StubGenerator: public StubCodeGenerator {
952952 address start_pc = __ pc ();
953953 Register tmp1 = R6_ARG4;
954954 // probably copy stub would have changed value reset it.
955- __ load_const_optimized (tmp1, VM_Version::_dscr_val);
956- __ mtdscr (tmp1);
955+ if (VM_Version::has_mfdscr ()) {
956+ __ load_const_optimized (tmp1, VM_Version::_dscr_val);
957+ __ mtdscr (tmp1);
958+ }
957959 __ li (R3_RET, 0 ); // return 0
958960 __ blr ();
959961 return start_pc;
@@ -1070,9 +1072,10 @@ class StubGenerator: public StubCodeGenerator {
10701072 __ dcbt (R3_ARG1, 0 );
10711073
10721074 // If supported set DSCR pre-fetch to deepest.
1073- __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1074- __ mtdscr (tmp2);
1075-
1075+ if (VM_Version::has_mfdscr ()) {
1076+ __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1077+ __ mtdscr (tmp2);
1078+ }
10761079 __ li (tmp1, 16 );
10771080
10781081 // Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1092,8 +1095,10 @@ class StubGenerator: public StubCodeGenerator {
10921095 __ bdnz (l_10); // Dec CTR and loop if not zero.
10931096
10941097 // Restore DSCR pre-fetch value.
1095- __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1096- __ mtdscr (tmp2);
1098+ if (VM_Version::has_mfdscr ()) {
1099+ __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1100+ __ mtdscr (tmp2);
1101+ }
10971102
10981103 } // FasterArrayCopy
10991104
@@ -1344,8 +1349,10 @@ class StubGenerator: public StubCodeGenerator {
13441349 __ dcbt (R3_ARG1, 0 );
13451350
13461351 // If supported set DSCR pre-fetch to deepest.
1347- __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1348- __ mtdscr (tmp2);
1352+ if (VM_Version::has_mfdscr ()) {
1353+ __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1354+ __ mtdscr (tmp2);
1355+ }
13491356 __ li (tmp1, 16 );
13501357
13511358 // Backbranch target aligned to 32-byte. It's not aligned 16-byte
@@ -1365,8 +1372,11 @@ class StubGenerator: public StubCodeGenerator {
13651372 __ bdnz (l_9); // Dec CTR and loop if not zero.
13661373
13671374 // Restore DSCR pre-fetch value.
1368- __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1369- __ mtdscr (tmp2);
1375+ if (VM_Version::has_mfdscr ()) {
1376+ __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1377+ __ mtdscr (tmp2);
1378+ }
1379+
13701380 } // FasterArrayCopy
13711381 __ bind (l_6);
13721382
@@ -1527,9 +1537,10 @@ class StubGenerator: public StubCodeGenerator {
15271537 __ dcbt (R3_ARG1, 0 );
15281538
15291539 // Set DSCR pre-fetch to deepest.
1530- __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1531- __ mtdscr (tmp2);
1532-
1540+ if (VM_Version::has_mfdscr ()) {
1541+ __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1542+ __ mtdscr (tmp2);
1543+ }
15331544 __ li (tmp1, 16 );
15341545
15351546 // Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1549,9 +1560,10 @@ class StubGenerator: public StubCodeGenerator {
15491560 __ bdnz (l_7); // Dec CTR and loop if not zero.
15501561
15511562 // Restore DSCR pre-fetch value.
1552- __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1553- __ mtdscr (tmp2);
1554-
1563+ if (VM_Version::has_mfdscr ()) {
1564+ __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1565+ __ mtdscr (tmp2);
1566+ }
15551567
15561568 } // FasterArrayCopy
15571569
@@ -1672,9 +1684,10 @@ class StubGenerator: public StubCodeGenerator {
16721684 __ dcbt (R3_ARG1, 0 );
16731685
16741686 // Set DSCR pre-fetch to deepest.
1675- __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1676- __ mtdscr (tmp2);
1677-
1687+ if (VM_Version::has_mfdscr ()) {
1688+ __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1689+ __ mtdscr (tmp2);
1690+ }
16781691 __ li (tmp1, 16 );
16791692
16801693 // Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1694,8 +1707,10 @@ class StubGenerator: public StubCodeGenerator {
16941707 __ bdnz (l_4);
16951708
16961709 // Restore DSCR pre-fetch value.
1697- __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1698- __ mtdscr (tmp2);
1710+ if (VM_Version::has_mfdscr ()) {
1711+ __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1712+ __ mtdscr (tmp2);
1713+ }
16991714
17001715 __ cmpwi (CR0, R5_ARG3, 0 );
17011716 __ beq (CR0, l_6);
@@ -1788,9 +1803,10 @@ class StubGenerator: public StubCodeGenerator {
17881803 __ dcbt (R3_ARG1, 0 );
17891804
17901805 // Set DSCR pre-fetch to deepest.
1791- __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1792- __ mtdscr (tmp2);
1793-
1806+ if (VM_Version::has_mfdscr ()) {
1807+ __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1808+ __ mtdscr (tmp2);
1809+ }
17941810 __ li (tmp1, 16 );
17951811
17961812 // Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1810,8 +1826,10 @@ class StubGenerator: public StubCodeGenerator {
18101826 __ bdnz (l_5); // Dec CTR and loop if not zero.
18111827
18121828 // Restore DSCR pre-fetch value.
1813- __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1814- __ mtdscr (tmp2);
1829+ if (VM_Version::has_mfdscr ()) {
1830+ __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1831+ __ mtdscr (tmp2);
1832+ }
18151833
18161834 } // FasterArrayCopy
18171835
@@ -1910,9 +1928,10 @@ class StubGenerator: public StubCodeGenerator {
19101928 __ dcbt (R3_ARG1, 0 );
19111929
19121930 // Set DSCR pre-fetch to deepest.
1913- __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1914- __ mtdscr (tmp2);
1915-
1931+ if (VM_Version::has_mfdscr ()) {
1932+ __ load_const_optimized (tmp2, VM_Version::_dscr_val | 7 );
1933+ __ mtdscr (tmp2);
1934+ }
19161935 __ li (tmp1, 16 );
19171936
19181937 // Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1932,8 +1951,10 @@ class StubGenerator: public StubCodeGenerator {
19321951 __ bdnz (l_4);
19331952
19341953 // Restore DSCR pre-fetch value.
1935- __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1936- __ mtdscr (tmp2);
1954+ if (VM_Version::has_mfdscr ()) {
1955+ __ load_const_optimized (tmp2, VM_Version::_dscr_val);
1956+ __ mtdscr (tmp2);
1957+ }
19371958
19381959 __ cmpwi (CR0, R5_ARG3, 0 );
19391960 __ beq (CR0, l_1);
0 commit comments