@@ -952,8 +952,10 @@ class StubGenerator: public StubCodeGenerator {
952
952
address start_pc = __ pc ();
953
953
Register tmp1 = R6_ARG4;
954
954
// 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
+ }
957
959
__ li (R3_RET, 0 ); // return 0
958
960
__ blr ();
959
961
return start_pc;
@@ -1070,9 +1072,10 @@ class StubGenerator: public StubCodeGenerator {
1070
1072
__ dcbt (R3_ARG1, 0 );
1071
1073
1072
1074
// 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
+ }
1076
1079
__ li (tmp1, 16 );
1077
1080
1078
1081
// Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1092,8 +1095,10 @@ class StubGenerator: public StubCodeGenerator {
1092
1095
__ bdnz (l_10); // Dec CTR and loop if not zero.
1093
1096
1094
1097
// 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
+ }
1097
1102
1098
1103
} // FasterArrayCopy
1099
1104
@@ -1344,8 +1349,10 @@ class StubGenerator: public StubCodeGenerator {
1344
1349
__ dcbt (R3_ARG1, 0 );
1345
1350
1346
1351
// 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
+ }
1349
1356
__ li (tmp1, 16 );
1350
1357
1351
1358
// Backbranch target aligned to 32-byte. It's not aligned 16-byte
@@ -1365,8 +1372,11 @@ class StubGenerator: public StubCodeGenerator {
1365
1372
__ bdnz (l_9); // Dec CTR and loop if not zero.
1366
1373
1367
1374
// 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
+
1370
1380
} // FasterArrayCopy
1371
1381
__ bind (l_6);
1372
1382
@@ -1527,9 +1537,10 @@ class StubGenerator: public StubCodeGenerator {
1527
1537
__ dcbt (R3_ARG1, 0 );
1528
1538
1529
1539
// 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
+ }
1533
1544
__ li (tmp1, 16 );
1534
1545
1535
1546
// Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1549,9 +1560,10 @@ class StubGenerator: public StubCodeGenerator {
1549
1560
__ bdnz (l_7); // Dec CTR and loop if not zero.
1550
1561
1551
1562
// 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
+ }
1555
1567
1556
1568
} // FasterArrayCopy
1557
1569
@@ -1672,9 +1684,10 @@ class StubGenerator: public StubCodeGenerator {
1672
1684
__ dcbt (R3_ARG1, 0 );
1673
1685
1674
1686
// 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
+ }
1678
1691
__ li (tmp1, 16 );
1679
1692
1680
1693
// Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1694,8 +1707,10 @@ class StubGenerator: public StubCodeGenerator {
1694
1707
__ bdnz (l_4);
1695
1708
1696
1709
// 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
+ }
1699
1714
1700
1715
__ cmpwi (CR0, R5_ARG3, 0 );
1701
1716
__ beq (CR0, l_6);
@@ -1788,9 +1803,10 @@ class StubGenerator: public StubCodeGenerator {
1788
1803
__ dcbt (R3_ARG1, 0 );
1789
1804
1790
1805
// 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
+ }
1794
1810
__ li (tmp1, 16 );
1795
1811
1796
1812
// Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1810,8 +1826,10 @@ class StubGenerator: public StubCodeGenerator {
1810
1826
__ bdnz (l_5); // Dec CTR and loop if not zero.
1811
1827
1812
1828
// 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
+ }
1815
1833
1816
1834
} // FasterArrayCopy
1817
1835
@@ -1910,9 +1928,10 @@ class StubGenerator: public StubCodeGenerator {
1910
1928
__ dcbt (R3_ARG1, 0 );
1911
1929
1912
1930
// 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
+ }
1916
1935
__ li (tmp1, 16 );
1917
1936
1918
1937
// Backbranch target aligned to 32-byte. Not 16-byte align as
@@ -1932,8 +1951,10 @@ class StubGenerator: public StubCodeGenerator {
1932
1951
__ bdnz (l_4);
1933
1952
1934
1953
// 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
+ }
1937
1958
1938
1959
__ cmpwi (CR0, R5_ARG3, 0 );
1939
1960
__ beq (CR0, l_1);
0 commit comments