Last active
March 4, 2023 05:00
-
-
Save MasterDuke17/7c8c1862d593a8ea09e84051c6d2f435 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git lib/MAST/Ops.nqp lib/MAST/Ops.nqp | |
index 1adf3fc4a..8c4075191 100644 | |
--- lib/MAST/Ops.nqp | |
+++ lib/MAST/Ops.nqp | |
@@ -478,369 +478,369 @@ BEGIN { | |
1156, | |
1157, | |
1160, | |
- 1163, | |
- 1166, | |
- 1169, | |
- 1172, | |
- 1175, | |
+ 1164, | |
+ 1167, | |
+ 1170, | |
+ 1173, | |
1176, | |
1177, | |
- 1179, | |
- 1181, | |
+ 1178, | |
+ 1180, | |
1182, | |
1183, | |
1184, | |
- 1188, | |
- 1190, | |
- 1195, | |
- 1197, | |
- 1199, | |
- 1203, | |
- 1206, | |
- 1209, | |
+ 1185, | |
+ 1189, | |
+ 1191, | |
+ 1196, | |
+ 1198, | |
+ 1200, | |
+ 1204, | |
+ 1207, | |
1210, | |
1211, | |
1212, | |
- 1214, | |
- 1217, | |
- 1220, | |
- 1223, | |
+ 1213, | |
+ 1215, | |
+ 1218, | |
+ 1221, | |
1224, | |
1225, | |
1226, | |
1227, | |
1228, | |
1229, | |
- 1232, | |
+ 1230, | |
1233, | |
1234, | |
1235, | |
- 1243, | |
+ 1236, | |
1244, | |
1245, | |
1246, | |
- 1248, | |
+ 1247, | |
1249, | |
- 1252, | |
+ 1250, | |
1253, | |
- 1255, | |
+ 1254, | |
1256, | |
- 1258, | |
- 1261, | |
- 1264, | |
- 1267, | |
- 1269, | |
- 1272, | |
- 1275, | |
- 1278, | |
- 1280, | |
+ 1257, | |
+ 1259, | |
+ 1262, | |
+ 1265, | |
+ 1268, | |
+ 1270, | |
+ 1273, | |
+ 1276, | |
+ 1279, | |
1281, | |
1282, | |
1283, | |
1284, | |
- 1292, | |
- 1294, | |
- 1296, | |
- 1298, | |
- 1302, | |
- 1304, | |
- 1307, | |
- 1309, | |
- 1314, | |
+ 1285, | |
+ 1293, | |
+ 1295, | |
+ 1297, | |
+ 1299, | |
+ 1303, | |
+ 1305, | |
+ 1308, | |
+ 1310, | |
1315, | |
- 1318, | |
- 1320, | |
- 1322, | |
- 1324, | |
+ 1316, | |
+ 1319, | |
+ 1321, | |
+ 1323, | |
1325, | |
1326, | |
- 1328, | |
- 1331, | |
- 1335, | |
- 1338, | |
- 1340, | |
- 1344, | |
+ 1327, | |
+ 1329, | |
+ 1332, | |
+ 1336, | |
+ 1339, | |
+ 1341, | |
1345, | |
- 1348, | |
- 1348, | |
- 1350, | |
- 1353, | |
- 1356, | |
- 1359, | |
- 1363, | |
- 1370, | |
- 1374, | |
+ 1346, | |
+ 1349, | |
+ 1349, | |
+ 1351, | |
+ 1354, | |
+ 1357, | |
+ 1360, | |
+ 1364, | |
+ 1371, | |
1375, | |
1376, | |
- 1378, | |
- 1378, | |
+ 1377, | |
+ 1379, | |
1379, | |
1380, | |
1381, | |
1382, | |
- 1384, | |
+ 1383, | |
1385, | |
- 1388, | |
+ 1386, | |
1389, | |
1390, | |
1391, | |
- 1393, | |
- 1397, | |
- 1399, | |
- 1401, | |
- 1407, | |
+ 1392, | |
+ 1394, | |
+ 1398, | |
+ 1400, | |
+ 1402, | |
1408, | |
- 1415, | |
- 1420, | |
- 1426, | |
- 1433, | |
- 1436, | |
- 1442, | |
- 1447, | |
- 1453, | |
- 1455, | |
- 1457, | |
+ 1409, | |
+ 1416, | |
+ 1421, | |
+ 1427, | |
+ 1434, | |
+ 1437, | |
+ 1443, | |
+ 1448, | |
+ 1454, | |
+ 1456, | |
1458, | |
- 1460, | |
- 1462, | |
- 1464, | |
- 1467, | |
- 1470, | |
- 1473, | |
- 1476, | |
- 1480, | |
- 1484, | |
- 1488, | |
- 1492, | |
- 1492, | |
- 1496, | |
- 1503, | |
- 1505, | |
+ 1459, | |
+ 1461, | |
+ 1463, | |
+ 1465, | |
+ 1468, | |
+ 1471, | |
+ 1474, | |
+ 1477, | |
+ 1481, | |
+ 1485, | |
+ 1489, | |
+ 1493, | |
+ 1493, | |
+ 1497, | |
+ 1504, | |
1506, | |
1507, | |
- 1509, | |
- 1511, | |
- 1511, | |
- 1516, | |
- 1518, | |
- 1520, | |
- 1523, | |
- 1525, | |
- 1527, | |
- 1530, | |
- 1532, | |
- 1535, | |
- 1537, | |
- 1539, | |
- 1541, | |
- 1543, | |
- 1545, | |
- 1547, | |
- 1549, | |
- 1551, | |
- 1553, | |
+ 1508, | |
+ 1510, | |
+ 1512, | |
+ 1512, | |
+ 1517, | |
+ 1519, | |
+ 1521, | |
+ 1524, | |
+ 1526, | |
+ 1528, | |
+ 1531, | |
+ 1533, | |
+ 1536, | |
+ 1538, | |
+ 1540, | |
+ 1542, | |
+ 1544, | |
+ 1546, | |
+ 1548, | |
+ 1550, | |
+ 1552, | |
1554, | |
- 1556, | |
- 1556, | |
- 1558, | |
- 1560, | |
- 1562, | |
- 1564, | |
- 1566, | |
- 1568, | |
- 1571, | |
- 1574, | |
- 1577, | |
- 1582, | |
- 1587, | |
- 1592, | |
- 1596, | |
- 1600, | |
- 1604, | |
- 1606, | |
- 1610, | |
- 1613, | |
- 1615, | |
- 1618, | |
- 1620, | |
- 1624, | |
- 1627, | |
+ 1555, | |
+ 1557, | |
+ 1557, | |
+ 1559, | |
+ 1561, | |
+ 1563, | |
+ 1565, | |
+ 1567, | |
+ 1569, | |
+ 1572, | |
+ 1575, | |
+ 1578, | |
+ 1583, | |
+ 1588, | |
+ 1593, | |
+ 1597, | |
+ 1601, | |
+ 1605, | |
+ 1607, | |
+ 1611, | |
+ 1614, | |
+ 1616, | |
+ 1619, | |
+ 1621, | |
+ 1625, | |
1628, | |
1629, | |
1630, | |
- 1634, | |
- 1638, | |
- 1642, | |
- 1646, | |
- 1651, | |
- 1656, | |
- 1661, | |
- 1666, | |
- 1669, | |
- 1672, | |
- 1675, | |
- 1678, | |
- 1682, | |
- 1686, | |
- 1690, | |
- 1694, | |
- 1699, | |
- 1704, | |
- 1709, | |
- 1714, | |
- 1717, | |
- 1720, | |
- 1723, | |
- 1726, | |
- 1728, | |
- 1730, | |
- 1732, | |
- 1734, | |
- 1736, | |
- 1738, | |
- 1740, | |
- 1745, | |
- 1750, | |
- 1752, | |
- 1755, | |
- 1758, | |
- 1761, | |
- 1763, | |
- 1770, | |
- 1774, | |
- 1782, | |
- 1784, | |
- 1786, | |
+ 1631, | |
+ 1635, | |
+ 1639, | |
+ 1643, | |
+ 1647, | |
+ 1652, | |
+ 1657, | |
+ 1662, | |
+ 1667, | |
+ 1670, | |
+ 1673, | |
+ 1676, | |
+ 1679, | |
+ 1683, | |
+ 1687, | |
+ 1691, | |
+ 1695, | |
+ 1700, | |
+ 1705, | |
+ 1710, | |
+ 1715, | |
+ 1718, | |
+ 1721, | |
+ 1724, | |
+ 1727, | |
+ 1729, | |
+ 1731, | |
+ 1733, | |
+ 1735, | |
+ 1737, | |
+ 1739, | |
+ 1741, | |
+ 1746, | |
+ 1751, | |
+ 1753, | |
+ 1756, | |
+ 1759, | |
+ 1762, | |
+ 1764, | |
+ 1771, | |
+ 1775, | |
+ 1783, | |
+ 1785, | |
1787, | |
- 1790, | |
- 1795, | |
- 1799, | |
- 1801, | |
- 1803, | |
- 1805, | |
- 1807, | |
- 1810, | |
- 1812, | |
- 1814, | |
- 1816, | |
- 1818, | |
- 1820, | |
- 1822, | |
- 1824, | |
- 1829, | |
- 1833, | |
- 1838, | |
- 1840, | |
- 1842, | |
- 1844, | |
- 1846, | |
- 1848, | |
- 1851, | |
- 1853, | |
- 1856, | |
- 1859, | |
- 1863, | |
- 1866, | |
- 1869, | |
- 1871, | |
+ 1788, | |
+ 1791, | |
+ 1796, | |
+ 1800, | |
+ 1802, | |
+ 1804, | |
+ 1806, | |
+ 1808, | |
+ 1811, | |
+ 1813, | |
+ 1815, | |
+ 1817, | |
+ 1819, | |
+ 1821, | |
+ 1823, | |
+ 1825, | |
+ 1830, | |
+ 1834, | |
+ 1839, | |
+ 1841, | |
+ 1843, | |
+ 1845, | |
+ 1847, | |
+ 1849, | |
+ 1852, | |
+ 1854, | |
+ 1857, | |
+ 1860, | |
+ 1864, | |
+ 1867, | |
+ 1870, | |
1872, | |
- 1874, | |
- 1877, | |
- 1880, | |
+ 1873, | |
+ 1875, | |
+ 1878, | |
1881, | |
- 1884, | |
- 1887, | |
- 1889, | |
- 1891, | |
- 1894, | |
- 1896, | |
- 1898, | |
- 1902, | |
- 1904, | |
- 1908, | |
- 1910, | |
- 1912, | |
+ 1882, | |
+ 1885, | |
+ 1888, | |
+ 1890, | |
+ 1892, | |
+ 1895, | |
+ 1897, | |
+ 1899, | |
+ 1903, | |
+ 1905, | |
+ 1909, | |
+ 1911, | |
1913, | |
- 1919, | |
- 1921, | |
- 1923, | |
- 1927, | |
- 1929, | |
+ 1914, | |
+ 1920, | |
+ 1922, | |
+ 1924, | |
+ 1928, | |
1930, | |
- 1934, | |
- 1938, | |
- 1941, | |
- 1945, | |
- 1949, | |
- 1953, | |
- 1955, | |
- 1957, | |
- 1960, | |
- 1962, | |
- 1964, | |
- 1966, | |
- 1968, | |
- 1968, | |
+ 1931, | |
+ 1935, | |
+ 1939, | |
+ 1942, | |
+ 1946, | |
+ 1950, | |
+ 1954, | |
+ 1956, | |
+ 1958, | |
+ 1961, | |
+ 1963, | |
+ 1965, | |
+ 1967, | |
+ 1969, | |
1969, | |
- 1971, | |
- 1974, | |
- 1977, | |
- 1980, | |
- 1983, | |
- 1985, | |
- 1987, | |
- 1989, | |
- 1991, | |
- 1994, | |
- 2000, | |
- 2005, | |
- 2009, | |
- 2014, | |
+ 1970, | |
+ 1972, | |
+ 1975, | |
+ 1978, | |
+ 1981, | |
+ 1984, | |
+ 1986, | |
+ 1988, | |
+ 1990, | |
+ 1992, | |
+ 1995, | |
+ 2001, | |
+ 2006, | |
+ 2010, | |
2015, | |
2016, | |
- 2020, | |
- 2023, | |
- 2025, | |
- 2027, | |
+ 2017, | |
+ 2021, | |
+ 2024, | |
+ 2026, | |
2028, | |
2029, | |
2030, | |
- 2034, | |
- 2038, | |
- 2044, | |
- 2047, | |
- 2049, | |
- 2051, | |
- 2053, | |
- 2056, | |
- 2058, | |
+ 2031, | |
+ 2035, | |
+ 2039, | |
+ 2045, | |
+ 2048, | |
+ 2050, | |
+ 2052, | |
+ 2054, | |
+ 2057, | |
2059, | |
- 2061, | |
- 2065, | |
- 2069, | |
- 2073, | |
- 2077, | |
- 2081, | |
- 2085, | |
- 2089, | |
- 2091, | |
+ 2060, | |
+ 2062, | |
+ 2066, | |
+ 2070, | |
+ 2074, | |
+ 2078, | |
+ 2082, | |
+ 2086, | |
+ 2090, | |
2092, | |
2093, | |
2094, | |
- 2096, | |
+ 2095, | |
2097, | |
2098, | |
- 2100, | |
- 2103, | |
- 2106, | |
- 2109, | |
- 2112, | |
- 2114, | |
- 2117, | |
- 2120, | |
- 2123, | |
- 2125, | |
- 2127); | |
+ 2099, | |
+ 2101, | |
+ 2104, | |
+ 2107, | |
+ 2110, | |
+ 2113, | |
+ 2115, | |
+ 2118, | |
+ 2121, | |
+ 2124, | |
+ 2126, | |
+ 2128); | |
MAST::Ops.WHO<@counts> := nqp::list_i(0, | |
2, | |
2, | |
@@ -1315,7 +1315,7 @@ BEGIN { | |
3, | |
1, | |
3, | |
- 3, | |
+ 4, | |
3, | |
3, | |
3, | |
@@ -2839,8 +2839,9 @@ BEGIN { | |
162, | |
56, | |
104, | |
- 58, | |
- 57, | |
+ 66, | |
+ 65, | |
+ 65, | |
57, | |
57, | |
57, | |
@@ -3417,8 +3418,8 @@ BEGIN { | |
65, | |
58, | |
57, | |
- 65, | |
- 65, | |
+ 66, | |
+ 56, | |
162, | |
65, | |
33, | |
@@ -4250,6 +4251,7 @@ BEGIN { | |
'open_fh', 471, | |
'close_fh', 472, | |
'dispatch_u', 473, | |
+ 'getattrsref_u', 474, | |
'atposnd_u', 476, | |
'seek_fh', 477, | |
'lock_fh', 478, | |
@@ -4460,6 +4462,7 @@ BEGIN { | |
'ctxcode', 691, | |
'isrwcont', 692, | |
'fc', 693, | |
+ 'getlexref_nu', 694, | |
'atpos3d_u', 695, | |
'encoderep', 696, | |
'istty_fh', 697, | |
@@ -5023,6 +5026,7 @@ BEGIN { | |
'open_fh', | |
'close_fh', | |
'dispatch_u', | |
+ 'getattrsref_u', | |
'atposnd_u', | |
'seek_fh', | |
'lock_fh', | |
@@ -5233,6 +5237,7 @@ BEGIN { | |
'ctxcode', | |
'isrwcont', | |
'fc', | |
+ 'getlexref_nu', | |
'atpos3d_u', | |
'encoderep', | |
'istty_fh', | |
@@ -8666,6 +8671,15 @@ BEGIN { | |
my int $arg-offset := $elems + 10; | |
for @arg-indices -> $offset { nqp::writeuint($bytecode, $arg-offset, nqp::unbox_u($offset), 5); $arg-offset := $arg-offset + 2; } | |
}, | |
+ 'getattrsref_u', sub ($frame, $op0, $op1, $op2, $op3) { | |
+ my $bytecode := $frame.bytecode; | |
+ my uint $elems := nqp::elems($bytecode); | |
+ nqp::writeuint($bytecode, $elems, 474, 5); | |
+ my uint $index0 := nqp::unbox_u($op0); nqp::writeuint($bytecode, nqp::add_i($elems, 2), $index0, 5); | |
+ my uint $index1 := nqp::unbox_u($op1); nqp::writeuint($bytecode, nqp::add_i($elems, 4), $index1, 5); | |
+ my uint $index2 := nqp::unbox_u($op2); nqp::writeuint($bytecode, nqp::add_i($elems, 6), $index2, 5); | |
+ my uint $index3 := nqp::unbox_u($op3); nqp::writeuint($bytecode, nqp::add_i($elems, 8), $index3, 5); | |
+ }, | |
'atposnd_u', sub ($frame, $op0, $op1, $op2) { | |
my $bytecode := $frame.bytecode; | |
my uint $elems := nqp::elems($bytecode); | |
@@ -10263,6 +10277,13 @@ BEGIN { | |
my uint $index0 := nqp::unbox_u($op0); nqp::writeuint($bytecode, nqp::add_i($elems, 2), $index0, 5); | |
my uint $index1 := nqp::unbox_u($op1); nqp::writeuint($bytecode, nqp::add_i($elems, 4), $index1, 5); | |
}, | |
+ 'getlexref_nu', sub ($frame, $op0, str $op1) { | |
+ my $bytecode := $frame.bytecode; | |
+ my uint $elems := nqp::elems($bytecode); | |
+ nqp::writeuint($bytecode, $elems, 694, 5); | |
+ my uint $index0 := nqp::unbox_u($op0); nqp::writeuint($bytecode, nqp::add_i($elems, 2), $index0, 5); | |
+ my uint $index1 := $frame.add-string($op1); nqp::writeuint($bytecode, nqp::add_i($elems, 4), $index1, 9); | |
+ }, | |
'atpos3d_u', sub ($frame, $op0, $op1, $op2, $op3, $op4) { | |
my $bytecode := $frame.bytecode; | |
my uint $elems := nqp::elems($bytecode); | |
diff --git src/6model/reprs/NativeRef.c src/6model/reprs/NativeRef.c | |
index 00cfe7d6a..78b8d4475 100644 | |
--- src/6model/reprs/NativeRef.c | |
+++ src/6model/reprs/NativeRef.c | |
@@ -345,6 +345,17 @@ MVMObject * MVM_nativeref_lex_name_i(MVMThreadContext *tc, MVMString *name) { | |
return lexref_by_name(tc, ref_type, name, LEXREF_ANY_INT); | |
MVM_exception_throw_adhoc(tc, "No int lexical reference type registered for current HLL"); | |
} | |
+MVMObject * MVM_nativeref_lex_name_u(MVMThreadContext *tc, MVMString *name) { | |
+ MVMObject *ref_type; | |
+ MVMROOT(tc, name, { | |
+ MVM_frame_force_to_heap(tc, tc->cur_frame); | |
+ }); | |
+ ref_type = MVM_hll_current(tc)->uint_lex_ref; | |
+ if (ref_type) | |
+ /* LEXREF_ANY_INT will allow int8..int64 as well as uint8..uint64 */ | |
+ return lexref_by_name(tc, ref_type, name, LEXREF_ANY_INT); | |
+ MVM_exception_throw_adhoc(tc, "No uint lexical reference type registered for current HLL"); | |
+} | |
MVMObject * MVM_nativeref_lex_name_n(MVMThreadContext *tc, MVMString *name) { | |
MVMObject *ref_type; | |
MVMROOT(tc, name, { | |
diff --git src/6model/reprs/NativeRef.h src/6model/reprs/NativeRef.h | |
index bfb8b42a5..c8384d37e 100644 | |
--- src/6model/reprs/NativeRef.h | |
+++ src/6model/reprs/NativeRef.h | |
@@ -54,6 +54,7 @@ MVMObject * MVM_nativeref_lex_u(MVMThreadContext *tc, MVMuint16 outers, MVMuint1 | |
MVMObject * MVM_nativeref_lex_n(MVMThreadContext *tc, MVMuint16 outers, MVMuint16 idx); | |
MVMObject * MVM_nativeref_lex_s(MVMThreadContext *tc, MVMuint16 outers, MVMuint16 idx); | |
MVMObject * MVM_nativeref_lex_name_i(MVMThreadContext *tc, MVMString *name); | |
+MVMObject * MVM_nativeref_lex_name_u(MVMThreadContext *tc, MVMString *name); | |
MVMObject * MVM_nativeref_lex_name_n(MVMThreadContext *tc, MVMString *name); | |
MVMObject * MVM_nativeref_lex_name_s(MVMThreadContext *tc, MVMString *name); | |
MVMObject * MVM_nativeref_attr_i(MVMThreadContext *tc, MVMObject *obj, MVMObject *class_handle, MVMString *name); | |
diff --git src/6model/reprs/P6opaque.c src/6model/reprs/P6opaque.c | |
index 744a0b9e8..858d56e0c 100644 | |
--- src/6model/reprs/P6opaque.c | |
+++ src/6model/reprs/P6opaque.c | |
@@ -1706,6 +1706,33 @@ static void spesh(MVMThreadContext *tc, MVMSTable *st, MVMSpeshGraph *g, MVMSpes | |
} | |
break; | |
} | |
+ case MVM_OP_getattr_u: | |
+ case MVM_OP_getattrs_u: { | |
+ MVMSpeshFacts *obj_facts = MVM_spesh_get_and_use_facts(tc, g, ins->operands[1]); | |
+ MVMSpeshFacts *ch_facts = MVM_spesh_get_and_use_facts(tc, g, ins->operands[2]); | |
+ MVMString *name = spesh_attr_name(tc, g, ins->operands[3], opcode == MVM_OP_getattrs_u); | |
+ if (name && ch_facts->flags & MVM_SPESH_FACT_KNOWN_TYPE && ch_facts->type | |
+ && obj_facts->flags & MVM_SPESH_FACT_CONCRETE) { | |
+ MVMint64 slot = try_get_slot(tc, repr_data, ch_facts->type, name); | |
+ if (slot >= 0 && repr_data->flattened_stables[slot]) { | |
+ MVMSTable *flat_st = repr_data->flattened_stables[slot]; | |
+ const MVMStorageSpec *flat_ss = flat_st->REPR->get_storage_spec(tc, flat_st); | |
+ add_slot_name_comment(tc, g, ins, name, ch_facts, st); | |
+ if (flat_st->REPR->ID == MVM_REPR_ID_P6int && | |
+ (flat_ss->bits == 64 || flat_ss->bits == 32)) { | |
+ if (opcode == MVM_OP_getattrs_u) | |
+ MVM_spesh_usages_delete_by_reg(tc, g, ins->operands[3], ins); | |
+ MVM_spesh_usages_delete_by_reg(tc, g, ins->operands[2], ins); | |
+ ins->info = MVM_op_get_op( | |
+ flat_ss->bits == 64 ? MVM_OP_sp_p6oget_u | |
+ : MVM_OP_sp_p6oget_u32 | |
+ ); | |
+ ins->operands[2].lit_i16 = repr_data->attribute_offsets[slot]; | |
+ } | |
+ } | |
+ } | |
+ break; | |
+ } | |
case MVM_OP_getattr_n: | |
case MVM_OP_getattrs_n: { | |
MVMSpeshFacts *obj_facts = MVM_spesh_get_and_use_facts(tc, g, ins->operands[1]); | |
@@ -1806,6 +1833,34 @@ static void spesh(MVMThreadContext *tc, MVMSTable *st, MVMSpeshGraph *g, MVMSpes | |
} | |
break; | |
} | |
+ case MVM_OP_bindattr_u: | |
+ case MVM_OP_bindattrs_u: { | |
+ MVMSpeshFacts *obj_facts = MVM_spesh_get_and_use_facts(tc, g, ins->operands[0]); | |
+ MVMSpeshFacts *ch_facts = MVM_spesh_get_and_use_facts(tc, g, ins->operands[1]); | |
+ MVMString *name = spesh_attr_name(tc, g, ins->operands[2], opcode == MVM_OP_bindattrs_u); | |
+ if (name && ch_facts->flags & MVM_SPESH_FACT_KNOWN_TYPE && ch_facts->type | |
+ && obj_facts->flags & MVM_SPESH_FACT_CONCRETE) { | |
+ MVMint64 slot = try_get_slot(tc, repr_data, ch_facts->type, name); | |
+ if (slot >= 0 && repr_data->flattened_stables[slot]) { | |
+ MVMSTable *flat_st = repr_data->flattened_stables[slot]; | |
+ const MVMStorageSpec *flat_ss = flat_st->REPR->get_storage_spec(tc, flat_st); | |
+ if (flat_st->REPR->ID == MVM_REPR_ID_P6int && | |
+ (flat_ss->bits == 64 || flat_ss->bits == 32)) { | |
+ add_slot_name_comment(tc, g, ins, name, ch_facts, st); | |
+ if (opcode == MVM_OP_bindattrs_u) | |
+ MVM_spesh_usages_delete_by_reg(tc, g, ins->operands[2], ins); | |
+ MVM_spesh_usages_delete_by_reg(tc, g, ins->operands[1], ins); | |
+ ins->info = MVM_op_get_op( | |
+ flat_ss->bits == 64 ? MVM_OP_sp_p6obind_u | |
+ : MVM_OP_sp_p6obind_u32 | |
+ ); | |
+ ins->operands[1].lit_i16 = repr_data->attribute_offsets[slot]; | |
+ ins->operands[2] = ins->operands[3]; | |
+ } | |
+ } | |
+ } | |
+ break; | |
+ } | |
case MVM_OP_bindattr_n: | |
case MVM_OP_bindattrs_n: { | |
MVMSpeshFacts *obj_facts = MVM_spesh_get_and_use_facts(tc, g, ins->operands[0]); | |
@@ -1888,6 +1943,41 @@ static void spesh(MVMThreadContext *tc, MVMSTable *st, MVMSpeshGraph *g, MVMSpes | |
} | |
} | |
break; | |
+ case MVM_OP_box_u: | |
+ if (repr_data->num_attributes == 1 && repr_data->unbox_uint_slot >= 0 && | |
+ !(st->mode_flags & MVM_FINALIZE_TYPE)) { | |
+ MVMSTable *embedded_st = repr_data->flattened_stables[repr_data->unbox_uint_slot]; | |
+ if (embedded_st->REPR->ID == MVM_REPR_ID_P6bigint) { | |
+ MVMSpeshFacts *value_facts = MVM_spesh_get_facts(tc, g, ins->operands[1]); | |
+ | |
+ /* Turn into a sp_fastbox_bi[_ic] instruction. */ | |
+ MVMint32 int_cache_type_idx = MVM_intcache_type_index(tc, st->WHAT); | |
+ MVMSpeshFacts *tgt_facts = MVM_spesh_get_facts(tc, g, ins->operands[0]); | |
+ MVMSpeshOperand *orig_operands = ins->operands; | |
+ ins->info = MVM_op_get_op(int_cache_type_idx < 0 | |
+ ? MVM_OP_sp_fastbox_bi | |
+ : MVM_OP_sp_fastbox_bi_ic); | |
+ ins->operands = MVM_spesh_alloc(tc, g, 6 * sizeof(MVMSpeshOperand)); | |
+ ins->operands[0] = orig_operands[0]; | |
+ ins->operands[1].lit_i16 = st->size; | |
+ ins->operands[2].lit_i16 = MVM_spesh_add_spesh_slot(tc, g, (MVMCollectable *)st); | |
+ ins->operands[3].lit_i16 = sizeof(MVMObject) + | |
+ repr_data->attribute_offsets[repr_data->unbox_uint_slot]; | |
+ ins->operands[4] = orig_operands[1]; | |
+ ins->operands[5].lit_i16 = (MVMint16)int_cache_type_idx; | |
+ MVM_spesh_usages_delete_by_reg(tc, g, orig_operands[2], ins); | |
+ tgt_facts->flags |= MVM_SPESH_FACT_KNOWN_TYPE | MVM_SPESH_FACT_CONCRETE | MVM_SPESH_FACT_KNOWN_BOX_SRC; | |
+ tgt_facts->type = st->WHAT; | |
+ | |
+ MVM_spesh_graph_add_comment(tc, g, ins, "box_u into a %s", | |
+ MVM_6model_get_stable_debug_name(tc, st)); | |
+ | |
+ if (value_facts->flags & MVM_SPESH_FACT_KNOWN_VALUE) { | |
+ MVM_spesh_graph_add_comment(tc, g, ins, "could have made literal"); | |
+ } | |
+ } | |
+ } | |
+ break; | |
case MVM_OP_box_n: | |
if (repr_data->num_attributes == 1 && repr_data->unbox_num_slot >= 0 && | |
!(st->mode_flags & MVM_FINALIZE_TYPE)) { | |
@@ -2021,6 +2111,68 @@ static void spesh(MVMThreadContext *tc, MVMSTable *st, MVMSpeshGraph *g, MVMSpes | |
} | |
} | |
break; | |
+ case MVM_OP_unbox_u: | |
+ case MVM_OP_decont_u: | |
+ if (repr_data->unbox_uint_slot >= 0) { | |
+ MVMSTable *embedded_st = repr_data->flattened_stables[repr_data->unbox_uint_slot]; | |
+ if (embedded_st->REPR->ID == MVM_REPR_ID_P6bigint) { | |
+ MVMSpeshFacts *facts = MVM_spesh_get_and_use_facts(tc, g, ins->operands[1]); | |
+ int have_value = 0; | |
+ MVMint64 value; | |
+ | |
+ if ((facts->flags & MVM_SPESH_FACT_KNOWN_VALUE) && IS_CONCRETE(facts->value.o)) { | |
+ /* Effectively this is the call chain for | |
+ * MVM_repr_get_uint(tc, facts->value.o) | |
+ * inlined all the way to P6bigint.c:mp_get_u64 | |
+ * We have to do this because that will throw for an out of | |
+ * range integer, whereas we need to handle that case here. | |
+ */ | |
+ void * data = OBJECT_BODY(facts->value.o); | |
+ data = MVM_p6opaque_real_data(tc, data); | |
+ MVMP6bigintBody *body = (MVMP6bigintBody *)((char *)data + repr_data->attribute_offsets[repr_data->unbox_uint_slot]); | |
+ | |
+ if (MVM_BIGINT_IS_BIG(body)) { | |
+ mp_int *i = body->u.bigint; | |
+ const int bits = mp_count_bits(i); | |
+ if (bits <= 63) { | |
+ value = mp_get_mag_ull(i); | |
+ have_value = 1; | |
+ } | |
+ //else if (bits == 64 | |
+ // && MP_NEG == i->sign | |
+ // && mp_get_mag_ull(i) == 9223372036854775808ULL) { | |
+ // value = -9223372036854775807ULL - 1; | |
+ // have_value = 1; | |
+ //} | |
+ } | |
+ else { | |
+ value = body->u.smallint.value; | |
+ have_value = 1; | |
+ } | |
+ } | |
+ | |
+ if (have_value) { | |
+ MVMSpeshFacts *target_facts = MVM_spesh_get_and_use_facts(tc, g, ins->operands[0]); | |
+ MVM_spesh_graph_add_comment(tc, g, ins, "unboxed literal to value %ld", value); | |
+ ins->info = MVM_op_get_op(MVM_OP_const_i64); | |
+ MVM_spesh_usages_delete_by_reg(tc, g, ins->operands[1], ins); | |
+ ins->operands[1].lit_i64 = value; | |
+ target_facts->flags |= MVM_SPESH_FACT_KNOWN_VALUE; | |
+ target_facts->value.i = value; | |
+ } | |
+ else if (facts->flags & MVM_SPESH_FACT_CONCRETE) { | |
+ MVMSpeshOperand *orig_operands = ins->operands; | |
+ MVM_spesh_graph_add_comment(tc, g, ins, "%s a %s", | |
+ ins->info->name, MVM_6model_get_stable_debug_name(tc, st)); | |
+ ins->info = MVM_op_get_op(MVM_OP_sp_p6oget_bi); | |
+ ins->operands = MVM_spesh_alloc(tc, g, 3 * sizeof(MVMSpeshOperand)); | |
+ ins->operands[0] = orig_operands[0]; | |
+ ins->operands[1] = orig_operands[1]; | |
+ ins->operands[2].lit_i16 = repr_data->attribute_offsets[repr_data->unbox_uint_slot]; | |
+ } | |
+ } | |
+ } | |
+ break; | |
case MVM_OP_unbox_n: | |
case MVM_OP_decont_n: | |
if (repr_data->unbox_num_slot >= 0) { | |
diff --git src/core/frame.c src/core/frame.c | |
index 7fca4b9c7..3389496fc 100644 | |
--- src/core/frame.c | |
+++ src/core/frame.c | |
@@ -1547,6 +1547,18 @@ void MVM_frame_getdynlex_with_frame_walker(MVMThreadContext *tc, MVMSpeshFrameWa | |
OBJECT_BODY(result), lex_reg->i64); | |
MVM_gc_root_temp_pop(tc); | |
break; | |
+ case MVM_reg_uint64: | |
+ result_type = (*tc->interp_cu)->body.hll_config->int_box_type; | |
+ if (!result_type) | |
+ MVM_exception_throw_adhoc(tc, "missing int box type (for a uint)"); | |
+ result = REPR(result_type)->allocate(tc, STABLE(result_type)); | |
+ MVM_gc_root_temp_push(tc, (MVMCollectable **)&result); | |
+ if (REPR(result)->initialize) | |
+ REPR(result)->initialize(tc, STABLE(result), result, OBJECT_BODY(result)); | |
+ REPR(result)->box_funcs.set_uint(tc, STABLE(result), result, | |
+ OBJECT_BODY(result), lex_reg->u64); | |
+ MVM_gc_root_temp_pop(tc); | |
+ break; | |
case MVM_reg_num64: | |
result_type = (*tc->interp_cu)->body.hll_config->num_box_type; | |
if (!result_type) | |
diff --git src/core/interp.c src/core/interp.c | |
index 4b5ce4459..26c5e7562 100644 | |
--- src/core/interp.c | |
+++ src/core/interp.c | |
@@ -4331,6 +4331,11 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
MVM_cu_string(tc, cu, GET_UI32(cur_op, 2))); | |
cur_op += 6; | |
goto NEXT; | |
+ OP(getlexref_nu): | |
+ GET_REG(cur_op, 0).o = MVM_nativeref_lex_name_u(tc, | |
+ MVM_cu_string(tc, cu, GET_UI32(cur_op, 2))); | |
+ cur_op += 6; | |
+ goto NEXT; | |
OP(getlexref_nn): | |
GET_REG(cur_op, 0).o = MVM_nativeref_lex_name_n(tc, | |
MVM_cu_string(tc, cu, GET_UI32(cur_op, 2))); | |
@@ -4386,6 +4391,12 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
GET_REG(cur_op, 6).s); | |
cur_op += 8; | |
goto NEXT; | |
+ OP(getattrsref_u): | |
+ GET_REG(cur_op, 0).o = MVM_nativeref_attr_u(tc, | |
+ GET_REG(cur_op, 2).o, GET_REG(cur_op, 4).o, | |
+ GET_REG(cur_op, 6).s); | |
+ cur_op += 8; | |
+ goto NEXT; | |
OP(getattrsref_n): | |
GET_REG(cur_op, 0).o = MVM_nativeref_attr_n(tc, | |
GET_REG(cur_op, 2).o, GET_REG(cur_op, 4).o, | |
@@ -5951,6 +5962,12 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
cur_op += 4; | |
goto NEXT; | |
} | |
+ OP(sp_getarg_u): { | |
+ MVMArgs *args = &(tc->cur_frame->params.arg_info); | |
+ GET_REG(cur_op, 0).u64 = args->source[args->map[GET_UI16(cur_op, 2)]].u64; | |
+ cur_op += 4; | |
+ goto NEXT; | |
+ } | |
OP(sp_getarg_n): { | |
MVMArgs *args = &(tc->cur_frame->params.arg_info); | |
GET_REG(cur_op, 0).n64 = args->source[args->map[GET_UI16(cur_op, 2)]].n64; | |
@@ -5999,6 +6016,22 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
GET_REG(cur_op, 0).i64 = *((MVMint8 *)((char *)GET_REG(cur_op, 2).o + GET_UI16(cur_op, 4))); | |
cur_op += 6; | |
goto NEXT; | |
+ OP(sp_get_u64): | |
+ GET_REG(cur_op, 0).u64 = *((MVMuint64 *)((char *)GET_REG(cur_op, 2).o + GET_UI16(cur_op, 4))); | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ OP(sp_get_u32): | |
+ GET_REG(cur_op, 0).u64 = *((MVMuint32 *)((char *)GET_REG(cur_op, 2).o + GET_UI16(cur_op, 4))); | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ OP(sp_get_u16): | |
+ GET_REG(cur_op, 0).u64 = *((MVMuint16 *)((char *)GET_REG(cur_op, 2).o + GET_UI16(cur_op, 4))); | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ OP(sp_get_u8): | |
+ GET_REG(cur_op, 0).u64 = *((MVMuint8 *)((char *)GET_REG(cur_op, 2).o + GET_UI16(cur_op, 4))); | |
+ cur_op += 6; | |
+ goto NEXT; | |
OP(sp_get_n): | |
GET_REG(cur_op, 0).n64 = *((MVMnum64 *)((char *)GET_REG(cur_op, 2).o + GET_UI16(cur_op, 4))); | |
cur_op += 6; | |
@@ -6038,6 +6071,30 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
cur_op += 6; | |
goto NEXT; | |
} | |
+ OP(sp_bind_u64): { | |
+ MVMObject *o = GET_REG(cur_op, 0).o; | |
+ *((MVMuint64 *)((char *)o + GET_UI16(cur_op, 2))) = GET_REG(cur_op, 4).u64; | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ } | |
+ OP(sp_bind_u32): { | |
+ MVMObject *o = GET_REG(cur_op, 0).o; | |
+ *((MVMuint32 *)((char *)o + GET_UI16(cur_op, 2))) = GET_REG(cur_op, 4).u64; | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ } | |
+ OP(sp_bind_u16): { | |
+ MVMObject *o = GET_REG(cur_op, 0).o; | |
+ *((MVMuint16 *)((char *)o + GET_UI16(cur_op, 2))) = GET_REG(cur_op, 4).u64; | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ } | |
+ OP(sp_bind_u8): { | |
+ MVMObject *o = GET_REG(cur_op, 0).o; | |
+ *((MVMuint8 *)((char *)o + GET_UI16(cur_op, 2))) = GET_REG(cur_op, 4).u64; | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ } | |
OP(sp_bind_n): { | |
MVMObject *o = GET_REG(cur_op, 0).o; | |
*((MVMnum64 *)((char *)o + GET_UI16(cur_op, 2))) = GET_REG(cur_op, 4).n64; | |
@@ -6099,6 +6156,13 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
cur_op += 6; | |
goto NEXT; | |
} | |
+ OP(sp_p6oget_u): { | |
+ MVMObject *o = GET_REG(cur_op, 2).o; | |
+ char *data = MVM_p6opaque_real_data(tc, OBJECT_BODY(o)); | |
+ GET_REG(cur_op, 0).u64 = *((MVMuint64 *)(data + GET_UI16(cur_op, 4))); | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ } | |
OP(sp_p6oget_n): { | |
MVMObject *o = GET_REG(cur_op, 2).o; | |
char *data = MVM_p6opaque_real_data(tc, OBJECT_BODY(o)); | |
@@ -6138,6 +6202,13 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
cur_op += 6; | |
goto NEXT; | |
} | |
+ OP(sp_p6obind_u): { | |
+ MVMObject *o = GET_REG(cur_op, 0).o; | |
+ char *data = MVM_p6opaque_real_data(tc, OBJECT_BODY(o)); | |
+ *((MVMint64 *)(data + GET_UI16(cur_op, 2))) = GET_REG(cur_op, 4).u64; | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ } | |
OP(sp_p6obind_n): { | |
MVMObject *o = GET_REG(cur_op, 0).o; | |
char *data = MVM_p6opaque_real_data(tc, OBJECT_BODY(o)); | |
@@ -6167,6 +6238,20 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
cur_op += 6; | |
goto NEXT; | |
} | |
+ OP(sp_p6oget_u32): { | |
+ MVMObject *o = GET_REG(cur_op, 2).o; | |
+ char *data = MVM_p6opaque_real_data(tc, OBJECT_BODY(o)); | |
+ GET_REG(cur_op, 0).u64 = *((MVMuint32 *)(data + GET_UI16(cur_op, 4))); | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ } | |
+ OP(sp_p6obind_u32): { | |
+ MVMObject *o = GET_REG(cur_op, 0).o; | |
+ char *data = MVM_p6opaque_real_data(tc, OBJECT_BODY(o)); | |
+ *((MVMuint32 *)(data + GET_UI16(cur_op, 2))) = (MVMuint32)GET_REG(cur_op, 4).u64; | |
+ cur_op += 6; | |
+ goto NEXT; | |
+ } | |
OP(sp_getvt_o): { | |
MVMObject *o = GET_REG(cur_op, 2).o; | |
char *data = (char *)o; | |
@@ -6202,6 +6287,13 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
cur_op += 10; | |
goto NEXT; | |
} | |
+ OP(sp_fastbox_u): { | |
+ MVMObject *obj = fastcreate(tc, cur_op); | |
+ *((MVMuint64 *)((char *)obj + GET_UI16(cur_op, 6))) = GET_REG(cur_op, 8).u64; | |
+ GET_REG(cur_op, 0).o = obj; | |
+ cur_op += 10; | |
+ goto NEXT; | |
+ } | |
OP(sp_fastbox_bi): { | |
MVMObject *obj = fastcreate(tc, cur_op); | |
MVMP6bigintBody *body = (MVMP6bigintBody *)((char *)obj + GET_UI16(cur_op, 6)); | |
@@ -6231,6 +6323,20 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
cur_op += 12; | |
goto NEXT; | |
} | |
+ OP(sp_fastbox_u_ic): { | |
+ MVMuint64 value = GET_REG(cur_op, 8).u64; | |
+ if (value < 15) { | |
+ MVMint16 slot = GET_UI16(cur_op, 10); | |
+ GET_REG(cur_op, 0).o = tc->instance->int_const_cache->cache[slot][value + 1]; | |
+ } | |
+ else { | |
+ MVMObject *obj = fastcreate(tc, cur_op); | |
+ *((MVMuint64 *)((char *)obj + GET_UI16(cur_op, 6))) = value; | |
+ GET_REG(cur_op, 0).o = obj; | |
+ } | |
+ cur_op += 12; | |
+ goto NEXT; | |
+ } | |
OP(sp_fastbox_bi_ic): { | |
MVMint64 value = GET_REG(cur_op, 8).i64; | |
if (value >= -1 && value < 15) { | |
@@ -6831,10 +6937,6 @@ void MVM_interp_run(MVMThreadContext *tc, void (*initial_invoke)(MVMThreadContex | |
goto NEXT; | |
/* The compiler compiles faster if all deprecated are together and at the end | |
* even though the op numbers are technically out of order. */ | |
- OP(DEPRECATED_25): | |
- MVM_exception_throw_adhoc(tc, "The setinputlineseps op was removed in MoarVM 2017.06."); | |
- OP(DEPRECATED_27): | |
- MVM_exception_throw_adhoc(tc, "The slurp op was removed in MoarVM 2017.06."); | |
OP(DEPRECATED_28): | |
MVM_exception_throw_adhoc(tc, "The spew op was removed in MoarVM 2017.06."); | |
OP(DEPRECATED_29): | |
diff --git src/core/oplabels.h src/core/oplabels.h | |
index 83ed414cf..b47cc166c 100644 | |
--- src/core/oplabels.h | |
+++ src/core/oplabels.h | |
@@ -475,7 +475,7 @@ static const void * const LABELS[] = { | |
&&OP_open_fh, | |
&&OP_close_fh, | |
&&OP_dispatch_u, | |
- &&OP_DEPRECATED_27, | |
+ &&OP_getattrsref_u, | |
&&OP_DEPRECATED_28, | |
&&OP_atposnd_u, | |
&&OP_seek_fh, | |
@@ -695,7 +695,7 @@ static const void * const LABELS[] = { | |
&&OP_ctxcode, | |
&&OP_isrwcont, | |
&&OP_fc, | |
- &&OP_DEPRECATED_25, | |
+ &&OP_getlexref_nu, | |
&&OP_atpos3d_u, | |
&&OP_encoderep, | |
&&OP_istty_fh, | |
@@ -869,6 +869,7 @@ static const void * const LABELS[] = { | |
&&OP_sp_dispatch_o, | |
&&OP_sp_getarg_o, | |
&&OP_sp_getarg_i, | |
+ &&OP_sp_getarg_u, | |
&&OP_sp_getarg_n, | |
&&OP_sp_getarg_s, | |
&&OP_sp_paramnamesused, | |
@@ -879,6 +880,10 @@ static const void * const LABELS[] = { | |
&&OP_sp_get_i32, | |
&&OP_sp_get_i16, | |
&&OP_sp_get_i8, | |
+ &&OP_sp_get_u64, | |
+ &&OP_sp_get_u32, | |
+ &&OP_sp_get_u16, | |
+ &&OP_sp_get_u8, | |
&&OP_sp_get_n, | |
&&OP_sp_get_s, | |
&&OP_sp_bind_o, | |
@@ -886,6 +891,10 @@ static const void * const LABELS[] = { | |
&&OP_sp_bind_i32, | |
&&OP_sp_bind_i16, | |
&&OP_sp_bind_i8, | |
+ &&OP_sp_bind_u64, | |
+ &&OP_sp_bind_u32, | |
+ &&OP_sp_bind_u16, | |
+ &&OP_sp_bind_u8, | |
&&OP_sp_bind_n, | |
&&OP_sp_bind_s, | |
&&OP_sp_bind_s_nowb, | |
@@ -893,20 +902,26 @@ static const void * const LABELS[] = { | |
&&OP_sp_p6ogetvt_o, | |
&&OP_sp_p6ogetvc_o, | |
&&OP_sp_p6oget_i, | |
+ &&OP_sp_p6oget_u, | |
&&OP_sp_p6oget_n, | |
&&OP_sp_p6oget_s, | |
&&OP_sp_p6oget_bi, | |
&&OP_sp_p6obind_o, | |
&&OP_sp_p6obind_i, | |
+ &&OP_sp_p6obind_u, | |
&&OP_sp_p6obind_n, | |
&&OP_sp_p6obind_s, | |
&&OP_sp_p6oget_i32, | |
+ &&OP_sp_p6oget_u32, | |
&&OP_sp_p6obind_i32, | |
+ &&OP_sp_p6obind_u32, | |
&&OP_sp_getvt_o, | |
&&OP_sp_getvc_o, | |
&&OP_sp_fastbox_i, | |
+ &&OP_sp_fastbox_u, | |
&&OP_sp_fastbox_bi, | |
&&OP_sp_fastbox_i_ic, | |
+ &&OP_sp_fastbox_u_ic, | |
&&OP_sp_fastbox_bi_ic, | |
&&OP_sp_deref_get_i64, | |
&&OP_sp_deref_get_n, | |
@@ -1010,21 +1025,6 @@ static const void * const LABELS[] = { | |
NULL, | |
NULL, | |
NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
- NULL, | |
&&OP_CALL_EXTOP, | |
&&OP_CALL_EXTOP, | |
&&OP_CALL_EXTOP, | |
diff --git src/core/oplist src/core/oplist | |
index 362f67e56..1728a0b5b 100644 | |
--- src/core/oplist | |
+++ src/core/oplist | |
@@ -526,7 +526,7 @@ close_dir r(obj) | |
open_fh w(obj) r(str) r(str) | |
close_fh r(obj) | |
dispatch_u .d w(uint64) str callsite :cache :deoptallpoint :predeoptonepoint :maycausedeopt :specializable | |
-DEPRECATED_27 w(str) r(str) r(str) | |
+getattrsref_u w(obj) r(obj) r(obj) r(str) :pure :useshll | |
DEPRECATED_28 r(str) r(str) r(str) | |
atposnd_u w(uint64) r(obj) r(obj) :pure :specializable | |
seek_fh r(obj) r(int64) r(int64) | |
@@ -747,7 +747,7 @@ numdimensions w(int64) r(obj) :pure :specializable | |
ctxcode w(obj) r(obj) | |
isrwcont w(int64) r(obj) :pure :specializable | |
fc w(str) r(str) :pure | |
-DEPRECATED_25 r(obj) r(obj) | |
+getlexref_nu w(obj) str :pure :noinline :useshll | |
atpos3d_u w(uint64) r(obj) r(int64) r(int64) r(int64) :pure :specializable | |
encoderep w(obj) r(str) r(str) r(str) r(obj) | |
istty_fh w(int64) r(obj) :pure | |
@@ -967,6 +967,7 @@ sp_dispatch_o .s w(obj) str callsite sslot uint32 :maycausedeopt :invokish | |
# Following are for fast, unchecked grabbing of args from the arg buffer. | |
sp_getarg_o .s w(obj) int16 :pure | |
sp_getarg_i .s w(int64) int16 :pure | |
+sp_getarg_u .s w(uint64) int16 :pure | |
sp_getarg_n .s w(num64) int16 :pure | |
sp_getarg_s .s w(str) int16 :pure | |
@@ -987,6 +988,10 @@ sp_get_i64 .s w(int64) r(obj) int16 :pure | |
sp_get_i32 .s w(int64) r(obj) int16 :pure | |
sp_get_i16 .s w(int64) r(obj) int16 :pure | |
sp_get_i8 .s w(int64) r(obj) int16 :pure | |
+sp_get_u64 .s w(uint64) r(obj) int16 :pure | |
+sp_get_u32 .s w(uint64) r(obj) int16 :pure | |
+sp_get_u16 .s w(uint64) r(obj) int16 :pure | |
+sp_get_u8 .s w(uint64) r(obj) int16 :pure | |
sp_get_n .s w(num64) r(obj) int16 :pure | |
sp_get_s .s w(str) r(obj) int16 :pure | |
sp_bind_o .s r(obj) int16 r(obj) | |
@@ -994,6 +999,10 @@ sp_bind_i64 .s r(obj) int16 r(int64) | |
sp_bind_i32 .s r(obj) int16 r(int64) | |
sp_bind_i16 .s r(obj) int16 r(int64) | |
sp_bind_i8 .s r(obj) int16 r(int64) | |
+sp_bind_u64 .s r(obj) int16 r(uint64) | |
+sp_bind_u32 .s r(obj) int16 r(uint64) | |
+sp_bind_u16 .s r(obj) int16 r(uint64) | |
+sp_bind_u8 .s r(obj) int16 r(uint64) | |
sp_bind_n .s r(obj) int16 r(num64) | |
sp_bind_s .s r(obj) int16 r(str) | |
sp_bind_s_nowb .s r(obj) int16 r(str) | |
@@ -1006,15 +1015,19 @@ sp_p6oget_o .s w(obj) r(obj) int16 :pure | |
sp_p6ogetvt_o .s w(obj) r(obj) int16 sslot | |
sp_p6ogetvc_o .s w(obj) r(obj) int16 sslot | |
sp_p6oget_i .s w(int64) r(obj) int16 :pure | |
+sp_p6oget_u .s w(uint64) r(obj) int16 :pure | |
sp_p6oget_n .s w(num64) r(obj) int16 :pure | |
sp_p6oget_s .s w(str) r(obj) int16 :pure | |
sp_p6oget_bi .s w(int64) r(obj) int16 :pure | |
sp_p6obind_o .s r(obj) int16 r(obj) | |
sp_p6obind_i .s r(obj) int16 r(int64) | |
+sp_p6obind_u .s r(obj) int16 r(uint64) | |
sp_p6obind_n .s r(obj) int16 r(num64) | |
sp_p6obind_s .s r(obj) int16 r(str) | |
sp_p6oget_i32 .s w(int64) r(obj) int16 :pure | |
+sp_p6oget_u32 .s w(uint64) r(obj) int16 :pure | |
sp_p6obind_i32 .s r(obj) int16 r(int64) :pure | |
+sp_p6obind_u32 .s r(obj) int16 r(uint64) :pure | |
# Simple vivifying forms of attribute access; used when we know we don't | |
# have any kind of mixin type. Offset is from start of the object's memory. | |
@@ -1028,8 +1041,10 @@ sp_getvc_o .s w(obj) r(obj) int16 sslot | |
# argument which is the type index in the integer cache; they do a lookup in | |
# the integer cache before performing a box operation. | |
sp_fastbox_i .s w(obj) int16 sslot int16 r(int64) :pure | |
+sp_fastbox_u .s w(obj) int16 sslot int16 r(uint64) :pure | |
sp_fastbox_bi .s w(obj) int16 sslot int16 r(int64) :pure | |
sp_fastbox_i_ic .s w(obj) int16 sslot int16 r(int64) int16 :pure | |
+sp_fastbox_u_ic .s w(obj) int16 sslot int16 r(uint64) int16 :pure | |
sp_fastbox_bi_ic .s w(obj) int16 sslot int16 r(int64) int16 :pure | |
# Follow a pointer at an offset to an object and get/store a value there. | |
diff --git src/core/ops.c src/core/ops.c | |
index 54acf304e..e74945fb4 100644 | |
--- src/core/ops.c | |
+++ src/core/ops.c | |
@@ -7586,20 +7586,20 @@ static const MVMOpInfo MVM_op_infos[] = { | |
{ MVM_operand_write_reg | MVM_operand_uint64, MVM_operand_str, MVM_operand_callsite } | |
}, | |
{ | |
- MVM_OP_DEPRECATED_27, | |
- "DEPRECATED_27", | |
- 3, | |
- 0, | |
- 0, | |
+ MVM_OP_getattrsref_u, | |
+ "getattrsref_u", | |
+ 4, | |
+ 1, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
+ 1, | |
0, | |
0, | |
- { MVM_operand_write_reg | MVM_operand_str, MVM_operand_read_reg | MVM_operand_str, MVM_operand_read_reg | MVM_operand_str } | |
+ { MVM_operand_write_reg | MVM_operand_obj, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_read_reg | MVM_operand_str } | |
}, | |
{ | |
MVM_OP_DEPRECATED_28, | |
@@ -11106,20 +11106,20 @@ static const MVMOpInfo MVM_op_infos[] = { | |
{ MVM_operand_write_reg | MVM_operand_str, MVM_operand_read_reg | MVM_operand_str } | |
}, | |
{ | |
- MVM_OP_DEPRECATED_25, | |
- "DEPRECATED_25", | |
+ MVM_OP_getlexref_nu, | |
+ "getlexref_nu", | |
2, | |
+ 1, | |
0, | |
0, | |
0, | |
0, | |
+ 1, | |
0, | |
+ 1, | |
0, | |
0, | |
- 0, | |
- 0, | |
- 0, | |
- { MVM_operand_read_reg | MVM_operand_obj, MVM_operand_read_reg | MVM_operand_obj } | |
+ { MVM_operand_write_reg | MVM_operand_obj, MVM_operand_str } | |
}, | |
{ | |
MVM_OP_atpos3d_u, | |
@@ -13889,6 +13889,22 @@ static const MVMOpInfo MVM_op_infos[] = { | |
0, | |
{ MVM_operand_write_reg | MVM_operand_int64, MVM_operand_int16 } | |
}, | |
+ { | |
+ MVM_OP_sp_getarg_u, | |
+ "sp_getarg_u", | |
+ 2, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_write_reg | MVM_operand_uint64, MVM_operand_int16 } | |
+ }, | |
{ | |
MVM_OP_sp_getarg_n, | |
"sp_getarg_n", | |
@@ -14049,6 +14065,70 @@ static const MVMOpInfo MVM_op_infos[] = { | |
0, | |
{ MVM_operand_write_reg | MVM_operand_int64, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16 } | |
}, | |
+ { | |
+ MVM_OP_sp_get_u64, | |
+ "sp_get_u64", | |
+ 3, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_write_reg | MVM_operand_uint64, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16 } | |
+ }, | |
+ { | |
+ MVM_OP_sp_get_u32, | |
+ "sp_get_u32", | |
+ 3, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_write_reg | MVM_operand_uint64, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16 } | |
+ }, | |
+ { | |
+ MVM_OP_sp_get_u16, | |
+ "sp_get_u16", | |
+ 3, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_write_reg | MVM_operand_uint64, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16 } | |
+ }, | |
+ { | |
+ MVM_OP_sp_get_u8, | |
+ "sp_get_u8", | |
+ 3, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_write_reg | MVM_operand_uint64, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16 } | |
+ }, | |
{ | |
MVM_OP_sp_get_n, | |
"sp_get_n", | |
@@ -14161,6 +14241,70 @@ static const MVMOpInfo MVM_op_infos[] = { | |
0, | |
{ MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_int64 } | |
}, | |
+ { | |
+ MVM_OP_sp_bind_u64, | |
+ "sp_bind_u64", | |
+ 3, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_uint64 } | |
+ }, | |
+ { | |
+ MVM_OP_sp_bind_u32, | |
+ "sp_bind_u32", | |
+ 3, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_uint64 } | |
+ }, | |
+ { | |
+ MVM_OP_sp_bind_u16, | |
+ "sp_bind_u16", | |
+ 3, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_uint64 } | |
+ }, | |
+ { | |
+ MVM_OP_sp_bind_u8, | |
+ "sp_bind_u8", | |
+ 3, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_uint64 } | |
+ }, | |
{ | |
MVM_OP_sp_bind_n, | |
"sp_bind_n", | |
@@ -14273,6 +14417,22 @@ static const MVMOpInfo MVM_op_infos[] = { | |
0, | |
{ MVM_operand_write_reg | MVM_operand_int64, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16 } | |
}, | |
+ { | |
+ MVM_OP_sp_p6oget_u, | |
+ "sp_p6oget_u", | |
+ 3, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_write_reg | MVM_operand_uint64, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16 } | |
+ }, | |
{ | |
MVM_OP_sp_p6oget_n, | |
"sp_p6oget_n", | |
@@ -14353,6 +14513,22 @@ static const MVMOpInfo MVM_op_infos[] = { | |
0, | |
{ MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_int64 } | |
}, | |
+ { | |
+ MVM_OP_sp_p6obind_u, | |
+ "sp_p6obind_u", | |
+ 3, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_uint64 } | |
+ }, | |
{ | |
MVM_OP_sp_p6obind_n, | |
"sp_p6obind_n", | |
@@ -14401,6 +14577,22 @@ static const MVMOpInfo MVM_op_infos[] = { | |
0, | |
{ MVM_operand_write_reg | MVM_operand_int64, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16 } | |
}, | |
+ { | |
+ MVM_OP_sp_p6oget_u32, | |
+ "sp_p6oget_u32", | |
+ 3, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_write_reg | MVM_operand_uint64, MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16 } | |
+ }, | |
{ | |
MVM_OP_sp_p6obind_i32, | |
"sp_p6obind_i32", | |
@@ -14417,6 +14609,22 @@ static const MVMOpInfo MVM_op_infos[] = { | |
0, | |
{ MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_int64 } | |
}, | |
+ { | |
+ MVM_OP_sp_p6obind_u32, | |
+ "sp_p6obind_u32", | |
+ 3, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_read_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_uint64 } | |
+ }, | |
{ | |
MVM_OP_sp_getvt_o, | |
"sp_getvt_o", | |
@@ -14465,6 +14673,22 @@ static const MVMOpInfo MVM_op_infos[] = { | |
0, | |
{ MVM_operand_write_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_spesh_slot, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_int64 } | |
}, | |
+ { | |
+ MVM_OP_sp_fastbox_u, | |
+ "sp_fastbox_u", | |
+ 5, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_write_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_spesh_slot, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_uint64 } | |
+ }, | |
{ | |
MVM_OP_sp_fastbox_bi, | |
"sp_fastbox_bi", | |
@@ -14497,6 +14721,22 @@ static const MVMOpInfo MVM_op_infos[] = { | |
0, | |
{ MVM_operand_write_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_spesh_slot, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_int64, MVM_operand_int16 } | |
}, | |
+ { | |
+ MVM_OP_sp_fastbox_u_ic, | |
+ "sp_fastbox_u_ic", | |
+ 6, | |
+ 1, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ 0, | |
+ { MVM_operand_write_reg | MVM_operand_obj, MVM_operand_int16, MVM_operand_spesh_slot, MVM_operand_int16, MVM_operand_read_reg | MVM_operand_uint64, MVM_operand_int16 } | |
+ }, | |
{ | |
MVM_OP_sp_fastbox_bi_ic, | |
"sp_fastbox_bi_ic", | |
@@ -15331,7 +15571,7 @@ static const MVMOpInfo MVM_op_infos[] = { | |
}, | |
}; | |
-static const unsigned short MVM_op_counts = 958; | |
+static const unsigned short MVM_op_counts = 973; | |
static const MVMuint16 last_op_allowed = 837; | |
diff --git src/core/ops.h src/core/ops.h | |
index b949e6068..11f4601b3 100644 | |
--- src/core/ops.h | |
+++ src/core/ops.h | |
@@ -475,7 +475,7 @@ | |
#define MVM_OP_open_fh 471 | |
#define MVM_OP_close_fh 472 | |
#define MVM_OP_dispatch_u 473 | |
-#define MVM_OP_DEPRECATED_27 474 | |
+#define MVM_OP_getattrsref_u 474 | |
#define MVM_OP_DEPRECATED_28 475 | |
#define MVM_OP_atposnd_u 476 | |
#define MVM_OP_seek_fh 477 | |
@@ -695,7 +695,7 @@ | |
#define MVM_OP_ctxcode 691 | |
#define MVM_OP_isrwcont 692 | |
#define MVM_OP_fc 693 | |
-#define MVM_OP_DEPRECATED_25 694 | |
+#define MVM_OP_getlexref_nu 694 | |
#define MVM_OP_atpos3d_u 695 | |
#define MVM_OP_encoderep 696 | |
#define MVM_OP_istty_fh 697 | |
@@ -869,96 +869,111 @@ | |
#define MVM_OP_sp_dispatch_o 865 | |
#define MVM_OP_sp_getarg_o 866 | |
#define MVM_OP_sp_getarg_i 867 | |
-#define MVM_OP_sp_getarg_n 868 | |
-#define MVM_OP_sp_getarg_s 869 | |
-#define MVM_OP_sp_paramnamesused 870 | |
-#define MVM_OP_sp_getspeshslot 871 | |
-#define MVM_OP_sp_fastcreate 872 | |
-#define MVM_OP_sp_get_o 873 | |
-#define MVM_OP_sp_get_i64 874 | |
-#define MVM_OP_sp_get_i32 875 | |
-#define MVM_OP_sp_get_i16 876 | |
-#define MVM_OP_sp_get_i8 877 | |
-#define MVM_OP_sp_get_n 878 | |
-#define MVM_OP_sp_get_s 879 | |
-#define MVM_OP_sp_bind_o 880 | |
-#define MVM_OP_sp_bind_i64 881 | |
-#define MVM_OP_sp_bind_i32 882 | |
-#define MVM_OP_sp_bind_i16 883 | |
-#define MVM_OP_sp_bind_i8 884 | |
-#define MVM_OP_sp_bind_n 885 | |
-#define MVM_OP_sp_bind_s 886 | |
-#define MVM_OP_sp_bind_s_nowb 887 | |
-#define MVM_OP_sp_p6oget_o 888 | |
-#define MVM_OP_sp_p6ogetvt_o 889 | |
-#define MVM_OP_sp_p6ogetvc_o 890 | |
-#define MVM_OP_sp_p6oget_i 891 | |
-#define MVM_OP_sp_p6oget_n 892 | |
-#define MVM_OP_sp_p6oget_s 893 | |
-#define MVM_OP_sp_p6oget_bi 894 | |
-#define MVM_OP_sp_p6obind_o 895 | |
-#define MVM_OP_sp_p6obind_i 896 | |
-#define MVM_OP_sp_p6obind_n 897 | |
-#define MVM_OP_sp_p6obind_s 898 | |
-#define MVM_OP_sp_p6oget_i32 899 | |
-#define MVM_OP_sp_p6obind_i32 900 | |
-#define MVM_OP_sp_getvt_o 901 | |
-#define MVM_OP_sp_getvc_o 902 | |
-#define MVM_OP_sp_fastbox_i 903 | |
-#define MVM_OP_sp_fastbox_bi 904 | |
-#define MVM_OP_sp_fastbox_i_ic 905 | |
-#define MVM_OP_sp_fastbox_bi_ic 906 | |
-#define MVM_OP_sp_deref_get_i64 907 | |
-#define MVM_OP_sp_deref_get_n 908 | |
-#define MVM_OP_sp_deref_bind_i64 909 | |
-#define MVM_OP_sp_deref_bind_n 910 | |
-#define MVM_OP_sp_getlexvia_o 911 | |
-#define MVM_OP_sp_getlexvia_ins 912 | |
-#define MVM_OP_sp_bindlexvia_os 913 | |
-#define MVM_OP_sp_bindlexvia_in 914 | |
-#define MVM_OP_sp_getstringfrom 915 | |
-#define MVM_OP_sp_getwvalfrom 916 | |
-#define MVM_OP_sp_jit_enter 917 | |
-#define MVM_OP_sp_istrue_n 918 | |
-#define MVM_OP_sp_boolify_iter 919 | |
-#define MVM_OP_sp_boolify_iter_arr 920 | |
-#define MVM_OP_sp_boolify_iter_hash 921 | |
-#define MVM_OP_sp_cas_o 922 | |
-#define MVM_OP_sp_atomicload_o 923 | |
-#define MVM_OP_sp_atomicstore_o 924 | |
-#define MVM_OP_sp_add_I 925 | |
-#define MVM_OP_sp_sub_I 926 | |
-#define MVM_OP_sp_mul_I 927 | |
-#define MVM_OP_sp_bool_I 928 | |
-#define MVM_OP_sp_runbytecode_v 929 | |
-#define MVM_OP_sp_runbytecode_i 930 | |
-#define MVM_OP_sp_runbytecode_u 931 | |
-#define MVM_OP_sp_runbytecode_n 932 | |
-#define MVM_OP_sp_runbytecode_s 933 | |
-#define MVM_OP_sp_runbytecode_o 934 | |
-#define MVM_OP_sp_runcfunc_v 935 | |
-#define MVM_OP_sp_runcfunc_i 936 | |
-#define MVM_OP_sp_runcfunc_u 937 | |
-#define MVM_OP_sp_runcfunc_n 938 | |
-#define MVM_OP_sp_runcfunc_s 939 | |
-#define MVM_OP_sp_runcfunc_o 940 | |
-#define MVM_OP_sp_runnativecall_v 941 | |
-#define MVM_OP_sp_runnativecall_i 942 | |
-#define MVM_OP_sp_runnativecall_u 943 | |
-#define MVM_OP_sp_runnativecall_n 944 | |
-#define MVM_OP_sp_runnativecall_s 945 | |
-#define MVM_OP_sp_runnativecall_o 946 | |
-#define MVM_OP_sp_resumption 947 | |
-#define MVM_OP_prof_enter 948 | |
-#define MVM_OP_prof_enterspesh 949 | |
-#define MVM_OP_prof_enterinline 950 | |
-#define MVM_OP_prof_enternative 951 | |
-#define MVM_OP_prof_exit 952 | |
-#define MVM_OP_prof_allocated 953 | |
-#define MVM_OP_prof_replaced 954 | |
-#define MVM_OP_ctw_check 955 | |
-#define MVM_OP_coverage_log 956 | |
-#define MVM_OP_breakpoint 957 | |
+#define MVM_OP_sp_getarg_u 868 | |
+#define MVM_OP_sp_getarg_n 869 | |
+#define MVM_OP_sp_getarg_s 870 | |
+#define MVM_OP_sp_paramnamesused 871 | |
+#define MVM_OP_sp_getspeshslot 872 | |
+#define MVM_OP_sp_fastcreate 873 | |
+#define MVM_OP_sp_get_o 874 | |
+#define MVM_OP_sp_get_i64 875 | |
+#define MVM_OP_sp_get_i32 876 | |
+#define MVM_OP_sp_get_i16 877 | |
+#define MVM_OP_sp_get_i8 878 | |
+#define MVM_OP_sp_get_u64 879 | |
+#define MVM_OP_sp_get_u32 880 | |
+#define MVM_OP_sp_get_u16 881 | |
+#define MVM_OP_sp_get_u8 882 | |
+#define MVM_OP_sp_get_n 883 | |
+#define MVM_OP_sp_get_s 884 | |
+#define MVM_OP_sp_bind_o 885 | |
+#define MVM_OP_sp_bind_i64 886 | |
+#define MVM_OP_sp_bind_i32 887 | |
+#define MVM_OP_sp_bind_i16 888 | |
+#define MVM_OP_sp_bind_i8 889 | |
+#define MVM_OP_sp_bind_u64 890 | |
+#define MVM_OP_sp_bind_u32 891 | |
+#define MVM_OP_sp_bind_u16 892 | |
+#define MVM_OP_sp_bind_u8 893 | |
+#define MVM_OP_sp_bind_n 894 | |
+#define MVM_OP_sp_bind_s 895 | |
+#define MVM_OP_sp_bind_s_nowb 896 | |
+#define MVM_OP_sp_p6oget_o 897 | |
+#define MVM_OP_sp_p6ogetvt_o 898 | |
+#define MVM_OP_sp_p6ogetvc_o 899 | |
+#define MVM_OP_sp_p6oget_i 900 | |
+#define MVM_OP_sp_p6oget_u 901 | |
+#define MVM_OP_sp_p6oget_n 902 | |
+#define MVM_OP_sp_p6oget_s 903 | |
+#define MVM_OP_sp_p6oget_bi 904 | |
+#define MVM_OP_sp_p6obind_o 905 | |
+#define MVM_OP_sp_p6obind_i 906 | |
+#define MVM_OP_sp_p6obind_u 907 | |
+#define MVM_OP_sp_p6obind_n 908 | |
+#define MVM_OP_sp_p6obind_s 909 | |
+#define MVM_OP_sp_p6oget_i32 910 | |
+#define MVM_OP_sp_p6oget_u32 911 | |
+#define MVM_OP_sp_p6obind_i32 912 | |
+#define MVM_OP_sp_p6obind_u32 913 | |
+#define MVM_OP_sp_getvt_o 914 | |
+#define MVM_OP_sp_getvc_o 915 | |
+#define MVM_OP_sp_fastbox_i 916 | |
+#define MVM_OP_sp_fastbox_u 917 | |
+#define MVM_OP_sp_fastbox_bi 918 | |
+#define MVM_OP_sp_fastbox_i_ic 919 | |
+#define MVM_OP_sp_fastbox_u_ic 920 | |
+#define MVM_OP_sp_fastbox_bi_ic 921 | |
+#define MVM_OP_sp_deref_get_i64 922 | |
+#define MVM_OP_sp_deref_get_n 923 | |
+#define MVM_OP_sp_deref_bind_i64 924 | |
+#define MVM_OP_sp_deref_bind_n 925 | |
+#define MVM_OP_sp_getlexvia_o 926 | |
+#define MVM_OP_sp_getlexvia_ins 927 | |
+#define MVM_OP_sp_bindlexvia_os 928 | |
+#define MVM_OP_sp_bindlexvia_in 929 | |
+#define MVM_OP_sp_getstringfrom 930 | |
+#define MVM_OP_sp_getwvalfrom 931 | |
+#define MVM_OP_sp_jit_enter 932 | |
+#define MVM_OP_sp_istrue_n 933 | |
+#define MVM_OP_sp_boolify_iter 934 | |
+#define MVM_OP_sp_boolify_iter_arr 935 | |
+#define MVM_OP_sp_boolify_iter_hash 936 | |
+#define MVM_OP_sp_cas_o 937 | |
+#define MVM_OP_sp_atomicload_o 938 | |
+#define MVM_OP_sp_atomicstore_o 939 | |
+#define MVM_OP_sp_add_I 940 | |
+#define MVM_OP_sp_sub_I 941 | |
+#define MVM_OP_sp_mul_I 942 | |
+#define MVM_OP_sp_bool_I 943 | |
+#define MVM_OP_sp_runbytecode_v 944 | |
+#define MVM_OP_sp_runbytecode_i 945 | |
+#define MVM_OP_sp_runbytecode_u 946 | |
+#define MVM_OP_sp_runbytecode_n 947 | |
+#define MVM_OP_sp_runbytecode_s 948 | |
+#define MVM_OP_sp_runbytecode_o 949 | |
+#define MVM_OP_sp_runcfunc_v 950 | |
+#define MVM_OP_sp_runcfunc_i 951 | |
+#define MVM_OP_sp_runcfunc_u 952 | |
+#define MVM_OP_sp_runcfunc_n 953 | |
+#define MVM_OP_sp_runcfunc_s 954 | |
+#define MVM_OP_sp_runcfunc_o 955 | |
+#define MVM_OP_sp_runnativecall_v 956 | |
+#define MVM_OP_sp_runnativecall_i 957 | |
+#define MVM_OP_sp_runnativecall_u 958 | |
+#define MVM_OP_sp_runnativecall_n 959 | |
+#define MVM_OP_sp_runnativecall_s 960 | |
+#define MVM_OP_sp_runnativecall_o 961 | |
+#define MVM_OP_sp_resumption 962 | |
+#define MVM_OP_prof_enter 963 | |
+#define MVM_OP_prof_enterspesh 964 | |
+#define MVM_OP_prof_enterinline 965 | |
+#define MVM_OP_prof_enternative 966 | |
+#define MVM_OP_prof_exit 967 | |
+#define MVM_OP_prof_allocated 968 | |
+#define MVM_OP_prof_replaced 969 | |
+#define MVM_OP_ctw_check 970 | |
+#define MVM_OP_coverage_log 971 | |
+#define MVM_OP_breakpoint 972 | |
#define MVM_OP_EXT_BASE 1024 | |
#define MVM_OP_EXT_CU_LIMIT 1024 | |
diff --git src/jit/graph.c src/jit/graph.c | |
index 099bc559a..6e6e09023 100644 | |
--- src/jit/graph.c | |
+++ src/jit/graph.c | |
@@ -116,6 +116,7 @@ static void * op_to_func(MVMThreadContext *tc, MVMint16 opcode) { | |
case MVM_OP_captureposelems: return MVM_capture_num_pos_args; | |
case MVM_OP_captureposarg: return MVM_capture_arg_pos_o; | |
case MVM_OP_captureposarg_i: return MVM_capture_arg_pos_i; | |
+ case MVM_OP_captureposarg_u: return MVM_capture_arg_pos_u; | |
case MVM_OP_captureposarg_n: return MVM_capture_arg_pos_n; | |
case MVM_OP_captureposarg_s: return MVM_capture_arg_pos_s; | |
case MVM_OP_captureposprimspec: return MVM_capture_arg_pos_primspec; | |
@@ -393,6 +394,7 @@ static void * op_to_func(MVMThreadContext *tc, MVMint16 opcode) { | |
case MVM_OP_getattrref_n: return MVM_nativeref_attr_n; | |
case MVM_OP_getattrref_s: return MVM_nativeref_attr_s; | |
case MVM_OP_getattrsref_i: return MVM_nativeref_attr_i; | |
+ case MVM_OP_getattrsref_u: return MVM_nativeref_attr_u; | |
case MVM_OP_getattrsref_n: return MVM_nativeref_attr_n; | |
case MVM_OP_getattrsref_s: return MVM_nativeref_attr_s; | |
case MVM_OP_atposref_i: return MVM_nativeref_pos_i; | |
@@ -853,7 +855,7 @@ static MVMint32 consume_reprop(MVMThreadContext *tc, MVMJitGraph *jg, | |
MVMint32 value = ins->operands[2].reg.orig; | |
MVMint32 kind = op == MVM_OP_bindpos_i || op == MVM_OP_bindkey_i ? MVM_reg_int64 : | |
- op == MVM_OP_bindpos_u ? MVM_reg_int64 : | |
+ op == MVM_OP_bindpos_u ? MVM_reg_uint64 : | |
op == MVM_OP_bindpos_n || op == MVM_OP_bindkey_n ? MVM_reg_num64 : | |
op == MVM_OP_bindpos_s || op == MVM_OP_bindkey_s ? MVM_reg_str : | |
MVM_reg_obj; | |
@@ -1647,7 +1649,9 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
case MVM_OP_div_i: | |
case MVM_OP_mod_i: | |
case MVM_OP_inc_i: | |
+ case MVM_OP_inc_u: | |
case MVM_OP_dec_i: | |
+ case MVM_OP_dec_u: | |
case MVM_OP_neg_i: | |
case MVM_OP_band_i: | |
case MVM_OP_bor_i: | |
@@ -1666,7 +1670,9 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
case MVM_OP_coerce_iu: | |
case MVM_OP_coerce_ui: | |
case MVM_OP_coerce_ni: | |
+ case MVM_OP_coerce_nu: | |
case MVM_OP_coerce_in: | |
+ case MVM_OP_coerce_un: | |
case MVM_OP_extend_i8: | |
case MVM_OP_extend_u8: | |
case MVM_OP_extend_i16: | |
@@ -1732,26 +1738,34 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
case MVM_OP_sp_p6oget_o: | |
case MVM_OP_sp_p6oget_s: | |
case MVM_OP_sp_p6oget_i: | |
+ case MVM_OP_sp_p6oget_u: | |
case MVM_OP_sp_p6oget_n: | |
case MVM_OP_sp_p6ogetvc_o: | |
case MVM_OP_sp_p6ogetvt_o: | |
case MVM_OP_sp_p6oget_bi: | |
case MVM_OP_sp_p6oget_i32: | |
+ case MVM_OP_sp_p6oget_u32: | |
case MVM_OP_sp_getvc_o: | |
case MVM_OP_sp_getvt_o: | |
case MVM_OP_sp_p6obind_i: | |
+ case MVM_OP_sp_p6obind_u: | |
case MVM_OP_sp_p6obind_n: | |
case MVM_OP_sp_p6obind_s: | |
case MVM_OP_sp_p6obind_o: | |
case MVM_OP_sp_p6obind_i32: | |
+ case MVM_OP_sp_p6obind_u32: | |
case MVM_OP_sp_bind_i64: | |
+ case MVM_OP_sp_bind_u64: | |
case MVM_OP_sp_bind_i32: | |
+ case MVM_OP_sp_bind_u32: | |
case MVM_OP_sp_bind_n: | |
case MVM_OP_sp_bind_s: | |
case MVM_OP_sp_bind_s_nowb: | |
case MVM_OP_sp_bind_o: | |
case MVM_OP_sp_get_i64: | |
+ case MVM_OP_sp_get_u64: | |
case MVM_OP_sp_get_i32: | |
+ case MVM_OP_sp_get_u32: | |
case MVM_OP_sp_get_n: | |
case MVM_OP_sp_get_s: | |
case MVM_OP_sp_get_o: | |
@@ -1850,7 +1864,9 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
case MVM_OP_sp_atomicstore_o: | |
/* Specialized boxings */ | |
case MVM_OP_sp_fastbox_i: | |
+ case MVM_OP_sp_fastbox_u: | |
case MVM_OP_sp_fastbox_i_ic: | |
+ case MVM_OP_sp_fastbox_u_ic: | |
case MVM_OP_sp_fastbox_bi: | |
case MVM_OP_sp_fastbox_bi_ic: | |
/* Specialized boxings */ | |
@@ -1860,6 +1876,7 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
case MVM_OP_sp_bool_I: | |
/* Specialized argument reading */ | |
case MVM_OP_sp_getarg_i: | |
+ case MVM_OP_sp_getarg_u: | |
case MVM_OP_sp_getarg_n: | |
case MVM_OP_sp_getarg_s: | |
case MVM_OP_sp_getarg_o: | |
@@ -2181,6 +2198,7 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
jg_append_call_c(tc, jg, op_to_func(tc, op), 3, args, MVM_JIT_RV_PTR, dst); | |
break; | |
} | |
+ case MVM_OP_captureposarg_u: | |
case MVM_OP_captureposarg_i: { | |
MVMint16 dst = ins->operands[0].reg.orig; | |
MVMint16 capture = ins->operands[1].reg.orig; | |
@@ -3500,6 +3518,7 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
} | |
/* native references (as simple function calls for now) */ | |
case MVM_OP_iscont_i: | |
+ case MVM_OP_iscont_u: | |
case MVM_OP_iscont_n: | |
case MVM_OP_iscont_s: | |
case MVM_OP_isrwcont: { | |
@@ -3589,6 +3608,7 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
break; | |
} | |
case MVM_OP_getattrsref_i: | |
+ case MVM_OP_getattrsref_u: | |
case MVM_OP_getattrsref_n: | |
case MVM_OP_getattrsref_s: { | |
MVMint16 dst = ins->operands[0].reg.orig; | |
@@ -3797,6 +3817,7 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
} | |
case MVM_OP_sp_runbytecode_v: | |
case MVM_OP_sp_runbytecode_i: | |
+ case MVM_OP_sp_runbytecode_u: | |
case MVM_OP_sp_runbytecode_s: | |
case MVM_OP_sp_runbytecode_n: | |
case MVM_OP_sp_runbytecode_o: { | |
@@ -3816,11 +3837,13 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
? MVM_RETURN_VOID | |
: op == MVM_OP_sp_runbytecode_i | |
? MVM_RETURN_INT | |
- : op == MVM_OP_sp_runbytecode_s | |
- ? MVM_RETURN_STR | |
- : op == MVM_OP_sp_runbytecode_n | |
- ? MVM_RETURN_NUM | |
- : MVM_RETURN_OBJ; | |
+ : op == MVM_OP_sp_runbytecode_u | |
+ ? MVM_RETURN_UINT | |
+ : op == MVM_OP_sp_runbytecode_s | |
+ ? MVM_RETURN_STR | |
+ : op == MVM_OP_sp_runbytecode_n | |
+ ? MVM_RETURN_NUM | |
+ : MVM_RETURN_OBJ; | |
node->u.runbytecode.return_register = dst; | |
node->u.runbytecode.map = &ins->operands[3 + start]; | |
node->u.runbytecode.code_register = code; | |
@@ -3833,6 +3856,7 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
} | |
case MVM_OP_sp_runcfunc_v: | |
case MVM_OP_sp_runcfunc_i: | |
+ case MVM_OP_sp_runcfunc_u: | |
case MVM_OP_sp_runcfunc_s: | |
case MVM_OP_sp_runcfunc_n: | |
case MVM_OP_sp_runcfunc_o: { | |
@@ -3851,11 +3875,13 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
? MVM_RETURN_VOID | |
: op == MVM_OP_sp_runcfunc_i | |
? MVM_RETURN_INT | |
- : op == MVM_OP_sp_runcfunc_s | |
- ? MVM_RETURN_STR | |
- : op == MVM_OP_sp_runcfunc_n | |
- ? MVM_RETURN_NUM | |
- : MVM_RETURN_OBJ; | |
+ : op == MVM_OP_sp_runcfunc_u | |
+ ? MVM_RETURN_UINT | |
+ : op == MVM_OP_sp_runcfunc_s | |
+ ? MVM_RETURN_STR | |
+ : op == MVM_OP_sp_runcfunc_n | |
+ ? MVM_RETURN_NUM | |
+ : MVM_RETURN_OBJ; | |
node->u.runccode.return_register = dst; | |
node->u.runccode.code_register = code; | |
node->u.runccode.map = &ins->operands[2 + start]; | |
@@ -3866,6 +3892,7 @@ static MVMint32 consume_ins(MVMThreadContext *tc, MVMJitGraph *jg, | |
break; | |
} | |
case MVM_OP_sp_runnativecall_v: | |
+ case MVM_OP_sp_runnativecall_u: | |
case MVM_OP_sp_runnativecall_i: { | |
int start = (op == MVM_OP_sp_runnativecall_v) ? 0 : 1; | |
MVMint16 dst = ins->operands[0].reg.orig; | |
diff --git src/jit/x64/emit.dasc src/jit/x64/emit.dasc | |
index 9c28814d7..81b3a95b2 100644 | |
--- src/jit/x64/emit.dasc | |
+++ src/jit/x64/emit.dasc | |
@@ -709,6 +709,7 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
case MVM_OP_sp_getarg_o: | |
case MVM_OP_sp_getarg_n: | |
case MVM_OP_sp_getarg_s: | |
+ case MVM_OP_sp_getarg_u: | |
case MVM_OP_sp_getarg_i: { | |
MVMint32 reg = ins->operands[0].reg.orig; | |
MVMuint16 idx = ins->operands[1].callsite_idx; | |
@@ -722,7 +723,9 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
break; | |
} | |
case MVM_OP_sp_p6oget_i: | |
+ case MVM_OP_sp_p6oget_u: | |
case MVM_OP_sp_p6oget_i32: | |
+ case MVM_OP_sp_p6oget_u32: | |
case MVM_OP_sp_p6oget_n: | |
case MVM_OP_sp_p6oget_s: | |
case MVM_OP_sp_p6oget_bi: | |
@@ -821,7 +824,7 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
| callp &MVM_p6bigint_get_int64; | |
| mov TMP3, RV; | |
| 6: | |
- } else if (op == MVM_OP_sp_p6oget_i32) { | |
+ } else if (op == MVM_OP_sp_p6oget_i32 || op == MVM_OP_sp_p6oget_u32) { | |
| movsxd TMP3, dword [TMP2]; | |
} | |
else { | |
@@ -833,7 +836,9 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
break; | |
} | |
case MVM_OP_sp_bind_i64: | |
+ case MVM_OP_sp_bind_u64: | |
case MVM_OP_sp_bind_i32: | |
+ case MVM_OP_sp_bind_u32: | |
case MVM_OP_sp_bind_n: | |
case MVM_OP_sp_bind_s: | |
case MVM_OP_sp_bind_s_nowb: | |
@@ -862,6 +867,7 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
break; | |
} | |
case MVM_OP_sp_get_i64: | |
+ case MVM_OP_sp_get_u64: | |
case MVM_OP_sp_get_n: | |
case MVM_OP_sp_get_s: { | |
MVMint16 dst = ins->operands[0].reg.orig; | |
@@ -885,6 +891,7 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
| mov WORK[dst], TMP2; | |
break; | |
} | |
+ case MVM_OP_sp_get_u32: | |
case MVM_OP_sp_get_i32: { | |
MVMint16 dst = ins->operands[0].reg.orig; | |
MVMint16 obj = ins->operands[1].reg.orig; | |
@@ -918,7 +925,9 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
break; | |
} | |
case MVM_OP_sp_p6obind_i: | |
+ case MVM_OP_sp_p6obind_u: | |
case MVM_OP_sp_p6obind_i32: | |
+ case MVM_OP_sp_p6obind_u32: | |
case MVM_OP_sp_p6obind_n: | |
case MVM_OP_sp_p6obind_s: | |
case MVM_OP_sp_p6obind_o: { | |
@@ -1243,11 +1252,13 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
| mov WORK[dst], rdx; | |
break; | |
} | |
+ case MVM_OP_inc_u: | |
case MVM_OP_inc_i: { | |
MVMint32 reg = ins->operands[0].reg.orig; | |
| add qword WORK[reg], 1; | |
break; | |
} | |
+ case MVM_OP_dec_u: | |
case MVM_OP_dec_i: { | |
MVMint32 reg = ins->operands[0].reg.orig; | |
| sub qword WORK[reg], 1; | |
@@ -2375,7 +2386,8 @@ void MVM_jit_emit_primitive(MVMThreadContext *tc, MVMJitCompiler *compiler, MVMJ | |
emit_fastcreate(tc, compiler, jg, ins); | |
| mov aword WORK[dst], RV; | |
| mov TMP3, WORK[val]; | |
- if (op == MVM_OP_sp_fastbox_i || op == MVM_OP_sp_fastbox_i_ic) { | |
+ if (op == MVM_OP_sp_fastbox_i || op == MVM_OP_sp_fastbox_i_ic || | |
+ op == MVM_OP_sp_fastbox_u || op == MVM_OP_sp_fastbox_u_ic) { | |
/* Normal integer */ | |
| mov qword [RV+offset], TMP3; | |
} | |
diff --git src/profiler/instrument.c src/profiler/instrument.c | |
index 3c28221fe..7e8e419bc 100644 | |
--- src/profiler/instrument.c | |
+++ src/profiler/instrument.c | |
@@ -48,6 +48,7 @@ static void instrument_graph(MVMThreadContext *tc, MVMSpeshGraph *g) { | |
while (ins) { | |
switch (ins->info->opcode) { | |
case MVM_OP_return_i: | |
+ case MVM_OP_return_u: | |
case MVM_OP_return_n: | |
case MVM_OP_return_s: | |
case MVM_OP_return_o: | |
@@ -145,6 +146,7 @@ static void instrument_graph(MVMThreadContext *tc, MVMSpeshGraph *g) { | |
case MVM_OP_loadbytecode: | |
case MVM_OP_loadbytecodefh: | |
case MVM_OP_multidimref_i: | |
+ case MVM_OP_multidimref_u: | |
case MVM_OP_multidimref_n: | |
case MVM_OP_multidimref_s: | |
case MVM_OP_asyncudp: | |
@@ -270,15 +272,19 @@ static void instrument_graph(MVMThreadContext *tc, MVMSpeshGraph *g) { | |
case MVM_OP_getlexref_n32: | |
case MVM_OP_getlexref_s: | |
case MVM_OP_getlexref_ni: | |
+ case MVM_OP_getlexref_nu: | |
case MVM_OP_getlexref_nn: | |
case MVM_OP_getlexref_ns: | |
case MVM_OP_atposref_i: | |
+ case MVM_OP_atposref_u: | |
case MVM_OP_atposref_n: | |
case MVM_OP_atposref_s: | |
case MVM_OP_getattrref_i: | |
+ case MVM_OP_getattrref_u: | |
case MVM_OP_getattrref_n: | |
case MVM_OP_getattrref_s: | |
case MVM_OP_getattrsref_i: | |
+ case MVM_OP_getattrsref_u: | |
case MVM_OP_getattrsref_n: | |
case MVM_OP_getattrsref_s: | |
case MVM_OP_nativecallcast: | |
diff --git src/spesh/args.c src/spesh/args.c | |
index 1568f034e..990ddff74 100644 | |
--- src/spesh/args.c | |
+++ src/spesh/args.c | |
@@ -161,7 +161,7 @@ static void insert_getarg_and_box(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpe | |
unboxed_temp = MVM_spesh_manipulate_get_temp_reg(tc, g, MVM_reg_uint64); | |
box_op = MVM_OP_box_u; | |
hlltype_op = MVM_OP_hllboxtype_i; | |
- fetch_op = MVM_OP_sp_getarg_i; | |
+ fetch_op = MVM_OP_sp_getarg_u; | |
break; | |
case MVM_CALLSITE_ARG_NUM: | |
unboxed_temp = MVM_spesh_manipulate_get_temp_reg(tc, g, MVM_reg_num64); | |
@@ -480,7 +480,7 @@ void MVM_spesh_args(MVMThreadContext *tc, MVMSpeshGraph *g, MVMCallsite *cs, | |
if (arg_type != MVM_CALLSITE_ARG_OBJ || | |
!cmp_prim_spec(tc, type_tuple, i, MVM_STORAGE_SPEC_BP_UINT64)) { | |
MVM_spesh_graph_add_comment(tc, g, pos_ins[i], | |
- "bailed argument spesh: expected arg flag %d to be uint or box a uint; type at position was %s", i, type_tuple && type_tuple[i].type ? MVM_6model_get_debug_name(tc, type_tuple[i].type) : "null type tuple"); | |
+ "bailed argument spesh: expected arg flag %d of type %d to be uint or box a uint; type at position was %s", i, arg_type, type_tuple && type_tuple[i].type ? MVM_6model_get_debug_name(tc, type_tuple[i].type) : "null type tuple"); | |
goto cleanup; | |
} | |
break; | |
@@ -685,7 +685,7 @@ void MVM_spesh_args(MVMThreadContext *tc, MVMSpeshGraph *g, MVMCallsite *cs, | |
case MVM_OP_param_rp_u: | |
case MVM_OP_param_op_u: | |
if (arg_type == MVM_CALLSITE_ARG_UINT) { | |
- pos_ins[i]->info = MVM_op_get_op(MVM_OP_sp_getarg_i); | |
+ pos_ins[i]->info = MVM_op_get_op(MVM_OP_sp_getarg_u); | |
} | |
else { | |
pos_unbox(tc, g, pos_bb[i], pos_ins[i], MVM_op_get_op(MVM_OP_decont_u)); | |
@@ -737,7 +737,7 @@ void MVM_spesh_args(MVMThreadContext *tc, MVMSpeshGraph *g, MVMCallsite *cs, | |
else if (arg_type == MVM_CALLSITE_ARG_UINT) { | |
pos_box(tc, g, pos_bb[i], pos_ins[i], | |
MVM_op_get_op(MVM_OP_hllboxtype_i), MVM_op_get_op(MVM_OP_box_u), | |
- MVM_op_get_op(MVM_OP_sp_getarg_i), MVM_reg_uint64); | |
+ MVM_op_get_op(MVM_OP_sp_getarg_u), MVM_reg_uint64); | |
pos_added[i] += 2; | |
} | |
else if (arg_type == MVM_CALLSITE_ARG_NUM) { | |
@@ -828,7 +828,7 @@ void MVM_spesh_args(MVMThreadContext *tc, MVMSpeshGraph *g, MVMCallsite *cs, | |
break; | |
case MVM_OP_param_rn_u: | |
if (found_flag & MVM_CALLSITE_ARG_UINT) { | |
- named_ins[i]->info = MVM_op_get_op(MVM_OP_sp_getarg_i); | |
+ named_ins[i]->info = MVM_op_get_op(MVM_OP_sp_getarg_u); | |
named_ins[i]->operands[1].lit_i16 = found_idx; | |
named_used_bit_field |= (MVMuint64)1 << cur_named; | |
} | |
@@ -887,7 +887,7 @@ void MVM_spesh_args(MVMThreadContext *tc, MVMSpeshGraph *g, MVMCallsite *cs, | |
else if (found_flag & MVM_CALLSITE_ARG_UINT) | |
pos_box(tc, g, named_bb[i], named_ins[i], | |
MVM_op_get_op(MVM_OP_hllboxtype_i), MVM_op_get_op(MVM_OP_box_u), | |
- MVM_op_get_op(MVM_OP_sp_getarg_i), MVM_reg_uint64); | |
+ MVM_op_get_op(MVM_OP_sp_getarg_u), MVM_reg_uint64); | |
else if (found_flag & MVM_CALLSITE_ARG_NUM) | |
pos_box(tc, g, named_bb[i], named_ins[i], | |
MVM_op_get_op(MVM_OP_hllboxtype_n), MVM_op_get_op(MVM_OP_box_n), | |
@@ -933,7 +933,7 @@ void MVM_spesh_args(MVMThreadContext *tc, MVMSpeshGraph *g, MVMCallsite *cs, | |
MVM_spesh_manipulate_remove_successor(tc, named_bb[i], named_ins[i]->operands[2].ins_bb); | |
} | |
else if (found_flag & MVM_CALLSITE_ARG_UINT) { | |
- named_ins[i]->info = MVM_op_get_op(MVM_OP_sp_getarg_i); | |
+ named_ins[i]->info = MVM_op_get_op(MVM_OP_sp_getarg_u); | |
named_ins[i]->operands[1].lit_i16 = found_idx; | |
MVM_spesh_manipulate_insert_goto(tc, g, named_bb[i], named_ins[i], | |
named_ins[i]->operands[2].ins_bb); | |
@@ -1036,7 +1036,7 @@ void MVM_spesh_args(MVMThreadContext *tc, MVMSpeshGraph *g, MVMCallsite *cs, | |
else if (found_flag & MVM_CALLSITE_ARG_UINT) | |
pos_box(tc, g, named_bb[i], named_ins[i], | |
MVM_op_get_op(MVM_OP_hllboxtype_i), MVM_op_get_op(MVM_OP_box_u), | |
- MVM_op_get_op(MVM_OP_sp_getarg_i), MVM_reg_uint64); | |
+ MVM_op_get_op(MVM_OP_sp_getarg_u), MVM_reg_uint64); | |
else if (found_flag & MVM_CALLSITE_ARG_NUM) | |
pos_box(tc, g, named_bb[i], named_ins[i], | |
MVM_op_get_op(MVM_OP_hllboxtype_n), MVM_op_get_op(MVM_OP_box_n), | |
diff --git src/spesh/disp.c src/spesh/disp.c | |
index fcbf7d2b0..a3dc66c25 100644 | |
--- src/spesh/disp.c | |
+++ src/spesh/disp.c | |
@@ -1196,6 +1196,14 @@ static int translate_dispatch_program(MVMThreadContext *tc, MVMSpeshGraph *g, | |
base_op = MVM_op_get_op(MVM_OP_sp_runnativecall_i); | |
box_return_value = 1; | |
break; | |
+ case MVM_NATIVECALL_ARG_UCHAR: | |
+ case MVM_NATIVECALL_ARG_USHORT: | |
+ case MVM_NATIVECALL_ARG_UINT: | |
+ case MVM_NATIVECALL_ARG_ULONG: | |
+ case MVM_NATIVECALL_ARG_ULONGLONG: | |
+ base_op = MVM_op_get_op(MVM_OP_sp_runnativecall_u); | |
+ box_return_value = 1; | |
+ break; | |
} | |
} | |
diff --git src/spesh/facts.c src/spesh/facts.c | |
index 028744338..b35b18df5 100644 | |
--- src/spesh/facts.c | |
+++ src/spesh/facts.c | |
@@ -460,8 +460,10 @@ static void add_bb_facts(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshBB *bb, | |
break; | |
case MVM_OP_sp_fastcreate: | |
case MVM_OP_sp_fastbox_i: | |
+ case MVM_OP_sp_fastbox_u: | |
case MVM_OP_sp_fastbox_bi: | |
case MVM_OP_sp_fastbox_i_ic: | |
+ case MVM_OP_sp_fastbox_u_ic: | |
case MVM_OP_sp_fastbox_bi_ic: | |
case MVM_OP_sp_add_I: | |
case MVM_OP_sp_sub_I: | |
@@ -649,6 +651,7 @@ static void add_bb_facts(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshBB *bb, | |
ins->operands[0].reg.orig, ins->operands[0].reg.i, | |
g->sf->body.cu->body.hll_config->int_lex_ref); | |
break; | |
+ case MVM_OP_getlexref_u: | |
case MVM_OP_getlexref_u32: | |
case MVM_OP_getlexref_u16: | |
case MVM_OP_getlexref_u8: | |
@@ -673,6 +676,12 @@ static void add_bb_facts(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshBB *bb, | |
ins->operands[0].reg.orig, ins->operands[0].reg.i, | |
g->sf->body.cu->body.hll_config->int_attr_ref); | |
break; | |
+ case MVM_OP_getattrref_u: | |
+ case MVM_OP_getattrsref_u: | |
+ create_facts_with_type(tc, g, | |
+ ins->operands[0].reg.orig, ins->operands[0].reg.i, | |
+ g->sf->body.cu->body.hll_config->uint_attr_ref); | |
+ break; | |
case MVM_OP_getattrref_n: | |
case MVM_OP_getattrsref_n: | |
create_facts_with_type(tc, g, | |
@@ -690,6 +699,11 @@ static void add_bb_facts(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshBB *bb, | |
ins->operands[0].reg.orig, ins->operands[0].reg.i, | |
g->sf->body.cu->body.hll_config->int_pos_ref); | |
break; | |
+ case MVM_OP_atposref_u: | |
+ create_facts_with_type(tc, g, | |
+ ins->operands[0].reg.orig, ins->operands[0].reg.i, | |
+ g->sf->body.cu->body.hll_config->uint_pos_ref); | |
+ break; | |
case MVM_OP_atposref_n: | |
create_facts_with_type(tc, g, | |
ins->operands[0].reg.orig, ins->operands[0].reg.i, | |
diff --git src/spesh/graph.c src/spesh/graph.c | |
index 697f084de..21a94b5bb 100644 | |
--- src/spesh/graph.c | |
+++ src/spesh/graph.c | |
@@ -180,16 +180,19 @@ int MVM_spesh_graph_ins_ends_bb(MVMThreadContext *tc, const MVMOpInfo *info) { | |
case MVM_OP_sp_dispatch_o: | |
case MVM_OP_sp_runbytecode_v: | |
case MVM_OP_sp_runbytecode_i: | |
+ case MVM_OP_sp_runbytecode_u: | |
case MVM_OP_sp_runbytecode_n: | |
case MVM_OP_sp_runbytecode_s: | |
case MVM_OP_sp_runbytecode_o: | |
case MVM_OP_sp_runcfunc_v: | |
case MVM_OP_sp_runcfunc_i: | |
+ case MVM_OP_sp_runcfunc_u: | |
case MVM_OP_sp_runcfunc_n: | |
case MVM_OP_sp_runcfunc_s: | |
case MVM_OP_sp_runcfunc_o: | |
case MVM_OP_sp_runnativecall_v: | |
case MVM_OP_sp_runnativecall_i: | |
+ case MVM_OP_sp_runnativecall_u: | |
case MVM_OP_sp_runnativecall_n: | |
case MVM_OP_sp_runnativecall_s: | |
case MVM_OP_sp_runnativecall_o: | |
diff --git src/spesh/inline.c src/spesh/inline.c | |
index 4743555e7..6f48acdfb 100644 | |
--- src/spesh/inline.c | |
+++ src/spesh/inline.c | |
@@ -165,6 +165,7 @@ static int is_graph_inlineable(MVMThreadContext *tc, MVMSpeshGraph *inliner, | |
* instruction, because we can't uninline in such a case. */ | |
else if (opcode == MVM_OP_sp_getarg_o || | |
opcode == MVM_OP_sp_getarg_i || | |
+ opcode == MVM_OP_sp_getarg_u || | |
opcode == MVM_OP_sp_getarg_n || | |
opcode == MVM_OP_sp_getarg_s) { | |
if (ins->operands[1].lit_i16 >= MAX_ARGS_FOR_OPT) { | |
@@ -900,6 +901,10 @@ static MVMSpeshBB * merge_graph(MVMThreadContext *tc, MVMSpeshGraph *inliner, | |
inliner->inlines[total_inlines - 1].res_reg = runbytecode_ins->operands[0].reg.orig; | |
inliner->inlines[total_inlines - 1].res_type = MVM_RETURN_INT; | |
break; | |
+ case MVM_OP_sp_runbytecode_u: | |
+ inliner->inlines[total_inlines - 1].res_reg = runbytecode_ins->operands[0].reg.orig; | |
+ inliner->inlines[total_inlines - 1].res_type = MVM_RETURN_UINT; | |
+ break; | |
case MVM_OP_sp_runbytecode_n: | |
inliner->inlines[total_inlines - 1].res_reg = runbytecode_ins->operands[0].reg.orig; | |
inliner->inlines[total_inlines - 1].res_type = MVM_RETURN_NUM; | |
@@ -1175,7 +1180,7 @@ static void rewrite_uint_return(MVMThreadContext *tc, MVMSpeshGraph *g, | |
break; | |
default: | |
MVM_oops(tc, | |
- "Spesh inline: unhandled case (%s) of return_i", runbytecode_ins->info->name); | |
+ "Spesh inline: unhandled case (%s) of return_u", runbytecode_ins->info->name); | |
} | |
} | |
static void rewrite_num_return(MVMThreadContext *tc, MVMSpeshGraph *g, | |
@@ -1228,6 +1233,9 @@ static void rewrite_obj_return(MVMThreadContext *tc, MVMSpeshGraph *g, | |
case MVM_OP_sp_runbytecode_i: | |
return_to_op(tc, g, return_ins, runbytecode_ins->operands[0], MVM_OP_unbox_i); | |
break; | |
+ case MVM_OP_sp_runbytecode_u: | |
+ return_to_op(tc, g, return_ins, runbytecode_ins->operands[0], MVM_OP_unbox_u); | |
+ break; | |
case MVM_OP_sp_runbytecode_n: | |
return_to_op(tc, g, return_ins, runbytecode_ins->operands[0], MVM_OP_unbox_n); | |
break; | |
@@ -1357,6 +1365,7 @@ static void rewrite_args(MVMThreadContext *tc, MVMSpeshGraph *inliner, | |
switch (opcode) { | |
case MVM_OP_sp_getarg_o: | |
case MVM_OP_sp_getarg_i: | |
+ case MVM_OP_sp_getarg_u: | |
case MVM_OP_sp_getarg_n: | |
case MVM_OP_sp_getarg_s: { | |
MVMuint16 idx = ins->operands[1].lit_i16; | |
diff --git src/spesh/optimize.c src/spesh/optimize.c | |
index 4b5c2ef3b..b3c240906 100644 | |
--- src/spesh/optimize.c | |
+++ src/spesh/optimize.c | |
@@ -770,6 +770,9 @@ static void optimize_container_check(MVMThreadContext *tc, MVMSpeshGraph *g, | |
case MVM_STORAGE_SPEC_BP_INT: | |
known_result = ins->info->opcode == MVM_OP_iscont_i; | |
break; | |
+ case MVM_STORAGE_SPEC_BP_UINT64: | |
+ known_result = ins->info->opcode == MVM_OP_iscont_u; | |
+ break; | |
case MVM_STORAGE_SPEC_BP_NUM: | |
known_result = ins->info->opcode == MVM_OP_iscont_n; | |
break; | |
@@ -2095,6 +2098,7 @@ static void optimize_bb_switch(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshB | |
optimize_signedness_coerce(tc, g, bb, ins); | |
break; | |
case MVM_OP_coerce_in: | |
+ case MVM_OP_coerce_un: | |
optimize_coerce(tc, g, bb, ins); | |
break; | |
case MVM_OP_islist: | |
@@ -2144,18 +2148,22 @@ static void optimize_bb_switch(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshB | |
case MVM_OP_setelemspos: | |
case MVM_OP_splice: | |
case MVM_OP_bindattr_i: | |
+ case MVM_OP_bindattr_u: | |
case MVM_OP_bindattr_n: | |
case MVM_OP_bindattr_s: | |
case MVM_OP_bindattr_o: | |
case MVM_OP_bindattrs_i: | |
+ case MVM_OP_bindattrs_u: | |
case MVM_OP_bindattrs_n: | |
case MVM_OP_bindattrs_s: | |
case MVM_OP_bindattrs_o: | |
case MVM_OP_assign_i: | |
+ case MVM_OP_assign_u: | |
case MVM_OP_assign_n: | |
optimize_repr_op(tc, g, bb, ins, 0); | |
break; | |
case MVM_OP_atpos_i: | |
+ case MVM_OP_atpos_u: | |
case MVM_OP_atpos_n: | |
case MVM_OP_atpos_s: | |
case MVM_OP_atpos_o: | |
@@ -2175,10 +2183,12 @@ static void optimize_bb_switch(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshB | |
case MVM_OP_existskey: | |
case MVM_OP_existspos: | |
case MVM_OP_getattr_i: | |
+ case MVM_OP_getattr_u: | |
case MVM_OP_getattr_n: | |
case MVM_OP_getattr_s: | |
case MVM_OP_getattr_o: | |
case MVM_OP_getattrs_i: | |
+ case MVM_OP_getattrs_u: | |
case MVM_OP_getattrs_n: | |
case MVM_OP_getattrs_s: | |
case MVM_OP_getattrs_o: | |
@@ -2250,6 +2260,7 @@ static void optimize_bb_switch(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshB | |
case MVM_OP_iscont: | |
case MVM_OP_isrwcont: | |
case MVM_OP_iscont_i: | |
+ case MVM_OP_iscont_u: | |
case MVM_OP_iscont_n: | |
case MVM_OP_iscont_s: | |
optimize_container_check(tc, g, bb, ins); | |
@@ -2571,7 +2582,7 @@ static void walk_set_looking_for_unbool(MVMThreadContext *tc, MVMSpeshGraph *g, | |
const MVMOpInfo *opinfo = user->info; | |
MVMuint16 opcode = opinfo->opcode; | |
- if (opcode == MVM_OP_sp_runcfunc_i) { | |
+ if (opcode == MVM_OP_sp_runcfunc_i || opcode == MVM_OP_sp_runcfunc_u) { | |
MVMSpeshFacts *dispatch_facts = MVM_spesh_get_facts(tc, g, user->operands[1]); | |
if (is_syscall(tc, dispatch_facts, MVM_disp_syscall_boolify_boxed_int_impl)) | |
try_eliminate_one_box_unbox(tc, g, bb, box_ins, user); | |
@@ -2590,7 +2601,7 @@ static void try_eliminate_bool_unbool_pair(MVMThreadContext *tc, MVMSpeshGraph * | |
const MVMOpInfo *opinfo = user->info; | |
MVMuint16 opcode = opinfo->opcode; | |
- if (opcode == MVM_OP_sp_runcfunc_i) { | |
+ if (opcode == MVM_OP_sp_runcfunc_i || opcode == MVM_OP_sp_runcfunc_u) { | |
MVMSpeshFacts *dispatch_facts = MVM_spesh_get_facts(tc, g, user->operands[1]); | |
if (is_syscall(tc, dispatch_facts, MVM_disp_syscall_boolify_boxed_int_impl)) | |
try_eliminate_one_box_unbox(tc, g, bb, ins, user); | |
diff --git src/spesh/pea.c src/spesh/pea.c | |
index 401801775..0211a10a8 100644 | |
--- src/spesh/pea.c | |
+++ src/spesh/pea.c | |
@@ -220,6 +220,7 @@ static void apply_transform(MVMThreadContext *tc, MVMSpeshGraph *g, GraphState * | |
ins->info = MVM_op_get_op(MVM_OP_null); | |
break; | |
case MVM_OP_sp_p6oget_i: | |
+ case MVM_OP_sp_p6oget_u: | |
ins->info = MVM_op_get_op(MVM_OP_const_i64_16); | |
ins->operands[1].lit_i16 = 0; | |
break; | |
@@ -583,11 +584,13 @@ static MVMuint32 analyze(MVMThreadContext *tc, MVMSpeshGraph *g, GraphState *gs) | |
break; | |
} | |
case MVM_OP_sp_bind_i64: | |
+ case MVM_OP_sp_bind_u64: | |
case MVM_OP_sp_bind_n: | |
case MVM_OP_sp_bind_s: | |
case MVM_OP_sp_bind_s_nowb: | |
case MVM_OP_sp_bind_o: | |
case MVM_OP_sp_p6obind_i: | |
+ case MVM_OP_sp_p6obind_u: | |
case MVM_OP_sp_p6obind_n: | |
case MVM_OP_sp_p6obind_s: | |
case MVM_OP_sp_p6obind_o: { | |
@@ -597,6 +600,7 @@ static MVMuint32 analyze(MVMThreadContext *tc, MVMSpeshGraph *g, GraphState *gs) | |
MVMSpeshPEAAllocation *alloc = target->pea.allocation; | |
if (allocation_tracked(alloc)) { | |
MVMint32 is_p6o_op = opcode == MVM_OP_sp_p6obind_i || | |
+ opcode == MVM_OP_sp_p6obind_u || | |
opcode == MVM_OP_sp_p6obind_n || | |
opcode == MVM_OP_sp_p6obind_s || | |
opcode == MVM_OP_sp_p6obind_o; | |
@@ -627,6 +631,7 @@ static MVMuint32 analyze(MVMThreadContext *tc, MVMSpeshGraph *g, GraphState *gs) | |
break; | |
} | |
case MVM_OP_sp_p6oget_i: | |
+ case MVM_OP_sp_p6oget_u: | |
case MVM_OP_sp_p6oget_n: | |
case MVM_OP_sp_p6oget_s: | |
case MVM_OP_sp_p6oget_o: | |
diff --git tools/check-roots.py tools/check-roots.py | |
index a30a08e7d..00bb31019 100644 | |
--- tools/check-roots.py | |
+++ tools/check-roots.py | |
@@ -75,6 +75,7 @@ allocators = [ | |
'MVM_args_assert_void_return_ok', | |
'MVM_args_bind_failed', | |
'MVM_args_set_result_int', | |
+'MVM_args_set_result_uint', | |
'MVM_args_set_result_num', | |
'MVM_args_set_result_obj', | |
'MVM_args_set_result_str', | |
@@ -179,18 +180,23 @@ allocators = [ | |
'MVM_nativecall_invoke', | |
'MVM_nativecall_jit_graph_for_caller_code', | |
'MVM_nativeref_attr_i', | |
+'MVM_nativeref_attr_u', | |
'MVM_nativeref_attr_n', | |
'MVM_nativeref_attr_s', | |
'MVM_nativeref_lex_i', | |
+'MVM_nativeref_lex_u', | |
'MVM_nativeref_lex_n', | |
'MVM_nativeref_lex_name_i', | |
+'MVM_nativeref_lex_name_u', | |
'MVM_nativeref_lex_name_n', | |
'MVM_nativeref_lex_name_s', | |
'MVM_nativeref_lex_s', | |
'MVM_nativeref_multidim_i', | |
+'MVM_nativeref_multidim_u', | |
'MVM_nativeref_multidim_n', | |
'MVM_nativeref_multidim_s', | |
'MVM_nativeref_pos_i', | |
+'MVM_nativeref_pos_u', | |
'MVM_nativeref_pos_n', | |
'MVM_nativeref_pos_s', | |
'MVM_proc_getenvhash', | |
@@ -388,6 +394,7 @@ allocators = [ | |
'MVM_args_bind_failed', | |
'MVM_args_save_capture', | |
'MVM_args_set_result_int', | |
+'MVM_args_set_result_uint', | |
'MVM_args_set_result_num', | |
'MVM_args_set_result_str', | |
'MVM_args_use_capture', | |
@@ -492,6 +499,8 @@ allocators = [ | |
'at_pos', | |
'boot_typed_array', | |
'box_i', | |
+'box_u', | |
+'box_n', | |
'box_s', | |
'call_resolver', | |
'callback_handler', |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment