X-Git-Url: https://oss.titaniummirror.com/gitweb?p=msp430-binutils.git;a=blobdiff_plain;f=gas%2Fbfin-parse.c;fp=gas%2Fbfin-parse.c;h=c9ccad5ed7684bda0b529eec1857b333fefd2b0b;hp=5305e0713bede32225ca0c5f8b424fc3f1697b9f;hb=88750007d7869f178f0ba528f41efd3b74c424cf;hpb=6df9443a374e2b81278c61b8afc0a1eef7db280b diff --git a/gas/bfin-parse.c b/gas/bfin-parse.c index 5305e07..c9ccad5 100644 --- a/gas/bfin-parse.c +++ b/gas/bfin-parse.c @@ -424,7 +424,7 @@ #include "as.h" #include -#include "bfin-aux.h" // opcode generating auxiliaries +#include "bfin-aux.h" /* Opcode generating auxiliaries. */ #include "libbfd.h" #include "elf/common.h" #include "elf/bfin.h" @@ -570,13 +570,13 @@ int yyerror (char *msg); void error (char *format, ...) { va_list ap; - char buffer[2000]; + static char buffer[2000]; va_start (ap, format); vsprintf (buffer, format, ap); va_end (ap); - as_bad (buffer); + as_bad ("%s", buffer); } int @@ -623,12 +623,6 @@ extern int yylex (void); /* Auxiliary functions. */ -static void -neg_value (Expr_Node *expr) -{ - expr->value.i_value = -expr->value.i_value; -} - static int valid_dreg_pair (Register *reg1, Expr_Node *reg2) { @@ -665,6 +659,29 @@ check_multiply_halfregs (Macfunc *aa, Macfunc *ab) } +/* Check mac option. */ + +static int +check_macfunc_option (Macfunc *a, Opt_mode *opt) +{ + /* Default option is always valid. */ + if (opt->mod == 0) + return 0; + + if ((a->w == 1 && a->P == 1 + && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU + && opt->mod != M_S2RND && opt->mod != M_ISS2) + || (a->w == 1 && a->P == 0 + && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU + && opt->mod != M_T && opt->mod != M_TFU && opt->mod != M_S2RND + && opt->mod != M_ISS2 && opt->mod != M_IH) + || (a->w == 0 && a->P == 0 + && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_W32)) + return -1; + + return 0; +} + /* Check (vector) mac funcs and ops. */ static int @@ -675,6 +692,11 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa, Macfunc mtmp; Opt_mode otmp; + /* The option mode should be put at the end of the second instruction + of the vector except M, which should follow MAC1 instruction. */ + if (opa->mod != 0) + return yyerror ("Bad opt mode"); + /* If a0macfunc comes before a1macfunc, swap them. */ if (aa->n == 0) @@ -692,16 +714,14 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa, { if (opb->MM != 0) return yyerror ("(M) not allowed with A0MAC"); - if (opa->mod != 0) - return yyerror ("Bad opt mode"); if (ab->n != 0) return yyerror ("Vector AxMACs can't be same"); } /* If both ops are one of 0, 1, or 2, we have multiply_halfregs in both assignment_or_macfuncs. */ - if (aa->op < 3 && aa->op >=0 - && ab->op < 3 && ab->op >= 0) + if ((aa->op == 0 || aa->op == 1 || aa->op == 2) + && (ab->op == 0 || ab->op == 1 || ab->op == 2)) { if (check_multiply_halfregs (aa, ab) < 0) return -1; @@ -722,20 +742,18 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa, if (aa->w && (aa->dst.regno - ab->dst.regno != 1)) return yyerror ("Destination Dregs must differ by one"); } - /* We assign to full regs, thus obey even/odd rules. */ - else if ((aa->w && aa->P && IS_EVEN (aa->dst)) - || (ab->w && ab->P && !IS_EVEN (ab->dst))) - return yyerror ("Even/Odd register assignment mismatch"); - /* We assign to half regs, thus obey hi/low rules. */ - else if ( (aa->w && !aa->P && !IS_H (aa->dst)) - || (ab->w && !aa->P && IS_H (ab->dst))) - return yyerror ("High/Low register assignment mismatch"); + + /* Make sure mod flags get ORed, too. */ + opb->mod |= opa->mod; + + /* Check option. */ + if (check_macfunc_option (aa, opb) < 0 + && check_macfunc_option (ab, opb) < 0) + return yyerror ("bad option"); /* Make sure first macfunc has got both P flags ORed. */ aa->P |= ab->P; - /* Make sure mod flags get ORed, too. */ - opb->mod |= opa->mod; return 0; } @@ -762,6 +780,29 @@ is_group2 (INSTR_T x) return 0; } +static INSTR_T +gen_multi_instr_1 (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2) +{ + int mask1 = dsp32 ? insn_regmask (dsp32->value, dsp32->next->value) : 0; + int mask2 = dsp16_grp1 ? insn_regmask (dsp16_grp1->value, 0) : 0; + int mask3 = dsp16_grp2 ? insn_regmask (dsp16_grp2->value, 0) : 0; + + if ((mask1 & mask2) || (mask1 & mask3) || (mask2 & mask3)) + yyerror ("resource conflict in multi-issue instruction"); + + /* Anomaly 05000074 */ + if (ENABLE_AC_05000074 + && dsp32 != NULL && dsp16_grp1 != NULL + && (dsp32->value & 0xf780) == 0xc680 + && ((dsp16_grp1->value & 0xfe40) == 0x9240 + || (dsp16_grp1->value & 0xfe08) == 0xba08 + || (dsp16_grp1->value & 0xfc00) == 0xbc00)) + yyerror ("anomaly 05000074 - Multi-Issue Instruction with \ +dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported"); + + return bfin_gen_multi_instr (dsp32, dsp16_grp1, dsp16_grp2); +} + /* Enabling traces. */ @@ -784,7 +825,7 @@ is_group2 (INSTR_T x) #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 366 "bfin-parse.y" +#line 407 "bfin-parse.y" { INSTR_T instr; Expr_Node *expr; @@ -796,8 +837,8 @@ typedef union YYSTYPE struct { int r0; } r0; Opt_mode mod; } -/* Line 187 of yacc.c. */ -#line 801 "bfin-parse.c" +/* Line 193 of yacc.c. */ +#line 842 "bfin-parse.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -810,7 +851,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 814 "bfin-parse.c" +#line 855 "bfin-parse.c" #ifdef short # undef short @@ -860,7 +901,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -1023,18 +1064,18 @@ union yyalloc #endif /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 145 +#define YYFINAL 150 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1278 +#define YYLAST 1284 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 175 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 47 /* YYNRULES -- Number of rules. */ -#define YYNRULES 348 +#define YYNRULES 350 /* YYNRULES -- Number of states. */ -#define YYNSTATES 1021 +#define YYNSTATES 1026 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -1105,32 +1146,33 @@ static const yytype_uint16 yyprhs[] = 429, 434, 438, 442, 446, 458, 470, 480, 486, 492, 502, 508, 514, 521, 528, 534, 540, 546, 553, 560, 566, 568, 572, 576, 580, 584, 589, 594, 604, 614, - 620, 628, 633, 640, 646, 653, 661, 671, 680, 689, - 701, 711, 716, 722, 729, 737, 744, 749, 756, 762, - 769, 776, 781, 790, 801, 812, 825, 831, 838, 844, - 851, 856, 861, 866, 874, 884, 894, 904, 911, 918, - 925, 934, 943, 950, 956, 962, 971, 976, 984, 986, - 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1007, - 1010, 1015, 1020, 1027, 1034, 1037, 1040, 1045, 1048, 1051, - 1054, 1057, 1060, 1063, 1070, 1077, 1083, 1088, 1092, 1096, - 1100, 1104, 1108, 1112, 1117, 1120, 1125, 1128, 1133, 1136, - 1141, 1144, 1152, 1161, 1170, 1178, 1186, 1194, 1204, 1212, - 1221, 1231, 1240, 1247, 1255, 1264, 1274, 1283, 1291, 1299, - 1306, 1318, 1326, 1338, 1346, 1350, 1353, 1355, 1363, 1373, - 1385, 1389, 1395, 1403, 1405, 1408, 1411, 1416, 1418, 1425, - 1432, 1439, 1441, 1443, 1444, 1450, 1456, 1460, 1464, 1468, - 1472, 1473, 1475, 1477, 1479, 1481, 1483, 1484, 1488, 1489, - 1493, 1497, 1498, 1502, 1506, 1512, 1518, 1519, 1523, 1527, - 1528, 1532, 1536, 1537, 1541, 1545, 1549, 1555, 1561, 1562, - 1566, 1567, 1571, 1573, 1575, 1577, 1579, 1580, 1584, 1588, - 1592, 1598, 1604, 1606, 1608, 1610, 1611, 1615, 1616, 1620, - 1625, 1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, - 1650, 1654, 1658, 1662, 1668, 1674, 1680, 1686, 1690, 1694, - 1700, 1706, 1707, 1709, 1711, 1714, 1717, 1720, 1724, 1726, - 1732, 1738, 1742, 1745, 1748, 1751, 1755, 1757, 1759, 1761, - 1763, 1767, 1771, 1775, 1779, 1781, 1783, 1785, 1787, 1791, - 1793, 1795, 1799, 1801, 1803, 1807, 1810, 1813, 1815, 1819, - 1823, 1827, 1831, 1835, 1839, 1843, 1847, 1851, 1855 + 620, 628, 633, 640, 647, 655, 665, 674, 683, 695, + 705, 710, 716, 723, 731, 738, 743, 750, 756, 763, + 770, 775, 784, 795, 806, 819, 825, 832, 838, 845, + 850, 855, 860, 868, 878, 888, 898, 905, 912, 919, + 928, 937, 944, 950, 956, 965, 970, 978, 980, 982, + 984, 986, 988, 990, 992, 994, 996, 998, 1001, 1004, + 1009, 1014, 1021, 1028, 1031, 1034, 1039, 1042, 1045, 1048, + 1051, 1054, 1057, 1064, 1071, 1077, 1082, 1086, 1090, 1094, + 1098, 1102, 1106, 1111, 1114, 1119, 1122, 1127, 1130, 1135, + 1138, 1146, 1155, 1164, 1172, 1180, 1188, 1198, 1206, 1215, + 1225, 1234, 1241, 1249, 1258, 1268, 1277, 1285, 1293, 1300, + 1312, 1320, 1332, 1340, 1344, 1347, 1349, 1357, 1367, 1379, + 1383, 1389, 1397, 1400, 1403, 1405, 1408, 1411, 1416, 1418, + 1420, 1427, 1434, 1441, 1443, 1445, 1446, 1452, 1458, 1462, + 1466, 1470, 1474, 1475, 1477, 1479, 1481, 1483, 1485, 1486, + 1490, 1491, 1495, 1499, 1500, 1504, 1508, 1514, 1520, 1521, + 1525, 1529, 1530, 1534, 1538, 1539, 1543, 1547, 1551, 1557, + 1563, 1564, 1568, 1569, 1573, 1575, 1577, 1579, 1581, 1582, + 1586, 1590, 1594, 1600, 1606, 1608, 1610, 1612, 1613, 1617, + 1618, 1622, 1627, 1632, 1634, 1636, 1638, 1640, 1642, 1644, + 1646, 1648, 1652, 1656, 1660, 1664, 1670, 1676, 1682, 1688, + 1692, 1696, 1702, 1708, 1709, 1711, 1713, 1716, 1719, 1722, + 1726, 1728, 1734, 1740, 1744, 1747, 1750, 1753, 1757, 1759, + 1761, 1763, 1765, 1769, 1773, 1777, 1781, 1783, 1785, 1787, + 1789, 1793, 1795, 1797, 1801, 1803, 1805, 1809, 1812, 1815, + 1817, 1821, 1825, 1829, 1833, 1837, 1841, 1845, 1849, 1853, + 1857 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -1200,168 +1242,169 @@ static const yytype_int16 yyrhs[] = 98, 211, 180, -1, 206, 87, 179, 159, 36, -1, 36, 98, 87, 36, 159, 36, 191, -1, 206, 179, 91, 220, -1, 26, 98, 26, 91, 220, 189, -1, - 36, 98, 36, 91, 220, -1, 36, 98, 36, 91, - 220, 191, -1, 26, 98, 87, 26, 159, 36, 189, - -1, 36, 98, 19, 163, 26, 158, 36, 162, 190, - -1, 36, 98, 19, 163, 36, 158, 36, 162, -1, - 26, 98, 18, 163, 26, 158, 26, 162, -1, 26, - 98, 18, 163, 26, 158, 26, 162, 163, 133, 162, - -1, 26, 98, 17, 163, 26, 158, 36, 162, 187, - -1, 206, 179, 93, 220, -1, 206, 86, 179, 159, - 36, -1, 36, 98, 86, 36, 159, 36, -1, 26, - 98, 86, 26, 159, 36, 190, -1, 26, 98, 85, - 26, 159, 36, -1, 206, 179, 92, 220, -1, 26, - 98, 26, 92, 220, 190, -1, 36, 98, 36, 92, - 220, -1, 36, 98, 36, 93, 220, 191, -1, 26, - 98, 26, 93, 220, 189, -1, 36, 98, 21, 26, - -1, 26, 98, 11, 163, 36, 158, 36, 162, -1, - 36, 98, 28, 98, 88, 163, 179, 158, 26, 162, - -1, 36, 98, 28, 98, 69, 163, 179, 158, 26, - 162, -1, 36, 98, 28, 98, 69, 163, 179, 158, - 179, 158, 28, 162, -1, 206, 90, 179, 159, 36, - -1, 26, 98, 90, 26, 159, 36, -1, 206, 90, - 179, 159, 220, -1, 26, 98, 90, 26, 159, 220, - -1, 36, 98, 23, 179, -1, 36, 98, 23, 26, - -1, 36, 98, 23, 36, -1, 36, 98, 16, 163, - 26, 162, 181, -1, 26, 98, 16, 163, 26, 158, - 26, 162, 181, -1, 150, 163, 26, 158, 26, 158, - 179, 162, 181, -1, 206, 88, 163, 179, 158, 179, - 158, 28, 162, -1, 147, 163, 26, 158, 220, 162, - -1, 148, 163, 26, 158, 220, 162, -1, 146, 163, - 26, 158, 220, 162, -1, 28, 105, 149, 163, 26, - 158, 220, 162, -1, 28, 98, 149, 163, 26, 158, - 220, 162, -1, 157, 64, 28, 26, 98, 26, -1, - 157, 28, 26, 98, 26, -1, 157, 64, 28, 57, - 220, -1, 157, 64, 28, 57, 220, 163, 131, 162, - -1, 157, 28, 57, 220, -1, 157, 28, 57, 220, - 163, 131, 162, -1, 37, -1, 39, -1, 38, -1, - 40, -1, 41, -1, 42, -1, 44, -1, 47, -1, - 48, -1, 49, -1, 46, 26, -1, 45, 26, -1, - 57, 163, 26, 162, -1, 60, 163, 26, 162, -1, - 60, 163, 27, 71, 26, 162, -1, 57, 163, 27, - 71, 26, 162, -1, 50, 220, -1, 51, 220, -1, - 120, 163, 26, 162, -1, 57, 220, -1, 58, 220, - -1, 59, 220, -1, 59, 218, -1, 60, 220, -1, - 60, 218, -1, 97, 163, 26, 158, 26, 162, -1, - 96, 163, 26, 158, 26, 162, -1, 26, 98, 70, - 26, 189, -1, 26, 98, 63, 26, -1, 26, 95, - 26, -1, 26, 95, 220, -1, 26, 89, 26, -1, - 26, 94, 26, -1, 26, 94, 220, -1, 26, 89, - 220, -1, 114, 164, 26, 165, -1, 114, 199, -1, - 113, 164, 26, 165, -1, 113, 199, -1, 115, 164, - 26, 165, -1, 115, 199, -1, 116, 164, 26, 165, - -1, 116, 199, -1, 123, 164, 26, 205, 165, 98, - 26, -1, 123, 164, 26, 202, 220, 165, 98, 26, - -1, 124, 164, 26, 202, 220, 165, 98, 26, -1, - 124, 164, 26, 205, 165, 98, 26, -1, 124, 164, - 26, 205, 165, 98, 36, -1, 164, 26, 202, 220, - 165, 98, 26, -1, 26, 98, 124, 164, 26, 202, - 220, 165, 187, -1, 36, 98, 124, 164, 26, 205, - 165, -1, 26, 98, 124, 164, 26, 205, 165, 187, - -1, 26, 98, 124, 164, 26, 84, 26, 165, 187, - -1, 36, 98, 124, 164, 26, 84, 26, 165, -1, - 164, 26, 205, 165, 98, 26, -1, 164, 26, 84, - 26, 165, 98, 26, -1, 124, 164, 26, 84, 26, - 165, 98, 36, -1, 26, 98, 123, 164, 26, 202, - 220, 165, 187, -1, 26, 98, 123, 164, 26, 205, - 165, 187, -1, 26, 98, 164, 26, 84, 26, 165, - -1, 26, 98, 164, 26, 202, 217, 165, -1, 26, - 98, 164, 26, 205, 165, -1, 198, 98, 163, 26, - 160, 220, 158, 26, 160, 220, 162, -1, 198, 98, - 163, 26, 160, 220, 162, -1, 163, 26, 160, 220, - 158, 26, 160, 220, 162, 98, 199, -1, 163, 26, - 160, 220, 162, 98, 199, -1, 198, 98, 26, -1, - 24, 220, -1, 25, -1, 52, 163, 220, 158, 220, - 162, 26, -1, 52, 163, 220, 158, 220, 162, 26, - 98, 26, -1, 52, 163, 220, 158, 220, 162, 26, - 98, 26, 92, 220, -1, 53, 220, 26, -1, 53, - 220, 26, 98, 26, -1, 53, 220, 26, 98, 26, - 92, 220, -1, 154, -1, 154, 179, -1, 154, 26, - -1, 156, 163, 26, 162, -1, 153, -1, 155, 163, - 36, 158, 220, 162, -1, 152, 163, 26, 158, 220, - 162, -1, 151, 163, 26, 158, 220, 162, -1, 30, - -1, 31, -1, -1, 163, 135, 158, 136, 162, -1, - 163, 136, 158, 135, 162, -1, 163, 136, 162, -1, - 163, 135, 162, -1, 163, 121, 162, -1, 163, 122, - 162, -1, -1, 126, -1, 127, -1, 128, -1, 121, - -1, 122, -1, -1, 163, 182, 162, -1, -1, 163, - 125, 162, -1, 163, 126, 162, -1, -1, 163, 183, - 162, -1, 163, 182, 162, -1, 163, 183, 158, 182, - 162, -1, 163, 182, 158, 183, 162, -1, -1, 163, - 134, 162, -1, 163, 133, 162, -1, -1, 163, 133, - 162, -1, 163, 134, 162, -1, -1, 163, 125, 162, - -1, 163, 126, 162, -1, 163, 143, 162, -1, 163, - 143, 158, 126, 162, -1, 163, 126, 158, 143, 162, - -1, -1, 163, 143, 162, -1, -1, 163, 126, 162, - -1, 108, -1, 111, -1, 110, -1, 109, -1, -1, - 163, 137, 162, -1, 163, 137, 162, -1, 163, 136, - 162, -1, 163, 136, 158, 137, 162, -1, 163, 137, - 158, 136, 162, -1, 13, -1, 14, -1, 15, -1, - -1, 163, 136, 162, -1, -1, 163, 136, 162, -1, - 164, 83, 26, 165, -1, 164, 26, 84, 165, -1, - 75, -1, 76, -1, 79, -1, 80, -1, 81, -1, - 82, -1, 71, -1, 70, -1, 163, 140, 162, -1, - 163, 129, 162, -1, 163, 139, 162, -1, 163, 130, - 162, -1, 163, 140, 158, 137, 162, -1, 163, 129, - 158, 137, 162, -1, 163, 139, 158, 137, 162, -1, - 163, 130, 158, 137, 162, -1, 163, 144, 162, -1, - 163, 145, 162, -1, 163, 144, 158, 137, 162, -1, - 163, 145, 158, 137, 162, -1, -1, 84, -1, 83, - -1, 179, 98, -1, 179, 103, -1, 179, 104, -1, - 26, 98, 179, -1, 210, -1, 26, 98, 163, 210, - 162, -1, 36, 98, 163, 210, 162, -1, 36, 98, - 179, -1, 206, 211, -1, 208, 211, -1, 207, 211, - -1, 36, 72, 36, -1, 98, -1, 100, -1, 102, - -1, 101, -1, 28, 212, 166, -1, 28, 212, 143, - -1, 166, 212, 28, -1, 143, 212, 28, -1, 168, - -1, 170, -1, 171, -1, 172, -1, 214, 173, 215, - -1, 216, -1, 220, -1, 214, 173, 174, -1, 169, - -1, 214, -1, 163, 221, 162, -1, 63, 221, -1, - 70, 221, -1, 221, -1, 221, 72, 221, -1, 221, - 73, 221, -1, 221, 67, 221, -1, 221, 71, 221, - -1, 221, 70, 221, -1, 221, 91, 221, -1, 221, - 92, 221, -1, 221, 65, 221, -1, 221, 68, 221, - -1, 221, 66, 221, -1, 219, -1 + 36, 98, 36, 91, 220, 191, -1, 26, 98, 87, + 26, 159, 36, 189, -1, 36, 98, 19, 163, 26, + 158, 36, 162, 190, -1, 36, 98, 19, 163, 36, + 158, 36, 162, -1, 26, 98, 18, 163, 26, 158, + 26, 162, -1, 26, 98, 18, 163, 26, 158, 26, + 162, 163, 133, 162, -1, 26, 98, 17, 163, 26, + 158, 36, 162, 187, -1, 206, 179, 93, 220, -1, + 206, 86, 179, 159, 36, -1, 36, 98, 86, 36, + 159, 36, -1, 26, 98, 86, 26, 159, 36, 190, + -1, 26, 98, 85, 26, 159, 36, -1, 206, 179, + 92, 220, -1, 26, 98, 26, 92, 220, 190, -1, + 36, 98, 36, 92, 220, -1, 36, 98, 36, 93, + 220, 191, -1, 26, 98, 26, 93, 220, 189, -1, + 36, 98, 21, 26, -1, 26, 98, 11, 163, 36, + 158, 36, 162, -1, 36, 98, 28, 98, 88, 163, + 179, 158, 26, 162, -1, 36, 98, 28, 98, 69, + 163, 179, 158, 26, 162, -1, 36, 98, 28, 98, + 69, 163, 179, 158, 179, 158, 28, 162, -1, 206, + 90, 179, 159, 36, -1, 26, 98, 90, 26, 159, + 36, -1, 206, 90, 179, 159, 220, -1, 26, 98, + 90, 26, 159, 220, -1, 36, 98, 23, 179, -1, + 36, 98, 23, 26, -1, 36, 98, 23, 36, -1, + 36, 98, 16, 163, 26, 162, 181, -1, 26, 98, + 16, 163, 26, 158, 26, 162, 181, -1, 150, 163, + 26, 158, 26, 158, 179, 162, 181, -1, 206, 88, + 163, 179, 158, 179, 158, 28, 162, -1, 147, 163, + 26, 158, 220, 162, -1, 148, 163, 26, 158, 220, + 162, -1, 146, 163, 26, 158, 220, 162, -1, 28, + 105, 149, 163, 26, 158, 220, 162, -1, 28, 98, + 149, 163, 26, 158, 220, 162, -1, 157, 64, 28, + 26, 98, 26, -1, 157, 28, 26, 98, 26, -1, + 157, 64, 28, 57, 220, -1, 157, 64, 28, 57, + 220, 163, 131, 162, -1, 157, 28, 57, 220, -1, + 157, 28, 57, 220, 163, 131, 162, -1, 37, -1, + 39, -1, 38, -1, 40, -1, 41, -1, 42, -1, + 44, -1, 47, -1, 48, -1, 49, -1, 46, 26, + -1, 45, 26, -1, 57, 163, 26, 162, -1, 60, + 163, 26, 162, -1, 60, 163, 27, 71, 26, 162, + -1, 57, 163, 27, 71, 26, 162, -1, 50, 220, + -1, 51, 220, -1, 120, 163, 26, 162, -1, 57, + 220, -1, 58, 220, -1, 59, 220, -1, 59, 218, + -1, 60, 220, -1, 60, 218, -1, 97, 163, 26, + 158, 26, 162, -1, 96, 163, 26, 158, 26, 162, + -1, 26, 98, 70, 26, 189, -1, 26, 98, 63, + 26, -1, 26, 95, 26, -1, 26, 95, 220, -1, + 26, 89, 26, -1, 26, 94, 26, -1, 26, 94, + 220, -1, 26, 89, 220, -1, 114, 164, 26, 165, + -1, 114, 199, -1, 113, 164, 26, 165, -1, 113, + 199, -1, 115, 164, 26, 165, -1, 115, 199, -1, + 116, 164, 26, 165, -1, 116, 199, -1, 123, 164, + 26, 205, 165, 98, 26, -1, 123, 164, 26, 202, + 220, 165, 98, 26, -1, 124, 164, 26, 202, 220, + 165, 98, 26, -1, 124, 164, 26, 205, 165, 98, + 26, -1, 124, 164, 26, 205, 165, 98, 36, -1, + 164, 26, 202, 220, 165, 98, 26, -1, 26, 98, + 124, 164, 26, 202, 220, 165, 187, -1, 36, 98, + 124, 164, 26, 205, 165, -1, 26, 98, 124, 164, + 26, 205, 165, 187, -1, 26, 98, 124, 164, 26, + 84, 26, 165, 187, -1, 36, 98, 124, 164, 26, + 84, 26, 165, -1, 164, 26, 205, 165, 98, 26, + -1, 164, 26, 84, 26, 165, 98, 26, -1, 124, + 164, 26, 84, 26, 165, 98, 36, -1, 26, 98, + 123, 164, 26, 202, 220, 165, 187, -1, 26, 98, + 123, 164, 26, 205, 165, 187, -1, 26, 98, 164, + 26, 84, 26, 165, -1, 26, 98, 164, 26, 202, + 217, 165, -1, 26, 98, 164, 26, 205, 165, -1, + 198, 98, 163, 26, 160, 220, 158, 26, 160, 220, + 162, -1, 198, 98, 163, 26, 160, 220, 162, -1, + 163, 26, 160, 220, 158, 26, 160, 220, 162, 98, + 199, -1, 163, 26, 160, 220, 162, 98, 199, -1, + 198, 98, 26, -1, 24, 220, -1, 25, -1, 52, + 163, 220, 158, 220, 162, 26, -1, 52, 163, 220, + 158, 220, 162, 26, 98, 26, -1, 52, 163, 220, + 158, 220, 162, 26, 98, 26, 92, 220, -1, 53, + 220, 26, -1, 53, 220, 26, 98, 26, -1, 53, + 220, 26, 98, 26, 92, 220, -1, 54, 220, -1, + 55, 220, -1, 154, -1, 154, 179, -1, 154, 26, + -1, 156, 163, 26, 162, -1, 153, -1, 43, -1, + 155, 163, 36, 158, 220, 162, -1, 152, 163, 26, + 158, 220, 162, -1, 151, 163, 26, 158, 220, 162, + -1, 30, -1, 31, -1, -1, 163, 135, 158, 136, + 162, -1, 163, 136, 158, 135, 162, -1, 163, 136, + 162, -1, 163, 135, 162, -1, 163, 121, 162, -1, + 163, 122, 162, -1, -1, 126, -1, 127, -1, 128, + -1, 121, -1, 122, -1, -1, 163, 182, 162, -1, + -1, 163, 125, 162, -1, 163, 126, 162, -1, -1, + 163, 183, 162, -1, 163, 182, 162, -1, 163, 183, + 158, 182, 162, -1, 163, 182, 158, 183, 162, -1, + -1, 163, 134, 162, -1, 163, 133, 162, -1, -1, + 163, 133, 162, -1, 163, 134, 162, -1, -1, 163, + 125, 162, -1, 163, 126, 162, -1, 163, 143, 162, + -1, 163, 143, 158, 126, 162, -1, 163, 126, 158, + 143, 162, -1, -1, 163, 143, 162, -1, -1, 163, + 126, 162, -1, 108, -1, 111, -1, 110, -1, 109, + -1, -1, 163, 137, 162, -1, 163, 137, 162, -1, + 163, 136, 162, -1, 163, 136, 158, 137, 162, -1, + 163, 137, 158, 136, 162, -1, 13, -1, 14, -1, + 15, -1, -1, 163, 136, 162, -1, -1, 163, 136, + 162, -1, 164, 83, 26, 165, -1, 164, 26, 84, + 165, -1, 75, -1, 76, -1, 79, -1, 80, -1, + 81, -1, 82, -1, 71, -1, 70, -1, 163, 140, + 162, -1, 163, 129, 162, -1, 163, 139, 162, -1, + 163, 130, 162, -1, 163, 140, 158, 137, 162, -1, + 163, 129, 158, 137, 162, -1, 163, 139, 158, 137, + 162, -1, 163, 130, 158, 137, 162, -1, 163, 144, + 162, -1, 163, 145, 162, -1, 163, 144, 158, 137, + 162, -1, 163, 145, 158, 137, 162, -1, -1, 84, + -1, 83, -1, 179, 98, -1, 179, 103, -1, 179, + 104, -1, 26, 98, 179, -1, 210, -1, 26, 98, + 163, 210, 162, -1, 36, 98, 163, 210, 162, -1, + 36, 98, 179, -1, 206, 211, -1, 208, 211, -1, + 207, 211, -1, 36, 72, 36, -1, 98, -1, 100, + -1, 102, -1, 101, -1, 28, 212, 166, -1, 28, + 212, 143, -1, 166, 212, 28, -1, 143, 212, 28, + -1, 168, -1, 170, -1, 171, -1, 172, -1, 214, + 173, 215, -1, 216, -1, 220, -1, 214, 173, 174, + -1, 169, -1, 214, -1, 163, 221, 162, -1, 63, + 221, -1, 70, 221, -1, 221, -1, 221, 72, 221, + -1, 221, 73, 221, -1, 221, 67, 221, -1, 221, + 71, 221, -1, 221, 70, 221, -1, 221, 91, 221, + -1, 221, 92, 221, -1, 221, 65, 221, -1, 221, + 68, 221, -1, 221, 66, 221, -1, 219, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 567, 567, 568, 580, 582, 615, 642, 653, 657, - 692, 712, 717, 727, 737, 742, 747, 763, 779, 791, - 801, 814, 833, 851, 874, 896, 901, 911, 922, 933, - 947, 962, 978, 994, 1010, 1021, 1035, 1061, 1079, 1084, - 1090, 1102, 1113, 1124, 1135, 1146, 1157, 1168, 1194, 1208, - 1218, 1263, 1282, 1293, 1304, 1315, 1326, 1337, 1353, 1370, - 1386, 1397, 1408, 1439, 1450, 1463, 1474, 1513, 1523, 1533, - 1553, 1563, 1573, 1583, 1594, 1602, 1612, 1622, 1633, 1657, - 1668, 1674, 1685, 1696, 1707, 1715, 1736, 1762, 1791, 1822, - 1836, 1847, 1861, 1895, 1905, 1915, 1940, 1952, 1970, 1981, - 1992, 2003, 2016, 2027, 2038, 2049, 2060, 2071, 2104, 2114, - 2127, 2147, 2158, 2169, 2182, 2195, 2206, 2217, 2228, 2239, - 2249, 2260, 2271, 2283, 2294, 2305, 2316, 2329, 2341, 2353, - 2364, 2375, 2386, 2398, 2410, 2421, 2432, 2443, 2453, 2459, - 2465, 2471, 2477, 2483, 2489, 2495, 2501, 2507, 2513, 2524, - 2535, 2546, 2557, 2568, 2579, 2590, 2596, 2607, 2618, 2629, - 2640, 2651, 2661, 2674, 2682, 2690, 2714, 2725, 2736, 2747, - 2758, 2769, 2781, 2794, 2803, 2814, 2825, 2837, 2848, 2859, - 2870, 2884, 2896, 2911, 2930, 2941, 2959, 2993, 3011, 3028, - 3039, 3050, 3061, 3082, 3101, 3114, 3128, 3140, 3156, 3196, - 3227, 3243, 3262, 3276, 3295, 3311, 3319, 3328, 3339, 3351, - 3365, 3373, 3383, 3395, 3400, 3405, 3411, 3419, 3425, 3431, - 3437, 3450, 3454, 3464, 3468, 3473, 3478, 3483, 3490, 3494, - 3501, 3505, 3510, 3515, 3523, 3527, 3534, 3538, 3546, 3551, - 3557, 3566, 3571, 3577, 3583, 3589, 3598, 3601, 3605, 3612, - 3615, 3619, 3626, 3631, 3637, 3643, 3649, 3654, 3662, 3665, - 3672, 3675, 3682, 3686, 3690, 3694, 3701, 3704, 3711, 3716, - 3723, 3730, 3742, 3746, 3750, 3757, 3760, 3770, 3773, 3782, - 3788, 3797, 3801, 3808, 3812, 3816, 3820, 3827, 3831, 3838, - 3846, 3854, 3862, 3870, 3877, 3884, 3892, 3902, 3907, 3912, - 3917, 3925, 3928, 3932, 3941, 3948, 3955, 3962, 3977, 3983, - 3991, 3999, 4017, 4024, 4031, 4041, 4054, 4058, 4062, 4066, - 4073, 4079, 4085, 4091, 4101, 4110, 4112, 4114, 4118, 4126, - 4130, 4137, 4143, 4149, 4153, 4157, 4161, 4167, 4173, 4177, - 4181, 4185, 4189, 4193, 4197, 4201, 4205, 4209, 4213 + 0, 608, 608, 609, 621, 623, 656, 683, 694, 698, + 736, 756, 761, 771, 781, 786, 791, 807, 823, 835, + 845, 858, 877, 895, 918, 940, 945, 955, 966, 977, + 991, 1006, 1022, 1038, 1054, 1065, 1079, 1105, 1123, 1128, + 1134, 1146, 1157, 1168, 1179, 1190, 1201, 1212, 1238, 1252, + 1262, 1307, 1326, 1337, 1348, 1359, 1370, 1381, 1397, 1414, + 1430, 1441, 1452, 1485, 1496, 1509, 1520, 1559, 1569, 1579, + 1599, 1609, 1619, 1630, 1644, 1655, 1668, 1678, 1690, 1705, + 1716, 1722, 1742, 1753, 1764, 1772, 1798, 1828, 1857, 1888, + 1902, 1913, 1927, 1961, 1979, 2004, 2016, 2034, 2045, 2056, + 2067, 2080, 2091, 2102, 2113, 2124, 2135, 2168, 2178, 2191, + 2211, 2222, 2233, 2246, 2259, 2270, 2281, 2292, 2303, 2313, + 2324, 2335, 2347, 2358, 2369, 2380, 2393, 2405, 2417, 2428, + 2439, 2450, 2462, 2474, 2485, 2496, 2507, 2517, 2523, 2529, + 2535, 2541, 2547, 2553, 2559, 2565, 2571, 2577, 2588, 2599, + 2610, 2621, 2632, 2643, 2654, 2660, 2671, 2682, 2693, 2704, + 2715, 2725, 2738, 2746, 2754, 2778, 2789, 2800, 2811, 2822, + 2833, 2845, 2858, 2867, 2878, 2889, 2901, 2912, 2923, 2934, + 2948, 2960, 2986, 3016, 3027, 3052, 3089, 3117, 3142, 3153, + 3164, 3175, 3201, 3220, 3234, 3258, 3270, 3289, 3335, 3372, + 3388, 3407, 3421, 3440, 3456, 3464, 3473, 3484, 3496, 3510, + 3518, 3528, 3540, 3550, 3561, 3566, 3571, 3577, 3585, 3591, + 3597, 3603, 3609, 3622, 3626, 3636, 3640, 3645, 3650, 3655, + 3662, 3666, 3673, 3677, 3682, 3687, 3695, 3699, 3706, 3710, + 3718, 3723, 3729, 3738, 3743, 3749, 3755, 3761, 3770, 3773, + 3777, 3784, 3787, 3791, 3798, 3803, 3809, 3815, 3821, 3826, + 3834, 3837, 3844, 3847, 3854, 3858, 3862, 3866, 3873, 3876, + 3883, 3888, 3895, 3902, 3914, 3918, 3922, 3929, 3932, 3942, + 3945, 3954, 3960, 3969, 3973, 3980, 3984, 3988, 3992, 3999, + 4003, 4010, 4018, 4026, 4034, 4042, 4049, 4056, 4064, 4074, + 4079, 4084, 4089, 4097, 4100, 4104, 4113, 4120, 4127, 4134, + 4149, 4155, 4168, 4181, 4199, 4206, 4213, 4223, 4236, 4240, + 4244, 4248, 4255, 4261, 4267, 4273, 4283, 4292, 4294, 4296, + 4300, 4308, 4312, 4319, 4325, 4331, 4335, 4339, 4343, 4349, + 4355, 4359, 4363, 4367, 4371, 4375, 4379, 4383, 4387, 4391, + 4395 }; #endif @@ -1459,19 +1502,20 @@ static const yytype_uint8 yyr1[] = 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, - 178, 179, 179, 180, 180, 180, 180, 180, 181, 181, - 182, 182, 182, 182, 183, 183, 184, 184, 185, 185, - 185, 186, 186, 186, 186, 186, 187, 187, 187, 188, - 188, 188, 189, 189, 189, 189, 189, 189, 190, 190, - 191, 191, 192, 192, 192, 192, 193, 193, 194, 194, - 194, 194, 195, 195, 195, 196, 196, 197, 197, 198, - 199, 200, 200, 201, 201, 201, 201, 202, 202, 203, - 203, 203, 203, 203, 203, 203, 203, 204, 204, 204, - 204, 205, 205, 205, 206, 207, 208, 209, 209, 209, - 209, 209, 210, 210, 210, 211, 212, 212, 212, 212, - 213, 213, 213, 213, 214, 215, 215, 215, 216, 217, - 217, 218, 219, 219, 219, 219, 219, 220, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221 + 178, 178, 178, 179, 179, 180, 180, 180, 180, 180, + 181, 181, 182, 182, 182, 182, 183, 183, 184, 184, + 185, 185, 185, 186, 186, 186, 186, 186, 187, 187, + 187, 188, 188, 188, 189, 189, 189, 189, 189, 189, + 190, 190, 191, 191, 192, 192, 192, 192, 193, 193, + 194, 194, 194, 194, 195, 195, 195, 196, 196, 197, + 197, 198, 199, 200, 200, 201, 201, 201, 201, 202, + 202, 203, 203, 203, 203, 203, 203, 203, 203, 204, + 204, 204, 204, 205, 205, 205, 206, 207, 208, 209, + 209, 209, 209, 209, 210, 210, 210, 211, 212, 212, + 212, 212, 213, 213, 213, 213, 214, 215, 215, 215, + 216, 217, 217, 218, 219, 219, 219, 219, 219, 220, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -1486,32 +1530,33 @@ static const yytype_uint8 yyr2[] = 4, 3, 3, 3, 11, 11, 9, 5, 5, 9, 5, 5, 6, 6, 5, 5, 5, 6, 6, 5, 1, 3, 3, 3, 3, 4, 4, 9, 9, 5, - 7, 4, 6, 5, 6, 7, 9, 8, 8, 11, - 9, 4, 5, 6, 7, 6, 4, 6, 5, 6, - 6, 4, 8, 10, 10, 12, 5, 6, 5, 6, - 4, 4, 4, 7, 9, 9, 9, 6, 6, 6, - 8, 8, 6, 5, 5, 8, 4, 7, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 4, 4, 6, 6, 2, 2, 4, 2, 2, 2, - 2, 2, 2, 6, 6, 5, 4, 3, 3, 3, - 3, 3, 3, 4, 2, 4, 2, 4, 2, 4, - 2, 7, 8, 8, 7, 7, 7, 9, 7, 8, - 9, 8, 6, 7, 8, 9, 8, 7, 7, 6, - 11, 7, 11, 7, 3, 2, 1, 7, 9, 11, - 3, 5, 7, 1, 2, 2, 4, 1, 6, 6, - 6, 1, 1, 0, 5, 5, 3, 3, 3, 3, - 0, 1, 1, 1, 1, 1, 0, 3, 0, 3, - 3, 0, 3, 3, 5, 5, 0, 3, 3, 0, - 3, 3, 0, 3, 3, 3, 5, 5, 0, 3, - 0, 3, 1, 1, 1, 1, 0, 3, 3, 3, - 5, 5, 1, 1, 1, 0, 3, 0, 3, 4, - 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 3, 3, 3, 5, 5, 5, 5, 3, 3, 5, - 5, 0, 1, 1, 2, 2, 2, 3, 1, 5, - 5, 3, 2, 2, 2, 3, 1, 1, 1, 1, - 3, 3, 3, 3, 1, 1, 1, 1, 3, 1, - 1, 3, 1, 1, 3, 2, 2, 1, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 1 + 7, 4, 6, 6, 7, 9, 8, 8, 11, 9, + 4, 5, 6, 7, 6, 4, 6, 5, 6, 6, + 4, 8, 10, 10, 12, 5, 6, 5, 6, 4, + 4, 4, 7, 9, 9, 9, 6, 6, 6, 8, + 8, 6, 5, 5, 8, 4, 7, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, + 4, 6, 6, 2, 2, 4, 2, 2, 2, 2, + 2, 2, 6, 6, 5, 4, 3, 3, 3, 3, + 3, 3, 4, 2, 4, 2, 4, 2, 4, 2, + 7, 8, 8, 7, 7, 7, 9, 7, 8, 9, + 8, 6, 7, 8, 9, 8, 7, 7, 6, 11, + 7, 11, 7, 3, 2, 1, 7, 9, 11, 3, + 5, 7, 2, 2, 1, 2, 2, 4, 1, 1, + 6, 6, 6, 1, 1, 0, 5, 5, 3, 3, + 3, 3, 0, 1, 1, 1, 1, 1, 0, 3, + 0, 3, 3, 0, 3, 3, 5, 5, 0, 3, + 3, 0, 3, 3, 0, 3, 3, 3, 5, 5, + 0, 3, 0, 3, 1, 1, 1, 1, 0, 3, + 3, 3, 5, 5, 1, 1, 1, 0, 3, 0, + 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 5, 5, 5, 5, 3, + 3, 5, 5, 0, 1, 1, 2, 2, 2, 3, + 1, 5, 5, 3, 2, 2, 2, 3, 1, 1, + 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, + 3, 1, 1, 3, 1, 1, 3, 2, 2, 1, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -1519,239 +1564,239 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 0, 7, 0, 0, 206, 0, 0, 221, 222, 0, - 0, 0, 0, 0, 138, 140, 139, 141, 142, 143, - 144, 0, 0, 145, 146, 147, 0, 0, 0, 0, - 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 205, 0, 0, 223, 224, 0, + 0, 0, 0, 0, 137, 139, 138, 140, 141, 142, + 219, 143, 0, 0, 144, 145, 146, 0, 0, 0, + 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 217, 213, 0, 0, 0, 0, 0, 0, 8, - 0, 3, 0, 0, 0, 0, 0, 0, 223, 308, - 80, 0, 0, 0, 0, 324, 332, 333, 348, 205, - 337, 0, 0, 0, 0, 0, 0, 0, 316, 317, - 319, 318, 0, 0, 0, 0, 0, 0, 0, 149, - 148, 154, 155, 0, 0, 0, 157, 158, 333, 160, - 159, 0, 162, 161, 0, 0, 0, 176, 0, 174, - 0, 178, 0, 180, 0, 0, 0, 316, 0, 0, - 0, 0, 0, 0, 0, 215, 214, 0, 0, 0, - 0, 0, 301, 0, 0, 1, 0, 4, 304, 305, - 306, 0, 46, 0, 0, 0, 0, 0, 0, 0, - 45, 0, 312, 49, 275, 314, 313, 0, 9, 0, - 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 169, 172, 170, 171, 167, 168, 0, - 0, 0, 0, 0, 0, 272, 273, 274, 0, 0, - 0, 81, 83, 246, 0, 246, 0, 0, 281, 282, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 223, 249, 63, 59, 57, 61, 62, 82, - 0, 0, 84, 0, 321, 320, 26, 14, 27, 15, - 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, - 0, 311, 223, 48, 0, 210, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 301, 301, - 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 288, 287, 303, 302, 0, 0, - 0, 322, 0, 275, 204, 0, 0, 38, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 40, 0, 56, - 0, 0, 0, 0, 334, 345, 347, 340, 346, 342, - 341, 338, 339, 343, 344, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 287, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 0, 53, 0, - 47, 166, 252, 258, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, - 86, 0, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 111, 121, 122, 120, 0, 0, + 0, 0, 0, 0, 218, 214, 0, 0, 0, 0, + 0, 0, 8, 0, 3, 0, 0, 0, 0, 0, + 0, 225, 310, 80, 0, 0, 0, 0, 326, 334, + 335, 350, 204, 339, 0, 0, 0, 0, 0, 0, + 0, 318, 319, 321, 320, 0, 0, 0, 0, 0, + 0, 0, 148, 147, 153, 154, 0, 0, 212, 213, + 0, 156, 157, 335, 159, 158, 0, 161, 160, 0, + 0, 0, 175, 0, 173, 0, 177, 0, 179, 0, + 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, + 216, 215, 0, 0, 0, 0, 0, 303, 0, 0, + 1, 0, 4, 306, 307, 308, 0, 46, 0, 0, + 0, 0, 0, 0, 0, 45, 0, 314, 49, 277, + 316, 315, 0, 9, 0, 337, 338, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 168, 171, + 169, 170, 166, 167, 0, 0, 0, 0, 0, 0, + 274, 275, 276, 0, 0, 0, 81, 83, 248, 0, + 248, 0, 0, 283, 284, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 309, 0, 0, 225, 251, 63, + 59, 57, 61, 62, 82, 0, 0, 84, 0, 323, + 322, 26, 14, 27, 15, 0, 0, 0, 0, 51, + 0, 0, 0, 0, 0, 0, 313, 225, 48, 0, + 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 303, 303, 325, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, + 289, 305, 304, 0, 0, 0, 324, 0, 277, 203, + 0, 0, 38, 25, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 0, 56, 0, 0, 0, 0, 336, + 347, 349, 342, 348, 344, 343, 340, 341, 345, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 85, 0, 0, 150, 0, 331, 151, 0, 0, - 0, 0, 175, 173, 177, 179, 156, 302, 0, 0, - 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 216, 0, 136, 0, 0, 0, 0, 0, 0, 0, - 279, 0, 6, 60, 0, 315, 0, 0, 0, 0, - 0, 0, 91, 106, 101, 0, 0, 0, 227, 0, - 226, 0, 0, 223, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 67, 68, 0, 252, 258, - 252, 236, 238, 0, 0, 0, 0, 165, 0, 24, - 0, 0, 0, 0, 301, 301, 0, 306, 0, 309, - 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 277, 277, 74, 75, 277, 277, 0, 76, 70, 71, - 0, 0, 0, 0, 0, 0, 0, 0, 93, 108, - 260, 0, 238, 0, 0, 301, 0, 310, 0, 0, - 211, 0, 0, 0, 0, 280, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, - 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 102, 89, 0, 116, 118, 41, 276, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 92, 107, 110, 0, - 230, 52, 0, 0, 36, 248, 247, 0, 0, 0, - 0, 0, 105, 258, 252, 117, 119, 0, 0, 302, - 0, 0, 0, 12, 0, 333, 329, 0, 330, 199, - 0, 0, 0, 0, 250, 251, 58, 0, 77, 78, - 72, 73, 0, 0, 0, 0, 0, 42, 0, 0, - 0, 0, 94, 109, 0, 39, 103, 260, 302, 0, - 13, 0, 0, 0, 153, 152, 164, 163, 0, 0, - 0, 0, 0, 129, 127, 128, 0, 220, 219, 218, - 0, 132, 0, 0, 0, 0, 0, 0, 192, 5, - 0, 0, 0, 0, 0, 224, 225, 0, 307, 0, + 0, 0, 289, 285, 286, 287, 288, 0, 0, 0, + 0, 0, 0, 53, 0, 47, 165, 254, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 231, 232, 233, 0, 0, 0, 0, 0, - 253, 0, 254, 0, 255, 259, 104, 95, 0, 246, - 0, 0, 246, 0, 197, 0, 198, 0, 0, 0, - 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 0, 188, 0, 207, 212, - 0, 181, 0, 0, 184, 185, 0, 137, 0, 0, - 0, 0, 0, 0, 0, 203, 193, 186, 0, 201, - 55, 54, 0, 0, 0, 0, 0, 0, 0, 34, - 112, 0, 246, 98, 0, 0, 237, 0, 239, 240, - 0, 0, 0, 246, 196, 246, 246, 189, 0, 325, - 326, 327, 328, 0, 28, 258, 223, 278, 131, 130, - 0, 0, 258, 97, 43, 44, 0, 0, 261, 0, - 191, 223, 0, 182, 194, 183, 0, 135, 0, 0, + 0, 303, 0, 0, 0, 86, 0, 50, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, + 120, 121, 119, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 85, 0, 0, 149, + 0, 333, 150, 0, 0, 0, 0, 174, 172, 176, + 178, 155, 304, 0, 0, 304, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 217, 0, 135, 0, 0, + 0, 0, 0, 0, 0, 281, 0, 6, 60, 0, + 317, 0, 0, 0, 0, 0, 0, 91, 105, 100, + 0, 0, 0, 229, 0, 228, 0, 0, 225, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, + 67, 68, 0, 254, 260, 254, 238, 240, 0, 0, + 0, 0, 164, 0, 24, 0, 0, 0, 0, 303, + 303, 0, 308, 0, 311, 304, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 279, 279, 74, 75, 279, + 279, 0, 76, 70, 71, 0, 0, 0, 0, 0, + 0, 0, 0, 262, 107, 262, 0, 240, 0, 0, + 303, 0, 312, 0, 0, 210, 0, 0, 0, 0, + 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 132, 0, 0, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 89, + 0, 115, 117, 41, 278, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 124, 100, 0, 69, 0, 0, 0, 257, - 256, 195, 190, 187, 66, 0, 37, 88, 228, 229, - 96, 0, 0, 0, 0, 87, 208, 125, 0, 0, - 0, 0, 0, 0, 126, 0, 266, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 114, 0, 113, 0, - 0, 0, 0, 266, 262, 265, 264, 263, 0, 0, - 0, 0, 0, 64, 0, 0, 0, 0, 99, 241, - 238, 20, 238, 0, 0, 209, 0, 0, 18, 19, - 202, 200, 65, 0, 30, 0, 0, 0, 230, 23, - 22, 21, 115, 0, 0, 0, 267, 0, 29, 0, - 31, 32, 0, 33, 234, 235, 0, 0, 0, 0, + 0, 92, 106, 109, 0, 232, 52, 0, 0, 36, + 250, 249, 0, 0, 0, 0, 0, 104, 260, 254, + 116, 118, 0, 0, 304, 0, 0, 0, 12, 0, + 335, 331, 0, 332, 198, 0, 0, 0, 0, 252, + 253, 58, 0, 77, 78, 72, 73, 0, 0, 0, + 0, 0, 42, 0, 0, 0, 0, 93, 108, 0, + 39, 102, 262, 304, 0, 13, 0, 0, 0, 152, + 151, 163, 162, 0, 0, 0, 0, 0, 128, 126, + 127, 0, 222, 221, 220, 0, 131, 0, 0, 0, + 0, 0, 0, 191, 5, 0, 0, 0, 0, 0, + 226, 227, 0, 309, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 233, 234, 235, + 0, 0, 0, 0, 0, 255, 0, 256, 0, 257, + 261, 103, 94, 0, 248, 0, 0, 248, 0, 196, + 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 122, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 0, 187, 0, 206, 211, 0, 180, 0, 0, 183, + 184, 0, 136, 0, 0, 0, 0, 0, 0, 0, + 202, 192, 185, 0, 200, 55, 54, 0, 0, 0, + 0, 0, 0, 0, 34, 111, 0, 248, 97, 0, + 0, 239, 0, 241, 242, 0, 0, 0, 248, 195, + 248, 248, 188, 0, 327, 328, 329, 330, 0, 28, + 260, 225, 280, 130, 129, 0, 0, 260, 96, 43, + 44, 0, 0, 263, 0, 190, 225, 0, 181, 193, + 182, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 123, 99, 0, + 69, 0, 0, 0, 259, 258, 194, 189, 186, 66, + 0, 37, 88, 230, 231, 95, 0, 0, 0, 0, + 87, 207, 124, 0, 0, 0, 0, 0, 0, 125, + 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 113, 0, 112, 0, 0, 0, 0, 268, 264, + 267, 266, 265, 0, 0, 0, 0, 0, 64, 0, + 0, 0, 0, 98, 243, 240, 20, 240, 0, 0, + 208, 0, 0, 18, 19, 201, 199, 65, 0, 30, + 0, 0, 0, 232, 23, 22, 21, 114, 0, 0, + 0, 269, 0, 29, 0, 31, 32, 0, 33, 236, + 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 245, 232, 244, 0, 0, + 0, 0, 271, 0, 270, 0, 292, 0, 294, 0, + 293, 0, 291, 0, 299, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 243, 230, 242, 0, 0, 0, 0, 269, 0, 268, - 0, 290, 0, 292, 0, 291, 0, 289, 0, 297, - 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 245, 244, 0, 266, 266, - 270, 271, 294, 296, 295, 293, 299, 300, 35, 16, - 17 + 247, 246, 0, 268, 268, 272, 273, 296, 298, 297, + 295, 301, 302, 35, 16, 17 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 60, 61, 62, 361, 168, 745, 715, 957, 601, - 604, 939, 348, 372, 487, 489, 652, 908, 913, 948, - 220, 309, 638, 64, 117, 221, 345, 288, 950, 953, - 289, 362, 363, 67, 68, 69, 166, 93, 70, 77, - 812, 626, 627, 109, 78, 79, 80 + -1, 63, 64, 65, 366, 173, 750, 720, 962, 606, + 609, 944, 353, 377, 492, 494, 657, 913, 918, 953, + 225, 314, 643, 67, 122, 226, 350, 293, 955, 958, + 294, 367, 368, 70, 71, 72, 171, 96, 73, 80, + 817, 631, 632, 114, 81, 82, 83 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -907 +#define YYPACT_NINF -875 static const yytype_int16 yypact[] = { - 878, -907, -120, 291, -907, 614, 439, -907, -907, -35, - -11, 31, 61, 81, -907, -907, -907, -907, -907, -907, - -907, 183, 202, -907, -907, -907, 291, 291, -56, 291, - -907, 351, 291, 291, 354, 96, 111, 86, 160, 162, - 168, 122, 170, 172, 318, 134, 146, 196, 200, 217, - 228, -907, 230, 233, 252, 46, 207, 26, 318, -907, - 412, -907, -48, 195, 324, 270, 274, 394, 271, -907, - -907, 418, 291, 291, 291, -907, -907, -907, -907, -907, - 561, 55, 69, 71, 482, 421, 80, 107, 70, -907, - -907, -907, 5, -107, 414, 419, 422, 440, 121, -907, - -907, -907, -907, 291, 465, 42, -907, -907, 321, -907, - -907, 52, -907, -907, 479, 489, 495, -907, 502, -907, - 520, -907, 558, -907, 560, 569, 593, -907, 594, 599, - 604, 609, 630, 640, 643, -907, -907, 638, 650, 27, - 657, -22, 237, 663, 667, -907, 1024, -907, -907, -907, - 186, 9, -907, 568, 272, 186, 186, 186, 547, 186, - 174, 291, -907, -907, 548, -907, -907, 147, 556, 555, - -907, -907, 459, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, -907, -907, -907, -907, -907, -907, 562, - 563, 564, 565, 567, 570, -907, -907, -907, 572, 573, - 574, 508, -907, 575, 645, -52, 159, 201, -907, -907, - 697, 698, 703, 705, 706, 576, 577, 20, 708, 668, - 579, 580, 271, 581, -907, -907, -907, 582, -907, 239, - 583, 320, -907, 585, -907, -907, -907, -907, -907, -907, - 586, 587, 725, 145, 15, 654, 411, 717, 718, 591, - 272, -907, 271, -907, 598, 659, 597, 689, 588, 601, - 690, 606, 607, -46, -39, -37, -4, 605, 301, 323, - -907, 610, 613, 615, 616, 617, 618, 619, 621, 671, - 291, 47, 740, 291, -907, -907, -907, 744, 291, 620, - 622, -907, -47, 548, -907, 746, 742, 623, 626, 627, - 629, 186, 631, 291, 291, 291, 653, -907, 644, -907, - -42, -31, 374, 291, -907, 608, 571, -907, 600, 397, - 397, -907, -907, 510, 510, 763, 765, 766, 768, 769, - 760, 771, 772, 773, 774, 775, 776, 641, -907, -907, - -907, -907, 291, 291, 291, 777, 779, 219, -907, 778, - -907, -907, 646, 647, 648, 649, 652, 655, 780, 786, - 745, 403, 394, 394, 274, 656, 382, 186, 789, 791, - 661, 249, -907, 688, 218, 260, 268, 795, 186, 186, - 186, 796, 798, 154, -907, -907, -907, -907, 687, 800, - 33, 291, 291, 291, 805, 792, 670, 672, 804, 274, - 673, 674, 291, 807, -907, 808, -907, -907, 811, 812, - 813, 675, -907, -907, -907, -907, -907, -907, 291, 676, - 816, 291, 678, 291, 291, 291, 818, 291, 291, 291, - -907, 819, 683, 749, 291, 686, 0, 684, 685, 753, - -907, 1024, -907, -907, 692, -907, 186, 186, 817, 820, - 700, 210, -907, -907, -907, 693, 704, 723, -907, 730, - -907, 762, 770, 271, 709, 710, 711, 712, 713, 719, - 722, 726, 727, 728, -907, -907, -907, 843, 646, 647, - 646, 24, 105, 721, 729, 731, 87, -907, 738, -907, - 851, 852, 856, 305, 301, 464, 867, -907, 732, -907, - 869, 291, 733, 739, 741, 743, 870, 759, 781, 782, - 737, 737, -907, -907, 737, 737, 783, -907, -907, -907, - 784, 785, 787, 788, 790, 793, 794, 797, 799, -907, - 799, 801, 802, 871, 896, 481, 806, -907, 897, 809, - 847, 810, 814, 815, 821, -907, 822, 842, 823, 824, - 853, 828, 833, 834, 803, 835, 837, 838, -907, 827, - 924, 840, 855, 928, 857, 861, 865, 940, 825, 291, - 872, 899, 890, -907, -907, 186, -907, -907, 826, -907, - 844, 845, 11, 40, -907, 947, 291, 291, 291, 291, - 952, 943, 954, 945, 956, 894, -907, -907, -907, 978, - 428, -907, 979, 487, -907, -907, -907, 982, 848, 44, - 73, 849, -907, 647, 646, -907, -907, 291, 850, 983, - 291, 854, 858, -907, 862, 839, -907, 873, -907, -907, - 987, 988, 990, 919, -907, -907, -907, 882, -907, -907, - -907, -907, 291, 291, 859, 1001, 1003, -907, 513, 186, - 186, 914, -907, -907, 1007, -907, -907, 799, 997, 881, - -907, 949, 1025, 291, -907, -907, -907, -907, 955, 1041, - 980, 981, 178, -907, -907, -907, 186, -907, -907, -907, - 923, -907, 957, 238, 926, 925, 1061, 1064, -907, -907, - 133, 186, 186, 933, 186, -907, -907, 186, -907, 186, - 932, 935, 936, 937, 938, 939, 941, 942, 944, 946, - 291, 999, -907, -907, -907, 948, 1000, 950, 951, 1002, - -907, 959, -907, 973, -907, -907, -907, -907, 953, 575, - 958, 960, 575, 1014, -907, 477, -907, 1009, 962, 964, - 394, 965, 966, 967, 566, -907, 968, 969, 970, 971, - 961, 976, 974, 984, -907, 977, -907, 394, 1011, -907, - 1085, -907, 1078, 1089, -907, -907, 989, -907, 991, 972, - 986, 1090, 1091, 291, 1096, -907, -907, -907, 1115, -907, - -907, -907, 1117, 186, 291, 1124, 1126, 1128, 1129, -907, - -907, 859, 575, 993, 995, 1132, -907, 1133, -907, -907, - 1111, 998, 1004, 575, -907, 575, 575, -907, 291, -907, - -907, -907, -907, 186, -907, 647, 271, -907, -907, -907, - 1006, 1020, 647, -907, -907, -907, 313, 1135, -907, 1092, - -907, 271, 1136, -907, -907, -907, 859, -907, 1137, 1139, - 1013, 1021, 1023, 1099, 1026, 1027, 1029, 1031, 1034, 1035, - 1036, 1037, -907, -907, 1065, -907, 398, 612, 1098, -907, - -907, -907, -907, -907, -907, 1130, -907, -907, -907, -907, - -907, 1039, 1044, 1042, 1163, -907, 1113, -907, 1043, 1046, - 291, 611, 1109, 291, -907, 1082, 1047, 291, 291, 291, - 291, 1049, 1183, 1186, 1180, 186, -907, 1187, -907, 1143, - 291, 291, 291, 1047, -907, -907, -907, -907, 1054, 925, - 1055, 1056, 1083, -907, 1057, 1059, 1060, 1062, -907, 1063, - 802, -907, 802, 1066, 1201, -907, 1067, 1069, -907, -907, - -907, -907, -907, 1068, 1070, 1071, 1071, 1072, 476, -907, - -907, -907, -907, 1073, 1203, 1205, -907, 557, -907, 332, - -907, -907, 553, -907, -907, -907, 167, 380, 1196, 1077, - 1079, 391, 408, 413, 453, 456, 462, 499, 506, 584, - -907, 428, -907, 1076, 291, 291, 1103, -907, 1105, -907, - 1106, -907, 1107, -907, 1108, -907, 1110, -907, 1112, -907, - 1114, -907, 1080, 1084, 1176, 1088, 1093, 1094, 1095, 1097, - 1100, 1101, 1102, 1104, 1116, -907, -907, 1216, 1047, 1047, - -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, - -907 + 862, -875, -87, -20, -875, 493, 421, -875, -875, -8, + 25, 44, 56, 93, -875, -875, -875, -875, -875, -875, + -875, -875, 213, 241, -875, -875, -875, -20, -20, 67, + -20, -20, -20, -875, 205, -20, -20, 263, 134, 147, + 154, 161, 163, 179, 209, 220, 233, 459, 245, 251, + 253, 259, 286, 306, -875, 316, 336, 345, 28, 492, + 22, 459, -875, 511, -875, -11, 208, 443, 1, 356, + 522, 400, -875, -875, 542, -20, -20, -20, -875, -875, + -875, -875, -875, 605, 126, 168, 171, 499, 554, 192, + 214, 105, -875, -875, -875, 10, -60, 547, 557, 576, + 581, 88, -875, -875, -875, -875, -20, 602, -875, -875, + 59, -875, -875, 471, -875, -875, 130, -875, -875, 619, + 635, 638, -875, 639, -875, 640, -875, 643, -875, 648, + 653, 656, -875, 655, 658, 659, 661, 667, 672, 673, + -875, -875, 664, 676, 27, 681, 118, 189, 684, 683, + -875, 1008, -875, -875, -875, 149, 8, -875, 641, -2, + 149, 149, 149, 549, 149, 123, -20, -875, -875, 551, + -875, -875, 117, 560, 564, -875, -875, 559, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -875, -875, + -875, -875, -875, -875, 556, 563, 565, 566, 567, 568, + -875, -875, -875, 569, 570, 571, 624, -875, 572, 649, + -33, 222, 275, -875, -875, 701, 710, 711, 712, 713, + 577, 578, 102, 714, 674, 580, 583, 400, 584, -875, + -875, -875, 585, -875, 330, 586, 376, -875, 587, -875, + -875, -875, -875, -875, -875, 589, 590, 718, 409, -16, + 657, 237, 720, 721, 594, -2, -875, 400, -875, 596, + 662, 597, 690, 591, 601, 693, 608, 609, -40, -19, + 36, 54, 606, 232, 295, -875, 611, 612, 613, 614, + 615, 616, 617, 618, 678, -20, 46, 751, -20, -875, + -875, -875, 752, -20, 620, 622, -875, -1, 551, -875, + 753, 745, 625, 626, 623, 629, 149, 630, -20, -20, + -20, 665, -875, 654, -875, -50, 55, 454, -20, -875, + 153, 481, -875, 403, 352, 352, -875, -875, 430, 430, + 766, 767, 768, 769, 770, 761, 772, 773, 774, 775, + 776, 777, 642, -875, -875, -875, -875, -20, -20, -20, + 778, 780, 225, -875, 781, -875, -875, 644, 645, 650, + 651, 652, 660, 786, 787, 744, 436, 522, 522, 356, + 663, 350, 149, 791, 792, 666, 325, -875, 688, 278, + 293, 318, 795, 149, 149, 149, 796, 797, 137, -875, + -875, -875, -875, 689, 800, 57, -20, -20, -20, 806, + 793, 671, 675, 805, 356, 670, 677, -20, 807, -875, + 810, -875, -875, 811, 812, 813, 680, -875, -875, -875, + -875, -875, -875, -20, 682, 814, -20, 685, -20, -20, + -20, 815, -20, -20, -20, -875, 816, 686, 748, -20, + 691, 138, 687, 694, 750, -875, 1008, -875, -875, 695, + -875, 149, 149, 818, 820, 702, 74, -875, -875, -875, + 707, 708, 715, -875, 729, -875, 779, 783, 400, 717, + 716, 722, 723, 725, 731, 733, 765, 771, 782, -875, + -875, -875, 817, 644, 645, 644, 204, 297, 709, 762, + 784, 162, -875, 730, -875, 836, 889, 891, 387, 232, + 381, 902, -875, 785, -875, 904, -20, 789, 788, 790, + 798, 905, 799, 801, 802, 794, 794, -875, -875, 794, + 794, 804, -875, -875, -875, 808, 803, 809, 821, 819, + 824, 825, 826, 827, -875, 827, 828, 829, 896, 897, + 292, 822, -875, 898, 831, 843, 832, 833, 834, 835, + -875, 837, 838, 839, 841, 840, 845, 849, 859, 842, + 860, 861, 865, -875, 852, 911, 867, 846, 913, 847, + 851, 853, 915, 863, -20, 857, 873, 883, -875, -875, + 149, -875, -875, 877, -875, 869, 875, 15, 21, -875, + 924, -20, -20, -20, -20, 942, 933, 944, 935, 946, + 882, -875, -875, -875, 948, 223, -875, 954, 341, -875, + -875, -875, 972, 907, 242, 362, 908, -875, 645, 644, + -875, -875, -20, 906, 973, -20, 909, 910, -875, 912, + 830, -875, 914, -875, -875, 975, 1047, 1049, 978, -875, + -875, -875, 945, -875, -875, -875, -875, -20, -20, 917, + 1042, 1046, -875, 402, 149, 149, 957, -875, -875, 1048, + -875, -875, 827, 1059, 921, -875, 989, 1062, -20, -875, + -875, -875, -875, 991, 1064, 993, 994, 156, -875, -875, + -875, 149, -875, -875, -875, 931, -875, 963, 260, 936, + 934, 1069, 1071, -875, -875, 419, 149, 149, 941, 149, + -875, -875, 149, -875, 149, 940, 943, 949, 950, 951, + 952, 953, 955, 956, 958, -20, 1004, -875, -875, -875, + 964, 1005, 965, 967, 1012, -875, 968, -875, 980, -875, + -875, -875, -875, 947, 572, 960, 969, 572, 1022, -875, + 321, -875, 1018, 971, 974, 522, 976, 977, 979, 457, + -875, 981, 982, 983, 984, 961, 990, 985, 987, -875, + 970, -875, 522, 1032, -875, 1111, -875, 1104, 1116, -875, + -875, 988, -875, 995, 1003, 1006, 1126, 1127, -20, 1141, + -875, -875, -875, 1142, -875, -875, -875, 1145, 149, -20, + 1144, 1150, 1151, 1152, -875, -875, 917, 572, 1016, 1019, + 1154, -875, 1156, -875, -875, 1153, 1021, 1024, 572, -875, + 572, 572, -875, -20, -875, -875, -875, -875, 149, -875, + 645, 400, -875, -875, -875, 1025, 1026, 645, -875, -875, + -875, 363, 1158, -875, 1117, -875, 400, 1164, -875, -875, + -875, 917, -875, 1165, 1166, 1033, 1031, 1034, 1113, 1035, + 1036, 1037, 1039, 1043, 1044, 1045, 1050, -875, -875, 1066, + -875, 573, 500, 1131, -875, -875, -875, -875, -875, -875, + 1136, -875, -875, -875, -875, -875, 1051, 1053, 1052, 1171, + -875, 1120, -875, 1055, 1056, -20, 548, 1110, -20, -875, + 1083, 1054, -20, -20, -20, -20, 1057, 1192, 1194, 1188, + 149, -875, 1195, -875, 1155, -20, -20, -20, 1054, -875, + -875, -875, -875, 1060, 934, 1063, 1065, 1087, -875, 1067, + 1068, 1070, 1072, -875, 1073, 829, -875, 829, 1075, 1206, + -875, 1077, 1080, -875, -875, -875, -875, -875, 1078, 1076, + 1079, 1079, 1081, 410, -875, -875, -875, -875, 1082, 1205, + 1207, -875, 465, -875, 288, -875, -875, 504, -875, -875, + -875, 432, 441, 1210, 1088, 1089, 446, 449, 475, 476, + 477, 478, 484, 485, 488, -875, 223, -875, 1085, -20, + -20, 1106, -875, 1105, -875, 1114, -875, 1115, -875, 1118, + -875, 1119, -875, 1121, -875, 1122, -875, 1091, 1092, 1178, + 1095, 1098, 1099, 1100, 1101, 1102, 1103, 1107, 1108, 1109, + -875, -875, 1230, 1054, 1054, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -907, -907, -907, -122, 10, -208, -737, -906, 284, -907, - -509, -907, -196, -907, -451, -460, -502, -907, -863, -907, - -907, 975, -69, -907, -27, -907, 402, -180, 325, -907, - -243, 2, 22, -168, 963, -213, -50, 59, -907, -16, - -907, -907, -907, 1220, -907, -26, 19 + -875, -875, -875, -129, 26, -221, -700, -874, 294, -875, + -512, -875, -192, -875, -443, -463, -500, -875, -815, -875, + -875, 986, -287, -875, -30, -875, 406, -176, 331, -875, + -250, 2, 17, -140, 959, -206, -54, 19, -875, -17, + -875, -875, -875, 1236, -875, -27, 24 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -1761,266 +1806,268 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -3 static const yytype_int16 yytable[] = { - 101, 102, 65, 104, 365, 106, 107, 110, 113, 350, - 63, 119, 121, 123, 370, 162, 165, 108, 108, 597, - 296, 346, 66, 655, 292, 419, 422, 596, 653, 598, - 146, 441, 956, 232, 222, 294, 234, 400, 411, 163, - 928, 7, 8, 71, 401, 411, 360, 411, 252, 364, - 7, 8, 142, 279, 852, 184, 186, 188, 223, 235, - 226, 228, 136, 94, 389, 993, 395, 161, 256, 257, - 7, 8, 253, 433, 139, 160, 164, 254, 259, 260, - 411, 183, 399, 72, 280, 284, 285, 95, 418, 421, - 73, 170, 171, 172, 219, 185, 229, 187, 231, 877, - 7, 8, 526, 128, 434, 72, 225, 103, 251, 143, - 140, 347, 73, 147, 442, 72, 457, 144, 72, 412, - 458, 527, 73, 502, 172, 73, 413, 459, 414, 96, - 172, 460, 72, 227, 72, 307, 282, 240, 283, 73, - 241, 73, 242, 72, 243, 1019, 1020, 244, 65, 245, - 73, 7, 8, 726, 233, 754, 63, 246, 563, 97, - 293, 415, 564, 727, 297, 298, 299, 300, 66, 302, - 72, 385, 295, 171, 697, 7, 8, 73, 388, 98, - 522, 386, 599, 74, 72, 351, 501, 600, 75, 76, - 523, 73, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 721, 699, 764, 74, 722, 247, 248, 99, - 75, 76, 608, 609, 765, 74, 7, 8, 74, 230, - 75, 76, 72, 75, 76, 170, 171, 352, 100, 73, - 610, 723, 74, 141, 74, 724, 172, 75, 76, 75, - 76, 769, 770, 74, 510, 249, 576, 771, 75, 76, - 116, 618, 621, 387, 432, 584, 135, 436, 772, 114, - 7, 8, 438, 602, 72, 303, 304, 305, 603, 172, - 74, 73, 148, 72, 115, 75, 76, 452, 453, 454, - 73, 72, 310, 311, 250, 124, 512, 464, 73, 75, - 76, 778, 659, 148, 514, 779, 152, 129, 149, 150, - 7, 8, 7, 8, 7, 8, 153, 284, 285, 130, - 153, 450, 162, 165, 617, 620, 478, 479, 480, 568, - 286, 287, 74, 72, 118, 969, 120, 75, 76, 970, - 73, 72, 122, 72, 125, 72, 126, 306, 73, 871, - 154, 615, 73, 7, 8, 374, 375, 155, 511, 513, - 515, 376, 483, 484, 72, 866, 156, 157, 158, 131, - 159, 73, 870, 132, 74, 528, 529, 530, 72, 75, - 76, 284, 285, 74, 498, 73, 539, 503, 75, 76, - 133, 74, 507, 508, 286, 417, 75, 76, 517, 518, - 519, 134, 546, 284, 285, 549, 137, 551, 552, 553, - 461, 555, 556, 557, 7, 8, 286, 420, 561, 536, - 462, 940, 145, 941, 72, 138, 127, 72, 89, 90, - 91, 73, 151, 74, 73, 577, 378, 379, 75, 76, - 153, 74, 380, 74, 167, 74, 75, 76, 75, 76, - 75, 76, 639, 65, 169, 640, 641, 224, 571, 572, - 236, 63, 284, 285, 74, 237, 570, 570, 238, 75, - 76, 963, 964, 66, 175, 286, 500, 616, 74, 179, - 180, 965, 966, 75, 76, 628, 239, 338, 339, 340, - 341, 284, 285, 296, 365, 625, 400, 189, 190, 191, - 192, 255, 193, 194, 258, 195, 196, 197, 198, 199, - 200, 148, 391, 392, 393, 261, 149, 497, 201, 394, - 202, 203, 7, 8, 105, 262, 204, 111, 205, 75, - 76, 263, 75, 76, 173, 174, 175, 176, 264, 177, - 178, 179, 180, 804, 284, 285, 807, 88, 971, 89, - 90, 91, 972, 690, 92, 206, 265, 286, 619, 976, - 181, 182, 207, 977, 712, 713, 714, 208, 209, 210, - 701, 702, 703, 704, 286, 658, 978, 211, 212, 213, - 979, 980, 214, 334, 335, 981, 336, 175, 284, 337, - 177, 178, 179, 180, 266, 693, 267, 338, 339, 340, - 341, 728, 698, 251, 731, 268, 853, 954, 955, 342, - 343, 344, 712, 713, 714, 215, 216, 861, 867, 862, - 863, 982, 717, 718, 984, 983, 742, 743, 985, 269, - 986, 314, 270, 875, 987, 271, 173, 174, 175, 176, - 272, 177, 178, 179, 180, 273, 173, 759, 175, 176, - 296, 177, 178, 179, 180, 217, 218, 809, 810, 811, - 75, 76, 181, 182, 748, 749, 274, 988, 775, 750, - 751, 989, 181, 182, 990, 173, 275, 175, 991, 276, - 177, 178, 179, 180, 277, 175, 278, 893, 177, 178, - 179, 180, 284, 285, 794, 281, 766, 820, 821, 290, - 816, 181, 182, 961, 962, 291, 783, 967, 968, 181, - 182, 780, 781, 81, 570, 954, 955, 831, 82, 83, - 301, 308, 84, 85, 312, 313, 349, 86, 87, 904, - 905, 906, 907, 353, 354, 325, 326, 327, 328, 355, - 329, 356, 357, 330, 366, 331, 332, 333, 347, 367, - 358, 359, 368, 369, 371, 373, 377, 842, 381, 382, - 383, 384, 390, 396, 397, 398, 402, 403, 847, 404, - 405, 408, 406, 407, 409, 410, 435, 416, 423, 431, - 437, 424, 444, 425, 426, 427, 428, 429, 445, 455, - 456, 446, 864, 430, 447, 439, 448, 440, 449, 465, - 451, 466, 467, 846, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 481, 477, 482, 494, 490, 491, 486, - 488, 492, 495, 485, 493, 504, 496, 505, 499, 506, - 509, 516, 520, 865, 521, 524, 525, 531, 532, 533, - 535, 534, 538, 540, 541, 537, 872, 542, 543, 544, - 545, 547, 548, 550, 554, 558, 559, 560, 562, 565, - 566, 567, 569, 573, 903, 578, 574, 910, 575, 580, - 582, 914, 915, 916, 917, 581, 579, 585, 583, 595, - 586, 587, 588, 589, 925, 926, 927, 590, -2, 1, - 591, 611, 930, 605, 592, 593, 594, 612, 613, 607, - 2, 606, 614, 622, 623, 624, 633, 630, 629, 631, - 637, 632, 3, 4, 5, 922, 6, 656, 7, 8, + 104, 105, 68, 107, 108, 109, 375, 111, 112, 115, + 118, 124, 126, 128, 167, 170, 370, 69, 355, 113, + 113, 602, 297, 424, 427, 660, 66, 157, 7, 8, + 351, 7, 8, 227, 299, 658, 406, 158, 237, 301, + 601, 168, 603, 75, 416, 7, 8, 257, 147, 405, + 76, 7, 8, 284, 289, 290, 144, 189, 191, 193, + 228, 75, 231, 233, 75, 416, 133, 151, 76, 961, + 166, 159, 438, 394, 258, 400, 74, 446, 160, 259, + 149, 141, 369, 239, 285, 261, 262, 161, 162, 163, + 97, 164, 145, 933, 165, 169, 857, 423, 426, 175, + 176, 177, 998, 439, 245, 148, 240, 246, 462, 247, + 581, 248, 463, 224, 249, 404, 250, 236, 7, 8, + 416, 507, 75, 98, 251, 417, 531, 256, 365, 76, + 352, 234, 7, 8, 177, 7, 8, 75, 416, 312, + 177, 882, 99, 77, 76, 532, 418, 393, 78, 79, + 152, 75, 188, 68, 100, 731, 264, 265, 76, 238, + 447, 77, 759, 527, 77, 75, 78, 79, 69, 78, + 79, 300, 76, 528, 252, 253, 732, 66, 702, 7, + 8, 298, 769, 176, 704, 302, 303, 304, 305, 75, + 307, 101, 770, 75, 190, 506, 76, 192, 1024, 1025, + 76, 419, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 254, 464, 308, 309, 310, 465, 230, 420, + 180, 153, 77, 182, 183, 184, 185, 78, 79, 644, + 106, 75, 645, 646, 75, 175, 176, 77, 76, 102, + 232, 76, 78, 79, 186, 187, 177, 589, 356, 623, + 626, 255, 315, 316, 235, 75, 78, 79, 437, 289, + 290, 441, 76, 774, 775, 77, 443, 103, 75, 776, + 78, 79, 291, 292, 392, 76, 287, 75, 288, 177, + 777, 457, 458, 459, 76, 75, 311, 613, 614, 77, + 664, 469, 76, 77, 78, 79, 568, 119, 78, 79, + 569, 357, 289, 290, 515, 615, 153, 289, 290, 301, + 120, 154, 155, 167, 170, 291, 422, 573, 121, 517, + 483, 484, 485, 622, 625, 123, 75, 125, 396, 397, + 398, 77, 455, 76, 77, 399, 78, 79, 75, 78, + 79, 75, 140, 127, 519, 76, 7, 8, 76, 717, + 718, 719, 516, 518, 520, 77, 75, 871, 488, 489, + 78, 79, 604, 76, 875, 289, 290, 605, 110, 533, + 534, 535, 129, 78, 79, 291, 663, 77, 291, 425, + 544, 75, 78, 79, 130, 77, 7, 8, 76, 876, + 78, 79, 158, 7, 8, 503, 551, 131, 508, 554, + 726, 556, 557, 558, 727, 560, 561, 562, 134, 522, + 523, 524, 566, 945, 135, 946, 136, 968, 969, 180, + 289, 290, 137, 620, 184, 185, 116, 970, 971, 582, + 541, 78, 79, 291, 505, 390, 379, 380, 77, 7, + 8, 77, 381, 78, 79, 391, 78, 79, 68, 138, + 75, 289, 290, 576, 577, 607, 77, 76, 512, 513, + 608, 78, 79, 69, 291, 624, 722, 723, 178, 139, + 180, 621, 66, 182, 183, 184, 185, 575, 575, 633, + 466, 77, 383, 384, 7, 8, 78, 79, 385, 630, + 467, 814, 815, 816, 186, 187, 370, 180, 405, 142, + 182, 183, 184, 185, 194, 195, 196, 197, 143, 198, + 199, 150, 200, 201, 202, 203, 204, 205, 146, 91, + 728, 92, 93, 94, 729, 206, 95, 207, 208, 7, + 8, 959, 960, 209, 153, 210, 717, 718, 719, 154, + 502, 156, 809, 753, 754, 812, 178, 695, 180, 181, + 77, 182, 183, 184, 185, 78, 79, 132, 158, 92, + 93, 94, 211, 172, 706, 707, 708, 709, 174, 212, + 289, 290, 186, 187, 213, 214, 215, 783, 825, 826, + 229, 784, 84, 241, 216, 217, 218, 85, 86, 219, + 974, 87, 88, 242, 975, 733, 89, 90, 736, 976, + 872, 966, 967, 977, 981, 858, 698, 983, 982, 959, + 960, 984, 243, 703, 256, 880, 866, 244, 867, 868, + 747, 748, 220, 221, 178, 179, 180, 181, 260, 182, + 183, 184, 185, 985, 987, 989, 991, 986, 988, 990, + 992, 764, 993, 995, 263, 266, 994, 996, 972, 973, + 186, 187, 343, 344, 345, 346, 909, 910, 911, 912, + 780, 267, 222, 223, 268, 269, 270, 78, 79, 271, + 178, 179, 180, 181, 272, 182, 183, 184, 185, 273, + 755, 756, 274, 275, 276, 277, 898, 278, 799, 339, + 340, 821, 341, 279, 289, 342, 186, 187, 280, 281, + 282, 788, 283, 343, 344, 345, 346, 771, 836, 286, + 295, 296, 306, 301, 313, 347, 348, 349, 317, 330, + 354, 319, 785, 786, 318, 575, 331, 358, 332, 333, + 334, 335, 336, 337, 338, 352, 359, 360, 361, 362, + 371, 363, 364, 373, 389, 372, 374, 376, 378, 382, + 386, 847, 387, 388, 407, 395, 401, 402, 403, 409, + 408, 410, 852, 412, 413, 411, 414, 415, 421, 428, + 429, 430, 431, 432, 433, 434, 436, 440, 442, 449, + 435, 450, 453, 451, 452, 444, 869, 445, 454, 456, + 461, 460, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 486, 482, 487, 491, 493, 495, + 496, 497, 499, 500, 851, 501, 490, 509, 510, 498, + 514, 521, 525, 526, 511, 504, 530, 529, 536, 537, + 538, 540, 542, 545, 539, 543, 546, 547, 548, 549, + 553, 559, 563, 600, 870, 550, 565, 552, 572, 564, + 555, 585, 570, 567, 578, 574, 579, 877, 908, 571, + 580, 915, -2, 1, 586, 919, 920, 921, 922, 583, + 584, 610, 617, 616, 2, 590, 591, 587, 930, 931, + 932, 588, 592, 593, 935, 594, 3, 4, 5, 595, + 6, 596, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 597, 611, 618, 927, 619, 627, 598, + 629, 638, 661, 662, 666, 668, 674, 686, 677, 689, + 599, 693, 612, 696, 688, 690, 635, 628, 636, 691, + 705, 692, 1000, 1001, 634, 153, 637, 642, 38, 39, + 697, 639, 647, 640, 641, 649, 648, 650, 710, 711, + 712, 713, 714, 715, 716, 40, 41, 42, 43, 651, + 721, 652, 44, 685, 665, 45, 46, 653, 654, 655, + 656, 659, 608, 667, 669, 670, 671, 672, 724, 735, + 681, 742, 673, 740, 675, 47, 676, 678, 48, 49, + 50, 679, 51, 52, 53, 54, 55, 56, 57, 58, + 2, 680, 682, 683, 694, 59, 60, 684, 61, 62, + 687, 700, 3, 4, 5, 699, 6, 701, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 634, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 657, 661, 30, 31, 32, 33, 34, 663, - 669, 642, 643, 635, 636, 645, 646, 644, 995, 996, - 681, 672, 647, 683, 684, 685, 648, 649, 680, 686, - 650, 676, 651, 687, 654, 603, 688, 692, 660, 691, - 148, 662, 664, 700, 35, 36, 665, 666, 705, 706, - 707, 708, 709, 667, 694, 710, 689, 668, 670, 671, - 673, 37, 38, 39, 40, 674, 675, 677, 41, 678, - 679, 42, 43, 682, 711, 716, 695, 696, 719, 730, - 720, 725, 735, 737, 738, 729, 739, 740, 741, 732, - 733, 44, 744, 755, 45, 46, 47, 734, 48, 49, - 50, 51, 52, 53, 54, 55, 2, 746, 736, 747, - 752, 56, 57, 753, 58, 59, 756, 757, 3, 4, - 5, 758, 6, 760, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 761, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 762, 763, - 30, 31, 32, 33, 34, 767, 773, 776, 768, 774, - 777, 782, 784, 785, 786, 787, 788, 795, 797, 802, - 800, 789, 801, 790, 791, 808, 792, 813, 793, 832, - 796, 833, 798, 799, 834, 835, 840, 841, 803, 826, - 35, 36, 843, 805, 814, 806, 815, 817, 818, 819, - 822, 823, 824, 825, 827, 838, 828, 37, 38, 39, - 40, 844, 830, 858, 41, 845, 829, 42, 43, 839, - 848, 836, 849, 837, 850, 851, 854, 855, 856, 857, - 859, 873, 876, 878, 874, 879, 860, 44, 868, 894, - 45, 46, 47, 880, 48, 49, 50, 51, 52, 53, - 54, 55, 869, 411, 881, 882, 883, 56, 57, 884, - 58, 59, 885, 886, 887, 888, 889, 890, 891, 899, - 895, 896, 897, 901, 898, 900, 902, 909, 911, 919, - 912, 918, 920, 921, 924, 923, 929, 931, 932, 934, - 933, 935, 936, 943, 937, 944, 938, 945, 942, 959, - 946, 960, 973, 947, 949, 952, 958, 974, 994, 975, - 997, 998, 1005, 999, 1000, 1001, 1006, 1002, 1007, 1003, - 1008, 1004, 1018, 992, 112, 1009, 1010, 1011, 892, 1012, - 0, 951, 1013, 1014, 1015, 0, 1016, 0, 443, 0, - 0, 0, 0, 0, 0, 463, 0, 0, 1017 + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 725, + 730, 734, 738, 743, 737, 744, 745, 739, 751, 741, + 749, 746, 752, 757, 758, 760, 761, 762, 763, 765, + 766, 767, 768, 772, 773, 781, 778, 782, 779, 787, + 789, 790, 800, 802, 38, 39, 807, 791, 792, 793, + 805, 806, 808, 813, 794, 795, 818, 796, 797, 831, + 798, 40, 41, 42, 43, 810, 801, 803, 44, 804, + 837, 45, 46, 819, 811, 835, 820, 838, 822, 823, + 839, 824, 840, 827, 828, 829, 830, 833, 832, 834, + 841, 47, 845, 846, 48, 49, 50, 842, 51, 52, + 53, 54, 55, 56, 57, 58, 843, 848, 849, 844, + 853, 59, 60, 850, 61, 62, 854, 855, 856, 859, + 861, 860, 862, 864, 878, 863, 865, 873, 874, 879, + 881, 883, 884, 885, 886, 888, 887, 416, 889, 896, + 890, 891, 899, 892, 893, 894, 900, 904, 914, 916, + 895, 902, 905, 901, 903, 906, 907, 917, 924, 923, + 925, 926, 934, 928, 938, 936, 929, 937, 948, 939, + 940, 964, 941, 965, 942, 949, 943, 947, 950, 952, + 951, 1003, 954, 1002, 957, 963, 978, 999, 979, 980, + 1012, 1004, 1005, 1010, 1011, 1006, 1007, 1013, 1008, 1009, + 1014, 1015, 1016, 1017, 1018, 1019, 1023, 897, 997, 1020, + 1021, 1022, 956, 117, 0, 0, 468, 0, 0, 0, + 0, 0, 0, 0, 448 }; static const yytype_int16 yycheck[] = { - 26, 27, 0, 29, 217, 31, 32, 33, 34, 205, - 0, 38, 39, 40, 222, 65, 66, 33, 34, 479, - 72, 201, 0, 532, 146, 268, 269, 478, 530, 480, - 78, 78, 938, 28, 84, 26, 143, 250, 84, 65, - 903, 30, 31, 163, 252, 84, 26, 84, 98, 217, - 30, 31, 26, 26, 791, 81, 82, 83, 84, 166, - 86, 87, 52, 98, 244, 971, 246, 65, 26, 27, - 30, 31, 98, 26, 28, 65, 66, 103, 26, 27, - 84, 26, 250, 63, 57, 70, 71, 98, 268, 269, - 70, 72, 73, 74, 84, 26, 26, 26, 88, 836, - 30, 31, 69, 44, 57, 63, 26, 163, 98, 83, - 64, 163, 70, 161, 161, 63, 158, 58, 63, 165, - 162, 88, 70, 366, 105, 70, 165, 158, 165, 98, - 111, 162, 63, 26, 63, 161, 158, 16, 160, 70, - 19, 70, 21, 63, 23, 1008, 1009, 26, 146, 28, - 70, 30, 31, 613, 149, 657, 146, 36, 158, 98, - 150, 165, 162, 614, 154, 155, 156, 157, 146, 159, - 63, 26, 163, 154, 163, 30, 31, 70, 163, 98, - 26, 36, 158, 163, 63, 26, 366, 163, 168, 169, - 36, 70, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 158, 163, 26, 163, 162, 86, 87, 26, - 168, 169, 125, 126, 36, 163, 30, 31, 163, 149, - 168, 169, 63, 168, 169, 206, 207, 26, 26, 70, - 143, 158, 163, 26, 163, 162, 217, 168, 169, 168, - 169, 3, 4, 163, 26, 124, 36, 9, 168, 169, - 164, 494, 495, 243, 280, 463, 26, 283, 20, 163, - 30, 31, 288, 158, 63, 91, 92, 93, 163, 250, - 163, 70, 98, 63, 163, 168, 169, 303, 304, 305, - 70, 63, 135, 136, 163, 163, 26, 313, 70, 168, - 169, 158, 535, 98, 26, 162, 26, 163, 103, 104, - 30, 31, 30, 31, 30, 31, 36, 70, 71, 163, - 36, 301, 362, 363, 494, 495, 342, 343, 344, 441, - 83, 84, 163, 63, 164, 158, 164, 168, 169, 162, - 70, 63, 164, 63, 164, 63, 164, 163, 70, 26, - 70, 36, 70, 30, 31, 106, 107, 77, 374, 375, - 376, 112, 133, 134, 63, 815, 86, 87, 88, 163, - 90, 70, 822, 163, 163, 391, 392, 393, 63, 168, - 169, 70, 71, 163, 364, 70, 402, 367, 168, 169, - 163, 163, 133, 134, 83, 84, 168, 169, 378, 379, - 380, 163, 418, 70, 71, 421, 163, 423, 424, 425, - 26, 427, 428, 429, 30, 31, 83, 84, 434, 399, - 36, 920, 0, 922, 63, 163, 98, 63, 100, 101, - 102, 70, 98, 163, 70, 451, 106, 107, 168, 169, - 36, 163, 112, 163, 163, 163, 168, 169, 168, 169, - 168, 169, 511, 441, 26, 514, 515, 26, 446, 447, - 36, 441, 70, 71, 163, 36, 446, 447, 36, 168, - 169, 129, 130, 441, 67, 83, 84, 493, 163, 72, - 73, 139, 140, 168, 169, 501, 36, 79, 80, 81, - 82, 70, 71, 72, 697, 501, 699, 5, 6, 7, - 8, 26, 10, 11, 173, 13, 14, 15, 16, 17, - 18, 98, 91, 92, 93, 26, 103, 104, 26, 98, - 28, 29, 30, 31, 163, 26, 34, 163, 36, 168, - 169, 26, 168, 169, 65, 66, 67, 68, 26, 70, - 71, 72, 73, 729, 70, 71, 732, 98, 158, 100, - 101, 102, 162, 569, 105, 63, 26, 83, 84, 158, - 91, 92, 70, 162, 126, 127, 128, 75, 76, 77, - 586, 587, 588, 589, 83, 84, 158, 85, 86, 87, - 162, 158, 90, 65, 66, 162, 68, 67, 70, 71, - 70, 71, 72, 73, 26, 575, 26, 79, 80, 81, - 82, 617, 582, 583, 620, 26, 792, 121, 122, 91, - 92, 93, 126, 127, 128, 123, 124, 803, 816, 805, - 806, 158, 125, 126, 158, 162, 642, 643, 162, 26, - 158, 162, 28, 831, 162, 26, 65, 66, 67, 68, - 26, 70, 71, 72, 73, 26, 65, 663, 67, 68, - 72, 70, 71, 72, 73, 163, 164, 170, 171, 172, - 168, 169, 91, 92, 141, 142, 26, 158, 685, 649, - 650, 162, 91, 92, 158, 65, 26, 67, 162, 26, - 70, 71, 72, 73, 36, 67, 26, 857, 70, 71, - 72, 73, 70, 71, 710, 28, 676, 121, 122, 26, - 740, 91, 92, 136, 137, 28, 694, 144, 145, 91, - 92, 691, 692, 89, 694, 121, 122, 757, 94, 95, - 163, 163, 98, 99, 158, 160, 71, 103, 104, 108, - 109, 110, 111, 26, 26, 163, 163, 163, 163, 26, - 163, 26, 26, 163, 26, 163, 163, 163, 163, 71, - 164, 164, 163, 163, 163, 163, 163, 773, 163, 163, - 163, 26, 98, 36, 36, 164, 158, 98, 784, 162, - 71, 71, 174, 162, 158, 158, 26, 162, 158, 98, - 26, 158, 26, 158, 158, 158, 158, 158, 36, 126, - 136, 158, 808, 162, 158, 165, 159, 165, 159, 26, - 159, 26, 26, 783, 26, 26, 36, 26, 26, 26, - 26, 26, 26, 26, 163, 26, 26, 159, 159, 163, - 163, 159, 26, 35, 159, 26, 71, 26, 162, 158, - 132, 26, 26, 813, 26, 138, 26, 22, 36, 159, - 26, 159, 158, 26, 26, 162, 826, 26, 26, 26, - 165, 165, 26, 165, 26, 26, 163, 98, 162, 165, - 165, 98, 160, 36, 880, 162, 36, 883, 158, 136, - 98, 887, 888, 889, 890, 135, 162, 158, 98, 26, - 160, 160, 160, 160, 900, 901, 902, 158, 0, 1, - 158, 143, 909, 162, 158, 158, 158, 36, 36, 158, - 12, 162, 36, 26, 162, 26, 26, 158, 165, 158, - 163, 158, 24, 25, 26, 895, 28, 36, 30, 31, + 27, 28, 0, 30, 31, 32, 227, 34, 35, 36, + 37, 41, 42, 43, 68, 69, 222, 0, 210, 36, + 37, 484, 151, 273, 274, 537, 0, 26, 30, 31, + 206, 30, 31, 87, 26, 535, 257, 36, 28, 72, + 483, 68, 485, 63, 84, 30, 31, 101, 26, 255, + 70, 30, 31, 26, 70, 71, 28, 84, 85, 86, + 87, 63, 89, 90, 63, 84, 47, 78, 70, 943, + 68, 70, 26, 249, 101, 251, 163, 78, 77, 106, + 61, 55, 222, 143, 57, 26, 27, 86, 87, 88, + 98, 90, 64, 908, 68, 69, 796, 273, 274, 75, + 76, 77, 976, 57, 16, 83, 166, 19, 158, 21, + 36, 23, 162, 87, 26, 255, 28, 91, 30, 31, + 84, 371, 63, 98, 36, 165, 69, 101, 26, 70, + 163, 26, 30, 31, 110, 30, 31, 63, 84, 166, + 116, 841, 98, 163, 70, 88, 165, 163, 168, 169, + 161, 63, 26, 151, 98, 618, 26, 27, 70, 149, + 161, 163, 662, 26, 163, 63, 168, 169, 151, 168, + 169, 163, 70, 36, 86, 87, 619, 151, 163, 30, + 31, 155, 26, 159, 163, 159, 160, 161, 162, 63, + 164, 98, 36, 63, 26, 371, 70, 26, 1013, 1014, + 70, 165, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 124, 158, 91, 92, 93, 162, 26, 165, + 67, 98, 163, 70, 71, 72, 73, 168, 169, 516, + 163, 63, 519, 520, 63, 211, 212, 163, 70, 26, + 26, 70, 168, 169, 91, 92, 222, 468, 26, 499, + 500, 163, 135, 136, 149, 63, 168, 169, 285, 70, + 71, 288, 70, 3, 4, 163, 293, 26, 63, 9, + 168, 169, 83, 84, 248, 70, 158, 63, 160, 255, + 20, 308, 309, 310, 70, 63, 163, 125, 126, 163, + 540, 318, 70, 163, 168, 169, 158, 163, 168, 169, + 162, 26, 70, 71, 26, 143, 98, 70, 71, 72, + 163, 103, 104, 367, 368, 83, 84, 446, 164, 26, + 347, 348, 349, 499, 500, 164, 63, 164, 91, 92, + 93, 163, 306, 70, 163, 98, 168, 169, 63, 168, + 169, 63, 26, 164, 26, 70, 30, 31, 70, 126, + 127, 128, 379, 380, 381, 163, 63, 820, 133, 134, + 168, 169, 158, 70, 827, 70, 71, 163, 163, 396, + 397, 398, 163, 168, 169, 83, 84, 163, 83, 84, + 407, 63, 168, 169, 164, 163, 30, 31, 70, 26, + 168, 169, 36, 30, 31, 369, 423, 164, 372, 426, + 158, 428, 429, 430, 162, 432, 433, 434, 163, 383, + 384, 385, 439, 925, 163, 927, 163, 129, 130, 67, + 70, 71, 163, 36, 72, 73, 163, 139, 140, 456, + 404, 168, 169, 83, 84, 26, 106, 107, 163, 30, + 31, 163, 112, 168, 169, 36, 168, 169, 446, 163, + 63, 70, 71, 451, 452, 158, 163, 70, 133, 134, + 163, 168, 169, 446, 83, 84, 125, 126, 65, 163, + 67, 498, 446, 70, 71, 72, 73, 451, 452, 506, + 26, 163, 106, 107, 30, 31, 168, 169, 112, 506, + 36, 170, 171, 172, 91, 92, 702, 67, 704, 163, + 70, 71, 72, 73, 5, 6, 7, 8, 163, 10, + 11, 0, 13, 14, 15, 16, 17, 18, 26, 98, + 158, 100, 101, 102, 162, 26, 105, 28, 29, 30, + 31, 121, 122, 34, 98, 36, 126, 127, 128, 103, + 104, 98, 734, 141, 142, 737, 65, 574, 67, 68, + 163, 70, 71, 72, 73, 168, 169, 98, 36, 100, + 101, 102, 63, 163, 591, 592, 593, 594, 26, 70, + 70, 71, 91, 92, 75, 76, 77, 158, 121, 122, + 26, 162, 89, 36, 85, 86, 87, 94, 95, 90, + 158, 98, 99, 36, 162, 622, 103, 104, 625, 158, + 821, 136, 137, 162, 158, 797, 580, 158, 162, 121, + 122, 162, 36, 587, 588, 836, 808, 36, 810, 811, + 647, 648, 123, 124, 65, 66, 67, 68, 26, 70, + 71, 72, 73, 158, 158, 158, 158, 162, 162, 162, + 162, 668, 158, 158, 173, 26, 162, 162, 144, 145, + 91, 92, 79, 80, 81, 82, 108, 109, 110, 111, + 690, 26, 163, 164, 26, 26, 26, 168, 169, 26, + 65, 66, 67, 68, 26, 70, 71, 72, 73, 26, + 654, 655, 26, 28, 26, 26, 862, 26, 715, 65, + 66, 745, 68, 26, 70, 71, 91, 92, 26, 26, + 36, 699, 26, 79, 80, 81, 82, 681, 762, 28, + 26, 28, 163, 72, 163, 91, 92, 93, 158, 163, + 71, 162, 696, 697, 160, 699, 163, 26, 163, 163, + 163, 163, 163, 163, 163, 163, 26, 26, 26, 26, + 26, 164, 164, 163, 26, 71, 163, 163, 163, 163, + 163, 778, 163, 163, 158, 98, 36, 36, 164, 162, + 98, 71, 789, 162, 71, 174, 158, 158, 162, 158, + 158, 158, 158, 158, 158, 158, 98, 26, 26, 26, + 162, 36, 159, 158, 158, 165, 813, 165, 159, 159, + 136, 126, 26, 26, 26, 26, 26, 36, 26, 26, + 26, 26, 26, 26, 26, 163, 26, 163, 163, 159, + 159, 159, 26, 26, 788, 71, 35, 26, 26, 159, + 132, 26, 26, 26, 158, 162, 26, 138, 22, 36, + 159, 26, 162, 26, 159, 158, 26, 26, 26, 26, + 26, 26, 26, 26, 818, 165, 98, 165, 98, 163, + 165, 136, 165, 162, 36, 160, 36, 831, 885, 165, + 158, 888, 0, 1, 135, 892, 893, 894, 895, 162, + 162, 162, 36, 143, 12, 158, 160, 98, 905, 906, + 907, 98, 160, 160, 914, 160, 24, 25, 26, 158, + 28, 158, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 158, 162, 36, 900, 36, 26, 158, + 26, 26, 36, 36, 36, 92, 98, 26, 98, 26, + 158, 26, 158, 70, 98, 98, 158, 162, 158, 98, + 26, 98, 979, 980, 165, 98, 158, 163, 96, 97, + 77, 162, 158, 162, 162, 162, 158, 158, 26, 36, + 26, 36, 26, 91, 26, 113, 114, 115, 116, 158, + 26, 162, 120, 131, 162, 123, 124, 163, 163, 163, + 163, 163, 163, 162, 162, 162, 162, 162, 26, 26, + 158, 26, 165, 173, 165, 143, 165, 162, 146, 147, + 148, 162, 150, 151, 152, 153, 154, 155, 156, 157, + 12, 162, 162, 162, 161, 163, 164, 162, 166, 167, + 163, 162, 24, 25, 26, 158, 28, 162, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 162, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 36, 36, 56, 57, 58, 59, 60, 92, - 98, 158, 158, 162, 162, 158, 158, 162, 974, 975, - 26, 98, 162, 98, 26, 98, 163, 163, 131, 98, - 163, 158, 163, 98, 163, 163, 26, 77, 162, 70, - 98, 162, 162, 26, 96, 97, 162, 162, 26, 36, - 26, 36, 26, 162, 158, 91, 161, 165, 165, 165, - 162, 113, 114, 115, 116, 162, 162, 162, 120, 162, - 162, 123, 124, 163, 26, 26, 162, 162, 26, 26, - 162, 162, 173, 26, 26, 165, 26, 98, 136, 165, - 162, 143, 163, 26, 146, 147, 148, 165, 150, 151, - 152, 153, 154, 155, 156, 157, 12, 36, 165, 36, - 126, 163, 164, 36, 166, 167, 165, 98, 24, 25, - 26, 26, 28, 98, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 26, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 98, 98, - 56, 57, 58, 59, 60, 162, 160, 26, 131, 164, - 26, 158, 160, 158, 158, 158, 158, 98, 98, 126, - 98, 162, 143, 162, 162, 91, 162, 98, 162, 98, - 162, 26, 162, 162, 36, 26, 26, 26, 165, 158, - 96, 97, 26, 165, 162, 165, 162, 162, 162, 162, - 162, 162, 162, 162, 158, 163, 162, 113, 114, 115, - 116, 26, 165, 32, 120, 28, 162, 123, 124, 163, - 26, 162, 26, 162, 26, 26, 163, 162, 26, 26, - 162, 26, 26, 26, 72, 26, 162, 143, 162, 71, - 146, 147, 148, 160, 150, 151, 152, 153, 154, 155, - 156, 157, 162, 84, 163, 162, 160, 163, 164, 162, - 166, 167, 163, 162, 160, 160, 160, 160, 133, 36, - 70, 162, 158, 160, 162, 92, 160, 98, 126, 26, - 163, 162, 26, 33, 71, 28, 162, 162, 162, 162, - 137, 162, 162, 22, 162, 158, 163, 158, 162, 26, - 162, 26, 36, 163, 163, 163, 163, 160, 162, 160, - 137, 136, 162, 137, 137, 137, 162, 137, 72, 137, - 162, 137, 36, 969, 34, 162, 162, 162, 856, 162, - -1, 936, 162, 162, 162, -1, 162, -1, 293, -1, - -1, -1, -1, -1, -1, 312, -1, -1, 162 + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 162, + 162, 165, 162, 26, 165, 26, 98, 165, 36, 165, + 163, 136, 36, 126, 36, 26, 165, 98, 26, 98, + 26, 98, 98, 162, 131, 26, 160, 26, 164, 158, + 160, 158, 98, 98, 96, 97, 126, 158, 158, 158, + 98, 143, 165, 91, 162, 162, 98, 162, 162, 158, + 162, 113, 114, 115, 116, 165, 162, 162, 120, 162, + 98, 123, 124, 162, 165, 165, 162, 26, 162, 162, + 36, 162, 26, 162, 162, 162, 162, 162, 158, 162, + 162, 143, 26, 26, 146, 147, 148, 162, 150, 151, + 152, 153, 154, 155, 156, 157, 163, 26, 26, 163, + 26, 163, 164, 28, 166, 167, 26, 26, 26, 163, + 26, 162, 26, 162, 26, 32, 162, 162, 162, 72, + 26, 26, 26, 160, 163, 160, 162, 84, 162, 133, + 163, 162, 71, 160, 160, 160, 70, 36, 98, 126, + 160, 158, 92, 162, 162, 160, 160, 163, 26, 162, + 26, 33, 162, 28, 137, 162, 71, 162, 22, 162, + 162, 26, 162, 26, 162, 158, 163, 162, 158, 163, + 162, 136, 163, 137, 163, 163, 36, 162, 160, 160, + 72, 137, 137, 162, 162, 137, 137, 162, 137, 137, + 162, 162, 162, 162, 162, 162, 36, 861, 974, 162, + 162, 162, 941, 37, -1, -1, 317, -1, -1, -1, + -1, -1, -1, -1, 298 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -2029,107 +2076,107 @@ static const yytype_uint8 yystos[] = { 0, 1, 12, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 56, 57, 58, 59, 60, 96, 97, 113, 114, 115, - 116, 120, 123, 124, 143, 146, 147, 148, 150, 151, - 152, 153, 154, 155, 156, 157, 163, 164, 166, 167, - 176, 177, 178, 179, 198, 206, 207, 208, 209, 210, - 213, 163, 63, 70, 163, 168, 169, 214, 219, 220, - 221, 89, 94, 95, 98, 99, 103, 104, 98, 100, - 101, 102, 105, 212, 98, 98, 98, 98, 98, 26, - 26, 220, 220, 163, 220, 163, 220, 220, 214, 218, - 220, 163, 218, 220, 163, 163, 164, 199, 164, 199, - 164, 199, 164, 199, 163, 164, 164, 98, 212, 163, - 163, 163, 163, 163, 163, 26, 179, 163, 163, 28, - 64, 26, 26, 83, 212, 0, 78, 161, 98, 103, - 104, 98, 26, 36, 70, 77, 86, 87, 88, 90, - 179, 206, 211, 220, 179, 211, 211, 163, 180, 26, - 221, 221, 221, 65, 66, 67, 68, 70, 71, 72, - 73, 91, 92, 26, 220, 26, 220, 26, 220, 5, - 6, 7, 8, 10, 11, 13, 14, 15, 16, 17, - 18, 26, 28, 29, 34, 36, 63, 70, 75, 76, - 77, 85, 86, 87, 90, 123, 124, 163, 164, 179, - 195, 200, 211, 220, 26, 26, 220, 26, 220, 26, - 149, 179, 28, 149, 143, 166, 36, 36, 36, 36, - 16, 19, 21, 23, 26, 28, 36, 86, 87, 124, - 163, 179, 211, 220, 220, 26, 26, 27, 173, 26, - 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 28, 26, 26, 26, 26, 26, 26, 36, 26, 26, - 57, 28, 158, 160, 70, 71, 83, 84, 202, 205, - 26, 28, 178, 179, 26, 163, 72, 179, 179, 179, - 179, 163, 179, 91, 92, 93, 163, 220, 163, 196, - 135, 136, 158, 160, 162, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 65, 66, 68, 71, 79, 80, - 81, 82, 91, 92, 93, 201, 202, 163, 187, 71, - 187, 26, 26, 26, 26, 26, 26, 26, 164, 164, - 26, 179, 206, 207, 208, 210, 26, 71, 163, 163, - 180, 163, 188, 163, 106, 107, 112, 163, 106, 107, - 112, 163, 163, 163, 26, 26, 36, 179, 163, 202, - 98, 91, 92, 93, 98, 202, 36, 36, 164, 208, - 210, 180, 158, 98, 162, 71, 174, 162, 71, 158, - 158, 84, 165, 165, 165, 165, 162, 84, 202, 205, - 84, 202, 205, 158, 158, 158, 158, 158, 158, 158, - 162, 98, 220, 26, 57, 26, 220, 26, 220, 165, - 165, 78, 161, 196, 26, 36, 158, 158, 159, 159, - 179, 159, 220, 220, 220, 126, 136, 158, 162, 158, - 162, 26, 36, 209, 220, 26, 26, 26, 26, 26, - 36, 26, 26, 26, 26, 26, 26, 163, 220, 220, - 220, 26, 26, 133, 134, 35, 163, 189, 163, 190, - 159, 159, 159, 159, 26, 26, 71, 104, 179, 162, - 84, 202, 205, 179, 26, 26, 158, 133, 134, 132, - 26, 220, 26, 220, 26, 220, 26, 179, 179, 179, - 26, 26, 26, 36, 138, 26, 69, 88, 220, 220, - 220, 22, 36, 159, 159, 26, 179, 162, 158, 220, - 26, 26, 26, 26, 26, 165, 220, 165, 26, 220, - 165, 220, 220, 220, 26, 220, 220, 220, 26, 163, - 98, 220, 162, 158, 162, 165, 165, 98, 178, 160, - 179, 206, 206, 36, 36, 158, 36, 220, 162, 162, - 136, 135, 98, 98, 180, 158, 160, 160, 160, 160, - 158, 158, 158, 158, 158, 26, 189, 190, 189, 158, - 163, 184, 158, 163, 185, 162, 162, 158, 125, 126, - 143, 143, 36, 36, 36, 36, 220, 202, 205, 84, - 202, 205, 26, 162, 26, 214, 216, 217, 220, 165, - 158, 158, 158, 26, 162, 162, 162, 163, 197, 197, - 197, 197, 158, 158, 162, 158, 158, 162, 163, 163, - 163, 163, 191, 191, 163, 185, 36, 36, 84, 205, - 162, 36, 162, 92, 162, 162, 162, 162, 165, 98, - 165, 165, 98, 162, 162, 162, 158, 162, 162, 162, - 131, 26, 163, 98, 26, 98, 98, 98, 26, 161, - 220, 70, 77, 179, 158, 162, 162, 163, 179, 163, - 26, 220, 220, 220, 220, 26, 36, 26, 36, 26, - 91, 26, 126, 127, 128, 182, 26, 125, 126, 26, - 162, 158, 162, 158, 162, 162, 190, 189, 220, 165, - 26, 220, 165, 162, 165, 173, 165, 26, 26, 26, - 98, 136, 220, 220, 163, 181, 36, 36, 141, 142, - 179, 179, 126, 36, 191, 26, 165, 98, 26, 220, - 98, 26, 98, 98, 26, 36, 179, 162, 131, 3, - 4, 9, 20, 160, 164, 199, 26, 26, 158, 162, - 179, 179, 158, 206, 160, 158, 158, 158, 158, 162, - 162, 162, 162, 162, 220, 98, 162, 98, 162, 162, - 98, 143, 126, 165, 187, 165, 165, 187, 91, 170, - 171, 172, 215, 98, 162, 162, 211, 162, 162, 162, - 121, 122, 162, 162, 162, 162, 158, 158, 162, 162, - 165, 211, 98, 26, 36, 26, 162, 162, 163, 163, - 26, 26, 220, 26, 26, 28, 179, 220, 26, 26, - 26, 26, 181, 187, 163, 162, 26, 26, 32, 162, - 162, 187, 187, 187, 220, 179, 190, 180, 162, 162, - 190, 26, 179, 26, 72, 180, 26, 181, 26, 26, - 160, 163, 162, 160, 162, 163, 162, 160, 160, 160, - 160, 133, 201, 202, 71, 70, 162, 158, 162, 36, - 92, 160, 160, 220, 108, 109, 110, 111, 192, 98, - 220, 126, 163, 193, 220, 220, 220, 220, 162, 26, - 26, 33, 179, 28, 71, 220, 220, 220, 193, 162, - 199, 162, 162, 137, 162, 162, 162, 162, 163, 186, - 185, 185, 162, 22, 158, 158, 162, 163, 194, 163, - 203, 203, 163, 204, 121, 122, 182, 183, 163, 26, - 26, 136, 137, 129, 130, 139, 140, 144, 145, 158, - 162, 158, 162, 36, 160, 160, 158, 162, 158, 162, - 158, 162, 158, 162, 158, 162, 158, 162, 158, 162, - 158, 162, 183, 182, 162, 220, 220, 137, 136, 137, - 137, 137, 137, 137, 137, 162, 162, 72, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 36, 193, - 193 + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 96, 97, + 113, 114, 115, 116, 120, 123, 124, 143, 146, 147, + 148, 150, 151, 152, 153, 154, 155, 156, 157, 163, + 164, 166, 167, 176, 177, 178, 179, 198, 206, 207, + 208, 209, 210, 213, 163, 63, 70, 163, 168, 169, + 214, 219, 220, 221, 89, 94, 95, 98, 99, 103, + 104, 98, 100, 101, 102, 105, 212, 98, 98, 98, + 98, 98, 26, 26, 220, 220, 163, 220, 220, 220, + 163, 220, 220, 214, 218, 220, 163, 218, 220, 163, + 163, 164, 199, 164, 199, 164, 199, 164, 199, 163, + 164, 164, 98, 212, 163, 163, 163, 163, 163, 163, + 26, 179, 163, 163, 28, 64, 26, 26, 83, 212, + 0, 78, 161, 98, 103, 104, 98, 26, 36, 70, + 77, 86, 87, 88, 90, 179, 206, 211, 220, 179, + 211, 211, 163, 180, 26, 221, 221, 221, 65, 66, + 67, 68, 70, 71, 72, 73, 91, 92, 26, 220, + 26, 220, 26, 220, 5, 6, 7, 8, 10, 11, + 13, 14, 15, 16, 17, 18, 26, 28, 29, 34, + 36, 63, 70, 75, 76, 77, 85, 86, 87, 90, + 123, 124, 163, 164, 179, 195, 200, 211, 220, 26, + 26, 220, 26, 220, 26, 149, 179, 28, 149, 143, + 166, 36, 36, 36, 36, 16, 19, 21, 23, 26, + 28, 36, 86, 87, 124, 163, 179, 211, 220, 220, + 26, 26, 27, 173, 26, 27, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 28, 26, 26, 26, 26, + 26, 26, 36, 26, 26, 57, 28, 158, 160, 70, + 71, 83, 84, 202, 205, 26, 28, 178, 179, 26, + 163, 72, 179, 179, 179, 179, 163, 179, 91, 92, + 93, 163, 220, 163, 196, 135, 136, 158, 160, 162, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 65, + 66, 68, 71, 79, 80, 81, 82, 91, 92, 93, + 201, 202, 163, 187, 71, 187, 26, 26, 26, 26, + 26, 26, 26, 164, 164, 26, 179, 206, 207, 208, + 210, 26, 71, 163, 163, 180, 163, 188, 163, 106, + 107, 112, 163, 106, 107, 112, 163, 163, 163, 26, + 26, 36, 179, 163, 202, 98, 91, 92, 93, 98, + 202, 36, 36, 164, 208, 210, 180, 158, 98, 162, + 71, 174, 162, 71, 158, 158, 84, 165, 165, 165, + 165, 162, 84, 202, 205, 84, 202, 205, 158, 158, + 158, 158, 158, 158, 158, 162, 98, 220, 26, 57, + 26, 220, 26, 220, 165, 165, 78, 161, 196, 26, + 36, 158, 158, 159, 159, 179, 159, 220, 220, 220, + 126, 136, 158, 162, 158, 162, 26, 36, 209, 220, + 26, 26, 26, 26, 26, 36, 26, 26, 26, 26, + 26, 26, 163, 220, 220, 220, 26, 26, 133, 134, + 35, 163, 189, 163, 190, 159, 159, 159, 159, 26, + 26, 71, 104, 179, 162, 84, 202, 205, 179, 26, + 26, 158, 133, 134, 132, 26, 220, 26, 220, 26, + 220, 26, 179, 179, 179, 26, 26, 26, 36, 138, + 26, 69, 88, 220, 220, 220, 22, 36, 159, 159, + 26, 179, 162, 158, 220, 26, 26, 26, 26, 26, + 165, 220, 165, 26, 220, 165, 220, 220, 220, 26, + 220, 220, 220, 26, 163, 98, 220, 162, 158, 162, + 165, 165, 98, 178, 160, 179, 206, 206, 36, 36, + 158, 36, 220, 162, 162, 136, 135, 98, 98, 180, + 158, 160, 160, 160, 160, 158, 158, 158, 158, 158, + 26, 189, 190, 189, 158, 163, 184, 158, 163, 185, + 162, 162, 158, 125, 126, 143, 143, 36, 36, 36, + 36, 220, 202, 205, 84, 202, 205, 26, 162, 26, + 214, 216, 217, 220, 165, 158, 158, 158, 26, 162, + 162, 162, 163, 197, 197, 197, 197, 158, 158, 162, + 158, 158, 162, 163, 163, 163, 163, 191, 191, 163, + 185, 36, 36, 84, 205, 162, 36, 162, 92, 162, + 162, 162, 162, 165, 98, 165, 165, 98, 162, 162, + 162, 158, 162, 162, 162, 131, 26, 163, 98, 26, + 98, 98, 98, 26, 161, 220, 70, 77, 179, 158, + 162, 162, 163, 179, 163, 26, 220, 220, 220, 220, + 26, 36, 26, 36, 26, 91, 26, 126, 127, 128, + 182, 26, 125, 126, 26, 162, 158, 162, 158, 162, + 162, 190, 189, 220, 165, 26, 220, 165, 162, 165, + 173, 165, 26, 26, 26, 98, 136, 220, 220, 163, + 181, 36, 36, 141, 142, 179, 179, 126, 36, 191, + 26, 165, 98, 26, 220, 98, 26, 98, 98, 26, + 36, 179, 162, 131, 3, 4, 9, 20, 160, 164, + 199, 26, 26, 158, 162, 179, 179, 158, 206, 160, + 158, 158, 158, 158, 162, 162, 162, 162, 162, 220, + 98, 162, 98, 162, 162, 98, 143, 126, 165, 187, + 165, 165, 187, 91, 170, 171, 172, 215, 98, 162, + 162, 211, 162, 162, 162, 121, 122, 162, 162, 162, + 162, 158, 158, 162, 162, 165, 211, 98, 26, 36, + 26, 162, 162, 163, 163, 26, 26, 220, 26, 26, + 28, 179, 220, 26, 26, 26, 26, 181, 187, 163, + 162, 26, 26, 32, 162, 162, 187, 187, 187, 220, + 179, 190, 180, 162, 162, 190, 26, 179, 26, 72, + 180, 26, 181, 26, 26, 160, 163, 162, 160, 162, + 163, 162, 160, 160, 160, 160, 133, 201, 202, 71, + 70, 162, 158, 162, 36, 92, 160, 160, 220, 108, + 109, 110, 111, 192, 98, 220, 126, 163, 193, 220, + 220, 220, 220, 162, 26, 26, 33, 179, 28, 71, + 220, 220, 220, 193, 162, 199, 162, 162, 137, 162, + 162, 162, 162, 163, 186, 185, 185, 162, 22, 158, + 158, 162, 163, 194, 163, 203, 203, 163, 204, 121, + 122, 182, 183, 163, 26, 26, 136, 137, 129, 130, + 139, 140, 144, 145, 158, 162, 158, 162, 36, 160, + 160, 158, 162, 158, 162, 158, 162, 158, 162, 158, + 162, 158, 162, 158, 162, 158, 162, 183, 182, 162, + 220, 220, 137, 136, 137, 137, 137, 137, 137, 137, + 162, 162, 72, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 36, 193, 193 }; #define yyerrok (yyerrstatus = 0) @@ -2203,7 +2250,7 @@ while (YYID (0)) we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ @@ -2944,7 +2991,7 @@ yyreduce: switch (yyn) { case 3: -#line 569 "bfin-parse.y" +#line 610 "bfin-parse.y" { insn = (yyvsp[(1) - (1)].instr); if (insn == (INSTR_T) 0) @@ -2957,32 +3004,32 @@ yyreduce: break; case 5: -#line 583 "bfin-parse.y" +#line 624 "bfin-parse.y" { if (((yyvsp[(1) - (6)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(3) - (6)].instr)) && is_group2 ((yyvsp[(5) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr)); else if (is_group2 ((yyvsp[(3) - (6)].instr)) && is_group1 ((yyvsp[(5) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instrution group"); } else if (((yyvsp[(3) - (6)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(1) - (6)].instr)) && is_group2 ((yyvsp[(5) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr)); else if (is_group2 ((yyvsp[(1) - (6)].instr)) && is_group1 ((yyvsp[(5) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instrution group"); } else if (((yyvsp[(5) - (6)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(1) - (6)].instr)) && is_group2 ((yyvsp[(3) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr)); else if (is_group2 ((yyvsp[(1) - (6)].instr)) && is_group1 ((yyvsp[(3) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instrution group"); } @@ -2992,37 +3039,37 @@ yyreduce: break; case 6: -#line 616 "bfin-parse.y" +#line 657 "bfin-parse.y" { if (((yyvsp[(1) - (4)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(3) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr), 0); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr), 0); else if (is_group2 ((yyvsp[(3) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (4)].instr), 0, (yyvsp[(3) - (4)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (4)].instr), 0, (yyvsp[(3) - (4)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group"); } else if (((yyvsp[(3) - (4)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(1) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr), 0); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr), 0); else if (is_group2 ((yyvsp[(1) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (4)].instr), 0, (yyvsp[(1) - (4)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (4)].instr), 0, (yyvsp[(1) - (4)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group"); } else if (is_group1 ((yyvsp[(1) - (4)].instr)) && is_group2 ((yyvsp[(3) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr)); + (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr)); else if (is_group2 ((yyvsp[(1) - (4)].instr)) && is_group1 ((yyvsp[(3) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr)); + (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be the 16-bit instruction group"); } break; case 7: -#line 643 "bfin-parse.y" +#line 684 "bfin-parse.y" { (yyval.instr) = 0; yyerror (""); @@ -3031,19 +3078,22 @@ yyreduce: break; case 8: -#line 654 "bfin-parse.y" +#line 695 "bfin-parse.y" { (yyval.instr) = DSP32MAC (3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0); } break; case 9: -#line 658 "bfin-parse.y" +#line 699 "bfin-parse.y" { int op0, op1; int w0 = 0, w1 = 0; int h00, h10, h01, h11; + if (check_macfunc_option (&(yyvsp[(1) - (2)].macfunc), &(yyvsp[(2) - (2)].mod)) < 0) + return yyerror ("bad option"); + if ((yyvsp[(1) - (2)].macfunc).n == 0) { if ((yyvsp[(2) - (2)].mod).MM) @@ -3072,7 +3122,7 @@ yyreduce: break; case 10: -#line 693 "bfin-parse.y" +#line 737 "bfin-parse.y" { Register *dst; @@ -3092,7 +3142,7 @@ yyreduce: break; case 11: -#line 713 "bfin-parse.y" +#line 757 "bfin-parse.y" { notethat ("dsp32alu: DISALGNEXCPT\n"); (yyval.instr) = DSP32ALU (18, 0, 0, 0, 0, 0, 0, 0, 3); @@ -3100,7 +3150,7 @@ yyreduce: break; case 12: -#line 718 "bfin-parse.y" +#line 762 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && !IS_A1 ((yyvsp[(4) - (6)].reg)) && IS_A1 ((yyvsp[(5) - (6)].reg))) { @@ -3113,7 +3163,7 @@ yyreduce: break; case 13: -#line 728 "bfin-parse.y" +#line 772 "bfin-parse.y" { if (!IS_A1 ((yyvsp[(4) - (6)].reg)) && IS_A1 ((yyvsp[(5) - (6)].reg))) { @@ -3126,7 +3176,7 @@ yyreduce: break; case 14: -#line 738 "bfin-parse.y" +#line 782 "bfin-parse.y" { notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n"); (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 0); @@ -3134,7 +3184,7 @@ yyreduce: break; case 15: -#line 743 "bfin-parse.y" +#line 787 "bfin-parse.y" { notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n"); (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 2); @@ -3142,7 +3192,7 @@ yyreduce: break; case 16: -#line 749 "bfin-parse.y" +#line 793 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG ((yyvsp[(4) - (17)].reg))) return yyerror ("Dregs expected"); @@ -3159,9 +3209,9 @@ yyreduce: break; case 17: -#line 765 "bfin-parse.y" +#line 809 "bfin-parse.y" { - if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG((yyvsp[(4) - (17)].reg))) + if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG ((yyvsp[(4) - (17)].reg))) return yyerror ("Dregs expected"); else if (!valid_dreg_pair (&(yyvsp[(9) - (17)].reg), (yyvsp[(11) - (17)].expr))) return yyerror ("Bad dreg pair"); @@ -3176,7 +3226,7 @@ yyreduce: break; case 18: -#line 780 "bfin-parse.y" +#line 824 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(2) - (11)].reg)) || !IS_DREG ((yyvsp[(4) - (11)].reg))) return yyerror ("Dregs expected"); @@ -3191,7 +3241,7 @@ yyreduce: break; case 19: -#line 792 "bfin-parse.y" +#line 836 "bfin-parse.y" { if (IS_DREG ((yyvsp[(2) - (11)].reg)) && IS_DREG ((yyvsp[(4) - (11)].reg)) && IS_DREG ((yyvsp[(8) - (11)].reg))) { @@ -3204,7 +3254,7 @@ yyreduce: break; case 20: -#line 803 "bfin-parse.y" +#line 847 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (11)].reg)) && IS_DREG ((yyvsp[(7) - (11)].reg))) { @@ -3217,7 +3267,7 @@ yyreduce: break; case 21: -#line 815 "bfin-parse.y" +#line 859 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (12)].reg)) && IS_DREG ((yyvsp[(7) - (12)].reg)) && !REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(5) - (12)].reg)) && IS_A1 ((yyvsp[(9) - (12)].reg)) && !IS_A1 ((yyvsp[(11) - (12)].reg))) @@ -3238,7 +3288,7 @@ yyreduce: break; case 22: -#line 834 "bfin-parse.y" +#line 878 "bfin-parse.y" { if ((yyvsp[(4) - (12)].r0).r0 == (yyvsp[(10) - (12)].r0).r0) return yyerror ("Operators must differ"); @@ -3256,7 +3306,7 @@ yyreduce: break; case 23: -#line 852 "bfin-parse.y" +#line 896 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(9) - (12)].reg)) || !REG_SAME ((yyvsp[(5) - (12)].reg), (yyvsp[(11) - (12)].reg))) return yyerror ("Differing source registers"); @@ -3281,7 +3331,7 @@ yyreduce: break; case 24: -#line 875 "bfin-parse.y" +#line 919 "bfin-parse.y" { int op; @@ -3306,7 +3356,7 @@ yyreduce: break; case 25: -#line 897 "bfin-parse.y" +#line 941 "bfin-parse.y" { notethat ("dsp32alu: Ax = ABS Ax\n"); (yyval.instr) = DSP32ALU (16, IS_A1 ((yyvsp[(1) - (3)].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[(3) - (3)].reg))); @@ -3314,7 +3364,7 @@ yyreduce: break; case 26: -#line 902 "bfin-parse.y" +#line 946 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(3) - (3)].reg))) { @@ -3327,7 +3377,7 @@ yyreduce: break; case 27: -#line 912 "bfin-parse.y" +#line 956 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(3) - (3)].reg))) { @@ -3340,7 +3390,7 @@ yyreduce: break; case 28: -#line 923 "bfin-parse.y" +#line 967 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) { @@ -3353,7 +3403,7 @@ yyreduce: break; case 29: -#line 934 "bfin-parse.y" +#line 978 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (13)].reg))) return yyerror ("Dregs expected"); @@ -3370,7 +3420,7 @@ yyreduce: break; case 30: -#line 948 "bfin-parse.y" +#line 992 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (12)].reg))) return yyerror ("Dregs expected"); @@ -3387,7 +3437,7 @@ yyreduce: break; case 31: -#line 964 "bfin-parse.y" +#line 1008 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (13)].reg))) return yyerror ("Dregs expected"); @@ -3404,7 +3454,7 @@ yyreduce: break; case 32: -#line 980 "bfin-parse.y" +#line 1024 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (13)].reg))) return yyerror ("Dregs expected"); @@ -3421,7 +3471,7 @@ yyreduce: break; case 33: -#line 996 "bfin-parse.y" +#line 1040 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (13)].reg))) return yyerror ("Dregs expected"); @@ -3438,7 +3488,7 @@ yyreduce: break; case 34: -#line 1011 "bfin-parse.y" +#line 1055 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) { @@ -3451,7 +3501,7 @@ yyreduce: break; case 35: -#line 1023 "bfin-parse.y" +#line 1067 "bfin-parse.y" { if (IS_HCOMPL ((yyvsp[(1) - (17)].reg), (yyvsp[(3) - (17)].reg)) && IS_HCOMPL ((yyvsp[(7) - (17)].reg), (yyvsp[(14) - (17)].reg)) && IS_HCOMPL ((yyvsp[(10) - (17)].reg), (yyvsp[(17) - (17)].reg))) { @@ -3467,7 +3517,7 @@ yyreduce: break; case 36: -#line 1036 "bfin-parse.y" +#line 1080 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) { @@ -3496,7 +3546,7 @@ yyreduce: break; case 37: -#line 1062 "bfin-parse.y" +#line 1106 "bfin-parse.y" { int op; @@ -3516,7 +3566,7 @@ yyreduce: break; case 38: -#line 1080 "bfin-parse.y" +#line 1124 "bfin-parse.y" { notethat ("dsp32alu: Ax = - Ax\n"); (yyval.instr) = DSP32ALU (14, IS_A1 ((yyvsp[(1) - (3)].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[(3) - (3)].reg))); @@ -3524,7 +3574,7 @@ yyreduce: break; case 39: -#line 1085 "bfin-parse.y" +#line 1129 "bfin-parse.y" { notethat ("dsp32alu: dregs_lo = dregs_lo +- dregs_lo (amod1)\n"); (yyval.instr) = DSP32ALU (2 | (yyvsp[(4) - (6)].r0).r0, IS_H ((yyvsp[(1) - (6)].reg)), 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), @@ -3533,7 +3583,7 @@ yyreduce: break; case 40: -#line 1091 "bfin-parse.y" +#line 1135 "bfin-parse.y" { if (EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 0 && !REG_SAME ((yyvsp[(1) - (3)].reg), (yyvsp[(2) - (3)].reg))) { @@ -3546,7 +3596,7 @@ yyreduce: break; case 41: -#line 1103 "bfin-parse.y" +#line 1147 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(2) - (5)].reg))) { @@ -3559,7 +3609,7 @@ yyreduce: break; case 42: -#line 1114 "bfin-parse.y" +#line 1158 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg))) { @@ -3572,7 +3622,7 @@ yyreduce: break; case 43: -#line 1125 "bfin-parse.y" +#line 1169 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg))) { @@ -3585,7 +3635,7 @@ yyreduce: break; case 44: -#line 1136 "bfin-parse.y" +#line 1180 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg))) { @@ -3598,7 +3648,7 @@ yyreduce: break; case 45: -#line 1147 "bfin-parse.y" +#line 1191 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(1) - (2)].reg), (yyvsp[(2) - (2)].reg))) { @@ -3611,7 +3661,7 @@ yyreduce: break; case 46: -#line 1158 "bfin-parse.y" +#line 1202 "bfin-parse.y" { if (IS_DREG ((yyvsp[(2) - (2)].reg))) { @@ -3624,7 +3674,7 @@ yyreduce: break; case 47: -#line 1169 "bfin-parse.y" +#line 1213 "bfin-parse.y" { if (!IS_H ((yyvsp[(3) - (4)].reg))) { @@ -3652,7 +3702,7 @@ yyreduce: break; case 48: -#line 1195 "bfin-parse.y" +#line 1239 "bfin-parse.y" { notethat ("LDIMMhalf: pregs_half = imm16\n"); @@ -3668,7 +3718,7 @@ yyreduce: break; case 49: -#line 1209 "bfin-parse.y" +#line 1253 "bfin-parse.y" { notethat ("dsp32alu: An = 0\n"); @@ -3680,7 +3730,7 @@ yyreduce: break; case 50: -#line 1219 "bfin-parse.y" +#line 1263 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (4)].reg)) && !IS_PREG ((yyvsp[(1) - (4)].reg)) && !IS_IREG ((yyvsp[(1) - (4)].reg)) && !IS_MREG ((yyvsp[(1) - (4)].reg)) && !IS_BREG ((yyvsp[(1) - (4)].reg)) && !IS_LREG ((yyvsp[(1) - (4)].reg))) @@ -3727,7 +3777,7 @@ yyreduce: break; case 51: -#line 1264 "bfin-parse.y" +#line 1308 "bfin-parse.y" { if (IS_H ((yyvsp[(1) - (3)].reg))) return yyerror ("Low reg expected"); @@ -3748,7 +3798,7 @@ yyreduce: break; case 52: -#line 1283 "bfin-parse.y" +#line 1327 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) { @@ -3761,7 +3811,7 @@ yyreduce: break; case 53: -#line 1294 "bfin-parse.y" +#line 1338 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(3) - (4)].reg))) { @@ -3774,7 +3824,7 @@ yyreduce: break; case 54: -#line 1305 "bfin-parse.y" +#line 1349 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(3) - (7)].reg)) && REG_SAME ((yyvsp[(5) - (7)].reg), (yyvsp[(7) - (7)].reg)) && !REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(5) - (7)].reg))) { @@ -3787,7 +3837,7 @@ yyreduce: break; case 55: -#line 1316 "bfin-parse.y" +#line 1360 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(3) - (7)].reg)) && REG_SAME ((yyvsp[(5) - (7)].reg), (yyvsp[(7) - (7)].reg)) && !REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(5) - (7)].reg))) { @@ -3800,7 +3850,7 @@ yyreduce: break; case 56: -#line 1327 "bfin-parse.y" +#line 1371 "bfin-parse.y" { if (!IS_A1 ((yyvsp[(1) - (3)].reg)) && IS_A1 ((yyvsp[(2) - (3)].reg))) { @@ -3813,7 +3863,7 @@ yyreduce: break; case 57: -#line 1338 "bfin-parse.y" +#line 1382 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (3)].reg)) && EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 4) { @@ -3831,7 +3881,7 @@ yyreduce: break; case 58: -#line 1354 "bfin-parse.y" +#line 1398 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (6)].reg)) && IS_MREG ((yyvsp[(3) - (6)].reg))) { @@ -3850,7 +3900,7 @@ yyreduce: break; case 59: -#line 1371 "bfin-parse.y" +#line 1415 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (3)].reg)) && IS_MREG ((yyvsp[(3) - (3)].reg))) { @@ -3868,7 +3918,7 @@ yyreduce: break; case 60: -#line 1387 "bfin-parse.y" +#line 1431 "bfin-parse.y" { if (!IS_A1 ((yyvsp[(1) - (4)].reg)) && IS_A1 ((yyvsp[(3) - (4)].reg))) { @@ -3881,7 +3931,7 @@ yyreduce: break; case 61: -#line 1398 "bfin-parse.y" +#line 1442 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (3)].reg)) && IS_MREG ((yyvsp[(3) - (3)].reg))) { @@ -3894,7 +3944,7 @@ yyreduce: break; case 62: -#line 1409 "bfin-parse.y" +#line 1453 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (3)].reg))) { @@ -3921,13 +3971,15 @@ yyreduce: notethat ("COMPI2opD: dregs += imm7\n"); (yyval.instr) = COMPI2OPD (&(yyvsp[(1) - (3)].reg), imm7 ((yyvsp[(3) - (3)].expr)), 1); } + else if ((IS_DREG ((yyvsp[(1) - (3)].reg)) || IS_PREG ((yyvsp[(1) - (3)].reg))) && IS_CONST ((yyvsp[(3) - (3)].expr))) + return yyerror ("Immediate value out of range"); else return yyerror ("Register mismatch"); } break; case 63: -#line 1440 "bfin-parse.y" +#line 1486 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -3940,7 +3992,7 @@ yyreduce: break; case 64: -#line 1451 "bfin-parse.y" +#line 1497 "bfin-parse.y" { if (!valid_dreg_pair (&(yyvsp[(3) - (11)].reg), (yyvsp[(5) - (11)].expr))) return yyerror ("Bad dreg pair"); @@ -3955,7 +4007,7 @@ yyreduce: break; case 65: -#line 1464 "bfin-parse.y" +#line 1510 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (11)].reg), (yyvsp[(2) - (11)].reg)) && REG_SAME ((yyvsp[(7) - (11)].reg), (yyvsp[(8) - (11)].reg)) && !REG_SAME ((yyvsp[(1) - (11)].reg), (yyvsp[(7) - (11)].reg))) { @@ -3968,7 +4020,7 @@ yyreduce: break; case 66: -#line 1475 "bfin-parse.y" +#line 1521 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(4) - (9)].reg)) && IS_DREG ((yyvsp[(6) - (9)].reg)) && REG_SAME ((yyvsp[(1) - (9)].reg), (yyvsp[(4) - (9)].reg))) @@ -4008,7 +4060,7 @@ yyreduce: break; case 67: -#line 1514 "bfin-parse.y" +#line 1560 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) { @@ -4021,7 +4073,7 @@ yyreduce: break; case 68: -#line 1524 "bfin-parse.y" +#line 1570 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) { @@ -4034,7 +4086,7 @@ yyreduce: break; case 69: -#line 1534 "bfin-parse.y" +#line 1580 "bfin-parse.y" { if (IS_PREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(3) - (9)].reg)) && IS_PREG ((yyvsp[(6) - (9)].reg))) { @@ -4057,47 +4109,51 @@ yyreduce: break; case 70: -#line 1554 "bfin-parse.y" +#line 1600 "bfin-parse.y" { - if (!REG_SAME ((yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg))) + if ((yyvsp[(3) - (5)].reg).regno == REG_A0 && (yyvsp[(5) - (5)].reg).regno == REG_A1) { notethat ("CCflag: CC = A0 == A1\n"); (yyval.instr) = CCFLAG (0, 0, 5, 0, 0); } else - return yyerror ("CC register expected"); + return yyerror ("AREGs are in bad order or same"); } break; case 71: -#line 1564 "bfin-parse.y" +#line 1610 "bfin-parse.y" { - if (!REG_SAME ((yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg))) + if ((yyvsp[(3) - (5)].reg).regno == REG_A0 && (yyvsp[(5) - (5)].reg).regno == REG_A1) { notethat ("CCflag: CC = A0 < A1\n"); (yyval.instr) = CCFLAG (0, 0, 6, 0, 0); } else - return yyerror ("Register mismatch"); + return yyerror ("AREGs are in bad order or same"); } break; case 72: -#line 1574 "bfin-parse.y" +#line 1620 "bfin-parse.y" { - if (REG_CLASS((yyvsp[(3) - (6)].reg)) == REG_CLASS((yyvsp[(5) - (6)].reg))) + if ((IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) + || (IS_PREG ((yyvsp[(3) - (6)].reg)) && IS_PREG ((yyvsp[(5) - (6)].reg)))) { notethat ("CCflag: CC = dpregs < dpregs\n"); (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg).regno & CODE_MASK, (yyvsp[(6) - (6)].r0).r0, 0, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0); } else - return yyerror ("Compare only of same register class"); + return yyerror ("Bad register in comparison"); } break; case 73: -#line 1584 "bfin-parse.y" +#line 1631 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(3) - (6)].reg)) && !IS_PREG ((yyvsp[(3) - (6)].reg))) + return yyerror ("Bad register in comparison"); + if (((yyvsp[(6) - (6)].r0).r0 == 1 && IS_IMM ((yyvsp[(5) - (6)].expr), 3)) || ((yyvsp[(6) - (6)].r0).r0 == 3 && IS_UIMM ((yyvsp[(5) - (6)].expr), 3))) { @@ -4110,19 +4166,25 @@ yyreduce: break; case 74: -#line 1595 "bfin-parse.y" +#line 1645 "bfin-parse.y" { - if (REG_CLASS((yyvsp[(3) - (5)].reg)) == REG_CLASS((yyvsp[(5) - (5)].reg))) + if ((IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) + || (IS_PREG ((yyvsp[(3) - (5)].reg)) && IS_PREG ((yyvsp[(5) - (5)].reg)))) { notethat ("CCflag: CC = dpregs == dpregs\n"); (yyval.instr) = CCFLAG (&(yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg).regno & CODE_MASK, 0, 0, IS_PREG ((yyvsp[(3) - (5)].reg)) ? 1 : 0); - } + } + else + return yyerror ("Bad register in comparison"); } break; case 75: -#line 1603 "bfin-parse.y" +#line 1656 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(3) - (5)].reg)) && !IS_PREG ((yyvsp[(3) - (5)].reg))) + return yyerror ("Bad register in comparison"); + if (IS_IMM ((yyvsp[(5) - (5)].expr), 3)) { notethat ("CCflag: CC = dpregs == imm3\n"); @@ -4134,52 +4196,44 @@ yyreduce: break; case 76: -#line 1613 "bfin-parse.y" +#line 1669 "bfin-parse.y" { - if (!REG_SAME ((yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg))) + if ((yyvsp[(3) - (5)].reg).regno == REG_A0 && (yyvsp[(5) - (5)].reg).regno == REG_A1) { notethat ("CCflag: CC = A0 <= A1\n"); (yyval.instr) = CCFLAG (0, 0, 7, 0, 0); } else - return yyerror ("CC register expected"); + return yyerror ("AREGs are in bad order or same"); } break; case 77: -#line 1623 "bfin-parse.y" +#line 1679 "bfin-parse.y" { - if (REG_CLASS((yyvsp[(3) - (6)].reg)) == REG_CLASS((yyvsp[(5) - (6)].reg))) + if ((IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) + || (IS_PREG ((yyvsp[(3) - (6)].reg)) && IS_PREG ((yyvsp[(5) - (6)].reg)))) { - notethat ("CCflag: CC = pregs <= pregs (..)\n"); + notethat ("CCflag: CC = dpregs <= dpregs (..)\n"); (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg).regno & CODE_MASK, 1 + (yyvsp[(6) - (6)].r0).r0, 0, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0); } else - return yyerror ("Compare only of same register class"); + return yyerror ("Bad register in comparison"); } break; case 78: -#line 1634 "bfin-parse.y" +#line 1691 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(3) - (6)].reg)) && !IS_PREG ((yyvsp[(3) - (6)].reg))) + return yyerror ("Bad register in comparison"); + if (((yyvsp[(6) - (6)].r0).r0 == 1 && IS_IMM ((yyvsp[(5) - (6)].expr), 3)) || ((yyvsp[(6) - (6)].r0).r0 == 3 && IS_UIMM ((yyvsp[(5) - (6)].expr), 3))) { - if (IS_DREG ((yyvsp[(3) - (6)].reg))) - { - notethat ("CCflag: CC = dregs <= (u)imm3\n"); - /* x y opc I G */ - (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), 1 + (yyvsp[(6) - (6)].r0).r0, 1, 0); - } - else if (IS_PREG ((yyvsp[(3) - (6)].reg))) - { - notethat ("CCflag: CC = pregs <= (u)imm3\n"); - /* x y opc I G */ - (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), 1 + (yyvsp[(6) - (6)].r0).r0, 1, 1); - } - else - return yyerror ("Dreg or Preg expected"); + notethat ("CCflag: CC = dpregs <= (u)imm3\n"); + (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), 1 + (yyvsp[(6) - (6)].r0).r0, 1, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0); } else return yyerror ("Bad constant value"); @@ -4187,7 +4241,7 @@ yyreduce: break; case 79: -#line 1658 "bfin-parse.y" +#line 1706 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) { @@ -4200,7 +4254,7 @@ yyreduce: break; case 80: -#line 1669 "bfin-parse.y" +#line 1717 "bfin-parse.y" { notethat ("CC2stat operation\n"); (yyval.instr) = bfin_gen_cc2stat ((yyvsp[(1) - (1)].modcodes).r0, (yyvsp[(1) - (1)].modcodes).x0, (yyvsp[(1) - (1)].modcodes).s0); @@ -4208,11 +4262,20 @@ yyreduce: break; case 81: -#line 1675 "bfin-parse.y" - { - if (IS_ALLREG ((yyvsp[(1) - (3)].reg)) && IS_ALLREG ((yyvsp[(3) - (3)].reg))) +#line 1723 "bfin-parse.y" + { + if ((IS_GENREG ((yyvsp[(1) - (3)].reg)) && IS_GENREG ((yyvsp[(3) - (3)].reg))) + || (IS_GENREG ((yyvsp[(1) - (3)].reg)) && IS_DAGREG ((yyvsp[(3) - (3)].reg))) + || (IS_DAGREG ((yyvsp[(1) - (3)].reg)) && IS_GENREG ((yyvsp[(3) - (3)].reg))) + || (IS_DAGREG ((yyvsp[(1) - (3)].reg)) && IS_DAGREG ((yyvsp[(3) - (3)].reg))) + || (IS_GENREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_USP) + || ((yyvsp[(1) - (3)].reg).regno == REG_USP && IS_GENREG ((yyvsp[(3) - (3)].reg))) + || (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_SYSREG ((yyvsp[(3) - (3)].reg))) + || (IS_PREG ((yyvsp[(1) - (3)].reg)) && IS_SYSREG ((yyvsp[(3) - (3)].reg))) + || (IS_SYSREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) + || (IS_SYSREG ((yyvsp[(1) - (3)].reg)) && IS_PREG ((yyvsp[(3) - (3)].reg))) + || (IS_SYSREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_USP)) { - notethat ("REGMV: allregs = allregs\n"); (yyval.instr) = bfin_gen_regmv (&(yyvsp[(3) - (3)].reg), &(yyvsp[(1) - (3)].reg)); } else @@ -4221,7 +4284,7 @@ yyreduce: break; case 82: -#line 1686 "bfin-parse.y" +#line 1743 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -4234,7 +4297,7 @@ yyreduce: break; case 83: -#line 1697 "bfin-parse.y" +#line 1754 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg))) { @@ -4247,7 +4310,7 @@ yyreduce: break; case 84: -#line 1708 "bfin-parse.y" +#line 1765 "bfin-parse.y" { notethat ("CC2dreg: CC =! CC\n"); (yyval.instr) = bfin_gen_cc2dreg (3, 0); @@ -4255,13 +4318,18 @@ yyreduce: break; case 85: -#line 1716 "bfin-parse.y" +#line 1773 "bfin-parse.y" { notethat ("dsp32mult: dregs_half = multiply_halfregs (opt_mode)\n"); if (!IS_H ((yyvsp[(1) - (4)].reg)) && (yyvsp[(4) - (4)].mod).MM) return yyerror ("(M) not allowed with MAC0"); + if ((yyvsp[(4) - (4)].mod).mod != 0 && (yyvsp[(4) - (4)].mod).mod != M_FU && (yyvsp[(4) - (4)].mod).mod != M_IS + && (yyvsp[(4) - (4)].mod).mod != M_IU && (yyvsp[(4) - (4)].mod).mod != M_T && (yyvsp[(4) - (4)].mod).mod != M_TFU + && (yyvsp[(4) - (4)].mod).mod != M_S2RND && (yyvsp[(4) - (4)].mod).mod != M_ISS2 && (yyvsp[(4) - (4)].mod).mod != M_IH) + return yyerror ("bad option."); + if (IS_H ((yyvsp[(1) - (4)].reg))) { (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (4)].mod).MM, (yyvsp[(4) - (4)].mod).mod, 1, 0, @@ -4278,7 +4346,7 @@ yyreduce: break; case 86: -#line 1737 "bfin-parse.y" +#line 1799 "bfin-parse.y" { /* Odd registers can use (M). */ if (!IS_DREG ((yyvsp[(1) - (4)].reg))) @@ -4287,6 +4355,10 @@ yyreduce: if (IS_EVEN ((yyvsp[(1) - (4)].reg)) && (yyvsp[(4) - (4)].mod).MM) return yyerror ("(M) not allowed with MAC0"); + if ((yyvsp[(4) - (4)].mod).mod != 0 && (yyvsp[(4) - (4)].mod).mod != M_FU && (yyvsp[(4) - (4)].mod).mod != M_IS + && (yyvsp[(4) - (4)].mod).mod != M_S2RND && (yyvsp[(4) - (4)].mod).mod != M_ISS2) + return yyerror ("bad option"); + if (!IS_EVEN ((yyvsp[(1) - (4)].reg))) { notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n"); @@ -4306,7 +4378,7 @@ yyreduce: break; case 87: -#line 1764 "bfin-parse.y" +#line 1830 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (9)].reg)) || !IS_DREG ((yyvsp[(6) - (9)].reg))) return yyerror ("Dregs expected"); @@ -4336,7 +4408,7 @@ yyreduce: break; case 88: -#line 1792 "bfin-parse.y" +#line 1858 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (9)].reg)) || !IS_DREG ((yyvsp[(6) - (9)].reg))) return yyerror ("Dregs expected"); @@ -4367,7 +4439,7 @@ yyreduce: break; case 89: -#line 1823 "bfin-parse.y" +#line 1889 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg))) return yyerror ("Aregs must be same"); @@ -4383,7 +4455,7 @@ yyreduce: break; case 90: -#line 1837 "bfin-parse.y" +#line 1903 "bfin-parse.y" { if (IS_DREG ((yyvsp[(6) - (7)].reg)) && !IS_H ((yyvsp[(6) - (7)].reg))) { @@ -4396,7 +4468,7 @@ yyreduce: break; case 91: -#line 1848 "bfin-parse.y" +#line 1914 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg))) return yyerror ("Aregs must be same"); @@ -4412,7 +4484,7 @@ yyreduce: break; case 92: -#line 1862 "bfin-parse.y" +#line 1928 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4449,33 +4521,28 @@ yyreduce: break; case 93: -#line 1896 "bfin-parse.y" - { - if (IS_UIMM ((yyvsp[(5) - (5)].expr), 4)) - { - notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); - (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (5)].reg), imm5 ((yyvsp[(5) - (5)].expr)), &(yyvsp[(3) - (5)].reg), 2, HL2 ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg))); - } - else - return yyerror ("Bad shift value"); - } - break; - - case 94: -#line 1906 "bfin-parse.y" +#line 1962 "bfin-parse.y" { if (IS_UIMM ((yyvsp[(5) - (6)].expr), 4)) { - notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); - (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (6)].reg), imm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg))); + if ((yyvsp[(6) - (6)].modcodes).s0) + { + notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4 (S)\n"); + (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (6)].reg), imm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg))); + } + else + { + notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); + (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (6)].reg), imm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), 2, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg))); + } } else return yyerror ("Bad shift value"); } break; - case 95: -#line 1916 "bfin-parse.y" + case 94: +#line 1980 "bfin-parse.y" { int op; @@ -4500,8 +4567,8 @@ yyreduce: } break; - case 96: -#line 1941 "bfin-parse.y" + case 95: +#line 2005 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (9)].reg)) && IS_DREG_L ((yyvsp[(5) - (9)].reg)) && IS_DREG_L ((yyvsp[(7) - (9)].reg))) { @@ -4513,8 +4580,8 @@ yyreduce: } break; - case 97: -#line 1953 "bfin-parse.y" + case 96: +#line 2017 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (8)].reg)) && IS_DREG_L ((yyvsp[(5) - (8)].reg)) && IS_DREG_L ((yyvsp[(7) - (8)].reg))) { @@ -4531,8 +4598,8 @@ yyreduce: } break; - case 98: -#line 1971 "bfin-parse.y" + case 97: +#line 2035 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) { @@ -4544,8 +4611,8 @@ yyreduce: } break; - case 99: -#line 1982 "bfin-parse.y" + case 98: +#line 2046 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (11)].reg)) && IS_DREG ((yyvsp[(5) - (11)].reg)) && IS_DREG ((yyvsp[(7) - (11)].reg))) { @@ -4557,8 +4624,8 @@ yyreduce: } break; - case 100: -#line 1993 "bfin-parse.y" + case 99: +#line 2057 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG_L ((yyvsp[(7) - (9)].reg))) { @@ -4570,8 +4637,8 @@ yyreduce: } break; - case 101: -#line 2004 "bfin-parse.y" + case 100: +#line 2068 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg))) return yyerror ("Aregs must be same"); @@ -4586,8 +4653,8 @@ yyreduce: } break; - case 102: -#line 2017 "bfin-parse.y" + case 101: +#line 2081 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)) && IS_DREG_L ((yyvsp[(5) - (5)].reg))) { @@ -4599,8 +4666,8 @@ yyreduce: } break; - case 103: -#line 2028 "bfin-parse.y" + case 102: +#line 2092 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg))) { @@ -4612,8 +4679,8 @@ yyreduce: } break; - case 104: -#line 2039 "bfin-parse.y" + case 103: +#line 2103 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(4) - (7)].reg)) && IS_DREG_L ((yyvsp[(6) - (7)].reg))) { @@ -4625,8 +4692,8 @@ yyreduce: } break; - case 105: -#line 2050 "bfin-parse.y" + case 104: +#line 2114 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg))) { @@ -4638,8 +4705,8 @@ yyreduce: } break; - case 106: -#line 2061 "bfin-parse.y" + case 105: +#line 2125 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg)) && IS_IMM ((yyvsp[(4) - (4)].expr), 6) >= 0) { @@ -4651,8 +4718,8 @@ yyreduce: } break; - case 107: -#line 2072 "bfin-parse.y" + case 106: +#line 2136 "bfin-parse.y" { if ((yyvsp[(6) - (6)].r0).r0 == 1) { @@ -4687,8 +4754,8 @@ yyreduce: } break; - case 108: -#line 2105 "bfin-parse.y" + case 107: +#line 2169 "bfin-parse.y" { if (IS_UIMM ((yyvsp[(5) - (5)].expr), 5)) { @@ -4700,8 +4767,8 @@ yyreduce: } break; - case 109: -#line 2115 "bfin-parse.y" + case 108: +#line 2179 "bfin-parse.y" { if (IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4714,8 +4781,8 @@ yyreduce: } break; - case 110: -#line 2128 "bfin-parse.y" + case 109: +#line 2192 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4736,8 +4803,8 @@ yyreduce: } break; - case 111: -#line 2148 "bfin-parse.y" + case 110: +#line 2212 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg))) { @@ -4749,8 +4816,8 @@ yyreduce: } break; - case 112: -#line 2159 "bfin-parse.y" + case 111: +#line 2223 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) { @@ -4762,8 +4829,8 @@ yyreduce: } break; - case 113: -#line 2170 "bfin-parse.y" + case 112: +#line 2234 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (10)].reg)) && (yyvsp[(7) - (10)].reg).regno == REG_A0 @@ -4777,8 +4844,8 @@ yyreduce: } break; - case 114: -#line 2183 "bfin-parse.y" + case 113: +#line 2247 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (10)].reg)) && (yyvsp[(7) - (10)].reg).regno == REG_A0 @@ -4792,8 +4859,8 @@ yyreduce: } break; - case 115: -#line 2196 "bfin-parse.y" + case 114: +#line 2260 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (12)].reg)) && !IS_H ((yyvsp[(1) - (12)].reg)) && !REG_SAME ((yyvsp[(7) - (12)].reg), (yyvsp[(9) - (12)].reg))) { @@ -4805,8 +4872,8 @@ yyreduce: } break; - case 116: -#line 2207 "bfin-parse.y" + case 115: +#line 2271 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)) && IS_DREG_L ((yyvsp[(5) - (5)].reg))) { @@ -4818,8 +4885,8 @@ yyreduce: } break; - case 117: -#line 2218 "bfin-parse.y" + case 116: +#line 2282 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg))) { @@ -4831,8 +4898,8 @@ yyreduce: } break; - case 118: -#line 2229 "bfin-parse.y" + case 117: +#line 2293 "bfin-parse.y" { if (IS_IMM ((yyvsp[(5) - (5)].expr), 6)) { @@ -4844,8 +4911,8 @@ yyreduce: } break; - case 119: -#line 2240 "bfin-parse.y" + case 118: +#line 2304 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_IMM ((yyvsp[(6) - (6)].expr), 6)) { @@ -4856,8 +4923,8 @@ yyreduce: } break; - case 120: -#line 2250 "bfin-parse.y" + case 119: +#line 2314 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (4)].reg))) { @@ -4869,8 +4936,8 @@ yyreduce: } break; - case 121: -#line 2261 "bfin-parse.y" + case 120: +#line 2325 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg))) { @@ -4882,8 +4949,8 @@ yyreduce: } break; - case 122: -#line 2272 "bfin-parse.y" + case 121: +#line 2336 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (4)].reg))) { @@ -4895,8 +4962,8 @@ yyreduce: } break; - case 123: -#line 2284 "bfin-parse.y" + case 122: +#line 2348 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(5) - (7)].reg))) { @@ -4908,8 +4975,8 @@ yyreduce: } break; - case 124: -#line 2295 "bfin-parse.y" + case 123: +#line 2359 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG ((yyvsp[(7) - (9)].reg))) { @@ -4921,8 +4988,8 @@ yyreduce: } break; - case 125: -#line 2306 "bfin-parse.y" + case 124: +#line 2370 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && !IS_A1 ((yyvsp[(7) - (9)].reg))) { @@ -4934,8 +5001,8 @@ yyreduce: } break; - case 126: -#line 2317 "bfin-parse.y" + case 125: +#line 2381 "bfin-parse.y" { if (!IS_A1 ((yyvsp[(1) - (9)].reg)) && !IS_A1 ((yyvsp[(4) - (9)].reg)) && IS_A1 ((yyvsp[(6) - (9)].reg))) { @@ -4947,8 +5014,8 @@ yyreduce: } break; - case 127: -#line 2330 "bfin-parse.y" + case 126: +#line 2394 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4960,8 +5027,8 @@ yyreduce: } break; - case 128: -#line 2342 "bfin-parse.y" + case 127: +#line 2406 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4973,8 +5040,8 @@ yyreduce: } break; - case 129: -#line 2354 "bfin-parse.y" + case 128: +#line 2418 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4986,8 +5053,8 @@ yyreduce: } break; - case 130: -#line 2365 "bfin-parse.y" + case 129: +#line 2429 "bfin-parse.y" { if (IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_UIMM ((yyvsp[(7) - (8)].expr), 5)) { @@ -4999,8 +5066,8 @@ yyreduce: } break; - case 131: -#line 2376 "bfin-parse.y" + case 130: +#line 2440 "bfin-parse.y" { if (IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_UIMM ((yyvsp[(7) - (8)].expr), 5)) { @@ -5012,8 +5079,8 @@ yyreduce: } break; - case 132: -#line 2387 "bfin-parse.y" + case 131: +#line 2451 "bfin-parse.y" { if ((IS_DREG ((yyvsp[(4) - (6)].reg)) || IS_PREG ((yyvsp[(4) - (6)].reg))) && (IS_DREG ((yyvsp[(6) - (6)].reg)) || IS_PREG ((yyvsp[(6) - (6)].reg)))) @@ -5026,8 +5093,8 @@ yyreduce: } break; - case 133: -#line 2399 "bfin-parse.y" + case 132: +#line 2463 "bfin-parse.y" { if ((IS_DREG ((yyvsp[(5) - (5)].reg)) || IS_PREG ((yyvsp[(5) - (5)].reg))) && (IS_DREG ((yyvsp[(3) - (5)].reg)) || IS_PREG ((yyvsp[(3) - (5)].reg)))) @@ -5040,8 +5107,8 @@ yyreduce: } break; - case 134: -#line 2411 "bfin-parse.y" + case 133: +#line 2475 "bfin-parse.y" { if (IS_PCREL10 ((yyvsp[(5) - (5)].expr))) { @@ -5053,8 +5120,8 @@ yyreduce: } break; - case 135: -#line 2422 "bfin-parse.y" + case 134: +#line 2486 "bfin-parse.y" { if (IS_PCREL10 ((yyvsp[(5) - (8)].expr))) { @@ -5066,8 +5133,8 @@ yyreduce: } break; - case 136: -#line 2433 "bfin-parse.y" + case 135: +#line 2497 "bfin-parse.y" { if (IS_PCREL10 ((yyvsp[(4) - (4)].expr))) { @@ -5079,8 +5146,8 @@ yyreduce: } break; - case 137: -#line 2444 "bfin-parse.y" + case 136: +#line 2508 "bfin-parse.y" { if (IS_PCREL10 ((yyvsp[(4) - (7)].expr))) { @@ -5092,88 +5159,88 @@ yyreduce: } break; - case 138: -#line 2454 "bfin-parse.y" + case 137: +#line 2518 "bfin-parse.y" { notethat ("ProgCtrl: NOP\n"); (yyval.instr) = PROGCTRL (0, 0); } break; - case 139: -#line 2460 "bfin-parse.y" + case 138: +#line 2524 "bfin-parse.y" { notethat ("ProgCtrl: RTS\n"); (yyval.instr) = PROGCTRL (1, 0); } break; - case 140: -#line 2466 "bfin-parse.y" + case 139: +#line 2530 "bfin-parse.y" { notethat ("ProgCtrl: RTI\n"); (yyval.instr) = PROGCTRL (1, 1); } break; - case 141: -#line 2472 "bfin-parse.y" + case 140: +#line 2536 "bfin-parse.y" { notethat ("ProgCtrl: RTX\n"); (yyval.instr) = PROGCTRL (1, 2); } break; - case 142: -#line 2478 "bfin-parse.y" + case 141: +#line 2542 "bfin-parse.y" { notethat ("ProgCtrl: RTN\n"); (yyval.instr) = PROGCTRL (1, 3); } break; - case 143: -#line 2484 "bfin-parse.y" + case 142: +#line 2548 "bfin-parse.y" { notethat ("ProgCtrl: RTE\n"); (yyval.instr) = PROGCTRL (1, 4); } break; - case 144: -#line 2490 "bfin-parse.y" + case 143: +#line 2554 "bfin-parse.y" { notethat ("ProgCtrl: IDLE\n"); (yyval.instr) = PROGCTRL (2, 0); } break; - case 145: -#line 2496 "bfin-parse.y" + case 144: +#line 2560 "bfin-parse.y" { notethat ("ProgCtrl: CSYNC\n"); (yyval.instr) = PROGCTRL (2, 3); } break; - case 146: -#line 2502 "bfin-parse.y" + case 145: +#line 2566 "bfin-parse.y" { notethat ("ProgCtrl: SSYNC\n"); (yyval.instr) = PROGCTRL (2, 4); } break; - case 147: -#line 2508 "bfin-parse.y" + case 146: +#line 2572 "bfin-parse.y" { notethat ("ProgCtrl: EMUEXCPT\n"); (yyval.instr) = PROGCTRL (2, 5); } break; - case 148: -#line 2514 "bfin-parse.y" + case 147: +#line 2578 "bfin-parse.y" { if (IS_DREG ((yyvsp[(2) - (2)].reg))) { @@ -5185,8 +5252,8 @@ yyreduce: } break; - case 149: -#line 2525 "bfin-parse.y" + case 148: +#line 2589 "bfin-parse.y" { if (IS_DREG ((yyvsp[(2) - (2)].reg))) { @@ -5198,8 +5265,8 @@ yyreduce: } break; - case 150: -#line 2536 "bfin-parse.y" + case 149: +#line 2600 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5211,8 +5278,8 @@ yyreduce: } break; - case 151: -#line 2547 "bfin-parse.y" + case 150: +#line 2611 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5224,8 +5291,8 @@ yyreduce: } break; - case 152: -#line 2558 "bfin-parse.y" + case 151: +#line 2622 "bfin-parse.y" { if (IS_PREG ((yyvsp[(5) - (6)].reg))) { @@ -5237,8 +5304,8 @@ yyreduce: } break; - case 153: -#line 2569 "bfin-parse.y" + case 152: +#line 2633 "bfin-parse.y" { if (IS_PREG ((yyvsp[(5) - (6)].reg))) { @@ -5250,8 +5317,8 @@ yyreduce: } break; - case 154: -#line 2580 "bfin-parse.y" + case 153: +#line 2644 "bfin-parse.y" { if (IS_UIMM ((yyvsp[(2) - (2)].expr), 4)) { @@ -5263,16 +5330,16 @@ yyreduce: } break; - case 155: -#line 2591 "bfin-parse.y" + case 154: +#line 2655 "bfin-parse.y" { notethat ("ProgCtrl: EMUEXCPT\n"); (yyval.instr) = PROGCTRL (10, uimm4 ((yyvsp[(2) - (2)].expr))); } break; - case 156: -#line 2597 "bfin-parse.y" + case 155: +#line 2661 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5284,8 +5351,8 @@ yyreduce: } break; - case 157: -#line 2608 "bfin-parse.y" + case 156: +#line 2672 "bfin-parse.y" { if (IS_PCREL12 ((yyvsp[(2) - (2)].expr))) { @@ -5297,8 +5364,8 @@ yyreduce: } break; - case 158: -#line 2619 "bfin-parse.y" + case 157: +#line 2683 "bfin-parse.y" { if (IS_PCREL12 ((yyvsp[(2) - (2)].expr))) { @@ -5310,8 +5377,8 @@ yyreduce: } break; - case 159: -#line 2630 "bfin-parse.y" + case 158: +#line 2694 "bfin-parse.y" { if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) { @@ -5323,8 +5390,8 @@ yyreduce: } break; - case 160: -#line 2641 "bfin-parse.y" + case 159: +#line 2705 "bfin-parse.y" { if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) { @@ -5336,8 +5403,8 @@ yyreduce: } break; - case 161: -#line 2652 "bfin-parse.y" + case 160: +#line 2716 "bfin-parse.y" { if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) { @@ -5349,8 +5416,8 @@ yyreduce: } break; - case 162: -#line 2662 "bfin-parse.y" + case 161: +#line 2726 "bfin-parse.y" { if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) { @@ -5362,8 +5429,8 @@ yyreduce: } break; - case 163: -#line 2675 "bfin-parse.y" + case 162: +#line 2739 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) (yyval.instr) = ALU2OP (&(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 8); @@ -5372,8 +5439,8 @@ yyreduce: } break; - case 164: -#line 2683 "bfin-parse.y" + case 163: +#line 2747 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) (yyval.instr) = ALU2OP (&(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 9); @@ -5382,8 +5449,8 @@ yyreduce: } break; - case 165: -#line 2691 "bfin-parse.y" + case 164: +#line 2755 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(4) - (5)].reg))) { @@ -5408,8 +5475,8 @@ yyreduce: } break; - case 166: -#line 2715 "bfin-parse.y" + case 165: +#line 2779 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg))) { @@ -5421,8 +5488,8 @@ yyreduce: } break; - case 167: -#line 2726 "bfin-parse.y" + case 166: +#line 2790 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -5434,8 +5501,8 @@ yyreduce: } break; - case 168: -#line 2737 "bfin-parse.y" + case 167: +#line 2801 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5)) { @@ -5447,8 +5514,8 @@ yyreduce: } break; - case 169: -#line 2748 "bfin-parse.y" + case 168: +#line 2812 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -5460,8 +5527,8 @@ yyreduce: } break; - case 170: -#line 2759 "bfin-parse.y" + case 169: +#line 2823 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -5473,8 +5540,8 @@ yyreduce: } break; - case 171: -#line 2770 "bfin-parse.y" + case 170: +#line 2834 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5)) { @@ -5486,8 +5553,8 @@ yyreduce: } break; - case 172: -#line 2782 "bfin-parse.y" + case 171: +#line 2846 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5)) { @@ -5499,8 +5566,8 @@ yyreduce: } break; - case 173: -#line 2795 "bfin-parse.y" + case 172: +#line 2859 "bfin-parse.y" { notethat ("CaCTRL: FLUSH [ pregs ]\n"); if (IS_PREG ((yyvsp[(3) - (4)].reg))) @@ -5510,8 +5577,8 @@ yyreduce: } break; - case 174: -#line 2804 "bfin-parse.y" + case 173: +#line 2868 "bfin-parse.y" { if (IS_PREG ((yyvsp[(2) - (2)].reg))) { @@ -5523,8 +5590,8 @@ yyreduce: } break; - case 175: -#line 2815 "bfin-parse.y" + case 174: +#line 2879 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5536,8 +5603,8 @@ yyreduce: } break; - case 176: -#line 2826 "bfin-parse.y" + case 175: +#line 2890 "bfin-parse.y" { if (IS_PREG ((yyvsp[(2) - (2)].reg))) { @@ -5549,8 +5616,8 @@ yyreduce: } break; - case 177: -#line 2838 "bfin-parse.y" + case 176: +#line 2902 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5562,8 +5629,8 @@ yyreduce: } break; - case 178: -#line 2849 "bfin-parse.y" + case 177: +#line 2913 "bfin-parse.y" { if (IS_PREG ((yyvsp[(2) - (2)].reg))) { @@ -5575,8 +5642,8 @@ yyreduce: } break; - case 179: -#line 2860 "bfin-parse.y" + case 178: +#line 2924 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5588,8 +5655,8 @@ yyreduce: } break; - case 180: -#line 2871 "bfin-parse.y" + case 179: +#line 2935 "bfin-parse.y" { if (IS_PREG ((yyvsp[(2) - (2)].reg))) { @@ -5601,101 +5668,133 @@ yyreduce: } break; - case 181: -#line 2885 "bfin-parse.y" + case 180: +#line 2949 "bfin-parse.y" { - if (IS_PREG ((yyvsp[(3) - (7)].reg)) && IS_DREG ((yyvsp[(7) - (7)].reg))) - { - notethat ("LDST: B [ pregs ] = dregs\n"); - (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 2, 0, 1); - } - else - return yyerror ("Register mismatch"); + if (!IS_DREG ((yyvsp[(7) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ((yyvsp[(3) - (7)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDST: B [ pregs ] = dregs\n"); + (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 2, 0, 1); } break; - case 182: -#line 2897 "bfin-parse.y" + case 181: +#line 2961 "bfin-parse.y" { - if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_RANGE(16, (yyvsp[(5) - (8)].expr), (yyvsp[(4) - (8)].r0).r0, 1) && IS_DREG ((yyvsp[(8) - (8)].reg))) + Expr_Node *tmp = (yyvsp[(5) - (8)].expr); + + if (!IS_DREG ((yyvsp[(8) - (8)].reg))) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ((yyvsp[(3) - (8)].reg))) + return yyerror ("Preg expected in address"); + + if (IS_RELOC ((yyvsp[(5) - (8)].expr))) + return yyerror ("Plain symbol used as offset"); + + if ((yyvsp[(4) - (8)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (in_range_p (tmp, -32768, 32767, 0)) { notethat ("LDST: B [ pregs + imm16 ] = dregs\n"); - if ((yyvsp[(4) - (8)].r0).r0) - neg_value ((yyvsp[(5) - (8)].expr)); (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 2, 0, (yyvsp[(5) - (8)].expr)); } else - return yyerror ("Register mismatch or const size wrong"); + return yyerror ("Displacement out of range"); } break; - case 183: -#line 2912 "bfin-parse.y" + case 182: +#line 2987 "bfin-parse.y" { - if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_URANGE (4, (yyvsp[(5) - (8)].expr), (yyvsp[(4) - (8)].r0).r0, 2) && IS_DREG ((yyvsp[(8) - (8)].reg))) + Expr_Node *tmp = (yyvsp[(5) - (8)].expr); + + if (!IS_DREG ((yyvsp[(8) - (8)].reg))) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ((yyvsp[(3) - (8)].reg))) + return yyerror ("Preg expected in address"); + + if ((yyvsp[(4) - (8)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (IS_RELOC ((yyvsp[(5) - (8)].expr))) + return yyerror ("Plain symbol used as offset"); + + if (in_range_p (tmp, 0, 30, 1)) { notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n"); - (yyval.instr) = LDSTII (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), (yyvsp[(5) - (8)].expr), 1, 1); + (yyval.instr) = LDSTII (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), tmp, 1, 1); } - else if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_RANGE(16, (yyvsp[(5) - (8)].expr), (yyvsp[(4) - (8)].r0).r0, 2) && IS_DREG ((yyvsp[(8) - (8)].reg))) + else if (in_range_p (tmp, -65536, 65535, 1)) { notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n"); - if ((yyvsp[(4) - (8)].r0).r0) - neg_value ((yyvsp[(5) - (8)].expr)); - (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 1, 0, (yyvsp[(5) - (8)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 1, 0, tmp); } else - return yyerror ("Bad register(s) or wrong constant size"); + return yyerror ("Displacement out of range"); } break; - case 184: -#line 2931 "bfin-parse.y" + case 183: +#line 3017 "bfin-parse.y" { - if (IS_PREG ((yyvsp[(3) - (7)].reg)) && IS_DREG ((yyvsp[(7) - (7)].reg))) - { - notethat ("LDST: W [ pregs ] = dregs\n"); - (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1, 0, 1); - } - else - return yyerror ("Bad register(s) for STORE"); + if (!IS_DREG ((yyvsp[(7) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ((yyvsp[(3) - (7)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDST: W [ pregs ] = dregs\n"); + (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1, 0, 1); } break; - case 185: -#line 2942 "bfin-parse.y" + case 184: +#line 3028 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(7) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); + if ((yyvsp[(4) - (7)].modcodes).x0 == 2) + { + if (!IS_IREG ((yyvsp[(3) - (7)].reg)) && !IS_PREG ((yyvsp[(3) - (7)].reg))) + return yyerror ("Ireg or Preg expected in address"); + } + else if (!IS_IREG ((yyvsp[(3) - (7)].reg))) + return yyerror ("Ireg expected in address"); + if (IS_IREG ((yyvsp[(3) - (7)].reg))) { notethat ("dspLDST: W [ iregs ] = dregs_half\n"); (yyval.instr) = DSPLDST (&(yyvsp[(3) - (7)].reg), 1 + IS_H ((yyvsp[(7) - (7)].reg)), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1); } - else if ((yyvsp[(4) - (7)].modcodes).x0 == 2 && IS_PREG ((yyvsp[(3) - (7)].reg)) && IS_DREG ((yyvsp[(7) - (7)].reg))) + else { - notethat ("LDSTpmod: W [ pregs ] = dregs_half\n"); + notethat ("LDSTpmod: W [ pregs ] = dregs_half\n"); (yyval.instr) = LDSTPMOD (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), &(yyvsp[(3) - (7)].reg), 1 + IS_H ((yyvsp[(7) - (7)].reg)), 1); - } - else - return yyerror ("Bad register(s) for STORE"); } break; - case 186: -#line 2960 "bfin-parse.y" + case 185: +#line 3053 "bfin-parse.y" { Expr_Node *tmp = (yyvsp[(4) - (7)].expr); int ispreg = IS_PREG ((yyvsp[(7) - (7)].reg)); if (!IS_PREG ((yyvsp[(2) - (7)].reg))) - return yyerror ("Preg expected for indirect"); + return yyerror ("Preg expected in address"); if (!IS_DREG ((yyvsp[(7) - (7)].reg)) && !ispreg) - return yyerror ("Bad source register for STORE"); + return yyerror ("Preg expected for source operand"); if ((yyvsp[(3) - (7)].r0).r0) tmp = unary (Expr_Op_Type_NEG, tmp); + if (IS_RELOC ((yyvsp[(4) - (7)].expr))) + return yyerror ("Plain symbol used as offset"); + if (in_range_p (tmp, 0, 63, 3)) { notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n"); @@ -5710,118 +5809,141 @@ yyreduce: else if (in_range_p (tmp, -131072, 131071, 3)) { notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n"); - (yyval.instr) = LDSTIDXI (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), 1, 0, ispreg ? 1: 0, tmp); + (yyval.instr) = LDSTIDXI (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), 1, 0, ispreg ? 1 : 0, tmp); } else - return yyerror ("Displacement out of range for store"); + return yyerror ("Displacement out of range"); } break; - case 187: -#line 2994 "bfin-parse.y" + case 186: +#line 3090 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_URANGE (4, (yyvsp[(7) - (9)].expr), (yyvsp[(6) - (9)].r0).r0, 2)) + Expr_Node *tmp = (yyvsp[(7) - (9)].expr); + if (!IS_DREG ((yyvsp[(1) - (9)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (9)].reg))) + return yyerror ("Preg expected in address"); + + if ((yyvsp[(6) - (9)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (IS_RELOC ((yyvsp[(7) - (9)].expr))) + return yyerror ("Plain symbol used as offset"); + + if (in_range_p (tmp, 0, 30, 1)) { - notethat ("LDSTii: dregs = W [ pregs + uimm4s2 ] (.)\n"); - (yyval.instr) = LDSTII (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), (yyvsp[(7) - (9)].expr), 0, 1 << (yyvsp[(9) - (9)].r0).r0); + notethat ("LDSTii: dregs = W [ pregs + uimm5m2 ] (.)\n"); + (yyval.instr) = LDSTII (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), tmp, 0, 1 << (yyvsp[(9) - (9)].r0).r0); } - else if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_RANGE(16, (yyvsp[(7) - (9)].expr), (yyvsp[(6) - (9)].r0).r0, 2)) + else if (in_range_p (tmp, -65536, 65535, 1)) { notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n"); - if ((yyvsp[(6) - (9)].r0).r0) - neg_value ((yyvsp[(7) - (9)].expr)); - (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 1, (yyvsp[(9) - (9)].r0).r0, (yyvsp[(7) - (9)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 1, (yyvsp[(9) - (9)].r0).r0, tmp); } else - return yyerror ("Bad register or constant for LOAD"); + return yyerror ("Displacement out of range"); } break; - case 188: -#line 3012 "bfin-parse.y" + case 187: +#line 3118 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(1) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); + if ((yyvsp[(6) - (7)].modcodes).x0 == 2) + { + if (!IS_IREG ((yyvsp[(5) - (7)].reg)) && !IS_PREG ((yyvsp[(5) - (7)].reg))) + return yyerror ("Ireg or Preg expected in address"); + } + else if (!IS_IREG ((yyvsp[(5) - (7)].reg))) + return yyerror ("Ireg expected in address"); + if (IS_IREG ((yyvsp[(5) - (7)].reg))) { - notethat ("dspLDST: dregs_half = W [ iregs ]\n"); + notethat ("dspLDST: dregs_half = W [ iregs ]\n"); (yyval.instr) = DSPLDST(&(yyvsp[(5) - (7)].reg), 1 + IS_H ((yyvsp[(1) - (7)].reg)), &(yyvsp[(1) - (7)].reg), (yyvsp[(6) - (7)].modcodes).x0, 0); } - else if ((yyvsp[(6) - (7)].modcodes).x0 == 2 && IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_PREG ((yyvsp[(5) - (7)].reg))) + else { - notethat ("LDSTpmod: dregs_half = W [ pregs ]\n"); + notethat ("LDSTpmod: dregs_half = W [ pregs ]\n"); (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (7)].reg), &(yyvsp[(1) - (7)].reg), &(yyvsp[(5) - (7)].reg), 1 + IS_H ((yyvsp[(1) - (7)].reg)), 0); } - else - return yyerror ("Bad register or post_op for LOAD"); } break; - case 189: -#line 3029 "bfin-parse.y" + case 188: +#line 3143 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg))) - { - notethat ("LDST: dregs = W [ pregs ] (.)\n"); - (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 1, (yyvsp[(8) - (8)].r0).r0, 0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ((yyvsp[(1) - (8)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (8)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDST: dregs = W [ pregs ] (.)\n"); + (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 1, (yyvsp[(8) - (8)].r0).r0, 0); } break; - case 190: -#line 3040 "bfin-parse.y" + case 189: +#line 3154 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_PREG ((yyvsp[(7) - (9)].reg))) - { - notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n"); - (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), 3, (yyvsp[(9) - (9)].r0).r0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ((yyvsp[(1) - (9)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (9)].reg)) || !IS_PREG ((yyvsp[(7) - (9)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), 3, (yyvsp[(9) - (9)].r0).r0); } break; - case 191: -#line 3051 "bfin-parse.y" + case 190: +#line 3165 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg)) && IS_PREG ((yyvsp[(7) - (8)].reg))) - { - notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n"); - (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), 1 + IS_H ((yyvsp[(1) - (8)].reg)), 0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ((yyvsp[(1) - (8)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (8)].reg)) || !IS_PREG ((yyvsp[(7) - (8)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), 1 + IS_H ((yyvsp[(1) - (8)].reg)), 0); } break; - case 192: -#line 3062 "bfin-parse.y" + case 191: +#line 3176 "bfin-parse.y" { - if (IS_IREG ((yyvsp[(2) - (6)].reg)) && IS_DREG ((yyvsp[(6) - (6)].reg))) + if (!IS_IREG ((yyvsp[(2) - (6)].reg)) && !IS_PREG ((yyvsp[(2) - (6)].reg))) + return yyerror ("Ireg or Preg expected in address"); + else if (IS_IREG ((yyvsp[(2) - (6)].reg)) && !IS_DREG ((yyvsp[(6) - (6)].reg))) + return yyerror ("Dreg expected for source operand"); + else if (IS_PREG ((yyvsp[(2) - (6)].reg)) && !IS_DREG ((yyvsp[(6) - (6)].reg)) && !IS_PREG ((yyvsp[(6) - (6)].reg))) + return yyerror ("Dreg or Preg expected for source operand"); + + if (IS_IREG ((yyvsp[(2) - (6)].reg))) { notethat ("dspLDST: [ iregs ] = dregs\n"); (yyval.instr) = DSPLDST(&(yyvsp[(2) - (6)].reg), 0, &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 1); } - else if (IS_PREG ((yyvsp[(2) - (6)].reg)) && IS_DREG ((yyvsp[(6) - (6)].reg))) + else if (IS_DREG ((yyvsp[(6) - (6)].reg))) { notethat ("LDST: [ pregs ] = dregs\n"); (yyval.instr) = LDST (&(yyvsp[(2) - (6)].reg), &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 0, 0, 1); } - else if (IS_PREG ((yyvsp[(2) - (6)].reg)) && IS_PREG ((yyvsp[(6) - (6)].reg))) + else { notethat ("LDST: [ pregs ] = pregs\n"); (yyval.instr) = LDST (&(yyvsp[(2) - (6)].reg), &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 0, 1, 1); } - else - return yyerror ("Bad register for STORE"); } break; - case 193: -#line 3083 "bfin-parse.y" + case 192: +#line 3202 "bfin-parse.y" { - if (! IS_DREG ((yyvsp[(7) - (7)].reg))) - return yyerror ("Expected Dreg for last argument"); + if (!IS_DREG ((yyvsp[(7) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); if (IS_IREG ((yyvsp[(2) - (7)].reg)) && IS_MREG ((yyvsp[(4) - (7)].reg))) { @@ -5834,93 +5956,113 @@ yyreduce: (yyval.instr) = LDSTPMOD (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), &(yyvsp[(4) - (7)].reg), 0, 1); } else - return yyerror ("Bad register for STORE"); + return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address"); } break; - case 194: -#line 3102 "bfin-parse.y" + case 193: +#line 3221 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(8) - (8)].reg))) - return yyerror ("Expect Dreg as last argument"); + return yyerror ("Dreg expected for source operand"); + if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg))) { notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n"); (yyval.instr) = LDSTPMOD (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), &(yyvsp[(5) - (8)].reg), 1 + IS_H ((yyvsp[(8) - (8)].reg)), 1); } else - return yyerror ("Bad register for STORE"); + return yyerror ("Preg ++ Preg expected in address"); } break; - case 195: -#line 3115 "bfin-parse.y" + case 194: +#line 3235 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_RANGE(16, (yyvsp[(7) - (9)].expr), (yyvsp[(6) - (9)].r0).r0, 1)) + Expr_Node *tmp = (yyvsp[(7) - (9)].expr); + if (!IS_DREG ((yyvsp[(1) - (9)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (9)].reg))) + return yyerror ("Preg expected in address"); + + if ((yyvsp[(6) - (9)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (IS_RELOC ((yyvsp[(7) - (9)].expr))) + return yyerror ("Plain symbol used as offset"); + + if (in_range_p (tmp, -32768, 32767, 0)) { notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n", (yyvsp[(9) - (9)].r0).r0 ? 'X' : 'Z'); - if ((yyvsp[(6) - (9)].r0).r0) - neg_value ((yyvsp[(7) - (9)].expr)); - (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 2, (yyvsp[(9) - (9)].r0).r0, (yyvsp[(7) - (9)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 2, (yyvsp[(9) - (9)].r0).r0, tmp); } else - return yyerror ("Bad register or value for LOAD"); + return yyerror ("Displacement out of range"); } break; - case 196: -#line 3129 "bfin-parse.y" + case 195: +#line 3259 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg))) - { - notethat ("LDST: dregs = B [ pregs ] (%c)\n", - (yyvsp[(8) - (8)].r0).r0 ? 'X' : 'Z'); - (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 2, (yyvsp[(8) - (8)].r0).r0, 0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ((yyvsp[(1) - (8)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (8)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDST: dregs = B [ pregs ] (%c)\n", + (yyvsp[(8) - (8)].r0).r0 ? 'X' : 'Z'); + (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 2, (yyvsp[(8) - (8)].r0).r0, 0); } break; - case 197: -#line 3141 "bfin-parse.y" + case 196: +#line 3271 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_IREG ((yyvsp[(4) - (7)].reg)) && IS_MREG ((yyvsp[(6) - (7)].reg))) + if (!IS_DREG ((yyvsp[(1) - (7)].reg))) + return yyerror ("Dreg expected for destination operand"); + + if (IS_IREG ((yyvsp[(4) - (7)].reg)) && IS_MREG ((yyvsp[(6) - (7)].reg))) { notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n"); (yyval.instr) = DSPLDST(&(yyvsp[(4) - (7)].reg), (yyvsp[(6) - (7)].reg).regno & CODE_MASK, &(yyvsp[(1) - (7)].reg), 3, 0); } - else if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_PREG ((yyvsp[(4) - (7)].reg)) && IS_PREG ((yyvsp[(6) - (7)].reg))) + else if (IS_PREG ((yyvsp[(4) - (7)].reg)) && IS_PREG ((yyvsp[(6) - (7)].reg))) { notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n"); (yyval.instr) = LDSTPMOD (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), 0, 0); } else - return yyerror ("Bad register for LOAD"); + return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address"); } break; - case 198: -#line 3157 "bfin-parse.y" + case 197: +#line 3290 "bfin-parse.y" { Expr_Node *tmp = (yyvsp[(6) - (7)].expr); int ispreg = IS_PREG ((yyvsp[(1) - (7)].reg)); int isgot = IS_RELOC((yyvsp[(6) - (7)].expr)); if (!IS_PREG ((yyvsp[(4) - (7)].reg))) - return yyerror ("Preg expected for indirect"); + return yyerror ("Preg expected in address"); if (!IS_DREG ((yyvsp[(1) - (7)].reg)) && !ispreg) - return yyerror ("Bad destination register for LOAD"); + return yyerror ("Dreg or Preg expected for destination operand"); + + if (tmp->type == Expr_Node_Reloc + && strcmp (tmp->value.s_value, + "_current_shared_library_p5_offset_") != 0) + return yyerror ("Plain symbol used as offset"); if ((yyvsp[(5) - (7)].r0).r0) tmp = unary (Expr_Op_Type_NEG, tmp); - if(isgot){ + if (isgot) + { notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n"); - (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1: 0, tmp); - } + (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1 : 0, tmp); + } else if (in_range_p (tmp, 0, 63, 3)) { notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n"); @@ -5935,28 +6077,36 @@ yyreduce: else if (in_range_p (tmp, -131072, 131071, 3)) { notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n"); - (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1: 0, tmp); + (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1 : 0, tmp); } else - return yyerror ("Displacement out of range for load"); + return yyerror ("Displacement out of range"); } break; - case 199: -#line 3197 "bfin-parse.y" + case 198: +#line 3336 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_IREG ((yyvsp[(4) - (6)].reg))) + if (!IS_IREG ((yyvsp[(4) - (6)].reg)) && !IS_PREG ((yyvsp[(4) - (6)].reg))) + return yyerror ("Ireg or Preg expected in address"); + else if (IS_IREG ((yyvsp[(4) - (6)].reg)) && !IS_DREG ((yyvsp[(1) - (6)].reg))) + return yyerror ("Dreg expected in destination operand"); + else if (IS_PREG ((yyvsp[(4) - (6)].reg)) && !IS_DREG ((yyvsp[(1) - (6)].reg)) && !IS_PREG ((yyvsp[(1) - (6)].reg)) + && ((yyvsp[(4) - (6)].reg).regno != REG_SP || !IS_ALLREG ((yyvsp[(1) - (6)].reg)) || (yyvsp[(5) - (6)].modcodes).x0 != 0)) + return yyerror ("Dreg or Preg expected in destination operand"); + + if (IS_IREG ((yyvsp[(4) - (6)].reg))) { notethat ("dspLDST: dregs = [ iregs ]\n"); (yyval.instr) = DSPLDST (&(yyvsp[(4) - (6)].reg), 0, &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0); } - else if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(4) - (6)].reg))) + else if (IS_DREG ((yyvsp[(1) - (6)].reg))) { notethat ("LDST: dregs = [ pregs ]\n"); (yyval.instr) = LDST (&(yyvsp[(4) - (6)].reg), &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0, 0, 0); } - else if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(4) - (6)].reg))) + else if (IS_PREG ((yyvsp[(1) - (6)].reg))) { if (REG_SAME ((yyvsp[(1) - (6)].reg), (yyvsp[(4) - (6)].reg)) && (yyvsp[(5) - (6)].modcodes).x0 != 2) return yyerror ("Pregs can't be same"); @@ -5964,18 +6114,16 @@ yyreduce: notethat ("LDST: pregs = [ pregs ]\n"); (yyval.instr) = LDST (&(yyvsp[(4) - (6)].reg), &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0, 1, 0); } - else if ((yyvsp[(4) - (6)].reg).regno == REG_SP && IS_ALLREG ((yyvsp[(1) - (6)].reg)) && (yyvsp[(5) - (6)].modcodes).x0 == 0) + else { notethat ("PushPopReg: allregs = [ SP ++ ]\n"); (yyval.instr) = PUSHPOPREG (&(yyvsp[(1) - (6)].reg), 0); } - else - return yyerror ("Bad register or value"); } break; - case 200: -#line 3228 "bfin-parse.y" + case 199: +#line 3373 "bfin-parse.y" { if ((yyvsp[(1) - (11)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -5992,8 +6140,8 @@ yyreduce: } break; - case 201: -#line 3244 "bfin-parse.y" + case 200: +#line 3389 "bfin-parse.y" { if ((yyvsp[(1) - (7)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -6013,8 +6161,8 @@ yyreduce: } break; - case 202: -#line 3263 "bfin-parse.y" + case 201: +#line 3408 "bfin-parse.y" { if ((yyvsp[(11) - (11)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -6029,8 +6177,8 @@ yyreduce: } break; - case 203: -#line 3277 "bfin-parse.y" + case 202: +#line 3422 "bfin-parse.y" { if ((yyvsp[(7) - (7)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -6050,8 +6198,8 @@ yyreduce: } break; - case 204: -#line 3296 "bfin-parse.y" + case 203: +#line 3441 "bfin-parse.y" { if ((yyvsp[(1) - (3)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -6066,8 +6214,8 @@ yyreduce: } break; - case 205: -#line 3312 "bfin-parse.y" + case 204: +#line 3457 "bfin-parse.y" { if (IS_URANGE (16, (yyvsp[(2) - (2)].expr), 0, 4)) (yyval.instr) = LINKAGE (0, uimm16s4 ((yyvsp[(2) - (2)].expr))); @@ -6076,16 +6224,16 @@ yyreduce: } break; - case 206: -#line 3320 "bfin-parse.y" + case 205: +#line 3465 "bfin-parse.y" { notethat ("linkage: UNLINK\n"); (yyval.instr) = LINKAGE (1, 0); } break; - case 207: -#line 3329 "bfin-parse.y" + case 206: +#line 3474 "bfin-parse.y" { if (IS_PCREL4 ((yyvsp[(3) - (7)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (7)].expr)) && IS_CREG ((yyvsp[(7) - (7)].reg))) { @@ -6098,8 +6246,8 @@ yyreduce: } break; - case 208: -#line 3340 "bfin-parse.y" + case 207: +#line 3485 "bfin-parse.y" { if (IS_PCREL4 ((yyvsp[(3) - (9)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (9)].expr)) && IS_PREG ((yyvsp[(9) - (9)].reg)) && IS_CREG ((yyvsp[(7) - (9)].reg))) @@ -6112,8 +6260,8 @@ yyreduce: } break; - case 209: -#line 3352 "bfin-parse.y" + case 208: +#line 3497 "bfin-parse.y" { if (IS_PCREL4 ((yyvsp[(3) - (11)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (11)].expr)) && IS_PREG ((yyvsp[(9) - (11)].reg)) && IS_CREG ((yyvsp[(7) - (11)].reg)) @@ -6127,8 +6275,8 @@ yyreduce: } break; - case 210: -#line 3366 "bfin-parse.y" + case 209: +#line 3511 "bfin-parse.y" { if (!IS_RELOC ((yyvsp[(2) - (3)].expr))) return yyerror ("Invalid expression in loop statement"); @@ -6138,8 +6286,8 @@ yyreduce: } break; - case 211: -#line 3374 "bfin-parse.y" + case 210: +#line 3519 "bfin-parse.y" { if (IS_RELOC ((yyvsp[(2) - (5)].expr)) && IS_PREG ((yyvsp[(5) - (5)].reg)) && IS_CREG ((yyvsp[(3) - (5)].reg))) { @@ -6151,8 +6299,8 @@ yyreduce: } break; - case 212: -#line 3384 "bfin-parse.y" + case 211: +#line 3529 "bfin-parse.y" { if (IS_RELOC ((yyvsp[(2) - (7)].expr)) && IS_PREG ((yyvsp[(5) - (7)].reg)) && IS_CREG ((yyvsp[(3) - (7)].reg)) && EXPR_VALUE ((yyvsp[(7) - (7)].expr)) == 1) { @@ -6164,32 +6312,54 @@ yyreduce: } break; + case 212: +#line 3541 "bfin-parse.y" + { + if (!IS_RELOC ((yyvsp[(2) - (2)].expr))) + return yyerror ("Invalid expression in LOOP_BEGIN statement"); + + bfin_loop_beginend ((yyvsp[(2) - (2)].expr), 1); + (yyval.instr) = 0; + } + break; + case 213: -#line 3396 "bfin-parse.y" +#line 3551 "bfin-parse.y" + { + if (!IS_RELOC ((yyvsp[(2) - (2)].expr))) + return yyerror ("Invalid expression in LOOP_END statement"); + + bfin_loop_beginend ((yyvsp[(2) - (2)].expr), 0); + (yyval.instr) = 0; + } + break; + + case 214: +#line 3562 "bfin-parse.y" { notethat ("pseudoDEBUG: DBG\n"); (yyval.instr) = bfin_gen_pseudodbg (3, 7, 0); } break; - case 214: -#line 3401 "bfin-parse.y" + case 215: +#line 3567 "bfin-parse.y" { notethat ("pseudoDEBUG: DBG REG_A\n"); (yyval.instr) = bfin_gen_pseudodbg (3, IS_A1 ((yyvsp[(2) - (2)].reg)), 0); } break; - case 215: -#line 3406 "bfin-parse.y" + case 216: +#line 3572 "bfin-parse.y" { notethat ("pseudoDEBUG: DBG allregs\n"); (yyval.instr) = bfin_gen_pseudodbg (0, (yyvsp[(2) - (2)].reg).regno & CODE_MASK, (yyvsp[(2) - (2)].reg).regno & CLASS_MASK); } break; - case 216: -#line 3412 "bfin-parse.y" + case 217: +#line 3578 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(3) - (4)].reg))) return yyerror ("Dregs expected"); @@ -6198,170 +6368,178 @@ yyreduce: } break; - case 217: -#line 3420 "bfin-parse.y" + case 218: +#line 3586 "bfin-parse.y" { notethat ("psedoDEBUG: DBGHALT\n"); (yyval.instr) = bfin_gen_pseudodbg (3, 5, 0); } break; - case 218: -#line 3426 "bfin-parse.y" + case 219: +#line 3592 "bfin-parse.y" { - notethat ("pseudodbg_assert: DBGA (dregs_lo , uimm16 )\n"); + notethat ("psedoDEBUG: HLT\n"); + (yyval.instr) = bfin_gen_pseudodbg (3, 4, 0); + } + break; + + case 220: +#line 3598 "bfin-parse.y" + { + notethat ("pseudodbg_assert: DBGA (regs_lo/hi , uimm16 )\n"); (yyval.instr) = bfin_gen_pseudodbg_assert (IS_H ((yyvsp[(3) - (6)].reg)), &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr))); } break; - case 219: -#line 3432 "bfin-parse.y" + case 221: +#line 3604 "bfin-parse.y" { - notethat ("pseudodbg_assert: DBGAH (dregs , uimm16 )\n"); + notethat ("pseudodbg_assert: DBGAH (regs , uimm16 )\n"); (yyval.instr) = bfin_gen_pseudodbg_assert (3, &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr))); } break; - case 220: -#line 3438 "bfin-parse.y" + case 222: +#line 3610 "bfin-parse.y" { - notethat ("psedodbg_assert: DBGAL (dregs , uimm16 )\n"); + notethat ("psedodbg_assert: DBGAL (regs , uimm16 )\n"); (yyval.instr) = bfin_gen_pseudodbg_assert (2, &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr))); } break; - case 221: -#line 3451 "bfin-parse.y" + case 223: +#line 3623 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (1)].reg); } break; - case 222: -#line 3455 "bfin-parse.y" + case 224: +#line 3627 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (1)].reg); } break; - case 223: -#line 3464 "bfin-parse.y" + case 225: +#line 3636 "bfin-parse.y" { (yyval.mod).MM = 0; (yyval.mod).mod = 0; } break; - case 224: -#line 3469 "bfin-parse.y" + case 226: +#line 3641 "bfin-parse.y" { (yyval.mod).MM = 1; (yyval.mod).mod = (yyvsp[(4) - (5)].value); } break; - case 225: -#line 3474 "bfin-parse.y" + case 227: +#line 3646 "bfin-parse.y" { (yyval.mod).MM = 1; (yyval.mod).mod = (yyvsp[(2) - (5)].value); } break; - case 226: -#line 3479 "bfin-parse.y" + case 228: +#line 3651 "bfin-parse.y" { (yyval.mod).MM = 0; (yyval.mod).mod = (yyvsp[(2) - (3)].value); } break; - case 227: -#line 3484 "bfin-parse.y" + case 229: +#line 3656 "bfin-parse.y" { (yyval.mod).MM = 1; (yyval.mod).mod = 0; } break; - case 228: -#line 3491 "bfin-parse.y" + case 230: +#line 3663 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 229: -#line 3495 "bfin-parse.y" + case 231: +#line 3667 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 230: -#line 3501 "bfin-parse.y" + case 232: +#line 3673 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 0; } break; - case 231: -#line 3506 "bfin-parse.y" + case 233: +#line 3678 "bfin-parse.y" { (yyval.modcodes).s0 = 1; (yyval.modcodes).x0 = 0; } break; - case 232: -#line 3511 "bfin-parse.y" + case 234: +#line 3683 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 1; } break; - case 233: -#line 3516 "bfin-parse.y" + case 235: +#line 3688 "bfin-parse.y" { (yyval.modcodes).s0 = 1; (yyval.modcodes).x0 = 1; } break; - case 234: -#line 3524 "bfin-parse.y" + case 236: +#line 3696 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 235: -#line 3528 "bfin-parse.y" + case 237: +#line 3700 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 236: -#line 3534 "bfin-parse.y" + case 238: +#line 3706 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 0; } break; - case 237: -#line 3539 "bfin-parse.y" + case 239: +#line 3711 "bfin-parse.y" { (yyval.modcodes).s0 = (yyvsp[(2) - (3)].modcodes).s0; (yyval.modcodes).x0 = (yyvsp[(2) - (3)].modcodes).x0; } break; - case 238: -#line 3546 "bfin-parse.y" + case 240: +#line 3718 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 0; @@ -6369,8 +6547,8 @@ yyreduce: } break; - case 239: -#line 3552 "bfin-parse.y" + case 241: +#line 3724 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 0; @@ -6378,8 +6556,8 @@ yyreduce: } break; - case 240: -#line 3558 "bfin-parse.y" + case 242: +#line 3730 "bfin-parse.y" { (yyval.modcodes).s0 = 1; (yyval.modcodes).x0 = 0; @@ -6387,8 +6565,8 @@ yyreduce: } break; - case 241: -#line 3566 "bfin-parse.y" + case 243: +#line 3738 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 0; @@ -6396,8 +6574,8 @@ yyreduce: } break; - case 242: -#line 3572 "bfin-parse.y" + case 244: +#line 3744 "bfin-parse.y" { (yyval.modcodes).r0 = 2 + (yyvsp[(2) - (3)].r0).r0; (yyval.modcodes).s0 = 0; @@ -6405,8 +6583,8 @@ yyreduce: } break; - case 243: -#line 3578 "bfin-parse.y" + case 245: +#line 3750 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = (yyvsp[(2) - (3)].modcodes).s0; @@ -6414,8 +6592,8 @@ yyreduce: } break; - case 244: -#line 3584 "bfin-parse.y" + case 246: +#line 3756 "bfin-parse.y" { (yyval.modcodes).r0 = 2 + (yyvsp[(2) - (5)].r0).r0; (yyval.modcodes).s0 = (yyvsp[(4) - (5)].modcodes).s0; @@ -6423,8 +6601,8 @@ yyreduce: } break; - case 245: -#line 3590 "bfin-parse.y" + case 247: +#line 3762 "bfin-parse.y" { (yyval.modcodes).r0 = 2 + (yyvsp[(4) - (5)].r0).r0; (yyval.modcodes).s0 = (yyvsp[(2) - (5)].modcodes).s0; @@ -6432,50 +6610,50 @@ yyreduce: } break; - case 246: -#line 3598 "bfin-parse.y" + case 248: +#line 3770 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 247: -#line 3602 "bfin-parse.y" + case 249: +#line 3774 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 248: -#line 3606 "bfin-parse.y" + case 250: +#line 3778 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 249: -#line 3612 "bfin-parse.y" + case 251: +#line 3784 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 250: -#line 3616 "bfin-parse.y" + case 252: +#line 3788 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 251: -#line 3620 "bfin-parse.y" + case 253: +#line 3792 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 252: -#line 3626 "bfin-parse.y" + case 254: +#line 3798 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 0; @@ -6483,8 +6661,8 @@ yyreduce: } break; - case 253: -#line 3632 "bfin-parse.y" + case 255: +#line 3804 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 0; @@ -6492,8 +6670,8 @@ yyreduce: } break; - case 254: -#line 3638 "bfin-parse.y" + case 256: +#line 3810 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 1; @@ -6501,8 +6679,8 @@ yyreduce: } break; - case 255: -#line 3644 "bfin-parse.y" + case 257: +#line 3816 "bfin-parse.y" { (yyval.modcodes).r0 = 1; (yyval.modcodes).s0 = 0; @@ -6510,102 +6688,102 @@ yyreduce: } break; - case 256: -#line 3650 "bfin-parse.y" + case 258: +#line 3822 "bfin-parse.y" { (yyval.modcodes).r0 = 1; (yyval.modcodes).s0 = 1; } break; - case 257: -#line 3655 "bfin-parse.y" + case 259: +#line 3827 "bfin-parse.y" { (yyval.modcodes).r0 = 1; (yyval.modcodes).s0 = 1; } break; - case 258: -#line 3662 "bfin-parse.y" + case 260: +#line 3834 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 259: -#line 3666 "bfin-parse.y" + case 261: +#line 3838 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 260: -#line 3672 "bfin-parse.y" + case 262: +#line 3844 "bfin-parse.y" { (yyval.modcodes).s0 = 0; } break; - case 261: -#line 3676 "bfin-parse.y" + case 263: +#line 3848 "bfin-parse.y" { (yyval.modcodes).s0 = 1; } break; - case 262: -#line 3683 "bfin-parse.y" + case 264: +#line 3855 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 263: -#line 3687 "bfin-parse.y" + case 265: +#line 3859 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 264: -#line 3691 "bfin-parse.y" + case 266: +#line 3863 "bfin-parse.y" { (yyval.r0).r0 = 3; } break; - case 265: -#line 3695 "bfin-parse.y" + case 267: +#line 3867 "bfin-parse.y" { (yyval.r0).r0 = 2; } break; - case 266: -#line 3701 "bfin-parse.y" + case 268: +#line 3873 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 267: -#line 3705 "bfin-parse.y" + case 269: +#line 3877 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 268: -#line 3712 "bfin-parse.y" + case 270: +#line 3884 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 1; } break; - case 269: -#line 3717 "bfin-parse.y" + case 271: +#line 3889 "bfin-parse.y" { if ((yyvsp[(2) - (3)].value) != M_T) return yyerror ("Bad modifier"); @@ -6614,8 +6792,8 @@ yyreduce: } break; - case 270: -#line 3724 "bfin-parse.y" + case 272: +#line 3896 "bfin-parse.y" { if ((yyvsp[(2) - (5)].value) != M_T) return yyerror ("Bad modifier"); @@ -6624,8 +6802,8 @@ yyreduce: } break; - case 271: -#line 3731 "bfin-parse.y" + case 273: +#line 3903 "bfin-parse.y" { if ((yyvsp[(4) - (5)].value) != M_T) return yyerror ("Bad modifier"); @@ -6634,36 +6812,36 @@ yyreduce: } break; - case 272: -#line 3743 "bfin-parse.y" + case 274: +#line 3915 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 273: -#line 3747 "bfin-parse.y" + case 275: +#line 3919 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 274: -#line 3751 "bfin-parse.y" + case 276: +#line 3923 "bfin-parse.y" { (yyval.r0).r0 = 2; } break; - case 275: -#line 3757 "bfin-parse.y" + case 277: +#line 3929 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 276: -#line 3761 "bfin-parse.y" + case 278: +#line 3933 "bfin-parse.y" { if ((yyvsp[(2) - (3)].value) == M_W32) (yyval.r0).r0 = 1; @@ -6672,15 +6850,15 @@ yyreduce: } break; - case 277: -#line 3770 "bfin-parse.y" + case 279: +#line 3942 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 278: -#line 3774 "bfin-parse.y" + case 280: +#line 3946 "bfin-parse.y" { if ((yyvsp[(2) - (3)].value) == M_IU) (yyval.r0).r0 = 3; @@ -6689,78 +6867,78 @@ yyreduce: } break; - case 279: -#line 3783 "bfin-parse.y" + case 281: +#line 3955 "bfin-parse.y" { (yyval.reg) = (yyvsp[(3) - (4)].reg); } break; - case 280: -#line 3789 "bfin-parse.y" + case 282: +#line 3961 "bfin-parse.y" { (yyval.reg) = (yyvsp[(2) - (4)].reg); } break; - case 281: -#line 3798 "bfin-parse.y" + case 283: +#line 3970 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 282: -#line 3802 "bfin-parse.y" + case 284: +#line 3974 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 283: -#line 3809 "bfin-parse.y" + case 285: +#line 3981 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 284: -#line 3813 "bfin-parse.y" + case 286: +#line 3985 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 285: -#line 3817 "bfin-parse.y" + case 287: +#line 3989 "bfin-parse.y" { (yyval.r0).r0 = 2; } break; - case 286: -#line 3821 "bfin-parse.y" + case 288: +#line 3993 "bfin-parse.y" { (yyval.r0).r0 = 3; } break; - case 287: -#line 3828 "bfin-parse.y" + case 289: +#line 4000 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 288: -#line 3832 "bfin-parse.y" + case 290: +#line 4004 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 289: -#line 3839 "bfin-parse.y" + case 291: +#line 4011 "bfin-parse.y" { (yyval.modcodes).r0 = 1; /* HL. */ (yyval.modcodes).s0 = 0; /* s. */ @@ -6769,8 +6947,8 @@ yyreduce: } break; - case 290: -#line 3847 "bfin-parse.y" + case 292: +#line 4019 "bfin-parse.y" { (yyval.modcodes).r0 = 1; /* HL. */ (yyval.modcodes).s0 = 0; /* s. */ @@ -6779,8 +6957,8 @@ yyreduce: } break; - case 291: -#line 3855 "bfin-parse.y" + case 293: +#line 4027 "bfin-parse.y" { (yyval.modcodes).r0 = 0; /* HL. */ (yyval.modcodes).s0 = 0; /* s. */ @@ -6789,8 +6967,8 @@ yyreduce: } break; - case 292: -#line 3863 "bfin-parse.y" + case 294: +#line 4035 "bfin-parse.y" { (yyval.modcodes).r0 = 0; /* HL. */ (yyval.modcodes).s0 = 0; /* s. */ @@ -6799,8 +6977,8 @@ yyreduce: } break; - case 293: -#line 3871 "bfin-parse.y" + case 295: +#line 4043 "bfin-parse.y" { (yyval.modcodes).r0 = 1; /* HL. */ (yyval.modcodes).s0 = 1; /* s. */ @@ -6809,8 +6987,8 @@ yyreduce: } break; - case 294: -#line 3878 "bfin-parse.y" + case 296: +#line 4050 "bfin-parse.y" { (yyval.modcodes).r0 = 1; /* HL. */ (yyval.modcodes).s0 = 1; /* s. */ @@ -6819,8 +6997,8 @@ yyreduce: } break; - case 295: -#line 3885 "bfin-parse.y" + case 297: +#line 4057 "bfin-parse.y" { (yyval.modcodes).r0 = 0; /* HL. */ (yyval.modcodes).s0 = 1; /* s. */ @@ -6829,8 +7007,8 @@ yyreduce: } break; - case 296: -#line 3893 "bfin-parse.y" + case 298: +#line 4065 "bfin-parse.y" { (yyval.modcodes).r0 = 0; /* HL. */ (yyval.modcodes).s0 = 1; /* s. */ @@ -6839,83 +7017,88 @@ yyreduce: } break; - case 297: -#line 3903 "bfin-parse.y" + case 299: +#line 4075 "bfin-parse.y" { (yyval.modcodes).s0 = 0; /* s. */ (yyval.modcodes).x0 = 0; /* HL. */ } break; - case 298: -#line 3908 "bfin-parse.y" + case 300: +#line 4080 "bfin-parse.y" { (yyval.modcodes).s0 = 0; /* s. */ (yyval.modcodes).x0 = 1; /* HL. */ } break; - case 299: -#line 3913 "bfin-parse.y" + case 301: +#line 4085 "bfin-parse.y" { (yyval.modcodes).s0 = 1; /* s. */ (yyval.modcodes).x0 = 0; /* HL. */ } break; - case 300: -#line 3918 "bfin-parse.y" + case 302: +#line 4090 "bfin-parse.y" { (yyval.modcodes).s0 = 1; /* s. */ (yyval.modcodes).x0 = 1; /* HL. */ } break; - case 301: -#line 3925 "bfin-parse.y" + case 303: +#line 4097 "bfin-parse.y" { (yyval.modcodes).x0 = 2; } break; - case 302: -#line 3929 "bfin-parse.y" + case 304: +#line 4101 "bfin-parse.y" { (yyval.modcodes).x0 = 0; } break; - case 303: -#line 3933 "bfin-parse.y" + case 305: +#line 4105 "bfin-parse.y" { (yyval.modcodes).x0 = 1; } break; - case 304: -#line 3942 "bfin-parse.y" + case 306: +#line 4114 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (2)].reg); } break; - case 305: -#line 3949 "bfin-parse.y" + case 307: +#line 4121 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (2)].reg); } break; - case 306: -#line 3956 "bfin-parse.y" + case 308: +#line 4128 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (2)].reg); } break; - case 307: -#line 3963 "bfin-parse.y" + case 309: +#line 4135 "bfin-parse.y" { + if (IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_EVEN ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A1 to even register"); + else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_EVEN ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A0 to odd register"); + (yyval.macfunc).w = 1; (yyval.macfunc).P = 1; (yyval.macfunc).n = IS_A1 ((yyvsp[(3) - (3)].reg)); @@ -6923,16 +7106,11 @@ yyreduce: (yyval.macfunc).dst = (yyvsp[(1) - (3)].reg); (yyval.macfunc).s0.regno = 0; (yyval.macfunc).s1.regno = 0; - - if (IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_EVEN ((yyvsp[(1) - (3)].reg))) - return yyerror ("Cannot move A1 to even register"); - else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_EVEN ((yyvsp[(1) - (3)].reg))) - return yyerror ("Cannot move A0 to odd register"); } break; - case 308: -#line 3978 "bfin-parse.y" + case 310: +#line 4150 "bfin-parse.y" { (yyval.macfunc) = (yyvsp[(1) - (1)].macfunc); (yyval.macfunc).w = 0; (yyval.macfunc).P = 0; @@ -6940,9 +7118,14 @@ yyreduce: } break; - case 309: -#line 3984 "bfin-parse.y" + case 311: +#line 4156 "bfin-parse.y" { + if ((yyvsp[(4) - (5)].macfunc).n && IS_EVEN ((yyvsp[(1) - (5)].reg))) + return yyerror ("Cannot move A1 to even register"); + else if (!(yyvsp[(4) - (5)].macfunc).n && !IS_EVEN ((yyvsp[(1) - (5)].reg))) + return yyerror ("Cannot move A0 to odd register"); + (yyval.macfunc) = (yyvsp[(4) - (5)].macfunc); (yyval.macfunc).w = 1; (yyval.macfunc).P = 1; @@ -6950,9 +7133,14 @@ yyreduce: } break; - case 310: -#line 3992 "bfin-parse.y" + case 312: +#line 4169 "bfin-parse.y" { + if ((yyvsp[(4) - (5)].macfunc).n && !IS_H ((yyvsp[(1) - (5)].reg))) + return yyerror ("Cannot move A1 to low half of register"); + else if (!(yyvsp[(4) - (5)].macfunc).n && IS_H ((yyvsp[(1) - (5)].reg))) + return yyerror ("Cannot move A0 to high half of register"); + (yyval.macfunc) = (yyvsp[(4) - (5)].macfunc); (yyval.macfunc).w = 1; (yyval.macfunc).P = 0; @@ -6960,9 +7148,14 @@ yyreduce: } break; - case 311: -#line 4000 "bfin-parse.y" + case 313: +#line 4182 "bfin-parse.y" { + if (IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_H ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A1 to low half of register"); + else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_H ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A0 to high half of register"); + (yyval.macfunc).w = 1; (yyval.macfunc).P = 0; (yyval.macfunc).n = IS_A1 ((yyvsp[(3) - (3)].reg)); @@ -6970,16 +7163,11 @@ yyreduce: (yyval.macfunc).dst = (yyvsp[(1) - (3)].reg); (yyval.macfunc).s0.regno = 0; (yyval.macfunc).s1.regno = 0; - - if (IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_H ((yyvsp[(1) - (3)].reg))) - return yyerror ("Cannot move A1 to low half of register"); - else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_H ((yyvsp[(1) - (3)].reg))) - return yyerror ("Cannot move A0 to high half of register"); } break; - case 312: -#line 4018 "bfin-parse.y" + case 314: +#line 4200 "bfin-parse.y" { (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg)); (yyval.macfunc).op = 0; @@ -6988,8 +7176,8 @@ yyreduce: } break; - case 313: -#line 4025 "bfin-parse.y" + case 315: +#line 4207 "bfin-parse.y" { (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg)); (yyval.macfunc).op = 1; @@ -6998,8 +7186,8 @@ yyreduce: } break; - case 314: -#line 4032 "bfin-parse.y" + case 316: +#line 4214 "bfin-parse.y" { (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg)); (yyval.macfunc).op = 2; @@ -7008,8 +7196,8 @@ yyreduce: } break; - case 315: -#line 4042 "bfin-parse.y" + case 317: +#line 4224 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -7021,72 +7209,72 @@ yyreduce: } break; - case 316: -#line 4055 "bfin-parse.y" + case 318: +#line 4237 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 317: -#line 4059 "bfin-parse.y" + case 319: +#line 4241 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 318: -#line 4063 "bfin-parse.y" + case 320: +#line 4245 "bfin-parse.y" { (yyval.r0).r0 = 2; } break; - case 319: -#line 4067 "bfin-parse.y" + case 321: +#line 4249 "bfin-parse.y" { (yyval.r0).r0 = 3; } break; - case 320: -#line 4074 "bfin-parse.y" + case 322: +#line 4256 "bfin-parse.y" { - (yyval.modcodes).r0 = (yyvsp[(3) - (3)].reg).regno; - (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; - (yyval.modcodes).s0 = 0; + (yyval.modcodes).r0 = (yyvsp[(3) - (3)].reg).regno; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 0; } break; - case 321: -#line 4080 "bfin-parse.y" + case 323: +#line 4262 "bfin-parse.y" { - (yyval.modcodes).r0 = 0x18; - (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; - (yyval.modcodes).s0 = 0; + (yyval.modcodes).r0 = 0x18; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 0; } break; - case 322: -#line 4086 "bfin-parse.y" + case 324: +#line 4268 "bfin-parse.y" { - (yyval.modcodes).r0 = (yyvsp[(1) - (3)].reg).regno; - (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; - (yyval.modcodes).s0 = 1; + (yyval.modcodes).r0 = (yyvsp[(1) - (3)].reg).regno; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 1; } break; - case 323: -#line 4092 "bfin-parse.y" + case 325: +#line 4274 "bfin-parse.y" { - (yyval.modcodes).r0 = 0x18; - (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; - (yyval.modcodes).s0 = 1; + (yyval.modcodes).r0 = 0x18; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 1; } break; - case 324: -#line 4102 "bfin-parse.y" + case 326: +#line 4284 "bfin-parse.y" { Expr_Node_Value val; val.s_value = S_GET_NAME((yyvsp[(1) - (1)].symbol)); @@ -7094,23 +7282,23 @@ yyreduce: } break; - case 325: -#line 4111 "bfin-parse.y" + case 327: +#line 4293 "bfin-parse.y" { (yyval.value) = BFD_RELOC_BFIN_GOT; } break; - case 326: -#line 4113 "bfin-parse.y" + case 328: +#line 4295 "bfin-parse.y" { (yyval.value) = BFD_RELOC_BFIN_GOT17M4; } break; - case 327: -#line 4115 "bfin-parse.y" + case 329: +#line 4297 "bfin-parse.y" { (yyval.value) = BFD_RELOC_BFIN_FUNCDESC_GOT17M4; } break; - case 328: -#line 4119 "bfin-parse.y" + case 330: +#line 4301 "bfin-parse.y" { Expr_Node_Value val; val.i_value = (yyvsp[(3) - (3)].value); @@ -7118,29 +7306,29 @@ yyreduce: } break; - case 329: -#line 4127 "bfin-parse.y" + case 331: +#line 4309 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } break; - case 330: -#line 4131 "bfin-parse.y" + case 332: +#line 4313 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } break; - case 331: -#line 4138 "bfin-parse.y" + case 333: +#line 4320 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (3)].expr); } break; - case 332: -#line 4144 "bfin-parse.y" + case 334: +#line 4326 "bfin-parse.y" { Expr_Node_Value val; val.i_value = (yyvsp[(1) - (1)].value); @@ -7148,113 +7336,113 @@ yyreduce: } break; - case 333: -#line 4150 "bfin-parse.y" + case 335: +#line 4332 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } break; - case 334: -#line 4154 "bfin-parse.y" + case 336: +#line 4336 "bfin-parse.y" { (yyval.expr) = (yyvsp[(2) - (3)].expr); } break; - case 335: -#line 4158 "bfin-parse.y" + case 337: +#line 4340 "bfin-parse.y" { (yyval.expr) = unary (Expr_Op_Type_COMP, (yyvsp[(2) - (2)].expr)); } break; - case 336: -#line 4162 "bfin-parse.y" + case 338: +#line 4344 "bfin-parse.y" { (yyval.expr) = unary (Expr_Op_Type_NEG, (yyvsp[(2) - (2)].expr)); } break; - case 337: -#line 4168 "bfin-parse.y" + case 339: +#line 4350 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } break; - case 338: -#line 4174 "bfin-parse.y" + case 340: +#line 4356 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Mult, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 339: -#line 4178 "bfin-parse.y" + case 341: +#line 4360 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Div, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 340: -#line 4182 "bfin-parse.y" + case 342: +#line 4364 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Mod, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 341: -#line 4186 "bfin-parse.y" + case 343: +#line 4368 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Add, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 342: -#line 4190 "bfin-parse.y" + case 344: +#line 4372 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Sub, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 343: -#line 4194 "bfin-parse.y" + case 345: +#line 4376 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Lshift, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 344: -#line 4198 "bfin-parse.y" + case 346: +#line 4380 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Rshift, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 345: -#line 4202 "bfin-parse.y" + case 347: +#line 4384 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_BAND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 346: -#line 4206 "bfin-parse.y" + case 348: +#line 4388 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_LOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 347: -#line 4210 "bfin-parse.y" + case 349: +#line 4392 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_BOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 348: -#line 4214 "bfin-parse.y" + case 350: +#line 4396 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } @@ -7262,7 +7450,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 7266 "bfin-parse.c" +#line 7454 "bfin-parse.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -7476,7 +7664,7 @@ yyreturn: } -#line 4220 "bfin-parse.y" +#line 4402 "bfin-parse.y" EXPR_T @@ -7491,11 +7679,11 @@ mkexpr (int x, SYMBOL_T s) static int value_match (Expr_Node *expr, int sz, int sign, int mul, int issigned) { - long umax = (1L << sz) - 1; - long min = -1L << (sz - 1); - long max = (1L << (sz - 1)) - 1; + int umax = (1 << sz) - 1; + int min = -1 << (sz - 1); + int max = (1 << (sz - 1)) - 1; - long v = EXPR_VALUE (expr); + int v = (EXPR_VALUE (expr)) & 0xffffffff; if ((v % mul) != 0) { @@ -7577,7 +7765,7 @@ binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y) break; default: - error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__); + error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__); } return x; } @@ -7623,7 +7811,7 @@ unary (Expr_Op_Type op, Expr_Node *x) x->value.i_value = ~x->value.i_value; break; default: - error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__); + error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__); } return x; }