This file is indexed.

/usr/share/doc/gcc-4.8-base/gccint.html is in gcc-4.8-doc 4.8.4-2ubuntu1~14.04.4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

    1
    2
    3
    4
    5
    6
    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
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
  146
  147
  148
  149
  150
  151
  152
  153
  154
  155
  156
  157
  158
  159
  160
  161
  162
  163
  164
  165
  166
  167
  168
  169
  170
  171
  172
  173
  174
  175
  176
  177
  178
  179
  180
  181
  182
  183
  184
  185
  186
  187
  188
  189
  190
  191
  192
  193
  194
  195
  196
  197
  198
  199
  200
  201
  202
  203
  204
  205
  206
  207
  208
  209
  210
  211
  212
  213
  214
  215
  216
  217
  218
  219
  220
  221
  222
  223
  224
  225
  226
  227
  228
  229
  230
  231
  232
  233
  234
  235
  236
  237
  238
  239
  240
  241
  242
  243
  244
  245
  246
  247
  248
  249
  250
  251
  252
  253
  254
  255
  256
  257
  258
  259
  260
  261
  262
  263
  264
  265
  266
  267
  268
  269
  270
  271
  272
  273
  274
  275
  276
  277
  278
  279
  280
  281
  282
  283
  284
  285
  286
  287
  288
  289
  290
  291
  292
  293
  294
  295
  296
  297
  298
  299
  300
  301
  302
  303
  304
  305
  306
  307
  308
  309
  310
  311
  312
  313
  314
  315
  316
  317
  318
  319
  320
  321
  322
  323
  324
  325
  326
  327
  328
  329
  330
  331
  332
  333
  334
  335
  336
  337
  338
  339
  340
  341
  342
  343
  344
  345
  346
  347
  348
  349
  350
  351
  352
  353
  354
  355
  356
  357
  358
  359
  360
  361
  362
  363
  364
  365
  366
  367
  368
  369
  370
  371
  372
  373
  374
  375
  376
  377
  378
  379
  380
  381
  382
  383
  384
  385
  386
  387
  388
  389
  390
  391
  392
  393
  394
  395
  396
  397
  398
  399
  400
  401
  402
  403
  404
  405
  406
  407
  408
  409
  410
  411
  412
  413
  414
  415
  416
  417
  418
  419
  420
  421
  422
  423
  424
  425
  426
  427
  428
  429
  430
  431
  432
  433
  434
  435
  436
  437
  438
  439
  440
  441
  442
  443
  444
  445
  446
  447
  448
  449
  450
  451
  452
  453
  454
  455
  456
  457
  458
  459
  460
  461
  462
  463
  464
  465
  466
  467
  468
  469
  470
  471
  472
  473
  474
  475
  476
  477
  478
  479
  480
  481
  482
  483
  484
  485
  486
  487
  488
  489
  490
  491
  492
  493
  494
  495
  496
  497
  498
  499
  500
  501
  502
  503
  504
  505
  506
  507
  508
  509
  510
  511
  512
  513
  514
  515
  516
  517
  518
  519
  520
  521
  522
  523
  524
  525
  526
  527
  528
  529
  530
  531
  532
  533
  534
  535
  536
  537
  538
  539
  540
  541
  542
  543
  544
  545
  546
  547
  548
  549
  550
  551
  552
  553
  554
  555
  556
  557
  558
  559
  560
  561
  562
  563
  564
  565
  566
  567
  568
  569
  570
  571
  572
  573
  574
  575
  576
  577
  578
  579
  580
  581
  582
  583
  584
  585
  586
  587
  588
  589
  590
  591
  592
  593
  594
  595
  596
  597
  598
  599
  600
  601
  602
  603
  604
  605
  606
  607
  608
  609
  610
  611
  612
  613
  614
  615
  616
  617
  618
  619
  620
  621
  622
  623
  624
  625
  626
  627
  628
  629
  630
  631
  632
  633
  634
  635
  636
  637
  638
  639
  640
  641
  642
  643
  644
  645
  646
  647
  648
  649
  650
  651
  652
  653
  654
  655
  656
  657
  658
  659
  660
  661
  662
  663
  664
  665
  666
  667
  668
  669
  670
  671
  672
  673
  674
  675
  676
  677
  678
  679
  680
  681
  682
  683
  684
  685
  686
  687
  688
  689
  690
  691
  692
  693
  694
  695
  696
  697
  698
  699
  700
  701
  702
  703
  704
  705
  706
  707
  708
  709
  710
  711
  712
  713
  714
  715
  716
  717
  718
  719
  720
  721
  722
  723
  724
  725
  726
  727
  728
  729
  730
  731
  732
  733
  734
  735
  736
  737
  738
  739
  740
  741
  742
  743
  744
  745
  746
  747
  748
  749
  750
  751
  752
  753
  754
  755
  756
  757
  758
  759
  760
  761
  762
  763
  764
  765
  766
  767
  768
  769
  770
  771
  772
  773
  774
  775
  776
  777
  778
  779
  780
  781
  782
  783
  784
  785
  786
  787
  788
  789
  790
  791
  792
  793
  794
  795
  796
  797
  798
  799
  800
  801
  802
  803
  804
  805
  806
  807
  808
  809
  810
  811
  812
  813
  814
  815
  816
  817
  818
  819
  820
  821
  822
  823
  824
  825
  826
  827
  828
  829
  830
  831
  832
  833
  834
  835
  836
  837
  838
  839
  840
  841
  842
  843
  844
  845
  846
  847
  848
  849
  850
  851
  852
  853
  854
  855
  856
  857
  858
  859
  860
  861
  862
  863
  864
  865
  866
  867
  868
  869
  870
  871
  872
  873
  874
  875
  876
  877
  878
  879
  880
  881
  882
  883
  884
  885
  886
  887
  888
  889
  890
  891
  892
  893
  894
  895
  896
  897
  898
  899
  900
  901
  902
  903
  904
  905
  906
  907
  908
  909
  910
  911
  912
  913
  914
  915
  916
  917
  918
  919
  920
  921
  922
  923
  924
  925
  926
  927
  928
  929
  930
  931
  932
  933
  934
  935
  936
  937
  938
  939
  940
  941
  942
  943
  944
  945
  946
  947
  948
  949
  950
  951
  952
  953
  954
  955
  956
  957
  958
  959
  960
  961
  962
  963
  964
  965
  966
  967
  968
  969
  970
  971
  972
  973
  974
  975
  976
  977
  978
  979
  980
  981
  982
  983
  984
  985
  986
  987
  988
  989
  990
  991
  992
  993
  994
  995
  996
  997
  998
  999
 1000
 1001
 1002
 1003
 1004
 1005
 1006
 1007
 1008
 1009
 1010
 1011
 1012
 1013
 1014
 1015
 1016
 1017
 1018
 1019
 1020
 1021
 1022
 1023
 1024
 1025
 1026
 1027
 1028
 1029
 1030
 1031
 1032
 1033
 1034
 1035
 1036
 1037
 1038
 1039
 1040
 1041
 1042
 1043
 1044
 1045
 1046
 1047
 1048
 1049
 1050
 1051
 1052
 1053
 1054
 1055
 1056
 1057
 1058
 1059
 1060
 1061
 1062
 1063
 1064
 1065
 1066
 1067
 1068
 1069
 1070
 1071
 1072
 1073
 1074
 1075
 1076
 1077
 1078
 1079
 1080
 1081
 1082
 1083
 1084
 1085
 1086
 1087
 1088
 1089
 1090
 1091
 1092
 1093
 1094
 1095
 1096
 1097
 1098
 1099
 1100
 1101
 1102
 1103
 1104
 1105
 1106
 1107
 1108
 1109
 1110
 1111
 1112
 1113
 1114
 1115
 1116
 1117
 1118
 1119
 1120
 1121
 1122
 1123
 1124
 1125
 1126
 1127
 1128
 1129
 1130
 1131
 1132
 1133
 1134
 1135
 1136
 1137
 1138
 1139
 1140
 1141
 1142
 1143
 1144
 1145
 1146
 1147
 1148
 1149
 1150
 1151
 1152
 1153
 1154
 1155
 1156
 1157
 1158
 1159
 1160
 1161
 1162
 1163
 1164
 1165
 1166
 1167
 1168
 1169
 1170
 1171
 1172
 1173
 1174
 1175
 1176
 1177
 1178
 1179
 1180
 1181
 1182
 1183
 1184
 1185
 1186
 1187
 1188
 1189
 1190
 1191
 1192
 1193
 1194
 1195
 1196
 1197
 1198
 1199
 1200
 1201
 1202
 1203
 1204
 1205
 1206
 1207
 1208
 1209
 1210
 1211
 1212
 1213
 1214
 1215
 1216
 1217
 1218
 1219
 1220
 1221
 1222
 1223
 1224
 1225
 1226
 1227
 1228
 1229
 1230
 1231
 1232
 1233
 1234
 1235
 1236
 1237
 1238
 1239
 1240
 1241
 1242
 1243
 1244
 1245
 1246
 1247
 1248
 1249
 1250
 1251
 1252
 1253
 1254
 1255
 1256
 1257
 1258
 1259
 1260
 1261
 1262
 1263
 1264
 1265
 1266
 1267
 1268
 1269
 1270
 1271
 1272
 1273
 1274
 1275
 1276
 1277
 1278
 1279
 1280
 1281
 1282
 1283
 1284
 1285
 1286
 1287
 1288
 1289
 1290
 1291
 1292
 1293
 1294
 1295
 1296
 1297
 1298
 1299
 1300
 1301
 1302
 1303
 1304
 1305
 1306
 1307
 1308
 1309
 1310
 1311
 1312
 1313
 1314
 1315
 1316
 1317
 1318
 1319
 1320
 1321
 1322
 1323
 1324
 1325
 1326
 1327
 1328
 1329
 1330
 1331
 1332
 1333
 1334
 1335
 1336
 1337
 1338
 1339
 1340
 1341
 1342
 1343
 1344
 1345
 1346
 1347
 1348
 1349
 1350
 1351
 1352
 1353
 1354
 1355
 1356
 1357
 1358
 1359
 1360
 1361
 1362
 1363
 1364
 1365
 1366
 1367
 1368
 1369
 1370
 1371
 1372
 1373
 1374
 1375
 1376
 1377
 1378
 1379
 1380
 1381
 1382
 1383
 1384
 1385
 1386
 1387
 1388
 1389
 1390
 1391
 1392
 1393
 1394
 1395
 1396
 1397
 1398
 1399
 1400
 1401
 1402
 1403
 1404
 1405
 1406
 1407
 1408
 1409
 1410
 1411
 1412
 1413
 1414
 1415
 1416
 1417
 1418
 1419
 1420
 1421
 1422
 1423
 1424
 1425
 1426
 1427
 1428
 1429
 1430
 1431
 1432
 1433
 1434
 1435
 1436
 1437
 1438
 1439
 1440
 1441
 1442
 1443
 1444
 1445
 1446
 1447
 1448
 1449
 1450
 1451
 1452
 1453
 1454
 1455
 1456
 1457
 1458
 1459
 1460
 1461
 1462
 1463
 1464
 1465
 1466
 1467
 1468
 1469
 1470
 1471
 1472
 1473
 1474
 1475
 1476
 1477
 1478
 1479
 1480
 1481
 1482
 1483
 1484
 1485
 1486
 1487
 1488
 1489
 1490
 1491
 1492
 1493
 1494
 1495
 1496
 1497
 1498
 1499
 1500
 1501
 1502
 1503
 1504
 1505
 1506
 1507
 1508
 1509
 1510
 1511
 1512
 1513
 1514
 1515
 1516
 1517
 1518
 1519
 1520
 1521
 1522
 1523
 1524
 1525
 1526
 1527
 1528
 1529
 1530
 1531
 1532
 1533
 1534
 1535
 1536
 1537
 1538
 1539
 1540
 1541
 1542
 1543
 1544
 1545
 1546
 1547
 1548
 1549
 1550
 1551
 1552
 1553
 1554
 1555
 1556
 1557
 1558
 1559
 1560
 1561
 1562
 1563
 1564
 1565
 1566
 1567
 1568
 1569
 1570
 1571
 1572
 1573
 1574
 1575
 1576
 1577
 1578
 1579
 1580
 1581
 1582
 1583
 1584
 1585
 1586
 1587
 1588
 1589
 1590
 1591
 1592
 1593
 1594
 1595
 1596
 1597
 1598
 1599
 1600
 1601
 1602
 1603
 1604
 1605
 1606
 1607
 1608
 1609
 1610
 1611
 1612
 1613
 1614
 1615
 1616
 1617
 1618
 1619
 1620
 1621
 1622
 1623
 1624
 1625
 1626
 1627
 1628
 1629
 1630
 1631
 1632
 1633
 1634
 1635
 1636
 1637
 1638
 1639
 1640
 1641
 1642
 1643
 1644
 1645
 1646
 1647
 1648
 1649
 1650
 1651
 1652
 1653
 1654
 1655
 1656
 1657
 1658
 1659
 1660
 1661
 1662
 1663
 1664
 1665
 1666
 1667
 1668
 1669
 1670
 1671
 1672
 1673
 1674
 1675
 1676
 1677
 1678
 1679
 1680
 1681
 1682
 1683
 1684
 1685
 1686
 1687
 1688
 1689
 1690
 1691
 1692
 1693
 1694
 1695
 1696
 1697
 1698
 1699
 1700
 1701
 1702
 1703
 1704
 1705
 1706
 1707
 1708
 1709
 1710
 1711
 1712
 1713
 1714
 1715
 1716
 1717
 1718
 1719
 1720
 1721
 1722
 1723
 1724
 1725
 1726
 1727
 1728
 1729
 1730
 1731
 1732
 1733
 1734
 1735
 1736
 1737
 1738
 1739
 1740
 1741
 1742
 1743
 1744
 1745
 1746
 1747
 1748
 1749
 1750
 1751
 1752
 1753
 1754
 1755
 1756
 1757
 1758
 1759
 1760
 1761
 1762
 1763
 1764
 1765
 1766
 1767
 1768
 1769
 1770
 1771
 1772
 1773
 1774
 1775
 1776
 1777
 1778
 1779
 1780
 1781
 1782
 1783
 1784
 1785
 1786
 1787
 1788
 1789
 1790
 1791
 1792
 1793
 1794
 1795
 1796
 1797
 1798
 1799
 1800
 1801
 1802
 1803
 1804
 1805
 1806
 1807
 1808
 1809
 1810
 1811
 1812
 1813
 1814
 1815
 1816
 1817
 1818
 1819
 1820
 1821
 1822
 1823
 1824
 1825
 1826
 1827
 1828
 1829
 1830
 1831
 1832
 1833
 1834
 1835
 1836
 1837
 1838
 1839
 1840
 1841
 1842
 1843
 1844
 1845
 1846
 1847
 1848
 1849
 1850
 1851
 1852
 1853
 1854
 1855
 1856
 1857
 1858
 1859
 1860
 1861
 1862
 1863
 1864
 1865
 1866
 1867
 1868
 1869
 1870
 1871
 1872
 1873
 1874
 1875
 1876
 1877
 1878
 1879
 1880
 1881
 1882
 1883
 1884
 1885
 1886
 1887
 1888
 1889
 1890
 1891
 1892
 1893
 1894
 1895
 1896
 1897
 1898
 1899
 1900
 1901
 1902
 1903
 1904
 1905
 1906
 1907
 1908
 1909
 1910
 1911
 1912
 1913
 1914
 1915
 1916
 1917
 1918
 1919
 1920
 1921
 1922
 1923
 1924
 1925
 1926
 1927
 1928
 1929
 1930
 1931
 1932
 1933
 1934
 1935
 1936
 1937
 1938
 1939
 1940
 1941
 1942
 1943
 1944
 1945
 1946
 1947
 1948
 1949
 1950
 1951
 1952
 1953
 1954
 1955
 1956
 1957
 1958
 1959
 1960
 1961
 1962
 1963
 1964
 1965
 1966
 1967
 1968
 1969
 1970
 1971
 1972
 1973
 1974
 1975
 1976
 1977
 1978
 1979
 1980
 1981
 1982
 1983
 1984
 1985
 1986
 1987
 1988
 1989
 1990
 1991
 1992
 1993
 1994
 1995
 1996
 1997
 1998
 1999
 2000
 2001
 2002
 2003
 2004
 2005
 2006
 2007
 2008
 2009
 2010
 2011
 2012
 2013
 2014
 2015
 2016
 2017
 2018
 2019
 2020
 2021
 2022
 2023
 2024
 2025
 2026
 2027
 2028
 2029
 2030
 2031
 2032
 2033
 2034
 2035
 2036
 2037
 2038
 2039
 2040
 2041
 2042
 2043
 2044
 2045
 2046
 2047
 2048
 2049
 2050
 2051
 2052
 2053
 2054
 2055
 2056
 2057
 2058
 2059
 2060
 2061
 2062
 2063
 2064
 2065
 2066
 2067
 2068
 2069
 2070
 2071
 2072
 2073
 2074
 2075
 2076
 2077
 2078
 2079
 2080
 2081
 2082
 2083
 2084
 2085
 2086
 2087
 2088
 2089
 2090
 2091
 2092
 2093
 2094
 2095
 2096
 2097
 2098
 2099
 2100
 2101
 2102
 2103
 2104
 2105
 2106
 2107
 2108
 2109
 2110
 2111
 2112
 2113
 2114
 2115
 2116
 2117
 2118
 2119
 2120
 2121
 2122
 2123
 2124
 2125
 2126
 2127
 2128
 2129
 2130
 2131
 2132
 2133
 2134
 2135
 2136
 2137
 2138
 2139
 2140
 2141
 2142
 2143
 2144
 2145
 2146
 2147
 2148
 2149
 2150
 2151
 2152
 2153
 2154
 2155
 2156
 2157
 2158
 2159
 2160
 2161
 2162
 2163
 2164
 2165
 2166
 2167
 2168
 2169
 2170
 2171
 2172
 2173
 2174
 2175
 2176
 2177
 2178
 2179
 2180
 2181
 2182
 2183
 2184
 2185
 2186
 2187
 2188
 2189
 2190
 2191
 2192
 2193
 2194
 2195
 2196
 2197
 2198
 2199
 2200
 2201
 2202
 2203
 2204
 2205
 2206
 2207
 2208
 2209
 2210
 2211
 2212
 2213
 2214
 2215
 2216
 2217
 2218
 2219
 2220
 2221
 2222
 2223
 2224
 2225
 2226
 2227
 2228
 2229
 2230
 2231
 2232
 2233
 2234
 2235
 2236
 2237
 2238
 2239
 2240
 2241
 2242
 2243
 2244
 2245
 2246
 2247
 2248
 2249
 2250
 2251
 2252
 2253
 2254
 2255
 2256
 2257
 2258
 2259
 2260
 2261
 2262
 2263
 2264
 2265
 2266
 2267
 2268
 2269
 2270
 2271
 2272
 2273
 2274
 2275
 2276
 2277
 2278
 2279
 2280
 2281
 2282
 2283
 2284
 2285
 2286
 2287
 2288
 2289
 2290
 2291
 2292
 2293
 2294
 2295
 2296
 2297
 2298
 2299
 2300
 2301
 2302
 2303
 2304
 2305
 2306
 2307
 2308
 2309
 2310
 2311
 2312
 2313
 2314
 2315
 2316
 2317
 2318
 2319
 2320
 2321
 2322
 2323
 2324
 2325
 2326
 2327
 2328
 2329
 2330
 2331
 2332
 2333
 2334
 2335
 2336
 2337
 2338
 2339
 2340
 2341
 2342
 2343
 2344
 2345
 2346
 2347
 2348
 2349
 2350
 2351
 2352
 2353
 2354
 2355
 2356
 2357
 2358
 2359
 2360
 2361
 2362
 2363
 2364
 2365
 2366
 2367
 2368
 2369
 2370
 2371
 2372
 2373
 2374
 2375
 2376
 2377
 2378
 2379
 2380
 2381
 2382
 2383
 2384
 2385
 2386
 2387
 2388
 2389
 2390
 2391
 2392
 2393
 2394
 2395
 2396
 2397
 2398
 2399
 2400
 2401
 2402
 2403
 2404
 2405
 2406
 2407
 2408
 2409
 2410
 2411
 2412
 2413
 2414
 2415
 2416
 2417
 2418
 2419
 2420
 2421
 2422
 2423
 2424
 2425
 2426
 2427
 2428
 2429
 2430
 2431
 2432
 2433
 2434
 2435
 2436
 2437
 2438
 2439
 2440
 2441
 2442
 2443
 2444
 2445
 2446
 2447
 2448
 2449
 2450
 2451
 2452
 2453
 2454
 2455
 2456
 2457
 2458
 2459
 2460
 2461
 2462
 2463
 2464
 2465
 2466
 2467
 2468
 2469
 2470
 2471
 2472
 2473
 2474
 2475
 2476
 2477
 2478
 2479
 2480
 2481
 2482
 2483
 2484
 2485
 2486
 2487
 2488
 2489
 2490
 2491
 2492
 2493
 2494
 2495
 2496
 2497
 2498
 2499
 2500
 2501
 2502
 2503
 2504
 2505
 2506
 2507
 2508
 2509
 2510
 2511
 2512
 2513
 2514
 2515
 2516
 2517
 2518
 2519
 2520
 2521
 2522
 2523
 2524
 2525
 2526
 2527
 2528
 2529
 2530
 2531
 2532
 2533
 2534
 2535
 2536
 2537
 2538
 2539
 2540
 2541
 2542
 2543
 2544
 2545
 2546
 2547
 2548
 2549
 2550
 2551
 2552
 2553
 2554
 2555
 2556
 2557
 2558
 2559
 2560
 2561
 2562
 2563
 2564
 2565
 2566
 2567
 2568
 2569
 2570
 2571
 2572
 2573
 2574
 2575
 2576
 2577
 2578
 2579
 2580
 2581
 2582
 2583
 2584
 2585
 2586
 2587
 2588
 2589
 2590
 2591
 2592
 2593
 2594
 2595
 2596
 2597
 2598
 2599
 2600
 2601
 2602
 2603
 2604
 2605
 2606
 2607
 2608
 2609
 2610
 2611
 2612
 2613
 2614
 2615
 2616
 2617
 2618
 2619
 2620
 2621
 2622
 2623
 2624
 2625
 2626
 2627
 2628
 2629
 2630
 2631
 2632
 2633
 2634
 2635
 2636
 2637
 2638
 2639
 2640
 2641
 2642
 2643
 2644
 2645
 2646
 2647
 2648
 2649
 2650
 2651
 2652
 2653
 2654
 2655
 2656
 2657
 2658
 2659
 2660
 2661
 2662
 2663
 2664
 2665
 2666
 2667
 2668
 2669
 2670
 2671
 2672
 2673
 2674
 2675
 2676
 2677
 2678
 2679
 2680
 2681
 2682
 2683
 2684
 2685
 2686
 2687
 2688
 2689
 2690
 2691
 2692
 2693
 2694
 2695
 2696
 2697
 2698
 2699
 2700
 2701
 2702
 2703
 2704
 2705
 2706
 2707
 2708
 2709
 2710
 2711
 2712
 2713
 2714
 2715
 2716
 2717
 2718
 2719
 2720
 2721
 2722
 2723
 2724
 2725
 2726
 2727
 2728
 2729
 2730
 2731
 2732
 2733
 2734
 2735
 2736
 2737
 2738
 2739
 2740
 2741
 2742
 2743
 2744
 2745
 2746
 2747
 2748
 2749
 2750
 2751
 2752
 2753
 2754
 2755
 2756
 2757
 2758
 2759
 2760
 2761
 2762
 2763
 2764
 2765
 2766
 2767
 2768
 2769
 2770
 2771
 2772
 2773
 2774
 2775
 2776
 2777
 2778
 2779
 2780
 2781
 2782
 2783
 2784
 2785
 2786
 2787
 2788
 2789
 2790
 2791
 2792
 2793
 2794
 2795
 2796
 2797
 2798
 2799
 2800
 2801
 2802
 2803
 2804
 2805
 2806
 2807
 2808
 2809
 2810
 2811
 2812
 2813
 2814
 2815
 2816
 2817
 2818
 2819
 2820
 2821
 2822
 2823
 2824
 2825
 2826
 2827
 2828
 2829
 2830
 2831
 2832
 2833
 2834
 2835
 2836
 2837
 2838
 2839
 2840
 2841
 2842
 2843
 2844
 2845
 2846
 2847
 2848
 2849
 2850
 2851
 2852
 2853
 2854
 2855
 2856
 2857
 2858
 2859
 2860
 2861
 2862
 2863
 2864
 2865
 2866
 2867
 2868
 2869
 2870
 2871
 2872
 2873
 2874
 2875
 2876
 2877
 2878
 2879
 2880
 2881
 2882
 2883
 2884
 2885
 2886
 2887
 2888
 2889
 2890
 2891
 2892
 2893
 2894
 2895
 2896
 2897
 2898
 2899
 2900
 2901
 2902
 2903
 2904
 2905
 2906
 2907
 2908
 2909
 2910
 2911
 2912
 2913
 2914
 2915
 2916
 2917
 2918
 2919
 2920
 2921
 2922
 2923
 2924
 2925
 2926
 2927
 2928
 2929
 2930
 2931
 2932
 2933
 2934
 2935
 2936
 2937
 2938
 2939
 2940
 2941
 2942
 2943
 2944
 2945
 2946
 2947
 2948
 2949
 2950
 2951
 2952
 2953
 2954
 2955
 2956
 2957
 2958
 2959
 2960
 2961
 2962
 2963
 2964
 2965
 2966
 2967
 2968
 2969
 2970
 2971
 2972
 2973
 2974
 2975
 2976
 2977
 2978
 2979
 2980
 2981
 2982
 2983
 2984
 2985
 2986
 2987
 2988
 2989
 2990
 2991
 2992
 2993
 2994
 2995
 2996
 2997
 2998
 2999
 3000
 3001
 3002
 3003
 3004
 3005
 3006
 3007
 3008
 3009
 3010
 3011
 3012
 3013
 3014
 3015
 3016
 3017
 3018
 3019
 3020
 3021
 3022
 3023
 3024
 3025
 3026
 3027
 3028
 3029
 3030
 3031
 3032
 3033
 3034
 3035
 3036
 3037
 3038
 3039
 3040
 3041
 3042
 3043
 3044
 3045
 3046
 3047
 3048
 3049
 3050
 3051
 3052
 3053
 3054
 3055
 3056
 3057
 3058
 3059
 3060
 3061
 3062
 3063
 3064
 3065
 3066
 3067
 3068
 3069
 3070
 3071
 3072
 3073
 3074
 3075
 3076
 3077
 3078
 3079
 3080
 3081
 3082
 3083
 3084
 3085
 3086
 3087
 3088
 3089
 3090
 3091
 3092
 3093
 3094
 3095
 3096
 3097
 3098
 3099
 3100
 3101
 3102
 3103
 3104
 3105
 3106
 3107
 3108
 3109
 3110
 3111
 3112
 3113
 3114
 3115
 3116
 3117
 3118
 3119
 3120
 3121
 3122
 3123
 3124
 3125
 3126
 3127
 3128
 3129
 3130
 3131
 3132
 3133
 3134
 3135
 3136
 3137
 3138
 3139
 3140
 3141
 3142
 3143
 3144
 3145
 3146
 3147
 3148
 3149
 3150
 3151
 3152
 3153
 3154
 3155
 3156
 3157
 3158
 3159
 3160
 3161
 3162
 3163
 3164
 3165
 3166
 3167
 3168
 3169
 3170
 3171
 3172
 3173
 3174
 3175
 3176
 3177
 3178
 3179
 3180
 3181
 3182
 3183
 3184
 3185
 3186
 3187
 3188
 3189
 3190
 3191
 3192
 3193
 3194
 3195
 3196
 3197
 3198
 3199
 3200
 3201
 3202
 3203
 3204
 3205
 3206
 3207
 3208
 3209
 3210
 3211
 3212
 3213
 3214
 3215
 3216
 3217
 3218
 3219
 3220
 3221
 3222
 3223
 3224
 3225
 3226
 3227
 3228
 3229
 3230
 3231
 3232
 3233
 3234
 3235
 3236
 3237
 3238
 3239
 3240
 3241
 3242
 3243
 3244
 3245
 3246
 3247
 3248
 3249
 3250
 3251
 3252
 3253
 3254
 3255
 3256
 3257
 3258
 3259
 3260
 3261
 3262
 3263
 3264
 3265
 3266
 3267
 3268
 3269
 3270
 3271
 3272
 3273
 3274
 3275
 3276
 3277
 3278
 3279
 3280
 3281
 3282
 3283
 3284
 3285
 3286
 3287
 3288
 3289
 3290
 3291
 3292
 3293
 3294
 3295
 3296
 3297
 3298
 3299
 3300
 3301
 3302
 3303
 3304
 3305
 3306
 3307
 3308
 3309
 3310
 3311
 3312
 3313
 3314
 3315
 3316
 3317
 3318
 3319
 3320
 3321
 3322
 3323
 3324
 3325
 3326
 3327
 3328
 3329
 3330
 3331
 3332
 3333
 3334
 3335
 3336
 3337
 3338
 3339
 3340
 3341
 3342
 3343
 3344
 3345
 3346
 3347
 3348
 3349
 3350
 3351
 3352
 3353
 3354
 3355
 3356
 3357
 3358
 3359
 3360
 3361
 3362
 3363
 3364
 3365
 3366
 3367
 3368
 3369
 3370
 3371
 3372
 3373
 3374
 3375
 3376
 3377
 3378
 3379
 3380
 3381
 3382
 3383
 3384
 3385
 3386
 3387
 3388
 3389
 3390
 3391
 3392
 3393
 3394
 3395
 3396
 3397
 3398
 3399
 3400
 3401
 3402
 3403
 3404
 3405
 3406
 3407
 3408
 3409
 3410
 3411
 3412
 3413
 3414
 3415
 3416
 3417
 3418
 3419
 3420
 3421
 3422
 3423
 3424
 3425
 3426
 3427
 3428
 3429
 3430
 3431
 3432
 3433
 3434
 3435
 3436
 3437
 3438
 3439
 3440
 3441
 3442
 3443
 3444
 3445
 3446
 3447
 3448
 3449
 3450
 3451
 3452
 3453
 3454
 3455
 3456
 3457
 3458
 3459
 3460
 3461
 3462
 3463
 3464
 3465
 3466
 3467
 3468
 3469
 3470
 3471
 3472
 3473
 3474
 3475
 3476
 3477
 3478
 3479
 3480
 3481
 3482
 3483
 3484
 3485
 3486
 3487
 3488
 3489
 3490
 3491
 3492
 3493
 3494
 3495
 3496
 3497
 3498
 3499
 3500
 3501
 3502
 3503
 3504
 3505
 3506
 3507
 3508
 3509
 3510
 3511
 3512
 3513
 3514
 3515
 3516
 3517
 3518
 3519
 3520
 3521
 3522
 3523
 3524
 3525
 3526
 3527
 3528
 3529
 3530
 3531
 3532
 3533
 3534
 3535
 3536
 3537
 3538
 3539
 3540
 3541
 3542
 3543
 3544
 3545
 3546
 3547
 3548
 3549
 3550
 3551
 3552
 3553
 3554
 3555
 3556
 3557
 3558
 3559
 3560
 3561
 3562
 3563
 3564
 3565
 3566
 3567
 3568
 3569
 3570
 3571
 3572
 3573
 3574
 3575
 3576
 3577
 3578
 3579
 3580
 3581
 3582
 3583
 3584
 3585
 3586
 3587
 3588
 3589
 3590
 3591
 3592
 3593
 3594
 3595
 3596
 3597
 3598
 3599
 3600
 3601
 3602
 3603
 3604
 3605
 3606
 3607
 3608
 3609
 3610
 3611
 3612
 3613
 3614
 3615
 3616
 3617
 3618
 3619
 3620
 3621
 3622
 3623
 3624
 3625
 3626
 3627
 3628
 3629
 3630
 3631
 3632
 3633
 3634
 3635
 3636
 3637
 3638
 3639
 3640
 3641
 3642
 3643
 3644
 3645
 3646
 3647
 3648
 3649
 3650
 3651
 3652
 3653
 3654
 3655
 3656
 3657
 3658
 3659
 3660
 3661
 3662
 3663
 3664
 3665
 3666
 3667
 3668
 3669
 3670
 3671
 3672
 3673
 3674
 3675
 3676
 3677
 3678
 3679
 3680
 3681
 3682
 3683
 3684
 3685
 3686
 3687
 3688
 3689
 3690
 3691
 3692
 3693
 3694
 3695
 3696
 3697
 3698
 3699
 3700
 3701
 3702
 3703
 3704
 3705
 3706
 3707
 3708
 3709
 3710
 3711
 3712
 3713
 3714
 3715
 3716
 3717
 3718
 3719
 3720
 3721
 3722
 3723
 3724
 3725
 3726
 3727
 3728
 3729
 3730
 3731
 3732
 3733
 3734
 3735
 3736
 3737
 3738
 3739
 3740
 3741
 3742
 3743
 3744
 3745
 3746
 3747
 3748
 3749
 3750
 3751
 3752
 3753
 3754
 3755
 3756
 3757
 3758
 3759
 3760
 3761
 3762
 3763
 3764
 3765
 3766
 3767
 3768
 3769
 3770
 3771
 3772
 3773
 3774
 3775
 3776
 3777
 3778
 3779
 3780
 3781
 3782
 3783
 3784
 3785
 3786
 3787
 3788
 3789
 3790
 3791
 3792
 3793
 3794
 3795
 3796
 3797
 3798
 3799
 3800
 3801
 3802
 3803
 3804
 3805
 3806
 3807
 3808
 3809
 3810
 3811
 3812
 3813
 3814
 3815
 3816
 3817
 3818
 3819
 3820
 3821
 3822
 3823
 3824
 3825
 3826
 3827
 3828
 3829
 3830
 3831
 3832
 3833
 3834
 3835
 3836
 3837
 3838
 3839
 3840
 3841
 3842
 3843
 3844
 3845
 3846
 3847
 3848
 3849
 3850
 3851
 3852
 3853
 3854
 3855
 3856
 3857
 3858
 3859
 3860
 3861
 3862
 3863
 3864
 3865
 3866
 3867
 3868
 3869
 3870
 3871
 3872
 3873
 3874
 3875
 3876
 3877
 3878
 3879
 3880
 3881
 3882
 3883
 3884
 3885
 3886
 3887
 3888
 3889
 3890
 3891
 3892
 3893
 3894
 3895
 3896
 3897
 3898
 3899
 3900
 3901
 3902
 3903
 3904
 3905
 3906
 3907
 3908
 3909
 3910
 3911
 3912
 3913
 3914
 3915
 3916
 3917
 3918
 3919
 3920
 3921
 3922
 3923
 3924
 3925
 3926
 3927
 3928
 3929
 3930
 3931
 3932
 3933
 3934
 3935
 3936
 3937
 3938
 3939
 3940
 3941
 3942
 3943
 3944
 3945
 3946
 3947
 3948
 3949
 3950
 3951
 3952
 3953
 3954
 3955
 3956
 3957
 3958
 3959
 3960
 3961
 3962
 3963
 3964
 3965
 3966
 3967
 3968
 3969
 3970
 3971
 3972
 3973
 3974
 3975
 3976
 3977
 3978
 3979
 3980
 3981
 3982
 3983
 3984
 3985
 3986
 3987
 3988
 3989
 3990
 3991
 3992
 3993
 3994
 3995
 3996
 3997
 3998
 3999
 4000
 4001
 4002
 4003
 4004
 4005
 4006
 4007
 4008
 4009
 4010
 4011
 4012
 4013
 4014
 4015
 4016
 4017
 4018
 4019
 4020
 4021
 4022
 4023
 4024
 4025
 4026
 4027
 4028
 4029
 4030
 4031
 4032
 4033
 4034
 4035
 4036
 4037
 4038
 4039
 4040
 4041
 4042
 4043
 4044
 4045
 4046
 4047
 4048
 4049
 4050
 4051
 4052
 4053
 4054
 4055
 4056
 4057
 4058
 4059
 4060
 4061
 4062
 4063
 4064
 4065
 4066
 4067
 4068
 4069
 4070
 4071
 4072
 4073
 4074
 4075
 4076
 4077
 4078
 4079
 4080
 4081
 4082
 4083
 4084
 4085
 4086
 4087
 4088
 4089
 4090
 4091
 4092
 4093
 4094
 4095
 4096
 4097
 4098
 4099
 4100
 4101
 4102
 4103
 4104
 4105
 4106
 4107
 4108
 4109
 4110
 4111
 4112
 4113
 4114
 4115
 4116
 4117
 4118
 4119
 4120
 4121
 4122
 4123
 4124
 4125
 4126
 4127
 4128
 4129
 4130
 4131
 4132
 4133
 4134
 4135
 4136
 4137
 4138
 4139
 4140
 4141
 4142
 4143
 4144
 4145
 4146
 4147
 4148
 4149
 4150
 4151
 4152
 4153
 4154
 4155
 4156
 4157
 4158
 4159
 4160
 4161
 4162
 4163
 4164
 4165
 4166
 4167
 4168
 4169
 4170
 4171
 4172
 4173
 4174
 4175
 4176
 4177
 4178
 4179
 4180
 4181
 4182
 4183
 4184
 4185
 4186
 4187
 4188
 4189
 4190
 4191
 4192
 4193
 4194
 4195
 4196
 4197
 4198
 4199
 4200
 4201
 4202
 4203
 4204
 4205
 4206
 4207
 4208
 4209
 4210
 4211
 4212
 4213
 4214
 4215
 4216
 4217
 4218
 4219
 4220
 4221
 4222
 4223
 4224
 4225
 4226
 4227
 4228
 4229
 4230
 4231
 4232
 4233
 4234
 4235
 4236
 4237
 4238
 4239
 4240
 4241
 4242
 4243
 4244
 4245
 4246
 4247
 4248
 4249
 4250
 4251
 4252
 4253
 4254
 4255
 4256
 4257
 4258
 4259
 4260
 4261
 4262
 4263
 4264
 4265
 4266
 4267
 4268
 4269
 4270
 4271
 4272
 4273
 4274
 4275
 4276
 4277
 4278
 4279
 4280
 4281
 4282
 4283
 4284
 4285
 4286
 4287
 4288
 4289
 4290
 4291
 4292
 4293
 4294
 4295
 4296
 4297
 4298
 4299
 4300
 4301
 4302
 4303
 4304
 4305
 4306
 4307
 4308
 4309
 4310
 4311
 4312
 4313
 4314
 4315
 4316
 4317
 4318
 4319
 4320
 4321
 4322
 4323
 4324
 4325
 4326
 4327
 4328
 4329
 4330
 4331
 4332
 4333
 4334
 4335
 4336
 4337
 4338
 4339
 4340
 4341
 4342
 4343
 4344
 4345
 4346
 4347
 4348
 4349
 4350
 4351
 4352
 4353
 4354
 4355
 4356
 4357
 4358
 4359
 4360
 4361
 4362
 4363
 4364
 4365
 4366
 4367
 4368
 4369
 4370
 4371
 4372
 4373
 4374
 4375
 4376
 4377
 4378
 4379
 4380
 4381
 4382
 4383
 4384
 4385
 4386
 4387
 4388
 4389
 4390
 4391
 4392
 4393
 4394
 4395
 4396
 4397
 4398
 4399
 4400
 4401
 4402
 4403
 4404
 4405
 4406
 4407
 4408
 4409
 4410
 4411
 4412
 4413
 4414
 4415
 4416
 4417
 4418
 4419
 4420
 4421
 4422
 4423
 4424
 4425
 4426
 4427
 4428
 4429
 4430
 4431
 4432
 4433
 4434
 4435
 4436
 4437
 4438
 4439
 4440
 4441
 4442
 4443
 4444
 4445
 4446
 4447
 4448
 4449
 4450
 4451
 4452
 4453
 4454
 4455
 4456
 4457
 4458
 4459
 4460
 4461
 4462
 4463
 4464
 4465
 4466
 4467
 4468
 4469
 4470
 4471
 4472
 4473
 4474
 4475
 4476
 4477
 4478
 4479
 4480
 4481
 4482
 4483
 4484
 4485
 4486
 4487
 4488
 4489
 4490
 4491
 4492
 4493
 4494
 4495
 4496
 4497
 4498
 4499
 4500
 4501
 4502
 4503
 4504
 4505
 4506
 4507
 4508
 4509
 4510
 4511
 4512
 4513
 4514
 4515
 4516
 4517
 4518
 4519
 4520
 4521
 4522
 4523
 4524
 4525
 4526
 4527
 4528
 4529
 4530
 4531
 4532
 4533
 4534
 4535
 4536
 4537
 4538
 4539
 4540
 4541
 4542
 4543
 4544
 4545
 4546
 4547
 4548
 4549
 4550
 4551
 4552
 4553
 4554
 4555
 4556
 4557
 4558
 4559
 4560
 4561
 4562
 4563
 4564
 4565
 4566
 4567
 4568
 4569
 4570
 4571
 4572
 4573
 4574
 4575
 4576
 4577
 4578
 4579
 4580
 4581
 4582
 4583
 4584
 4585
 4586
 4587
 4588
 4589
 4590
 4591
 4592
 4593
 4594
 4595
 4596
 4597
 4598
 4599
 4600
 4601
 4602
 4603
 4604
 4605
 4606
 4607
 4608
 4609
 4610
 4611
 4612
 4613
 4614
 4615
 4616
 4617
 4618
 4619
 4620
 4621
 4622
 4623
 4624
 4625
 4626
 4627
 4628
 4629
 4630
 4631
 4632
 4633
 4634
 4635
 4636
 4637
 4638
 4639
 4640
 4641
 4642
 4643
 4644
 4645
 4646
 4647
 4648
 4649
 4650
 4651
 4652
 4653
 4654
 4655
 4656
 4657
 4658
 4659
 4660
 4661
 4662
 4663
 4664
 4665
 4666
 4667
 4668
 4669
 4670
 4671
 4672
 4673
 4674
 4675
 4676
 4677
 4678
 4679
 4680
 4681
 4682
 4683
 4684
 4685
 4686
 4687
 4688
 4689
 4690
 4691
 4692
 4693
 4694
 4695
 4696
 4697
 4698
 4699
 4700
 4701
 4702
 4703
 4704
 4705
 4706
 4707
 4708
 4709
 4710
 4711
 4712
 4713
 4714
 4715
 4716
 4717
 4718
 4719
 4720
 4721
 4722
 4723
 4724
 4725
 4726
 4727
 4728
 4729
 4730
 4731
 4732
 4733
 4734
 4735
 4736
 4737
 4738
 4739
 4740
 4741
 4742
 4743
 4744
 4745
 4746
 4747
 4748
 4749
 4750
 4751
 4752
 4753
 4754
 4755
 4756
 4757
 4758
 4759
 4760
 4761
 4762
 4763
 4764
 4765
 4766
 4767
 4768
 4769
 4770
 4771
 4772
 4773
 4774
 4775
 4776
 4777
 4778
 4779
 4780
 4781
 4782
 4783
 4784
 4785
 4786
 4787
 4788
 4789
 4790
 4791
 4792
 4793
 4794
 4795
 4796
 4797
 4798
 4799
 4800
 4801
 4802
 4803
 4804
 4805
 4806
 4807
 4808
 4809
 4810
 4811
 4812
 4813
 4814
 4815
 4816
 4817
 4818
 4819
 4820
 4821
 4822
 4823
 4824
 4825
 4826
 4827
 4828
 4829
 4830
 4831
 4832
 4833
 4834
 4835
 4836
 4837
 4838
 4839
 4840
 4841
 4842
 4843
 4844
 4845
 4846
 4847
 4848
 4849
 4850
 4851
 4852
 4853
 4854
 4855
 4856
 4857
 4858
 4859
 4860
 4861
 4862
 4863
 4864
 4865
 4866
 4867
 4868
 4869
 4870
 4871
 4872
 4873
 4874
 4875
 4876
 4877
 4878
 4879
 4880
 4881
 4882
 4883
 4884
 4885
 4886
 4887
 4888
 4889
 4890
 4891
 4892
 4893
 4894
 4895
 4896
 4897
 4898
 4899
 4900
 4901
 4902
 4903
 4904
 4905
 4906
 4907
 4908
 4909
 4910
 4911
 4912
 4913
 4914
 4915
 4916
 4917
 4918
 4919
 4920
 4921
 4922
 4923
 4924
 4925
 4926
 4927
 4928
 4929
 4930
 4931
 4932
 4933
 4934
 4935
 4936
 4937
 4938
 4939
 4940
 4941
 4942
 4943
 4944
 4945
 4946
 4947
 4948
 4949
 4950
 4951
 4952
 4953
 4954
 4955
 4956
 4957
 4958
 4959
 4960
 4961
 4962
 4963
 4964
 4965
 4966
 4967
 4968
 4969
 4970
 4971
 4972
 4973
 4974
 4975
 4976
 4977
 4978
 4979
 4980
 4981
 4982
 4983
 4984
 4985
 4986
 4987
 4988
 4989
 4990
 4991
 4992
 4993
 4994
 4995
 4996
 4997
 4998
 4999
 5000
 5001
 5002
 5003
 5004
 5005
 5006
 5007
 5008
 5009
 5010
 5011
 5012
 5013
 5014
 5015
 5016
 5017
 5018
 5019
 5020
 5021
 5022
 5023
 5024
 5025
 5026
 5027
 5028
 5029
 5030
 5031
 5032
 5033
 5034
 5035
 5036
 5037
 5038
 5039
 5040
 5041
 5042
 5043
 5044
 5045
 5046
 5047
 5048
 5049
 5050
 5051
 5052
 5053
 5054
 5055
 5056
 5057
 5058
 5059
 5060
 5061
 5062
 5063
 5064
 5065
 5066
 5067
 5068
 5069
 5070
 5071
 5072
 5073
 5074
 5075
 5076
 5077
 5078
 5079
 5080
 5081
 5082
 5083
 5084
 5085
 5086
 5087
 5088
 5089
 5090
 5091
 5092
 5093
 5094
 5095
 5096
 5097
 5098
 5099
 5100
 5101
 5102
 5103
 5104
 5105
 5106
 5107
 5108
 5109
 5110
 5111
 5112
 5113
 5114
 5115
 5116
 5117
 5118
 5119
 5120
 5121
 5122
 5123
 5124
 5125
 5126
 5127
 5128
 5129
 5130
 5131
 5132
 5133
 5134
 5135
 5136
 5137
 5138
 5139
 5140
 5141
 5142
 5143
 5144
 5145
 5146
 5147
 5148
 5149
 5150
 5151
 5152
 5153
 5154
 5155
 5156
 5157
 5158
 5159
 5160
 5161
 5162
 5163
 5164
 5165
 5166
 5167
 5168
 5169
 5170
 5171
 5172
 5173
 5174
 5175
 5176
 5177
 5178
 5179
 5180
 5181
 5182
 5183
 5184
 5185
 5186
 5187
 5188
 5189
 5190
 5191
 5192
 5193
 5194
 5195
 5196
 5197
 5198
 5199
 5200
 5201
 5202
 5203
 5204
 5205
 5206
 5207
 5208
 5209
 5210
 5211
 5212
 5213
 5214
 5215
 5216
 5217
 5218
 5219
 5220
 5221
 5222
 5223
 5224
 5225
 5226
 5227
 5228
 5229
 5230
 5231
 5232
 5233
 5234
 5235
 5236
 5237
 5238
 5239
 5240
 5241
 5242
 5243
 5244
 5245
 5246
 5247
 5248
 5249
 5250
 5251
 5252
 5253
 5254
 5255
 5256
 5257
 5258
 5259
 5260
 5261
 5262
 5263
 5264
 5265
 5266
 5267
 5268
 5269
 5270
 5271
 5272
 5273
 5274
 5275
 5276
 5277
 5278
 5279
 5280
 5281
 5282
 5283
 5284
 5285
 5286
 5287
 5288
 5289
 5290
 5291
 5292
 5293
 5294
 5295
 5296
 5297
 5298
 5299
 5300
 5301
 5302
 5303
 5304
 5305
 5306
 5307
 5308
 5309
 5310
 5311
 5312
 5313
 5314
 5315
 5316
 5317
 5318
 5319
 5320
 5321
 5322
 5323
 5324
 5325
 5326
 5327
 5328
 5329
 5330
 5331
 5332
 5333
 5334
 5335
 5336
 5337
 5338
 5339
 5340
 5341
 5342
 5343
 5344
 5345
 5346
 5347
 5348
 5349
 5350
 5351
 5352
 5353
 5354
 5355
 5356
 5357
 5358
 5359
 5360
 5361
 5362
 5363
 5364
 5365
 5366
 5367
 5368
 5369
 5370
 5371
 5372
 5373
 5374
 5375
 5376
 5377
 5378
 5379
 5380
 5381
 5382
 5383
 5384
 5385
 5386
 5387
 5388
 5389
 5390
 5391
 5392
 5393
 5394
 5395
 5396
 5397
 5398
 5399
 5400
 5401
 5402
 5403
 5404
 5405
 5406
 5407
 5408
 5409
 5410
 5411
 5412
 5413
 5414
 5415
 5416
 5417
 5418
 5419
 5420
 5421
 5422
 5423
 5424
 5425
 5426
 5427
 5428
 5429
 5430
 5431
 5432
 5433
 5434
 5435
 5436
 5437
 5438
 5439
 5440
 5441
 5442
 5443
 5444
 5445
 5446
 5447
 5448
 5449
 5450
 5451
 5452
 5453
 5454
 5455
 5456
 5457
 5458
 5459
 5460
 5461
 5462
 5463
 5464
 5465
 5466
 5467
 5468
 5469
 5470
 5471
 5472
 5473
 5474
 5475
 5476
 5477
 5478
 5479
 5480
 5481
 5482
 5483
 5484
 5485
 5486
 5487
 5488
 5489
 5490
 5491
 5492
 5493
 5494
 5495
 5496
 5497
 5498
 5499
 5500
 5501
 5502
 5503
 5504
 5505
 5506
 5507
 5508
 5509
 5510
 5511
 5512
 5513
 5514
 5515
 5516
 5517
 5518
 5519
 5520
 5521
 5522
 5523
 5524
 5525
 5526
 5527
 5528
 5529
 5530
 5531
 5532
 5533
 5534
 5535
 5536
 5537
 5538
 5539
 5540
 5541
 5542
 5543
 5544
 5545
 5546
 5547
 5548
 5549
 5550
 5551
 5552
 5553
 5554
 5555
 5556
 5557
 5558
 5559
 5560
 5561
 5562
 5563
 5564
 5565
 5566
 5567
 5568
 5569
 5570
 5571
 5572
 5573
 5574
 5575
 5576
 5577
 5578
 5579
 5580
 5581
 5582
 5583
 5584
 5585
 5586
 5587
 5588
 5589
 5590
 5591
 5592
 5593
 5594
 5595
 5596
 5597
 5598
 5599
 5600
 5601
 5602
 5603
 5604
 5605
 5606
 5607
 5608
 5609
 5610
 5611
 5612
 5613
 5614
 5615
 5616
 5617
 5618
 5619
 5620
 5621
 5622
 5623
 5624
 5625
 5626
 5627
 5628
 5629
 5630
 5631
 5632
 5633
 5634
 5635
 5636
 5637
 5638
 5639
 5640
 5641
 5642
 5643
 5644
 5645
 5646
 5647
 5648
 5649
 5650
 5651
 5652
 5653
 5654
 5655
 5656
 5657
 5658
 5659
 5660
 5661
 5662
 5663
 5664
 5665
 5666
 5667
 5668
 5669
 5670
 5671
 5672
 5673
 5674
 5675
 5676
 5677
 5678
 5679
 5680
 5681
 5682
 5683
 5684
 5685
 5686
 5687
 5688
 5689
 5690
 5691
 5692
 5693
 5694
 5695
 5696
 5697
 5698
 5699
 5700
 5701
 5702
 5703
 5704
 5705
 5706
 5707
 5708
 5709
 5710
 5711
 5712
 5713
 5714
 5715
 5716
 5717
 5718
 5719
 5720
 5721
 5722
 5723
 5724
 5725
 5726
 5727
 5728
 5729
 5730
 5731
 5732
 5733
 5734
 5735
 5736
 5737
 5738
 5739
 5740
 5741
 5742
 5743
 5744
 5745
 5746
 5747
 5748
 5749
 5750
 5751
 5752
 5753
 5754
 5755
 5756
 5757
 5758
 5759
 5760
 5761
 5762
 5763
 5764
 5765
 5766
 5767
 5768
 5769
 5770
 5771
 5772
 5773
 5774
 5775
 5776
 5777
 5778
 5779
 5780
 5781
 5782
 5783
 5784
 5785
 5786
 5787
 5788
 5789
 5790
 5791
 5792
 5793
 5794
 5795
 5796
 5797
 5798
 5799
 5800
 5801
 5802
 5803
 5804
 5805
 5806
 5807
 5808
 5809
 5810
 5811
 5812
 5813
 5814
 5815
 5816
 5817
 5818
 5819
 5820
 5821
 5822
 5823
 5824
 5825
 5826
 5827
 5828
 5829
 5830
 5831
 5832
 5833
 5834
 5835
 5836
 5837
 5838
 5839
 5840
 5841
 5842
 5843
 5844
 5845
 5846
 5847
 5848
 5849
 5850
 5851
 5852
 5853
 5854
 5855
 5856
 5857
 5858
 5859
 5860
 5861
 5862
 5863
 5864
 5865
 5866
 5867
 5868
 5869
 5870
 5871
 5872
 5873
 5874
 5875
 5876
 5877
 5878
 5879
 5880
 5881
 5882
 5883
 5884
 5885
 5886
 5887
 5888
 5889
 5890
 5891
 5892
 5893
 5894
 5895
 5896
 5897
 5898
 5899
 5900
 5901
 5902
 5903
 5904
 5905
 5906
 5907
 5908
 5909
 5910
 5911
 5912
 5913
 5914
 5915
 5916
 5917
 5918
 5919
 5920
 5921
 5922
 5923
 5924
 5925
 5926
 5927
 5928
 5929
 5930
 5931
 5932
 5933
 5934
 5935
 5936
 5937
 5938
 5939
 5940
 5941
 5942
 5943
 5944
 5945
 5946
 5947
 5948
 5949
 5950
 5951
 5952
 5953
 5954
 5955
 5956
 5957
 5958
 5959
 5960
 5961
 5962
 5963
 5964
 5965
 5966
 5967
 5968
 5969
 5970
 5971
 5972
 5973
 5974
 5975
 5976
 5977
 5978
 5979
 5980
 5981
 5982
 5983
 5984
 5985
 5986
 5987
 5988
 5989
 5990
 5991
 5992
 5993
 5994
 5995
 5996
 5997
 5998
 5999
 6000
 6001
 6002
 6003
 6004
 6005
 6006
 6007
 6008
 6009
 6010
 6011
 6012
 6013
 6014
 6015
 6016
 6017
 6018
 6019
 6020
 6021
 6022
 6023
 6024
 6025
 6026
 6027
 6028
 6029
 6030
 6031
 6032
 6033
 6034
 6035
 6036
 6037
 6038
 6039
 6040
 6041
 6042
 6043
 6044
 6045
 6046
 6047
 6048
 6049
 6050
 6051
 6052
 6053
 6054
 6055
 6056
 6057
 6058
 6059
 6060
 6061
 6062
 6063
 6064
 6065
 6066
 6067
 6068
 6069
 6070
 6071
 6072
 6073
 6074
 6075
 6076
 6077
 6078
 6079
 6080
 6081
 6082
 6083
 6084
 6085
 6086
 6087
 6088
 6089
 6090
 6091
 6092
 6093
 6094
 6095
 6096
 6097
 6098
 6099
 6100
 6101
 6102
 6103
 6104
 6105
 6106
 6107
 6108
 6109
 6110
 6111
 6112
 6113
 6114
 6115
 6116
 6117
 6118
 6119
 6120
 6121
 6122
 6123
 6124
 6125
 6126
 6127
 6128
 6129
 6130
 6131
 6132
 6133
 6134
 6135
 6136
 6137
 6138
 6139
 6140
 6141
 6142
 6143
 6144
 6145
 6146
 6147
 6148
 6149
 6150
 6151
 6152
 6153
 6154
 6155
 6156
 6157
 6158
 6159
 6160
 6161
 6162
 6163
 6164
 6165
 6166
 6167
 6168
 6169
 6170
 6171
 6172
 6173
 6174
 6175
 6176
 6177
 6178
 6179
 6180
 6181
 6182
 6183
 6184
 6185
 6186
 6187
 6188
 6189
 6190
 6191
 6192
 6193
 6194
 6195
 6196
 6197
 6198
 6199
 6200
 6201
 6202
 6203
 6204
 6205
 6206
 6207
 6208
 6209
 6210
 6211
 6212
 6213
 6214
 6215
 6216
 6217
 6218
 6219
 6220
 6221
 6222
 6223
 6224
 6225
 6226
 6227
 6228
 6229
 6230
 6231
 6232
 6233
 6234
 6235
 6236
 6237
 6238
 6239
 6240
 6241
 6242
 6243
 6244
 6245
 6246
 6247
 6248
 6249
 6250
 6251
 6252
 6253
 6254
 6255
 6256
 6257
 6258
 6259
 6260
 6261
 6262
 6263
 6264
 6265
 6266
 6267
 6268
 6269
 6270
 6271
 6272
 6273
 6274
 6275
 6276
 6277
 6278
 6279
 6280
 6281
 6282
 6283
 6284
 6285
 6286
 6287
 6288
 6289
 6290
 6291
 6292
 6293
 6294
 6295
 6296
 6297
 6298
 6299
 6300
 6301
 6302
 6303
 6304
 6305
 6306
 6307
 6308
 6309
 6310
 6311
 6312
 6313
 6314
 6315
 6316
 6317
 6318
 6319
 6320
 6321
 6322
 6323
 6324
 6325
 6326
 6327
 6328
 6329
 6330
 6331
 6332
 6333
 6334
 6335
 6336
 6337
 6338
 6339
 6340
 6341
 6342
 6343
 6344
 6345
 6346
 6347
 6348
 6349
 6350
 6351
 6352
 6353
 6354
 6355
 6356
 6357
 6358
 6359
 6360
 6361
 6362
 6363
 6364
 6365
 6366
 6367
 6368
 6369
 6370
 6371
 6372
 6373
 6374
 6375
 6376
 6377
 6378
 6379
 6380
 6381
 6382
 6383
 6384
 6385
 6386
 6387
 6388
 6389
 6390
 6391
 6392
 6393
 6394
 6395
 6396
 6397
 6398
 6399
 6400
 6401
 6402
 6403
 6404
 6405
 6406
 6407
 6408
 6409
 6410
 6411
 6412
 6413
 6414
 6415
 6416
 6417
 6418
 6419
 6420
 6421
 6422
 6423
 6424
 6425
 6426
 6427
 6428
 6429
 6430
 6431
 6432
 6433
 6434
 6435
 6436
 6437
 6438
 6439
 6440
 6441
 6442
 6443
 6444
 6445
 6446
 6447
 6448
 6449
 6450
 6451
 6452
 6453
 6454
 6455
 6456
 6457
 6458
 6459
 6460
 6461
 6462
 6463
 6464
 6465
 6466
 6467
 6468
 6469
 6470
 6471
 6472
 6473
 6474
 6475
 6476
 6477
 6478
 6479
 6480
 6481
 6482
 6483
 6484
 6485
 6486
 6487
 6488
 6489
 6490
 6491
 6492
 6493
 6494
 6495
 6496
 6497
 6498
 6499
 6500
 6501
 6502
 6503
 6504
 6505
 6506
 6507
 6508
 6509
 6510
 6511
 6512
 6513
 6514
 6515
 6516
 6517
 6518
 6519
 6520
 6521
 6522
 6523
 6524
 6525
 6526
 6527
 6528
 6529
 6530
 6531
 6532
 6533
 6534
 6535
 6536
 6537
 6538
 6539
 6540
 6541
 6542
 6543
 6544
 6545
 6546
 6547
 6548
 6549
 6550
 6551
 6552
 6553
 6554
 6555
 6556
 6557
 6558
 6559
 6560
 6561
 6562
 6563
 6564
 6565
 6566
 6567
 6568
 6569
 6570
 6571
 6572
 6573
 6574
 6575
 6576
 6577
 6578
 6579
 6580
 6581
 6582
 6583
 6584
 6585
 6586
 6587
 6588
 6589
 6590
 6591
 6592
 6593
 6594
 6595
 6596
 6597
 6598
 6599
 6600
 6601
 6602
 6603
 6604
 6605
 6606
 6607
 6608
 6609
 6610
 6611
 6612
 6613
 6614
 6615
 6616
 6617
 6618
 6619
 6620
 6621
 6622
 6623
 6624
 6625
 6626
 6627
 6628
 6629
 6630
 6631
 6632
 6633
 6634
 6635
 6636
 6637
 6638
 6639
 6640
 6641
 6642
 6643
 6644
 6645
 6646
 6647
 6648
 6649
 6650
 6651
 6652
 6653
 6654
 6655
 6656
 6657
 6658
 6659
 6660
 6661
 6662
 6663
 6664
 6665
 6666
 6667
 6668
 6669
 6670
 6671
 6672
 6673
 6674
 6675
 6676
 6677
 6678
 6679
 6680
 6681
 6682
 6683
 6684
 6685
 6686
 6687
 6688
 6689
 6690
 6691
 6692
 6693
 6694
 6695
 6696
 6697
 6698
 6699
 6700
 6701
 6702
 6703
 6704
 6705
 6706
 6707
 6708
 6709
 6710
 6711
 6712
 6713
 6714
 6715
 6716
 6717
 6718
 6719
 6720
 6721
 6722
 6723
 6724
 6725
 6726
 6727
 6728
 6729
 6730
 6731
 6732
 6733
 6734
 6735
 6736
 6737
 6738
 6739
 6740
 6741
 6742
 6743
 6744
 6745
 6746
 6747
 6748
 6749
 6750
 6751
 6752
 6753
 6754
 6755
 6756
 6757
 6758
 6759
 6760
 6761
 6762
 6763
 6764
 6765
 6766
 6767
 6768
 6769
 6770
 6771
 6772
 6773
 6774
 6775
 6776
 6777
 6778
 6779
 6780
 6781
 6782
 6783
 6784
 6785
 6786
 6787
 6788
 6789
 6790
 6791
 6792
 6793
 6794
 6795
 6796
 6797
 6798
 6799
 6800
 6801
 6802
 6803
 6804
 6805
 6806
 6807
 6808
 6809
 6810
 6811
 6812
 6813
 6814
 6815
 6816
 6817
 6818
 6819
 6820
 6821
 6822
 6823
 6824
 6825
 6826
 6827
 6828
 6829
 6830
 6831
 6832
 6833
 6834
 6835
 6836
 6837
 6838
 6839
 6840
 6841
 6842
 6843
 6844
 6845
 6846
 6847
 6848
 6849
 6850
 6851
 6852
 6853
 6854
 6855
 6856
 6857
 6858
 6859
 6860
 6861
 6862
 6863
 6864
 6865
 6866
 6867
 6868
 6869
 6870
 6871
 6872
 6873
 6874
 6875
 6876
 6877
 6878
 6879
 6880
 6881
 6882
 6883
 6884
 6885
 6886
 6887
 6888
 6889
 6890
 6891
 6892
 6893
 6894
 6895
 6896
 6897
 6898
 6899
 6900
 6901
 6902
 6903
 6904
 6905
 6906
 6907
 6908
 6909
 6910
 6911
 6912
 6913
 6914
 6915
 6916
 6917
 6918
 6919
 6920
 6921
 6922
 6923
 6924
 6925
 6926
 6927
 6928
 6929
 6930
 6931
 6932
 6933
 6934
 6935
 6936
 6937
 6938
 6939
 6940
 6941
 6942
 6943
 6944
 6945
 6946
 6947
 6948
 6949
 6950
 6951
 6952
 6953
 6954
 6955
 6956
 6957
 6958
 6959
 6960
 6961
 6962
 6963
 6964
 6965
 6966
 6967
 6968
 6969
 6970
 6971
 6972
 6973
 6974
 6975
 6976
 6977
 6978
 6979
 6980
 6981
 6982
 6983
 6984
 6985
 6986
 6987
 6988
 6989
 6990
 6991
 6992
 6993
 6994
 6995
 6996
 6997
 6998
 6999
 7000
 7001
 7002
 7003
 7004
 7005
 7006
 7007
 7008
 7009
 7010
 7011
 7012
 7013
 7014
 7015
 7016
 7017
 7018
 7019
 7020
 7021
 7022
 7023
 7024
 7025
 7026
 7027
 7028
 7029
 7030
 7031
 7032
 7033
 7034
 7035
 7036
 7037
 7038
 7039
 7040
 7041
 7042
 7043
 7044
 7045
 7046
 7047
 7048
 7049
 7050
 7051
 7052
 7053
 7054
 7055
 7056
 7057
 7058
 7059
 7060
 7061
 7062
 7063
 7064
 7065
 7066
 7067
 7068
 7069
 7070
 7071
 7072
 7073
 7074
 7075
 7076
 7077
 7078
 7079
 7080
 7081
 7082
 7083
 7084
 7085
 7086
 7087
 7088
 7089
 7090
 7091
 7092
 7093
 7094
 7095
 7096
 7097
 7098
 7099
 7100
 7101
 7102
 7103
 7104
 7105
 7106
 7107
 7108
 7109
 7110
 7111
 7112
 7113
 7114
 7115
 7116
 7117
 7118
 7119
 7120
 7121
 7122
 7123
 7124
 7125
 7126
 7127
 7128
 7129
 7130
 7131
 7132
 7133
 7134
 7135
 7136
 7137
 7138
 7139
 7140
 7141
 7142
 7143
 7144
 7145
 7146
 7147
 7148
 7149
 7150
 7151
 7152
 7153
 7154
 7155
 7156
 7157
 7158
 7159
 7160
 7161
 7162
 7163
 7164
 7165
 7166
 7167
 7168
 7169
 7170
 7171
 7172
 7173
 7174
 7175
 7176
 7177
 7178
 7179
 7180
 7181
 7182
 7183
 7184
 7185
 7186
 7187
 7188
 7189
 7190
 7191
 7192
 7193
 7194
 7195
 7196
 7197
 7198
 7199
 7200
 7201
 7202
 7203
 7204
 7205
 7206
 7207
 7208
 7209
 7210
 7211
 7212
 7213
 7214
 7215
 7216
 7217
 7218
 7219
 7220
 7221
 7222
 7223
 7224
 7225
 7226
 7227
 7228
 7229
 7230
 7231
 7232
 7233
 7234
 7235
 7236
 7237
 7238
 7239
 7240
 7241
 7242
 7243
 7244
 7245
 7246
 7247
 7248
 7249
 7250
 7251
 7252
 7253
 7254
 7255
 7256
 7257
 7258
 7259
 7260
 7261
 7262
 7263
 7264
 7265
 7266
 7267
 7268
 7269
 7270
 7271
 7272
 7273
 7274
 7275
 7276
 7277
 7278
 7279
 7280
 7281
 7282
 7283
 7284
 7285
 7286
 7287
 7288
 7289
 7290
 7291
 7292
 7293
 7294
 7295
 7296
 7297
 7298
 7299
 7300
 7301
 7302
 7303
 7304
 7305
 7306
 7307
 7308
 7309
 7310
 7311
 7312
 7313
 7314
 7315
 7316
 7317
 7318
 7319
 7320
 7321
 7322
 7323
 7324
 7325
 7326
 7327
 7328
 7329
 7330
 7331
 7332
 7333
 7334
 7335
 7336
 7337
 7338
 7339
 7340
 7341
 7342
 7343
 7344
 7345
 7346
 7347
 7348
 7349
 7350
 7351
 7352
 7353
 7354
 7355
 7356
 7357
 7358
 7359
 7360
 7361
 7362
 7363
 7364
 7365
 7366
 7367
 7368
 7369
 7370
 7371
 7372
 7373
 7374
 7375
 7376
 7377
 7378
 7379
 7380
 7381
 7382
 7383
 7384
 7385
 7386
 7387
 7388
 7389
 7390
 7391
 7392
 7393
 7394
 7395
 7396
 7397
 7398
 7399
 7400
 7401
 7402
 7403
 7404
 7405
 7406
 7407
 7408
 7409
 7410
 7411
 7412
 7413
 7414
 7415
 7416
 7417
 7418
 7419
 7420
 7421
 7422
 7423
 7424
 7425
 7426
 7427
 7428
 7429
 7430
 7431
 7432
 7433
 7434
 7435
 7436
 7437
 7438
 7439
 7440
 7441
 7442
 7443
 7444
 7445
 7446
 7447
 7448
 7449
 7450
 7451
 7452
 7453
 7454
 7455
 7456
 7457
 7458
 7459
 7460
 7461
 7462
 7463
 7464
 7465
 7466
 7467
 7468
 7469
 7470
 7471
 7472
 7473
 7474
 7475
 7476
 7477
 7478
 7479
 7480
 7481
 7482
 7483
 7484
 7485
 7486
 7487
 7488
 7489
 7490
 7491
 7492
 7493
 7494
 7495
 7496
 7497
 7498
 7499
 7500
 7501
 7502
 7503
 7504
 7505
 7506
 7507
 7508
 7509
 7510
 7511
 7512
 7513
 7514
 7515
 7516
 7517
 7518
 7519
 7520
 7521
 7522
 7523
 7524
 7525
 7526
 7527
 7528
 7529
 7530
 7531
 7532
 7533
 7534
 7535
 7536
 7537
 7538
 7539
 7540
 7541
 7542
 7543
 7544
 7545
 7546
 7547
 7548
 7549
 7550
 7551
 7552
 7553
 7554
 7555
 7556
 7557
 7558
 7559
 7560
 7561
 7562
 7563
 7564
 7565
 7566
 7567
 7568
 7569
 7570
 7571
 7572
 7573
 7574
 7575
 7576
 7577
 7578
 7579
 7580
 7581
 7582
 7583
 7584
 7585
 7586
 7587
 7588
 7589
 7590
 7591
 7592
 7593
 7594
 7595
 7596
 7597
 7598
 7599
 7600
 7601
 7602
 7603
 7604
 7605
 7606
 7607
 7608
 7609
 7610
 7611
 7612
 7613
 7614
 7615
 7616
 7617
 7618
 7619
 7620
 7621
 7622
 7623
 7624
 7625
 7626
 7627
 7628
 7629
 7630
 7631
 7632
 7633
 7634
 7635
 7636
 7637
 7638
 7639
 7640
 7641
 7642
 7643
 7644
 7645
 7646
 7647
 7648
 7649
 7650
 7651
 7652
 7653
 7654
 7655
 7656
 7657
 7658
 7659
 7660
 7661
 7662
 7663
 7664
 7665
 7666
 7667
 7668
 7669
 7670
 7671
 7672
 7673
 7674
 7675
 7676
 7677
 7678
 7679
 7680
 7681
 7682
 7683
 7684
 7685
 7686
 7687
 7688
 7689
 7690
 7691
 7692
 7693
 7694
 7695
 7696
 7697
 7698
 7699
 7700
 7701
 7702
 7703
 7704
 7705
 7706
 7707
 7708
 7709
 7710
 7711
 7712
 7713
 7714
 7715
 7716
 7717
 7718
 7719
 7720
 7721
 7722
 7723
 7724
 7725
 7726
 7727
 7728
 7729
 7730
 7731
 7732
 7733
 7734
 7735
 7736
 7737
 7738
 7739
 7740
 7741
 7742
 7743
 7744
 7745
 7746
 7747
 7748
 7749
 7750
 7751
 7752
 7753
 7754
 7755
 7756
 7757
 7758
 7759
 7760
 7761
 7762
 7763
 7764
 7765
 7766
 7767
 7768
 7769
 7770
 7771
 7772
 7773
 7774
 7775
 7776
 7777
 7778
 7779
 7780
 7781
 7782
 7783
 7784
 7785
 7786
 7787
 7788
 7789
 7790
 7791
 7792
 7793
 7794
 7795
 7796
 7797
 7798
 7799
 7800
 7801
 7802
 7803
 7804
 7805
 7806
 7807
 7808
 7809
 7810
 7811
 7812
 7813
 7814
 7815
 7816
 7817
 7818
 7819
 7820
 7821
 7822
 7823
 7824
 7825
 7826
 7827
 7828
 7829
 7830
 7831
 7832
 7833
 7834
 7835
 7836
 7837
 7838
 7839
 7840
 7841
 7842
 7843
 7844
 7845
 7846
 7847
 7848
 7849
 7850
 7851
 7852
 7853
 7854
 7855
 7856
 7857
 7858
 7859
 7860
 7861
 7862
 7863
 7864
 7865
 7866
 7867
 7868
 7869
 7870
 7871
 7872
 7873
 7874
 7875
 7876
 7877
 7878
 7879
 7880
 7881
 7882
 7883
 7884
 7885
 7886
 7887
 7888
 7889
 7890
 7891
 7892
 7893
 7894
 7895
 7896
 7897
 7898
 7899
 7900
 7901
 7902
 7903
 7904
 7905
 7906
 7907
 7908
 7909
 7910
 7911
 7912
 7913
 7914
 7915
 7916
 7917
 7918
 7919
 7920
 7921
 7922
 7923
 7924
 7925
 7926
 7927
 7928
 7929
 7930
 7931
 7932
 7933
 7934
 7935
 7936
 7937
 7938
 7939
 7940
 7941
 7942
 7943
 7944
 7945
 7946
 7947
 7948
 7949
 7950
 7951
 7952
 7953
 7954
 7955
 7956
 7957
 7958
 7959
 7960
 7961
 7962
 7963
 7964
 7965
 7966
 7967
 7968
 7969
 7970
 7971
 7972
 7973
 7974
 7975
 7976
 7977
 7978
 7979
 7980
 7981
 7982
 7983
 7984
 7985
 7986
 7987
 7988
 7989
 7990
 7991
 7992
 7993
 7994
 7995
 7996
 7997
 7998
 7999
 8000
 8001
 8002
 8003
 8004
 8005
 8006
 8007
 8008
 8009
 8010
 8011
 8012
 8013
 8014
 8015
 8016
 8017
 8018
 8019
 8020
 8021
 8022
 8023
 8024
 8025
 8026
 8027
 8028
 8029
 8030
 8031
 8032
 8033
 8034
 8035
 8036
 8037
 8038
 8039
 8040
 8041
 8042
 8043
 8044
 8045
 8046
 8047
 8048
 8049
 8050
 8051
 8052
 8053
 8054
 8055
 8056
 8057
 8058
 8059
 8060
 8061
 8062
 8063
 8064
 8065
 8066
 8067
 8068
 8069
 8070
 8071
 8072
 8073
 8074
 8075
 8076
 8077
 8078
 8079
 8080
 8081
 8082
 8083
 8084
 8085
 8086
 8087
 8088
 8089
 8090
 8091
 8092
 8093
 8094
 8095
 8096
 8097
 8098
 8099
 8100
 8101
 8102
 8103
 8104
 8105
 8106
 8107
 8108
 8109
 8110
 8111
 8112
 8113
 8114
 8115
 8116
 8117
 8118
 8119
 8120
 8121
 8122
 8123
 8124
 8125
 8126
 8127
 8128
 8129
 8130
 8131
 8132
 8133
 8134
 8135
 8136
 8137
 8138
 8139
 8140
 8141
 8142
 8143
 8144
 8145
 8146
 8147
 8148
 8149
 8150
 8151
 8152
 8153
 8154
 8155
 8156
 8157
 8158
 8159
 8160
 8161
 8162
 8163
 8164
 8165
 8166
 8167
 8168
 8169
 8170
 8171
 8172
 8173
 8174
 8175
 8176
 8177
 8178
 8179
 8180
 8181
 8182
 8183
 8184
 8185
 8186
 8187
 8188
 8189
 8190
 8191
 8192
 8193
 8194
 8195
 8196
 8197
 8198
 8199
 8200
 8201
 8202
 8203
 8204
 8205
 8206
 8207
 8208
 8209
 8210
 8211
 8212
 8213
 8214
 8215
 8216
 8217
 8218
 8219
 8220
 8221
 8222
 8223
 8224
 8225
 8226
 8227
 8228
 8229
 8230
 8231
 8232
 8233
 8234
 8235
 8236
 8237
 8238
 8239
 8240
 8241
 8242
 8243
 8244
 8245
 8246
 8247
 8248
 8249
 8250
 8251
 8252
 8253
 8254
 8255
 8256
 8257
 8258
 8259
 8260
 8261
 8262
 8263
 8264
 8265
 8266
 8267
 8268
 8269
 8270
 8271
 8272
 8273
 8274
 8275
 8276
 8277
 8278
 8279
 8280
 8281
 8282
 8283
 8284
 8285
 8286
 8287
 8288
 8289
 8290
 8291
 8292
 8293
 8294
 8295
 8296
 8297
 8298
 8299
 8300
 8301
 8302
 8303
 8304
 8305
 8306
 8307
 8308
 8309
 8310
 8311
 8312
 8313
 8314
 8315
 8316
 8317
 8318
 8319
 8320
 8321
 8322
 8323
 8324
 8325
 8326
 8327
 8328
 8329
 8330
 8331
 8332
 8333
 8334
 8335
 8336
 8337
 8338
 8339
 8340
 8341
 8342
 8343
 8344
 8345
 8346
 8347
 8348
 8349
 8350
 8351
 8352
 8353
 8354
 8355
 8356
 8357
 8358
 8359
 8360
 8361
 8362
 8363
 8364
 8365
 8366
 8367
 8368
 8369
 8370
 8371
 8372
 8373
 8374
 8375
 8376
 8377
 8378
 8379
 8380
 8381
 8382
 8383
 8384
 8385
 8386
 8387
 8388
 8389
 8390
 8391
 8392
 8393
 8394
 8395
 8396
 8397
 8398
 8399
 8400
 8401
 8402
 8403
 8404
 8405
 8406
 8407
 8408
 8409
 8410
 8411
 8412
 8413
 8414
 8415
 8416
 8417
 8418
 8419
 8420
 8421
 8422
 8423
 8424
 8425
 8426
 8427
 8428
 8429
 8430
 8431
 8432
 8433
 8434
 8435
 8436
 8437
 8438
 8439
 8440
 8441
 8442
 8443
 8444
 8445
 8446
 8447
 8448
 8449
 8450
 8451
 8452
 8453
 8454
 8455
 8456
 8457
 8458
 8459
 8460
 8461
 8462
 8463
 8464
 8465
 8466
 8467
 8468
 8469
 8470
 8471
 8472
 8473
 8474
 8475
 8476
 8477
 8478
 8479
 8480
 8481
 8482
 8483
 8484
 8485
 8486
 8487
 8488
 8489
 8490
 8491
 8492
 8493
 8494
 8495
 8496
 8497
 8498
 8499
 8500
 8501
 8502
 8503
 8504
 8505
 8506
 8507
 8508
 8509
 8510
 8511
 8512
 8513
 8514
 8515
 8516
 8517
 8518
 8519
 8520
 8521
 8522
 8523
 8524
 8525
 8526
 8527
 8528
 8529
 8530
 8531
 8532
 8533
 8534
 8535
 8536
 8537
 8538
 8539
 8540
 8541
 8542
 8543
 8544
 8545
 8546
 8547
 8548
 8549
 8550
 8551
 8552
 8553
 8554
 8555
 8556
 8557
 8558
 8559
 8560
 8561
 8562
 8563
 8564
 8565
 8566
 8567
 8568
 8569
 8570
 8571
 8572
 8573
 8574
 8575
 8576
 8577
 8578
 8579
 8580
 8581
 8582
 8583
 8584
 8585
 8586
 8587
 8588
 8589
 8590
 8591
 8592
 8593
 8594
 8595
 8596
 8597
 8598
 8599
 8600
 8601
 8602
 8603
 8604
 8605
 8606
 8607
 8608
 8609
 8610
 8611
 8612
 8613
 8614
 8615
 8616
 8617
 8618
 8619
 8620
 8621
 8622
 8623
 8624
 8625
 8626
 8627
 8628
 8629
 8630
 8631
 8632
 8633
 8634
 8635
 8636
 8637
 8638
 8639
 8640
 8641
 8642
 8643
 8644
 8645
 8646
 8647
 8648
 8649
 8650
 8651
 8652
 8653
 8654
 8655
 8656
 8657
 8658
 8659
 8660
 8661
 8662
 8663
 8664
 8665
 8666
 8667
 8668
 8669
 8670
 8671
 8672
 8673
 8674
 8675
 8676
 8677
 8678
 8679
 8680
 8681
 8682
 8683
 8684
 8685
 8686
 8687
 8688
 8689
 8690
 8691
 8692
 8693
 8694
 8695
 8696
 8697
 8698
 8699
 8700
 8701
 8702
 8703
 8704
 8705
 8706
 8707
 8708
 8709
 8710
 8711
 8712
 8713
 8714
 8715
 8716
 8717
 8718
 8719
 8720
 8721
 8722
 8723
 8724
 8725
 8726
 8727
 8728
 8729
 8730
 8731
 8732
 8733
 8734
 8735
 8736
 8737
 8738
 8739
 8740
 8741
 8742
 8743
 8744
 8745
 8746
 8747
 8748
 8749
 8750
 8751
 8752
 8753
 8754
 8755
 8756
 8757
 8758
 8759
 8760
 8761
 8762
 8763
 8764
 8765
 8766
 8767
 8768
 8769
 8770
 8771
 8772
 8773
 8774
 8775
 8776
 8777
 8778
 8779
 8780
 8781
 8782
 8783
 8784
 8785
 8786
 8787
 8788
 8789
 8790
 8791
 8792
 8793
 8794
 8795
 8796
 8797
 8798
 8799
 8800
 8801
 8802
 8803
 8804
 8805
 8806
 8807
 8808
 8809
 8810
 8811
 8812
 8813
 8814
 8815
 8816
 8817
 8818
 8819
 8820
 8821
 8822
 8823
 8824
 8825
 8826
 8827
 8828
 8829
 8830
 8831
 8832
 8833
 8834
 8835
 8836
 8837
 8838
 8839
 8840
 8841
 8842
 8843
 8844
 8845
 8846
 8847
 8848
 8849
 8850
 8851
 8852
 8853
 8854
 8855
 8856
 8857
 8858
 8859
 8860
 8861
 8862
 8863
 8864
 8865
 8866
 8867
 8868
 8869
 8870
 8871
 8872
 8873
 8874
 8875
 8876
 8877
 8878
 8879
 8880
 8881
 8882
 8883
 8884
 8885
 8886
 8887
 8888
 8889
 8890
 8891
 8892
 8893
 8894
 8895
 8896
 8897
 8898
 8899
 8900
 8901
 8902
 8903
 8904
 8905
 8906
 8907
 8908
 8909
 8910
 8911
 8912
 8913
 8914
 8915
 8916
 8917
 8918
 8919
 8920
 8921
 8922
 8923
 8924
 8925
 8926
 8927
 8928
 8929
 8930
 8931
 8932
 8933
 8934
 8935
 8936
 8937
 8938
 8939
 8940
 8941
 8942
 8943
 8944
 8945
 8946
 8947
 8948
 8949
 8950
 8951
 8952
 8953
 8954
 8955
 8956
 8957
 8958
 8959
 8960
 8961
 8962
 8963
 8964
 8965
 8966
 8967
 8968
 8969
 8970
 8971
 8972
 8973
 8974
 8975
 8976
 8977
 8978
 8979
 8980
 8981
 8982
 8983
 8984
 8985
 8986
 8987
 8988
 8989
 8990
 8991
 8992
 8993
 8994
 8995
 8996
 8997
 8998
 8999
 9000
 9001
 9002
 9003
 9004
 9005
 9006
 9007
 9008
 9009
 9010
 9011
 9012
 9013
 9014
 9015
 9016
 9017
 9018
 9019
 9020
 9021
 9022
 9023
 9024
 9025
 9026
 9027
 9028
 9029
 9030
 9031
 9032
 9033
 9034
 9035
 9036
 9037
 9038
 9039
 9040
 9041
 9042
 9043
 9044
 9045
 9046
 9047
 9048
 9049
 9050
 9051
 9052
 9053
 9054
 9055
 9056
 9057
 9058
 9059
 9060
 9061
 9062
 9063
 9064
 9065
 9066
 9067
 9068
 9069
 9070
 9071
 9072
 9073
 9074
 9075
 9076
 9077
 9078
 9079
 9080
 9081
 9082
 9083
 9084
 9085
 9086
 9087
 9088
 9089
 9090
 9091
 9092
 9093
 9094
 9095
 9096
 9097
 9098
 9099
 9100
 9101
 9102
 9103
 9104
 9105
 9106
 9107
 9108
 9109
 9110
 9111
 9112
 9113
 9114
 9115
 9116
 9117
 9118
 9119
 9120
 9121
 9122
 9123
 9124
 9125
 9126
 9127
 9128
 9129
 9130
 9131
 9132
 9133
 9134
 9135
 9136
 9137
 9138
 9139
 9140
 9141
 9142
 9143
 9144
 9145
 9146
 9147
 9148
 9149
 9150
 9151
 9152
 9153
 9154
 9155
 9156
 9157
 9158
 9159
 9160
 9161
 9162
 9163
 9164
 9165
 9166
 9167
 9168
 9169
 9170
 9171
 9172
 9173
 9174
 9175
 9176
 9177
 9178
 9179
 9180
 9181
 9182
 9183
 9184
 9185
 9186
 9187
 9188
 9189
 9190
 9191
 9192
 9193
 9194
 9195
 9196
 9197
 9198
 9199
 9200
 9201
 9202
 9203
 9204
 9205
 9206
 9207
 9208
 9209
 9210
 9211
 9212
 9213
 9214
 9215
 9216
 9217
 9218
 9219
 9220
 9221
 9222
 9223
 9224
 9225
 9226
 9227
 9228
 9229
 9230
 9231
 9232
 9233
 9234
 9235
 9236
 9237
 9238
 9239
 9240
 9241
 9242
 9243
 9244
 9245
 9246
 9247
 9248
 9249
 9250
 9251
 9252
 9253
 9254
 9255
 9256
 9257
 9258
 9259
 9260
 9261
 9262
 9263
 9264
 9265
 9266
 9267
 9268
 9269
 9270
 9271
 9272
 9273
 9274
 9275
 9276
 9277
 9278
 9279
 9280
 9281
 9282
 9283
 9284
 9285
 9286
 9287
 9288
 9289
 9290
 9291
 9292
 9293
 9294
 9295
 9296
 9297
 9298
 9299
 9300
 9301
 9302
 9303
 9304
 9305
 9306
 9307
 9308
 9309
 9310
 9311
 9312
 9313
 9314
 9315
 9316
 9317
 9318
 9319
 9320
 9321
 9322
 9323
 9324
 9325
 9326
 9327
 9328
 9329
 9330
 9331
 9332
 9333
 9334
 9335
 9336
 9337
 9338
 9339
 9340
 9341
 9342
 9343
 9344
 9345
 9346
 9347
 9348
 9349
 9350
 9351
 9352
 9353
 9354
 9355
 9356
 9357
 9358
 9359
 9360
 9361
 9362
 9363
 9364
 9365
 9366
 9367
 9368
 9369
 9370
 9371
 9372
 9373
 9374
 9375
 9376
 9377
 9378
 9379
 9380
 9381
 9382
 9383
 9384
 9385
 9386
 9387
 9388
 9389
 9390
 9391
 9392
 9393
 9394
 9395
 9396
 9397
 9398
 9399
 9400
 9401
 9402
 9403
 9404
 9405
 9406
 9407
 9408
 9409
 9410
 9411
 9412
 9413
 9414
 9415
 9416
 9417
 9418
 9419
 9420
 9421
 9422
 9423
 9424
 9425
 9426
 9427
 9428
 9429
 9430
 9431
 9432
 9433
 9434
 9435
 9436
 9437
 9438
 9439
 9440
 9441
 9442
 9443
 9444
 9445
 9446
 9447
 9448
 9449
 9450
 9451
 9452
 9453
 9454
 9455
 9456
 9457
 9458
 9459
 9460
 9461
 9462
 9463
 9464
 9465
 9466
 9467
 9468
 9469
 9470
 9471
 9472
 9473
 9474
 9475
 9476
 9477
 9478
 9479
 9480
 9481
 9482
 9483
 9484
 9485
 9486
 9487
 9488
 9489
 9490
 9491
 9492
 9493
 9494
 9495
 9496
 9497
 9498
 9499
 9500
 9501
 9502
 9503
 9504
 9505
 9506
 9507
 9508
 9509
 9510
 9511
 9512
 9513
 9514
 9515
 9516
 9517
 9518
 9519
 9520
 9521
 9522
 9523
 9524
 9525
 9526
 9527
 9528
 9529
 9530
 9531
 9532
 9533
 9534
 9535
 9536
 9537
 9538
 9539
 9540
 9541
 9542
 9543
 9544
 9545
 9546
 9547
 9548
 9549
 9550
 9551
 9552
 9553
 9554
 9555
 9556
 9557
 9558
 9559
 9560
 9561
 9562
 9563
 9564
 9565
 9566
 9567
 9568
 9569
 9570
 9571
 9572
 9573
 9574
 9575
 9576
 9577
 9578
 9579
 9580
 9581
 9582
 9583
 9584
 9585
 9586
 9587
 9588
 9589
 9590
 9591
 9592
 9593
 9594
 9595
 9596
 9597
 9598
 9599
 9600
 9601
 9602
 9603
 9604
 9605
 9606
 9607
 9608
 9609
 9610
 9611
 9612
 9613
 9614
 9615
 9616
 9617
 9618
 9619
 9620
 9621
 9622
 9623
 9624
 9625
 9626
 9627
 9628
 9629
 9630
 9631
 9632
 9633
 9634
 9635
 9636
 9637
 9638
 9639
 9640
 9641
 9642
 9643
 9644
 9645
 9646
 9647
 9648
 9649
 9650
 9651
 9652
 9653
 9654
 9655
 9656
 9657
 9658
 9659
 9660
 9661
 9662
 9663
 9664
 9665
 9666
 9667
 9668
 9669
 9670
 9671
 9672
 9673
 9674
 9675
 9676
 9677
 9678
 9679
 9680
 9681
 9682
 9683
 9684
 9685
 9686
 9687
 9688
 9689
 9690
 9691
 9692
 9693
 9694
 9695
 9696
 9697
 9698
 9699
 9700
 9701
 9702
 9703
 9704
 9705
 9706
 9707
 9708
 9709
 9710
 9711
 9712
 9713
 9714
 9715
 9716
 9717
 9718
 9719
 9720
 9721
 9722
 9723
 9724
 9725
 9726
 9727
 9728
 9729
 9730
 9731
 9732
 9733
 9734
 9735
 9736
 9737
 9738
 9739
 9740
 9741
 9742
 9743
 9744
 9745
 9746
 9747
 9748
 9749
 9750
 9751
 9752
 9753
 9754
 9755
 9756
 9757
 9758
 9759
 9760
 9761
 9762
 9763
 9764
 9765
 9766
 9767
 9768
 9769
 9770
 9771
 9772
 9773
 9774
 9775
 9776
 9777
 9778
 9779
 9780
 9781
 9782
 9783
 9784
 9785
 9786
 9787
 9788
 9789
 9790
 9791
 9792
 9793
 9794
 9795
 9796
 9797
 9798
 9799
 9800
 9801
 9802
 9803
 9804
 9805
 9806
 9807
 9808
 9809
 9810
 9811
 9812
 9813
 9814
 9815
 9816
 9817
 9818
 9819
 9820
 9821
 9822
 9823
 9824
 9825
 9826
 9827
 9828
 9829
 9830
 9831
 9832
 9833
 9834
 9835
 9836
 9837
 9838
 9839
 9840
 9841
 9842
 9843
 9844
 9845
 9846
 9847
 9848
 9849
 9850
 9851
 9852
 9853
 9854
 9855
 9856
 9857
 9858
 9859
 9860
 9861
 9862
 9863
 9864
 9865
 9866
 9867
 9868
 9869
 9870
 9871
 9872
 9873
 9874
 9875
 9876
 9877
 9878
 9879
 9880
 9881
 9882
 9883
 9884
 9885
 9886
 9887
 9888
 9889
 9890
 9891
 9892
 9893
 9894
 9895
 9896
 9897
 9898
 9899
 9900
 9901
 9902
 9903
 9904
 9905
 9906
 9907
 9908
 9909
 9910
 9911
 9912
 9913
 9914
 9915
 9916
 9917
 9918
 9919
 9920
 9921
 9922
 9923
 9924
 9925
 9926
 9927
 9928
 9929
 9930
 9931
 9932
 9933
 9934
 9935
 9936
 9937
 9938
 9939
 9940
 9941
 9942
 9943
 9944
 9945
 9946
 9947
 9948
 9949
 9950
 9951
 9952
 9953
 9954
 9955
 9956
 9957
 9958
 9959
 9960
 9961
 9962
 9963
 9964
 9965
 9966
 9967
 9968
 9969
 9970
 9971
 9972
 9973
 9974
 9975
 9976
 9977
 9978
 9979
 9980
 9981
 9982
 9983
 9984
 9985
 9986
 9987
 9988
 9989
 9990
 9991
 9992
 9993
 9994
 9995
 9996
 9997
 9998
 9999
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
10010
10011
10012
10013
10014
10015
10016
10017
10018
10019
10020
10021
10022
10023
10024
10025
10026
10027
10028
10029
10030
10031
10032
10033
10034
10035
10036
10037
10038
10039
10040
10041
10042
10043
10044
10045
10046
10047
10048
10049
10050
10051
10052
10053
10054
10055
10056
10057
10058
10059
10060
10061
10062
10063
10064
10065
10066
10067
10068
10069
10070
10071
10072
10073
10074
10075
10076
10077
10078
10079
10080
10081
10082
10083
10084
10085
10086
10087
10088
10089
10090
10091
10092
10093
10094
10095
10096
10097
10098
10099
10100
10101
10102
10103
10104
10105
10106
10107
10108
10109
10110
10111
10112
10113
10114
10115
10116
10117
10118
10119
10120
10121
10122
10123
10124
10125
10126
10127
10128
10129
10130
10131
10132
10133
10134
10135
10136
10137
10138
10139
10140
10141
10142
10143
10144
10145
10146
10147
10148
10149
10150
10151
10152
10153
10154
10155
10156
10157
10158
10159
10160
10161
10162
10163
10164
10165
10166
10167
10168
10169
10170
10171
10172
10173
10174
10175
10176
10177
10178
10179
10180
10181
10182
10183
10184
10185
10186
10187
10188
10189
10190
10191
10192
10193
10194
10195
10196
10197
10198
10199
10200
10201
10202
10203
10204
10205
10206
10207
10208
10209
10210
10211
10212
10213
10214
10215
10216
10217
10218
10219
10220
10221
10222
10223
10224
10225
10226
10227
10228
10229
10230
10231
10232
10233
10234
10235
10236
10237
10238
10239
10240
10241
10242
10243
10244
10245
10246
10247
10248
10249
10250
10251
10252
10253
10254
10255
10256
10257
10258
10259
10260
10261
10262
10263
10264
10265
10266
10267
10268
10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
10279
10280
10281
10282
10283
10284
10285
10286
10287
10288
10289
10290
10291
10292
10293
10294
10295
10296
10297
10298
10299
10300
10301
10302
10303
10304
10305
10306
10307
10308
10309
10310
10311
10312
10313
10314
10315
10316
10317
10318
10319
10320
10321
10322
10323
10324
10325
10326
10327
10328
10329
10330
10331
10332
10333
10334
10335
10336
10337
10338
10339
10340
10341
10342
10343
10344
10345
10346
10347
10348
10349
10350
10351
10352
10353
10354
10355
10356
10357
10358
10359
10360
10361
10362
10363
10364
10365
10366
10367
10368
10369
10370
10371
10372
10373
10374
10375
10376
10377
10378
10379
10380
10381
10382
10383
10384
10385
10386
10387
10388
10389
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415
10416
10417
10418
10419
10420
10421
10422
10423
10424
10425
10426
10427
10428
10429
10430
10431
10432
10433
10434
10435
10436
10437
10438
10439
10440
10441
10442
10443
10444
10445
10446
10447
10448
10449
10450
10451
10452
10453
10454
10455
10456
10457
10458
10459
10460
10461
10462
10463
10464
10465
10466
10467
10468
10469
10470
10471
10472
10473
10474
10475
10476
10477
10478
10479
10480
10481
10482
10483
10484
10485
10486
10487
10488
10489
10490
10491
10492
10493
10494
10495
10496
10497
10498
10499
10500
10501
10502
10503
10504
10505
10506
10507
10508
10509
10510
10511
10512
10513
10514
10515
10516
10517
10518
10519
10520
10521
10522
10523
10524
10525
10526
10527
10528
10529
10530
10531
10532
10533
10534
10535
10536
10537
10538
10539
10540
10541
10542
10543
10544
10545
10546
10547
10548
10549
10550
10551
10552
10553
10554
10555
10556
10557
10558
10559
10560
10561
10562
10563
10564
10565
10566
10567
10568
10569
10570
10571
10572
10573
10574
10575
10576
10577
10578
10579
10580
10581
10582
10583
10584
10585
10586
10587
10588
10589
10590
10591
10592
10593
10594
10595
10596
10597
10598
10599
10600
10601
10602
10603
10604
10605
10606
10607
10608
10609
10610
10611
10612
10613
10614
10615
10616
10617
10618
10619
10620
10621
10622
10623
10624
10625
10626
10627
10628
10629
10630
10631
10632
10633
10634
10635
10636
10637
10638
10639
10640
10641
10642
10643
10644
10645
10646
10647
10648
10649
10650
10651
10652
10653
10654
10655
10656
10657
10658
10659
10660
10661
10662
10663
10664
10665
10666
10667
10668
10669
10670
10671
10672
10673
10674
10675
10676
10677
10678
10679
10680
10681
10682
10683
10684
10685
10686
10687
10688
10689
10690
10691
10692
10693
10694
10695
10696
10697
10698
10699
10700
10701
10702
10703
10704
10705
10706
10707
10708
10709
10710
10711
10712
10713
10714
10715
10716
10717
10718
10719
10720
10721
10722
10723
10724
10725
10726
10727
10728
10729
10730
10731
10732
10733
10734
10735
10736
10737
10738
10739
10740
10741
10742
10743
10744
10745
10746
10747
10748
10749
10750
10751
10752
10753
10754
10755
10756
10757
10758
10759
10760
10761
10762
10763
10764
10765
10766
10767
10768
10769
10770
10771
10772
10773
10774
10775
10776
10777
10778
10779
10780
10781
10782
10783
10784
10785
10786
10787
10788
10789
10790
10791
10792
10793
10794
10795
10796
10797
10798
10799
10800
10801
10802
10803
10804
10805
10806
10807
10808
10809
10810
10811
10812
10813
10814
10815
10816
10817
10818
10819
10820
10821
10822
10823
10824
10825
10826
10827
10828
10829
10830
10831
10832
10833
10834
10835
10836
10837
10838
10839
10840
10841
10842
10843
10844
10845
10846
10847
10848
10849
10850
10851
10852
10853
10854
10855
10856
10857
10858
10859
10860
10861
10862
10863
10864
10865
10866
10867
10868
10869
10870
10871
10872
10873
10874
10875
10876
10877
10878
10879
10880
10881
10882
10883
10884
10885
10886
10887
10888
10889
10890
10891
10892
10893
10894
10895
10896
10897
10898
10899
10900
10901
10902
10903
10904
10905
10906
10907
10908
10909
10910
10911
10912
10913
10914
10915
10916
10917
10918
10919
10920
10921
10922
10923
10924
10925
10926
10927
10928
10929
10930
10931
10932
10933
10934
10935
10936
10937
10938
10939
10940
10941
10942
10943
10944
10945
10946
10947
10948
10949
10950
10951
10952
10953
10954
10955
10956
10957
10958
10959
10960
10961
10962
10963
10964
10965
10966
10967
10968
10969
10970
10971
10972
10973
10974
10975
10976
10977
10978
10979
10980
10981
10982
10983
10984
10985
10986
10987
10988
10989
10990
10991
10992
10993
10994
10995
10996
10997
10998
10999
11000
11001
11002
11003
11004
11005
11006
11007
11008
11009
11010
11011
11012
11013
11014
11015
11016
11017
11018
11019
11020
11021
11022
11023
11024
11025
11026
11027
11028
11029
11030
11031
11032
11033
11034
11035
11036
11037
11038
11039
11040
11041
11042
11043
11044
11045
11046
11047
11048
11049
11050
11051
11052
11053
11054
11055
11056
11057
11058
11059
11060
11061
11062
11063
11064
11065
11066
11067
11068
11069
11070
11071
11072
11073
11074
11075
11076
11077
11078
11079
11080
11081
11082
11083
11084
11085
11086
11087
11088
11089
11090
11091
11092
11093
11094
11095
11096
11097
11098
11099
11100
11101
11102
11103
11104
11105
11106
11107
11108
11109
11110
11111
11112
11113
11114
11115
11116
11117
11118
11119
11120
11121
11122
11123
11124
11125
11126
11127
11128
11129
11130
11131
11132
11133
11134
11135
11136
11137
11138
11139
11140
11141
11142
11143
11144
11145
11146
11147
11148
11149
11150
11151
11152
11153
11154
11155
11156
11157
11158
11159
11160
11161
11162
11163
11164
11165
11166
11167
11168
11169
11170
11171
11172
11173
11174
11175
11176
11177
11178
11179
11180
11181
11182
11183
11184
11185
11186
11187
11188
11189
11190
11191
11192
11193
11194
11195
11196
11197
11198
11199
11200
11201
11202
11203
11204
11205
11206
11207
11208
11209
11210
11211
11212
11213
11214
11215
11216
11217
11218
11219
11220
11221
11222
11223
11224
11225
11226
11227
11228
11229
11230
11231
11232
11233
11234
11235
11236
11237
11238
11239
11240
11241
11242
11243
11244
11245
11246
11247
11248
11249
11250
11251
11252
11253
11254
11255
11256
11257
11258
11259
11260
11261
11262
11263
11264
11265
11266
11267
11268
11269
11270
11271
11272
11273
11274
11275
11276
11277
11278
11279
11280
11281
11282
11283
11284
11285
11286
11287
11288
11289
11290
11291
11292
11293
11294
11295
11296
11297
11298
11299
11300
11301
11302
11303
11304
11305
11306
11307
11308
11309
11310
11311
11312
11313
11314
11315
11316
11317
11318
11319
11320
11321
11322
11323
11324
11325
11326
11327
11328
11329
11330
11331
11332
11333
11334
11335
11336
11337
11338
11339
11340
11341
11342
11343
11344
11345
11346
11347
11348
11349
11350
11351
11352
11353
11354
11355
11356
11357
11358
11359
11360
11361
11362
11363
11364
11365
11366
11367
11368
11369
11370
11371
11372
11373
11374
11375
11376
11377
11378
11379
11380
11381
11382
11383
11384
11385
11386
11387
11388
11389
11390
11391
11392
11393
11394
11395
11396
11397
11398
11399
11400
11401
11402
11403
11404
11405
11406
11407
11408
11409
11410
11411
11412
11413
11414
11415
11416
11417
11418
11419
11420
11421
11422
11423
11424
11425
11426
11427
11428
11429
11430
11431
11432
11433
11434
11435
11436
11437
11438
11439
11440
11441
11442
11443
11444
11445
11446
11447
11448
11449
11450
11451
11452
11453
11454
11455
11456
11457
11458
11459
11460
11461
11462
11463
11464
11465
11466
11467
11468
11469
11470
11471
11472
11473
11474
11475
11476
11477
11478
11479
11480
11481
11482
11483
11484
11485
11486
11487
11488
11489
11490
11491
11492
11493
11494
11495
11496
11497
11498
11499
11500
11501
11502
11503
11504
11505
11506
11507
11508
11509
11510
11511
11512
11513
11514
11515
11516
11517
11518
11519
11520
11521
11522
11523
11524
11525
11526
11527
11528
11529
11530
11531
11532
11533
11534
11535
11536
11537
11538
11539
11540
11541
11542
11543
11544
11545
11546
11547
11548
11549
11550
11551
11552
11553
11554
11555
11556
11557
11558
11559
11560
11561
11562
11563
11564
11565
11566
11567
11568
11569
11570
11571
11572
11573
11574
11575
11576
11577
11578
11579
11580
11581
11582
11583
11584
11585
11586
11587
11588
11589
11590
11591
11592
11593
11594
11595
11596
11597
11598
11599
11600
11601
11602
11603
11604
11605
11606
11607
11608
11609
11610
11611
11612
11613
11614
11615
11616
11617
11618
11619
11620
11621
11622
11623
11624
11625
11626
11627
11628
11629
11630
11631
11632
11633
11634
11635
11636
11637
11638
11639
11640
11641
11642
11643
11644
11645
11646
11647
11648
11649
11650
11651
11652
11653
11654
11655
11656
11657
11658
11659
11660
11661
11662
11663
11664
11665
11666
11667
11668
11669
11670
11671
11672
11673
11674
11675
11676
11677
11678
11679
11680
11681
11682
11683
11684
11685
11686
11687
11688
11689
11690
11691
11692
11693
11694
11695
11696
11697
11698
11699
11700
11701
11702
11703
11704
11705
11706
11707
11708
11709
11710
11711
11712
11713
11714
11715
11716
11717
11718
11719
11720
11721
11722
11723
11724
11725
11726
11727
11728
11729
11730
11731
11732
11733
11734
11735
11736
11737
11738
11739
11740
11741
11742
11743
11744
11745
11746
11747
11748
11749
11750
11751
11752
11753
11754
11755
11756
11757
11758
11759
11760
11761
11762
11763
11764
11765
11766
11767
11768
11769
11770
11771
11772
11773
11774
11775
11776
11777
11778
11779
11780
11781
11782
11783
11784
11785
11786
11787
11788
11789
11790
11791
11792
11793
11794
11795
11796
11797
11798
11799
11800
11801
11802
11803
11804
11805
11806
11807
11808
11809
11810
11811
11812
11813
11814
11815
11816
11817
11818
11819
11820
11821
11822
11823
11824
11825
11826
11827
11828
11829
11830
11831
11832
11833
11834
11835
11836
11837
11838
11839
11840
11841
11842
11843
11844
11845
11846
11847
11848
11849
11850
11851
11852
11853
11854
11855
11856
11857
11858
11859
11860
11861
11862
11863
11864
11865
11866
11867
11868
11869
11870
11871
11872
11873
11874
11875
11876
11877
11878
11879
11880
11881
11882
11883
11884
11885
11886
11887
11888
11889
11890
11891
11892
11893
11894
11895
11896
11897
11898
11899
11900
11901
11902
11903
11904
11905
11906
11907
11908
11909
11910
11911
11912
11913
11914
11915
11916
11917
11918
11919
11920
11921
11922
11923
11924
11925
11926
11927
11928
11929
11930
11931
11932
11933
11934
11935
11936
11937
11938
11939
11940
11941
11942
11943
11944
11945
11946
11947
11948
11949
11950
11951
11952
11953
11954
11955
11956
11957
11958
11959
11960
11961
11962
11963
11964
11965
11966
11967
11968
11969
11970
11971
11972
11973
11974
11975
11976
11977
11978
11979
11980
11981
11982
11983
11984
11985
11986
11987
11988
11989
11990
11991
11992
11993
11994
11995
11996
11997
11998
11999
12000
12001
12002
12003
12004
12005
12006
12007
12008
12009
12010
12011
12012
12013
12014
12015
12016
12017
12018
12019
12020
12021
12022
12023
12024
12025
12026
12027
12028
12029
12030
12031
12032
12033
12034
12035
12036
12037
12038
12039
12040
12041
12042
12043
12044
12045
12046
12047
12048
12049
12050
12051
12052
12053
12054
12055
12056
12057
12058
12059
12060
12061
12062
12063
12064
12065
12066
12067
12068
12069
12070
12071
12072
12073
12074
12075
12076
12077
12078
12079
12080
12081
12082
12083
12084
12085
12086
12087
12088
12089
12090
12091
12092
12093
12094
12095
12096
12097
12098
12099
12100
12101
12102
12103
12104
12105
12106
12107
12108
12109
12110
12111
12112
12113
12114
12115
12116
12117
12118
12119
12120
12121
12122
12123
12124
12125
12126
12127
12128
12129
12130
12131
12132
12133
12134
12135
12136
12137
12138
12139
12140
12141
12142
12143
12144
12145
12146
12147
12148
12149
12150
12151
12152
12153
12154
12155
12156
12157
12158
12159
12160
12161
12162
12163
12164
12165
12166
12167
12168
12169
12170
12171
12172
12173
12174
12175
12176
12177
12178
12179
12180
12181
12182
12183
12184
12185
12186
12187
12188
12189
12190
12191
12192
12193
12194
12195
12196
12197
12198
12199
12200
12201
12202
12203
12204
12205
12206
12207
12208
12209
12210
12211
12212
12213
12214
12215
12216
12217
12218
12219
12220
12221
12222
12223
12224
12225
12226
12227
12228
12229
12230
12231
12232
12233
12234
12235
12236
12237
12238
12239
12240
12241
12242
12243
12244
12245
12246
12247
12248
12249
12250
12251
12252
12253
12254
12255
12256
12257
12258
12259
12260
12261
12262
12263
12264
12265
12266
12267
12268
12269
12270
12271
12272
12273
12274
12275
12276
12277
12278
12279
12280
12281
12282
12283
12284
12285
12286
12287
12288
12289
12290
12291
12292
12293
12294
12295
12296
12297
12298
12299
12300
12301
12302
12303
12304
12305
12306
12307
12308
12309
12310
12311
12312
12313
12314
12315
12316
12317
12318
12319
12320
12321
12322
12323
12324
12325
12326
12327
12328
12329
12330
12331
12332
12333
12334
12335
12336
12337
12338
12339
12340
12341
12342
12343
12344
12345
12346
12347
12348
12349
12350
12351
12352
12353
12354
12355
12356
12357
12358
12359
12360
12361
12362
12363
12364
12365
12366
12367
12368
12369
12370
12371
12372
12373
12374
12375
12376
12377
12378
12379
12380
12381
12382
12383
12384
12385
12386
12387
12388
12389
12390
12391
12392
12393
12394
12395
12396
12397
12398
12399
12400
12401
12402
12403
12404
12405
12406
12407
12408
12409
12410
12411
12412
12413
12414
12415
12416
12417
12418
12419
12420
12421
12422
12423
12424
12425
12426
12427
12428
12429
12430
12431
12432
12433
12434
12435
12436
12437
12438
12439
12440
12441
12442
12443
12444
12445
12446
12447
12448
12449
12450
12451
12452
12453
12454
12455
12456
12457
12458
12459
12460
12461
12462
12463
12464
12465
12466
12467
12468
12469
12470
12471
12472
12473
12474
12475
12476
12477
12478
12479
12480
12481
12482
12483
12484
12485
12486
12487
12488
12489
12490
12491
12492
12493
12494
12495
12496
12497
12498
12499
12500
12501
12502
12503
12504
12505
12506
12507
12508
12509
12510
12511
12512
12513
12514
12515
12516
12517
12518
12519
12520
12521
12522
12523
12524
12525
12526
12527
12528
12529
12530
12531
12532
12533
12534
12535
12536
12537
12538
12539
12540
12541
12542
12543
12544
12545
12546
12547
12548
12549
12550
12551
12552
12553
12554
12555
12556
12557
12558
12559
12560
12561
12562
12563
12564
12565
12566
12567
12568
12569
12570
12571
12572
12573
12574
12575
12576
12577
12578
12579
12580
12581
12582
12583
12584
12585
12586
12587
12588
12589
12590
12591
12592
12593
12594
12595
12596
12597
12598
12599
12600
12601
12602
12603
12604
12605
12606
12607
12608
12609
12610
12611
12612
12613
12614
12615
12616
12617
12618
12619
12620
12621
12622
12623
12624
12625
12626
12627
12628
12629
12630
12631
12632
12633
12634
12635
12636
12637
12638
12639
12640
12641
12642
12643
12644
12645
12646
12647
12648
12649
12650
12651
12652
12653
12654
12655
12656
12657
12658
12659
12660
12661
12662
12663
12664
12665
12666
12667
12668
12669
12670
12671
12672
12673
12674
12675
12676
12677
12678
12679
12680
12681
12682
12683
12684
12685
12686
12687
12688
12689
12690
12691
12692
12693
12694
12695
12696
12697
12698
12699
12700
12701
12702
12703
12704
12705
12706
12707
12708
12709
12710
12711
12712
12713
12714
12715
12716
12717
12718
12719
12720
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730
12731
12732
12733
12734
12735
12736
12737
12738
12739
12740
12741
12742
12743
12744
12745
12746
12747
12748
12749
12750
12751
12752
12753
12754
12755
12756
12757
12758
12759
12760
12761
12762
12763
12764
12765
12766
12767
12768
12769
12770
12771
12772
12773
12774
12775
12776
12777
12778
12779
12780
12781
12782
12783
12784
12785
12786
12787
12788
12789
12790
12791
12792
12793
12794
12795
12796
12797
12798
12799
12800
12801
12802
12803
12804
12805
12806
12807
12808
12809
12810
12811
12812
12813
12814
12815
12816
12817
12818
12819
12820
12821
12822
12823
12824
12825
12826
12827
12828
12829
12830
12831
12832
12833
12834
12835
12836
12837
12838
12839
12840
12841
12842
12843
12844
12845
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855
12856
12857
12858
12859
12860
12861
12862
12863
12864
12865
12866
12867
12868
12869
12870
12871
12872
12873
12874
12875
12876
12877
12878
12879
12880
12881
12882
12883
12884
12885
12886
12887
12888
12889
12890
12891
12892
12893
12894
12895
12896
12897
12898
12899
12900
12901
12902
12903
12904
12905
12906
12907
12908
12909
12910
12911
12912
12913
12914
12915
12916
12917
12918
12919
12920
12921
12922
12923
12924
12925
12926
12927
12928
12929
12930
12931
12932
12933
12934
12935
12936
12937
12938
12939
12940
12941
12942
12943
12944
12945
12946
12947
12948
12949
12950
12951
12952
12953
12954
12955
12956
12957
12958
12959
12960
12961
12962
12963
12964
12965
12966
12967
12968
12969
12970
12971
12972
12973
12974
12975
12976
12977
12978
12979
12980
12981
12982
12983
12984
12985
12986
12987
12988
12989
12990
12991
12992
12993
12994
12995
12996
12997
12998
12999
13000
13001
13002
13003
13004
13005
13006
13007
13008
13009
13010
13011
13012
13013
13014
13015
13016
13017
13018
13019
13020
13021
13022
13023
13024
13025
13026
13027
13028
13029
13030
13031
13032
13033
13034
13035
13036
13037
13038
13039
13040
13041
13042
13043
13044
13045
13046
13047
13048
13049
13050
13051
13052
13053
13054
13055
13056
13057
13058
13059
13060
13061
13062
13063
13064
13065
13066
13067
13068
13069
13070
13071
13072
13073
13074
13075
13076
13077
13078
13079
13080
13081
13082
13083
13084
13085
13086
13087
13088
13089
13090
13091
13092
13093
13094
13095
13096
13097
13098
13099
13100
13101
13102
13103
13104
13105
13106
13107
13108
13109
13110
13111
13112
13113
13114
13115
13116
13117
13118
13119
13120
13121
13122
13123
13124
13125
13126
13127
13128
13129
13130
13131
13132
13133
13134
13135
13136
13137
13138
13139
13140
13141
13142
13143
13144
13145
13146
13147
13148
13149
13150
13151
13152
13153
13154
13155
13156
13157
13158
13159
13160
13161
13162
13163
13164
13165
13166
13167
13168
13169
13170
13171
13172
13173
13174
13175
13176
13177
13178
13179
13180
13181
13182
13183
13184
13185
13186
13187
13188
13189
13190
13191
13192
13193
13194
13195
13196
13197
13198
13199
13200
13201
13202
13203
13204
13205
13206
13207
13208
13209
13210
13211
13212
13213
13214
13215
13216
13217
13218
13219
13220
13221
13222
13223
13224
13225
13226
13227
13228
13229
13230
13231
13232
13233
13234
13235
13236
13237
13238
13239
13240
13241
13242
13243
13244
13245
13246
13247
13248
13249
13250
13251
13252
13253
13254
13255
13256
13257
13258
13259
13260
13261
13262
13263
13264
13265
13266
13267
13268
13269
13270
13271
13272
13273
13274
13275
13276
13277
13278
13279
13280
13281
13282
13283
13284
13285
13286
13287
13288
13289
13290
13291
13292
13293
13294
13295
13296
13297
13298
13299
13300
13301
13302
13303
13304
13305
13306
13307
13308
13309
13310
13311
13312
13313
13314
13315
13316
13317
13318
13319
13320
13321
13322
13323
13324
13325
13326
13327
13328
13329
13330
13331
13332
13333
13334
13335
13336
13337
13338
13339
13340
13341
13342
13343
13344
13345
13346
13347
13348
13349
13350
13351
13352
13353
13354
13355
13356
13357
13358
13359
13360
13361
13362
13363
13364
13365
13366
13367
13368
13369
13370
13371
13372
13373
13374
13375
13376
13377
13378
13379
13380
13381
13382
13383
13384
13385
13386
13387
13388
13389
13390
13391
13392
13393
13394
13395
13396
13397
13398
13399
13400
13401
13402
13403
13404
13405
13406
13407
13408
13409
13410
13411
13412
13413
13414
13415
13416
13417
13418
13419
13420
13421
13422
13423
13424
13425
13426
13427
13428
13429
13430
13431
13432
13433
13434
13435
13436
13437
13438
13439
13440
13441
13442
13443
13444
13445
13446
13447
13448
13449
13450
13451
13452
13453
13454
13455
13456
13457
13458
13459
13460
13461
13462
13463
13464
13465
13466
13467
13468
13469
13470
13471
13472
13473
13474
13475
13476
13477
13478
13479
13480
13481
13482
13483
13484
13485
13486
13487
13488
13489
13490
13491
13492
13493
13494
13495
13496
13497
13498
13499
13500
13501
13502
13503
13504
13505
13506
13507
13508
13509
13510
13511
13512
13513
13514
13515
13516
13517
13518
13519
13520
13521
13522
13523
13524
13525
13526
13527
13528
13529
13530
13531
13532
13533
13534
13535
13536
13537
13538
13539
13540
13541
13542
13543
13544
13545
13546
13547
13548
13549
13550
13551
13552
13553
13554
13555
13556
13557
13558
13559
13560
13561
13562
13563
13564
13565
13566
13567
13568
13569
13570
13571
13572
13573
13574
13575
13576
13577
13578
13579
13580
13581
13582
13583
13584
13585
13586
13587
13588
13589
13590
13591
13592
13593
13594
13595
13596
13597
13598
13599
13600
13601
13602
13603
13604
13605
13606
13607
13608
13609
13610
13611
13612
13613
13614
13615
13616
13617
13618
13619
13620
13621
13622
13623
13624
13625
13626
13627
13628
13629
13630
13631
13632
13633
13634
13635
13636
13637
13638
13639
13640
13641
13642
13643
13644
13645
13646
13647
13648
13649
13650
13651
13652
13653
13654
13655
13656
13657
13658
13659
13660
13661
13662
13663
13664
13665
13666
13667
13668
13669
13670
13671
13672
13673
13674
13675
13676
13677
13678
13679
13680
13681
13682
13683
13684
13685
13686
13687
13688
13689
13690
13691
13692
13693
13694
13695
13696
13697
13698
13699
13700
13701
13702
13703
13704
13705
13706
13707
13708
13709
13710
13711
13712
13713
13714
13715
13716
13717
13718
13719
13720
13721
13722
13723
13724
13725
13726
13727
13728
13729
13730
13731
13732
13733
13734
13735
13736
13737
13738
13739
13740
13741
13742
13743
13744
13745
13746
13747
13748
13749
13750
13751
13752
13753
13754
13755
13756
13757
13758
13759
13760
13761
13762
13763
13764
13765
13766
13767
13768
13769
13770
13771
13772
13773
13774
13775
13776
13777
13778
13779
13780
13781
13782
13783
13784
13785
13786
13787
13788
13789
13790
13791
13792
13793
13794
13795
13796
13797
13798
13799
13800
13801
13802
13803
13804
13805
13806
13807
13808
13809
13810
13811
13812
13813
13814
13815
13816
13817
13818
13819
13820
13821
13822
13823
13824
13825
13826
13827
13828
13829
13830
13831
13832
13833
13834
13835
13836
13837
13838
13839
13840
13841
13842
13843
13844
13845
13846
13847
13848
13849
13850
13851
13852
13853
13854
13855
13856
13857
13858
13859
13860
13861
13862
13863
13864
13865
13866
13867
13868
13869
13870
13871
13872
13873
13874
13875
13876
13877
13878
13879
13880
13881
13882
13883
13884
13885
13886
13887
13888
13889
13890
13891
13892
13893
13894
13895
13896
13897
13898
13899
13900
13901
13902
13903
13904
13905
13906
13907
13908
13909
13910
13911
13912
13913
13914
13915
13916
13917
13918
13919
13920
13921
13922
13923
13924
13925
13926
13927
13928
13929
13930
13931
13932
13933
13934
13935
13936
13937
13938
13939
13940
13941
13942
13943
13944
13945
13946
13947
13948
13949
13950
13951
13952
13953
13954
13955
13956
13957
13958
13959
13960
13961
13962
13963
13964
13965
13966
13967
13968
13969
13970
13971
13972
13973
13974
13975
13976
13977
13978
13979
13980
13981
13982
13983
13984
13985
13986
13987
13988
13989
13990
13991
13992
13993
13994
13995
13996
13997
13998
13999
14000
14001
14002
14003
14004
14005
14006
14007
14008
14009
14010
14011
14012
14013
14014
14015
14016
14017
14018
14019
14020
14021
14022
14023
14024
14025
14026
14027
14028
14029
14030
14031
14032
14033
14034
14035
14036
14037
14038
14039
14040
14041
14042
14043
14044
14045
14046
14047
14048
14049
14050
14051
14052
14053
14054
14055
14056
14057
14058
14059
14060
14061
14062
14063
14064
14065
14066
14067
14068
14069
14070
14071
14072
14073
14074
14075
14076
14077
14078
14079
14080
14081
14082
14083
14084
14085
14086
14087
14088
14089
14090
14091
14092
14093
14094
14095
14096
14097
14098
14099
14100
14101
14102
14103
14104
14105
14106
14107
14108
14109
14110
14111
14112
14113
14114
14115
14116
14117
14118
14119
14120
14121
14122
14123
14124
14125
14126
14127
14128
14129
14130
14131
14132
14133
14134
14135
14136
14137
14138
14139
14140
14141
14142
14143
14144
14145
14146
14147
14148
14149
14150
14151
14152
14153
14154
14155
14156
14157
14158
14159
14160
14161
14162
14163
14164
14165
14166
14167
14168
14169
14170
14171
14172
14173
14174
14175
14176
14177
14178
14179
14180
14181
14182
14183
14184
14185
14186
14187
14188
14189
14190
14191
14192
14193
14194
14195
14196
14197
14198
14199
14200
14201
14202
14203
14204
14205
14206
14207
14208
14209
14210
14211
14212
14213
14214
14215
14216
14217
14218
14219
14220
14221
14222
14223
14224
14225
14226
14227
14228
14229
14230
14231
14232
14233
14234
14235
14236
14237
14238
14239
14240
14241
14242
14243
14244
14245
14246
14247
14248
14249
14250
14251
14252
14253
14254
14255
14256
14257
14258
14259
14260
14261
14262
14263
14264
14265
14266
14267
14268
14269
14270
14271
14272
14273
14274
14275
14276
14277
14278
14279
14280
14281
14282
14283
14284
14285
14286
14287
14288
14289
14290
14291
14292
14293
14294
14295
14296
14297
14298
14299
14300
14301
14302
14303
14304
14305
14306
14307
14308
14309
14310
14311
14312
14313
14314
14315
14316
14317
14318
14319
14320
14321
14322
14323
14324
14325
14326
14327
14328
14329
14330
14331
14332
14333
14334
14335
14336
14337
14338
14339
14340
14341
14342
14343
14344
14345
14346
14347
14348
14349
14350
14351
14352
14353
14354
14355
14356
14357
14358
14359
14360
14361
14362
14363
14364
14365
14366
14367
14368
14369
14370
14371
14372
14373
14374
14375
14376
14377
14378
14379
14380
14381
14382
14383
14384
14385
14386
14387
14388
14389
14390
14391
14392
14393
14394
14395
14396
14397
14398
14399
14400
14401
14402
14403
14404
14405
14406
14407
14408
14409
14410
14411
14412
14413
14414
14415
14416
14417
14418
14419
14420
14421
14422
14423
14424
14425
14426
14427
14428
14429
14430
14431
14432
14433
14434
14435
14436
14437
14438
14439
14440
14441
14442
14443
14444
14445
14446
14447
14448
14449
14450
14451
14452
14453
14454
14455
14456
14457
14458
14459
14460
14461
14462
14463
14464
14465
14466
14467
14468
14469
14470
14471
14472
14473
14474
14475
14476
14477
14478
14479
14480
14481
14482
14483
14484
14485
14486
14487
14488
14489
14490
14491
14492
14493
14494
14495
14496
14497
14498
14499
14500
14501
14502
14503
14504
14505
14506
14507
14508
14509
14510
14511
14512
14513
14514
14515
14516
14517
14518
14519
14520
14521
14522
14523
14524
14525
14526
14527
14528
14529
14530
14531
14532
14533
14534
14535
14536
14537
14538
14539
14540
14541
14542
14543
14544
14545
14546
14547
14548
14549
14550
14551
14552
14553
14554
14555
14556
14557
14558
14559
14560
14561
14562
14563
14564
14565
14566
14567
14568
14569
14570
14571
14572
14573
14574
14575
14576
14577
14578
14579
14580
14581
14582
14583
14584
14585
14586
14587
14588
14589
14590
14591
14592
14593
14594
14595
14596
14597
14598
14599
14600
14601
14602
14603
14604
14605
14606
14607
14608
14609
14610
14611
14612
14613
14614
14615
14616
14617
14618
14619
14620
14621
14622
14623
14624
14625
14626
14627
14628
14629
14630
14631
14632
14633
14634
14635
14636
14637
14638
14639
14640
14641
14642
14643
14644
14645
14646
14647
14648
14649
14650
14651
14652
14653
14654
14655
14656
14657
14658
14659
14660
14661
14662
14663
14664
14665
14666
14667
14668
14669
14670
14671
14672
14673
14674
14675
14676
14677
14678
14679
14680
14681
14682
14683
14684
14685
14686
14687
14688
14689
14690
14691
14692
14693
14694
14695
14696
14697
14698
14699
14700
14701
14702
14703
14704
14705
14706
14707
14708
14709
14710
14711
14712
14713
14714
14715
14716
14717
14718
14719
14720
14721
14722
14723
14724
14725
14726
14727
14728
14729
14730
14731
14732
14733
14734
14735
14736
14737
14738
14739
14740
14741
14742
14743
14744
14745
14746
14747
14748
14749
14750
14751
14752
14753
14754
14755
14756
14757
14758
14759
14760
14761
14762
14763
14764
14765
14766
14767
14768
14769
14770
14771
14772
14773
14774
14775
14776
14777
14778
14779
14780
14781
14782
14783
14784
14785
14786
14787
14788
14789
14790
14791
14792
14793
14794
14795
14796
14797
14798
14799
14800
14801
14802
14803
14804
14805
14806
14807
14808
14809
14810
14811
14812
14813
14814
14815
14816
14817
14818
14819
14820
14821
14822
14823
14824
14825
14826
14827
14828
14829
14830
14831
14832
14833
14834
14835
14836
14837
14838
14839
14840
14841
14842
14843
14844
14845
14846
14847
14848
14849
14850
14851
14852
14853
14854
14855
14856
14857
14858
14859
14860
14861
14862
14863
14864
14865
14866
14867
14868
14869
14870
14871
14872
14873
14874
14875
14876
14877
14878
14879
14880
14881
14882
14883
14884
14885
14886
14887
14888
14889
14890
14891
14892
14893
14894
14895
14896
14897
14898
14899
14900
14901
14902
14903
14904
14905
14906
14907
14908
14909
14910
14911
14912
14913
14914
14915
14916
14917
14918
14919
14920
14921
14922
14923
14924
14925
14926
14927
14928
14929
14930
14931
14932
14933
14934
14935
14936
14937
14938
14939
14940
14941
14942
14943
14944
14945
14946
14947
14948
14949
14950
14951
14952
14953
14954
14955
14956
14957
14958
14959
14960
14961
14962
14963
14964
14965
14966
14967
14968
14969
14970
14971
14972
14973
14974
14975
14976
14977
14978
14979
14980
14981
14982
14983
14984
14985
14986
14987
14988
14989
14990
14991
14992
14993
14994
14995
14996
14997
14998
14999
15000
15001
15002
15003
15004
15005
15006
15007
15008
15009
15010
15011
15012
15013
15014
15015
15016
15017
15018
15019
15020
15021
15022
15023
15024
15025
15026
15027
15028
15029
15030
15031
15032
15033
15034
15035
15036
15037
15038
15039
15040
15041
15042
15043
15044
15045
15046
15047
15048
15049
15050
15051
15052
15053
15054
15055
15056
15057
15058
15059
15060
15061
15062
15063
15064
15065
15066
15067
15068
15069
15070
15071
15072
15073
15074
15075
15076
15077
15078
15079
15080
15081
15082
15083
15084
15085
15086
15087
15088
15089
15090
15091
15092
15093
15094
15095
15096
15097
15098
15099
15100
15101
15102
15103
15104
15105
15106
15107
15108
15109
15110
15111
15112
15113
15114
15115
15116
15117
15118
15119
15120
15121
15122
15123
15124
15125
15126
15127
15128
15129
15130
15131
15132
15133
15134
15135
15136
15137
15138
15139
15140
15141
15142
15143
15144
15145
15146
15147
15148
15149
15150
15151
15152
15153
15154
15155
15156
15157
15158
15159
15160
15161
15162
15163
15164
15165
15166
15167
15168
15169
15170
15171
15172
15173
15174
15175
15176
15177
15178
15179
15180
15181
15182
15183
15184
15185
15186
15187
15188
15189
15190
15191
15192
15193
15194
15195
15196
15197
15198
15199
15200
15201
15202
15203
15204
15205
15206
15207
15208
15209
15210
15211
15212
15213
15214
15215
15216
15217
15218
15219
15220
15221
15222
15223
15224
15225
15226
15227
15228
15229
15230
15231
15232
15233
15234
15235
15236
15237
15238
15239
15240
15241
15242
15243
15244
15245
15246
15247
15248
15249
15250
15251
15252
15253
15254
15255
15256
15257
15258
15259
15260
15261
15262
15263
15264
15265
15266
15267
15268
15269
15270
15271
15272
15273
15274
15275
15276
15277
15278
15279
15280
15281
15282
15283
15284
15285
15286
15287
15288
15289
15290
15291
15292
15293
15294
15295
15296
15297
15298
15299
15300
15301
15302
15303
15304
15305
15306
15307
15308
15309
15310
15311
15312
15313
15314
15315
15316
15317
15318
15319
15320
15321
15322
15323
15324
15325
15326
15327
15328
15329
15330
15331
15332
15333
15334
15335
15336
15337
15338
15339
15340
15341
15342
15343
15344
15345
15346
15347
15348
15349
15350
15351
15352
15353
15354
15355
15356
15357
15358
15359
15360
15361
15362
15363
15364
15365
15366
15367
15368
15369
15370
15371
15372
15373
15374
15375
15376
15377
15378
15379
15380
15381
15382
15383
15384
15385
15386
15387
15388
15389
15390
15391
15392
15393
15394
15395
15396
15397
15398
15399
15400
15401
15402
15403
15404
15405
15406
15407
15408
15409
15410
15411
15412
15413
15414
15415
15416
15417
15418
15419
15420
15421
15422
15423
15424
15425
15426
15427
15428
15429
15430
15431
15432
15433
15434
15435
15436
15437
15438
15439
15440
15441
15442
15443
15444
15445
15446
15447
15448
15449
15450
15451
15452
15453
15454
15455
15456
15457
15458
15459
15460
15461
15462
15463
15464
15465
15466
15467
15468
15469
15470
15471
15472
15473
15474
15475
15476
15477
15478
15479
15480
15481
15482
15483
15484
15485
15486
15487
15488
15489
15490
15491
15492
15493
15494
15495
15496
15497
15498
15499
15500
15501
15502
15503
15504
15505
15506
15507
15508
15509
15510
15511
15512
15513
15514
15515
15516
15517
15518
15519
15520
15521
15522
15523
15524
15525
15526
15527
15528
15529
15530
15531
15532
15533
15534
15535
15536
15537
15538
15539
15540
15541
15542
15543
15544
15545
15546
15547
15548
15549
15550
15551
15552
15553
15554
15555
15556
15557
15558
15559
15560
15561
15562
15563
15564
15565
15566
15567
15568
15569
15570
15571
15572
15573
15574
15575
15576
15577
15578
15579
15580
15581
15582
15583
15584
15585
15586
15587
15588
15589
15590
15591
15592
15593
15594
15595
15596
15597
15598
15599
15600
15601
15602
15603
15604
15605
15606
15607
15608
15609
15610
15611
15612
15613
15614
15615
15616
15617
15618
15619
15620
15621
15622
15623
15624
15625
15626
15627
15628
15629
15630
15631
15632
15633
15634
15635
15636
15637
15638
15639
15640
15641
15642
15643
15644
15645
15646
15647
15648
15649
15650
15651
15652
15653
15654
15655
15656
15657
15658
15659
15660
15661
15662
15663
15664
15665
15666
15667
15668
15669
15670
15671
15672
15673
15674
15675
15676
15677
15678
15679
15680
15681
15682
15683
15684
15685
15686
15687
15688
15689
15690
15691
15692
15693
15694
15695
15696
15697
15698
15699
15700
15701
15702
15703
15704
15705
15706
15707
15708
15709
15710
15711
15712
15713
15714
15715
15716
15717
15718
15719
15720
15721
15722
15723
15724
15725
15726
15727
15728
15729
15730
15731
15732
15733
15734
15735
15736
15737
15738
15739
15740
15741
15742
15743
15744
15745
15746
15747
15748
15749
15750
15751
15752
15753
15754
15755
15756
15757
15758
15759
15760
15761
15762
15763
15764
15765
15766
15767
15768
15769
15770
15771
15772
15773
15774
15775
15776
15777
15778
15779
15780
15781
15782
15783
15784
15785
15786
15787
15788
15789
15790
15791
15792
15793
15794
15795
15796
15797
15798
15799
15800
15801
15802
15803
15804
15805
15806
15807
15808
15809
15810
15811
15812
15813
15814
15815
15816
15817
15818
15819
15820
15821
15822
15823
15824
15825
15826
15827
15828
15829
15830
15831
15832
15833
15834
15835
15836
15837
15838
15839
15840
15841
15842
15843
15844
15845
15846
15847
15848
15849
15850
15851
15852
15853
15854
15855
15856
15857
15858
15859
15860
15861
15862
15863
15864
15865
15866
15867
15868
15869
15870
15871
15872
15873
15874
15875
15876
15877
15878
15879
15880
15881
15882
15883
15884
15885
15886
15887
15888
15889
15890
15891
15892
15893
15894
15895
15896
15897
15898
15899
15900
15901
15902
15903
15904
15905
15906
15907
15908
15909
15910
15911
15912
15913
15914
15915
15916
15917
15918
15919
15920
15921
15922
15923
15924
15925
15926
15927
15928
15929
15930
15931
15932
15933
15934
15935
15936
15937
15938
15939
15940
15941
15942
15943
15944
15945
15946
15947
15948
15949
15950
15951
15952
15953
15954
15955
15956
15957
15958
15959
15960
15961
15962
15963
15964
15965
15966
15967
15968
15969
15970
15971
15972
15973
15974
15975
15976
15977
15978
15979
15980
15981
15982
15983
15984
15985
15986
15987
15988
15989
15990
15991
15992
15993
15994
15995
15996
15997
15998
15999
16000
16001
16002
16003
16004
16005
16006
16007
16008
16009
16010
16011
16012
16013
16014
16015
16016
16017
16018
16019
16020
16021
16022
16023
16024
16025
16026
16027
16028
16029
16030
16031
16032
16033
16034
16035
16036
16037
16038
16039
16040
16041
16042
16043
16044
16045
16046
16047
16048
16049
16050
16051
16052
16053
16054
16055
16056
16057
16058
16059
16060
16061
16062
16063
16064
16065
16066
16067
16068
16069
16070
16071
16072
16073
16074
16075
16076
16077
16078
16079
16080
16081
16082
16083
16084
16085
16086
16087
16088
16089
16090
16091
16092
16093
16094
16095
16096
16097
16098
16099
16100
16101
16102
16103
16104
16105
16106
16107
16108
16109
16110
16111
16112
16113
16114
16115
16116
16117
16118
16119
16120
16121
16122
16123
16124
16125
16126
16127
16128
16129
16130
16131
16132
16133
16134
16135
16136
16137
16138
16139
16140
16141
16142
16143
16144
16145
16146
16147
16148
16149
16150
16151
16152
16153
16154
16155
16156
16157
16158
16159
16160
16161
16162
16163
16164
16165
16166
16167
16168
16169
16170
16171
16172
16173
16174
16175
16176
16177
16178
16179
16180
16181
16182
16183
16184
16185
16186
16187
16188
16189
16190
16191
16192
16193
16194
16195
16196
16197
16198
16199
16200
16201
16202
16203
16204
16205
16206
16207
16208
16209
16210
16211
16212
16213
16214
16215
16216
16217
16218
16219
16220
16221
16222
16223
16224
16225
16226
16227
16228
16229
16230
16231
16232
16233
16234
16235
16236
16237
16238
16239
16240
16241
16242
16243
16244
16245
16246
16247
16248
16249
16250
16251
16252
16253
16254
16255
16256
16257
16258
16259
16260
16261
16262
16263
16264
16265
16266
16267
16268
16269
16270
16271
16272
16273
16274
16275
16276
16277
16278
16279
16280
16281
16282
16283
16284
16285
16286
16287
16288
16289
16290
16291
16292
16293
16294
16295
16296
16297
16298
16299
16300
16301
16302
16303
16304
16305
16306
16307
16308
16309
16310
16311
16312
16313
16314
16315
16316
16317
16318
16319
16320
16321
16322
16323
16324
16325
16326
16327
16328
16329
16330
16331
16332
16333
16334
16335
16336
16337
16338
16339
16340
16341
16342
16343
16344
16345
16346
16347
16348
16349
16350
16351
16352
16353
16354
16355
16356
16357
16358
16359
16360
16361
16362
16363
16364
16365
16366
16367
16368
16369
16370
16371
16372
16373
16374
16375
16376
16377
16378
16379
16380
16381
16382
16383
16384
16385
16386
16387
16388
16389
16390
16391
16392
16393
16394
16395
16396
16397
16398
16399
16400
16401
16402
16403
16404
16405
16406
16407
16408
16409
16410
16411
16412
16413
16414
16415
16416
16417
16418
16419
16420
16421
16422
16423
16424
16425
16426
16427
16428
16429
16430
16431
16432
16433
16434
16435
16436
16437
16438
16439
16440
16441
16442
16443
16444
16445
16446
16447
16448
16449
16450
16451
16452
16453
16454
16455
16456
16457
16458
16459
16460
16461
16462
16463
16464
16465
16466
16467
16468
16469
16470
16471
16472
16473
16474
16475
16476
16477
16478
16479
16480
16481
16482
16483
16484
16485
16486
16487
16488
16489
16490
16491
16492
16493
16494
16495
16496
16497
16498
16499
16500
16501
16502
16503
16504
16505
16506
16507
16508
16509
16510
16511
16512
16513
16514
16515
16516
16517
16518
16519
16520
16521
16522
16523
16524
16525
16526
16527
16528
16529
16530
16531
16532
16533
16534
16535
16536
16537
16538
16539
16540
16541
16542
16543
16544
16545
16546
16547
16548
16549
16550
16551
16552
16553
16554
16555
16556
16557
16558
16559
16560
16561
16562
16563
16564
16565
16566
16567
16568
16569
16570
16571
16572
16573
16574
16575
16576
16577
16578
16579
16580
16581
16582
16583
16584
16585
16586
16587
16588
16589
16590
16591
16592
16593
16594
16595
16596
16597
16598
16599
16600
16601
16602
16603
16604
16605
16606
16607
16608
16609
16610
16611
16612
16613
16614
16615
16616
16617
16618
16619
16620
16621
16622
16623
16624
16625
16626
16627
16628
16629
16630
16631
16632
16633
16634
16635
16636
16637
16638
16639
16640
16641
16642
16643
16644
16645
16646
16647
16648
16649
16650
16651
16652
16653
16654
16655
16656
16657
16658
16659
16660
16661
16662
16663
16664
16665
16666
16667
16668
16669
16670
16671
16672
16673
16674
16675
16676
16677
16678
16679
16680
16681
16682
16683
16684
16685
16686
16687
16688
16689
16690
16691
16692
16693
16694
16695
16696
16697
16698
16699
16700
16701
16702
16703
16704
16705
16706
16707
16708
16709
16710
16711
16712
16713
16714
16715
16716
16717
16718
16719
16720
16721
16722
16723
16724
16725
16726
16727
16728
16729
16730
16731
16732
16733
16734
16735
16736
16737
16738
16739
16740
16741
16742
16743
16744
16745
16746
16747
16748
16749
16750
16751
16752
16753
16754
16755
16756
16757
16758
16759
16760
16761
16762
16763
16764
16765
16766
16767
16768
16769
16770
16771
16772
16773
16774
16775
16776
16777
16778
16779
16780
16781
16782
16783
16784
16785
16786
16787
16788
16789
16790
16791
16792
16793
16794
16795
16796
16797
16798
16799
16800
16801
16802
16803
16804
16805
16806
16807
16808
16809
16810
16811
16812
16813
16814
16815
16816
16817
16818
16819
16820
16821
16822
16823
16824
16825
16826
16827
16828
16829
16830
16831
16832
16833
16834
16835
16836
16837
16838
16839
16840
16841
16842
16843
16844
16845
16846
16847
16848
16849
16850
16851
16852
16853
16854
16855
16856
16857
16858
16859
16860
16861
16862
16863
16864
16865
16866
16867
16868
16869
16870
16871
16872
16873
16874
16875
16876
16877
16878
16879
16880
16881
16882
16883
16884
16885
16886
16887
16888
16889
16890
16891
16892
16893
16894
16895
16896
16897
16898
16899
16900
16901
16902
16903
16904
16905
16906
16907
16908
16909
16910
16911
16912
16913
16914
16915
16916
16917
16918
16919
16920
16921
16922
16923
16924
16925
16926
16927
16928
16929
16930
16931
16932
16933
16934
16935
16936
16937
16938
16939
16940
16941
16942
16943
16944
16945
16946
16947
16948
16949
16950
16951
16952
16953
16954
16955
16956
16957
16958
16959
16960
16961
16962
16963
16964
16965
16966
16967
16968
16969
16970
16971
16972
16973
16974
16975
16976
16977
16978
16979
16980
16981
16982
16983
16984
16985
16986
16987
16988
16989
16990
16991
16992
16993
16994
16995
16996
16997
16998
16999
17000
17001
17002
17003
17004
17005
17006
17007
17008
17009
17010
17011
17012
17013
17014
17015
17016
17017
17018
17019
17020
17021
17022
17023
17024
17025
17026
17027
17028
17029
17030
17031
17032
17033
17034
17035
17036
17037
17038
17039
17040
17041
17042
17043
17044
17045
17046
17047
17048
17049
17050
17051
17052
17053
17054
17055
17056
17057
17058
17059
17060
17061
17062
17063
17064
17065
17066
17067
17068
17069
17070
17071
17072
17073
17074
17075
17076
17077
17078
17079
17080
17081
17082
17083
17084
17085
17086
17087
17088
17089
17090
17091
17092
17093
17094
17095
17096
17097
17098
17099
17100
17101
17102
17103
17104
17105
17106
17107
17108
17109
17110
17111
17112
17113
17114
17115
17116
17117
17118
17119
17120
17121
17122
17123
17124
17125
17126
17127
17128
17129
17130
17131
17132
17133
17134
17135
17136
17137
17138
17139
17140
17141
17142
17143
17144
17145
17146
17147
17148
17149
17150
17151
17152
17153
17154
17155
17156
17157
17158
17159
17160
17161
17162
17163
17164
17165
17166
17167
17168
17169
17170
17171
17172
17173
17174
17175
17176
17177
17178
17179
17180
17181
17182
17183
17184
17185
17186
17187
17188
17189
17190
17191
17192
17193
17194
17195
17196
17197
17198
17199
17200
17201
17202
17203
17204
17205
17206
17207
17208
17209
17210
17211
17212
17213
17214
17215
17216
17217
17218
17219
17220
17221
17222
17223
17224
17225
17226
17227
17228
17229
17230
17231
17232
17233
17234
17235
17236
17237
17238
17239
17240
17241
17242
17243
17244
17245
17246
17247
17248
17249
17250
17251
17252
17253
17254
17255
17256
17257
17258
17259
17260
17261
17262
17263
17264
17265
17266
17267
17268
17269
17270
17271
17272
17273
17274
17275
17276
17277
17278
17279
17280
17281
17282
17283
17284
17285
17286
17287
17288
17289
17290
17291
17292
17293
17294
17295
17296
17297
17298
17299
17300
17301
17302
17303
17304
17305
17306
17307
17308
17309
17310
17311
17312
17313
17314
17315
17316
17317
17318
17319
17320
17321
17322
17323
17324
17325
17326
17327
17328
17329
17330
17331
17332
17333
17334
17335
17336
17337
17338
17339
17340
17341
17342
17343
17344
17345
17346
17347
17348
17349
17350
17351
17352
17353
17354
17355
17356
17357
17358
17359
17360
17361
17362
17363
17364
17365
17366
17367
17368
17369
17370
17371
17372
17373
17374
17375
17376
17377
17378
17379
17380
17381
17382
17383
17384
17385
17386
17387
17388
17389
17390
17391
17392
17393
17394
17395
17396
17397
17398
17399
17400
17401
17402
17403
17404
17405
17406
17407
17408
17409
17410
17411
17412
17413
17414
17415
17416
17417
17418
17419
17420
17421
17422
17423
17424
17425
17426
17427
17428
17429
17430
17431
17432
17433
17434
17435
17436
17437
17438
17439
17440
17441
17442
17443
17444
17445
17446
17447
17448
17449
17450
17451
17452
17453
17454
17455
17456
17457
17458
17459
17460
17461
17462
17463
17464
17465
17466
17467
17468
17469
17470
17471
17472
17473
17474
17475
17476
17477
17478
17479
17480
17481
17482
17483
17484
17485
17486
17487
17488
17489
17490
17491
17492
17493
17494
17495
17496
17497
17498
17499
17500
17501
17502
17503
17504
17505
17506
17507
17508
17509
17510
17511
17512
17513
17514
17515
17516
17517
17518
17519
17520
17521
17522
17523
17524
17525
17526
17527
17528
17529
17530
17531
17532
17533
17534
17535
17536
17537
17538
17539
17540
17541
17542
17543
17544
17545
17546
17547
17548
17549
17550
17551
17552
17553
17554
17555
17556
17557
17558
17559
17560
17561
17562
17563
17564
17565
17566
17567
17568
17569
17570
17571
17572
17573
17574
17575
17576
17577
17578
17579
17580
17581
17582
17583
17584
17585
17586
17587
17588
17589
17590
17591
17592
17593
17594
17595
17596
17597
17598
17599
17600
17601
17602
17603
17604
17605
17606
17607
17608
17609
17610
17611
17612
17613
17614
17615
17616
17617
17618
17619
17620
17621
17622
17623
17624
17625
17626
17627
17628
17629
17630
17631
17632
17633
17634
17635
17636
17637
17638
17639
17640
17641
17642
17643
17644
17645
17646
17647
17648
17649
17650
17651
17652
17653
17654
17655
17656
17657
17658
17659
17660
17661
17662
17663
17664
17665
17666
17667
17668
17669
17670
17671
17672
17673
17674
17675
17676
17677
17678
17679
17680
17681
17682
17683
17684
17685
17686
17687
17688
17689
17690
17691
17692
17693
17694
17695
17696
17697
17698
17699
17700
17701
17702
17703
17704
17705
17706
17707
17708
17709
17710
17711
17712
17713
17714
17715
17716
17717
17718
17719
17720
17721
17722
17723
17724
17725
17726
17727
17728
17729
17730
17731
17732
17733
17734
17735
17736
17737
17738
17739
17740
17741
17742
17743
17744
17745
17746
17747
17748
17749
17750
17751
17752
17753
17754
17755
17756
17757
17758
17759
17760
17761
17762
17763
17764
17765
17766
17767
17768
17769
17770
17771
17772
17773
17774
17775
17776
17777
17778
17779
17780
17781
17782
17783
17784
17785
17786
17787
17788
17789
17790
17791
17792
17793
17794
17795
17796
17797
17798
17799
17800
17801
17802
17803
17804
17805
17806
17807
17808
17809
17810
17811
17812
17813
17814
17815
17816
17817
17818
17819
17820
17821
17822
17823
17824
17825
17826
17827
17828
17829
17830
17831
17832
17833
17834
17835
17836
17837
17838
17839
17840
17841
17842
17843
17844
17845
17846
17847
17848
17849
17850
17851
17852
17853
17854
17855
17856
17857
17858
17859
17860
17861
17862
17863
17864
17865
17866
17867
17868
17869
17870
17871
17872
17873
17874
17875
17876
17877
17878
17879
17880
17881
17882
17883
17884
17885
17886
17887
17888
17889
17890
17891
17892
17893
17894
17895
17896
17897
17898
17899
17900
17901
17902
17903
17904
17905
17906
17907
17908
17909
17910
17911
17912
17913
17914
17915
17916
17917
17918
17919
17920
17921
17922
17923
17924
17925
17926
17927
17928
17929
17930
17931
17932
17933
17934
17935
17936
17937
17938
17939
17940
17941
17942
17943
17944
17945
17946
17947
17948
17949
17950
17951
17952
17953
17954
17955
17956
17957
17958
17959
17960
17961
17962
17963
17964
17965
17966
17967
17968
17969
17970
17971
17972
17973
17974
17975
17976
17977
17978
17979
17980
17981
17982
17983
17984
17985
17986
17987
17988
17989
17990
17991
17992
17993
17994
17995
17996
17997
17998
17999
18000
18001
18002
18003
18004
18005
18006
18007
18008
18009
18010
18011
18012
18013
18014
18015
18016
18017
18018
18019
18020
18021
18022
18023
18024
18025
18026
18027
18028
18029
18030
18031
18032
18033
18034
18035
18036
18037
18038
18039
18040
18041
18042
18043
18044
18045
18046
18047
18048
18049
18050
18051
18052
18053
18054
18055
18056
18057
18058
18059
18060
18061
18062
18063
18064
18065
18066
18067
18068
18069
18070
18071
18072
18073
18074
18075
18076
18077
18078
18079
18080
18081
18082
18083
18084
18085
18086
18087
18088
18089
18090
18091
18092
18093
18094
18095
18096
18097
18098
18099
18100
18101
18102
18103
18104
18105
18106
18107
18108
18109
18110
18111
18112
18113
18114
18115
18116
18117
18118
18119
18120
18121
18122
18123
18124
18125
18126
18127
18128
18129
18130
18131
18132
18133
18134
18135
18136
18137
18138
18139
18140
18141
18142
18143
18144
18145
18146
18147
18148
18149
18150
18151
18152
18153
18154
18155
18156
18157
18158
18159
18160
18161
18162
18163
18164
18165
18166
18167
18168
18169
18170
18171
18172
18173
18174
18175
18176
18177
18178
18179
18180
18181
18182
18183
18184
18185
18186
18187
18188
18189
18190
18191
18192
18193
18194
18195
18196
18197
18198
18199
18200
18201
18202
18203
18204
18205
18206
18207
18208
18209
18210
18211
18212
18213
18214
18215
18216
18217
18218
18219
18220
18221
18222
18223
18224
18225
18226
18227
18228
18229
18230
18231
18232
18233
18234
18235
18236
18237
18238
18239
18240
18241
18242
18243
18244
18245
18246
18247
18248
18249
18250
18251
18252
18253
18254
18255
18256
18257
18258
18259
18260
18261
18262
18263
18264
18265
18266
18267
18268
18269
18270
18271
18272
18273
18274
18275
18276
18277
18278
18279
18280
18281
18282
18283
18284
18285
18286
18287
18288
18289
18290
18291
18292
18293
18294
18295
18296
18297
18298
18299
18300
18301
18302
18303
18304
18305
18306
18307
18308
18309
18310
18311
18312
18313
18314
18315
18316
18317
18318
18319
18320
18321
18322
18323
18324
18325
18326
18327
18328
18329
18330
18331
18332
18333
18334
18335
18336
18337
18338
18339
18340
18341
18342
18343
18344
18345
18346
18347
18348
18349
18350
18351
18352
18353
18354
18355
18356
18357
18358
18359
18360
18361
18362
18363
18364
18365
18366
18367
18368
18369
18370
18371
18372
18373
18374
18375
18376
18377
18378
18379
18380
18381
18382
18383
18384
18385
18386
18387
18388
18389
18390
18391
18392
18393
18394
18395
18396
18397
18398
18399
18400
18401
18402
18403
18404
18405
18406
18407
18408
18409
18410
18411
18412
18413
18414
18415
18416
18417
18418
18419
18420
18421
18422
18423
18424
18425
18426
18427
18428
18429
18430
18431
18432
18433
18434
18435
18436
18437
18438
18439
18440
18441
18442
18443
18444
18445
18446
18447
18448
18449
18450
18451
18452
18453
18454
18455
18456
18457
18458
18459
18460
18461
18462
18463
18464
18465
18466
18467
18468
18469
18470
18471
18472
18473
18474
18475
18476
18477
18478
18479
18480
18481
18482
18483
18484
18485
18486
18487
18488
18489
18490
18491
18492
18493
18494
18495
18496
18497
18498
18499
18500
18501
18502
18503
18504
18505
18506
18507
18508
18509
18510
18511
18512
18513
18514
18515
18516
18517
18518
18519
18520
18521
18522
18523
18524
18525
18526
18527
18528
18529
18530
18531
18532
18533
18534
18535
18536
18537
18538
18539
18540
18541
18542
18543
18544
18545
18546
18547
18548
18549
18550
18551
18552
18553
18554
18555
18556
18557
18558
18559
18560
18561
18562
18563
18564
18565
18566
18567
18568
18569
18570
18571
18572
18573
18574
18575
18576
18577
18578
18579
18580
18581
18582
18583
18584
18585
18586
18587
18588
18589
18590
18591
18592
18593
18594
18595
18596
18597
18598
18599
18600
18601
18602
18603
18604
18605
18606
18607
18608
18609
18610
18611
18612
18613
18614
18615
18616
18617
18618
18619
18620
18621
18622
18623
18624
18625
18626
18627
18628
18629
18630
18631
18632
18633
18634
18635
18636
18637
18638
18639
18640
18641
18642
18643
18644
18645
18646
18647
18648
18649
18650
18651
18652
18653
18654
18655
18656
18657
18658
18659
18660
18661
18662
18663
18664
18665
18666
18667
18668
18669
18670
18671
18672
18673
18674
18675
18676
18677
18678
18679
18680
18681
18682
18683
18684
18685
18686
18687
18688
18689
18690
18691
18692
18693
18694
18695
18696
18697
18698
18699
18700
18701
18702
18703
18704
18705
18706
18707
18708
18709
18710
18711
18712
18713
18714
18715
18716
18717
18718
18719
18720
18721
18722
18723
18724
18725
18726
18727
18728
18729
18730
18731
18732
18733
18734
18735
18736
18737
18738
18739
18740
18741
18742
18743
18744
18745
18746
18747
18748
18749
18750
18751
18752
18753
18754
18755
18756
18757
18758
18759
18760
18761
18762
18763
18764
18765
18766
18767
18768
18769
18770
18771
18772
18773
18774
18775
18776
18777
18778
18779
18780
18781
18782
18783
18784
18785
18786
18787
18788
18789
18790
18791
18792
18793
18794
18795
18796
18797
18798
18799
18800
18801
18802
18803
18804
18805
18806
18807
18808
18809
18810
18811
18812
18813
18814
18815
18816
18817
18818
18819
18820
18821
18822
18823
18824
18825
18826
18827
18828
18829
18830
18831
18832
18833
18834
18835
18836
18837
18838
18839
18840
18841
18842
18843
18844
18845
18846
18847
18848
18849
18850
18851
18852
18853
18854
18855
18856
18857
18858
18859
18860
18861
18862
18863
18864
18865
18866
18867
18868
18869
18870
18871
18872
18873
18874
18875
18876
18877
18878
18879
18880
18881
18882
18883
18884
18885
18886
18887
18888
18889
18890
18891
18892
18893
18894
18895
18896
18897
18898
18899
18900
18901
18902
18903
18904
18905
18906
18907
18908
18909
18910
18911
18912
18913
18914
18915
18916
18917
18918
18919
18920
18921
18922
18923
18924
18925
18926
18927
18928
18929
18930
18931
18932
18933
18934
18935
18936
18937
18938
18939
18940
18941
18942
18943
18944
18945
18946
18947
18948
18949
18950
18951
18952
18953
18954
18955
18956
18957
18958
18959
18960
18961
18962
18963
18964
18965
18966
18967
18968
18969
18970
18971
18972
18973
18974
18975
18976
18977
18978
18979
18980
18981
18982
18983
18984
18985
18986
18987
18988
18989
18990
18991
18992
18993
18994
18995
18996
18997
18998
18999
19000
19001
19002
19003
19004
19005
19006
19007
19008
19009
19010
19011
19012
19013
19014
19015
19016
19017
19018
19019
19020
19021
19022
19023
19024
19025
19026
19027
19028
19029
19030
19031
19032
19033
19034
19035
19036
19037
19038
19039
19040
19041
19042
19043
19044
19045
19046
19047
19048
19049
19050
19051
19052
19053
19054
19055
19056
19057
19058
19059
19060
19061
19062
19063
19064
19065
19066
19067
19068
19069
19070
19071
19072
19073
19074
19075
19076
19077
19078
19079
19080
19081
19082
19083
19084
19085
19086
19087
19088
19089
19090
19091
19092
19093
19094
19095
19096
19097
19098
19099
19100
19101
19102
19103
19104
19105
19106
19107
19108
19109
19110
19111
19112
19113
19114
19115
19116
19117
19118
19119
19120
19121
19122
19123
19124
19125
19126
19127
19128
19129
19130
19131
19132
19133
19134
19135
19136
19137
19138
19139
19140
19141
19142
19143
19144
19145
19146
19147
19148
19149
19150
19151
19152
19153
19154
19155
19156
19157
19158
19159
19160
19161
19162
19163
19164
19165
19166
19167
19168
19169
19170
19171
19172
19173
19174
19175
19176
19177
19178
19179
19180
19181
19182
19183
19184
19185
19186
19187
19188
19189
19190
19191
19192
19193
19194
19195
19196
19197
19198
19199
19200
19201
19202
19203
19204
19205
19206
19207
19208
19209
19210
19211
19212
19213
19214
19215
19216
19217
19218
19219
19220
19221
19222
19223
19224
19225
19226
19227
19228
19229
19230
19231
19232
19233
19234
19235
19236
19237
19238
19239
19240
19241
19242
19243
19244
19245
19246
19247
19248
19249
19250
19251
19252
19253
19254
19255
19256
19257
19258
19259
19260
19261
19262
19263
19264
19265
19266
19267
19268
19269
19270
19271
19272
19273
19274
19275
19276
19277
19278
19279
19280
19281
19282
19283
19284
19285
19286
19287
19288
19289
19290
19291
19292
19293
19294
19295
19296
19297
19298
19299
19300
19301
19302
19303
19304
19305
19306
19307
19308
19309
19310
19311
19312
19313
19314
19315
19316
19317
19318
19319
19320
19321
19322
19323
19324
19325
19326
19327
19328
19329
19330
19331
19332
19333
19334
19335
19336
19337
19338
19339
19340
19341
19342
19343
19344
19345
19346
19347
19348
19349
19350
19351
19352
19353
19354
19355
19356
19357
19358
19359
19360
19361
19362
19363
19364
19365
19366
19367
19368
19369
19370
19371
19372
19373
19374
19375
19376
19377
19378
19379
19380
19381
19382
19383
19384
19385
19386
19387
19388
19389
19390
19391
19392
19393
19394
19395
19396
19397
19398
19399
19400
19401
19402
19403
19404
19405
19406
19407
19408
19409
19410
19411
19412
19413
19414
19415
19416
19417
19418
19419
19420
19421
19422
19423
19424
19425
19426
19427
19428
19429
19430
19431
19432
19433
19434
19435
19436
19437
19438
19439
19440
19441
19442
19443
19444
19445
19446
19447
19448
19449
19450
19451
19452
19453
19454
19455
19456
19457
19458
19459
19460
19461
19462
19463
19464
19465
19466
19467
19468
19469
19470
19471
19472
19473
19474
19475
19476
19477
19478
19479
19480
19481
19482
19483
19484
19485
19486
19487
19488
19489
19490
19491
19492
19493
19494
19495
19496
19497
19498
19499
19500
19501
19502
19503
19504
19505
19506
19507
19508
19509
19510
19511
19512
19513
19514
19515
19516
19517
19518
19519
19520
19521
19522
19523
19524
19525
19526
19527
19528
19529
19530
19531
19532
19533
19534
19535
19536
19537
19538
19539
19540
19541
19542
19543
19544
19545
19546
19547
19548
19549
19550
19551
19552
19553
19554
19555
19556
19557
19558
19559
19560
19561
19562
19563
19564
19565
19566
19567
19568
19569
19570
19571
19572
19573
19574
19575
19576
19577
19578
19579
19580
19581
19582
19583
19584
19585
19586
19587
19588
19589
19590
19591
19592
19593
19594
19595
19596
19597
19598
19599
19600
19601
19602
19603
19604
19605
19606
19607
19608
19609
19610
19611
19612
19613
19614
19615
19616
19617
19618
19619
19620
19621
19622
19623
19624
19625
19626
19627
19628
19629
19630
19631
19632
19633
19634
19635
19636
19637
19638
19639
19640
19641
19642
19643
19644
19645
19646
19647
19648
19649
19650
19651
19652
19653
19654
19655
19656
19657
19658
19659
19660
19661
19662
19663
19664
19665
19666
19667
19668
19669
19670
19671
19672
19673
19674
19675
19676
19677
19678
19679
19680
19681
19682
19683
19684
19685
19686
19687
19688
19689
19690
19691
19692
19693
19694
19695
19696
19697
19698
19699
19700
19701
19702
19703
19704
19705
19706
19707
19708
19709
19710
19711
19712
19713
19714
19715
19716
19717
19718
19719
19720
19721
19722
19723
19724
19725
19726
19727
19728
19729
19730
19731
19732
19733
19734
19735
19736
19737
19738
19739
19740
19741
19742
19743
19744
19745
19746
19747
19748
19749
19750
19751
19752
19753
19754
19755
19756
19757
19758
19759
19760
19761
19762
19763
19764
19765
19766
19767
19768
19769
19770
19771
19772
19773
19774
19775
19776
19777
19778
19779
19780
19781
19782
19783
19784
19785
19786
19787
19788
19789
19790
19791
19792
19793
19794
19795
19796
19797
19798
19799
19800
19801
19802
19803
19804
19805
19806
19807
19808
19809
19810
19811
19812
19813
19814
19815
19816
19817
19818
19819
19820
19821
19822
19823
19824
19825
19826
19827
19828
19829
19830
19831
19832
19833
19834
19835
19836
19837
19838
19839
19840
19841
19842
19843
19844
19845
19846
19847
19848
19849
19850
19851
19852
19853
19854
19855
19856
19857
19858
19859
19860
19861
19862
19863
19864
19865
19866
19867
19868
19869
19870
19871
19872
19873
19874
19875
19876
19877
19878
19879
19880
19881
19882
19883
19884
19885
19886
19887
19888
19889
19890
19891
19892
19893
19894
19895
19896
19897
19898
19899
19900
19901
19902
19903
19904
19905
19906
19907
19908
19909
19910
19911
19912
19913
19914
19915
19916
19917
19918
19919
19920
19921
19922
19923
19924
19925
19926
19927
19928
19929
19930
19931
19932
19933
19934
19935
19936
19937
19938
19939
19940
19941
19942
19943
19944
19945
19946
19947
19948
19949
19950
19951
19952
19953
19954
19955
19956
19957
19958
19959
19960
19961
19962
19963
19964
19965
19966
19967
19968
19969
19970
19971
19972
19973
19974
19975
19976
19977
19978
19979
19980
19981
19982
19983
19984
19985
19986
19987
19988
19989
19990
19991
19992
19993
19994
19995
19996
19997
19998
19999
20000
20001
20002
20003
20004
20005
20006
20007
20008
20009
20010
20011
20012
20013
20014
20015
20016
20017
20018
20019
20020
20021
20022
20023
20024
20025
20026
20027
20028
20029
20030
20031
20032
20033
20034
20035
20036
20037
20038
20039
20040
20041
20042
20043
20044
20045
20046
20047
20048
20049
20050
20051
20052
20053
20054
20055
20056
20057
20058
20059
20060
20061
20062
20063
20064
20065
20066
20067
20068
20069
20070
20071
20072
20073
20074
20075
20076
20077
20078
20079
20080
20081
20082
20083
20084
20085
20086
20087
20088
20089
20090
20091
20092
20093
20094
20095
20096
20097
20098
20099
20100
20101
20102
20103
20104
20105
20106
20107
20108
20109
20110
20111
20112
20113
20114
20115
20116
20117
20118
20119
20120
20121
20122
20123
20124
20125
20126
20127
20128
20129
20130
20131
20132
20133
20134
20135
20136
20137
20138
20139
20140
20141
20142
20143
20144
20145
20146
20147
20148
20149
20150
20151
20152
20153
20154
20155
20156
20157
20158
20159
20160
20161
20162
20163
20164
20165
20166
20167
20168
20169
20170
20171
20172
20173
20174
20175
20176
20177
20178
20179
20180
20181
20182
20183
20184
20185
20186
20187
20188
20189
20190
20191
20192
20193
20194
20195
20196
20197
20198
20199
20200
20201
20202
20203
20204
20205
20206
20207
20208
20209
20210
20211
20212
20213
20214
20215
20216
20217
20218
20219
20220
20221
20222
20223
20224
20225
20226
20227
20228
20229
20230
20231
20232
20233
20234
20235
20236
20237
20238
20239
20240
20241
20242
20243
20244
20245
20246
20247
20248
20249
20250
20251
20252
20253
20254
20255
20256
20257
20258
20259
20260
20261
20262
20263
20264
20265
20266
20267
20268
20269
20270
20271
20272
20273
20274
20275
20276
20277
20278
20279
20280
20281
20282
20283
20284
20285
20286
20287
20288
20289
20290
20291
20292
20293
20294
20295
20296
20297
20298
20299
20300
20301
20302
20303
20304
20305
20306
20307
20308
20309
20310
20311
20312
20313
20314
20315
20316
20317
20318
20319
20320
20321
20322
20323
20324
20325
20326
20327
20328
20329
20330
20331
20332
20333
20334
20335
20336
20337
20338
20339
20340
20341
20342
20343
20344
20345
20346
20347
20348
20349
20350
20351
20352
20353
20354
20355
20356
20357
20358
20359
20360
20361
20362
20363
20364
20365
20366
20367
20368
20369
20370
20371
20372
20373
20374
20375
20376
20377
20378
20379
20380
20381
20382
20383
20384
20385
20386
20387
20388
20389
20390
20391
20392
20393
20394
20395
20396
20397
20398
20399
20400
20401
20402
20403
20404
20405
20406
20407
20408
20409
20410
20411
20412
20413
20414
20415
20416
20417
20418
20419
20420
20421
20422
20423
20424
20425
20426
20427
20428
20429
20430
20431
20432
20433
20434
20435
20436
20437
20438
20439
20440
20441
20442
20443
20444
20445
20446
20447
20448
20449
20450
20451
20452
20453
20454
20455
20456
20457
20458
20459
20460
20461
20462
20463
20464
20465
20466
20467
20468
20469
20470
20471
20472
20473
20474
20475
20476
20477
20478
20479
20480
20481
20482
20483
20484
20485
20486
20487
20488
20489
20490
20491
20492
20493
20494
20495
20496
20497
20498
20499
20500
20501
20502
20503
20504
20505
20506
20507
20508
20509
20510
20511
20512
20513
20514
20515
20516
20517
20518
20519
20520
20521
20522
20523
20524
20525
20526
20527
20528
20529
20530
20531
20532
20533
20534
20535
20536
20537
20538
20539
20540
20541
20542
20543
20544
20545
20546
20547
20548
20549
20550
20551
20552
20553
20554
20555
20556
20557
20558
20559
20560
20561
20562
20563
20564
20565
20566
20567
20568
20569
20570
20571
20572
20573
20574
20575
20576
20577
20578
20579
20580
20581
20582
20583
20584
20585
20586
20587
20588
20589
20590
20591
20592
20593
20594
20595
20596
20597
20598
20599
20600
20601
20602
20603
20604
20605
20606
20607
20608
20609
20610
20611
20612
20613
20614
20615
20616
20617
20618
20619
20620
20621
20622
20623
20624
20625
20626
20627
20628
20629
20630
20631
20632
20633
20634
20635
20636
20637
20638
20639
20640
20641
20642
20643
20644
20645
20646
20647
20648
20649
20650
20651
20652
20653
20654
20655
20656
20657
20658
20659
20660
20661
20662
20663
20664
20665
20666
20667
20668
20669
20670
20671
20672
20673
20674
20675
20676
20677
20678
20679
20680
20681
20682
20683
20684
20685
20686
20687
20688
20689
20690
20691
20692
20693
20694
20695
20696
20697
20698
20699
20700
20701
20702
20703
20704
20705
20706
20707
20708
20709
20710
20711
20712
20713
20714
20715
20716
20717
20718
20719
20720
20721
20722
20723
20724
20725
20726
20727
20728
20729
20730
20731
20732
20733
20734
20735
20736
20737
20738
20739
20740
20741
20742
20743
20744
20745
20746
20747
20748
20749
20750
20751
20752
20753
20754
20755
20756
20757
20758
20759
20760
20761
20762
20763
20764
20765
20766
20767
20768
20769
20770
20771
20772
20773
20774
20775
20776
20777
20778
20779
20780
20781
20782
20783
20784
20785
20786
20787
20788
20789
20790
20791
20792
20793
20794
20795
20796
20797
20798
20799
20800
20801
20802
20803
20804
20805
20806
20807
20808
20809
20810
20811
20812
20813
20814
20815
20816
20817
20818
20819
20820
20821
20822
20823
20824
20825
20826
20827
20828
20829
20830
20831
20832
20833
20834
20835
20836
20837
20838
20839
20840
20841
20842
20843
20844
20845
20846
20847
20848
20849
20850
20851
20852
20853
20854
20855
20856
20857
20858
20859
20860
20861
20862
20863
20864
20865
20866
20867
20868
20869
20870
20871
20872
20873
20874
20875
20876
20877
20878
20879
20880
20881
20882
20883
20884
20885
20886
20887
20888
20889
20890
20891
20892
20893
20894
20895
20896
20897
20898
20899
20900
20901
20902
20903
20904
20905
20906
20907
20908
20909
20910
20911
20912
20913
20914
20915
20916
20917
20918
20919
20920
20921
20922
20923
20924
20925
20926
20927
20928
20929
20930
20931
20932
20933
20934
20935
20936
20937
20938
20939
20940
20941
20942
20943
20944
20945
20946
20947
20948
20949
20950
20951
20952
20953
20954
20955
20956
20957
20958
20959
20960
20961
20962
20963
20964
20965
20966
20967
20968
20969
20970
20971
20972
20973
20974
20975
20976
20977
20978
20979
20980
20981
20982
20983
20984
20985
20986
20987
20988
20989
20990
20991
20992
20993
20994
20995
20996
20997
20998
20999
21000
21001
21002
21003
21004
21005
21006
21007
21008
21009
21010
21011
21012
21013
21014
21015
21016
21017
21018
21019
21020
21021
21022
21023
21024
21025
21026
21027
21028
21029
21030
21031
21032
21033
21034
21035
21036
21037
21038
21039
21040
21041
21042
21043
21044
21045
21046
21047
21048
21049
21050
21051
21052
21053
21054
21055
21056
21057
21058
21059
21060
21061
21062
21063
21064
21065
21066
21067
21068
21069
21070
21071
21072
21073
21074
21075
21076
21077
21078
21079
21080
21081
21082
21083
21084
21085
21086
21087
21088
21089
21090
21091
21092
21093
21094
21095
21096
21097
21098
21099
21100
21101
21102
21103
21104
21105
21106
21107
21108
21109
21110
21111
21112
21113
21114
21115
21116
21117
21118
21119
21120
21121
21122
21123
21124
21125
21126
21127
21128
21129
21130
21131
21132
21133
21134
21135
21136
21137
21138
21139
21140
21141
21142
21143
21144
21145
21146
21147
21148
21149
21150
21151
21152
21153
21154
21155
21156
21157
21158
21159
21160
21161
21162
21163
21164
21165
21166
21167
21168
21169
21170
21171
21172
21173
21174
21175
21176
21177
21178
21179
21180
21181
21182
21183
21184
21185
21186
21187
21188
21189
21190
21191
21192
21193
21194
21195
21196
21197
21198
21199
21200
21201
21202
21203
21204
21205
21206
21207
21208
21209
21210
21211
21212
21213
21214
21215
21216
21217
21218
21219
21220
21221
21222
21223
21224
21225
21226
21227
21228
21229
21230
21231
21232
21233
21234
21235
21236
21237
21238
21239
21240
21241
21242
21243
21244
21245
21246
21247
21248
21249
21250
21251
21252
21253
21254
21255
21256
21257
21258
21259
21260
21261
21262
21263
21264
21265
21266
21267
21268
21269
21270
21271
21272
21273
21274
21275
21276
21277
21278
21279
21280
21281
21282
21283
21284
21285
21286
21287
21288
21289
21290
21291
21292
21293
21294
21295
21296
21297
21298
21299
21300
21301
21302
21303
21304
21305
21306
21307
21308
21309
21310
21311
21312
21313
21314
21315
21316
21317
21318
21319
21320
21321
21322
21323
21324
21325
21326
21327
21328
21329
21330
21331
21332
21333
21334
21335
21336
21337
21338
21339
21340
21341
21342
21343
21344
21345
21346
21347
21348
21349
21350
21351
21352
21353
21354
21355
21356
21357
21358
21359
21360
21361
21362
21363
21364
21365
21366
21367
21368
21369
21370
21371
21372
21373
21374
21375
21376
21377
21378
21379
21380
21381
21382
21383
21384
21385
21386
21387
21388
21389
21390
21391
21392
21393
21394
21395
21396
21397
21398
21399
21400
21401
21402
21403
21404
21405
21406
21407
21408
21409
21410
21411
21412
21413
21414
21415
21416
21417
21418
21419
21420
21421
21422
21423
21424
21425
21426
21427
21428
21429
21430
21431
21432
21433
21434
21435
21436
21437
21438
21439
21440
21441
21442
21443
21444
21445
21446
21447
21448
21449
21450
21451
21452
21453
21454
21455
21456
21457
21458
21459
21460
21461
21462
21463
21464
21465
21466
21467
21468
21469
21470
21471
21472
21473
21474
21475
21476
21477
21478
21479
21480
21481
21482
21483
21484
21485
21486
21487
21488
21489
21490
21491
21492
21493
21494
21495
21496
21497
21498
21499
21500
21501
21502
21503
21504
21505
21506
21507
21508
21509
21510
21511
21512
21513
21514
21515
21516
21517
21518
21519
21520
21521
21522
21523
21524
21525
21526
21527
21528
21529
21530
21531
21532
21533
21534
21535
21536
21537
21538
21539
21540
21541
21542
21543
21544
21545
21546
21547
21548
21549
21550
21551
21552
21553
21554
21555
21556
21557
21558
21559
21560
21561
21562
21563
21564
21565
21566
21567
21568
21569
21570
21571
21572
21573
21574
21575
21576
21577
21578
21579
21580
21581
21582
21583
21584
21585
21586
21587
21588
21589
21590
21591
21592
21593
21594
21595
21596
21597
21598
21599
21600
21601
21602
21603
21604
21605
21606
21607
21608
21609
21610
21611
21612
21613
21614
21615
21616
21617
21618
21619
21620
21621
21622
21623
21624
21625
21626
21627
21628
21629
21630
21631
21632
21633
21634
21635
21636
21637
21638
21639
21640
21641
21642
21643
21644
21645
21646
21647
21648
21649
21650
21651
21652
21653
21654
21655
21656
21657
21658
21659
21660
21661
21662
21663
21664
21665
21666
21667
21668
21669
21670
21671
21672
21673
21674
21675
21676
21677
21678
21679
21680
21681
21682
21683
21684
21685
21686
21687
21688
21689
21690
21691
21692
21693
21694
21695
21696
21697
21698
21699
21700
21701
21702
21703
21704
21705
21706
21707
21708
21709
21710
21711
21712
21713
21714
21715
21716
21717
21718
21719
21720
21721
21722
21723
21724
21725
21726
21727
21728
21729
21730
21731
21732
21733
21734
21735
21736
21737
21738
21739
21740
21741
21742
21743
21744
21745
21746
21747
21748
21749
21750
21751
21752
21753
21754
21755
21756
21757
21758
21759
21760
21761
21762
21763
21764
21765
21766
21767
21768
21769
21770
21771
21772
21773
21774
21775
21776
21777
21778
21779
21780
21781
21782
21783
21784
21785
21786
21787
21788
21789
21790
21791
21792
21793
21794
21795
21796
21797
21798
21799
21800
21801
21802
21803
21804
21805
21806
21807
21808
21809
21810
21811
21812
21813
21814
21815
21816
21817
21818
21819
21820
21821
21822
21823
21824
21825
21826
21827
21828
21829
21830
21831
21832
21833
21834
21835
21836
21837
21838
21839
21840
21841
21842
21843
21844
21845
21846
21847
21848
21849
21850
21851
21852
21853
21854
21855
21856
21857
21858
21859
21860
21861
21862
21863
21864
21865
21866
21867
21868
21869
21870
21871
21872
21873
21874
21875
21876
21877
21878
21879
21880
21881
21882
21883
21884
21885
21886
21887
21888
21889
21890
21891
21892
21893
21894
21895
21896
21897
21898
21899
21900
21901
21902
21903
21904
21905
21906
21907
21908
21909
21910
21911
21912
21913
21914
21915
21916
21917
21918
21919
21920
21921
21922
21923
21924
21925
21926
21927
21928
21929
21930
21931
21932
21933
21934
21935
21936
21937
21938
21939
21940
21941
21942
21943
21944
21945
21946
21947
21948
21949
21950
21951
21952
21953
21954
21955
21956
21957
21958
21959
21960
21961
21962
21963
21964
21965
21966
21967
21968
21969
21970
21971
21972
21973
21974
21975
21976
21977
21978
21979
21980
21981
21982
21983
21984
21985
21986
21987
21988
21989
21990
21991
21992
21993
21994
21995
21996
21997
21998
21999
22000
22001
22002
22003
22004
22005
22006
22007
22008
22009
22010
22011
22012
22013
22014
22015
22016
22017
22018
22019
22020
22021
22022
22023
22024
22025
22026
22027
22028
22029
22030
22031
22032
22033
22034
22035
22036
22037
22038
22039
22040
22041
22042
22043
22044
22045
22046
22047
22048
22049
22050
22051
22052
22053
22054
22055
22056
22057
22058
22059
22060
22061
22062
22063
22064
22065
22066
22067
22068
22069
22070
22071
22072
22073
22074
22075
22076
22077
22078
22079
22080
22081
22082
22083
22084
22085
22086
22087
22088
22089
22090
22091
22092
22093
22094
22095
22096
22097
22098
22099
22100
22101
22102
22103
22104
22105
22106
22107
22108
22109
22110
22111
22112
22113
22114
22115
22116
22117
22118
22119
22120
22121
22122
22123
22124
22125
22126
22127
22128
22129
22130
22131
22132
22133
22134
22135
22136
22137
22138
22139
22140
22141
22142
22143
22144
22145
22146
22147
22148
22149
22150
22151
22152
22153
22154
22155
22156
22157
22158
22159
22160
22161
22162
22163
22164
22165
22166
22167
22168
22169
22170
22171
22172
22173
22174
22175
22176
22177
22178
22179
22180
22181
22182
22183
22184
22185
22186
22187
22188
22189
22190
22191
22192
22193
22194
22195
22196
22197
22198
22199
22200
22201
22202
22203
22204
22205
22206
22207
22208
22209
22210
22211
22212
22213
22214
22215
22216
22217
22218
22219
22220
22221
22222
22223
22224
22225
22226
22227
22228
22229
22230
22231
22232
22233
22234
22235
22236
22237
22238
22239
22240
22241
22242
22243
22244
22245
22246
22247
22248
22249
22250
22251
22252
22253
22254
22255
22256
22257
22258
22259
22260
22261
22262
22263
22264
22265
22266
22267
22268
22269
22270
22271
22272
22273
22274
22275
22276
22277
22278
22279
22280
22281
22282
22283
22284
22285
22286
22287
22288
22289
22290
22291
22292
22293
22294
22295
22296
22297
22298
22299
22300
22301
22302
22303
22304
22305
22306
22307
22308
22309
22310
22311
22312
22313
22314
22315
22316
22317
22318
22319
22320
22321
22322
22323
22324
22325
22326
22327
22328
22329
22330
22331
22332
22333
22334
22335
22336
22337
22338
22339
22340
22341
22342
22343
22344
22345
22346
22347
22348
22349
22350
22351
22352
22353
22354
22355
22356
22357
22358
22359
22360
22361
22362
22363
22364
22365
22366
22367
22368
22369
22370
22371
22372
22373
22374
22375
22376
22377
22378
22379
22380
22381
22382
22383
22384
22385
22386
22387
22388
22389
22390
22391
22392
22393
22394
22395
22396
22397
22398
22399
22400
22401
22402
22403
22404
22405
22406
22407
22408
22409
22410
22411
22412
22413
22414
22415
22416
22417
22418
22419
22420
22421
22422
22423
22424
22425
22426
22427
22428
22429
22430
22431
22432
22433
22434
22435
22436
22437
22438
22439
22440
22441
22442
22443
22444
22445
22446
22447
22448
22449
22450
22451
22452
22453
22454
22455
22456
22457
22458
22459
22460
22461
22462
22463
22464
22465
22466
22467
22468
22469
22470
22471
22472
22473
22474
22475
22476
22477
22478
22479
22480
22481
22482
22483
22484
22485
22486
22487
22488
22489
22490
22491
22492
22493
22494
22495
22496
22497
22498
22499
22500
22501
22502
22503
22504
22505
22506
22507
22508
22509
22510
22511
22512
22513
22514
22515
22516
22517
22518
22519
22520
22521
22522
22523
22524
22525
22526
22527
22528
22529
22530
22531
22532
22533
22534
22535
22536
22537
22538
22539
22540
22541
22542
22543
22544
22545
22546
22547
22548
22549
22550
22551
22552
22553
22554
22555
22556
22557
22558
22559
22560
22561
22562
22563
22564
22565
22566
22567
22568
22569
22570
22571
22572
22573
22574
22575
22576
22577
22578
22579
22580
22581
22582
22583
22584
22585
22586
22587
22588
22589
22590
22591
22592
22593
22594
22595
22596
22597
22598
22599
22600
22601
22602
22603
22604
22605
22606
22607
22608
22609
22610
22611
22612
22613
22614
22615
22616
22617
22618
22619
22620
22621
22622
22623
22624
22625
22626
22627
22628
22629
22630
22631
22632
22633
22634
22635
22636
22637
22638
22639
22640
22641
22642
22643
22644
22645
22646
22647
22648
22649
22650
22651
22652
22653
22654
22655
22656
22657
22658
22659
22660
22661
22662
22663
22664
22665
22666
22667
22668
22669
22670
22671
22672
22673
22674
22675
22676
22677
22678
22679
22680
22681
22682
22683
22684
22685
22686
22687
22688
22689
22690
22691
22692
22693
22694
22695
22696
22697
22698
22699
22700
22701
22702
22703
22704
22705
22706
22707
22708
22709
22710
22711
22712
22713
22714
22715
22716
22717
22718
22719
22720
22721
22722
22723
22724
22725
22726
22727
22728
22729
22730
22731
22732
22733
22734
22735
22736
22737
22738
22739
22740
22741
22742
22743
22744
22745
22746
22747
22748
22749
22750
22751
22752
22753
22754
22755
22756
22757
22758
22759
22760
22761
22762
22763
22764
22765
22766
22767
22768
22769
22770
22771
22772
22773
22774
22775
22776
22777
22778
22779
22780
22781
22782
22783
22784
22785
22786
22787
22788
22789
22790
22791
22792
22793
22794
22795
22796
22797
22798
22799
22800
22801
22802
22803
22804
22805
22806
22807
22808
22809
22810
22811
22812
22813
22814
22815
22816
22817
22818
22819
22820
22821
22822
22823
22824
22825
22826
22827
22828
22829
22830
22831
22832
22833
22834
22835
22836
22837
22838
22839
22840
22841
22842
22843
22844
22845
22846
22847
22848
22849
22850
22851
22852
22853
22854
22855
22856
22857
22858
22859
22860
22861
22862
22863
22864
22865
22866
22867
22868
22869
22870
22871
22872
22873
22874
22875
22876
22877
22878
22879
22880
22881
22882
22883
22884
22885
22886
22887
22888
22889
22890
22891
22892
22893
22894
22895
22896
22897
22898
22899
22900
22901
22902
22903
22904
22905
22906
22907
22908
22909
22910
22911
22912
22913
22914
22915
22916
22917
22918
22919
22920
22921
22922
22923
22924
22925
22926
22927
22928
22929
22930
22931
22932
22933
22934
22935
22936
22937
22938
22939
22940
22941
22942
22943
22944
22945
22946
22947
22948
22949
22950
22951
22952
22953
22954
22955
22956
22957
22958
22959
22960
22961
22962
22963
22964
22965
22966
22967
22968
22969
22970
22971
22972
22973
22974
22975
22976
22977
22978
22979
22980
22981
22982
22983
22984
22985
22986
22987
22988
22989
22990
22991
22992
22993
22994
22995
22996
22997
22998
22999
23000
23001
23002
23003
23004
23005
23006
23007
23008
23009
23010
23011
23012
23013
23014
23015
23016
23017
23018
23019
23020
23021
23022
23023
23024
23025
23026
23027
23028
23029
23030
23031
23032
23033
23034
23035
23036
23037
23038
23039
23040
23041
23042
23043
23044
23045
23046
23047
23048
23049
23050
23051
23052
23053
23054
23055
23056
23057
23058
23059
23060
23061
23062
23063
23064
23065
23066
23067
23068
23069
23070
23071
23072
23073
23074
23075
23076
23077
23078
23079
23080
23081
23082
23083
23084
23085
23086
23087
23088
23089
23090
23091
23092
23093
23094
23095
23096
23097
23098
23099
23100
23101
23102
23103
23104
23105
23106
23107
23108
23109
23110
23111
23112
23113
23114
23115
23116
23117
23118
23119
23120
23121
23122
23123
23124
23125
23126
23127
23128
23129
23130
23131
23132
23133
23134
23135
23136
23137
23138
23139
23140
23141
23142
23143
23144
23145
23146
23147
23148
23149
23150
23151
23152
23153
23154
23155
23156
23157
23158
23159
23160
23161
23162
23163
23164
23165
23166
23167
23168
23169
23170
23171
23172
23173
23174
23175
23176
23177
23178
23179
23180
23181
23182
23183
23184
23185
23186
23187
23188
23189
23190
23191
23192
23193
23194
23195
23196
23197
23198
23199
23200
23201
23202
23203
23204
23205
23206
23207
23208
23209
23210
23211
23212
23213
23214
23215
23216
23217
23218
23219
23220
23221
23222
23223
23224
23225
23226
23227
23228
23229
23230
23231
23232
23233
23234
23235
23236
23237
23238
23239
23240
23241
23242
23243
23244
23245
23246
23247
23248
23249
23250
23251
23252
23253
23254
23255
23256
23257
23258
23259
23260
23261
23262
23263
23264
23265
23266
23267
23268
23269
23270
23271
23272
23273
23274
23275
23276
23277
23278
23279
23280
23281
23282
23283
23284
23285
23286
23287
23288
23289
23290
23291
23292
23293
23294
23295
23296
23297
23298
23299
23300
23301
23302
23303
23304
23305
23306
23307
23308
23309
23310
23311
23312
23313
23314
23315
23316
23317
23318
23319
23320
23321
23322
23323
23324
23325
23326
23327
23328
23329
23330
23331
23332
23333
23334
23335
23336
23337
23338
23339
23340
23341
23342
23343
23344
23345
23346
23347
23348
23349
23350
23351
23352
23353
23354
23355
23356
23357
23358
23359
23360
23361
23362
23363
23364
23365
23366
23367
23368
23369
23370
23371
23372
23373
23374
23375
23376
23377
23378
23379
23380
23381
23382
23383
23384
23385
23386
23387
23388
23389
23390
23391
23392
23393
23394
23395
23396
23397
23398
23399
23400
23401
23402
23403
23404
23405
23406
23407
23408
23409
23410
23411
23412
23413
23414
23415
23416
23417
23418
23419
23420
23421
23422
23423
23424
23425
23426
23427
23428
23429
23430
23431
23432
23433
23434
23435
23436
23437
23438
23439
23440
23441
23442
23443
23444
23445
23446
23447
23448
23449
23450
23451
23452
23453
23454
23455
23456
23457
23458
23459
23460
23461
23462
23463
23464
23465
23466
23467
23468
23469
23470
23471
23472
23473
23474
23475
23476
23477
23478
23479
23480
23481
23482
23483
23484
23485
23486
23487
23488
23489
23490
23491
23492
23493
23494
23495
23496
23497
23498
23499
23500
23501
23502
23503
23504
23505
23506
23507
23508
23509
23510
23511
23512
23513
23514
23515
23516
23517
23518
23519
23520
23521
23522
23523
23524
23525
23526
23527
23528
23529
23530
23531
23532
23533
23534
23535
23536
23537
23538
23539
23540
23541
23542
23543
23544
23545
23546
23547
23548
23549
23550
23551
23552
23553
23554
23555
23556
23557
23558
23559
23560
23561
23562
23563
23564
23565
23566
23567
23568
23569
23570
23571
23572
23573
23574
23575
23576
23577
23578
23579
23580
23581
23582
23583
23584
23585
23586
23587
23588
23589
23590
23591
23592
23593
23594
23595
23596
23597
23598
23599
23600
23601
23602
23603
23604
23605
23606
23607
23608
23609
23610
23611
23612
23613
23614
23615
23616
23617
23618
23619
23620
23621
23622
23623
23624
23625
23626
23627
23628
23629
23630
23631
23632
23633
23634
23635
23636
23637
23638
23639
23640
23641
23642
23643
23644
23645
23646
23647
23648
23649
23650
23651
23652
23653
23654
23655
23656
23657
23658
23659
23660
23661
23662
23663
23664
23665
23666
23667
23668
23669
23670
23671
23672
23673
23674
23675
23676
23677
23678
23679
23680
23681
23682
23683
23684
23685
23686
23687
23688
23689
23690
23691
23692
23693
23694
23695
23696
23697
23698
23699
23700
23701
23702
23703
23704
23705
23706
23707
23708
23709
23710
23711
23712
23713
23714
23715
23716
23717
23718
23719
23720
23721
23722
23723
23724
23725
23726
23727
23728
23729
23730
23731
23732
23733
23734
23735
23736
23737
23738
23739
23740
23741
23742
23743
23744
23745
23746
23747
23748
23749
23750
23751
23752
23753
23754
23755
23756
23757
23758
23759
23760
23761
23762
23763
23764
23765
23766
23767
23768
23769
23770
23771
23772
23773
23774
23775
23776
23777
23778
23779
23780
23781
23782
23783
23784
23785
23786
23787
23788
23789
23790
23791
23792
23793
23794
23795
23796
23797
23798
23799
23800
23801
23802
23803
23804
23805
23806
23807
23808
23809
23810
23811
23812
23813
23814
23815
23816
23817
23818
23819
23820
23821
23822
23823
23824
23825
23826
23827
23828
23829
23830
23831
23832
23833
23834
23835
23836
23837
23838
23839
23840
23841
23842
23843
23844
23845
23846
23847
23848
23849
23850
23851
23852
23853
23854
23855
23856
23857
23858
23859
23860
23861
23862
23863
23864
23865
23866
23867
23868
23869
23870
23871
23872
23873
23874
23875
23876
23877
23878
23879
23880
23881
23882
23883
23884
23885
23886
23887
23888
23889
23890
23891
23892
23893
23894
23895
23896
23897
23898
23899
23900
23901
23902
23903
23904
23905
23906
23907
23908
23909
23910
23911
23912
23913
23914
23915
23916
23917
23918
23919
23920
23921
23922
23923
23924
23925
23926
23927
23928
23929
23930
23931
23932
23933
23934
23935
23936
23937
23938
23939
23940
23941
23942
23943
23944
23945
23946
23947
23948
23949
23950
23951
23952
23953
23954
23955
23956
23957
23958
23959
23960
23961
23962
23963
23964
23965
23966
23967
23968
23969
23970
23971
23972
23973
23974
23975
23976
23977
23978
23979
23980
23981
23982
23983
23984
23985
23986
23987
23988
23989
23990
23991
23992
23993
23994
23995
23996
23997
23998
23999
24000
24001
24002
24003
24004
24005
24006
24007
24008
24009
24010
24011
24012
24013
24014
24015
24016
24017
24018
24019
24020
24021
24022
24023
24024
24025
24026
24027
24028
24029
24030
24031
24032
24033
24034
24035
24036
24037
24038
24039
24040
24041
24042
24043
24044
24045
24046
24047
24048
24049
24050
24051
24052
24053
24054
24055
24056
24057
24058
24059
24060
24061
24062
24063
24064
24065
24066
24067
24068
24069
24070
24071
24072
24073
24074
24075
24076
24077
24078
24079
24080
24081
24082
24083
24084
24085
24086
24087
24088
24089
24090
24091
24092
24093
24094
24095
24096
24097
24098
24099
24100
24101
24102
24103
24104
24105
24106
24107
24108
24109
24110
24111
24112
24113
24114
24115
24116
24117
24118
24119
24120
24121
24122
24123
24124
24125
24126
24127
24128
24129
24130
24131
24132
24133
24134
24135
24136
24137
24138
24139
24140
24141
24142
24143
24144
24145
24146
24147
24148
24149
24150
24151
24152
24153
24154
24155
24156
24157
24158
24159
24160
24161
24162
24163
24164
24165
24166
24167
24168
24169
24170
24171
24172
24173
24174
24175
24176
24177
24178
24179
24180
24181
24182
24183
24184
24185
24186
24187
24188
24189
24190
24191
24192
24193
24194
24195
24196
24197
24198
24199
24200
24201
24202
24203
24204
24205
24206
24207
24208
24209
24210
24211
24212
24213
24214
24215
24216
24217
24218
24219
24220
24221
24222
24223
24224
24225
24226
24227
24228
24229
24230
24231
24232
24233
24234
24235
24236
24237
24238
24239
24240
24241
24242
24243
24244
24245
24246
24247
24248
24249
24250
24251
24252
24253
24254
24255
24256
24257
24258
24259
24260
24261
24262
24263
24264
24265
24266
24267
24268
24269
24270
24271
24272
24273
24274
24275
24276
24277
24278
24279
24280
24281
24282
24283
24284
24285
24286
24287
24288
24289
24290
24291
24292
24293
24294
24295
24296
24297
24298
24299
24300
24301
24302
24303
24304
24305
24306
24307
24308
24309
24310
24311
24312
24313
24314
24315
24316
24317
24318
24319
24320
24321
24322
24323
24324
24325
24326
24327
24328
24329
24330
24331
24332
24333
24334
24335
24336
24337
24338
24339
24340
24341
24342
24343
24344
24345
24346
24347
24348
24349
24350
24351
24352
24353
24354
24355
24356
24357
24358
24359
24360
24361
24362
24363
24364
24365
24366
24367
24368
24369
24370
24371
24372
24373
24374
24375
24376
24377
24378
24379
24380
24381
24382
24383
24384
24385
24386
24387
24388
24389
24390
24391
24392
24393
24394
24395
24396
24397
24398
24399
24400
24401
24402
24403
24404
24405
24406
24407
24408
24409
24410
24411
24412
24413
24414
24415
24416
24417
24418
24419
24420
24421
24422
24423
24424
24425
24426
24427
24428
24429
24430
24431
24432
24433
24434
24435
24436
24437
24438
24439
24440
24441
24442
24443
24444
24445
24446
24447
24448
24449
24450
24451
24452
24453
24454
24455
24456
24457
24458
24459
24460
24461
24462
24463
24464
24465
24466
24467
24468
24469
24470
24471
24472
24473
24474
24475
24476
24477
24478
24479
24480
24481
24482
24483
24484
24485
24486
24487
24488
24489
24490
24491
24492
24493
24494
24495
24496
24497
24498
24499
24500
24501
24502
24503
24504
24505
24506
24507
24508
24509
24510
24511
24512
24513
24514
24515
24516
24517
24518
24519
24520
24521
24522
24523
24524
24525
24526
24527
24528
24529
24530
24531
24532
24533
24534
24535
24536
24537
24538
24539
24540
24541
24542
24543
24544
24545
24546
24547
24548
24549
24550
24551
24552
24553
24554
24555
24556
24557
24558
24559
24560
24561
24562
24563
24564
24565
24566
24567
24568
24569
24570
24571
24572
24573
24574
24575
24576
24577
24578
24579
24580
24581
24582
24583
24584
24585
24586
24587
24588
24589
24590
24591
24592
24593
24594
24595
24596
24597
24598
24599
24600
24601
24602
24603
24604
24605
24606
24607
24608
24609
24610
24611
24612
24613
24614
24615
24616
24617
24618
24619
24620
24621
24622
24623
24624
24625
24626
24627
24628
24629
24630
24631
24632
24633
24634
24635
24636
24637
24638
24639
24640
24641
24642
24643
24644
24645
24646
24647
24648
24649
24650
24651
24652
24653
24654
24655
24656
24657
24658
24659
24660
24661
24662
24663
24664
24665
24666
24667
24668
24669
24670
24671
24672
24673
24674
24675
24676
24677
24678
24679
24680
24681
24682
24683
24684
24685
24686
24687
24688
24689
24690
24691
24692
24693
24694
24695
24696
24697
24698
24699
24700
24701
24702
24703
24704
24705
24706
24707
24708
24709
24710
24711
24712
24713
24714
24715
24716
24717
24718
24719
24720
24721
24722
24723
24724
24725
24726
24727
24728
24729
24730
24731
24732
24733
24734
24735
24736
24737
24738
24739
24740
24741
24742
24743
24744
24745
24746
24747
24748
24749
24750
24751
24752
24753
24754
24755
24756
24757
24758
24759
24760
24761
24762
24763
24764
24765
24766
24767
24768
24769
24770
24771
24772
24773
24774
24775
24776
24777
24778
24779
24780
24781
24782
24783
24784
24785
24786
24787
24788
24789
24790
24791
24792
24793
24794
24795
24796
24797
24798
24799
24800
24801
24802
24803
24804
24805
24806
24807
24808
24809
24810
24811
24812
24813
24814
24815
24816
24817
24818
24819
24820
24821
24822
24823
24824
24825
24826
24827
24828
24829
24830
24831
24832
24833
24834
24835
24836
24837
24838
24839
24840
24841
24842
24843
24844
24845
24846
24847
24848
24849
24850
24851
24852
24853
24854
24855
24856
24857
24858
24859
24860
24861
24862
24863
24864
24865
24866
24867
24868
24869
24870
24871
24872
24873
24874
24875
24876
24877
24878
24879
24880
24881
24882
24883
24884
24885
24886
24887
24888
24889
24890
24891
24892
24893
24894
24895
24896
24897
24898
24899
24900
24901
24902
24903
24904
24905
24906
24907
24908
24909
24910
24911
24912
24913
24914
24915
24916
24917
24918
24919
24920
24921
24922
24923
24924
24925
24926
24927
24928
24929
24930
24931
24932
24933
24934
24935
24936
24937
24938
24939
24940
24941
24942
24943
24944
24945
24946
24947
24948
24949
24950
24951
24952
24953
24954
24955
24956
24957
24958
24959
24960
24961
24962
24963
24964
24965
24966
24967
24968
24969
24970
24971
24972
24973
24974
24975
24976
24977
24978
24979
24980
24981
24982
24983
24984
24985
24986
24987
24988
24989
24990
24991
24992
24993
24994
24995
24996
24997
24998
24999
25000
25001
25002
25003
25004
25005
25006
25007
25008
25009
25010
25011
25012
25013
25014
25015
25016
25017
25018
25019
25020
25021
25022
25023
25024
25025
25026
25027
25028
25029
25030
25031
25032
25033
25034
25035
25036
25037
25038
25039
25040
25041
25042
25043
25044
25045
25046
25047
25048
25049
25050
25051
25052
25053
25054
25055
25056
25057
25058
25059
25060
25061
25062
25063
25064
25065
25066
25067
25068
25069
25070
25071
25072
25073
25074
25075
25076
25077
25078
25079
25080
25081
25082
25083
25084
25085
25086
25087
25088
25089
25090
25091
25092
25093
25094
25095
25096
25097
25098
25099
25100
25101
25102
25103
25104
25105
25106
25107
25108
25109
25110
25111
25112
25113
25114
25115
25116
25117
25118
25119
25120
25121
25122
25123
25124
25125
25126
25127
25128
25129
25130
25131
25132
25133
25134
25135
25136
25137
25138
25139
25140
25141
25142
25143
25144
25145
25146
25147
25148
25149
25150
25151
25152
25153
25154
25155
25156
25157
25158
25159
25160
25161
25162
25163
25164
25165
25166
25167
25168
25169
25170
25171
25172
25173
25174
25175
25176
25177
25178
25179
25180
25181
25182
25183
25184
25185
25186
25187
25188
25189
25190
25191
25192
25193
25194
25195
25196
25197
25198
25199
25200
25201
25202
25203
25204
25205
25206
25207
25208
25209
25210
25211
25212
25213
25214
25215
25216
25217
25218
25219
25220
25221
25222
25223
25224
25225
25226
25227
25228
25229
25230
25231
25232
25233
25234
25235
25236
25237
25238
25239
25240
25241
25242
25243
25244
25245
25246
25247
25248
25249
25250
25251
25252
25253
25254
25255
25256
25257
25258
25259
25260
25261
25262
25263
25264
25265
25266
25267
25268
25269
25270
25271
25272
25273
25274
25275
25276
25277
25278
25279
25280
25281
25282
25283
25284
25285
25286
25287
25288
25289
25290
25291
25292
25293
25294
25295
25296
25297
25298
25299
25300
25301
25302
25303
25304
25305
25306
25307
25308
25309
25310
25311
25312
25313
25314
25315
25316
25317
25318
25319
25320
25321
25322
25323
25324
25325
25326
25327
25328
25329
25330
25331
25332
25333
25334
25335
25336
25337
25338
25339
25340
25341
25342
25343
25344
25345
25346
25347
25348
25349
25350
25351
25352
25353
25354
25355
25356
25357
25358
25359
25360
25361
25362
25363
25364
25365
25366
25367
25368
25369
25370
25371
25372
25373
25374
25375
25376
25377
25378
25379
25380
25381
25382
25383
25384
25385
25386
25387
25388
25389
25390
25391
25392
25393
25394
25395
25396
25397
25398
25399
25400
25401
25402
25403
25404
25405
25406
25407
25408
25409
25410
25411
25412
25413
25414
25415
25416
25417
25418
25419
25420
25421
25422
25423
25424
25425
25426
25427
25428
25429
25430
25431
25432
25433
25434
25435
25436
25437
25438
25439
25440
25441
25442
25443
25444
25445
25446
25447
25448
25449
25450
25451
25452
25453
25454
25455
25456
25457
25458
25459
25460
25461
25462
25463
25464
25465
25466
25467
25468
25469
25470
25471
25472
25473
25474
25475
25476
25477
25478
25479
25480
25481
25482
25483
25484
25485
25486
25487
25488
25489
25490
25491
25492
25493
25494
25495
25496
25497
25498
25499
25500
25501
25502
25503
25504
25505
25506
25507
25508
25509
25510
25511
25512
25513
25514
25515
25516
25517
25518
25519
25520
25521
25522
25523
25524
25525
25526
25527
25528
25529
25530
25531
25532
25533
25534
25535
25536
25537
25538
25539
25540
25541
25542
25543
25544
25545
25546
25547
25548
25549
25550
25551
25552
25553
25554
25555
25556
25557
25558
25559
25560
25561
25562
25563
25564
25565
25566
25567
25568
25569
25570
25571
25572
25573
25574
25575
25576
25577
25578
25579
25580
25581
25582
25583
25584
25585
25586
25587
25588
25589
25590
25591
25592
25593
25594
25595
25596
25597
25598
25599
25600
25601
25602
25603
25604
25605
25606
25607
25608
25609
25610
25611
25612
25613
25614
25615
25616
25617
25618
25619
25620
25621
25622
25623
25624
25625
25626
25627
25628
25629
25630
25631
25632
25633
25634
25635
25636
25637
25638
25639
25640
25641
25642
25643
25644
25645
25646
25647
25648
25649
25650
25651
25652
25653
25654
25655
25656
25657
25658
25659
25660
25661
25662
25663
25664
25665
25666
25667
25668
25669
25670
25671
25672
25673
25674
25675
25676
25677
25678
25679
25680
25681
25682
25683
25684
25685
25686
25687
25688
25689
25690
25691
25692
25693
25694
25695
25696
25697
25698
25699
25700
25701
25702
25703
25704
25705
25706
25707
25708
25709
25710
25711
25712
25713
25714
25715
25716
25717
25718
25719
25720
25721
25722
25723
25724
25725
25726
25727
25728
25729
25730
25731
25732
25733
25734
25735
25736
25737
25738
25739
25740
25741
25742
25743
25744
25745
25746
25747
25748
25749
25750
25751
25752
25753
25754
25755
25756
25757
25758
25759
25760
25761
25762
25763
25764
25765
25766
25767
25768
25769
25770
25771
25772
25773
25774
25775
25776
25777
25778
25779
25780
25781
25782
25783
25784
25785
25786
25787
25788
25789
25790
25791
25792
25793
25794
25795
25796
25797
25798
25799
25800
25801
25802
25803
25804
25805
25806
25807
25808
25809
25810
25811
25812
25813
25814
25815
25816
25817
25818
25819
25820
25821
25822
25823
25824
25825
25826
25827
25828
25829
25830
25831
25832
25833
25834
25835
25836
25837
25838
25839
25840
25841
25842
25843
25844
25845
25846
25847
25848
25849
25850
25851
25852
25853
25854
25855
25856
25857
25858
25859
25860
25861
25862
25863
25864
25865
25866
25867
25868
25869
25870
25871
25872
25873
25874
25875
25876
25877
25878
25879
25880
25881
25882
25883
25884
25885
25886
25887
25888
25889
25890
25891
25892
25893
25894
25895
25896
25897
25898
25899
25900
25901
25902
25903
25904
25905
25906
25907
25908
25909
25910
25911
25912
25913
25914
25915
25916
25917
25918
25919
25920
25921
25922
25923
25924
25925
25926
25927
25928
25929
25930
25931
25932
25933
25934
25935
25936
25937
25938
25939
25940
25941
25942
25943
25944
25945
25946
25947
25948
25949
25950
25951
25952
25953
25954
25955
25956
25957
25958
25959
25960
25961
25962
25963
25964
25965
25966
25967
25968
25969
25970
25971
25972
25973
25974
25975
25976
25977
25978
25979
25980
25981
25982
25983
25984
25985
25986
25987
25988
25989
25990
25991
25992
25993
25994
25995
25996
25997
25998
25999
26000
26001
26002
26003
26004
26005
26006
26007
26008
26009
26010
26011
26012
26013
26014
26015
26016
26017
26018
26019
26020
26021
26022
26023
26024
26025
26026
26027
26028
26029
26030
26031
26032
26033
26034
26035
26036
26037
26038
26039
26040
26041
26042
26043
26044
26045
26046
26047
26048
26049
26050
26051
26052
26053
26054
26055
26056
26057
26058
26059
26060
26061
26062
26063
26064
26065
26066
26067
26068
26069
26070
26071
26072
26073
26074
26075
26076
26077
26078
26079
26080
26081
26082
26083
26084
26085
26086
26087
26088
26089
26090
26091
26092
26093
26094
26095
26096
26097
26098
26099
26100
26101
26102
26103
26104
26105
26106
26107
26108
26109
26110
26111
26112
26113
26114
26115
26116
26117
26118
26119
26120
26121
26122
26123
26124
26125
26126
26127
26128
26129
26130
26131
26132
26133
26134
26135
26136
26137
26138
26139
26140
26141
26142
26143
26144
26145
26146
26147
26148
26149
26150
26151
26152
26153
26154
26155
26156
26157
26158
26159
26160
26161
26162
26163
26164
26165
26166
26167
26168
26169
26170
26171
26172
26173
26174
26175
26176
26177
26178
26179
26180
26181
26182
26183
26184
26185
26186
26187
26188
26189
26190
26191
26192
26193
26194
26195
26196
26197
26198
26199
26200
26201
26202
26203
26204
26205
26206
26207
26208
26209
26210
26211
26212
26213
26214
26215
26216
26217
26218
26219
26220
26221
26222
26223
26224
26225
26226
26227
26228
26229
26230
26231
26232
26233
26234
26235
26236
26237
26238
26239
26240
26241
26242
26243
26244
26245
26246
26247
26248
26249
26250
26251
26252
26253
26254
26255
26256
26257
26258
26259
26260
26261
26262
26263
26264
26265
26266
26267
26268
26269
26270
26271
26272
26273
26274
26275
26276
26277
26278
26279
26280
26281
26282
26283
26284
26285
26286
26287
26288
26289
26290
26291
26292
26293
26294
26295
26296
26297
26298
26299
26300
26301
26302
26303
26304
26305
26306
26307
26308
26309
26310
26311
26312
26313
26314
26315
26316
26317
26318
26319
26320
26321
26322
26323
26324
26325
26326
26327
26328
26329
26330
26331
26332
26333
26334
26335
26336
26337
26338
26339
26340
26341
26342
26343
26344
26345
26346
26347
26348
26349
26350
26351
26352
26353
26354
26355
26356
26357
26358
26359
26360
26361
26362
26363
26364
26365
26366
26367
26368
26369
26370
26371
26372
26373
26374
26375
26376
26377
26378
26379
26380
26381
26382
26383
26384
26385
26386
26387
26388
26389
26390
26391
26392
26393
26394
26395
26396
26397
26398
26399
26400
26401
26402
26403
26404
26405
26406
26407
26408
26409
26410
26411
26412
26413
26414
26415
26416
26417
26418
26419
26420
26421
26422
26423
26424
26425
26426
26427
26428
26429
26430
26431
26432
26433
26434
26435
26436
26437
26438
26439
26440
26441
26442
26443
26444
26445
26446
26447
26448
26449
26450
26451
26452
26453
26454
26455
26456
26457
26458
26459
26460
26461
26462
26463
26464
26465
26466
26467
26468
26469
26470
26471
26472
26473
26474
26475
26476
26477
26478
26479
26480
26481
26482
26483
26484
26485
26486
26487
26488
26489
26490
26491
26492
26493
26494
26495
26496
26497
26498
26499
26500
26501
26502
26503
26504
26505
26506
26507
26508
26509
26510
26511
26512
26513
26514
26515
26516
26517
26518
26519
26520
26521
26522
26523
26524
26525
26526
26527
26528
26529
26530
26531
26532
26533
26534
26535
26536
26537
26538
26539
26540
26541
26542
26543
26544
26545
26546
26547
26548
26549
26550
26551
26552
26553
26554
26555
26556
26557
26558
26559
26560
26561
26562
26563
26564
26565
26566
26567
26568
26569
26570
26571
26572
26573
26574
26575
26576
26577
26578
26579
26580
26581
26582
26583
26584
26585
26586
26587
26588
26589
26590
26591
26592
26593
26594
26595
26596
26597
26598
26599
26600
26601
26602
26603
26604
26605
26606
26607
26608
26609
26610
26611
26612
26613
26614
26615
26616
26617
26618
26619
26620
26621
26622
26623
26624
26625
26626
26627
26628
26629
26630
26631
26632
26633
26634
26635
26636
26637
26638
26639
26640
26641
26642
26643
26644
26645
26646
26647
26648
26649
26650
26651
26652
26653
26654
26655
26656
26657
26658
26659
26660
26661
26662
26663
26664
26665
26666
26667
26668
26669
26670
26671
26672
26673
26674
26675
26676
26677
26678
26679
26680
26681
26682
26683
26684
26685
26686
26687
26688
26689
26690
26691
26692
26693
26694
26695
26696
26697
26698
26699
26700
26701
26702
26703
26704
26705
26706
26707
26708
26709
26710
26711
26712
26713
26714
26715
26716
26717
26718
26719
26720
26721
26722
26723
26724
26725
26726
26727
26728
26729
26730
26731
26732
26733
26734
26735
26736
26737
26738
26739
26740
26741
26742
26743
26744
26745
26746
26747
26748
26749
26750
26751
26752
26753
26754
26755
26756
26757
26758
26759
26760
26761
26762
26763
26764
26765
26766
26767
26768
26769
26770
26771
26772
26773
26774
26775
26776
26777
26778
26779
26780
26781
26782
26783
26784
26785
26786
26787
26788
26789
26790
26791
26792
26793
26794
26795
26796
26797
26798
26799
26800
26801
26802
26803
26804
26805
26806
26807
26808
26809
26810
26811
26812
26813
26814
26815
26816
26817
26818
26819
26820
26821
26822
26823
26824
26825
26826
26827
26828
26829
26830
26831
26832
26833
26834
26835
26836
26837
26838
26839
26840
26841
26842
26843
26844
26845
26846
26847
26848
26849
26850
26851
26852
26853
26854
26855
26856
26857
26858
26859
26860
26861
26862
26863
26864
26865
26866
26867
26868
26869
26870
26871
26872
26873
26874
26875
26876
26877
26878
26879
26880
26881
26882
26883
26884
26885
26886
26887
26888
26889
26890
26891
26892
26893
26894
26895
26896
26897
26898
26899
26900
26901
26902
26903
26904
26905
26906
26907
26908
26909
26910
26911
26912
26913
26914
26915
26916
26917
26918
26919
26920
26921
26922
26923
26924
26925
26926
26927
26928
26929
26930
26931
26932
26933
26934
26935
26936
26937
26938
26939
26940
26941
26942
26943
26944
26945
26946
26947
26948
26949
26950
26951
26952
26953
26954
26955
26956
26957
26958
26959
26960
26961
26962
26963
26964
26965
26966
26967
26968
26969
26970
26971
26972
26973
26974
26975
26976
26977
26978
26979
26980
26981
26982
26983
26984
26985
26986
26987
26988
26989
26990
26991
26992
26993
26994
26995
26996
26997
26998
26999
27000
27001
27002
27003
27004
27005
27006
27007
27008
27009
27010
27011
27012
27013
27014
27015
27016
27017
27018
27019
27020
27021
27022
27023
27024
27025
27026
27027
27028
27029
27030
27031
27032
27033
27034
27035
27036
27037
27038
27039
27040
27041
27042
27043
27044
27045
27046
27047
27048
27049
27050
27051
27052
27053
27054
27055
27056
27057
27058
27059
27060
27061
27062
27063
27064
27065
27066
27067
27068
27069
27070
27071
27072
27073
27074
27075
27076
27077
27078
27079
27080
27081
27082
27083
27084
27085
27086
27087
27088
27089
27090
27091
27092
27093
27094
27095
27096
27097
27098
27099
27100
27101
27102
27103
27104
27105
27106
27107
27108
27109
27110
27111
27112
27113
27114
27115
27116
27117
27118
27119
27120
27121
27122
27123
27124
27125
27126
27127
27128
27129
27130
27131
27132
27133
27134
27135
27136
27137
27138
27139
27140
27141
27142
27143
27144
27145
27146
27147
27148
27149
27150
27151
27152
27153
27154
27155
27156
27157
27158
27159
27160
27161
27162
27163
27164
27165
27166
27167
27168
27169
27170
27171
27172
27173
27174
27175
27176
27177
27178
27179
27180
27181
27182
27183
27184
27185
27186
27187
27188
27189
27190
27191
27192
27193
27194
27195
27196
27197
27198
27199
27200
27201
27202
27203
27204
27205
27206
27207
27208
27209
27210
27211
27212
27213
27214
27215
27216
27217
27218
27219
27220
27221
27222
27223
27224
27225
27226
27227
27228
27229
27230
27231
27232
27233
27234
27235
27236
27237
27238
27239
27240
27241
27242
27243
27244
27245
27246
27247
27248
27249
27250
27251
27252
27253
27254
27255
27256
27257
27258
27259
27260
27261
27262
27263
27264
27265
27266
27267
27268
27269
27270
27271
27272
27273
27274
27275
27276
27277
27278
27279
27280
27281
27282
27283
27284
27285
27286
27287
27288
27289
27290
27291
27292
27293
27294
27295
27296
27297
27298
27299
27300
27301
27302
27303
27304
27305
27306
27307
27308
27309
27310
27311
27312
27313
27314
27315
27316
27317
27318
27319
27320
27321
27322
27323
27324
27325
27326
27327
27328
27329
27330
27331
27332
27333
27334
27335
27336
27337
27338
27339
27340
27341
27342
27343
27344
27345
27346
27347
27348
27349
27350
27351
27352
27353
27354
27355
27356
27357
27358
27359
27360
27361
27362
27363
27364
27365
27366
27367
27368
27369
27370
27371
27372
27373
27374
27375
27376
27377
27378
27379
27380
27381
27382
27383
27384
27385
27386
27387
27388
27389
27390
27391
27392
27393
27394
27395
27396
27397
27398
27399
27400
27401
27402
27403
27404
27405
27406
27407
27408
27409
27410
27411
27412
27413
27414
27415
27416
27417
27418
27419
27420
27421
27422
27423
27424
27425
27426
27427
27428
27429
27430
27431
27432
27433
27434
27435
27436
27437
27438
27439
27440
27441
27442
27443
27444
27445
27446
27447
27448
27449
27450
27451
27452
27453
27454
27455
27456
27457
27458
27459
27460
27461
27462
27463
27464
27465
27466
27467
27468
27469
27470
27471
27472
27473
27474
27475
27476
27477
27478
27479
27480
27481
27482
27483
27484
27485
27486
27487
27488
27489
27490
27491
27492
27493
27494
27495
27496
27497
27498
27499
27500
27501
27502
27503
27504
27505
27506
27507
27508
27509
27510
27511
27512
27513
27514
27515
27516
27517
27518
27519
27520
27521
27522
27523
27524
27525
27526
27527
27528
27529
27530
27531
27532
27533
27534
27535
27536
27537
27538
27539
27540
27541
27542
27543
27544
27545
27546
27547
27548
27549
27550
27551
27552
27553
27554
27555
27556
27557
27558
27559
27560
27561
27562
27563
27564
27565
27566
27567
27568
27569
27570
27571
27572
27573
27574
27575
27576
27577
27578
27579
27580
27581
27582
27583
27584
27585
27586
27587
27588
27589
27590
27591
27592
27593
27594
27595
27596
27597
27598
27599
27600
27601
27602
27603
27604
27605
27606
27607
27608
27609
27610
27611
27612
27613
27614
27615
27616
27617
27618
27619
27620
27621
27622
27623
27624
27625
27626
27627
27628
27629
27630
27631
27632
27633
27634
27635
27636
27637
27638
27639
27640
27641
27642
27643
27644
27645
27646
27647
27648
27649
27650
27651
27652
27653
27654
27655
27656
27657
27658
27659
27660
27661
27662
27663
27664
27665
27666
27667
27668
27669
27670
27671
27672
27673
27674
27675
27676
27677
27678
27679
27680
27681
27682
27683
27684
27685
27686
27687
27688
27689
27690
27691
27692
27693
27694
27695
27696
27697
27698
27699
27700
27701
27702
27703
27704
27705
27706
27707
27708
27709
27710
27711
27712
27713
27714
27715
27716
27717
27718
27719
27720
27721
27722
27723
27724
27725
27726
27727
27728
27729
27730
27731
27732
27733
27734
27735
27736
27737
27738
27739
27740
27741
27742
27743
27744
27745
27746
27747
27748
27749
27750
27751
27752
27753
27754
27755
27756
27757
27758
27759
27760
27761
27762
27763
27764
27765
27766
27767
27768
27769
27770
27771
27772
27773
27774
27775
27776
27777
27778
27779
27780
27781
27782
27783
27784
27785
27786
27787
27788
27789
27790
27791
27792
27793
27794
27795
27796
27797
27798
27799
27800
27801
27802
27803
27804
27805
27806
27807
27808
27809
27810
27811
27812
27813
27814
27815
27816
27817
27818
27819
27820
27821
27822
27823
27824
27825
27826
27827
27828
27829
27830
27831
27832
27833
27834
27835
27836
27837
27838
27839
27840
27841
27842
27843
27844
27845
27846
27847
27848
27849
27850
27851
27852
27853
27854
27855
27856
27857
27858
27859
27860
27861
27862
27863
27864
27865
27866
27867
27868
27869
27870
27871
27872
27873
27874
27875
27876
27877
27878
27879
27880
27881
27882
27883
27884
27885
27886
27887
27888
27889
27890
27891
27892
27893
27894
27895
27896
27897
27898
27899
27900
27901
27902
27903
27904
27905
27906
27907
27908
27909
27910
27911
27912
27913
27914
27915
27916
27917
27918
27919
27920
27921
27922
27923
27924
27925
27926
27927
27928
27929
27930
27931
27932
27933
27934
27935
27936
27937
27938
27939
27940
27941
27942
27943
27944
27945
27946
27947
27948
27949
27950
27951
27952
27953
27954
27955
27956
27957
27958
27959
27960
27961
27962
27963
27964
27965
27966
27967
27968
27969
27970
27971
27972
27973
27974
27975
27976
27977
27978
27979
27980
27981
27982
27983
27984
27985
27986
27987
27988
27989
27990
27991
27992
27993
27994
27995
27996
27997
27998
27999
28000
28001
28002
28003
28004
28005
28006
28007
28008
28009
28010
28011
28012
28013
28014
28015
28016
28017
28018
28019
28020
28021
28022
28023
28024
28025
28026
28027
28028
28029
28030
28031
28032
28033
28034
28035
28036
28037
28038
28039
28040
28041
28042
28043
28044
28045
28046
28047
28048
28049
28050
28051
28052
28053
28054
28055
28056
28057
28058
28059
28060
28061
28062
28063
28064
28065
28066
28067
28068
28069
28070
28071
28072
28073
28074
28075
28076
28077
28078
28079
28080
28081
28082
28083
28084
28085
28086
28087
28088
28089
28090
28091
28092
28093
28094
28095
28096
28097
28098
28099
28100
28101
28102
28103
28104
28105
28106
28107
28108
28109
28110
28111
28112
28113
28114
28115
28116
28117
28118
28119
28120
28121
28122
28123
28124
28125
28126
28127
28128
28129
28130
28131
28132
28133
28134
28135
28136
28137
28138
28139
28140
28141
28142
28143
28144
28145
28146
28147
28148
28149
28150
28151
28152
28153
28154
28155
28156
28157
28158
28159
28160
28161
28162
28163
28164
28165
28166
28167
28168
28169
28170
28171
28172
28173
28174
28175
28176
28177
28178
28179
28180
28181
28182
28183
28184
28185
28186
28187
28188
28189
28190
28191
28192
28193
28194
28195
28196
28197
28198
28199
28200
28201
28202
28203
28204
28205
28206
28207
28208
28209
28210
28211
28212
28213
28214
28215
28216
28217
28218
28219
28220
28221
28222
28223
28224
28225
28226
28227
28228
28229
28230
28231
28232
28233
28234
28235
28236
28237
28238
28239
28240
28241
28242
28243
28244
28245
28246
28247
28248
28249
28250
28251
28252
28253
28254
28255
28256
28257
28258
28259
28260
28261
28262
28263
28264
28265
28266
28267
28268
28269
28270
28271
28272
28273
28274
28275
28276
28277
28278
28279
28280
28281
28282
28283
28284
28285
28286
28287
28288
28289
28290
28291
28292
28293
28294
28295
28296
28297
28298
28299
28300
28301
28302
28303
28304
28305
28306
28307
28308
28309
28310
28311
28312
28313
28314
28315
28316
28317
28318
28319
28320
28321
28322
28323
28324
28325
28326
28327
28328
28329
28330
28331
28332
28333
28334
28335
28336
28337
28338
28339
28340
28341
28342
28343
28344
28345
28346
28347
28348
28349
28350
28351
28352
28353
28354
28355
28356
28357
28358
28359
28360
28361
28362
28363
28364
28365
28366
28367
28368
28369
28370
28371
28372
28373
28374
28375
28376
28377
28378
28379
28380
28381
28382
28383
28384
28385
28386
28387
28388
28389
28390
28391
28392
28393
28394
28395
28396
28397
28398
28399
28400
28401
28402
28403
28404
28405
28406
28407
28408
28409
28410
28411
28412
28413
28414
28415
28416
28417
28418
28419
28420
28421
28422
28423
28424
28425
28426
28427
28428
28429
28430
28431
28432
28433
28434
28435
28436
28437
28438
28439
28440
28441
28442
28443
28444
28445
28446
28447
28448
28449
28450
28451
28452
28453
28454
28455
28456
28457
28458
28459
28460
28461
28462
28463
28464
28465
28466
28467
28468
28469
28470
28471
28472
28473
28474
28475
28476
28477
28478
28479
28480
28481
28482
28483
28484
28485
28486
28487
28488
28489
28490
28491
28492
28493
28494
28495
28496
28497
28498
28499
28500
28501
28502
28503
28504
28505
28506
28507
28508
28509
28510
28511
28512
28513
28514
28515
28516
28517
28518
28519
28520
28521
28522
28523
28524
28525
28526
28527
28528
28529
28530
28531
28532
28533
28534
28535
28536
28537
28538
28539
28540
28541
28542
28543
28544
28545
28546
28547
28548
28549
28550
28551
28552
28553
28554
28555
28556
28557
28558
28559
28560
28561
28562
28563
28564
28565
28566
28567
28568
28569
28570
28571
28572
28573
28574
28575
28576
28577
28578
28579
28580
28581
28582
28583
28584
28585
28586
28587
28588
28589
28590
28591
28592
28593
28594
28595
28596
28597
28598
28599
28600
28601
28602
28603
28604
28605
28606
28607
28608
28609
28610
28611
28612
28613
28614
28615
28616
28617
28618
28619
28620
28621
28622
28623
28624
28625
28626
28627
28628
28629
28630
28631
28632
28633
28634
28635
28636
28637
28638
28639
28640
28641
28642
28643
28644
28645
28646
28647
28648
28649
28650
28651
28652
28653
28654
28655
28656
28657
28658
28659
28660
28661
28662
28663
28664
28665
28666
28667
28668
28669
28670
28671
28672
28673
28674
28675
28676
28677
28678
28679
28680
28681
28682
28683
28684
28685
28686
28687
28688
28689
28690
28691
28692
28693
28694
28695
28696
28697
28698
28699
28700
28701
28702
28703
28704
28705
28706
28707
28708
28709
28710
28711
28712
28713
28714
28715
28716
28717
28718
28719
28720
28721
28722
28723
28724
28725
28726
28727
28728
28729
28730
28731
28732
28733
28734
28735
28736
28737
28738
28739
28740
28741
28742
28743
28744
28745
28746
28747
28748
28749
28750
28751
28752
28753
28754
28755
28756
28757
28758
28759
28760
28761
28762
28763
28764
28765
28766
28767
28768
28769
28770
28771
28772
28773
28774
28775
28776
28777
28778
28779
28780
28781
28782
28783
28784
28785
28786
28787
28788
28789
28790
28791
28792
28793
28794
28795
28796
28797
28798
28799
28800
28801
28802
28803
28804
28805
28806
28807
28808
28809
28810
28811
28812
28813
28814
28815
28816
28817
28818
28819
28820
28821
28822
28823
28824
28825
28826
28827
28828
28829
28830
28831
28832
28833
28834
28835
28836
28837
28838
28839
28840
28841
28842
28843
28844
28845
28846
28847
28848
28849
28850
28851
28852
28853
28854
28855
28856
28857
28858
28859
28860
28861
28862
28863
28864
28865
28866
28867
28868
28869
28870
28871
28872
28873
28874
28875
28876
28877
28878
28879
28880
28881
28882
28883
28884
28885
28886
28887
28888
28889
28890
28891
28892
28893
28894
28895
28896
28897
28898
28899
28900
28901
28902
28903
28904
28905
28906
28907
28908
28909
28910
28911
28912
28913
28914
28915
28916
28917
28918
28919
28920
28921
28922
28923
28924
28925
28926
28927
28928
28929
28930
28931
28932
28933
28934
28935
28936
28937
28938
28939
28940
28941
28942
28943
28944
28945
28946
28947
28948
28949
28950
28951
28952
28953
28954
28955
28956
28957
28958
28959
28960
28961
28962
28963
28964
28965
28966
28967
28968
28969
28970
28971
28972
28973
28974
28975
28976
28977
28978
28979
28980
28981
28982
28983
28984
28985
28986
28987
28988
28989
28990
28991
28992
28993
28994
28995
28996
28997
28998
28999
29000
29001
29002
29003
29004
29005
29006
29007
29008
29009
29010
29011
29012
29013
29014
29015
29016
29017
29018
29019
29020
29021
29022
29023
29024
29025
29026
29027
29028
29029
29030
29031
29032
29033
29034
29035
29036
29037
29038
29039
29040
29041
29042
29043
29044
29045
29046
29047
29048
29049
29050
29051
29052
29053
29054
29055
29056
29057
29058
29059
29060
29061
29062
29063
29064
29065
29066
29067
29068
29069
29070
29071
29072
29073
29074
29075
29076
29077
29078
29079
29080
29081
29082
29083
29084
29085
29086
29087
29088
29089
29090
29091
29092
29093
29094
29095
29096
29097
29098
29099
29100
29101
29102
29103
29104
29105
29106
29107
29108
29109
29110
29111
29112
29113
29114
29115
29116
29117
29118
29119
29120
29121
29122
29123
29124
29125
29126
29127
29128
29129
29130
29131
29132
29133
29134
29135
29136
29137
29138
29139
29140
29141
29142
29143
29144
29145
29146
29147
29148
29149
29150
29151
29152
29153
29154
29155
29156
29157
29158
29159
29160
29161
29162
29163
29164
29165
29166
29167
29168
29169
29170
29171
29172
29173
29174
29175
29176
29177
29178
29179
29180
29181
29182
29183
29184
29185
29186
29187
29188
29189
29190
29191
29192
29193
29194
29195
29196
29197
29198
29199
29200
29201
29202
29203
29204
29205
29206
29207
29208
29209
29210
29211
29212
29213
29214
29215
29216
29217
29218
29219
29220
29221
29222
29223
29224
29225
29226
29227
29228
29229
29230
29231
29232
29233
29234
29235
29236
29237
29238
29239
29240
29241
29242
29243
29244
29245
29246
29247
29248
29249
29250
29251
29252
29253
29254
29255
29256
29257
29258
29259
29260
29261
29262
29263
29264
29265
29266
29267
29268
29269
29270
29271
29272
29273
29274
29275
29276
29277
29278
29279
29280
29281
29282
29283
29284
29285
29286
29287
29288
29289
29290
29291
29292
29293
29294
29295
29296
29297
29298
29299
29300
29301
29302
29303
29304
29305
29306
29307
29308
29309
29310
29311
29312
29313
29314
29315
29316
29317
29318
29319
29320
29321
29322
29323
29324
29325
29326
29327
29328
29329
29330
29331
29332
29333
29334
29335
29336
29337
29338
29339
29340
29341
29342
29343
29344
29345
29346
29347
29348
29349
29350
29351
29352
29353
29354
29355
29356
29357
29358
29359
29360
29361
29362
29363
29364
29365
29366
29367
29368
29369
29370
29371
29372
29373
29374
29375
29376
29377
29378
29379
29380
29381
29382
29383
29384
29385
29386
29387
29388
29389
29390
29391
29392
29393
29394
29395
29396
29397
29398
29399
29400
29401
29402
29403
29404
29405
29406
29407
29408
29409
29410
29411
29412
29413
29414
29415
29416
29417
29418
29419
29420
29421
29422
29423
29424
29425
29426
29427
29428
29429
29430
29431
29432
29433
29434
29435
29436
29437
29438
29439
29440
29441
29442
29443
29444
29445
29446
29447
29448
29449
29450
29451
29452
29453
29454
29455
29456
29457
29458
29459
29460
29461
29462
29463
29464
29465
29466
29467
29468
29469
29470
29471
29472
29473
29474
29475
29476
29477
29478
29479
29480
29481
29482
29483
29484
29485
29486
29487
29488
29489
29490
29491
29492
29493
29494
29495
29496
29497
29498
29499
29500
29501
29502
29503
29504
29505
29506
29507
29508
29509
29510
29511
29512
29513
29514
29515
29516
29517
29518
29519
29520
29521
29522
29523
29524
29525
29526
29527
29528
29529
29530
29531
29532
29533
29534
29535
29536
29537
29538
29539
29540
29541
29542
29543
29544
29545
29546
29547
29548
29549
29550
29551
29552
29553
29554
29555
29556
29557
29558
29559
29560
29561
29562
29563
29564
29565
29566
29567
29568
29569
29570
29571
29572
29573
29574
29575
29576
29577
29578
29579
29580
29581
29582
29583
29584
29585
29586
29587
29588
29589
29590
29591
29592
29593
29594
29595
29596
29597
29598
29599
29600
29601
29602
29603
29604
29605
29606
29607
29608
29609
29610
29611
29612
29613
29614
29615
29616
29617
29618
29619
29620
29621
29622
29623
29624
29625
29626
29627
29628
29629
29630
29631
29632
29633
29634
29635
29636
29637
29638
29639
29640
29641
29642
29643
29644
29645
29646
29647
29648
29649
29650
29651
29652
29653
29654
29655
29656
29657
29658
29659
29660
29661
29662
29663
29664
29665
29666
29667
29668
29669
29670
29671
29672
29673
29674
29675
29676
29677
29678
29679
29680
29681
29682
29683
29684
29685
29686
29687
29688
29689
29690
29691
29692
29693
29694
29695
29696
29697
29698
29699
29700
29701
29702
29703
29704
29705
29706
29707
29708
29709
29710
29711
29712
29713
29714
29715
29716
29717
29718
29719
29720
29721
29722
29723
29724
29725
29726
29727
29728
29729
29730
29731
29732
29733
29734
29735
29736
29737
29738
29739
29740
29741
29742
29743
29744
29745
29746
29747
29748
29749
29750
29751
29752
29753
29754
29755
29756
29757
29758
29759
29760
29761
29762
29763
29764
29765
29766
29767
29768
29769
29770
29771
29772
29773
29774
29775
29776
29777
29778
29779
29780
29781
29782
29783
29784
29785
29786
29787
29788
29789
29790
29791
29792
29793
29794
29795
29796
29797
29798
29799
29800
29801
29802
29803
29804
29805
29806
29807
29808
29809
29810
29811
29812
29813
29814
29815
29816
29817
29818
29819
29820
29821
29822
29823
29824
29825
29826
29827
29828
29829
29830
29831
29832
29833
29834
29835
29836
29837
29838
29839
29840
29841
29842
29843
29844
29845
29846
29847
29848
29849
29850
29851
29852
29853
29854
29855
29856
29857
29858
29859
29860
29861
29862
29863
29864
29865
29866
29867
29868
29869
29870
29871
29872
29873
29874
29875
29876
29877
29878
29879
29880
29881
29882
29883
29884
29885
29886
29887
29888
29889
29890
29891
29892
29893
29894
29895
29896
29897
29898
29899
29900
29901
29902
29903
29904
29905
29906
29907
29908
29909
29910
29911
29912
29913
29914
29915
29916
29917
29918
29919
29920
29921
29922
29923
29924
29925
29926
29927
29928
29929
29930
29931
29932
29933
29934
29935
29936
29937
29938
29939
29940
29941
29942
29943
29944
29945
29946
29947
29948
29949
29950
29951
29952
29953
29954
29955
29956
29957
29958
29959
29960
29961
29962
29963
29964
29965
29966
29967
29968
29969
29970
29971
29972
29973
29974
29975
29976
29977
29978
29979
29980
29981
29982
29983
29984
29985
29986
29987
29988
29989
29990
29991
29992
29993
29994
29995
29996
29997
29998
29999
30000
30001
30002
30003
30004
30005
30006
30007
30008
30009
30010
30011
30012
30013
30014
30015
30016
30017
30018
30019
30020
30021
30022
30023
30024
30025
30026
30027
30028
30029
30030
30031
30032
30033
30034
30035
30036
30037
30038
30039
30040
30041
30042
30043
30044
30045
30046
30047
30048
30049
30050
30051
30052
30053
30054
30055
30056
30057
30058
30059
30060
30061
30062
30063
30064
30065
30066
30067
30068
30069
30070
30071
30072
30073
30074
30075
30076
30077
30078
30079
30080
30081
30082
30083
30084
30085
30086
30087
30088
30089
30090
30091
30092
30093
30094
30095
30096
30097
30098
30099
30100
30101
30102
30103
30104
30105
30106
30107
30108
30109
30110
30111
30112
30113
30114
30115
30116
30117
30118
30119
30120
30121
30122
30123
30124
30125
30126
30127
30128
30129
30130
30131
30132
30133
30134
30135
30136
30137
30138
30139
30140
30141
30142
30143
30144
30145
30146
30147
30148
30149
30150
30151
30152
30153
30154
30155
30156
30157
30158
30159
30160
30161
30162
30163
30164
30165
30166
30167
30168
30169
30170
30171
30172
30173
30174
30175
30176
30177
30178
30179
30180
30181
30182
30183
30184
30185
30186
30187
30188
30189
30190
30191
30192
30193
30194
30195
30196
30197
30198
30199
30200
30201
30202
30203
30204
30205
30206
30207
30208
30209
30210
30211
30212
30213
30214
30215
30216
30217
30218
30219
30220
30221
30222
30223
30224
30225
30226
30227
30228
30229
30230
30231
30232
30233
30234
30235
30236
30237
30238
30239
30240
30241
30242
30243
30244
30245
30246
30247
30248
30249
30250
30251
30252
30253
30254
30255
30256
30257
30258
30259
30260
30261
30262
30263
30264
30265
30266
30267
30268
30269
30270
30271
30272
30273
30274
30275
30276
30277
30278
30279
30280
30281
30282
30283
30284
30285
30286
30287
30288
30289
30290
30291
30292
30293
30294
30295
30296
30297
30298
30299
30300
30301
30302
30303
30304
30305
30306
30307
30308
30309
30310
30311
30312
30313
30314
30315
30316
30317
30318
30319
30320
30321
30322
30323
30324
30325
30326
30327
30328
30329
30330
30331
30332
30333
30334
30335
30336
30337
30338
30339
30340
30341
30342
30343
30344
30345
30346
30347
30348
30349
30350
30351
30352
30353
30354
30355
30356
30357
30358
30359
30360
30361
30362
30363
30364
30365
30366
30367
30368
30369
30370
30371
30372
30373
30374
30375
30376
30377
30378
30379
30380
30381
30382
30383
30384
30385
30386
30387
30388
30389
30390
30391
30392
30393
30394
30395
30396
30397
30398
30399
30400
30401
30402
30403
30404
30405
30406
30407
30408
30409
30410
30411
30412
30413
30414
30415
30416
30417
30418
30419
30420
30421
30422
30423
30424
30425
30426
30427
30428
30429
30430
30431
30432
30433
30434
30435
30436
30437
30438
30439
30440
30441
30442
30443
30444
30445
30446
30447
30448
30449
30450
30451
30452
30453
30454
30455
30456
30457
30458
30459
30460
30461
30462
30463
30464
30465
30466
30467
30468
30469
30470
30471
30472
30473
30474
30475
30476
30477
30478
30479
30480
30481
30482
30483
30484
30485
30486
30487
30488
30489
30490
30491
30492
30493
30494
30495
30496
30497
30498
30499
30500
30501
30502
30503
30504
30505
30506
30507
30508
30509
30510
30511
30512
30513
30514
30515
30516
30517
30518
30519
30520
30521
30522
30523
30524
30525
30526
30527
30528
30529
30530
30531
30532
30533
30534
30535
30536
30537
30538
30539
30540
30541
30542
30543
30544
30545
30546
30547
30548
30549
30550
30551
30552
30553
30554
30555
30556
30557
30558
30559
30560
30561
30562
30563
30564
30565
30566
30567
30568
30569
30570
30571
30572
30573
30574
30575
30576
30577
30578
30579
30580
30581
30582
30583
30584
30585
30586
30587
30588
30589
30590
30591
30592
30593
30594
30595
30596
30597
30598
30599
30600
30601
30602
30603
30604
30605
30606
30607
30608
30609
30610
30611
30612
30613
30614
30615
30616
30617
30618
30619
30620
30621
30622
30623
30624
30625
30626
30627
30628
30629
30630
30631
30632
30633
30634
30635
30636
30637
30638
30639
30640
30641
30642
30643
30644
30645
30646
30647
30648
30649
30650
30651
30652
30653
30654
30655
30656
30657
30658
30659
30660
30661
30662
30663
30664
30665
30666
30667
30668
30669
30670
30671
30672
30673
30674
30675
30676
30677
30678
30679
30680
30681
30682
30683
30684
30685
30686
30687
30688
30689
30690
30691
30692
30693
30694
30695
30696
30697
30698
30699
30700
30701
30702
30703
30704
30705
30706
30707
30708
30709
30710
30711
30712
30713
30714
30715
30716
30717
30718
30719
30720
30721
30722
30723
30724
30725
30726
30727
30728
30729
30730
30731
30732
30733
30734
30735
30736
30737
30738
30739
30740
30741
30742
30743
30744
30745
30746
30747
30748
30749
30750
30751
30752
30753
30754
30755
30756
30757
30758
30759
30760
30761
30762
30763
30764
30765
30766
30767
30768
30769
30770
30771
30772
30773
30774
30775
30776
30777
30778
30779
30780
30781
30782
30783
30784
30785
30786
30787
30788
30789
30790
30791
30792
30793
30794
30795
30796
30797
30798
30799
30800
30801
30802
30803
30804
30805
30806
30807
30808
30809
30810
30811
30812
30813
30814
30815
30816
30817
30818
30819
30820
30821
30822
30823
30824
30825
30826
30827
30828
30829
30830
30831
30832
30833
30834
30835
30836
30837
30838
30839
30840
30841
30842
30843
30844
30845
30846
30847
30848
30849
30850
30851
30852
30853
30854
30855
30856
30857
30858
30859
30860
30861
30862
30863
30864
30865
30866
30867
30868
30869
30870
30871
30872
30873
30874
30875
30876
30877
30878
30879
30880
30881
30882
30883
30884
30885
30886
30887
30888
30889
30890
30891
30892
30893
30894
30895
30896
30897
30898
30899
30900
30901
30902
30903
30904
30905
30906
30907
30908
30909
30910
30911
30912
30913
30914
30915
30916
30917
30918
30919
30920
30921
30922
30923
30924
30925
30926
30927
30928
30929
30930
30931
30932
30933
30934
30935
30936
30937
30938
30939
30940
30941
30942
30943
30944
30945
30946
30947
30948
30949
30950
30951
30952
30953
30954
30955
30956
30957
30958
30959
30960
30961
30962
30963
30964
30965
30966
30967
30968
30969
30970
30971
30972
30973
30974
30975
30976
30977
30978
30979
30980
30981
30982
30983
30984
30985
30986
30987
30988
30989
30990
30991
30992
30993
30994
30995
30996
30997
30998
30999
31000
31001
31002
31003
31004
31005
31006
31007
31008
31009
31010
31011
31012
31013
31014
31015
31016
31017
31018
31019
31020
31021
31022
31023
31024
31025
31026
31027
31028
31029
31030
31031
31032
31033
31034
31035
31036
31037
31038
31039
31040
31041
31042
31043
31044
31045
31046
31047
31048
31049
31050
31051
31052
31053
31054
31055
31056
31057
31058
31059
31060
31061
31062
31063
31064
31065
31066
31067
31068
31069
31070
31071
31072
31073
31074
31075
31076
31077
31078
31079
31080
31081
31082
31083
31084
31085
31086
31087
31088
31089
31090
31091
31092
31093
31094
31095
31096
31097
31098
31099
31100
31101
31102
31103
31104
31105
31106
31107
31108
31109
31110
31111
31112
31113
31114
31115
31116
31117
31118
31119
31120
31121
31122
31123
31124
31125
31126
31127
31128
31129
31130
31131
31132
31133
31134
31135
31136
31137
31138
31139
31140
31141
31142
31143
31144
31145
31146
31147
31148
31149
31150
31151
31152
31153
31154
31155
31156
31157
31158
31159
31160
31161
31162
31163
31164
31165
31166
31167
31168
31169
31170
31171
31172
31173
31174
31175
31176
31177
31178
31179
31180
31181
31182
31183
31184
31185
31186
31187
31188
31189
31190
31191
31192
31193
31194
31195
31196
31197
31198
31199
31200
31201
31202
31203
31204
31205
31206
31207
31208
31209
31210
31211
31212
31213
31214
31215
31216
31217
31218
31219
31220
31221
31222
31223
31224
31225
31226
31227
31228
31229
31230
31231
31232
31233
31234
31235
31236
31237
31238
31239
31240
31241
31242
31243
31244
31245
31246
31247
31248
31249
31250
31251
31252
31253
31254
31255
31256
31257
31258
31259
31260
31261
31262
31263
31264
31265
31266
31267
31268
31269
31270
31271
31272
31273
31274
31275
31276
31277
31278
31279
31280
31281
31282
31283
31284
31285
31286
31287
31288
31289
31290
31291
31292
31293
31294
31295
31296
31297
31298
31299
31300
31301
31302
31303
31304
31305
31306
31307
31308
31309
31310
31311
31312
31313
31314
31315
31316
31317
31318
31319
31320
31321
31322
31323
31324
31325
31326
31327
31328
31329
31330
31331
31332
31333
31334
31335
31336
31337
31338
31339
31340
31341
31342
31343
31344
31345
31346
31347
31348
31349
31350
31351
31352
31353
31354
31355
31356
31357
31358
31359
31360
31361
31362
31363
31364
31365
31366
31367
31368
31369
31370
31371
31372
31373
31374
31375
31376
31377
31378
31379
31380
31381
31382
31383
31384
31385
31386
31387
31388
31389
31390
31391
31392
31393
31394
31395
31396
31397
31398
31399
31400
31401
31402
31403
31404
31405
31406
31407
31408
31409
31410
31411
31412
31413
31414
31415
31416
31417
31418
31419
31420
31421
31422
31423
31424
31425
31426
31427
31428
31429
31430
31431
31432
31433
31434
31435
31436
31437
31438
31439
31440
31441
31442
31443
31444
31445
31446
31447
31448
31449
31450
31451
31452
31453
31454
31455
31456
31457
31458
31459
31460
31461
31462
31463
31464
31465
31466
31467
31468
31469
31470
31471
31472
31473
31474
31475
31476
31477
31478
31479
31480
31481
31482
31483
31484
31485
31486
31487
31488
31489
31490
31491
31492
31493
31494
31495
31496
31497
31498
31499
31500
31501
31502
31503
31504
31505
31506
31507
31508
31509
31510
31511
31512
31513
31514
31515
31516
31517
31518
31519
31520
31521
31522
31523
31524
31525
31526
31527
31528
31529
31530
31531
31532
31533
31534
31535
31536
31537
31538
31539
31540
31541
31542
31543
31544
31545
31546
31547
31548
31549
31550
31551
31552
31553
31554
31555
31556
31557
31558
31559
31560
31561
31562
31563
31564
31565
31566
31567
31568
31569
31570
31571
31572
31573
31574
31575
31576
31577
31578
31579
31580
31581
31582
31583
31584
31585
31586
31587
31588
31589
31590
31591
31592
31593
31594
31595
31596
31597
31598
31599
31600
31601
31602
31603
31604
31605
31606
31607
31608
31609
31610
31611
31612
31613
31614
31615
31616
31617
31618
31619
31620
31621
31622
31623
31624
31625
31626
31627
31628
31629
31630
31631
31632
31633
31634
31635
31636
31637
31638
31639
31640
31641
31642
31643
31644
31645
31646
31647
31648
31649
31650
31651
31652
31653
31654
31655
31656
31657
31658
31659
31660
31661
31662
31663
31664
31665
31666
31667
31668
31669
31670
31671
31672
31673
31674
31675
31676
31677
31678
31679
31680
31681
31682
31683
31684
31685
31686
31687
31688
31689
31690
31691
31692
31693
31694
31695
31696
31697
31698
31699
31700
31701
31702
31703
31704
31705
31706
31707
31708
31709
31710
31711
31712
31713
31714
31715
31716
31717
31718
31719
31720
31721
31722
31723
31724
31725
31726
31727
31728
31729
31730
31731
31732
31733
31734
31735
31736
31737
31738
31739
31740
31741
31742
31743
31744
31745
31746
31747
31748
31749
31750
31751
31752
31753
31754
31755
31756
31757
31758
31759
31760
31761
31762
31763
31764
31765
31766
31767
31768
31769
31770
31771
31772
31773
31774
31775
31776
31777
31778
31779
31780
31781
31782
31783
31784
31785
31786
31787
31788
31789
31790
31791
31792
31793
31794
31795
31796
31797
31798
31799
31800
31801
31802
31803
31804
31805
31806
31807
31808
31809
31810
31811
31812
31813
31814
31815
31816
31817
31818
31819
31820
31821
31822
31823
31824
31825
31826
31827
31828
31829
31830
31831
31832
31833
31834
31835
31836
31837
31838
31839
31840
31841
31842
31843
31844
31845
31846
31847
31848
31849
31850
31851
31852
31853
31854
31855
31856
31857
31858
31859
31860
31861
31862
31863
31864
31865
31866
31867
31868
31869
31870
31871
31872
31873
31874
31875
31876
31877
31878
31879
31880
31881
31882
31883
31884
31885
31886
31887
31888
31889
31890
31891
31892
31893
31894
31895
31896
31897
31898
31899
31900
31901
31902
31903
31904
31905
31906
31907
31908
31909
31910
31911
31912
31913
31914
31915
31916
31917
31918
31919
31920
31921
31922
31923
31924
31925
31926
31927
31928
31929
31930
31931
31932
31933
31934
31935
31936
31937
31938
31939
31940
31941
31942
31943
31944
31945
31946
31947
31948
31949
31950
31951
31952
31953
31954
31955
31956
31957
31958
31959
31960
31961
31962
31963
31964
31965
31966
31967
31968
31969
31970
31971
31972
31973
31974
31975
31976
31977
31978
31979
31980
31981
31982
31983
31984
31985
31986
31987
31988
31989
31990
31991
31992
31993
31994
31995
31996
31997
31998
31999
32000
32001
32002
32003
32004
32005
32006
32007
32008
32009
32010
32011
32012
32013
32014
32015
32016
32017
32018
32019
32020
32021
32022
32023
32024
32025
32026
32027
32028
32029
32030
32031
32032
32033
32034
32035
32036
32037
32038
32039
32040
32041
32042
32043
32044
32045
32046
32047
32048
32049
32050
32051
32052
32053
32054
32055
32056
32057
32058
32059
32060
32061
32062
32063
32064
32065
32066
32067
32068
32069
32070
32071
32072
32073
32074
32075
32076
32077
32078
32079
32080
32081
32082
32083
32084
32085
32086
32087
32088
32089
32090
32091
32092
32093
32094
32095
32096
32097
32098
32099
32100
32101
32102
32103
32104
32105
32106
32107
32108
32109
32110
32111
32112
32113
32114
32115
32116
32117
32118
32119
32120
32121
32122
32123
32124
32125
32126
32127
32128
32129
32130
32131
32132
32133
32134
32135
32136
32137
32138
32139
32140
32141
32142
32143
32144
32145
32146
32147
32148
32149
32150
32151
32152
32153
32154
32155
32156
32157
32158
32159
32160
32161
32162
32163
32164
32165
32166
32167
32168
32169
32170
32171
32172
32173
32174
32175
32176
32177
32178
32179
32180
32181
32182
32183
32184
32185
32186
32187
32188
32189
32190
32191
32192
32193
32194
32195
32196
32197
32198
32199
32200
32201
32202
32203
32204
32205
32206
32207
32208
32209
32210
32211
32212
32213
32214
32215
32216
32217
32218
32219
32220
32221
32222
32223
32224
32225
32226
32227
32228
32229
32230
32231
32232
32233
32234
32235
32236
32237
32238
32239
32240
32241
32242
32243
32244
32245
32246
32247
32248
32249
32250
32251
32252
32253
32254
32255
32256
32257
32258
32259
32260
32261
32262
32263
32264
32265
32266
32267
32268
32269
32270
32271
32272
32273
32274
32275
32276
32277
32278
32279
32280
32281
32282
32283
32284
32285
32286
32287
32288
32289
32290
32291
32292
32293
32294
32295
32296
32297
32298
32299
32300
32301
32302
32303
32304
32305
32306
32307
32308
32309
32310
32311
32312
32313
32314
32315
32316
32317
32318
32319
32320
32321
32322
32323
32324
32325
32326
32327
32328
32329
32330
32331
32332
32333
32334
32335
32336
32337
32338
32339
32340
32341
32342
32343
32344
32345
32346
32347
32348
32349
32350
32351
32352
32353
32354
32355
32356
32357
32358
32359
32360
32361
32362
32363
32364
32365
32366
32367
32368
32369
32370
32371
32372
32373
32374
32375
32376
32377
32378
32379
32380
32381
32382
32383
32384
32385
32386
32387
32388
32389
32390
32391
32392
32393
32394
32395
32396
32397
32398
32399
32400
32401
32402
32403
32404
32405
32406
32407
32408
32409
32410
32411
32412
32413
32414
32415
32416
32417
32418
32419
32420
32421
32422
32423
32424
32425
32426
32427
32428
32429
32430
32431
32432
32433
32434
32435
32436
32437
32438
32439
32440
32441
32442
32443
32444
32445
32446
32447
32448
32449
32450
32451
32452
32453
32454
32455
32456
32457
32458
32459
32460
32461
32462
32463
32464
32465
32466
32467
32468
32469
32470
32471
32472
32473
32474
32475
32476
32477
32478
32479
32480
32481
32482
32483
32484
32485
32486
32487
32488
32489
32490
32491
32492
32493
32494
32495
32496
32497
32498
32499
32500
32501
32502
32503
32504
32505
32506
32507
32508
32509
32510
32511
32512
32513
32514
32515
32516
32517
32518
32519
32520
32521
32522
32523
32524
32525
32526
32527
32528
32529
32530
32531
32532
32533
32534
32535
32536
32537
32538
32539
32540
32541
32542
32543
32544
32545
32546
32547
32548
32549
32550
32551
32552
32553
32554
32555
32556
32557
32558
32559
32560
32561
32562
32563
32564
32565
32566
32567
32568
32569
32570
32571
32572
32573
32574
32575
32576
32577
32578
32579
32580
32581
32582
32583
32584
32585
32586
32587
32588
32589
32590
32591
32592
32593
32594
32595
32596
32597
32598
32599
32600
32601
32602
32603
32604
32605
32606
32607
32608
32609
32610
32611
32612
32613
32614
32615
32616
32617
32618
32619
32620
32621
32622
32623
32624
32625
32626
32627
32628
32629
32630
32631
32632
32633
32634
32635
32636
32637
32638
32639
32640
32641
32642
32643
32644
32645
32646
32647
32648
32649
32650
32651
32652
32653
32654
32655
32656
32657
32658
32659
32660
32661
32662
32663
32664
32665
32666
32667
32668
32669
32670
32671
32672
32673
32674
32675
32676
32677
32678
32679
32680
32681
32682
32683
32684
32685
32686
32687
32688
32689
32690
32691
32692
32693
32694
32695
32696
32697
32698
32699
32700
32701
32702
32703
32704
32705
32706
32707
32708
32709
32710
32711
32712
32713
32714
32715
32716
32717
32718
32719
32720
32721
32722
32723
32724
32725
32726
32727
32728
32729
32730
32731
32732
32733
32734
32735
32736
32737
32738
32739
32740
32741
32742
32743
32744
32745
32746
32747
32748
32749
32750
32751
32752
32753
32754
32755
32756
32757
32758
32759
32760
32761
32762
32763
32764
32765
32766
32767
32768
32769
32770
32771
32772
32773
32774
32775
32776
32777
32778
32779
32780
32781
32782
32783
32784
32785
32786
32787
32788
32789
32790
32791
32792
32793
32794
32795
32796
32797
32798
32799
32800
32801
32802
32803
32804
32805
32806
32807
32808
32809
32810
32811
32812
32813
32814
32815
32816
32817
32818
32819
32820
32821
32822
32823
32824
32825
32826
32827
32828
32829
32830
32831
32832
32833
32834
32835
32836
32837
32838
32839
32840
32841
32842
32843
32844
32845
32846
32847
32848
32849
32850
32851
32852
32853
32854
32855
32856
32857
32858
32859
32860
32861
32862
32863
32864
32865
32866
32867
32868
32869
32870
32871
32872
32873
32874
32875
32876
32877
32878
32879
32880
32881
32882
32883
32884
32885
32886
32887
32888
32889
32890
32891
32892
32893
32894
32895
32896
32897
32898
32899
32900
32901
32902
32903
32904
32905
32906
32907
32908
32909
32910
32911
32912
32913
32914
32915
32916
32917
32918
32919
32920
32921
32922
32923
32924
32925
32926
32927
32928
32929
32930
32931
32932
32933
32934
32935
32936
32937
32938
32939
32940
32941
32942
32943
32944
32945
32946
32947
32948
32949
32950
32951
32952
32953
32954
32955
32956
32957
32958
32959
32960
32961
32962
32963
32964
32965
32966
32967
32968
32969
32970
32971
32972
32973
32974
32975
32976
32977
32978
32979
32980
32981
32982
32983
32984
32985
32986
32987
32988
32989
32990
32991
32992
32993
32994
32995
32996
32997
32998
32999
33000
33001
33002
33003
33004
33005
33006
33007
33008
33009
33010
33011
33012
33013
33014
33015
33016
33017
33018
33019
33020
33021
33022
33023
33024
33025
33026
33027
33028
33029
33030
33031
33032
33033
33034
33035
33036
33037
33038
33039
33040
33041
33042
33043
33044
33045
33046
33047
33048
33049
33050
33051
33052
33053
33054
33055
33056
33057
33058
33059
33060
33061
33062
33063
33064
33065
33066
33067
33068
33069
33070
33071
33072
33073
33074
33075
33076
33077
33078
33079
33080
33081
33082
33083
33084
33085
33086
33087
33088
33089
33090
33091
33092
33093
33094
33095
33096
33097
33098
33099
33100
33101
33102
33103
33104
33105
33106
33107
33108
33109
33110
33111
33112
33113
33114
33115
33116
33117
33118
33119
33120
33121
33122
33123
33124
33125
33126
33127
33128
33129
33130
33131
33132
33133
33134
33135
33136
33137
33138
33139
33140
33141
33142
33143
33144
33145
33146
33147
33148
33149
33150
33151
33152
33153
33154
33155
33156
33157
33158
33159
33160
33161
33162
33163
33164
33165
33166
33167
33168
33169
33170
33171
33172
33173
33174
33175
33176
33177
33178
33179
33180
33181
33182
33183
33184
33185
33186
33187
33188
33189
33190
33191
33192
33193
33194
33195
33196
33197
33198
33199
33200
33201
33202
33203
33204
33205
33206
33207
33208
33209
33210
33211
33212
33213
33214
33215
33216
33217
33218
33219
33220
33221
33222
33223
33224
33225
33226
33227
33228
33229
33230
33231
33232
33233
33234
33235
33236
33237
33238
33239
33240
33241
33242
33243
33244
33245
33246
33247
33248
33249
33250
33251
33252
33253
33254
33255
33256
33257
33258
33259
33260
33261
33262
33263
33264
33265
33266
33267
33268
33269
33270
33271
33272
33273
33274
33275
33276
33277
33278
33279
33280
33281
33282
33283
33284
33285
33286
33287
33288
33289
33290
33291
33292
33293
33294
33295
33296
33297
33298
33299
33300
33301
33302
33303
33304
33305
33306
33307
33308
33309
33310
33311
33312
33313
33314
33315
33316
33317
33318
33319
33320
33321
33322
33323
33324
33325
33326
33327
33328
33329
33330
33331
33332
33333
33334
33335
33336
33337
33338
33339
33340
33341
33342
33343
33344
33345
33346
33347
33348
33349
33350
33351
33352
33353
33354
33355
33356
33357
33358
33359
33360
33361
33362
33363
33364
33365
33366
33367
33368
33369
33370
33371
33372
33373
33374
33375
33376
33377
33378
33379
33380
33381
33382
33383
33384
33385
33386
33387
33388
33389
33390
33391
33392
33393
33394
33395
33396
33397
33398
33399
33400
33401
33402
33403
33404
33405
33406
33407
33408
33409
33410
33411
33412
33413
33414
33415
33416
33417
33418
33419
33420
33421
33422
33423
33424
33425
33426
33427
33428
33429
33430
33431
33432
33433
33434
33435
33436
33437
33438
33439
33440
33441
33442
33443
33444
33445
33446
33447
33448
33449
33450
33451
33452
33453
33454
33455
33456
33457
33458
33459
33460
33461
33462
33463
33464
33465
33466
33467
33468
33469
33470
33471
33472
33473
33474
33475
33476
33477
33478
33479
33480
33481
33482
33483
33484
33485
33486
33487
33488
33489
33490
33491
33492
33493
33494
33495
33496
33497
33498
33499
33500
33501
33502
33503
33504
33505
33506
33507
33508
33509
33510
33511
33512
33513
33514
33515
33516
33517
33518
33519
33520
33521
33522
33523
33524
33525
33526
33527
33528
33529
33530
33531
33532
33533
33534
33535
33536
33537
33538
33539
33540
33541
33542
33543
33544
33545
33546
33547
33548
33549
33550
33551
33552
33553
33554
33555
33556
33557
33558
33559
33560
33561
33562
33563
33564
33565
33566
33567
33568
33569
33570
33571
33572
33573
33574
33575
33576
33577
33578
33579
33580
33581
33582
33583
33584
33585
33586
33587
33588
33589
33590
33591
33592
33593
33594
33595
33596
33597
33598
33599
33600
33601
33602
33603
33604
33605
33606
33607
33608
33609
33610
33611
33612
33613
33614
33615
33616
33617
33618
33619
33620
33621
33622
33623
33624
33625
33626
33627
33628
33629
33630
33631
33632
33633
33634
33635
33636
33637
33638
33639
33640
33641
33642
33643
33644
33645
33646
33647
33648
33649
33650
33651
33652
33653
33654
33655
33656
33657
33658
33659
33660
33661
33662
33663
33664
33665
33666
33667
33668
33669
33670
33671
33672
33673
33674
33675
33676
33677
33678
33679
33680
33681
33682
33683
33684
33685
33686
33687
33688
33689
33690
33691
33692
33693
33694
33695
33696
33697
33698
33699
33700
33701
33702
33703
33704
33705
33706
33707
33708
33709
33710
33711
33712
33713
33714
33715
33716
33717
33718
33719
33720
33721
33722
33723
33724
33725
33726
33727
33728
33729
33730
33731
33732
33733
33734
33735
33736
33737
33738
33739
33740
33741
33742
33743
33744
33745
33746
33747
33748
33749
33750
33751
33752
33753
33754
33755
33756
33757
33758
33759
33760
33761
33762
33763
33764
33765
33766
33767
33768
33769
33770
33771
33772
33773
33774
33775
33776
33777
33778
33779
33780
33781
33782
33783
33784
33785
33786
33787
33788
33789
33790
33791
33792
33793
33794
33795
33796
33797
33798
33799
33800
33801
33802
33803
33804
33805
33806
33807
33808
33809
33810
33811
33812
33813
33814
33815
33816
33817
33818
33819
33820
33821
33822
33823
33824
33825
33826
33827
33828
33829
33830
33831
33832
33833
33834
33835
33836
33837
33838
33839
33840
33841
33842
33843
33844
33845
33846
33847
33848
33849
33850
33851
33852
33853
33854
33855
33856
33857
33858
33859
33860
33861
33862
33863
33864
33865
33866
33867
33868
33869
33870
33871
33872
33873
33874
33875
33876
33877
33878
33879
33880
33881
33882
33883
33884
33885
33886
33887
33888
33889
33890
33891
33892
33893
33894
33895
33896
33897
33898
33899
33900
33901
33902
33903
33904
33905
33906
33907
33908
33909
33910
33911
33912
33913
33914
33915
33916
33917
33918
33919
33920
33921
33922
33923
33924
33925
33926
33927
33928
33929
33930
33931
33932
33933
33934
33935
33936
33937
33938
33939
33940
33941
33942
33943
33944
33945
33946
33947
33948
33949
33950
33951
33952
33953
33954
33955
33956
33957
33958
33959
33960
33961
33962
33963
33964
33965
33966
33967
33968
33969
33970
33971
33972
33973
33974
33975
33976
33977
33978
33979
33980
33981
33982
33983
33984
33985
33986
33987
33988
33989
33990
33991
33992
33993
33994
33995
33996
33997
33998
33999
34000
34001
34002
34003
34004
34005
34006
34007
34008
34009
34010
34011
34012
34013
34014
34015
34016
34017
34018
34019
34020
34021
34022
34023
34024
34025
34026
34027
34028
34029
34030
34031
34032
34033
34034
34035
34036
34037
34038
34039
34040
34041
34042
34043
34044
34045
34046
34047
34048
34049
34050
34051
34052
34053
34054
34055
34056
34057
34058
34059
34060
34061
34062
34063
34064
34065
34066
34067
34068
34069
34070
34071
34072
34073
34074
34075
34076
34077
34078
34079
34080
34081
34082
34083
34084
34085
34086
34087
34088
34089
34090
34091
34092
34093
34094
34095
34096
34097
34098
34099
34100
34101
34102
34103
34104
34105
34106
34107
34108
34109
34110
34111
34112
34113
34114
34115
34116
34117
34118
34119
34120
34121
34122
34123
34124
34125
34126
34127
34128
34129
34130
34131
34132
34133
34134
34135
34136
34137
34138
34139
34140
34141
34142
34143
34144
34145
34146
34147
34148
34149
34150
34151
34152
34153
34154
34155
34156
34157
34158
34159
34160
34161
34162
34163
34164
34165
34166
34167
34168
34169
34170
34171
34172
34173
34174
34175
34176
34177
34178
34179
34180
34181
34182
34183
34184
34185
34186
34187
34188
34189
34190
34191
34192
34193
34194
34195
34196
34197
34198
34199
34200
34201
34202
34203
34204
34205
34206
34207
34208
34209
34210
34211
34212
34213
34214
34215
34216
34217
34218
34219
34220
34221
34222
34223
34224
34225
34226
34227
34228
34229
34230
34231
34232
34233
34234
34235
34236
34237
34238
34239
34240
34241
34242
34243
34244
34245
34246
34247
34248
34249
34250
34251
34252
34253
34254
34255
34256
34257
34258
34259
34260
34261
34262
34263
34264
34265
34266
34267
34268
34269
34270
34271
34272
34273
34274
34275
34276
34277
34278
34279
34280
34281
34282
34283
34284
34285
34286
34287
34288
34289
34290
34291
34292
34293
34294
34295
34296
34297
34298
34299
34300
34301
34302
34303
34304
34305
34306
34307
34308
34309
34310
34311
34312
34313
34314
34315
34316
34317
34318
34319
34320
34321
34322
34323
34324
34325
34326
34327
34328
34329
34330
34331
34332
34333
34334
34335
34336
34337
34338
34339
34340
34341
34342
34343
34344
34345
34346
34347
34348
34349
34350
34351
34352
34353
34354
34355
34356
34357
34358
34359
34360
34361
34362
34363
34364
34365
34366
34367
34368
34369
34370
34371
34372
34373
34374
34375
34376
34377
34378
34379
34380
34381
34382
34383
34384
34385
34386
34387
34388
34389
34390
34391
34392
34393
34394
34395
34396
34397
34398
34399
34400
34401
34402
34403
34404
34405
34406
34407
34408
34409
34410
34411
34412
34413
34414
34415
34416
34417
34418
34419
34420
34421
34422
34423
34424
34425
34426
34427
34428
34429
34430
34431
34432
34433
34434
34435
34436
34437
34438
34439
34440
34441
34442
34443
34444
34445
34446
34447
34448
34449
34450
34451
34452
34453
34454
34455
34456
34457
34458
34459
34460
34461
34462
34463
34464
34465
34466
34467
34468
34469
34470
34471
34472
34473
34474
34475
34476
34477
34478
34479
34480
34481
34482
34483
34484
34485
34486
34487
34488
34489
34490
34491
34492
34493
34494
34495
34496
34497
34498
34499
34500
34501
34502
34503
34504
34505
34506
34507
34508
34509
34510
34511
34512
34513
34514
34515
34516
34517
34518
34519
34520
34521
34522
34523
34524
34525
34526
34527
34528
34529
34530
34531
34532
34533
34534
34535
34536
34537
34538
34539
34540
34541
34542
34543
34544
34545
34546
34547
34548
34549
34550
34551
34552
34553
34554
34555
34556
34557
34558
34559
34560
34561
34562
34563
34564
34565
34566
34567
34568
34569
34570
34571
34572
34573
34574
34575
34576
34577
34578
34579
34580
34581
34582
34583
34584
34585
34586
34587
34588
34589
34590
34591
34592
34593
34594
34595
34596
34597
34598
34599
34600
34601
34602
34603
34604
34605
34606
34607
34608
34609
34610
34611
34612
34613
34614
34615
34616
34617
34618
34619
34620
34621
34622
34623
34624
34625
34626
34627
34628
34629
34630
34631
34632
34633
34634
34635
34636
34637
34638
34639
34640
34641
34642
34643
34644
34645
34646
34647
34648
34649
34650
34651
34652
34653
34654
34655
34656
34657
34658
34659
34660
34661
34662
34663
34664
34665
34666
34667
34668
34669
34670
34671
34672
34673
34674
34675
34676
34677
34678
34679
34680
34681
34682
34683
34684
34685
34686
34687
34688
34689
34690
34691
34692
34693
34694
34695
34696
34697
34698
34699
34700
34701
34702
34703
34704
34705
34706
34707
34708
34709
34710
34711
34712
34713
34714
34715
34716
34717
34718
34719
34720
34721
34722
34723
34724
34725
34726
34727
34728
34729
34730
34731
34732
34733
34734
34735
34736
34737
34738
34739
34740
34741
34742
34743
34744
34745
34746
34747
34748
34749
34750
34751
34752
34753
34754
34755
34756
34757
34758
34759
34760
34761
34762
34763
34764
34765
34766
34767
34768
34769
34770
34771
34772
34773
34774
34775
34776
34777
34778
34779
34780
34781
34782
34783
34784
34785
34786
34787
34788
34789
34790
34791
34792
34793
34794
34795
34796
34797
34798
34799
34800
34801
34802
34803
34804
34805
34806
34807
34808
34809
34810
34811
34812
34813
34814
34815
34816
34817
34818
34819
34820
34821
34822
34823
34824
34825
34826
34827
34828
34829
34830
34831
34832
34833
34834
34835
34836
34837
34838
34839
34840
34841
34842
34843
34844
34845
34846
34847
34848
34849
34850
34851
34852
34853
34854
34855
34856
34857
34858
34859
34860
34861
34862
34863
34864
34865
34866
34867
34868
34869
34870
34871
34872
34873
34874
34875
34876
34877
34878
34879
34880
34881
34882
34883
34884
34885
34886
34887
34888
34889
34890
34891
34892
34893
34894
34895
34896
34897
34898
34899
34900
34901
34902
34903
34904
34905
34906
34907
34908
34909
34910
34911
34912
34913
34914
34915
34916
34917
34918
34919
34920
34921
34922
34923
34924
34925
34926
34927
34928
34929
34930
34931
34932
34933
34934
34935
34936
34937
34938
34939
34940
34941
34942
34943
34944
34945
34946
34947
34948
34949
34950
34951
34952
34953
34954
34955
34956
34957
34958
34959
34960
34961
34962
34963
34964
34965
34966
34967
34968
34969
34970
34971
34972
34973
34974
34975
34976
34977
34978
34979
34980
34981
34982
34983
34984
34985
34986
34987
34988
34989
34990
34991
34992
34993
34994
34995
34996
34997
34998
34999
35000
35001
35002
35003
35004
35005
35006
35007
35008
35009
35010
35011
35012
35013
35014
35015
35016
35017
35018
35019
35020
35021
35022
35023
35024
35025
35026
35027
35028
35029
35030
35031
35032
35033
35034
35035
35036
35037
35038
35039
35040
35041
35042
35043
35044
35045
35046
35047
35048
35049
35050
35051
35052
35053
35054
35055
35056
35057
35058
35059
35060
35061
35062
35063
35064
35065
35066
35067
35068
35069
35070
35071
35072
35073
35074
35075
35076
35077
35078
35079
35080
35081
35082
35083
35084
35085
35086
35087
35088
35089
35090
35091
35092
35093
35094
35095
35096
35097
35098
35099
35100
35101
35102
35103
35104
35105
35106
35107
35108
35109
35110
35111
35112
35113
35114
35115
35116
35117
35118
35119
35120
35121
35122
35123
35124
35125
35126
35127
35128
35129
35130
35131
35132
35133
35134
35135
35136
35137
35138
35139
35140
35141
35142
35143
35144
35145
35146
35147
35148
35149
35150
35151
35152
35153
35154
35155
35156
35157
35158
35159
35160
35161
35162
35163
35164
35165
35166
35167
35168
35169
35170
35171
35172
35173
35174
35175
35176
35177
35178
35179
35180
35181
35182
35183
35184
35185
35186
35187
35188
35189
35190
35191
35192
35193
35194
35195
35196
35197
35198
35199
35200
35201
35202
35203
35204
35205
35206
35207
35208
35209
35210
35211
35212
35213
35214
35215
35216
35217
35218
35219
35220
35221
35222
35223
35224
35225
35226
35227
35228
35229
35230
35231
35232
35233
35234
35235
35236
35237
35238
35239
35240
35241
35242
35243
35244
35245
35246
35247
35248
35249
35250
35251
35252
35253
35254
35255
35256
35257
35258
35259
35260
35261
35262
35263
35264
35265
35266
35267
35268
35269
35270
35271
35272
35273
35274
35275
35276
35277
35278
35279
35280
35281
35282
35283
35284
35285
35286
35287
35288
35289
35290
35291
35292
35293
35294
35295
35296
35297
35298
35299
35300
35301
35302
35303
35304
35305
35306
35307
35308
35309
35310
35311
35312
35313
35314
35315
35316
35317
35318
35319
35320
35321
35322
35323
35324
35325
35326
35327
35328
35329
35330
35331
35332
35333
35334
35335
35336
35337
35338
35339
35340
35341
35342
35343
35344
35345
35346
35347
35348
35349
35350
35351
35352
35353
35354
35355
35356
35357
35358
35359
35360
35361
35362
35363
35364
35365
35366
35367
35368
35369
35370
35371
35372
35373
35374
35375
35376
35377
35378
35379
35380
35381
35382
35383
35384
35385
35386
35387
35388
35389
35390
35391
35392
35393
35394
35395
35396
35397
35398
35399
35400
35401
35402
35403
35404
35405
35406
35407
35408
35409
35410
35411
35412
35413
35414
35415
35416
35417
35418
35419
35420
35421
35422
35423
35424
35425
35426
35427
35428
35429
35430
35431
35432
35433
35434
35435
35436
35437
35438
35439
35440
35441
35442
35443
35444
35445
35446
35447
35448
35449
35450
35451
35452
35453
35454
35455
35456
35457
35458
35459
35460
35461
35462
35463
35464
35465
35466
35467
35468
35469
35470
35471
35472
35473
35474
35475
35476
35477
35478
35479
35480
35481
35482
35483
35484
35485
35486
35487
35488
35489
35490
35491
35492
35493
35494
35495
35496
35497
35498
35499
35500
35501
35502
35503
35504
35505
35506
35507
35508
35509
35510
35511
35512
35513
35514
35515
35516
35517
35518
35519
35520
35521
35522
35523
35524
35525
35526
35527
35528
35529
35530
35531
35532
35533
35534
35535
35536
35537
35538
35539
35540
35541
35542
35543
35544
35545
35546
35547
35548
35549
35550
35551
35552
35553
35554
35555
35556
35557
35558
35559
35560
35561
35562
35563
35564
35565
35566
35567
35568
35569
35570
35571
35572
35573
35574
35575
35576
35577
35578
35579
35580
35581
35582
35583
35584
35585
35586
35587
35588
35589
35590
35591
35592
35593
35594
35595
35596
35597
35598
35599
35600
35601
35602
35603
35604
35605
35606
35607
35608
35609
35610
35611
35612
35613
35614
35615
35616
35617
35618
35619
35620
35621
35622
35623
35624
35625
35626
35627
35628
35629
35630
35631
35632
35633
35634
35635
35636
35637
35638
35639
35640
35641
35642
35643
35644
35645
35646
35647
35648
35649
35650
35651
35652
35653
35654
35655
35656
35657
35658
35659
35660
35661
35662
35663
35664
35665
35666
35667
35668
35669
35670
35671
35672
35673
35674
35675
35676
35677
35678
35679
35680
35681
35682
35683
35684
35685
35686
35687
35688
35689
35690
35691
35692
35693
35694
35695
35696
35697
35698
35699
35700
35701
35702
35703
35704
35705
35706
35707
35708
35709
35710
35711
35712
35713
35714
35715
35716
35717
35718
35719
35720
35721
35722
35723
35724
35725
35726
35727
35728
35729
35730
35731
35732
35733
35734
35735
35736
35737
35738
35739
35740
35741
35742
35743
35744
35745
35746
35747
35748
35749
35750
35751
35752
35753
35754
35755
35756
35757
35758
35759
35760
35761
35762
35763
35764
35765
35766
35767
35768
35769
35770
35771
35772
35773
35774
35775
35776
35777
35778
35779
35780
35781
35782
35783
35784
35785
35786
35787
35788
35789
35790
35791
35792
35793
35794
35795
35796
35797
35798
35799
35800
35801
35802
35803
35804
35805
35806
35807
35808
35809
35810
35811
35812
35813
35814
35815
35816
35817
35818
35819
35820
35821
35822
35823
35824
35825
35826
35827
35828
35829
35830
35831
35832
35833
35834
35835
35836
35837
35838
35839
35840
35841
35842
35843
35844
35845
35846
35847
35848
35849
35850
35851
35852
35853
35854
35855
35856
35857
35858
35859
35860
35861
35862
35863
35864
35865
35866
35867
35868
35869
35870
35871
35872
35873
35874
35875
35876
35877
35878
35879
35880
35881
35882
35883
35884
35885
35886
35887
35888
35889
35890
35891
35892
35893
35894
35895
35896
35897
35898
35899
35900
35901
35902
35903
35904
35905
35906
35907
35908
35909
35910
35911
35912
35913
35914
35915
35916
35917
35918
35919
35920
35921
35922
35923
35924
35925
35926
35927
35928
35929
35930
35931
35932
35933
35934
35935
35936
35937
35938
35939
35940
35941
35942
35943
35944
35945
35946
35947
35948
35949
35950
35951
35952
35953
35954
35955
35956
35957
35958
35959
35960
35961
35962
35963
35964
35965
35966
35967
35968
35969
35970
35971
35972
35973
35974
35975
35976
35977
35978
35979
35980
35981
35982
35983
35984
35985
35986
35987
35988
35989
35990
35991
35992
35993
35994
35995
35996
35997
35998
35999
36000
36001
36002
36003
36004
36005
36006
36007
36008
36009
36010
36011
36012
36013
36014
36015
36016
36017
36018
36019
36020
36021
36022
36023
36024
36025
36026
36027
36028
36029
36030
36031
36032
36033
36034
36035
36036
36037
36038
36039
36040
36041
36042
36043
36044
36045
36046
36047
36048
36049
36050
36051
36052
36053
36054
36055
36056
36057
36058
36059
36060
36061
36062
36063
36064
36065
36066
36067
36068
36069
36070
36071
36072
36073
36074
36075
36076
36077
36078
36079
36080
36081
36082
36083
36084
36085
36086
36087
36088
36089
36090
36091
36092
36093
36094
36095
36096
36097
36098
36099
36100
36101
36102
36103
36104
36105
36106
36107
36108
36109
36110
36111
36112
36113
36114
36115
36116
36117
36118
36119
36120
36121
36122
36123
36124
36125
36126
36127
36128
36129
36130
36131
36132
36133
36134
36135
36136
36137
36138
36139
36140
36141
36142
36143
36144
36145
36146
36147
36148
36149
36150
36151
36152
36153
36154
36155
36156
36157
36158
36159
36160
36161
36162
36163
36164
36165
36166
36167
36168
36169
36170
36171
36172
36173
36174
36175
36176
36177
36178
36179
36180
36181
36182
36183
36184
36185
36186
36187
36188
36189
36190
36191
36192
36193
36194
36195
36196
36197
36198
36199
36200
36201
36202
36203
36204
36205
36206
36207
36208
36209
36210
36211
36212
36213
36214
36215
36216
36217
36218
36219
36220
36221
36222
36223
36224
36225
36226
36227
36228
36229
36230
36231
36232
36233
36234
36235
36236
36237
36238
36239
36240
36241
36242
36243
36244
36245
36246
36247
36248
36249
36250
36251
36252
36253
36254
36255
36256
36257
36258
36259
36260
36261
36262
36263
36264
36265
36266
36267
36268
36269
36270
36271
36272
36273
36274
36275
36276
36277
36278
36279
36280
36281
36282
36283
36284
36285
36286
36287
36288
36289
36290
36291
36292
36293
36294
36295
36296
36297
36298
36299
36300
36301
36302
36303
36304
36305
36306
36307
36308
36309
36310
36311
36312
36313
36314
36315
36316
36317
36318
36319
36320
36321
36322
36323
36324
36325
36326
36327
36328
36329
36330
36331
36332
36333
36334
36335
36336
36337
36338
36339
36340
36341
36342
36343
36344
36345
36346
36347
36348
36349
36350
36351
36352
36353
36354
36355
36356
36357
36358
36359
36360
36361
36362
36363
36364
36365
36366
36367
36368
36369
36370
36371
36372
36373
36374
36375
36376
36377
36378
36379
36380
36381
36382
36383
36384
36385
36386
36387
36388
36389
36390
36391
36392
36393
36394
36395
36396
36397
36398
36399
36400
36401
36402
36403
36404
36405
36406
36407
36408
36409
36410
36411
36412
36413
36414
36415
36416
36417
36418
36419
36420
36421
36422
36423
36424
36425
36426
36427
36428
36429
36430
36431
36432
36433
36434
36435
36436
36437
36438
36439
36440
36441
36442
36443
36444
36445
36446
36447
36448
36449
36450
36451
36452
36453
36454
36455
36456
36457
36458
36459
36460
36461
36462
36463
36464
36465
36466
36467
36468
36469
36470
36471
36472
36473
36474
36475
36476
36477
36478
36479
36480
36481
36482
36483
36484
36485
36486
36487
36488
36489
36490
36491
36492
36493
36494
36495
36496
36497
36498
36499
36500
36501
36502
36503
36504
36505
36506
36507
36508
36509
36510
36511
36512
36513
36514
36515
36516
36517
36518
36519
36520
36521
36522
36523
36524
36525
36526
36527
36528
36529
36530
36531
36532
36533
36534
36535
36536
36537
36538
36539
36540
36541
36542
36543
36544
36545
36546
36547
36548
36549
36550
36551
36552
36553
36554
36555
36556
36557
36558
36559
36560
36561
36562
36563
36564
36565
36566
36567
36568
36569
36570
36571
36572
36573
36574
36575
36576
36577
36578
36579
36580
36581
36582
36583
36584
36585
36586
36587
36588
36589
36590
36591
36592
36593
36594
36595
36596
36597
36598
36599
36600
36601
36602
36603
36604
36605
36606
36607
36608
36609
36610
36611
36612
36613
36614
36615
36616
36617
36618
36619
36620
36621
36622
36623
36624
36625
36626
36627
36628
36629
36630
36631
36632
36633
36634
36635
36636
36637
36638
36639
36640
36641
36642
36643
36644
36645
36646
36647
36648
36649
36650
36651
36652
36653
36654
36655
36656
36657
36658
36659
36660
36661
36662
36663
36664
36665
36666
36667
36668
36669
36670
36671
36672
36673
36674
36675
36676
36677
36678
36679
36680
36681
36682
36683
36684
36685
36686
36687
36688
36689
36690
36691
36692
36693
36694
36695
36696
36697
36698
36699
36700
36701
36702
36703
36704
36705
36706
36707
36708
36709
36710
36711
36712
36713
36714
36715
36716
36717
36718
36719
36720
36721
36722
36723
36724
36725
36726
36727
36728
36729
36730
36731
36732
36733
36734
36735
36736
36737
36738
36739
36740
36741
36742
36743
36744
36745
36746
36747
36748
36749
36750
36751
36752
36753
36754
36755
36756
36757
36758
36759
36760
36761
36762
36763
36764
36765
36766
36767
36768
36769
36770
36771
36772
36773
36774
36775
36776
36777
36778
36779
36780
36781
36782
36783
36784
36785
36786
36787
36788
36789
36790
36791
36792
36793
36794
36795
36796
36797
36798
36799
36800
36801
36802
36803
36804
36805
36806
36807
36808
36809
36810
36811
36812
36813
36814
36815
36816
36817
36818
36819
36820
36821
36822
36823
36824
36825
36826
36827
36828
36829
36830
36831
36832
36833
36834
36835
36836
36837
36838
36839
36840
36841
36842
36843
36844
36845
36846
36847
36848
36849
36850
36851
36852
36853
36854
36855
36856
36857
36858
36859
36860
36861
36862
36863
36864
36865
36866
36867
36868
36869
36870
36871
36872
36873
36874
36875
36876
36877
36878
36879
36880
36881
36882
36883
36884
36885
36886
36887
36888
36889
36890
36891
36892
36893
36894
36895
36896
36897
36898
36899
36900
36901
36902
36903
36904
36905
36906
36907
36908
36909
36910
36911
36912
36913
36914
36915
36916
36917
36918
36919
36920
36921
36922
36923
36924
36925
36926
36927
36928
36929
36930
36931
36932
36933
36934
36935
36936
36937
36938
36939
36940
36941
36942
36943
36944
36945
36946
36947
36948
36949
36950
36951
36952
36953
36954
36955
36956
36957
36958
36959
36960
36961
36962
36963
36964
36965
36966
36967
36968
36969
36970
36971
36972
36973
36974
36975
36976
36977
36978
36979
36980
36981
36982
36983
36984
36985
36986
36987
36988
36989
36990
36991
36992
36993
36994
36995
36996
36997
36998
36999
37000
37001
37002
37003
37004
37005
37006
37007
37008
37009
37010
37011
37012
37013
37014
37015
37016
37017
37018
37019
37020
37021
37022
37023
37024
37025
37026
37027
37028
37029
37030
37031
37032
37033
37034
37035
37036
37037
37038
37039
37040
37041
37042
37043
37044
37045
37046
37047
37048
37049
37050
37051
37052
37053
37054
37055
37056
37057
37058
37059
37060
37061
37062
37063
37064
37065
37066
37067
37068
37069
37070
37071
37072
37073
37074
37075
37076
37077
37078
37079
37080
37081
37082
37083
37084
37085
37086
37087
37088
37089
37090
37091
37092
37093
37094
37095
37096
37097
37098
37099
37100
37101
37102
37103
37104
37105
37106
37107
37108
37109
37110
37111
37112
37113
37114
37115
37116
37117
37118
37119
37120
37121
37122
37123
37124
37125
37126
37127
37128
37129
37130
37131
37132
37133
37134
37135
37136
37137
37138
37139
37140
37141
37142
37143
37144
37145
37146
37147
37148
37149
37150
37151
37152
37153
37154
37155
37156
37157
37158
37159
37160
37161
37162
37163
37164
37165
37166
37167
37168
37169
37170
37171
37172
37173
37174
37175
37176
37177
37178
37179
37180
37181
37182
37183
37184
37185
37186
37187
37188
37189
37190
37191
37192
37193
37194
37195
37196
37197
37198
37199
37200
37201
37202
37203
37204
37205
37206
37207
37208
37209
37210
37211
37212
37213
37214
37215
37216
37217
37218
37219
37220
37221
37222
37223
37224
37225
37226
37227
37228
37229
37230
37231
37232
37233
37234
37235
37236
37237
37238
37239
37240
37241
37242
37243
37244
37245
37246
37247
37248
37249
37250
37251
37252
37253
37254
37255
37256
37257
37258
37259
37260
37261
37262
37263
37264
37265
37266
37267
37268
37269
37270
37271
37272
37273
37274
37275
37276
37277
37278
37279
37280
37281
37282
37283
37284
37285
37286
37287
37288
37289
37290
37291
37292
37293
37294
37295
37296
37297
37298
37299
37300
37301
37302
37303
37304
37305
37306
37307
37308
37309
37310
37311
37312
37313
37314
37315
37316
37317
37318
37319
37320
37321
37322
37323
37324
37325
37326
37327
37328
37329
37330
37331
37332
37333
37334
37335
37336
37337
37338
37339
37340
37341
37342
37343
37344
37345
37346
37347
37348
37349
37350
37351
37352
37353
37354
37355
37356
37357
37358
37359
37360
37361
37362
37363
37364
37365
37366
37367
37368
37369
37370
37371
37372
37373
37374
37375
37376
37377
37378
37379
37380
37381
37382
37383
37384
37385
37386
37387
37388
37389
37390
37391
37392
37393
37394
37395
37396
37397
37398
37399
37400
37401
37402
37403
37404
37405
37406
37407
37408
37409
37410
37411
37412
37413
37414
37415
37416
37417
37418
37419
37420
37421
37422
37423
37424
37425
37426
37427
37428
37429
37430
37431
37432
37433
37434
37435
37436
37437
37438
37439
37440
37441
37442
37443
37444
37445
37446
37447
37448
37449
37450
37451
37452
37453
37454
37455
37456
37457
37458
37459
37460
37461
37462
37463
37464
37465
37466
37467
37468
37469
37470
37471
37472
37473
37474
37475
37476
37477
37478
37479
37480
37481
37482
37483
37484
37485
37486
37487
37488
37489
37490
37491
37492
37493
37494
37495
37496
37497
37498
37499
37500
37501
37502
37503
37504
37505
37506
37507
37508
37509
37510
37511
37512
37513
37514
37515
37516
37517
37518
37519
37520
37521
37522
37523
37524
37525
37526
37527
37528
37529
37530
37531
37532
37533
37534
37535
37536
37537
37538
37539
37540
37541
37542
37543
37544
37545
37546
37547
37548
37549
37550
37551
37552
37553
37554
37555
37556
37557
37558
37559
37560
37561
37562
37563
37564
37565
37566
37567
37568
37569
37570
37571
37572
37573
37574
37575
37576
37577
37578
37579
37580
37581
37582
37583
37584
37585
37586
37587
37588
37589
37590
37591
37592
37593
37594
37595
37596
37597
37598
37599
37600
37601
37602
37603
37604
37605
37606
37607
37608
37609
37610
37611
37612
37613
37614
37615
37616
37617
37618
37619
37620
37621
37622
37623
37624
37625
37626
37627
37628
37629
37630
37631
37632
37633
37634
37635
37636
37637
37638
37639
37640
37641
37642
37643
37644
37645
37646
37647
37648
37649
37650
37651
37652
37653
37654
37655
37656
37657
37658
37659
37660
37661
37662
37663
37664
37665
37666
37667
37668
37669
37670
37671
37672
37673
37674
37675
37676
37677
37678
37679
37680
37681
37682
37683
37684
37685
37686
37687
37688
37689
37690
37691
37692
37693
37694
37695
37696
37697
37698
37699
37700
37701
37702
37703
37704
37705
37706
37707
37708
37709
37710
37711
37712
37713
37714
37715
37716
37717
37718
37719
37720
37721
37722
37723
37724
37725
37726
37727
37728
37729
37730
37731
37732
37733
37734
37735
37736
37737
37738
37739
37740
37741
37742
37743
37744
37745
37746
37747
37748
37749
37750
37751
37752
37753
37754
37755
37756
37757
37758
37759
37760
37761
37762
37763
37764
37765
37766
37767
37768
37769
37770
37771
37772
37773
37774
37775
37776
37777
37778
37779
37780
37781
37782
37783
37784
37785
37786
37787
37788
37789
37790
37791
37792
37793
37794
37795
37796
37797
37798
37799
37800
37801
37802
37803
37804
37805
37806
37807
37808
37809
37810
37811
37812
37813
37814
37815
37816
37817
37818
37819
37820
37821
37822
37823
37824
37825
37826
37827
37828
37829
37830
37831
37832
37833
37834
37835
37836
37837
37838
37839
37840
37841
37842
37843
37844
37845
37846
37847
37848
37849
37850
37851
37852
37853
37854
37855
37856
37857
37858
37859
37860
37861
37862
37863
37864
37865
37866
37867
37868
37869
37870
37871
37872
37873
37874
37875
37876
37877
37878
37879
37880
37881
37882
37883
37884
37885
37886
37887
37888
37889
37890
37891
37892
37893
37894
37895
37896
37897
37898
37899
37900
37901
37902
37903
37904
37905
37906
37907
37908
37909
37910
37911
37912
37913
37914
37915
37916
37917
37918
37919
37920
37921
37922
37923
37924
37925
37926
37927
37928
37929
37930
37931
37932
37933
37934
37935
37936
37937
37938
37939
37940
37941
37942
37943
37944
37945
37946
37947
37948
37949
37950
37951
37952
37953
37954
37955
37956
37957
37958
37959
37960
37961
37962
37963
37964
37965
37966
37967
37968
37969
37970
37971
37972
37973
37974
37975
37976
37977
37978
37979
37980
37981
37982
37983
37984
37985
37986
37987
37988
37989
37990
37991
37992
37993
37994
37995
37996
37997
37998
37999
38000
38001
38002
38003
38004
38005
38006
38007
38008
38009
38010
38011
38012
38013
38014
38015
38016
38017
38018
38019
38020
38021
38022
38023
38024
38025
38026
38027
38028
38029
38030
38031
38032
38033
38034
38035
38036
38037
38038
38039
38040
38041
38042
38043
38044
38045
38046
38047
38048
38049
38050
38051
38052
38053
38054
38055
38056
38057
38058
38059
38060
38061
38062
38063
38064
38065
38066
38067
38068
38069
38070
38071
38072
38073
38074
38075
38076
38077
38078
38079
38080
38081
38082
38083
38084
38085
38086
38087
38088
38089
38090
38091
38092
38093
38094
38095
38096
38097
38098
38099
38100
38101
38102
38103
38104
38105
38106
38107
38108
38109
38110
38111
38112
38113
38114
38115
38116
38117
38118
38119
38120
38121
38122
38123
38124
38125
38126
38127
38128
38129
38130
38131
38132
38133
38134
38135
38136
38137
38138
38139
38140
38141
38142
38143
38144
38145
38146
38147
38148
38149
38150
38151
38152
38153
38154
38155
38156
38157
38158
38159
38160
38161
38162
38163
38164
38165
38166
38167
38168
38169
38170
38171
38172
38173
38174
38175
38176
38177
38178
38179
38180
38181
38182
38183
38184
38185
38186
38187
38188
38189
38190
38191
38192
38193
38194
38195
38196
38197
38198
38199
38200
38201
38202
38203
38204
38205
38206
38207
38208
38209
38210
38211
38212
38213
38214
38215
38216
38217
38218
38219
38220
38221
38222
38223
38224
38225
38226
38227
38228
38229
38230
38231
38232
38233
38234
38235
38236
38237
38238
38239
38240
38241
38242
38243
38244
38245
38246
38247
38248
38249
38250
38251
38252
38253
38254
38255
38256
38257
38258
38259
38260
38261
38262
38263
38264
38265
38266
38267
38268
38269
38270
38271
38272
38273
38274
38275
38276
38277
38278
38279
38280
38281
38282
38283
38284
38285
38286
38287
38288
38289
38290
38291
38292
38293
38294
38295
38296
38297
38298
38299
38300
38301
38302
38303
38304
38305
38306
38307
38308
38309
38310
38311
38312
38313
38314
38315
38316
38317
38318
38319
38320
38321
38322
38323
38324
38325
38326
38327
38328
38329
38330
38331
38332
38333
38334
38335
38336
38337
38338
38339
38340
38341
38342
38343
38344
38345
38346
38347
38348
38349
38350
38351
38352
38353
38354
38355
38356
38357
38358
38359
38360
38361
38362
38363
38364
38365
38366
38367
38368
38369
38370
38371
38372
38373
38374
38375
38376
38377
38378
38379
38380
38381
38382
38383
38384
38385
38386
38387
38388
38389
38390
38391
38392
38393
38394
38395
38396
38397
38398
38399
38400
38401
38402
38403
38404
38405
38406
38407
38408
38409
38410
38411
38412
38413
38414
38415
38416
38417
38418
38419
38420
38421
38422
38423
38424
38425
38426
38427
38428
38429
38430
38431
38432
38433
38434
38435
38436
38437
38438
38439
38440
38441
38442
38443
38444
38445
38446
38447
38448
38449
38450
38451
38452
38453
38454
38455
38456
38457
38458
38459
38460
38461
38462
38463
38464
38465
38466
38467
38468
38469
38470
38471
38472
38473
38474
38475
38476
38477
38478
38479
38480
38481
38482
38483
38484
38485
38486
38487
38488
38489
38490
38491
38492
38493
38494
38495
38496
38497
38498
38499
38500
38501
38502
38503
38504
38505
38506
38507
38508
38509
38510
38511
38512
38513
38514
38515
38516
38517
38518
38519
38520
38521
38522
38523
38524
38525
38526
38527
38528
38529
38530
38531
38532
38533
38534
38535
38536
38537
38538
38539
38540
38541
38542
38543
38544
38545
38546
38547
38548
38549
38550
38551
38552
38553
38554
38555
38556
38557
38558
38559
38560
38561
38562
38563
38564
38565
38566
38567
38568
38569
38570
38571
38572
38573
38574
38575
38576
38577
38578
38579
38580
38581
38582
38583
38584
38585
38586
38587
38588
38589
38590
38591
38592
38593
38594
38595
38596
38597
38598
38599
38600
38601
38602
38603
38604
38605
38606
38607
38608
38609
38610
38611
38612
38613
38614
38615
38616
38617
38618
38619
38620
38621
38622
38623
38624
38625
38626
38627
38628
38629
38630
38631
38632
38633
38634
38635
38636
38637
38638
38639
38640
38641
38642
38643
38644
38645
38646
38647
38648
38649
38650
38651
38652
38653
38654
38655
38656
38657
38658
38659
38660
38661
38662
38663
38664
38665
38666
38667
38668
38669
38670
38671
38672
38673
38674
38675
38676
38677
38678
38679
38680
38681
38682
38683
38684
38685
38686
38687
38688
38689
38690
38691
38692
38693
38694
38695
38696
38697
38698
38699
38700
38701
38702
38703
38704
38705
38706
38707
38708
38709
38710
38711
38712
38713
38714
38715
38716
38717
38718
38719
38720
38721
38722
38723
38724
38725
38726
38727
38728
38729
38730
38731
38732
38733
38734
38735
38736
38737
38738
38739
38740
38741
38742
38743
38744
38745
38746
38747
38748
38749
38750
38751
38752
38753
38754
38755
38756
38757
38758
38759
38760
38761
38762
38763
38764
38765
38766
38767
38768
38769
38770
38771
38772
38773
38774
38775
38776
38777
38778
38779
38780
38781
38782
38783
38784
38785
38786
38787
38788
38789
38790
38791
38792
38793
38794
38795
38796
38797
38798
38799
38800
38801
38802
38803
38804
38805
38806
38807
38808
38809
38810
38811
38812
38813
38814
38815
38816
38817
38818
38819
38820
38821
38822
38823
38824
38825
38826
38827
38828
38829
38830
38831
38832
38833
38834
38835
38836
38837
38838
38839
38840
38841
38842
38843
38844
38845
38846
38847
38848
38849
38850
38851
38852
38853
38854
38855
38856
38857
38858
38859
38860
38861
38862
38863
38864
38865
38866
38867
38868
38869
38870
38871
38872
38873
38874
38875
38876
38877
38878
38879
38880
38881
38882
38883
38884
38885
38886
38887
38888
38889
38890
38891
38892
38893
38894
38895
38896
38897
38898
38899
38900
38901
38902
38903
38904
38905
38906
38907
38908
38909
38910
38911
38912
38913
38914
38915
38916
38917
38918
38919
38920
38921
38922
38923
38924
38925
38926
38927
38928
38929
38930
38931
38932
38933
38934
38935
38936
38937
38938
38939
38940
38941
38942
38943
38944
38945
38946
38947
38948
38949
38950
38951
38952
38953
38954
38955
38956
38957
38958
38959
38960
38961
38962
38963
38964
38965
38966
38967
38968
38969
38970
38971
38972
38973
38974
38975
38976
38977
38978
38979
38980
38981
38982
38983
38984
38985
38986
38987
38988
38989
38990
38991
38992
38993
38994
38995
38996
38997
38998
38999
39000
39001
39002
39003
39004
39005
39006
39007
39008
39009
39010
39011
39012
39013
39014
39015
39016
39017
39018
39019
39020
39021
39022
39023
39024
39025
39026
39027
39028
39029
39030
39031
39032
39033
39034
39035
39036
39037
39038
39039
39040
39041
39042
39043
39044
39045
39046
39047
39048
39049
39050
39051
39052
39053
39054
39055
39056
39057
39058
39059
39060
39061
39062
39063
39064
39065
39066
39067
39068
39069
39070
39071
39072
39073
39074
39075
39076
39077
39078
39079
39080
39081
39082
39083
39084
39085
39086
39087
39088
39089
39090
39091
39092
39093
39094
39095
39096
39097
39098
39099
39100
39101
39102
39103
39104
39105
39106
39107
39108
39109
39110
39111
39112
39113
39114
39115
39116
39117
39118
39119
39120
39121
39122
39123
39124
39125
39126
39127
39128
39129
39130
39131
39132
39133
39134
39135
39136
39137
39138
39139
39140
39141
39142
39143
39144
39145
39146
39147
39148
39149
39150
39151
39152
39153
39154
39155
39156
39157
39158
39159
39160
39161
39162
39163
39164
39165
39166
39167
39168
39169
39170
39171
39172
39173
39174
39175
39176
39177
39178
39179
39180
39181
39182
39183
39184
39185
39186
39187
39188
39189
39190
39191
39192
39193
39194
39195
39196
39197
39198
39199
39200
39201
39202
39203
39204
39205
39206
39207
39208
39209
39210
39211
39212
39213
39214
39215
39216
39217
39218
39219
39220
39221
39222
39223
39224
39225
39226
39227
39228
39229
39230
39231
39232
39233
39234
39235
39236
39237
39238
39239
39240
39241
39242
39243
39244
39245
39246
39247
39248
39249
39250
39251
39252
39253
39254
39255
39256
39257
39258
39259
39260
39261
39262
39263
39264
39265
39266
39267
39268
39269
39270
39271
39272
39273
39274
39275
39276
39277
39278
39279
39280
39281
39282
39283
39284
39285
39286
39287
39288
39289
39290
39291
39292
39293
39294
39295
39296
39297
39298
39299
39300
39301
39302
39303
39304
39305
39306
39307
39308
39309
39310
39311
39312
39313
39314
39315
39316
39317
39318
39319
39320
39321
39322
39323
39324
39325
39326
39327
39328
39329
39330
39331
39332
39333
39334
39335
39336
39337
39338
39339
39340
39341
39342
39343
39344
39345
39346
39347
39348
39349
39350
39351
39352
39353
39354
39355
39356
39357
39358
39359
39360
39361
39362
39363
39364
39365
39366
39367
39368
39369
39370
39371
39372
39373
39374
39375
39376
39377
39378
39379
39380
39381
39382
39383
39384
39385
39386
39387
39388
39389
39390
39391
39392
39393
39394
39395
39396
39397
39398
39399
39400
39401
39402
39403
39404
39405
39406
39407
39408
39409
39410
39411
39412
39413
39414
39415
39416
39417
39418
39419
39420
39421
39422
39423
39424
39425
39426
39427
39428
39429
39430
39431
39432
39433
39434
39435
39436
39437
39438
39439
39440
39441
39442
39443
39444
39445
39446
39447
39448
39449
39450
39451
39452
39453
39454
39455
39456
39457
39458
39459
39460
39461
39462
39463
39464
39465
39466
39467
39468
39469
39470
39471
39472
39473
39474
39475
39476
39477
39478
39479
39480
39481
39482
39483
39484
39485
39486
39487
39488
39489
39490
39491
39492
39493
39494
39495
39496
39497
39498
39499
39500
39501
39502
39503
39504
39505
39506
39507
39508
39509
39510
39511
39512
39513
39514
39515
39516
39517
39518
39519
39520
39521
39522
39523
39524
39525
39526
39527
39528
39529
39530
39531
39532
39533
39534
39535
39536
39537
39538
39539
39540
39541
39542
39543
39544
39545
39546
39547
39548
39549
39550
39551
39552
39553
39554
39555
39556
39557
39558
39559
39560
39561
39562
39563
39564
39565
39566
39567
39568
39569
39570
39571
39572
39573
39574
39575
39576
39577
39578
39579
39580
39581
39582
39583
39584
39585
39586
39587
39588
39589
39590
39591
39592
39593
39594
39595
39596
39597
39598
39599
39600
39601
39602
39603
39604
39605
39606
39607
39608
39609
39610
39611
39612
39613
39614
39615
39616
39617
39618
39619
39620
39621
39622
39623
39624
39625
39626
39627
39628
39629
39630
39631
39632
39633
39634
39635
39636
39637
39638
39639
39640
39641
39642
39643
39644
39645
39646
39647
39648
39649
39650
39651
39652
39653
39654
39655
39656
39657
39658
39659
39660
39661
39662
39663
39664
39665
39666
39667
39668
39669
39670
39671
39672
39673
39674
39675
39676
39677
39678
39679
39680
39681
39682
39683
39684
39685
39686
39687
39688
39689
39690
39691
39692
39693
39694
39695
39696
39697
39698
39699
39700
39701
39702
39703
39704
39705
39706
39707
39708
39709
39710
39711
39712
39713
39714
39715
39716
39717
39718
39719
39720
39721
39722
39723
39724
39725
39726
39727
39728
39729
39730
39731
39732
39733
39734
39735
39736
39737
39738
39739
39740
39741
39742
39743
39744
39745
39746
39747
39748
39749
39750
39751
39752
39753
39754
39755
39756
39757
39758
39759
39760
39761
39762
39763
39764
39765
39766
39767
39768
39769
39770
39771
39772
39773
39774
39775
39776
39777
39778
39779
39780
39781
39782
39783
39784
39785
39786
39787
39788
39789
39790
39791
39792
39793
39794
39795
39796
39797
39798
39799
39800
39801
39802
39803
39804
39805
39806
39807
39808
39809
39810
39811
39812
39813
39814
39815
39816
39817
39818
39819
39820
39821
39822
39823
39824
39825
39826
39827
39828
39829
39830
39831
39832
39833
39834
39835
39836
39837
39838
39839
39840
39841
39842
39843
39844
39845
39846
39847
39848
39849
39850
39851
39852
39853
39854
39855
39856
39857
39858
39859
39860
39861
39862
39863
39864
39865
39866
39867
39868
39869
39870
39871
39872
39873
39874
39875
39876
39877
39878
39879
39880
39881
39882
39883
39884
39885
39886
39887
39888
39889
39890
39891
39892
39893
39894
39895
39896
39897
39898
39899
39900
39901
39902
39903
39904
39905
39906
39907
39908
39909
39910
39911
39912
39913
39914
39915
39916
39917
39918
39919
39920
39921
39922
39923
39924
39925
39926
39927
39928
39929
39930
39931
39932
39933
39934
39935
39936
39937
39938
39939
39940
39941
39942
39943
39944
39945
39946
39947
39948
39949
39950
39951
39952
39953
39954
39955
39956
39957
39958
39959
39960
39961
39962
39963
39964
39965
39966
39967
39968
39969
39970
39971
39972
39973
39974
39975
39976
39977
39978
39979
39980
39981
39982
39983
39984
39985
39986
39987
39988
39989
39990
39991
39992
39993
39994
39995
39996
39997
39998
39999
40000
40001
40002
40003
40004
40005
40006
40007
40008
40009
40010
40011
40012
40013
40014
40015
40016
40017
40018
40019
40020
40021
40022
40023
40024
40025
40026
40027
40028
40029
40030
40031
40032
40033
40034
40035
40036
40037
40038
40039
40040
40041
40042
40043
40044
40045
40046
40047
40048
40049
40050
40051
40052
40053
40054
40055
40056
40057
40058
40059
40060
40061
40062
40063
40064
40065
40066
40067
40068
40069
40070
40071
40072
40073
40074
40075
40076
40077
40078
40079
40080
40081
40082
40083
40084
40085
40086
40087
40088
40089
40090
40091
40092
40093
40094
40095
40096
40097
40098
40099
40100
40101
40102
40103
40104
40105
40106
40107
40108
40109
40110
40111
40112
40113
40114
40115
40116
40117
40118
40119
40120
40121
40122
40123
40124
40125
40126
40127
40128
40129
40130
40131
40132
40133
40134
40135
40136
40137
40138
40139
40140
40141
40142
40143
40144
40145
40146
40147
40148
40149
40150
40151
40152
40153
40154
40155
40156
40157
40158
40159
40160
40161
40162
40163
40164
40165
40166
40167
40168
40169
40170
40171
40172
40173
40174
40175
40176
40177
40178
40179
40180
40181
40182
40183
40184
40185
40186
40187
40188
40189
40190
40191
40192
40193
40194
40195
40196
40197
40198
40199
40200
40201
40202
40203
40204
40205
40206
40207
40208
40209
40210
40211
40212
40213
40214
40215
40216
40217
40218
40219
40220
40221
40222
40223
40224
40225
40226
40227
40228
40229
40230
40231
40232
40233
40234
40235
40236
40237
40238
40239
40240
40241
40242
40243
40244
40245
40246
40247
40248
40249
40250
40251
40252
40253
40254
40255
40256
40257
40258
40259
40260
40261
40262
40263
40264
40265
40266
40267
40268
40269
40270
40271
40272
40273
40274
40275
40276
40277
40278
40279
40280
40281
40282
40283
40284
40285
40286
40287
40288
40289
40290
40291
40292
40293
40294
40295
40296
40297
40298
40299
40300
40301
40302
40303
40304
40305
40306
40307
40308
40309
40310
40311
40312
40313
40314
40315
40316
40317
40318
40319
40320
40321
40322
40323
40324
40325
40326
40327
40328
40329
40330
40331
40332
40333
40334
40335
40336
40337
40338
40339
40340
40341
40342
40343
40344
40345
40346
40347
40348
40349
40350
40351
40352
40353
40354
40355
40356
40357
40358
40359
40360
40361
40362
40363
40364
40365
40366
40367
40368
40369
40370
40371
40372
40373
40374
40375
40376
40377
40378
40379
40380
40381
40382
40383
40384
40385
40386
40387
40388
40389
40390
40391
40392
40393
40394
40395
40396
40397
40398
40399
40400
40401
40402
40403
40404
40405
40406
40407
40408
40409
40410
40411
40412
40413
40414
40415
40416
40417
40418
40419
40420
40421
40422
40423
40424
40425
40426
40427
40428
40429
40430
40431
40432
40433
40434
40435
40436
40437
40438
40439
40440
40441
40442
40443
40444
40445
40446
40447
40448
40449
40450
40451
40452
40453
40454
40455
40456
40457
40458
40459
40460
40461
40462
40463
40464
40465
40466
40467
40468
40469
40470
40471
40472
40473
40474
40475
40476
40477
40478
40479
40480
40481
40482
40483
40484
40485
40486
40487
40488
40489
40490
40491
40492
40493
40494
40495
40496
40497
40498
40499
40500
40501
40502
40503
40504
40505
40506
40507
40508
40509
40510
40511
40512
40513
40514
40515
40516
40517
40518
40519
40520
40521
40522
40523
40524
40525
40526
40527
40528
40529
40530
40531
40532
40533
40534
40535
40536
40537
40538
40539
40540
40541
40542
40543
40544
40545
40546
40547
40548
40549
40550
40551
40552
40553
40554
40555
40556
40557
40558
40559
40560
40561
40562
40563
40564
40565
40566
40567
40568
40569
40570
40571
40572
40573
40574
40575
40576
40577
40578
40579
40580
40581
40582
40583
40584
40585
40586
40587
40588
40589
40590
40591
40592
40593
40594
40595
40596
40597
40598
40599
40600
40601
40602
40603
40604
40605
40606
40607
40608
40609
40610
40611
40612
40613
40614
40615
40616
40617
40618
40619
40620
40621
40622
40623
40624
40625
40626
40627
40628
40629
40630
40631
40632
40633
40634
40635
40636
40637
40638
40639
40640
40641
40642
40643
40644
40645
40646
40647
40648
40649
40650
40651
40652
40653
40654
40655
40656
40657
40658
40659
40660
40661
40662
40663
40664
40665
40666
40667
40668
40669
40670
40671
40672
40673
40674
40675
40676
40677
40678
40679
40680
40681
40682
40683
40684
40685
40686
40687
40688
40689
40690
40691
40692
40693
40694
40695
40696
40697
40698
40699
40700
40701
40702
40703
40704
40705
40706
40707
40708
40709
40710
40711
40712
40713
40714
40715
40716
40717
40718
40719
40720
40721
40722
40723
40724
40725
40726
40727
40728
40729
40730
40731
40732
40733
40734
40735
40736
40737
40738
40739
40740
40741
40742
40743
40744
40745
40746
40747
40748
40749
40750
40751
40752
40753
40754
40755
40756
40757
40758
40759
40760
40761
40762
40763
40764
40765
40766
40767
40768
40769
40770
40771
40772
40773
40774
40775
40776
40777
40778
40779
40780
40781
40782
40783
40784
40785
40786
40787
40788
40789
40790
40791
40792
40793
40794
40795
40796
40797
40798
40799
40800
40801
40802
40803
40804
40805
40806
40807
40808
40809
40810
40811
40812
40813
40814
40815
40816
40817
40818
40819
40820
40821
40822
40823
40824
40825
40826
40827
40828
40829
40830
40831
40832
40833
40834
40835
40836
40837
40838
40839
40840
40841
40842
40843
40844
40845
40846
40847
40848
40849
40850
40851
40852
40853
40854
40855
40856
40857
40858
40859
40860
40861
40862
40863
40864
40865
40866
40867
40868
40869
40870
40871
40872
40873
40874
40875
40876
40877
40878
40879
40880
40881
40882
40883
40884
40885
40886
40887
40888
40889
40890
40891
40892
40893
40894
40895
40896
40897
40898
40899
40900
40901
40902
40903
40904
40905
40906
40907
40908
40909
40910
40911
40912
40913
40914
40915
40916
40917
40918
40919
40920
40921
40922
40923
40924
40925
40926
40927
40928
40929
40930
40931
40932
40933
40934
40935
40936
40937
40938
40939
40940
40941
40942
40943
40944
40945
40946
40947
40948
40949
40950
40951
40952
40953
40954
40955
40956
40957
40958
40959
40960
40961
40962
40963
40964
40965
40966
40967
40968
40969
40970
40971
40972
40973
40974
40975
40976
40977
40978
40979
40980
40981
40982
40983
40984
40985
40986
40987
40988
40989
40990
40991
40992
40993
40994
40995
40996
40997
40998
40999
41000
41001
41002
41003
41004
41005
41006
41007
41008
41009
41010
41011
41012
41013
41014
41015
41016
41017
41018
41019
41020
41021
41022
41023
41024
41025
41026
41027
41028
41029
41030
41031
41032
41033
41034
41035
41036
41037
41038
41039
41040
41041
41042
41043
41044
41045
41046
41047
41048
41049
41050
41051
41052
41053
41054
41055
41056
41057
41058
41059
41060
41061
41062
41063
41064
41065
41066
41067
41068
41069
41070
41071
41072
41073
41074
41075
41076
41077
41078
41079
41080
41081
41082
41083
41084
41085
41086
41087
41088
41089
41090
41091
41092
41093
41094
41095
41096
41097
41098
41099
41100
41101
41102
41103
41104
41105
41106
41107
41108
41109
41110
41111
41112
41113
41114
41115
41116
41117
41118
41119
41120
41121
41122
41123
41124
41125
41126
41127
41128
41129
41130
41131
41132
41133
41134
41135
41136
41137
41138
41139
41140
41141
41142
41143
41144
41145
41146
41147
41148
41149
41150
41151
41152
41153
41154
41155
41156
41157
41158
41159
41160
41161
41162
41163
41164
41165
41166
41167
41168
41169
41170
41171
41172
41173
41174
41175
41176
41177
41178
41179
41180
41181
41182
41183
41184
41185
41186
41187
41188
41189
41190
41191
41192
41193
41194
41195
41196
41197
41198
41199
41200
41201
41202
41203
41204
41205
41206
41207
41208
41209
41210
41211
41212
41213
41214
41215
41216
41217
41218
41219
41220
41221
41222
41223
41224
41225
41226
41227
41228
41229
41230
41231
41232
41233
41234
41235
41236
41237
41238
41239
41240
41241
41242
41243
41244
41245
41246
41247
41248
41249
41250
41251
41252
41253
41254
41255
41256
41257
41258
41259
41260
41261
41262
41263
41264
41265
41266
41267
41268
41269
41270
41271
41272
41273
41274
41275
41276
41277
41278
41279
41280
41281
41282
41283
41284
41285
41286
41287
41288
41289
41290
41291
41292
41293
41294
41295
41296
41297
41298
41299
41300
41301
41302
41303
41304
41305
41306
41307
41308
41309
41310
41311
41312
41313
41314
41315
41316
41317
41318
41319
41320
41321
41322
41323
41324
41325
41326
41327
41328
41329
41330
41331
41332
41333
41334
41335
41336
41337
41338
41339
41340
41341
41342
41343
41344
41345
41346
41347
41348
41349
41350
41351
41352
41353
41354
41355
41356
41357
41358
41359
41360
41361
41362
41363
41364
41365
41366
41367
41368
41369
41370
41371
41372
41373
41374
41375
41376
41377
41378
41379
41380
41381
41382
41383
41384
41385
41386
41387
41388
41389
41390
41391
41392
41393
41394
41395
41396
41397
41398
41399
41400
41401
41402
41403
41404
41405
41406
41407
41408
41409
41410
41411
41412
41413
41414
41415
41416
41417
41418
41419
41420
41421
41422
41423
41424
41425
41426
41427
41428
41429
41430
41431
41432
41433
41434
41435
41436
41437
41438
41439
41440
41441
41442
41443
41444
41445
41446
41447
41448
41449
41450
41451
41452
41453
41454
41455
41456
41457
41458
41459
41460
41461
41462
41463
41464
41465
41466
41467
41468
41469
41470
41471
41472
41473
41474
41475
41476
41477
41478
41479
41480
41481
41482
41483
41484
41485
41486
41487
41488
41489
41490
41491
41492
41493
41494
41495
41496
41497
41498
41499
41500
41501
41502
41503
41504
41505
41506
41507
41508
41509
41510
41511
41512
41513
41514
41515
41516
41517
41518
41519
41520
41521
41522
41523
41524
41525
41526
41527
41528
41529
41530
41531
41532
41533
41534
41535
41536
41537
41538
41539
41540
41541
41542
41543
41544
41545
41546
41547
41548
41549
41550
41551
41552
41553
41554
41555
41556
41557
41558
41559
41560
41561
41562
41563
41564
41565
41566
41567
41568
41569
41570
41571
41572
41573
41574
41575
41576
41577
41578
41579
41580
41581
41582
41583
41584
41585
41586
41587
41588
41589
41590
41591
41592
41593
41594
41595
41596
41597
41598
41599
41600
41601
41602
41603
41604
41605
41606
41607
41608
41609
41610
41611
41612
41613
41614
41615
41616
41617
41618
41619
41620
41621
41622
41623
41624
41625
41626
41627
41628
41629
41630
41631
41632
41633
41634
41635
41636
41637
41638
41639
41640
41641
41642
41643
41644
41645
41646
41647
41648
41649
41650
41651
41652
41653
41654
41655
41656
41657
41658
41659
41660
41661
41662
41663
41664
41665
41666
41667
41668
41669
41670
41671
41672
41673
41674
41675
41676
41677
41678
41679
41680
41681
41682
41683
41684
41685
41686
41687
41688
41689
41690
41691
41692
41693
41694
41695
41696
41697
41698
41699
41700
41701
41702
41703
41704
41705
41706
41707
41708
41709
41710
41711
41712
41713
41714
41715
41716
41717
41718
41719
41720
41721
41722
41723
41724
41725
41726
41727
41728
41729
41730
41731
41732
41733
41734
41735
41736
41737
41738
41739
41740
41741
41742
41743
41744
41745
41746
41747
41748
41749
41750
41751
41752
41753
41754
41755
41756
41757
41758
41759
41760
41761
41762
41763
41764
41765
41766
41767
41768
41769
41770
41771
41772
41773
41774
41775
41776
41777
41778
41779
41780
41781
41782
41783
41784
41785
41786
41787
41788
41789
41790
41791
41792
41793
41794
41795
41796
41797
41798
41799
41800
41801
41802
41803
41804
41805
41806
41807
41808
41809
41810
41811
41812
41813
41814
41815
41816
41817
41818
41819
41820
41821
41822
41823
41824
41825
41826
41827
41828
41829
41830
41831
41832
41833
41834
41835
41836
41837
41838
41839
41840
41841
41842
41843
41844
41845
41846
41847
41848
41849
41850
41851
41852
41853
41854
41855
41856
41857
41858
41859
41860
41861
41862
41863
41864
41865
41866
41867
41868
41869
41870
41871
41872
41873
41874
41875
41876
41877
41878
41879
41880
41881
41882
41883
41884
41885
41886
41887
41888
41889
41890
41891
41892
41893
41894
41895
41896
41897
41898
41899
41900
41901
41902
41903
41904
41905
41906
41907
41908
41909
41910
41911
41912
41913
41914
41915
41916
41917
41918
41919
41920
41921
41922
41923
41924
41925
41926
41927
41928
41929
41930
41931
41932
41933
41934
41935
41936
41937
41938
41939
41940
41941
41942
41943
41944
41945
41946
41947
41948
41949
41950
41951
41952
41953
41954
41955
41956
41957
41958
41959
41960
41961
41962
41963
41964
41965
41966
41967
41968
41969
41970
41971
41972
41973
41974
41975
41976
41977
41978
41979
41980
41981
41982
41983
41984
41985
41986
41987
41988
41989
41990
41991
41992
41993
41994
41995
41996
41997
41998
41999
42000
42001
42002
42003
42004
42005
42006
42007
42008
42009
42010
42011
42012
42013
42014
42015
42016
42017
42018
42019
42020
42021
42022
42023
42024
42025
42026
42027
42028
42029
42030
42031
42032
42033
42034
42035
42036
42037
42038
42039
42040
42041
42042
42043
42044
42045
42046
42047
42048
42049
42050
42051
42052
42053
42054
42055
42056
42057
42058
42059
42060
42061
42062
42063
42064
42065
42066
42067
42068
42069
42070
42071
42072
42073
42074
42075
42076
42077
42078
42079
42080
42081
42082
42083
42084
42085
42086
42087
42088
42089
42090
42091
42092
42093
42094
42095
42096
42097
42098
42099
42100
42101
42102
42103
42104
42105
42106
42107
42108
42109
42110
42111
42112
42113
42114
42115
42116
42117
42118
42119
42120
42121
42122
42123
42124
42125
42126
42127
42128
42129
42130
42131
42132
42133
42134
42135
42136
42137
42138
42139
42140
42141
42142
42143
42144
42145
42146
42147
42148
42149
42150
42151
42152
42153
42154
42155
42156
42157
42158
42159
42160
42161
42162
42163
42164
42165
42166
42167
42168
42169
42170
42171
42172
42173
42174
42175
42176
42177
42178
42179
42180
42181
42182
42183
42184
42185
42186
42187
42188
42189
42190
42191
42192
42193
42194
42195
42196
42197
42198
42199
42200
42201
42202
42203
42204
42205
42206
42207
42208
42209
42210
42211
42212
42213
42214
42215
42216
42217
42218
42219
42220
42221
42222
42223
42224
42225
42226
42227
42228
42229
42230
42231
42232
42233
42234
42235
42236
42237
42238
42239
42240
42241
42242
42243
42244
42245
42246
42247
42248
42249
42250
42251
42252
42253
42254
42255
42256
42257
42258
42259
42260
42261
42262
42263
42264
42265
42266
42267
42268
42269
42270
42271
42272
42273
42274
42275
42276
42277
42278
42279
42280
42281
42282
42283
42284
42285
42286
42287
42288
42289
42290
42291
42292
42293
42294
42295
42296
42297
42298
42299
42300
42301
42302
42303
42304
42305
42306
42307
42308
42309
42310
42311
42312
42313
42314
42315
42316
42317
42318
42319
42320
42321
42322
42323
42324
42325
42326
42327
42328
42329
42330
42331
42332
42333
42334
42335
42336
42337
42338
42339
42340
42341
42342
42343
42344
42345
42346
42347
42348
42349
42350
42351
42352
42353
42354
42355
42356
42357
42358
42359
42360
42361
42362
42363
42364
42365
42366
42367
42368
42369
42370
42371
42372
42373
42374
42375
42376
42377
42378
42379
42380
42381
42382
42383
42384
42385
42386
42387
42388
42389
42390
42391
42392
42393
42394
42395
42396
42397
42398
42399
42400
42401
42402
42403
42404
42405
42406
42407
42408
42409
42410
42411
42412
42413
42414
42415
42416
42417
42418
42419
42420
42421
42422
42423
42424
42425
42426
42427
42428
42429
42430
42431
42432
42433
42434
42435
42436
42437
42438
42439
42440
42441
42442
42443
42444
42445
42446
42447
42448
42449
42450
42451
42452
42453
42454
42455
42456
42457
42458
42459
42460
42461
42462
42463
42464
42465
42466
42467
42468
42469
42470
42471
42472
42473
42474
42475
42476
42477
42478
42479
42480
42481
42482
42483
42484
42485
42486
42487
42488
42489
42490
42491
42492
42493
42494
42495
42496
42497
42498
42499
42500
42501
42502
42503
42504
42505
42506
42507
42508
42509
42510
42511
42512
42513
42514
42515
42516
42517
42518
42519
42520
42521
42522
42523
42524
42525
42526
42527
42528
42529
42530
42531
42532
42533
42534
42535
42536
42537
42538
42539
42540
42541
42542
42543
42544
42545
42546
42547
42548
42549
42550
42551
42552
42553
42554
42555
42556
42557
42558
42559
42560
42561
42562
42563
42564
42565
42566
42567
42568
42569
42570
42571
42572
42573
42574
42575
42576
42577
42578
42579
42580
42581
42582
42583
42584
42585
42586
42587
42588
42589
42590
42591
42592
42593
42594
42595
42596
42597
42598
42599
42600
42601
42602
42603
42604
42605
42606
42607
42608
42609
42610
42611
42612
42613
42614
42615
42616
42617
42618
42619
42620
42621
42622
42623
42624
42625
42626
42627
42628
42629
42630
42631
42632
42633
42634
42635
42636
42637
42638
42639
42640
42641
42642
42643
42644
42645
42646
42647
42648
42649
42650
42651
42652
42653
42654
42655
42656
42657
42658
42659
42660
42661
42662
42663
42664
42665
42666
42667
42668
42669
42670
42671
42672
42673
42674
42675
42676
42677
42678
42679
42680
42681
42682
42683
42684
42685
42686
42687
42688
42689
42690
42691
42692
42693
42694
42695
42696
42697
42698
42699
42700
42701
42702
42703
42704
42705
42706
42707
42708
42709
42710
42711
42712
42713
42714
42715
42716
42717
42718
42719
42720
42721
42722
42723
42724
42725
42726
42727
42728
42729
42730
42731
42732
42733
42734
42735
42736
42737
42738
42739
42740
42741
42742
42743
42744
42745
42746
42747
42748
42749
42750
42751
42752
42753
42754
42755
42756
42757
42758
42759
42760
42761
42762
42763
42764
42765
42766
42767
42768
42769
42770
42771
42772
42773
42774
42775
42776
42777
42778
42779
42780
42781
42782
42783
42784
42785
42786
42787
42788
42789
42790
42791
42792
42793
42794
42795
42796
42797
42798
42799
42800
42801
42802
42803
42804
42805
42806
42807
42808
42809
42810
42811
42812
42813
42814
42815
42816
42817
42818
42819
42820
42821
42822
42823
42824
42825
42826
42827
42828
42829
42830
42831
42832
42833
42834
42835
42836
42837
42838
42839
42840
42841
42842
42843
42844
42845
42846
42847
42848
42849
42850
42851
42852
42853
42854
42855
42856
42857
42858
42859
42860
42861
42862
42863
42864
42865
42866
42867
42868
42869
42870
42871
42872
42873
42874
42875
42876
42877
42878
42879
42880
42881
42882
42883
42884
42885
42886
42887
42888
42889
42890
42891
42892
42893
42894
42895
42896
42897
42898
42899
42900
42901
42902
42903
42904
42905
42906
42907
42908
42909
42910
42911
42912
42913
42914
42915
42916
42917
42918
42919
42920
42921
42922
42923
42924
42925
42926
42927
42928
42929
42930
42931
42932
42933
42934
42935
42936
42937
42938
42939
42940
42941
42942
42943
42944
42945
42946
42947
42948
42949
42950
42951
42952
42953
42954
42955
42956
42957
42958
42959
42960
42961
42962
42963
42964
42965
42966
42967
42968
42969
42970
42971
42972
42973
42974
42975
42976
42977
42978
42979
42980
42981
42982
42983
42984
42985
42986
42987
42988
42989
42990
42991
42992
42993
42994
42995
42996
42997
42998
42999
43000
43001
43002
43003
43004
43005
43006
43007
43008
43009
43010
43011
43012
43013
43014
43015
43016
43017
43018
43019
43020
43021
43022
43023
43024
43025
43026
43027
43028
43029
43030
43031
43032
43033
43034
43035
43036
43037
43038
43039
43040
43041
43042
43043
43044
43045
43046
43047
43048
43049
43050
43051
43052
43053
43054
43055
43056
43057
43058
43059
43060
43061
43062
43063
43064
43065
43066
43067
43068
43069
43070
43071
43072
43073
43074
43075
43076
43077
43078
43079
43080
43081
43082
43083
43084
43085
43086
43087
43088
43089
43090
43091
43092
43093
43094
43095
43096
43097
43098
43099
43100
43101
43102
43103
43104
43105
43106
43107
43108
43109
43110
43111
43112
43113
43114
43115
43116
43117
43118
43119
43120
43121
43122
43123
43124
43125
43126
43127
43128
43129
43130
43131
43132
43133
43134
43135
43136
43137
43138
43139
43140
43141
43142
43143
43144
43145
43146
43147
43148
43149
43150
43151
43152
43153
43154
43155
43156
43157
43158
43159
43160
43161
43162
43163
43164
43165
43166
43167
43168
43169
43170
43171
43172
43173
43174
43175
43176
43177
43178
43179
43180
43181
43182
43183
43184
43185
43186
43187
43188
43189
43190
43191
43192
43193
43194
43195
43196
43197
43198
43199
43200
43201
43202
43203
43204
43205
43206
43207
43208
43209
43210
43211
43212
43213
43214
43215
43216
43217
43218
43219
43220
43221
43222
43223
43224
43225
43226
43227
43228
43229
43230
43231
43232
43233
43234
43235
43236
43237
43238
43239
43240
43241
43242
43243
43244
43245
43246
43247
43248
43249
43250
43251
43252
43253
43254
43255
43256
43257
43258
43259
43260
43261
43262
43263
43264
43265
43266
43267
43268
43269
43270
43271
43272
43273
43274
43275
43276
43277
43278
43279
43280
43281
43282
43283
43284
43285
43286
43287
43288
43289
43290
43291
43292
43293
43294
43295
43296
43297
43298
43299
43300
43301
43302
43303
43304
43305
43306
43307
43308
43309
43310
43311
43312
43313
43314
43315
43316
43317
43318
43319
43320
43321
43322
43323
43324
43325
43326
43327
43328
43329
43330
43331
43332
43333
43334
43335
43336
43337
43338
43339
43340
43341
43342
43343
43344
43345
43346
43347
43348
43349
43350
43351
43352
43353
43354
43355
43356
43357
43358
43359
43360
43361
43362
43363
43364
43365
43366
43367
43368
43369
43370
43371
43372
43373
43374
43375
43376
43377
43378
43379
43380
43381
43382
43383
43384
43385
43386
43387
43388
43389
43390
43391
43392
43393
43394
43395
43396
43397
43398
43399
43400
43401
43402
43403
43404
43405
43406
43407
43408
43409
43410
43411
43412
43413
43414
43415
43416
43417
43418
43419
43420
43421
43422
43423
43424
43425
43426
43427
43428
43429
43430
43431
43432
43433
43434
43435
43436
43437
43438
43439
43440
43441
43442
43443
43444
43445
43446
43447
43448
43449
43450
43451
43452
43453
43454
43455
43456
43457
43458
43459
43460
43461
43462
43463
43464
43465
43466
43467
43468
43469
43470
43471
43472
43473
43474
43475
43476
43477
43478
43479
43480
43481
43482
43483
43484
43485
43486
43487
43488
43489
43490
43491
43492
43493
43494
43495
43496
43497
43498
43499
43500
43501
43502
43503
43504
43505
43506
43507
43508
43509
43510
43511
43512
43513
43514
43515
43516
43517
43518
43519
43520
43521
43522
43523
43524
43525
43526
43527
43528
43529
43530
43531
43532
43533
43534
43535
43536
43537
43538
43539
43540
43541
43542
43543
43544
43545
43546
43547
43548
43549
43550
43551
43552
43553
43554
43555
43556
43557
43558
43559
43560
43561
43562
43563
43564
43565
43566
43567
43568
43569
43570
43571
43572
43573
43574
43575
43576
43577
43578
43579
43580
43581
43582
43583
43584
43585
43586
43587
43588
43589
43590
43591
43592
43593
43594
43595
43596
43597
43598
43599
43600
43601
43602
43603
43604
43605
43606
43607
43608
43609
43610
43611
43612
43613
43614
43615
43616
43617
43618
43619
43620
43621
43622
43623
43624
43625
43626
43627
43628
43629
43630
43631
43632
43633
43634
43635
43636
43637
43638
43639
43640
43641
43642
43643
43644
43645
43646
43647
43648
43649
43650
43651
43652
43653
43654
43655
43656
43657
43658
43659
43660
43661
43662
43663
43664
43665
43666
43667
43668
43669
43670
43671
43672
43673
43674
43675
43676
43677
43678
43679
43680
43681
43682
43683
43684
43685
43686
43687
43688
43689
43690
43691
43692
43693
43694
43695
43696
43697
43698
43699
43700
43701
43702
43703
43704
43705
43706
43707
43708
43709
43710
43711
43712
43713
43714
43715
43716
43717
43718
43719
43720
43721
43722
43723
43724
43725
43726
43727
43728
43729
43730
43731
43732
43733
43734
43735
43736
43737
43738
43739
43740
43741
43742
43743
43744
43745
43746
43747
43748
43749
43750
43751
43752
43753
43754
43755
43756
43757
43758
43759
43760
43761
43762
43763
43764
43765
43766
43767
43768
43769
43770
43771
43772
43773
43774
43775
43776
43777
43778
43779
43780
43781
43782
43783
43784
43785
43786
43787
43788
43789
43790
43791
43792
43793
43794
43795
43796
43797
43798
43799
43800
43801
43802
43803
43804
43805
43806
43807
43808
43809
43810
43811
43812
43813
43814
43815
43816
43817
43818
43819
43820
43821
43822
43823
43824
43825
43826
43827
43828
43829
43830
43831
43832
43833
43834
43835
43836
43837
43838
43839
43840
43841
43842
43843
43844
43845
43846
43847
43848
43849
43850
43851
43852
43853
43854
43855
43856
43857
43858
43859
43860
43861
43862
43863
43864
43865
43866
43867
43868
43869
43870
43871
43872
43873
43874
43875
43876
43877
43878
43879
43880
43881
43882
43883
43884
43885
43886
43887
43888
43889
43890
43891
43892
43893
43894
43895
43896
43897
43898
43899
43900
43901
43902
43903
43904
43905
43906
43907
43908
43909
43910
43911
43912
43913
43914
43915
43916
43917
43918
43919
43920
43921
43922
43923
43924
43925
43926
43927
43928
43929
43930
43931
43932
43933
43934
43935
43936
43937
43938
43939
43940
43941
43942
43943
43944
43945
43946
43947
43948
43949
43950
43951
43952
43953
43954
43955
43956
43957
43958
43959
43960
43961
43962
43963
43964
43965
43966
43967
43968
43969
43970
43971
43972
43973
43974
43975
43976
43977
43978
43979
43980
43981
43982
43983
43984
43985
43986
43987
43988
43989
43990
43991
43992
43993
43994
43995
43996
43997
43998
43999
44000
44001
44002
44003
44004
44005
44006
44007
44008
44009
44010
44011
44012
44013
44014
44015
44016
44017
44018
44019
44020
44021
44022
44023
44024
44025
44026
44027
44028
44029
44030
44031
44032
44033
44034
44035
44036
44037
44038
44039
44040
44041
44042
44043
44044
44045
44046
44047
44048
44049
44050
44051
44052
44053
44054
44055
44056
44057
44058
44059
44060
44061
44062
44063
44064
44065
44066
44067
44068
44069
44070
44071
44072
44073
44074
44075
44076
44077
44078
44079
44080
44081
44082
44083
44084
44085
44086
44087
44088
44089
44090
44091
44092
44093
44094
44095
44096
44097
44098
44099
44100
44101
44102
44103
44104
44105
44106
44107
44108
44109
44110
44111
44112
44113
44114
44115
44116
44117
44118
44119
44120
44121
44122
44123
44124
44125
44126
44127
44128
44129
44130
44131
44132
44133
44134
44135
44136
44137
44138
44139
44140
44141
44142
44143
44144
44145
44146
44147
44148
44149
44150
44151
44152
44153
44154
44155
44156
44157
44158
44159
44160
44161
44162
44163
44164
44165
44166
44167
44168
44169
44170
44171
44172
44173
44174
44175
44176
44177
44178
44179
44180
44181
44182
44183
44184
44185
44186
44187
44188
44189
44190
44191
44192
44193
44194
44195
44196
44197
44198
44199
44200
44201
44202
44203
44204
44205
44206
44207
44208
44209
44210
44211
44212
44213
44214
44215
44216
44217
44218
44219
44220
44221
44222
44223
44224
44225
44226
44227
44228
44229
44230
44231
44232
44233
44234
44235
44236
44237
44238
44239
44240
44241
44242
44243
44244
44245
44246
44247
44248
44249
44250
44251
44252
44253
44254
44255
44256
44257
44258
44259
44260
44261
44262
44263
44264
44265
44266
44267
44268
44269
44270
44271
44272
44273
44274
44275
44276
44277
44278
44279
44280
44281
44282
44283
44284
44285
44286
44287
44288
44289
44290
44291
44292
44293
44294
44295
44296
44297
44298
44299
44300
44301
44302
44303
44304
44305
44306
44307
44308
44309
44310
44311
44312
44313
44314
44315
44316
44317
44318
44319
44320
44321
44322
44323
44324
44325
44326
44327
44328
44329
44330
44331
44332
44333
44334
44335
44336
44337
44338
44339
44340
44341
44342
44343
44344
44345
44346
44347
44348
44349
44350
44351
44352
44353
44354
44355
44356
44357
44358
44359
44360
44361
44362
44363
44364
44365
44366
44367
44368
44369
44370
44371
44372
44373
44374
44375
44376
44377
44378
44379
44380
44381
44382
44383
44384
44385
44386
44387
44388
44389
44390
44391
44392
44393
44394
44395
44396
44397
44398
44399
44400
44401
44402
44403
44404
44405
44406
44407
44408
44409
44410
44411
44412
44413
44414
44415
44416
44417
44418
44419
44420
44421
44422
44423
44424
44425
44426
44427
44428
44429
44430
44431
44432
44433
44434
44435
44436
44437
44438
44439
44440
44441
44442
44443
44444
44445
44446
44447
44448
44449
44450
44451
44452
44453
44454
44455
44456
44457
44458
44459
44460
44461
44462
44463
44464
44465
44466
44467
44468
44469
44470
44471
44472
44473
44474
44475
44476
44477
44478
44479
44480
44481
44482
44483
44484
44485
44486
44487
44488
44489
44490
44491
44492
44493
44494
44495
44496
44497
44498
44499
44500
44501
44502
44503
44504
44505
44506
44507
44508
44509
44510
44511
44512
44513
44514
44515
44516
44517
44518
44519
44520
44521
44522
44523
44524
44525
44526
44527
44528
44529
44530
44531
44532
44533
44534
44535
44536
44537
44538
44539
44540
44541
44542
44543
44544
44545
44546
44547
44548
44549
44550
44551
44552
44553
44554
44555
44556
44557
44558
44559
44560
44561
44562
44563
44564
44565
44566
44567
44568
44569
44570
44571
44572
44573
44574
44575
44576
44577
44578
44579
44580
44581
44582
44583
44584
44585
44586
44587
44588
44589
44590
44591
44592
44593
44594
44595
44596
44597
44598
44599
44600
44601
44602
44603
44604
44605
44606
44607
44608
44609
44610
44611
44612
44613
44614
44615
44616
44617
44618
44619
44620
44621
44622
44623
44624
44625
44626
44627
44628
44629
44630
44631
44632
44633
44634
44635
44636
44637
44638
44639
44640
44641
44642
44643
44644
44645
44646
44647
44648
44649
44650
44651
44652
44653
44654
44655
44656
44657
44658
44659
44660
44661
44662
44663
44664
44665
44666
44667
44668
44669
44670
44671
44672
44673
44674
44675
44676
44677
44678
44679
44680
44681
44682
44683
44684
44685
44686
44687
44688
44689
44690
44691
44692
44693
44694
44695
44696
44697
44698
44699
44700
44701
44702
44703
44704
44705
44706
44707
44708
44709
44710
44711
44712
44713
44714
44715
44716
44717
44718
44719
44720
44721
44722
44723
44724
44725
44726
44727
44728
44729
44730
44731
44732
44733
44734
44735
44736
44737
44738
44739
44740
44741
44742
44743
44744
44745
44746
44747
44748
44749
44750
44751
44752
44753
44754
44755
44756
44757
44758
44759
44760
44761
44762
44763
44764
44765
44766
44767
44768
44769
44770
44771
44772
44773
44774
44775
44776
44777
44778
44779
44780
44781
44782
44783
44784
44785
44786
44787
44788
44789
44790
44791
44792
44793
44794
44795
44796
44797
44798
44799
44800
44801
44802
44803
44804
44805
44806
44807
44808
44809
44810
44811
44812
44813
44814
44815
44816
44817
44818
44819
44820
44821
44822
44823
44824
44825
44826
44827
44828
44829
44830
44831
44832
44833
44834
44835
44836
44837
44838
44839
44840
44841
44842
44843
44844
44845
44846
44847
44848
44849
44850
44851
44852
44853
44854
44855
44856
44857
44858
44859
44860
44861
44862
44863
44864
44865
44866
44867
44868
44869
44870
44871
44872
44873
44874
44875
44876
44877
44878
44879
44880
44881
44882
44883
44884
44885
44886
44887
44888
44889
44890
44891
44892
44893
44894
44895
44896
44897
44898
44899
44900
44901
44902
44903
44904
44905
44906
44907
44908
44909
44910
44911
44912
44913
44914
44915
44916
44917
44918
44919
44920
44921
44922
44923
44924
44925
44926
44927
44928
44929
44930
44931
44932
44933
44934
44935
44936
44937
44938
44939
44940
44941
44942
44943
44944
44945
44946
44947
44948
44949
44950
44951
44952
44953
44954
44955
44956
44957
44958
44959
44960
44961
44962
44963
44964
44965
44966
44967
44968
44969
44970
44971
44972
44973
44974
44975
44976
44977
44978
44979
44980
44981
44982
44983
44984
44985
44986
44987
44988
44989
44990
44991
44992
44993
44994
44995
44996
44997
44998
44999
45000
45001
45002
45003
45004
45005
45006
45007
45008
45009
45010
45011
45012
45013
45014
45015
45016
45017
45018
45019
45020
45021
45022
45023
45024
45025
45026
45027
45028
45029
45030
45031
45032
45033
45034
45035
45036
45037
45038
45039
45040
45041
45042
45043
45044
45045
45046
45047
45048
45049
45050
45051
45052
45053
45054
45055
45056
45057
45058
45059
45060
45061
45062
45063
45064
45065
45066
45067
45068
45069
45070
45071
45072
45073
45074
45075
45076
45077
45078
45079
45080
45081
45082
45083
45084
45085
45086
45087
45088
45089
45090
45091
45092
45093
45094
45095
45096
45097
45098
45099
45100
45101
45102
45103
45104
45105
45106
45107
45108
45109
45110
45111
45112
45113
45114
45115
45116
45117
45118
45119
45120
45121
45122
45123
45124
45125
45126
45127
45128
45129
45130
45131
45132
45133
45134
45135
45136
45137
45138
45139
45140
45141
45142
45143
45144
45145
45146
45147
45148
45149
45150
45151
45152
45153
45154
45155
45156
45157
45158
45159
45160
45161
45162
45163
45164
45165
45166
45167
45168
45169
45170
45171
45172
45173
45174
45175
45176
45177
45178
45179
45180
45181
45182
45183
45184
45185
45186
45187
45188
45189
45190
45191
45192
45193
45194
45195
45196
45197
45198
45199
45200
45201
45202
45203
45204
45205
45206
45207
45208
45209
45210
45211
45212
45213
45214
45215
45216
45217
45218
45219
45220
45221
45222
45223
45224
45225
45226
45227
45228
45229
45230
45231
45232
45233
45234
45235
45236
45237
45238
45239
45240
45241
45242
45243
45244
45245
45246
45247
45248
45249
45250
45251
45252
45253
45254
45255
45256
45257
45258
45259
45260
45261
45262
45263
45264
45265
45266
45267
45268
45269
45270
45271
45272
45273
45274
45275
45276
45277
45278
45279
45280
45281
45282
45283
45284
45285
45286
45287
45288
45289
45290
45291
45292
45293
45294
45295
45296
45297
45298
45299
45300
45301
45302
45303
45304
45305
45306
45307
45308
45309
45310
45311
45312
45313
45314
45315
45316
45317
45318
45319
45320
45321
45322
45323
45324
45325
45326
45327
45328
45329
45330
45331
45332
45333
45334
45335
45336
45337
45338
45339
45340
45341
45342
45343
45344
45345
45346
45347
45348
45349
45350
45351
45352
45353
45354
45355
45356
45357
45358
45359
45360
45361
45362
45363
45364
45365
45366
45367
45368
45369
45370
45371
45372
45373
45374
45375
45376
45377
45378
45379
45380
45381
45382
45383
45384
45385
45386
45387
45388
45389
45390
45391
45392
45393
45394
45395
45396
45397
45398
45399
45400
45401
45402
45403
45404
45405
45406
45407
45408
45409
45410
45411
45412
45413
45414
45415
45416
45417
45418
45419
45420
45421
45422
45423
45424
45425
45426
45427
45428
45429
45430
45431
45432
45433
45434
45435
45436
45437
45438
45439
45440
45441
45442
45443
45444
45445
45446
45447
45448
45449
45450
45451
45452
45453
45454
45455
45456
45457
45458
45459
45460
45461
45462
45463
45464
45465
45466
45467
45468
45469
45470
45471
45472
45473
45474
45475
45476
45477
45478
45479
45480
45481
45482
45483
45484
45485
45486
45487
45488
45489
45490
45491
45492
45493
45494
45495
45496
45497
45498
45499
45500
45501
45502
45503
45504
45505
45506
45507
45508
45509
45510
45511
45512
45513
45514
45515
45516
45517
45518
45519
45520
45521
45522
45523
45524
45525
45526
45527
45528
45529
45530
45531
45532
45533
45534
45535
45536
45537
45538
45539
45540
45541
45542
45543
45544
45545
45546
45547
45548
45549
45550
45551
45552
45553
45554
45555
45556
45557
45558
45559
45560
45561
45562
45563
45564
45565
45566
45567
45568
45569
45570
45571
45572
45573
45574
45575
45576
45577
45578
45579
45580
45581
45582
45583
45584
45585
45586
45587
45588
45589
45590
45591
45592
45593
45594
45595
45596
45597
45598
45599
45600
45601
45602
45603
45604
45605
45606
45607
45608
45609
45610
45611
45612
45613
45614
45615
45616
45617
45618
45619
45620
45621
45622
45623
45624
45625
45626
45627
45628
45629
45630
45631
45632
45633
45634
45635
45636
45637
45638
45639
45640
45641
45642
45643
45644
45645
45646
45647
45648
45649
45650
45651
45652
45653
45654
45655
45656
45657
45658
45659
45660
45661
45662
45663
45664
45665
45666
45667
45668
45669
45670
45671
45672
45673
45674
45675
45676
45677
45678
45679
45680
45681
45682
45683
45684
45685
45686
45687
45688
45689
45690
45691
45692
45693
45694
45695
45696
45697
45698
45699
45700
45701
45702
45703
45704
45705
45706
45707
45708
45709
45710
45711
45712
45713
45714
45715
45716
45717
45718
45719
45720
45721
45722
45723
45724
45725
45726
45727
45728
45729
45730
45731
45732
45733
45734
45735
45736
45737
45738
45739
45740
45741
45742
45743
45744
45745
45746
45747
45748
45749
45750
45751
45752
45753
45754
45755
45756
45757
45758
45759
45760
45761
45762
45763
45764
45765
45766
45767
45768
45769
45770
45771
45772
45773
45774
45775
45776
45777
45778
45779
45780
45781
45782
45783
45784
45785
45786
45787
45788
45789
45790
45791
45792
45793
45794
45795
45796
45797
45798
45799
45800
45801
45802
45803
45804
45805
45806
45807
45808
45809
45810
45811
45812
45813
45814
45815
45816
45817
45818
45819
45820
45821
45822
45823
45824
45825
45826
45827
45828
45829
45830
45831
45832
45833
45834
45835
45836
45837
45838
45839
45840
45841
45842
45843
45844
45845
45846
45847
45848
45849
45850
45851
45852
45853
45854
45855
45856
45857
45858
45859
45860
45861
45862
45863
45864
45865
45866
45867
45868
45869
45870
45871
45872
45873
45874
45875
45876
45877
45878
45879
45880
45881
45882
45883
45884
45885
45886
45887
45888
45889
45890
45891
45892
45893
45894
45895
45896
45897
45898
45899
45900
45901
45902
45903
45904
45905
45906
45907
45908
45909
45910
45911
45912
45913
45914
45915
45916
45917
45918
45919
45920
45921
45922
45923
45924
45925
45926
45927
45928
45929
45930
45931
45932
45933
45934
45935
45936
45937
45938
45939
45940
45941
45942
45943
45944
45945
45946
45947
45948
45949
45950
45951
45952
45953
45954
45955
45956
45957
45958
45959
45960
45961
45962
45963
45964
45965
45966
45967
45968
45969
45970
45971
45972
45973
45974
45975
45976
45977
45978
45979
45980
45981
45982
45983
45984
45985
45986
45987
45988
45989
45990
45991
45992
45993
45994
45995
45996
45997
45998
45999
46000
46001
46002
46003
46004
46005
46006
46007
46008
46009
46010
46011
46012
46013
46014
46015
46016
46017
46018
46019
46020
46021
46022
46023
46024
46025
46026
46027
46028
46029
46030
46031
46032
46033
46034
46035
46036
46037
46038
46039
46040
46041
46042
46043
46044
46045
46046
46047
46048
46049
46050
46051
46052
46053
46054
46055
46056
46057
46058
46059
46060
46061
46062
46063
46064
46065
46066
46067
46068
46069
46070
46071
46072
46073
46074
46075
46076
46077
46078
46079
46080
46081
46082
46083
46084
46085
46086
46087
46088
46089
46090
46091
46092
46093
46094
46095
46096
46097
46098
46099
46100
46101
46102
46103
46104
46105
46106
46107
46108
46109
46110
46111
46112
46113
46114
46115
46116
46117
46118
46119
46120
46121
46122
46123
46124
46125
46126
46127
46128
46129
46130
46131
46132
46133
46134
46135
46136
46137
46138
46139
46140
46141
46142
46143
46144
46145
46146
46147
46148
46149
46150
46151
46152
46153
46154
46155
46156
46157
46158
46159
46160
46161
46162
46163
46164
46165
46166
46167
46168
46169
46170
46171
46172
46173
46174
46175
46176
46177
46178
46179
46180
46181
46182
46183
46184
46185
46186
46187
46188
46189
46190
46191
46192
46193
46194
46195
46196
46197
46198
46199
46200
46201
46202
46203
46204
46205
46206
46207
46208
46209
46210
46211
46212
46213
46214
46215
46216
46217
46218
46219
46220
46221
46222
46223
46224
46225
46226
46227
46228
46229
46230
46231
46232
46233
46234
46235
46236
46237
46238
46239
46240
46241
46242
46243
46244
46245
46246
46247
46248
46249
46250
46251
46252
46253
46254
46255
46256
46257
46258
46259
46260
46261
46262
46263
46264
46265
46266
46267
46268
46269
46270
46271
46272
46273
46274
46275
46276
46277
46278
46279
46280
46281
46282
46283
46284
46285
46286
46287
46288
46289
46290
46291
46292
46293
46294
46295
46296
46297
46298
46299
46300
46301
46302
46303
46304
46305
46306
46307
46308
46309
46310
46311
46312
46313
46314
46315
46316
46317
46318
46319
46320
46321
46322
46323
46324
46325
46326
46327
46328
46329
46330
46331
46332
46333
46334
46335
46336
46337
46338
46339
46340
46341
46342
46343
46344
46345
46346
46347
46348
46349
46350
46351
46352
46353
46354
46355
46356
46357
46358
46359
46360
46361
46362
46363
46364
46365
46366
46367
46368
46369
46370
46371
46372
46373
46374
46375
46376
46377
46378
46379
46380
46381
46382
46383
46384
46385
46386
46387
46388
46389
46390
46391
46392
46393
46394
46395
46396
46397
46398
46399
46400
46401
46402
46403
46404
46405
46406
46407
46408
46409
46410
46411
46412
46413
46414
46415
46416
46417
46418
46419
46420
46421
46422
46423
46424
46425
46426
46427
46428
46429
46430
46431
46432
46433
46434
46435
46436
46437
46438
46439
46440
46441
46442
46443
46444
46445
46446
46447
46448
46449
46450
46451
46452
46453
46454
46455
46456
46457
46458
46459
46460
46461
46462
46463
46464
46465
46466
46467
46468
46469
46470
46471
46472
46473
46474
46475
46476
46477
46478
46479
46480
46481
46482
46483
46484
46485
46486
46487
46488
46489
46490
46491
46492
46493
46494
46495
46496
46497
46498
46499
46500
46501
46502
46503
46504
46505
46506
46507
46508
46509
46510
46511
46512
46513
46514
46515
46516
46517
46518
46519
46520
46521
46522
46523
46524
46525
46526
46527
46528
46529
46530
46531
46532
46533
46534
46535
46536
46537
46538
46539
46540
46541
46542
46543
46544
46545
46546
46547
46548
46549
46550
46551
46552
46553
46554
46555
46556
46557
46558
46559
46560
46561
46562
46563
46564
46565
46566
46567
46568
46569
46570
46571
46572
46573
46574
46575
46576
46577
46578
46579
46580
46581
46582
46583
46584
46585
46586
46587
46588
46589
46590
46591
46592
46593
46594
46595
46596
46597
46598
46599
46600
46601
46602
46603
46604
46605
46606
46607
46608
46609
46610
46611
46612
46613
46614
46615
46616
46617
46618
46619
46620
46621
46622
46623
46624
46625
46626
46627
46628
46629
46630
46631
46632
46633
46634
46635
46636
46637
46638
46639
46640
46641
46642
46643
46644
46645
46646
46647
46648
46649
46650
46651
46652
46653
46654
46655
46656
46657
46658
46659
46660
46661
46662
46663
46664
46665
46666
46667
46668
46669
46670
46671
46672
46673
46674
46675
46676
46677
46678
46679
46680
46681
46682
46683
46684
46685
46686
46687
46688
46689
46690
46691
46692
46693
46694
46695
46696
46697
46698
46699
46700
46701
46702
46703
46704
46705
46706
46707
46708
46709
46710
46711
46712
46713
46714
46715
46716
46717
46718
46719
46720
46721
46722
46723
46724
46725
46726
46727
46728
46729
46730
46731
46732
46733
46734
46735
46736
46737
46738
46739
46740
46741
46742
46743
46744
46745
46746
46747
46748
46749
46750
46751
46752
46753
46754
46755
46756
46757
46758
46759
46760
46761
46762
46763
46764
46765
46766
46767
46768
46769
46770
46771
46772
46773
46774
46775
46776
46777
46778
46779
46780
46781
46782
46783
46784
46785
46786
46787
46788
46789
46790
46791
46792
46793
46794
46795
46796
46797
46798
46799
46800
46801
46802
46803
46804
46805
46806
46807
46808
46809
46810
46811
46812
46813
46814
46815
46816
46817
46818
46819
46820
46821
46822
46823
46824
46825
46826
46827
46828
46829
46830
46831
46832
46833
46834
46835
46836
46837
46838
46839
46840
46841
46842
46843
46844
46845
46846
46847
46848
46849
46850
46851
46852
46853
46854
46855
46856
46857
46858
46859
46860
46861
46862
46863
46864
46865
46866
46867
46868
46869
46870
46871
46872
46873
46874
46875
46876
46877
46878
46879
46880
46881
46882
46883
46884
46885
46886
46887
46888
46889
46890
46891
46892
46893
46894
46895
46896
46897
46898
46899
46900
46901
46902
46903
46904
46905
46906
46907
46908
46909
46910
46911
46912
46913
46914
46915
46916
46917
46918
46919
46920
46921
46922
46923
46924
46925
46926
46927
46928
46929
46930
46931
46932
46933
46934
46935
46936
46937
46938
46939
46940
46941
46942
46943
46944
46945
46946
46947
46948
46949
46950
46951
46952
46953
46954
46955
46956
46957
46958
46959
46960
46961
46962
46963
46964
46965
46966
46967
46968
46969
46970
46971
46972
46973
46974
46975
46976
46977
46978
46979
46980
46981
46982
46983
46984
46985
46986
46987
46988
46989
46990
46991
46992
46993
46994
46995
46996
46997
46998
46999
47000
47001
47002
47003
47004
47005
47006
47007
47008
47009
47010
47011
47012
47013
47014
47015
47016
47017
47018
47019
47020
47021
47022
47023
47024
47025
47026
47027
47028
47029
47030
47031
47032
47033
47034
47035
47036
47037
47038
47039
47040
47041
47042
47043
47044
47045
47046
47047
47048
47049
47050
47051
47052
47053
47054
47055
47056
47057
47058
47059
47060
47061
47062
47063
47064
47065
47066
47067
47068
47069
47070
47071
47072
47073
47074
47075
47076
47077
47078
47079
47080
47081
47082
47083
47084
47085
47086
47087
47088
47089
47090
47091
47092
47093
47094
47095
47096
47097
47098
47099
47100
47101
47102
47103
47104
47105
47106
47107
47108
47109
47110
47111
47112
47113
47114
47115
47116
47117
47118
47119
47120
47121
47122
47123
47124
47125
47126
47127
47128
47129
47130
47131
47132
47133
47134
47135
47136
47137
47138
47139
47140
47141
47142
47143
47144
47145
47146
47147
47148
47149
47150
47151
47152
47153
47154
47155
47156
47157
47158
47159
47160
47161
47162
47163
47164
47165
47166
47167
47168
47169
47170
47171
47172
47173
47174
47175
47176
47177
47178
47179
47180
47181
47182
47183
47184
47185
47186
47187
47188
47189
47190
47191
47192
47193
47194
47195
47196
47197
47198
47199
47200
47201
47202
47203
47204
47205
47206
47207
47208
47209
47210
47211
47212
47213
47214
47215
47216
47217
47218
47219
47220
47221
47222
47223
47224
47225
47226
47227
47228
47229
47230
47231
47232
47233
47234
47235
47236
47237
47238
47239
47240
47241
47242
47243
47244
47245
47246
47247
47248
47249
47250
47251
47252
47253
47254
47255
47256
47257
47258
47259
47260
47261
47262
47263
47264
47265
47266
47267
47268
47269
47270
47271
47272
47273
47274
47275
47276
47277
47278
47279
47280
47281
47282
47283
47284
47285
47286
47287
47288
47289
47290
47291
47292
47293
47294
47295
47296
47297
47298
47299
47300
47301
47302
47303
47304
47305
47306
47307
47308
47309
47310
47311
47312
47313
47314
47315
47316
47317
47318
47319
47320
47321
47322
47323
47324
47325
47326
47327
47328
47329
47330
47331
47332
47333
47334
47335
47336
47337
47338
47339
47340
47341
47342
47343
47344
47345
47346
47347
47348
47349
47350
47351
47352
47353
47354
47355
47356
47357
47358
47359
47360
47361
47362
47363
47364
47365
47366
47367
47368
47369
47370
47371
47372
47373
47374
47375
47376
47377
47378
47379
47380
47381
47382
47383
47384
47385
47386
47387
47388
47389
47390
47391
47392
47393
47394
47395
47396
47397
47398
47399
47400
47401
47402
47403
47404
47405
47406
47407
47408
47409
47410
47411
47412
47413
47414
47415
47416
47417
47418
47419
47420
47421
47422
47423
47424
47425
47426
47427
47428
47429
47430
47431
47432
47433
47434
47435
47436
47437
47438
47439
47440
47441
47442
47443
47444
47445
47446
47447
47448
47449
47450
47451
47452
47453
47454
47455
47456
47457
47458
47459
47460
47461
47462
47463
47464
47465
47466
47467
47468
47469
47470
47471
47472
47473
47474
47475
47476
47477
47478
47479
47480
47481
47482
47483
47484
47485
47486
47487
47488
47489
47490
47491
47492
47493
47494
47495
47496
47497
47498
47499
47500
47501
47502
47503
47504
47505
47506
47507
47508
47509
47510
47511
47512
47513
47514
47515
47516
47517
47518
47519
47520
47521
47522
47523
47524
47525
47526
47527
47528
47529
47530
47531
47532
47533
47534
47535
47536
47537
47538
47539
47540
47541
47542
47543
47544
47545
47546
47547
47548
47549
47550
47551
47552
47553
47554
47555
47556
47557
47558
47559
47560
47561
47562
47563
47564
47565
47566
47567
47568
47569
47570
47571
47572
47573
47574
47575
47576
47577
47578
47579
47580
47581
47582
47583
47584
47585
47586
47587
47588
47589
47590
47591
47592
47593
47594
47595
47596
47597
47598
47599
47600
47601
47602
47603
47604
47605
47606
47607
47608
47609
47610
47611
47612
47613
47614
47615
47616
47617
47618
47619
47620
47621
47622
47623
47624
47625
47626
47627
47628
47629
47630
47631
47632
47633
47634
47635
47636
47637
47638
47639
47640
47641
47642
47643
47644
47645
47646
47647
47648
47649
47650
47651
47652
47653
47654
47655
47656
47657
47658
47659
47660
47661
47662
47663
47664
47665
47666
47667
47668
47669
47670
47671
47672
47673
47674
47675
47676
47677
47678
47679
47680
47681
47682
47683
47684
47685
47686
47687
47688
47689
47690
47691
47692
47693
47694
47695
47696
47697
47698
47699
47700
47701
47702
47703
47704
47705
47706
47707
47708
47709
47710
47711
47712
47713
47714
47715
47716
47717
47718
47719
47720
47721
47722
47723
47724
47725
47726
47727
47728
47729
47730
47731
47732
47733
47734
47735
47736
47737
47738
47739
47740
47741
47742
47743
47744
47745
47746
47747
47748
47749
47750
47751
47752
47753
47754
47755
47756
47757
47758
47759
47760
47761
47762
47763
47764
47765
47766
47767
47768
47769
47770
47771
47772
47773
47774
47775
47776
47777
47778
47779
47780
47781
47782
47783
47784
47785
47786
47787
47788
47789
47790
47791
47792
47793
47794
47795
47796
47797
47798
47799
47800
47801
47802
47803
47804
47805
47806
47807
47808
47809
47810
47811
47812
47813
47814
47815
47816
47817
47818
47819
47820
47821
47822
47823
47824
47825
47826
47827
47828
47829
47830
47831
47832
47833
47834
47835
47836
47837
47838
47839
47840
47841
47842
47843
47844
47845
47846
47847
47848
47849
47850
47851
47852
47853
47854
47855
47856
47857
47858
47859
47860
47861
47862
47863
47864
47865
47866
47867
47868
47869
47870
47871
47872
47873
47874
47875
47876
47877
47878
47879
47880
47881
47882
47883
47884
47885
47886
47887
47888
47889
47890
47891
47892
47893
47894
47895
47896
47897
47898
47899
47900
47901
47902
47903
47904
47905
47906
47907
47908
47909
47910
47911
47912
47913
47914
47915
47916
47917
47918
47919
47920
47921
47922
47923
47924
47925
47926
47927
47928
47929
47930
47931
47932
47933
47934
47935
47936
47937
47938
47939
47940
47941
47942
47943
47944
47945
47946
47947
47948
47949
47950
47951
47952
47953
47954
47955
47956
47957
47958
47959
47960
47961
47962
47963
47964
47965
47966
47967
47968
47969
47970
47971
47972
47973
47974
47975
47976
47977
47978
47979
47980
47981
47982
47983
47984
47985
47986
47987
47988
47989
47990
47991
47992
47993
47994
47995
47996
47997
47998
47999
48000
48001
48002
48003
48004
48005
48006
48007
48008
48009
48010
48011
48012
48013
48014
48015
48016
48017
48018
48019
48020
48021
48022
48023
48024
48025
48026
48027
48028
48029
48030
48031
48032
48033
48034
48035
48036
48037
48038
48039
48040
48041
48042
48043
48044
48045
48046
48047
48048
48049
48050
48051
48052
48053
48054
48055
48056
48057
48058
48059
48060
48061
48062
48063
48064
48065
48066
48067
48068
48069
48070
48071
48072
48073
48074
48075
48076
48077
48078
48079
48080
48081
48082
48083
48084
48085
48086
48087
48088
48089
48090
48091
48092
48093
48094
48095
48096
48097
48098
48099
48100
48101
48102
48103
48104
48105
48106
48107
48108
48109
48110
48111
48112
48113
48114
48115
48116
48117
48118
48119
48120
48121
48122
48123
48124
48125
48126
48127
48128
48129
48130
48131
48132
48133
48134
48135
48136
48137
48138
48139
48140
48141
48142
48143
48144
48145
48146
48147
48148
48149
48150
48151
48152
48153
48154
48155
48156
48157
48158
48159
48160
48161
48162
48163
48164
48165
48166
48167
48168
48169
48170
48171
48172
48173
48174
48175
48176
48177
48178
48179
48180
48181
48182
48183
48184
48185
48186
48187
48188
48189
48190
48191
48192
48193
48194
48195
48196
48197
48198
48199
48200
48201
48202
48203
48204
48205
48206
48207
48208
48209
48210
48211
48212
48213
48214
48215
48216
48217
48218
48219
48220
48221
48222
48223
48224
48225
48226
48227
48228
48229
48230
48231
48232
48233
48234
48235
48236
48237
48238
48239
48240
48241
48242
48243
48244
48245
48246
48247
48248
48249
48250
48251
48252
48253
48254
48255
48256
48257
48258
48259
48260
48261
48262
48263
48264
48265
48266
48267
48268
48269
48270
48271
48272
48273
48274
48275
48276
48277
48278
48279
48280
48281
48282
48283
48284
48285
48286
48287
48288
48289
48290
48291
48292
48293
48294
48295
48296
48297
48298
48299
48300
48301
48302
48303
48304
48305
48306
48307
48308
48309
48310
48311
48312
48313
48314
48315
48316
48317
48318
48319
48320
48321
48322
48323
48324
48325
48326
48327
48328
48329
48330
48331
48332
48333
48334
48335
48336
48337
48338
48339
48340
48341
48342
48343
48344
48345
48346
48347
48348
48349
48350
48351
48352
48353
48354
48355
48356
48357
48358
48359
48360
48361
48362
48363
48364
48365
48366
48367
48368
48369
48370
48371
48372
48373
48374
48375
48376
48377
48378
48379
48380
48381
48382
48383
48384
48385
48386
48387
48388
48389
48390
48391
48392
48393
48394
48395
48396
48397
48398
48399
48400
48401
48402
48403
48404
48405
48406
48407
48408
48409
48410
48411
48412
48413
48414
48415
48416
48417
48418
48419
48420
48421
48422
48423
48424
48425
48426
48427
48428
48429
48430
48431
48432
48433
48434
48435
48436
48437
48438
48439
48440
48441
48442
48443
48444
48445
48446
48447
48448
48449
48450
48451
48452
48453
48454
48455
48456
48457
48458
48459
48460
48461
48462
48463
48464
48465
48466
48467
48468
48469
48470
48471
48472
48473
48474
48475
48476
48477
48478
48479
48480
48481
48482
48483
48484
48485
48486
48487
48488
48489
48490
48491
48492
48493
48494
48495
48496
48497
48498
48499
48500
48501
48502
48503
48504
48505
48506
48507
48508
48509
48510
48511
48512
48513
48514
48515
48516
48517
48518
48519
48520
48521
48522
48523
48524
48525
48526
48527
48528
48529
48530
48531
48532
48533
48534
48535
48536
48537
48538
48539
48540
48541
48542
48543
48544
48545
48546
48547
48548
48549
48550
48551
48552
48553
48554
48555
48556
48557
48558
48559
48560
48561
48562
48563
48564
48565
48566
48567
48568
48569
48570
48571
48572
48573
48574
48575
48576
48577
48578
48579
48580
48581
48582
48583
48584
48585
48586
48587
48588
48589
48590
48591
48592
48593
48594
48595
48596
48597
48598
48599
48600
48601
48602
48603
48604
48605
48606
48607
48608
48609
48610
48611
48612
48613
48614
48615
48616
48617
48618
48619
48620
48621
48622
48623
48624
48625
48626
48627
48628
48629
48630
48631
48632
48633
48634
48635
48636
48637
48638
48639
48640
48641
48642
48643
48644
48645
48646
48647
48648
48649
48650
48651
48652
48653
48654
48655
48656
48657
48658
48659
48660
48661
48662
48663
48664
48665
48666
48667
48668
48669
48670
48671
48672
48673
48674
48675
48676
48677
48678
48679
48680
48681
48682
48683
48684
48685
48686
48687
48688
48689
48690
48691
48692
48693
48694
48695
48696
48697
48698
48699
48700
48701
48702
48703
48704
48705
48706
48707
48708
48709
48710
48711
48712
48713
48714
48715
48716
48717
48718
48719
48720
48721
48722
48723
48724
48725
48726
48727
48728
48729
48730
48731
48732
48733
48734
48735
48736
48737
48738
48739
48740
48741
48742
48743
48744
48745
48746
48747
48748
48749
48750
48751
48752
48753
48754
48755
48756
48757
48758
48759
48760
48761
48762
48763
48764
48765
48766
48767
48768
48769
48770
48771
48772
48773
48774
48775
48776
48777
48778
48779
48780
48781
48782
48783
48784
48785
48786
48787
48788
48789
48790
48791
48792
48793
48794
48795
48796
48797
48798
48799
48800
48801
48802
48803
48804
48805
48806
48807
48808
48809
48810
48811
48812
48813
48814
48815
48816
48817
48818
48819
48820
48821
48822
48823
48824
48825
48826
48827
48828
48829
48830
48831
48832
48833
48834
48835
48836
48837
48838
48839
48840
48841
48842
48843
48844
48845
48846
48847
48848
48849
48850
48851
48852
48853
48854
48855
48856
48857
48858
48859
48860
48861
48862
48863
48864
48865
48866
48867
48868
48869
48870
48871
48872
48873
48874
48875
48876
48877
48878
48879
48880
48881
48882
48883
48884
48885
48886
48887
48888
48889
48890
48891
48892
48893
48894
48895
48896
48897
48898
48899
48900
48901
48902
48903
48904
48905
48906
48907
48908
48909
48910
48911
48912
48913
48914
48915
48916
48917
48918
48919
48920
48921
48922
48923
48924
48925
48926
48927
48928
48929
48930
48931
48932
48933
48934
48935
48936
48937
48938
48939
48940
48941
48942
48943
48944
48945
48946
48947
48948
48949
48950
48951
48952
48953
48954
48955
48956
48957
48958
48959
48960
48961
48962
48963
48964
48965
48966
48967
48968
48969
48970
48971
48972
48973
48974
48975
48976
48977
48978
48979
48980
48981
48982
48983
48984
48985
48986
48987
48988
48989
48990
48991
48992
48993
48994
48995
48996
48997
48998
48999
49000
49001
49002
49003
49004
49005
49006
49007
49008
49009
49010
49011
49012
49013
49014
49015
49016
49017
49018
49019
49020
49021
49022
49023
49024
49025
49026
49027
49028
49029
49030
49031
49032
49033
49034
49035
49036
49037
49038
49039
49040
49041
49042
49043
49044
49045
49046
49047
49048
49049
49050
49051
49052
49053
49054
49055
49056
49057
49058
49059
49060
49061
49062
49063
49064
49065
49066
49067
49068
49069
49070
49071
49072
49073
49074
49075
49076
49077
49078
49079
49080
49081
49082
49083
49084
49085
49086
49087
49088
49089
49090
49091
49092
49093
49094
49095
49096
49097
49098
49099
49100
49101
49102
49103
49104
49105
49106
49107
49108
49109
49110
49111
49112
49113
49114
49115
49116
49117
49118
49119
49120
49121
49122
49123
49124
49125
49126
49127
49128
49129
49130
49131
49132
49133
49134
49135
49136
49137
49138
49139
49140
49141
49142
49143
49144
49145
49146
49147
49148
49149
49150
49151
49152
49153
49154
49155
49156
49157
49158
49159
49160
49161
49162
49163
49164
49165
49166
49167
49168
49169
49170
49171
49172
49173
49174
49175
49176
49177
49178
49179
49180
49181
49182
49183
49184
49185
49186
49187
49188
49189
49190
49191
49192
49193
49194
49195
49196
49197
49198
49199
49200
49201
49202
49203
49204
49205
49206
49207
49208
49209
49210
49211
49212
49213
49214
49215
49216
49217
49218
49219
49220
49221
49222
49223
49224
49225
49226
49227
49228
49229
49230
49231
49232
49233
49234
49235
49236
49237
49238
49239
49240
49241
49242
49243
49244
49245
49246
49247
49248
49249
49250
49251
49252
49253
49254
49255
49256
49257
49258
49259
49260
49261
49262
49263
49264
49265
49266
49267
49268
49269
49270
49271
49272
49273
49274
49275
49276
49277
49278
49279
49280
49281
49282
49283
49284
49285
49286
49287
49288
49289
49290
49291
49292
49293
49294
49295
49296
49297
49298
49299
49300
49301
49302
49303
49304
49305
49306
49307
49308
49309
49310
49311
49312
49313
49314
49315
49316
49317
49318
49319
49320
49321
49322
49323
49324
49325
49326
49327
49328
49329
49330
49331
49332
49333
49334
49335
49336
49337
49338
49339
49340
49341
49342
49343
49344
49345
49346
49347
49348
49349
49350
49351
49352
49353
49354
49355
49356
49357
49358
49359
49360
49361
49362
49363
49364
49365
49366
49367
49368
49369
49370
49371
49372
49373
49374
49375
49376
49377
49378
49379
49380
49381
49382
49383
49384
49385
49386
49387
49388
49389
49390
49391
49392
49393
49394
49395
49396
49397
49398
49399
49400
49401
49402
49403
49404
49405
49406
49407
49408
49409
49410
49411
49412
49413
49414
49415
49416
49417
49418
49419
49420
49421
49422
49423
49424
49425
49426
49427
49428
49429
49430
49431
49432
49433
49434
49435
49436
49437
49438
49439
49440
49441
49442
49443
49444
49445
49446
49447
49448
49449
49450
49451
49452
49453
49454
49455
49456
49457
49458
49459
49460
49461
49462
49463
49464
49465
49466
49467
49468
49469
49470
49471
49472
49473
49474
49475
49476
49477
49478
49479
49480
49481
49482
49483
49484
49485
49486
49487
49488
49489
49490
49491
49492
49493
49494
49495
49496
49497
49498
49499
49500
49501
49502
49503
49504
49505
49506
49507
49508
49509
49510
49511
49512
49513
49514
49515
49516
49517
49518
49519
49520
49521
49522
49523
49524
49525
49526
49527
49528
49529
49530
49531
49532
49533
49534
49535
49536
49537
49538
49539
49540
49541
49542
49543
49544
49545
49546
49547
49548
49549
49550
49551
49552
49553
49554
49555
49556
49557
49558
49559
49560
49561
49562
49563
49564
49565
49566
49567
49568
49569
49570
49571
49572
49573
49574
49575
49576
49577
49578
49579
49580
49581
49582
49583
49584
49585
49586
49587
49588
49589
49590
49591
49592
49593
49594
49595
49596
49597
49598
49599
49600
49601
49602
49603
49604
49605
49606
49607
49608
49609
49610
49611
49612
49613
49614
49615
49616
49617
49618
49619
49620
49621
49622
49623
49624
49625
49626
49627
49628
49629
49630
49631
49632
49633
49634
49635
49636
49637
49638
49639
49640
49641
49642
49643
49644
49645
49646
49647
49648
49649
49650
49651
49652
49653
49654
49655
49656
49657
49658
49659
49660
49661
49662
49663
49664
49665
49666
49667
49668
49669
49670
49671
49672
49673
49674
49675
49676
49677
49678
49679
49680
49681
49682
49683
49684
49685
49686
49687
49688
49689
49690
49691
49692
49693
49694
49695
49696
49697
49698
49699
49700
49701
49702
49703
49704
49705
49706
49707
49708
49709
49710
49711
49712
49713
49714
49715
49716
49717
49718
49719
49720
49721
49722
49723
49724
49725
49726
49727
49728
49729
49730
49731
49732
49733
49734
49735
49736
49737
49738
49739
49740
49741
49742
49743
49744
49745
49746
49747
49748
49749
49750
49751
49752
49753
49754
49755
49756
49757
49758
49759
49760
49761
49762
49763
49764
49765
49766
49767
49768
49769
49770
49771
49772
49773
49774
49775
49776
49777
49778
49779
49780
49781
49782
49783
49784
49785
49786
49787
49788
49789
49790
49791
49792
49793
49794
49795
49796
49797
49798
49799
49800
49801
49802
49803
49804
49805
49806
49807
49808
49809
49810
49811
49812
49813
49814
49815
49816
49817
49818
49819
49820
49821
49822
49823
49824
49825
49826
49827
49828
49829
49830
49831
49832
49833
49834
49835
49836
49837
49838
49839
49840
49841
49842
49843
49844
49845
49846
49847
49848
49849
49850
49851
49852
49853
49854
49855
49856
49857
49858
49859
49860
49861
49862
49863
49864
49865
49866
49867
49868
49869
49870
49871
49872
49873
49874
49875
49876
49877
49878
49879
49880
49881
49882
49883
49884
49885
49886
49887
49888
49889
49890
49891
49892
49893
49894
49895
49896
49897
49898
49899
49900
49901
49902
49903
49904
49905
49906
49907
49908
49909
49910
49911
49912
49913
49914
49915
49916
49917
49918
49919
49920
49921
49922
49923
49924
49925
49926
49927
49928
49929
49930
49931
49932
49933
49934
49935
49936
49937
49938
49939
49940
49941
49942
49943
49944
49945
49946
49947
49948
49949
49950
49951
49952
49953
49954
49955
49956
49957
49958
49959
49960
49961
49962
49963
49964
49965
49966
49967
49968
49969
49970
49971
49972
49973
49974
49975
49976
49977
49978
49979
49980
49981
49982
49983
49984
49985
49986
49987
49988
49989
49990
49991
49992
49993
49994
49995
49996
49997
49998
49999
50000
50001
50002
50003
50004
50005
50006
50007
50008
50009
50010
50011
50012
50013
50014
50015
50016
50017
50018
50019
50020
50021
50022
50023
50024
50025
50026
50027
50028
50029
50030
50031
50032
50033
50034
50035
50036
50037
50038
50039
50040
50041
50042
50043
50044
50045
50046
50047
50048
50049
50050
50051
50052
50053
50054
50055
50056
50057
50058
50059
50060
50061
50062
50063
50064
50065
50066
50067
50068
50069
50070
50071
50072
50073
50074
50075
50076
50077
50078
50079
50080
50081
50082
50083
50084
50085
50086
50087
50088
50089
50090
50091
50092
50093
50094
50095
50096
50097
50098
50099
50100
50101
50102
50103
50104
50105
50106
50107
50108
50109
50110
50111
50112
50113
50114
50115
50116
50117
50118
50119
50120
50121
50122
50123
50124
50125
50126
50127
50128
50129
50130
50131
50132
50133
50134
50135
50136
50137
50138
50139
50140
50141
50142
50143
50144
50145
50146
50147
50148
50149
50150
50151
50152
50153
50154
50155
50156
50157
50158
50159
50160
50161
50162
50163
50164
50165
50166
50167
50168
50169
50170
50171
50172
50173
50174
50175
50176
50177
50178
50179
50180
50181
50182
50183
50184
50185
50186
50187
50188
50189
50190
50191
50192
50193
50194
50195
50196
50197
50198
50199
50200
50201
50202
50203
50204
50205
50206
50207
50208
50209
50210
50211
50212
50213
50214
50215
50216
50217
50218
50219
50220
50221
50222
50223
50224
50225
50226
50227
50228
50229
50230
50231
50232
50233
50234
50235
50236
50237
50238
50239
50240
50241
50242
50243
50244
50245
50246
50247
50248
50249
50250
50251
50252
50253
50254
50255
50256
50257
50258
50259
50260
50261
50262
50263
50264
50265
50266
50267
50268
50269
50270
50271
50272
50273
50274
50275
50276
50277
50278
50279
50280
50281
50282
50283
50284
50285
50286
50287
50288
50289
50290
50291
50292
50293
50294
50295
50296
50297
50298
50299
50300
50301
50302
50303
50304
50305
50306
50307
50308
50309
50310
50311
50312
50313
50314
50315
50316
50317
50318
50319
50320
50321
50322
50323
50324
50325
50326
50327
50328
50329
50330
50331
50332
50333
50334
50335
50336
50337
50338
50339
50340
50341
50342
50343
50344
50345
50346
50347
50348
50349
50350
50351
50352
50353
50354
50355
50356
50357
50358
50359
50360
50361
50362
50363
50364
50365
50366
50367
50368
50369
50370
50371
50372
50373
50374
50375
50376
50377
50378
50379
50380
50381
50382
50383
50384
50385
50386
50387
50388
50389
50390
50391
50392
50393
50394
50395
50396
50397
50398
50399
50400
50401
50402
50403
50404
50405
50406
50407
50408
50409
50410
50411
50412
50413
50414
50415
50416
50417
50418
50419
50420
50421
50422
50423
50424
50425
50426
50427
50428
50429
50430
50431
50432
50433
50434
50435
50436
50437
50438
50439
50440
50441
50442
50443
50444
50445
50446
50447
50448
50449
50450
50451
50452
50453
50454
50455
50456
50457
50458
50459
50460
50461
50462
50463
50464
50465
50466
50467
50468
50469
50470
50471
50472
50473
50474
50475
50476
50477
50478
50479
50480
50481
50482
50483
50484
50485
50486
50487
50488
50489
50490
50491
50492
50493
50494
50495
50496
50497
50498
50499
50500
50501
50502
50503
50504
50505
50506
50507
50508
50509
50510
50511
50512
50513
50514
50515
50516
50517
50518
50519
50520
50521
50522
50523
50524
50525
50526
50527
50528
50529
50530
50531
50532
50533
50534
50535
50536
50537
50538
50539
50540
50541
50542
50543
50544
50545
50546
50547
50548
50549
50550
50551
50552
50553
50554
50555
50556
50557
50558
50559
50560
50561
50562
50563
50564
50565
50566
50567
50568
50569
50570
50571
50572
50573
50574
50575
50576
50577
50578
50579
50580
50581
50582
50583
50584
50585
50586
50587
50588
50589
50590
50591
50592
50593
50594
50595
50596
50597
50598
50599
50600
50601
50602
50603
50604
50605
50606
50607
50608
50609
50610
50611
50612
50613
50614
50615
50616
50617
50618
50619
50620
50621
50622
50623
50624
50625
50626
50627
50628
50629
50630
50631
50632
50633
50634
50635
50636
50637
50638
50639
50640
50641
50642
50643
50644
50645
50646
50647
50648
50649
50650
50651
50652
50653
50654
50655
50656
50657
50658
50659
50660
50661
50662
50663
50664
50665
50666
50667
50668
50669
50670
50671
50672
50673
50674
50675
50676
50677
50678
50679
50680
50681
50682
50683
50684
50685
50686
50687
50688
50689
50690
50691
50692
50693
50694
50695
50696
50697
50698
50699
50700
50701
50702
50703
50704
50705
50706
50707
50708
50709
50710
50711
50712
50713
50714
50715
50716
50717
50718
50719
50720
50721
50722
50723
50724
50725
50726
50727
50728
50729
50730
50731
50732
50733
50734
50735
50736
50737
50738
50739
50740
50741
50742
50743
50744
50745
50746
50747
50748
50749
50750
50751
50752
50753
50754
50755
50756
50757
50758
50759
50760
50761
50762
50763
50764
50765
50766
50767
50768
50769
50770
50771
50772
50773
50774
50775
50776
50777
50778
50779
50780
50781
50782
50783
50784
50785
50786
50787
50788
50789
50790
50791
50792
50793
50794
50795
50796
50797
50798
50799
50800
50801
50802
50803
50804
50805
50806
50807
50808
50809
50810
50811
50812
50813
50814
50815
50816
50817
50818
50819
50820
50821
50822
50823
50824
50825
50826
50827
50828
50829
50830
50831
50832
50833
50834
50835
50836
50837
50838
50839
50840
50841
50842
50843
50844
50845
50846
50847
50848
50849
50850
50851
50852
50853
50854
50855
50856
50857
50858
50859
50860
50861
50862
50863
50864
50865
50866
50867
50868
50869
50870
50871
50872
50873
50874
50875
50876
50877
50878
50879
50880
50881
50882
50883
50884
50885
50886
50887
50888
50889
50890
50891
50892
50893
50894
50895
50896
50897
50898
50899
50900
50901
50902
50903
50904
50905
50906
50907
50908
50909
50910
50911
50912
50913
50914
50915
50916
50917
50918
50919
50920
50921
50922
50923
50924
50925
50926
50927
50928
50929
50930
50931
50932
50933
50934
50935
50936
50937
50938
50939
50940
50941
50942
50943
50944
50945
50946
50947
50948
50949
50950
50951
50952
50953
50954
50955
50956
50957
50958
50959
50960
50961
50962
50963
50964
50965
50966
50967
50968
50969
50970
50971
50972
50973
50974
50975
50976
50977
50978
50979
50980
50981
50982
50983
50984
50985
50986
50987
50988
50989
50990
50991
50992
50993
50994
50995
50996
50997
50998
50999
51000
51001
51002
51003
51004
51005
51006
51007
51008
51009
51010
51011
51012
51013
51014
51015
51016
51017
51018
51019
51020
51021
51022
51023
51024
51025
51026
51027
51028
51029
51030
51031
51032
51033
51034
51035
51036
51037
51038
51039
51040
51041
51042
51043
51044
51045
51046
51047
51048
51049
51050
51051
51052
51053
51054
51055
51056
51057
51058
51059
51060
51061
51062
51063
51064
51065
51066
51067
51068
51069
51070
51071
51072
51073
51074
51075
51076
51077
51078
51079
51080
51081
51082
51083
51084
51085
51086
51087
51088
51089
51090
51091
51092
51093
51094
51095
51096
51097
51098
51099
51100
51101
51102
51103
51104
51105
51106
51107
51108
51109
51110
51111
51112
51113
51114
51115
51116
51117
51118
51119
51120
51121
51122
51123
51124
51125
51126
51127
51128
51129
51130
51131
51132
51133
51134
51135
51136
51137
51138
51139
51140
51141
51142
51143
51144
51145
51146
51147
51148
51149
51150
51151
51152
51153
51154
51155
51156
51157
51158
51159
51160
51161
51162
51163
51164
51165
51166
51167
51168
51169
51170
51171
51172
51173
51174
51175
51176
51177
51178
51179
51180
51181
51182
51183
51184
51185
51186
51187
51188
51189
51190
51191
51192
51193
51194
51195
51196
51197
51198
51199
51200
51201
51202
51203
51204
51205
51206
51207
51208
51209
51210
51211
51212
51213
51214
51215
51216
51217
51218
51219
51220
51221
51222
51223
51224
51225
51226
51227
51228
51229
51230
51231
51232
51233
51234
51235
51236
51237
51238
51239
51240
51241
51242
51243
51244
51245
51246
51247
51248
51249
51250
51251
51252
51253
51254
51255
51256
51257
51258
51259
51260
51261
51262
51263
51264
51265
51266
51267
51268
51269
51270
51271
51272
51273
51274
51275
51276
51277
51278
51279
51280
51281
51282
51283
51284
51285
51286
51287
51288
51289
51290
51291
51292
51293
51294
51295
51296
51297
51298
51299
51300
51301
51302
51303
51304
51305
51306
51307
51308
51309
51310
51311
51312
51313
51314
51315
51316
51317
51318
51319
51320
51321
51322
51323
51324
51325
51326
51327
51328
51329
51330
51331
51332
51333
51334
51335
51336
51337
51338
51339
51340
51341
51342
51343
51344
51345
51346
51347
51348
51349
51350
51351
51352
51353
51354
51355
51356
51357
51358
51359
51360
51361
51362
51363
51364
51365
51366
51367
51368
51369
51370
51371
51372
51373
51374
51375
51376
51377
51378
51379
51380
51381
51382
51383
51384
51385
51386
51387
51388
51389
51390
51391
51392
51393
51394
51395
51396
51397
51398
51399
51400
51401
51402
51403
51404
51405
51406
51407
51408
51409
51410
51411
51412
51413
51414
51415
51416
51417
51418
51419
51420
51421
51422
51423
51424
51425
51426
51427
51428
51429
51430
51431
51432
51433
51434
51435
51436
51437
51438
51439
51440
51441
51442
51443
51444
51445
51446
51447
51448
51449
51450
51451
51452
51453
51454
51455
51456
51457
51458
51459
51460
51461
51462
51463
51464
51465
51466
51467
51468
51469
51470
51471
51472
51473
51474
51475
51476
51477
51478
51479
51480
51481
51482
51483
51484
51485
51486
51487
51488
51489
51490
51491
51492
51493
51494
51495
51496
51497
51498
51499
51500
51501
51502
51503
51504
51505
51506
51507
51508
51509
51510
51511
51512
51513
51514
51515
51516
51517
51518
51519
51520
51521
51522
51523
51524
51525
51526
51527
51528
51529
51530
51531
51532
51533
51534
51535
51536
51537
51538
51539
51540
51541
51542
51543
51544
51545
51546
51547
51548
51549
51550
51551
51552
51553
51554
51555
51556
51557
51558
51559
51560
51561
51562
51563
51564
51565
51566
51567
51568
51569
51570
51571
51572
51573
51574
51575
51576
51577
51578
51579
51580
51581
51582
51583
51584
51585
51586
51587
51588
51589
51590
51591
51592
51593
51594
51595
51596
51597
51598
51599
51600
51601
51602
51603
51604
51605
51606
51607
51608
51609
51610
51611
51612
51613
51614
51615
51616
51617
51618
51619
51620
51621
51622
51623
51624
51625
51626
51627
51628
51629
51630
51631
51632
51633
51634
51635
51636
51637
51638
51639
51640
51641
51642
51643
51644
51645
51646
51647
51648
51649
51650
51651
51652
51653
51654
51655
51656
51657
51658
51659
51660
51661
51662
51663
51664
51665
51666
51667
51668
51669
51670
51671
51672
51673
51674
51675
51676
51677
51678
51679
51680
51681
51682
51683
51684
51685
51686
51687
51688
51689
51690
51691
51692
51693
51694
51695
51696
51697
51698
51699
51700
51701
51702
51703
51704
51705
51706
51707
51708
51709
51710
51711
51712
51713
51714
51715
51716
51717
51718
51719
51720
51721
51722
51723
51724
51725
51726
51727
51728
51729
51730
51731
51732
51733
51734
51735
51736
51737
51738
51739
51740
51741
51742
51743
51744
51745
51746
51747
51748
51749
51750
51751
51752
51753
51754
51755
51756
51757
51758
51759
51760
51761
51762
51763
51764
51765
51766
51767
51768
51769
51770
51771
51772
51773
51774
51775
51776
51777
51778
51779
51780
51781
51782
51783
51784
51785
51786
51787
51788
51789
51790
51791
51792
51793
51794
51795
51796
51797
51798
51799
51800
51801
51802
51803
51804
51805
51806
51807
51808
51809
51810
51811
51812
51813
51814
51815
51816
51817
51818
51819
51820
51821
51822
51823
51824
51825
51826
51827
51828
51829
51830
51831
51832
51833
51834
51835
51836
51837
51838
51839
51840
51841
51842
51843
51844
51845
51846
51847
51848
51849
51850
51851
51852
51853
51854
51855
51856
51857
51858
51859
51860
51861
51862
51863
51864
51865
51866
51867
51868
51869
51870
51871
51872
51873
51874
51875
51876
51877
51878
51879
51880
51881
51882
51883
51884
51885
51886
51887
51888
51889
51890
51891
51892
51893
51894
51895
51896
51897
51898
51899
51900
51901
51902
51903
51904
51905
51906
51907
51908
51909
51910
51911
51912
51913
51914
51915
51916
51917
51918
51919
51920
51921
51922
51923
51924
51925
51926
51927
51928
51929
51930
51931
51932
51933
51934
51935
51936
51937
51938
51939
51940
51941
51942
51943
51944
51945
51946
51947
51948
51949
51950
51951
51952
51953
51954
51955
51956
51957
51958
51959
51960
51961
51962
51963
51964
51965
51966
51967
51968
51969
51970
51971
51972
51973
51974
51975
51976
51977
51978
51979
51980
51981
51982
51983
51984
51985
51986
51987
51988
51989
51990
51991
51992
51993
51994
51995
51996
51997
51998
51999
52000
52001
52002
52003
52004
52005
52006
52007
52008
52009
52010
52011
52012
52013
52014
52015
52016
52017
52018
52019
52020
52021
52022
52023
52024
52025
52026
52027
52028
52029
52030
52031
52032
52033
52034
52035
52036
52037
52038
52039
52040
52041
52042
52043
52044
52045
52046
52047
52048
52049
52050
52051
52052
52053
52054
52055
52056
52057
52058
52059
52060
52061
52062
52063
52064
52065
52066
52067
52068
52069
52070
52071
52072
52073
52074
52075
52076
52077
52078
52079
52080
52081
52082
52083
52084
52085
52086
52087
52088
52089
52090
52091
52092
52093
52094
52095
52096
52097
52098
52099
52100
52101
52102
52103
52104
52105
52106
52107
52108
52109
52110
52111
52112
52113
52114
52115
52116
52117
52118
52119
52120
52121
52122
52123
52124
52125
52126
52127
52128
52129
52130
52131
52132
52133
52134
52135
52136
52137
52138
52139
52140
52141
52142
52143
52144
52145
52146
52147
52148
52149
52150
52151
52152
52153
52154
52155
52156
52157
52158
52159
52160
52161
52162
52163
52164
52165
52166
52167
52168
52169
52170
52171
52172
52173
52174
52175
52176
52177
52178
52179
52180
52181
52182
52183
52184
52185
52186
52187
52188
52189
52190
52191
52192
52193
52194
52195
52196
52197
52198
52199
52200
52201
52202
52203
52204
52205
52206
52207
52208
52209
52210
52211
52212
52213
52214
52215
52216
52217
52218
52219
52220
52221
52222
52223
52224
52225
52226
52227
52228
52229
52230
52231
52232
52233
52234
52235
52236
52237
52238
52239
52240
52241
52242
52243
52244
52245
52246
52247
52248
52249
52250
52251
52252
52253
52254
52255
52256
52257
52258
52259
52260
52261
52262
52263
52264
52265
52266
52267
52268
52269
52270
52271
52272
52273
52274
52275
52276
52277
52278
52279
52280
52281
52282
52283
52284
52285
52286
52287
52288
52289
52290
52291
52292
52293
52294
52295
52296
52297
52298
52299
52300
52301
52302
52303
52304
52305
52306
52307
52308
52309
52310
52311
52312
52313
52314
52315
52316
52317
52318
52319
52320
52321
52322
52323
52324
52325
52326
52327
52328
52329
52330
52331
52332
52333
52334
52335
52336
52337
52338
52339
52340
52341
52342
52343
52344
52345
52346
52347
52348
52349
52350
52351
52352
52353
52354
52355
52356
52357
52358
52359
52360
52361
52362
52363
52364
52365
52366
52367
52368
52369
52370
52371
52372
52373
52374
52375
52376
52377
52378
52379
52380
52381
52382
52383
52384
52385
52386
52387
52388
52389
52390
52391
52392
52393
52394
52395
52396
52397
52398
52399
52400
52401
52402
52403
52404
52405
52406
52407
52408
52409
52410
52411
52412
52413
52414
52415
52416
52417
52418
52419
52420
52421
52422
52423
52424
52425
52426
52427
52428
52429
52430
52431
52432
52433
52434
52435
52436
52437
52438
52439
52440
52441
52442
52443
52444
52445
52446
52447
52448
52449
52450
52451
52452
52453
52454
52455
52456
52457
52458
52459
52460
52461
52462
52463
52464
52465
52466
52467
52468
52469
52470
52471
52472
52473
52474
52475
52476
52477
52478
52479
52480
52481
52482
52483
52484
52485
52486
52487
52488
52489
52490
52491
52492
52493
52494
52495
52496
52497
52498
52499
52500
52501
52502
52503
52504
52505
52506
52507
52508
52509
52510
52511
52512
52513
52514
52515
52516
52517
52518
52519
52520
52521
52522
52523
52524
52525
52526
52527
52528
52529
52530
52531
52532
52533
52534
52535
52536
52537
52538
52539
52540
52541
52542
52543
52544
52545
52546
52547
52548
52549
52550
52551
52552
52553
52554
52555
52556
52557
52558
52559
52560
52561
52562
52563
52564
52565
52566
52567
52568
52569
52570
52571
52572
52573
52574
52575
52576
52577
52578
52579
52580
52581
52582
52583
52584
52585
52586
52587
52588
52589
52590
52591
52592
52593
52594
52595
52596
52597
52598
52599
52600
52601
52602
52603
52604
52605
52606
52607
52608
52609
52610
52611
52612
52613
52614
52615
52616
52617
52618
52619
52620
52621
52622
52623
52624
52625
52626
52627
52628
52629
52630
52631
52632
52633
52634
52635
52636
52637
52638
52639
52640
52641
52642
52643
52644
52645
52646
52647
52648
52649
52650
52651
52652
52653
52654
52655
52656
52657
52658
52659
52660
52661
52662
52663
52664
52665
52666
52667
52668
52669
52670
52671
52672
52673
52674
52675
52676
52677
52678
52679
52680
52681
52682
52683
52684
52685
52686
52687
52688
52689
52690
52691
52692
52693
52694
52695
52696
52697
52698
52699
52700
52701
52702
52703
52704
52705
52706
52707
52708
52709
52710
52711
52712
52713
52714
52715
52716
52717
52718
52719
52720
52721
52722
52723
52724
52725
52726
52727
52728
52729
52730
52731
52732
52733
52734
52735
52736
52737
52738
52739
52740
52741
52742
52743
52744
52745
52746
52747
52748
52749
52750
52751
52752
52753
52754
52755
52756
52757
52758
52759
52760
52761
52762
52763
52764
52765
52766
52767
52768
52769
52770
52771
52772
52773
52774
52775
52776
52777
52778
52779
52780
52781
52782
52783
52784
52785
52786
52787
52788
52789
52790
52791
52792
52793
52794
52795
52796
52797
52798
52799
52800
52801
52802
52803
52804
52805
52806
52807
52808
52809
52810
52811
52812
52813
52814
52815
52816
52817
52818
52819
52820
52821
52822
52823
52824
52825
52826
52827
52828
52829
52830
52831
52832
52833
52834
52835
52836
52837
52838
52839
52840
52841
52842
52843
52844
52845
52846
52847
52848
52849
52850
52851
52852
52853
52854
52855
52856
52857
52858
52859
52860
52861
52862
52863
52864
52865
52866
52867
52868
52869
52870
52871
52872
52873
52874
52875
52876
52877
52878
52879
52880
52881
52882
52883
52884
52885
52886
52887
52888
52889
52890
52891
52892
52893
52894
52895
52896
52897
52898
52899
52900
52901
52902
52903
52904
52905
52906
52907
52908
52909
52910
52911
52912
52913
52914
52915
52916
52917
52918
52919
52920
52921
52922
52923
52924
52925
52926
52927
52928
52929
52930
52931
52932
52933
52934
52935
52936
52937
52938
52939
52940
52941
52942
52943
52944
52945
52946
52947
52948
52949
52950
52951
52952
52953
52954
52955
52956
52957
52958
52959
52960
52961
52962
52963
52964
52965
52966
52967
52968
52969
52970
52971
52972
52973
52974
52975
52976
52977
52978
52979
52980
52981
52982
52983
52984
52985
52986
52987
52988
52989
52990
52991
52992
52993
52994
52995
52996
52997
52998
52999
53000
53001
53002
53003
53004
53005
53006
53007
53008
53009
53010
53011
53012
53013
53014
53015
53016
53017
53018
53019
53020
53021
53022
53023
53024
53025
53026
53027
53028
53029
53030
53031
53032
53033
53034
53035
53036
53037
53038
53039
53040
53041
53042
53043
53044
53045
53046
53047
53048
53049
53050
53051
53052
53053
53054
53055
53056
53057
53058
53059
53060
53061
53062
53063
53064
53065
53066
53067
53068
53069
53070
53071
53072
53073
53074
53075
53076
53077
53078
53079
53080
53081
53082
53083
53084
53085
53086
53087
53088
53089
53090
53091
53092
53093
53094
53095
53096
53097
53098
53099
53100
53101
53102
53103
53104
53105
53106
53107
53108
53109
53110
53111
53112
53113
53114
53115
53116
53117
53118
53119
53120
53121
53122
53123
53124
53125
53126
53127
53128
53129
53130
53131
53132
53133
53134
53135
53136
53137
53138
53139
53140
53141
53142
53143
53144
53145
53146
53147
53148
53149
53150
53151
53152
53153
53154
53155
53156
53157
53158
53159
53160
53161
53162
53163
53164
53165
53166
53167
53168
53169
53170
53171
53172
53173
53174
53175
53176
53177
53178
53179
53180
53181
53182
53183
53184
53185
53186
53187
53188
53189
53190
53191
53192
53193
53194
53195
53196
53197
53198
53199
53200
53201
53202
53203
53204
53205
53206
53207
53208
53209
53210
53211
53212
53213
53214
53215
53216
53217
53218
53219
53220
53221
53222
53223
53224
53225
53226
53227
53228
53229
53230
53231
53232
53233
53234
53235
53236
53237
53238
53239
53240
53241
53242
53243
53244
53245
53246
53247
53248
53249
53250
53251
53252
53253
53254
53255
53256
53257
53258
53259
53260
53261
53262
53263
53264
53265
53266
53267
53268
53269
53270
53271
53272
53273
53274
53275
53276
53277
53278
53279
53280
53281
53282
53283
53284
53285
53286
53287
53288
53289
53290
53291
53292
53293
53294
53295
53296
53297
53298
53299
53300
53301
53302
53303
53304
53305
53306
53307
53308
53309
53310
53311
53312
53313
53314
53315
53316
53317
53318
53319
53320
53321
53322
53323
53324
53325
53326
53327
53328
53329
53330
53331
53332
53333
53334
53335
53336
53337
53338
53339
53340
53341
53342
53343
53344
53345
53346
53347
53348
53349
53350
53351
53352
53353
53354
53355
53356
53357
53358
53359
53360
53361
53362
53363
53364
53365
53366
53367
53368
53369
53370
53371
53372
53373
53374
53375
53376
53377
53378
53379
53380
53381
53382
53383
53384
53385
53386
53387
53388
53389
53390
53391
53392
53393
53394
53395
53396
53397
53398
53399
53400
53401
53402
53403
53404
53405
53406
53407
53408
53409
53410
53411
53412
53413
53414
53415
53416
53417
53418
53419
53420
53421
53422
53423
53424
53425
53426
53427
53428
53429
53430
53431
53432
53433
53434
53435
53436
53437
53438
53439
53440
53441
53442
53443
53444
53445
53446
53447
53448
53449
53450
53451
53452
53453
53454
53455
53456
53457
53458
53459
53460
53461
53462
53463
53464
53465
53466
53467
53468
53469
53470
53471
53472
53473
53474
53475
53476
53477
53478
53479
53480
53481
53482
53483
53484
53485
53486
53487
53488
53489
53490
53491
53492
53493
53494
53495
53496
53497
53498
53499
53500
53501
53502
53503
53504
53505
53506
53507
53508
53509
53510
53511
53512
53513
53514
53515
53516
53517
53518
53519
53520
53521
53522
53523
53524
53525
53526
53527
53528
53529
53530
53531
53532
53533
53534
53535
53536
53537
53538
53539
53540
53541
53542
53543
53544
53545
53546
53547
53548
53549
53550
53551
53552
53553
53554
53555
53556
53557
53558
53559
53560
53561
53562
53563
53564
53565
53566
53567
53568
53569
53570
53571
53572
53573
53574
53575
53576
53577
53578
53579
53580
53581
53582
53583
53584
53585
53586
53587
53588
53589
53590
53591
53592
53593
53594
53595
53596
53597
53598
53599
53600
53601
53602
53603
53604
53605
53606
53607
53608
53609
53610
53611
53612
53613
53614
53615
53616
53617
53618
53619
53620
53621
53622
53623
53624
53625
53626
53627
53628
53629
53630
53631
53632
53633
53634
53635
53636
53637
53638
53639
53640
53641
53642
53643
53644
53645
53646
53647
53648
53649
53650
53651
53652
53653
53654
53655
53656
53657
53658
53659
53660
53661
53662
53663
53664
53665
53666
53667
53668
53669
53670
53671
53672
53673
53674
53675
53676
53677
53678
53679
53680
53681
53682
53683
53684
53685
53686
53687
53688
53689
53690
53691
53692
53693
53694
53695
53696
53697
53698
53699
53700
53701
53702
53703
53704
53705
53706
53707
53708
53709
53710
53711
53712
53713
53714
53715
53716
53717
53718
53719
53720
53721
53722
53723
53724
53725
53726
53727
53728
53729
53730
53731
53732
53733
53734
53735
53736
53737
53738
53739
53740
53741
53742
53743
53744
53745
53746
53747
53748
53749
53750
53751
53752
53753
53754
53755
53756
53757
53758
53759
53760
53761
53762
53763
53764
53765
53766
53767
53768
53769
53770
53771
53772
53773
53774
53775
53776
53777
53778
53779
53780
53781
53782
53783
53784
53785
53786
53787
53788
53789
53790
53791
53792
53793
53794
53795
53796
53797
53798
53799
53800
53801
53802
53803
53804
53805
53806
53807
53808
53809
53810
53811
53812
53813
53814
53815
53816
53817
53818
53819
53820
53821
53822
53823
53824
53825
53826
53827
53828
53829
53830
53831
53832
53833
53834
53835
53836
53837
53838
53839
53840
53841
53842
53843
53844
53845
53846
53847
53848
53849
53850
53851
53852
53853
53854
53855
53856
53857
53858
53859
53860
53861
53862
53863
53864
53865
53866
53867
53868
53869
53870
53871
53872
53873
53874
53875
53876
53877
53878
53879
53880
53881
53882
53883
53884
53885
53886
53887
53888
53889
53890
53891
53892
53893
53894
53895
53896
53897
53898
53899
53900
53901
53902
53903
53904
53905
53906
53907
53908
53909
53910
53911
53912
53913
53914
53915
53916
53917
53918
53919
53920
53921
53922
53923
53924
53925
53926
53927
53928
53929
53930
53931
53932
53933
53934
53935
53936
53937
53938
53939
53940
53941
53942
53943
53944
53945
53946
53947
53948
53949
53950
53951
53952
53953
53954
53955
53956
53957
53958
53959
53960
53961
53962
53963
53964
53965
53966
53967
53968
53969
53970
53971
53972
53973
53974
53975
53976
53977
53978
53979
53980
53981
53982
53983
53984
53985
53986
53987
53988
53989
53990
53991
53992
53993
53994
53995
53996
53997
53998
53999
54000
54001
54002
54003
54004
54005
54006
54007
54008
54009
54010
54011
54012
54013
54014
54015
54016
54017
54018
54019
54020
54021
54022
54023
54024
54025
54026
54027
54028
54029
54030
54031
54032
54033
54034
54035
54036
54037
54038
54039
54040
54041
54042
54043
54044
54045
54046
54047
54048
54049
54050
54051
54052
54053
54054
54055
54056
54057
54058
54059
54060
54061
54062
54063
54064
54065
54066
54067
54068
54069
54070
54071
54072
54073
54074
54075
54076
54077
54078
54079
54080
54081
54082
54083
54084
54085
54086
54087
54088
54089
54090
54091
54092
54093
54094
54095
54096
54097
54098
54099
54100
54101
54102
54103
54104
54105
54106
54107
54108
54109
54110
54111
54112
54113
54114
54115
54116
54117
54118
54119
54120
54121
54122
54123
54124
54125
54126
54127
54128
54129
54130
54131
54132
54133
54134
54135
54136
54137
54138
54139
54140
54141
54142
54143
54144
54145
54146
54147
54148
54149
54150
54151
54152
54153
54154
54155
54156
54157
54158
54159
54160
54161
54162
54163
54164
54165
54166
54167
54168
54169
54170
54171
54172
54173
54174
54175
54176
54177
54178
54179
54180
54181
54182
54183
54184
54185
54186
54187
54188
54189
54190
54191
54192
54193
54194
54195
54196
54197
54198
54199
54200
54201
54202
54203
54204
54205
54206
54207
54208
54209
54210
54211
54212
54213
54214
54215
54216
54217
54218
54219
54220
54221
54222
54223
54224
54225
54226
54227
54228
54229
54230
54231
54232
54233
54234
54235
54236
54237
54238
54239
54240
54241
54242
54243
54244
54245
54246
54247
54248
54249
54250
54251
54252
54253
54254
54255
54256
54257
54258
54259
54260
54261
54262
54263
54264
54265
54266
54267
54268
54269
54270
54271
54272
54273
54274
54275
54276
54277
54278
54279
54280
54281
54282
54283
54284
54285
54286
54287
54288
54289
54290
54291
54292
54293
54294
54295
54296
54297
54298
54299
54300
54301
54302
54303
54304
54305
54306
54307
54308
54309
54310
54311
54312
54313
54314
54315
54316
54317
54318
54319
54320
54321
54322
54323
54324
54325
54326
54327
54328
54329
54330
54331
54332
54333
54334
54335
54336
54337
54338
54339
54340
54341
54342
54343
54344
54345
54346
54347
54348
54349
54350
54351
54352
54353
54354
54355
54356
54357
54358
54359
54360
54361
54362
54363
54364
54365
54366
54367
54368
54369
54370
54371
54372
54373
54374
54375
54376
54377
54378
54379
54380
54381
54382
54383
54384
54385
54386
54387
54388
54389
54390
54391
54392
54393
54394
54395
54396
54397
54398
54399
54400
54401
54402
54403
54404
54405
54406
54407
54408
54409
54410
54411
54412
54413
54414
54415
54416
54417
54418
54419
54420
54421
54422
54423
54424
54425
54426
54427
54428
54429
54430
54431
54432
54433
54434
54435
54436
54437
54438
54439
54440
54441
54442
54443
54444
54445
54446
54447
54448
54449
54450
54451
54452
54453
54454
54455
54456
54457
54458
54459
54460
54461
54462
54463
54464
54465
54466
54467
54468
54469
54470
54471
54472
54473
54474
54475
54476
54477
54478
54479
54480
54481
54482
54483
54484
54485
54486
54487
54488
54489
54490
54491
54492
54493
54494
54495
54496
54497
54498
54499
54500
54501
54502
54503
54504
54505
54506
54507
54508
54509
54510
54511
54512
54513
54514
54515
54516
54517
54518
54519
54520
54521
54522
54523
54524
54525
54526
54527
54528
54529
54530
54531
54532
54533
54534
54535
54536
54537
54538
54539
54540
54541
54542
54543
54544
54545
54546
54547
54548
54549
54550
54551
54552
54553
54554
54555
54556
54557
54558
54559
54560
54561
54562
54563
54564
54565
54566
54567
54568
54569
54570
54571
54572
54573
54574
54575
54576
54577
54578
54579
54580
54581
54582
54583
54584
54585
54586
54587
54588
54589
54590
54591
54592
54593
54594
54595
54596
54597
54598
54599
54600
54601
54602
54603
54604
54605
54606
54607
54608
54609
54610
54611
54612
54613
54614
54615
54616
54617
54618
54619
54620
54621
54622
54623
54624
54625
54626
54627
54628
54629
54630
54631
54632
54633
54634
54635
54636
54637
54638
54639
54640
54641
54642
54643
54644
54645
54646
54647
54648
54649
54650
54651
54652
54653
54654
54655
54656
54657
54658
54659
54660
54661
54662
54663
54664
54665
54666
54667
54668
54669
54670
54671
54672
54673
54674
54675
54676
54677
54678
54679
54680
54681
54682
54683
54684
54685
54686
54687
54688
54689
54690
54691
54692
54693
54694
54695
54696
54697
54698
54699
54700
54701
54702
54703
54704
54705
54706
54707
54708
54709
54710
54711
54712
54713
54714
54715
54716
54717
54718
54719
54720
54721
54722
54723
54724
54725
54726
54727
54728
54729
54730
54731
54732
54733
54734
54735
54736
54737
54738
54739
54740
54741
54742
54743
54744
54745
54746
54747
54748
54749
54750
54751
54752
54753
54754
54755
54756
54757
54758
54759
54760
54761
54762
54763
54764
54765
54766
54767
54768
54769
54770
54771
54772
54773
54774
54775
54776
54777
54778
54779
54780
54781
54782
54783
54784
54785
54786
54787
54788
54789
54790
54791
54792
54793
54794
54795
54796
54797
54798
54799
54800
54801
54802
54803
54804
54805
54806
54807
54808
54809
54810
54811
54812
54813
54814
54815
54816
54817
54818
54819
54820
54821
54822
54823
54824
54825
54826
54827
54828
54829
54830
54831
54832
54833
54834
54835
54836
54837
54838
54839
54840
54841
54842
54843
54844
54845
54846
54847
54848
54849
54850
54851
54852
54853
54854
54855
54856
54857
54858
54859
54860
54861
54862
54863
54864
54865
54866
54867
54868
54869
54870
54871
54872
54873
54874
54875
54876
54877
54878
54879
54880
54881
54882
54883
54884
54885
54886
54887
54888
54889
54890
54891
54892
54893
54894
54895
54896
54897
54898
54899
54900
54901
54902
54903
54904
54905
54906
54907
54908
54909
54910
54911
54912
54913
54914
54915
54916
54917
54918
54919
54920
54921
54922
54923
54924
54925
54926
54927
54928
54929
54930
54931
54932
54933
54934
54935
54936
54937
54938
54939
54940
54941
54942
54943
54944
54945
54946
54947
54948
54949
54950
54951
54952
54953
54954
54955
54956
54957
54958
54959
54960
54961
54962
54963
54964
54965
54966
54967
54968
54969
54970
54971
54972
54973
54974
54975
54976
54977
54978
54979
54980
54981
54982
54983
54984
54985
54986
54987
54988
54989
54990
54991
54992
54993
54994
54995
54996
54997
54998
54999
55000
55001
55002
55003
55004
55005
55006
55007
55008
55009
55010
55011
55012
55013
55014
55015
55016
55017
55018
55019
55020
55021
55022
55023
55024
55025
55026
55027
55028
55029
55030
55031
55032
55033
55034
55035
55036
55037
55038
55039
55040
55041
55042
55043
55044
55045
55046
55047
55048
55049
55050
55051
55052
55053
55054
55055
55056
55057
55058
55059
55060
55061
55062
55063
55064
55065
55066
55067
55068
55069
55070
55071
55072
55073
55074
55075
55076
55077
55078
55079
55080
55081
55082
55083
55084
55085
55086
55087
55088
55089
55090
55091
55092
55093
55094
55095
55096
55097
55098
55099
55100
55101
55102
55103
55104
55105
55106
55107
55108
55109
55110
55111
55112
55113
55114
55115
55116
55117
55118
55119
55120
55121
55122
55123
55124
55125
55126
55127
55128
55129
55130
55131
55132
55133
55134
55135
55136
55137
55138
55139
55140
55141
55142
55143
55144
55145
55146
55147
55148
55149
55150
55151
55152
55153
55154
55155
55156
55157
55158
55159
55160
55161
55162
55163
55164
55165
55166
55167
55168
55169
55170
55171
55172
55173
55174
55175
55176
55177
55178
55179
55180
55181
55182
55183
55184
55185
55186
55187
55188
55189
55190
55191
55192
55193
55194
55195
55196
55197
55198
55199
55200
55201
55202
55203
55204
55205
55206
55207
55208
55209
55210
55211
55212
55213
55214
55215
55216
55217
55218
55219
55220
55221
55222
55223
55224
55225
55226
55227
55228
55229
55230
55231
55232
55233
55234
55235
55236
55237
55238
55239
55240
55241
55242
55243
55244
55245
55246
55247
55248
55249
55250
55251
55252
55253
55254
55255
55256
55257
55258
55259
55260
55261
55262
55263
55264
55265
55266
55267
55268
55269
55270
55271
55272
55273
55274
55275
55276
55277
55278
55279
55280
55281
55282
55283
55284
55285
55286
55287
55288
55289
55290
55291
55292
55293
55294
55295
55296
55297
55298
55299
55300
55301
55302
55303
55304
55305
55306
55307
55308
55309
55310
55311
55312
55313
55314
55315
55316
55317
55318
55319
55320
55321
55322
55323
55324
55325
55326
55327
55328
55329
55330
55331
55332
55333
55334
55335
55336
55337
55338
55339
55340
55341
55342
55343
55344
55345
55346
55347
55348
55349
55350
55351
55352
55353
55354
55355
55356
55357
55358
55359
55360
55361
55362
55363
55364
55365
55366
55367
55368
55369
55370
55371
55372
55373
55374
55375
55376
55377
55378
55379
55380
55381
55382
55383
55384
55385
55386
55387
55388
55389
55390
55391
55392
55393
55394
55395
55396
55397
55398
55399
55400
55401
55402
55403
55404
55405
55406
55407
55408
55409
55410
55411
55412
55413
55414
55415
55416
55417
55418
55419
55420
55421
55422
55423
55424
55425
55426
55427
55428
55429
55430
55431
55432
55433
55434
55435
55436
55437
55438
55439
55440
55441
55442
55443
55444
55445
55446
55447
55448
55449
55450
55451
55452
55453
55454
55455
55456
55457
55458
55459
55460
55461
55462
55463
55464
55465
55466
55467
55468
55469
55470
55471
55472
55473
55474
55475
55476
55477
55478
55479
55480
55481
55482
55483
55484
55485
55486
55487
55488
55489
55490
55491
55492
55493
55494
55495
55496
55497
55498
55499
55500
55501
55502
55503
55504
55505
55506
55507
55508
55509
55510
55511
55512
55513
55514
55515
55516
55517
55518
55519
55520
55521
55522
55523
55524
55525
55526
55527
55528
55529
55530
55531
55532
55533
55534
55535
55536
55537
55538
55539
55540
55541
55542
55543
55544
55545
55546
55547
55548
55549
55550
55551
55552
55553
55554
55555
55556
55557
55558
55559
55560
55561
55562
55563
55564
55565
55566
55567
55568
55569
55570
55571
55572
55573
55574
55575
55576
55577
55578
55579
55580
55581
55582
55583
55584
55585
55586
55587
55588
55589
55590
55591
55592
55593
55594
55595
55596
55597
55598
55599
55600
55601
55602
55603
55604
55605
55606
55607
55608
55609
55610
55611
55612
55613
55614
55615
55616
55617
55618
55619
55620
55621
55622
55623
55624
55625
55626
55627
55628
55629
55630
55631
55632
55633
55634
55635
55636
55637
55638
55639
55640
55641
55642
55643
55644
55645
55646
55647
55648
55649
55650
55651
55652
55653
55654
55655
55656
55657
55658
55659
55660
55661
55662
55663
55664
55665
55666
55667
55668
55669
55670
55671
55672
55673
55674
55675
55676
55677
55678
55679
55680
55681
55682
55683
55684
55685
55686
55687
55688
55689
55690
55691
55692
55693
55694
55695
55696
55697
55698
55699
55700
55701
55702
55703
55704
55705
55706
55707
55708
55709
55710
55711
55712
55713
55714
55715
55716
55717
55718
55719
55720
55721
55722
55723
55724
55725
55726
55727
55728
55729
55730
55731
55732
55733
55734
55735
55736
55737
55738
55739
55740
55741
55742
55743
55744
55745
55746
55747
55748
55749
55750
55751
55752
55753
55754
55755
55756
55757
55758
55759
55760
55761
55762
55763
55764
55765
55766
55767
55768
55769
55770
55771
55772
55773
55774
55775
55776
55777
55778
55779
55780
55781
55782
55783
55784
55785
55786
55787
55788
55789
55790
55791
55792
55793
55794
55795
55796
55797
55798
55799
55800
55801
55802
55803
55804
55805
55806
55807
55808
55809
55810
55811
55812
55813
55814
55815
55816
55817
55818
55819
55820
55821
55822
55823
55824
55825
55826
55827
55828
55829
55830
55831
55832
55833
55834
55835
55836
55837
55838
55839
55840
55841
55842
55843
55844
55845
55846
55847
55848
55849
55850
55851
55852
55853
55854
55855
55856
55857
55858
55859
55860
55861
55862
55863
55864
55865
55866
55867
55868
55869
55870
55871
55872
55873
55874
55875
55876
55877
55878
55879
55880
55881
55882
55883
55884
55885
55886
55887
55888
55889
55890
55891
55892
55893
55894
55895
55896
55897
55898
55899
55900
55901
55902
55903
55904
55905
55906
55907
55908
55909
55910
55911
55912
55913
55914
55915
55916
55917
55918
55919
55920
55921
55922
55923
55924
55925
55926
55927
55928
55929
55930
55931
55932
55933
55934
55935
55936
55937
55938
55939
55940
55941
55942
55943
55944
55945
55946
55947
55948
55949
55950
55951
55952
55953
55954
55955
55956
55957
55958
55959
55960
55961
55962
55963
55964
55965
55966
55967
55968
55969
55970
55971
55972
55973
55974
55975
55976
55977
55978
55979
55980
55981
55982
55983
55984
55985
55986
55987
55988
55989
55990
55991
55992
55993
55994
55995
55996
55997
55998
55999
56000
56001
56002
56003
56004
56005
56006
56007
56008
56009
56010
56011
56012
56013
56014
56015
56016
56017
56018
56019
56020
56021
56022
56023
56024
56025
56026
56027
56028
56029
56030
56031
56032
56033
56034
56035
56036
56037
56038
56039
56040
56041
56042
56043
56044
56045
56046
56047
56048
56049
56050
56051
56052
56053
56054
56055
56056
56057
56058
56059
56060
56061
56062
56063
56064
56065
56066
56067
56068
56069
56070
56071
56072
56073
56074
56075
56076
56077
56078
56079
56080
56081
56082
56083
56084
56085
56086
56087
56088
56089
56090
56091
56092
56093
56094
56095
56096
56097
56098
56099
56100
56101
56102
56103
56104
56105
56106
56107
56108
56109
56110
56111
56112
56113
56114
56115
56116
56117
56118
56119
56120
56121
56122
56123
56124
56125
56126
56127
56128
56129
56130
56131
56132
56133
56134
56135
56136
56137
56138
56139
56140
56141
56142
56143
56144
56145
56146
56147
56148
56149
56150
56151
56152
56153
56154
56155
56156
56157
56158
56159
56160
56161
56162
56163
56164
56165
56166
56167
56168
56169
56170
56171
56172
56173
56174
56175
56176
56177
56178
56179
56180
56181
56182
56183
56184
56185
56186
56187
56188
56189
56190
56191
56192
56193
56194
56195
56196
56197
56198
56199
56200
56201
56202
56203
56204
56205
56206
56207
56208
56209
56210
56211
56212
56213
56214
56215
56216
56217
56218
56219
56220
56221
56222
56223
56224
56225
56226
56227
56228
56229
56230
56231
56232
56233
56234
56235
56236
56237
56238
56239
56240
56241
56242
56243
56244
56245
56246
56247
56248
56249
56250
56251
56252
56253
56254
56255
56256
56257
56258
56259
56260
56261
56262
56263
56264
56265
56266
56267
56268
56269
56270
56271
56272
56273
56274
56275
56276
56277
56278
56279
56280
56281
56282
56283
56284
56285
56286
56287
56288
56289
56290
56291
56292
56293
56294
56295
56296
56297
56298
56299
56300
56301
56302
56303
56304
56305
56306
56307
56308
56309
56310
56311
56312
56313
56314
56315
56316
56317
56318
56319
56320
56321
56322
56323
56324
56325
56326
56327
56328
56329
56330
56331
56332
56333
56334
56335
56336
56337
56338
56339
56340
56341
56342
56343
56344
56345
56346
56347
56348
56349
56350
56351
56352
56353
56354
56355
56356
56357
56358
56359
56360
56361
56362
56363
56364
56365
56366
56367
56368
56369
56370
56371
56372
56373
56374
56375
56376
56377
56378
56379
56380
56381
56382
56383
56384
56385
56386
56387
56388
56389
56390
56391
56392
56393
56394
56395
56396
56397
56398
56399
56400
56401
56402
56403
56404
56405
56406
56407
56408
56409
56410
56411
56412
56413
56414
56415
56416
56417
56418
56419
56420
56421
56422
56423
56424
56425
56426
56427
56428
56429
56430
56431
56432
56433
56434
56435
56436
56437
56438
56439
56440
56441
56442
56443
56444
56445
56446
56447
56448
56449
56450
56451
56452
56453
56454
56455
56456
56457
56458
56459
56460
56461
56462
56463
56464
56465
56466
56467
56468
56469
56470
56471
56472
56473
56474
56475
56476
56477
56478
56479
56480
56481
56482
56483
56484
56485
56486
56487
56488
56489
56490
56491
56492
56493
56494
56495
56496
56497
56498
56499
56500
56501
56502
56503
56504
56505
56506
56507
56508
56509
56510
56511
56512
56513
56514
56515
56516
56517
56518
56519
56520
56521
56522
56523
56524
56525
56526
56527
56528
56529
56530
56531
56532
56533
56534
56535
56536
56537
56538
56539
56540
56541
56542
56543
56544
56545
56546
56547
56548
56549
56550
56551
56552
56553
56554
56555
56556
56557
56558
56559
56560
56561
56562
56563
56564
56565
56566
56567
56568
56569
56570
56571
56572
56573
56574
56575
56576
56577
56578
56579
56580
56581
56582
56583
56584
56585
56586
56587
56588
56589
56590
56591
56592
56593
56594
56595
56596
56597
56598
56599
56600
56601
56602
56603
56604
56605
56606
56607
56608
56609
56610
56611
56612
56613
56614
56615
56616
56617
56618
56619
56620
56621
56622
56623
56624
56625
56626
56627
56628
56629
56630
56631
56632
56633
56634
56635
56636
56637
56638
56639
56640
56641
56642
56643
56644
56645
56646
56647
56648
56649
56650
56651
56652
56653
56654
56655
56656
56657
56658
56659
56660
56661
56662
56663
56664
56665
56666
56667
56668
56669
56670
56671
56672
56673
56674
56675
56676
56677
56678
56679
56680
56681
56682
56683
56684
56685
56686
56687
56688
56689
56690
56691
56692
56693
56694
56695
56696
56697
56698
56699
56700
56701
56702
56703
56704
56705
56706
56707
56708
56709
56710
56711
56712
56713
56714
56715
56716
56717
56718
56719
56720
56721
56722
56723
56724
56725
56726
56727
56728
56729
56730
56731
56732
56733
56734
56735
56736
56737
56738
56739
56740
56741
56742
56743
56744
56745
56746
56747
56748
56749
56750
56751
56752
56753
56754
56755
56756
56757
56758
56759
56760
56761
56762
56763
56764
56765
56766
56767
56768
56769
56770
56771
56772
56773
56774
56775
56776
56777
56778
56779
56780
56781
56782
56783
56784
56785
56786
56787
56788
56789
56790
56791
56792
56793
56794
56795
56796
56797
56798
56799
56800
56801
56802
56803
56804
56805
56806
56807
56808
56809
56810
56811
56812
56813
56814
56815
56816
56817
56818
56819
56820
56821
56822
56823
56824
56825
56826
56827
56828
56829
56830
56831
56832
56833
56834
56835
56836
56837
56838
56839
56840
56841
56842
56843
56844
56845
56846
56847
56848
56849
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2013 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Compiler Collection (GCC) Internals</title>

<meta name="description" content="GNU Compiler Collection (GCC) Internals">
<meta name="keywords" content="GNU Compiler Collection (GCC) Internals">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="#Top" rel="start" title="Top">
<link href="#Option-Index" rel="index" title="Option Index">
<link href="#SEC_Contents" rel="contents" title="Table of Contents">
<link href="DIR.html#Top" rel="up" title="(DIR)">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<h1 class="settitle" align="center">GNU Compiler Collection (GCC) Internals</h1>













<p>This file documents the internals of the GNU compilers.
</p><br>
<p>Copyright &copy; 1988-2013 Free Software Foundation, Inc.
</p>
<p>Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being &ldquo;Funding Free Software&rdquo;, the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
&ldquo;GNU Free Documentation License&rdquo;.
</p>
<p>(a) The FSF&rsquo;s Front-Cover Text is:
</p>
<p>A GNU Manual
</p>
<p>(b) The FSF&rsquo;s Back-Cover Text is:
</p>
<p>You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development.
</p>
<br>

<a name="SEC_Overview"></a>
<h2 class="shortcontents-heading">Short Table of Contents</h2>

<div class="shortcontents">
<ul class="no-bullet">
<li><a name="stoc-Contributing-to-GCC-Development" href="#toc-Contributing-to-GCC-Development">1 Contributing to GCC Development</a></li>
<li><a name="stoc-GCC-and-Portability" href="#toc-GCC-and-Portability">2 GCC and Portability</a></li>
<li><a name="stoc-Interfacing-to-GCC-Output" href="#toc-Interfacing-to-GCC-Output">3 Interfacing to GCC Output</a></li>
<li><a name="stoc-The-GCC-low_002dlevel-runtime-library" href="#toc-The-GCC-low_002dlevel-runtime-library">4 The GCC low-level runtime library</a></li>
<li><a name="stoc-Language-Front-Ends-in-GCC" href="#toc-Language-Front-Ends-in-GCC">5 Language Front Ends in GCC</a></li>
<li><a name="stoc-Source-Tree-Structure-and-Build-System" href="#toc-Source-Tree-Structure-and-Build-System">6 Source Tree Structure and Build System</a></li>
<li><a name="stoc-Testsuites-1" href="#toc-Testsuites-1">7 Testsuites</a></li>
<li><a name="stoc-Option-specification-files" href="#toc-Option-specification-files">8 Option specification files</a></li>
<li><a name="stoc-Passes-and-Files-of-the-Compiler" href="#toc-Passes-and-Files-of-the-Compiler">9 Passes and Files of the Compiler</a></li>
<li><a name="stoc-RTL-Representation" href="#toc-RTL-Representation">10 RTL Representation</a></li>
<li><a name="stoc-GENERIC-1" href="#toc-GENERIC-1">11 GENERIC</a></li>
<li><a name="stoc-GIMPLE-1" href="#toc-GIMPLE-1">12 GIMPLE</a></li>
<li><a name="stoc-Analysis-and-Optimization-of-GIMPLE-tuples" href="#toc-Analysis-and-Optimization-of-GIMPLE-tuples">13 Analysis and Optimization of GIMPLE tuples</a></li>
<li><a name="stoc-Analysis-and-Representation-of-Loops" href="#toc-Analysis-and-Representation-of-Loops">14 Analysis and Representation of Loops</a></li>
<li><a name="stoc-Control-Flow-Graph" href="#toc-Control-Flow-Graph">15 Control Flow Graph</a></li>
<li><a name="stoc-Machine-Descriptions" href="#toc-Machine-Descriptions">16 Machine Descriptions</a></li>
<li><a name="stoc-Target-Description-Macros-and-Functions" href="#toc-Target-Description-Macros-and-Functions">17 Target Description Macros and Functions</a></li>
<li><a name="stoc-Host-Configuration" href="#toc-Host-Configuration">18 Host Configuration</a></li>
<li><a name="stoc-Makefile-Fragments" href="#toc-Makefile-Fragments">19 Makefile Fragments</a></li>
<li><a name="stoc-collect2" href="#toc-collect2">20 <code>collect2</code></a></li>
<li><a name="stoc-Standard-Header-File-Directories" href="#toc-Standard-Header-File-Directories">21 Standard Header File Directories</a></li>
<li><a name="stoc-Memory-Management-and-Type-Information" href="#toc-Memory-Management-and-Type-Information">22 Memory Management and Type Information</a></li>
<li><a name="stoc-Plugins-1" href="#toc-Plugins-1">23 Plugins</a></li>
<li><a name="stoc-Link-Time-Optimization" href="#toc-Link-Time-Optimization">24 Link Time Optimization</a></li>
<li><a name="stoc-Funding-Free-Software" href="#toc-Funding-Free-Software">Funding Free Software</a></li>
<li><a name="stoc-The-GNU-Project-and-GNU_002fLinux" href="#toc-The-GNU-Project-and-GNU_002fLinux">The GNU Project and GNU/Linux</a></li>
<li><a name="stoc-GNU-General-Public-License" href="#toc-GNU-General-Public-License">GNU General Public License</a></li>
<li><a name="stoc-GNU-Free-Documentation-License-1" href="#toc-GNU-Free-Documentation-License-1">GNU Free Documentation License</a></li>
<li><a name="stoc-Contributors-to-GCC" href="#toc-Contributors-to-GCC">Contributors to GCC</a></li>
<li><a name="stoc-Option-Index-1" href="#toc-Option-Index-1">Option Index</a></li>
<li><a name="stoc-Concept-Index-1" href="#toc-Concept-Index-1">Concept Index</a></li>
</ul>
</div>

<a name="SEC_Contents"></a>
<h2 class="contents-heading">Table of Contents</h2>

<div class="contents">

<ul class="no-bullet">
  <li><a name="toc-Contributing-to-GCC-Development" href="#Contributing">1 Contributing to GCC Development</a></li>
  <li><a name="toc-GCC-and-Portability" href="#Portability">2 GCC and Portability</a></li>
  <li><a name="toc-Interfacing-to-GCC-Output" href="#Interface">3 Interfacing to GCC Output</a></li>
  <li><a name="toc-The-GCC-low_002dlevel-runtime-library" href="#Libgcc">4 The GCC low-level runtime library</a>
  <ul class="no-bullet">
    <li><a name="toc-Routines-for-integer-arithmetic" href="#Integer-library-routines">4.1 Routines for integer arithmetic</a>
    <ul class="no-bullet">
      <li><a name="toc-Arithmetic-functions" href="#Arithmetic-functions">4.1.1 Arithmetic functions</a></li>
      <li><a name="toc-Comparison-functions" href="#Comparison-functions">4.1.2 Comparison functions</a></li>
      <li><a name="toc-Trapping-arithmetic-functions" href="#Trapping-arithmetic-functions">4.1.3 Trapping arithmetic functions</a></li>
      <li><a name="toc-Bit-operations" href="#Bit-operations">4.1.4 Bit operations</a></li>
    </ul></li>
    <li><a name="toc-Routines-for-floating-point-emulation" href="#Soft-float-library-routines">4.2 Routines for floating point emulation</a>
    <ul class="no-bullet">
      <li><a name="toc-Arithmetic-functions-1" href="#Arithmetic-functions-1">4.2.1 Arithmetic functions</a></li>
      <li><a name="toc-Conversion-functions" href="#Conversion-functions">4.2.2 Conversion functions</a></li>
      <li><a name="toc-Comparison-functions-1" href="#Comparison-functions-1">4.2.3 Comparison functions</a></li>
      <li><a name="toc-Other-floating_002dpoint-functions" href="#Other-floating_002dpoint-functions">4.2.4 Other floating-point functions</a></li>
    </ul></li>
    <li><a name="toc-Routines-for-decimal-floating-point-emulation" href="#Decimal-float-library-routines">4.3 Routines for decimal floating point emulation</a>
    <ul class="no-bullet">
      <li><a name="toc-Arithmetic-functions-2" href="#Arithmetic-functions-2">4.3.1 Arithmetic functions</a></li>
      <li><a name="toc-Conversion-functions-1" href="#Conversion-functions-1">4.3.2 Conversion functions</a></li>
      <li><a name="toc-Comparison-functions-2" href="#Comparison-functions-2">4.3.3 Comparison functions</a></li>
    </ul></li>
    <li><a name="toc-Routines-for-fixed_002dpoint-fractional-emulation" href="#Fixed_002dpoint-fractional-library-routines">4.4 Routines for fixed-point fractional emulation</a>
    <ul class="no-bullet">
      <li><a name="toc-Arithmetic-functions-3" href="#Arithmetic-functions-3">4.4.1 Arithmetic functions</a></li>
      <li><a name="toc-Comparison-functions-3" href="#Comparison-functions-3">4.4.2 Comparison functions</a></li>
      <li><a name="toc-Conversion-functions-2" href="#Conversion-functions-2">4.4.3 Conversion functions</a></li>
    </ul></li>
    <li><a name="toc-Language_002dindependent-routines-for-exception-handling" href="#Exception-handling-routines">4.5 Language-independent routines for exception handling</a></li>
    <li><a name="toc-Miscellaneous-runtime-library-routines" href="#Miscellaneous-routines">4.6 Miscellaneous runtime library routines</a>
    <ul class="no-bullet">
      <li><a name="toc-Cache-control-functions" href="#Cache-control-functions">4.6.1 Cache control functions</a></li>
      <li><a name="toc-Split-stack-functions-and-variables" href="#Split-stack-functions-and-variables">4.6.2 Split stack functions and variables</a></li>
    </ul></li>
  </ul></li>
  <li><a name="toc-Language-Front-Ends-in-GCC" href="#Languages">5 Language Front Ends in GCC</a></li>
  <li><a name="toc-Source-Tree-Structure-and-Build-System" href="#Source-Tree">6 Source Tree Structure and Build System</a>
  <ul class="no-bullet">
    <li><a name="toc-Configure-Terms-and-History" href="#Configure-Terms">6.1 Configure Terms and History</a></li>
    <li><a name="toc-Top-Level-Source-Directory" href="#Top-Level">6.2 Top Level Source Directory</a></li>
    <li><a name="toc-The-gcc-Subdirectory" href="#gcc-Directory">6.3 The <samp>gcc</samp> Subdirectory</a>
    <ul class="no-bullet">
      <li><a name="toc-Subdirectories-of-gcc" href="#Subdirectories">6.3.1 Subdirectories of <samp>gcc</samp></a></li>
      <li><a name="toc-Configuration-in-the-gcc-Directory" href="#Configuration">6.3.2 Configuration in the <samp>gcc</samp> Directory</a>
      <ul class="no-bullet">
        <li><a name="toc-Scripts-Used-by-configure" href="#Config-Fragments">6.3.2.1 Scripts Used by <samp>configure</samp></a></li>
        <li><a name="toc-The-config_002ebuild_003b-config_002ehost_003b-and-config_002egcc-Files" href="#System-Config">6.3.2.2 The <samp>config.build</samp>; <samp>config.host</samp>; and <samp>config.gcc</samp> Files</a></li>
        <li><a name="toc-Files-Created-by-configure" href="#Configuration-Files">6.3.2.3 Files Created by <code>configure</code></a></li>
      </ul></li>
      <li><a name="toc-Build-System-in-the-gcc-Directory" href="#Build">6.3.3 Build System in the <samp>gcc</samp> Directory</a></li>
      <li><a name="toc-Makefile-Targets" href="#Makefile">6.3.4 Makefile Targets</a></li>
      <li><a name="toc-Library-Source-Files-and-Headers-under-the-gcc-Directory" href="#Library-Files">6.3.5 Library Source Files and Headers under the <samp>gcc</samp> Directory</a></li>
      <li><a name="toc-Headers-Installed-by-GCC" href="#Headers">6.3.6 Headers Installed by GCC</a></li>
      <li><a name="toc-Building-Documentation" href="#Documentation">6.3.7 Building Documentation</a>
      <ul class="no-bullet">
        <li><a name="toc-Texinfo-Manuals-1" href="#Texinfo-Manuals">6.3.7.1 Texinfo Manuals</a></li>
        <li><a name="toc-Man-Page-Generation-1" href="#Man-Page-Generation">6.3.7.2 Man Page Generation</a></li>
        <li><a name="toc-Miscellaneous-Documentation" href="#Miscellaneous-Docs">6.3.7.3 Miscellaneous Documentation</a></li>
      </ul></li>
      <li><a name="toc-Anatomy-of-a-Language-Front-End" href="#Front-End">6.3.8 Anatomy of a Language Front End</a>
      <ul class="no-bullet">
        <li><a name="toc-The-Front-End-language-Directory" href="#Front-End-Directory">6.3.8.1 The Front End <samp><var>language</var></samp> Directory</a></li>
        <li><a name="toc-The-Front-End-config_002dlang_002ein-File" href="#Front-End-Config">6.3.8.2 The Front End <samp>config-lang.in</samp> File</a></li>
        <li><a name="toc-The-Front-End-Make_002dlang_002ein-File" href="#Front-End-Makefile">6.3.8.3 The Front End <samp>Make-lang.in</samp> File</a></li>
      </ul></li>
      <li><a name="toc-Anatomy-of-a-Target-Back-End" href="#Back-End">6.3.9 Anatomy of a Target Back End</a></li>
    </ul></li>
  </ul></li>
  <li><a name="toc-Testsuites-1" href="#Testsuites">7 Testsuites</a>
  <ul class="no-bullet">
    <li><a name="toc-Idioms-Used-in-Testsuite-Code" href="#Test-Idioms">7.1 Idioms Used in Testsuite Code</a></li>
    <li><a name="toc-Directives-used-within-DejaGnu-tests" href="#Test-Directives">7.2 Directives used within DejaGnu tests</a>
    <ul class="no-bullet">
      <li><a name="toc-Syntax-and-Descriptions-of-test-directives" href="#Directives">7.2.1 Syntax and Descriptions of test directives</a>
      <ul class="no-bullet">
        <li><a name="toc-Specify-how-to-build-the-test" href="#Specify-how-to-build-the-test">7.2.1.1 Specify how to build the test</a></li>
        <li><a name="toc-Specify-additional-compiler-options" href="#Specify-additional-compiler-options">7.2.1.2 Specify additional compiler options</a></li>
        <li><a name="toc-Modify-the-test-timeout-value" href="#Modify-the-test-timeout-value">7.2.1.3 Modify the test timeout value</a></li>
        <li><a name="toc-Skip-a-test-for-some-targets" href="#Skip-a-test-for-some-targets">7.2.1.4 Skip a test for some targets</a></li>
        <li><a name="toc-Expect-a-test-to-fail-for-some-targets" href="#Expect-a-test-to-fail-for-some-targets">7.2.1.5 Expect a test to fail for some targets</a></li>
        <li><a name="toc-Expect-the-test-executable-to-fail" href="#Expect-the-test-executable-to-fail">7.2.1.6 Expect the test executable to fail</a></li>
        <li><a name="toc-Verify-compiler-messages" href="#Verify-compiler-messages">7.2.1.7 Verify compiler messages</a></li>
        <li><a name="toc-Verify-output-of-the-test-executable" href="#Verify-output-of-the-test-executable">7.2.1.8 Verify output of the test executable</a></li>
        <li><a name="toc-Specify-additional-files-for-a-test" href="#Specify-additional-files-for-a-test">7.2.1.9 Specify additional files for a test</a></li>
        <li><a name="toc-Add-checks-at-the-end-of-a-test" href="#Add-checks-at-the-end-of-a-test">7.2.1.10 Add checks at the end of a test</a></li>
      </ul></li>
      <li><a name="toc-Selecting-targets-to-which-a-test-applies" href="#Selectors">7.2.2 Selecting targets to which a test applies</a></li>
      <li><a name="toc-Keywords-describing-target-attributes" href="#Effective_002dTarget-Keywords">7.2.3 Keywords describing target attributes</a>
      <ul class="no-bullet">
        <li><a name="toc-Data-type-sizes" href="#Data-type-sizes">7.2.3.1 Data type sizes</a></li>
        <li><a name="toc-Fortran_002dspecific-attributes" href="#Fortran_002dspecific-attributes">7.2.3.2 Fortran-specific attributes</a></li>
        <li><a name="toc-Vector_002dspecific-attributes" href="#Vector_002dspecific-attributes">7.2.3.3 Vector-specific attributes</a></li>
        <li><a name="toc-Thread-Local-Storage-attributes" href="#Thread-Local-Storage-attributes">7.2.3.4 Thread Local Storage attributes</a></li>
        <li><a name="toc-Decimal-floating-point-attributes" href="#Decimal-floating-point-attributes">7.2.3.5 Decimal floating point attributes</a></li>
        <li><a name="toc-ARM_002dspecific-attributes" href="#ARM_002dspecific-attributes">7.2.3.6 ARM-specific attributes</a></li>
        <li><a name="toc-MIPS_002dspecific-attributes" href="#MIPS_002dspecific-attributes">7.2.3.7 MIPS-specific attributes</a></li>
        <li><a name="toc-PowerPC_002dspecific-attributes" href="#PowerPC_002dspecific-attributes">7.2.3.8 PowerPC-specific attributes</a></li>
        <li><a name="toc-Other-hardware-attributes" href="#Other-hardware-attributes">7.2.3.9 Other hardware attributes</a></li>
        <li><a name="toc-Environment-attributes" href="#Environment-attributes">7.2.3.10 Environment attributes</a></li>
        <li><a name="toc-Other-attributes" href="#Other-attributes">7.2.3.11 Other attributes</a></li>
        <li><a name="toc-Local-to-tests-in-gcc_002etarget_002fi386" href="#Local-to-tests-in-gcc_002etarget_002fi386">7.2.3.12 Local to tests in <code>gcc.target/i386</code></a></li>
        <li><a name="toc-Local-to-tests-in-gcc_002etarget_002fspu_002fea" href="#Local-to-tests-in-gcc_002etarget_002fspu_002fea">7.2.3.13 Local to tests in <code>gcc.target/spu/ea</code></a></li>
        <li><a name="toc-Local-to-tests-in-gcc_002etest_002dframework" href="#Local-to-tests-in-gcc_002etest_002dframework">7.2.3.14 Local to tests in <code>gcc.test-framework</code></a></li>
      </ul></li>
      <li><a name="toc-Features-for-dg_002dadd_002doptions" href="#Add-Options">7.2.4 Features for <code>dg-add-options</code></a></li>
      <li><a name="toc-Variants-of-dg_002drequire_002dsupport" href="#Require-Support">7.2.5 Variants of <code>dg-require-<var>support</var></code></a></li>
      <li><a name="toc-Commands-for-use-in-dg_002dfinal" href="#Final-Actions">7.2.6 Commands for use in <code>dg-final</code></a>
      <ul class="no-bullet">
        <li><a name="toc-Scan-a-particular-file" href="#Scan-a-particular-file">7.2.6.1 Scan a particular file</a></li>
        <li><a name="toc-Scan-the-assembly-output" href="#Scan-the-assembly-output">7.2.6.2 Scan the assembly output</a></li>
        <li><a name="toc-Scan-optimization-dump-files" href="#Scan-optimization-dump-files">7.2.6.3 Scan optimization dump files</a></li>
        <li><a name="toc-Verify-that-an-output-files-exists-or-not" href="#Verify-that-an-output-files-exists-or-not">7.2.6.4 Verify that an output files exists or not</a></li>
        <li><a name="toc-Check-for-LTO-tests" href="#Check-for-LTO-tests">7.2.6.5 Check for LTO tests</a></li>
        <li><a name="toc-Checks-for-gcov-tests" href="#Checks-for-gcov-tests">7.2.6.6 Checks for <code>gcov</code> tests</a></li>
        <li><a name="toc-Clean-up-generated-test-files" href="#Clean-up-generated-test-files">7.2.6.7 Clean up generated test files</a></li>
      </ul></li>
    </ul></li>
    <li><a name="toc-Ada-Language-Testsuites" href="#Ada-Tests">7.3 Ada Language Testsuites</a></li>
    <li><a name="toc-C-Language-Testsuites" href="#C-Tests">7.4 C Language Testsuites</a></li>
    <li><a name="toc-The-Java-library-testsuites_002e" href="#libgcj-Tests">7.5 The Java library testsuites.</a></li>
    <li><a name="toc-Support-for-testing-link_002dtime-optimizations" href="#LTO-Testing">7.6 Support for testing link-time optimizations</a></li>
    <li><a name="toc-Support-for-testing-gcov" href="#gcov-Testing">7.7 Support for testing <code>gcov</code></a></li>
    <li><a name="toc-Support-for-testing-profile_002ddirected-optimizations" href="#profopt-Testing">7.8 Support for testing profile-directed optimizations</a></li>
    <li><a name="toc-Support-for-testing-binary-compatibility" href="#compat-Testing">7.9 Support for testing binary compatibility</a></li>
    <li><a name="toc-Support-for-torture-testing-using-multiple-options" href="#Torture-Tests">7.10 Support for torture testing using multiple options</a></li>
  </ul></li>
  <li><a name="toc-Option-specification-files" href="#Options">8 Option specification files</a>
  <ul class="no-bullet">
    <li><a name="toc-Option-file-format-1" href="#Option-file-format">8.1 Option file format</a></li>
    <li><a name="toc-Option-properties-1" href="#Option-properties">8.2 Option properties</a></li>
  </ul></li>
  <li><a name="toc-Passes-and-Files-of-the-Compiler" href="#Passes">9 Passes and Files of the Compiler</a>
  <ul class="no-bullet">
    <li><a name="toc-Parsing-pass-1" href="#Parsing-pass">9.1 Parsing pass</a></li>
    <li><a name="toc-Gimplification-pass-1" href="#Gimplification-pass">9.2 Gimplification pass</a></li>
    <li><a name="toc-Pass-manager-1" href="#Pass-manager">9.3 Pass manager</a></li>
    <li><a name="toc-Tree-SSA-passes-1" href="#Tree-SSA-passes">9.4 Tree SSA passes</a></li>
    <li><a name="toc-RTL-passes-1" href="#RTL-passes">9.5 RTL passes</a></li>
  </ul></li>
  <li><a name="toc-RTL-Representation" href="#RTL">10 RTL Representation</a>
  <ul class="no-bullet">
    <li><a name="toc-RTL-Object-Types" href="#RTL-Objects">10.1 RTL Object Types</a></li>
    <li><a name="toc-RTL-Classes-and-Formats" href="#RTL-Classes">10.2 RTL Classes and Formats</a></li>
    <li><a name="toc-Access-to-Operands" href="#Accessors">10.3 Access to Operands</a></li>
    <li><a name="toc-Access-to-Special-Operands" href="#Special-Accessors">10.4 Access to Special Operands</a></li>
    <li><a name="toc-Flags-in-an-RTL-Expression" href="#Flags">10.5 Flags in an RTL Expression</a></li>
    <li><a name="toc-Machine-Modes-1" href="#Machine-Modes">10.6 Machine Modes</a></li>
    <li><a name="toc-Constant-Expression-Types" href="#Constants">10.7 Constant Expression Types</a></li>
    <li><a name="toc-Registers-and-Memory" href="#Regs-and-Memory">10.8 Registers and Memory</a></li>
    <li><a name="toc-RTL-Expressions-for-Arithmetic" href="#Arithmetic">10.9 RTL Expressions for Arithmetic</a></li>
    <li><a name="toc-Comparison-Operations" href="#Comparisons">10.10 Comparison Operations</a></li>
    <li><a name="toc-Bit_002dFields-1" href="#Bit_002dFields">10.11 Bit-Fields</a></li>
    <li><a name="toc-Vector-Operations-1" href="#Vector-Operations">10.12 Vector Operations</a></li>
    <li><a name="toc-Conversions-1" href="#Conversions">10.13 Conversions</a></li>
    <li><a name="toc-Declarations-1" href="#RTL-Declarations">10.14 Declarations</a></li>
    <li><a name="toc-Side-Effect-Expressions" href="#Side-Effects">10.15 Side Effect Expressions</a></li>
    <li><a name="toc-Embedded-Side_002dEffects-on-Addresses" href="#Incdec">10.16 Embedded Side-Effects on Addresses</a></li>
    <li><a name="toc-Assembler-Instructions-as-Expressions" href="#Assembler">10.17 Assembler Instructions as Expressions</a></li>
    <li><a name="toc-Variable-Location-Debug-Information-in-RTL" href="#Debug-Information">10.18 Variable Location Debug Information in RTL</a></li>
    <li><a name="toc-Insns-1" href="#Insns">10.19 Insns</a></li>
    <li><a name="toc-RTL-Representation-of-Function_002dCall-Insns" href="#Calls">10.20 RTL Representation of Function-Call Insns</a></li>
    <li><a name="toc-Structure-Sharing-Assumptions" href="#Sharing">10.21 Structure Sharing Assumptions</a></li>
    <li><a name="toc-Reading-RTL-1" href="#Reading-RTL">10.22 Reading RTL</a></li>
  </ul></li>
  <li><a name="toc-GENERIC-1" href="#GENERIC">11 GENERIC</a>
  <ul class="no-bullet">
    <li><a name="toc-Deficiencies-1" href="#Deficiencies">11.1 Deficiencies</a></li>
    <li><a name="toc-Overview-1" href="#Tree-overview">11.2 Overview</a>
    <ul class="no-bullet">
      <li><a name="toc-Trees" href="#Macros-and-Functions">11.2.1 Trees</a></li>
      <li><a name="toc-Identifiers-1" href="#Identifiers">11.2.2 Identifiers</a></li>
      <li><a name="toc-Containers-1" href="#Containers">11.2.3 Containers</a></li>
    </ul></li>
    <li><a name="toc-Types-1" href="#Types">11.3 Types</a></li>
    <li><a name="toc-Declarations-2" href="#Declarations">11.4 Declarations</a>
    <ul class="no-bullet">
      <li><a name="toc-Working-with-declarations-1" href="#Working-with-declarations">11.4.1 Working with declarations</a></li>
      <li><a name="toc-Internal-structure-1" href="#Internal-structure">11.4.2 Internal structure</a>
      <ul class="no-bullet">
        <li><a name="toc-Current-structure-hierarchy-1" href="#Current-structure-hierarchy">11.4.2.1 Current structure hierarchy</a></li>
        <li><a name="toc-Adding-new-DECL-node-types-1" href="#Adding-new-DECL-node-types">11.4.2.2 Adding new DECL node types</a></li>
      </ul></li>
    </ul></li>
    <li><a name="toc-Attributes-in-trees" href="#Attributes">11.5 Attributes in trees</a></li>
    <li><a name="toc-Expressions-1" href="#Expression-trees">11.6 Expressions</a>
    <ul class="no-bullet">
      <li><a name="toc-Constant-expressions-1" href="#Constant-expressions">11.6.1 Constant expressions</a></li>
      <li><a name="toc-References-to-storage" href="#Storage-References">11.6.2 References to storage</a></li>
      <li><a name="toc-Unary-and-Binary-Expressions-1" href="#Unary-and-Binary-Expressions">11.6.3 Unary and Binary Expressions</a></li>
      <li><a name="toc-Vectors-1" href="#Vectors">11.6.4 Vectors</a></li>
    </ul></li>
    <li><a name="toc-Statements-1" href="#Statements">11.7 Statements</a>
    <ul class="no-bullet">
      <li><a name="toc-Basic-Statements-1" href="#Basic-Statements">11.7.1 Basic Statements</a></li>
      <li><a name="toc-Blocks-1" href="#Blocks">11.7.2 Blocks</a></li>
      <li><a name="toc-Statement-Sequences-1" href="#Statement-Sequences">11.7.3 Statement Sequences</a></li>
      <li><a name="toc-Empty-Statements-1" href="#Empty-Statements">11.7.4 Empty Statements</a></li>
      <li><a name="toc-Jumps-1" href="#Jumps">11.7.5 Jumps</a></li>
      <li><a name="toc-Cleanups-1" href="#Cleanups">11.7.6 Cleanups</a></li>
      <li><a name="toc-OpenMP-1" href="#OpenMP">11.7.7 OpenMP</a></li>
    </ul></li>
    <li><a name="toc-Functions-1" href="#Functions">11.8 Functions</a>
    <ul class="no-bullet">
      <li><a name="toc-Function-Basics-1" href="#Function-Basics">11.8.1 Function Basics</a></li>
      <li><a name="toc-Function-Properties-1" href="#Function-Properties">11.8.2 Function Properties</a></li>
    </ul></li>
    <li><a name="toc-Language_002ddependent-trees-1" href="#Language_002ddependent-trees">11.9 Language-dependent trees</a></li>
    <li><a name="toc-C-and-C_002b_002b-Trees-1" href="#C-and-C_002b_002b-Trees">11.10 C and C++ Trees</a>
    <ul class="no-bullet">
      <li><a name="toc-Types-for-C_002b_002b-1" href="#Types-for-C_002b_002b">11.10.1 Types for C++</a></li>
      <li><a name="toc-Namespaces-1" href="#Namespaces">11.10.2 Namespaces</a></li>
      <li><a name="toc-Classes-1" href="#Classes">11.10.3 Classes</a></li>
      <li><a name="toc-Functions-for-C_002b_002b-1" href="#Functions-for-C_002b_002b">11.10.4 Functions for C++</a></li>
      <li><a name="toc-Statements-for-C_002b_002b-1" href="#Statements-for-C_002b_002b">11.10.5 Statements for C++</a>
      <ul class="no-bullet">
        <li><a name="toc-Statements-2" href="#Statements-2">11.10.5.1 Statements</a></li>
      </ul></li>
      <li><a name="toc-C_002b_002b-Expressions-1" href="#C_002b_002b-Expressions">11.10.6 C++ Expressions</a></li>
    </ul></li>
    <li><a name="toc-Java-Trees-1" href="#Java-Trees">11.11 Java Trees</a></li>
  </ul></li>
  <li><a name="toc-GIMPLE-1" href="#GIMPLE">12 GIMPLE</a>
  <ul class="no-bullet">
    <li><a name="toc-Tuple-representation-1" href="#Tuple-representation">12.1 Tuple representation</a>
    <ul class="no-bullet">
      <li><a name="toc-gimple_005fstatement_005fbase-_0028gsbase_0029" href="#gimple_005fstatement_005fbase-_0028gsbase_0029">12.1.1 <code>gimple_statement_base</code> (gsbase)</a></li>
      <li><a name="toc-gimple_005fstatement_005fwith_005fops" href="#gimple_005fstatement_005fwith_005fops">12.1.2 <code>gimple_statement_with_ops</code></a></li>
      <li><a name="toc-gimple_005fstatement_005fwith_005fmemory_005fops" href="#gimple_005fstatement_005fwith_005fmemory_005fops">12.1.3 <code>gimple_statement_with_memory_ops</code></a></li>
    </ul></li>
    <li><a name="toc-GIMPLE-instruction-set-1" href="#GIMPLE-instruction-set">12.2 GIMPLE instruction set</a></li>
    <li><a name="toc-Exception-Handling-1" href="#GIMPLE-Exception-Handling">12.3 Exception Handling</a></li>
    <li><a name="toc-Temporaries-1" href="#Temporaries">12.4 Temporaries</a></li>
    <li><a name="toc-Operands-1" href="#Operands">12.5 Operands</a>
    <ul class="no-bullet">
      <li><a name="toc-Compound-Expressions-1" href="#Compound-Expressions">12.5.1 Compound Expressions</a></li>
      <li><a name="toc-Compound-Lvalues-1" href="#Compound-Lvalues">12.5.2 Compound Lvalues</a></li>
      <li><a name="toc-Conditional-Expressions-1" href="#Conditional-Expressions">12.5.3 Conditional Expressions</a></li>
      <li><a name="toc-Logical-Operators-1" href="#Logical-Operators">12.5.4 Logical Operators</a></li>
      <li><a name="toc-Manipulating-operands" href="#Manipulating-operands">12.5.5 Manipulating operands</a></li>
      <li><a name="toc-Operand-vector-allocation" href="#Operand-vector-allocation">12.5.6 Operand vector allocation</a></li>
      <li><a name="toc-Operand-validation" href="#Operand-validation">12.5.7 Operand validation</a></li>
      <li><a name="toc-Statement-validation" href="#Statement-validation">12.5.8 Statement validation</a></li>
    </ul></li>
    <li><a name="toc-Manipulating-GIMPLE-statements-1" href="#Manipulating-GIMPLE-statements">12.6 Manipulating GIMPLE statements</a>
    <ul class="no-bullet">
      <li><a name="toc-Common-accessors" href="#Common-accessors">12.6.1 Common accessors</a></li>
    </ul></li>
    <li><a name="toc-Tuple-specific-accessors-1" href="#Tuple-specific-accessors">12.7 Tuple specific accessors</a>
    <ul class="no-bullet">
      <li><a name="toc-GIMPLE_005fASM-1" href="#GIMPLE_005fASM">12.7.1 <code>GIMPLE_ASM</code></a></li>
      <li><a name="toc-GIMPLE_005fASSIGN-1" href="#GIMPLE_005fASSIGN">12.7.2 <code>GIMPLE_ASSIGN</code></a></li>
      <li><a name="toc-GIMPLE_005fBIND-1" href="#GIMPLE_005fBIND">12.7.3 <code>GIMPLE_BIND</code></a></li>
      <li><a name="toc-GIMPLE_005fCALL-1" href="#GIMPLE_005fCALL">12.7.4 <code>GIMPLE_CALL</code></a></li>
      <li><a name="toc-GIMPLE_005fCATCH-1" href="#GIMPLE_005fCATCH">12.7.5 <code>GIMPLE_CATCH</code></a></li>
      <li><a name="toc-GIMPLE_005fCOND-1" href="#GIMPLE_005fCOND">12.7.6 <code>GIMPLE_COND</code></a></li>
      <li><a name="toc-GIMPLE_005fDEBUG-1" href="#GIMPLE_005fDEBUG">12.7.7 <code>GIMPLE_DEBUG</code></a></li>
      <li><a name="toc-GIMPLE_005fEH_005fFILTER-1" href="#GIMPLE_005fEH_005fFILTER">12.7.8 <code>GIMPLE_EH_FILTER</code></a></li>
      <li><a name="toc-GIMPLE_005fLABEL-1" href="#GIMPLE_005fLABEL">12.7.9 <code>GIMPLE_LABEL</code></a></li>
      <li><a name="toc-GIMPLE_005fNOP-1" href="#GIMPLE_005fNOP">12.7.10 <code>GIMPLE_NOP</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fATOMIC_005fLOAD-1" href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD">12.7.11 <code>GIMPLE_OMP_ATOMIC_LOAD</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fATOMIC_005fSTORE-1" href="#GIMPLE_005fOMP_005fATOMIC_005fSTORE">12.7.12 <code>GIMPLE_OMP_ATOMIC_STORE</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fCONTINUE-1" href="#GIMPLE_005fOMP_005fCONTINUE">12.7.13 <code>GIMPLE_OMP_CONTINUE</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fCRITICAL-1" href="#GIMPLE_005fOMP_005fCRITICAL">12.7.14 <code>GIMPLE_OMP_CRITICAL</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fFOR-1" href="#GIMPLE_005fOMP_005fFOR">12.7.15 <code>GIMPLE_OMP_FOR</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fMASTER-1" href="#GIMPLE_005fOMP_005fMASTER">12.7.16 <code>GIMPLE_OMP_MASTER</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fORDERED-1" href="#GIMPLE_005fOMP_005fORDERED">12.7.17 <code>GIMPLE_OMP_ORDERED</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fPARALLEL-1" href="#GIMPLE_005fOMP_005fPARALLEL">12.7.18 <code>GIMPLE_OMP_PARALLEL</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fRETURN-1" href="#GIMPLE_005fOMP_005fRETURN">12.7.19 <code>GIMPLE_OMP_RETURN</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fSECTION-1" href="#GIMPLE_005fOMP_005fSECTION">12.7.20 <code>GIMPLE_OMP_SECTION</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fSECTIONS-1" href="#GIMPLE_005fOMP_005fSECTIONS">12.7.21 <code>GIMPLE_OMP_SECTIONS</code></a></li>
      <li><a name="toc-GIMPLE_005fOMP_005fSINGLE-1" href="#GIMPLE_005fOMP_005fSINGLE">12.7.22 <code>GIMPLE_OMP_SINGLE</code></a></li>
      <li><a name="toc-GIMPLE_005fPHI-1" href="#GIMPLE_005fPHI">12.7.23 <code>GIMPLE_PHI</code></a></li>
      <li><a name="toc-GIMPLE_005fRESX-1" href="#GIMPLE_005fRESX">12.7.24 <code>GIMPLE_RESX</code></a></li>
      <li><a name="toc-GIMPLE_005fRETURN-1" href="#GIMPLE_005fRETURN">12.7.25 <code>GIMPLE_RETURN</code></a></li>
      <li><a name="toc-GIMPLE_005fSWITCH-1" href="#GIMPLE_005fSWITCH">12.7.26 <code>GIMPLE_SWITCH</code></a></li>
      <li><a name="toc-GIMPLE_005fTRY-1" href="#GIMPLE_005fTRY">12.7.27 <code>GIMPLE_TRY</code></a></li>
      <li><a name="toc-GIMPLE_005fWITH_005fCLEANUP_005fEXPR-1" href="#GIMPLE_005fWITH_005fCLEANUP_005fEXPR">12.7.28 <code>GIMPLE_WITH_CLEANUP_EXPR</code></a></li>
    </ul></li>
    <li><a name="toc-GIMPLE-sequences-1" href="#GIMPLE-sequences">12.8 GIMPLE sequences</a></li>
    <li><a name="toc-Sequence-iterators-1" href="#Sequence-iterators">12.9 Sequence iterators</a></li>
    <li><a name="toc-Adding-a-new-GIMPLE-statement-code-1" href="#Adding-a-new-GIMPLE-statement-code">12.10 Adding a new GIMPLE statement code</a></li>
    <li><a name="toc-Statement-and-operand-traversals-1" href="#Statement-and-operand-traversals">12.11 Statement and operand traversals</a></li>
  </ul></li>
  <li><a name="toc-Analysis-and-Optimization-of-GIMPLE-tuples" href="#Tree-SSA">13 Analysis and Optimization of GIMPLE tuples</a>
  <ul class="no-bullet">
    <li><a name="toc-Annotations-1" href="#Annotations">13.1 Annotations</a></li>
    <li><a name="toc-SSA-Operands-1" href="#SSA-Operands">13.2 SSA Operands</a>
    <ul class="no-bullet">
      <li><a name="toc-Operand-Iterators-And-Access-Routines" href="#Operand-Iterators-And-Access-Routines">13.2.1 Operand Iterators And Access Routines</a></li>
      <li><a name="toc-Immediate-Uses" href="#Immediate-Uses">13.2.2 Immediate Uses</a></li>
    </ul></li>
    <li><a name="toc-Static-Single-Assignment" href="#SSA">13.3 Static Single Assignment</a>
    <ul class="no-bullet">
      <li><a name="toc-Preserving-the-SSA-form" href="#Preserving-the-SSA-form">13.3.1 Preserving the SSA form</a></li>
      <li><a name="toc-Preserving-the-virtual-SSA-form" href="#Preserving-the-virtual-SSA-form">13.3.2 Preserving the virtual SSA form</a></li>
      <li><a name="toc-Examining-SSA_005fNAME-nodes" href="#Examining-SSA_005fNAME-nodes">13.3.3 Examining <code>SSA_NAME</code> nodes</a></li>
      <li><a name="toc-Walking-use_002ddef-chains" href="#Walking-use_002ddef-chains">13.3.4 Walking use-def chains</a></li>
      <li><a name="toc-Walking-the-dominator-tree" href="#Walking-the-dominator-tree">13.3.5 Walking the dominator tree</a></li>
    </ul></li>
    <li><a name="toc-Alias-analysis-1" href="#Alias-analysis">13.4 Alias analysis</a></li>
    <li><a name="toc-Memory-model-1" href="#Memory-model">13.5 Memory model</a></li>
  </ul></li>
  <li><a name="toc-Analysis-and-Representation-of-Loops" href="#Loop-Analysis-and-Representation">14 Analysis and Representation of Loops</a>
  <ul class="no-bullet">
    <li><a name="toc-Loop-representation-1" href="#Loop-representation">14.1 Loop representation</a></li>
    <li><a name="toc-Loop-querying-1" href="#Loop-querying">14.2 Loop querying</a></li>
    <li><a name="toc-Loop-manipulation-1" href="#Loop-manipulation">14.3 Loop manipulation</a></li>
    <li><a name="toc-Loop_002dclosed-SSA-form" href="#LCSSA">14.4 Loop-closed SSA form</a></li>
    <li><a name="toc-Scalar-evolutions-1" href="#Scalar-evolutions">14.5 Scalar evolutions</a></li>
    <li><a name="toc-IV-analysis-on-RTL" href="#loop_002div">14.6 IV analysis on RTL</a></li>
    <li><a name="toc-Number-of-iterations-analysis" href="#Number-of-iterations">14.7 Number of iterations analysis</a></li>
    <li><a name="toc-Data-Dependency-Analysis" href="#Dependency-analysis">14.8 Data Dependency Analysis</a></li>
    <li><a name="toc-Linear-loop-transformations-framework" href="#Lambda">14.9 Linear loop transformations framework</a></li>
    <li><a name="toc-Omega-a-solver-for-linear-programming-problems" href="#Omega">14.10 Omega a solver for linear programming problems</a></li>
  </ul></li>
  <li><a name="toc-Control-Flow-Graph" href="#Control-Flow">15 Control Flow Graph</a>
  <ul class="no-bullet">
    <li><a name="toc-Basic-Blocks-1" href="#Basic-Blocks">15.1 Basic Blocks</a></li>
    <li><a name="toc-Edges-1" href="#Edges">15.2 Edges</a></li>
    <li><a name="toc-Profile-information-1" href="#Profile-information">15.3 Profile information</a></li>
    <li><a name="toc-Maintaining-the-CFG-1" href="#Maintaining-the-CFG">15.4 Maintaining the CFG</a></li>
    <li><a name="toc-Liveness-information-1" href="#Liveness-information">15.5 Liveness information</a></li>
  </ul></li>
  <li><a name="toc-Machine-Descriptions" href="#Machine-Desc">16 Machine Descriptions</a>
  <ul class="no-bullet">
    <li><a name="toc-Overview-of-How-the-Machine-Description-is-Used" href="#Overview">16.1 Overview of How the Machine Description is Used</a></li>
    <li><a name="toc-Everything-about-Instruction-Patterns" href="#Patterns">16.2 Everything about Instruction Patterns</a></li>
    <li><a name="toc-Example-of-define_005finsn" href="#Example">16.3 Example of <code>define_insn</code></a></li>
    <li><a name="toc-RTL-Template-1" href="#RTL-Template">16.4 RTL Template</a></li>
    <li><a name="toc-Output-Templates-and-Operand-Substitution" href="#Output-Template">16.5 Output Templates and Operand Substitution</a></li>
    <li><a name="toc-C-Statements-for-Assembler-Output" href="#Output-Statement">16.6 C Statements for Assembler Output</a></li>
    <li><a name="toc-Predicates-1" href="#Predicates">16.7 Predicates</a>
    <ul class="no-bullet">
      <li><a name="toc-Machine_002dIndependent-Predicates-1" href="#Machine_002dIndependent-Predicates">16.7.1 Machine-Independent Predicates</a></li>
      <li><a name="toc-Defining-Machine_002dSpecific-Predicates" href="#Defining-Predicates">16.7.2 Defining Machine-Specific Predicates</a></li>
    </ul></li>
    <li><a name="toc-Operand-Constraints" href="#Constraints">16.8 Operand Constraints</a>
    <ul class="no-bullet">
      <li><a name="toc-Simple-Constraints-1" href="#Simple-Constraints">16.8.1 Simple Constraints</a></li>
      <li><a name="toc-Multiple-Alternative-Constraints" href="#Multi_002dAlternative">16.8.2 Multiple Alternative Constraints</a></li>
      <li><a name="toc-Register-Class-Preferences" href="#Class-Preferences">16.8.3 Register Class Preferences</a></li>
      <li><a name="toc-Constraint-Modifier-Characters" href="#Modifiers">16.8.4 Constraint Modifier Characters</a></li>
      <li><a name="toc-Constraints-for-Particular-Machines" href="#Machine-Constraints">16.8.5 Constraints for Particular Machines</a></li>
      <li><a name="toc-Disable-insn-alternatives-using-the-enabled-attribute" href="#Disable-Insn-Alternatives">16.8.6 Disable insn alternatives using the <code>enabled</code> attribute</a></li>
      <li><a name="toc-Defining-Machine_002dSpecific-Constraints" href="#Define-Constraints">16.8.7 Defining Machine-Specific Constraints</a></li>
      <li><a name="toc-Testing-constraints-from-C" href="#C-Constraint-Interface">16.8.8 Testing constraints from C</a></li>
    </ul></li>
    <li><a name="toc-Standard-Pattern-Names-For-Generation" href="#Standard-Names">16.9 Standard Pattern Names For Generation</a></li>
    <li><a name="toc-When-the-Order-of-Patterns-Matters" href="#Pattern-Ordering">16.10 When the Order of Patterns Matters</a></li>
    <li><a name="toc-Interdependence-of-Patterns" href="#Dependent-Patterns">16.11 Interdependence of Patterns</a></li>
    <li><a name="toc-Defining-Jump-Instruction-Patterns" href="#Jump-Patterns">16.12 Defining Jump Instruction Patterns</a></li>
    <li><a name="toc-Defining-Looping-Instruction-Patterns" href="#Looping-Patterns">16.13 Defining Looping Instruction Patterns</a></li>
    <li><a name="toc-Canonicalization-of-Instructions" href="#Insn-Canonicalizations">16.14 Canonicalization of Instructions</a></li>
    <li><a name="toc-Defining-RTL-Sequences-for-Code-Generation" href="#Expander-Definitions">16.15 Defining RTL Sequences for Code Generation</a></li>
    <li><a name="toc-Defining-How-to-Split-Instructions" href="#Insn-Splitting">16.16 Defining How to Split Instructions</a></li>
    <li><a name="toc-Including-Patterns-in-Machine-Descriptions_002e" href="#Including-Patterns">16.17 Including Patterns in Machine Descriptions.</a>
    <ul class="no-bullet">
      <li><a name="toc-RTL-Generation-Tool-Options-for-Directory-Search" href="#RTL-Generation-Tool-Options-for-Directory-Search">16.17.1 RTL Generation Tool Options for Directory Search</a></li>
    </ul></li>
    <li><a name="toc-Machine_002dSpecific-Peephole-Optimizers" href="#Peephole-Definitions">16.18 Machine-Specific Peephole Optimizers</a>
    <ul class="no-bullet">
      <li><a name="toc-RTL-to-Text-Peephole-Optimizers" href="#define_005fpeephole">16.18.1 RTL to Text Peephole Optimizers</a></li>
      <li><a name="toc-RTL-to-RTL-Peephole-Optimizers" href="#define_005fpeephole2">16.18.2 RTL to RTL Peephole Optimizers</a></li>
    </ul></li>
    <li><a name="toc-Instruction-Attributes" href="#Insn-Attributes">16.19 Instruction Attributes</a>
    <ul class="no-bullet">
      <li><a name="toc-Defining-Attributes-and-their-Values" href="#Defining-Attributes">16.19.1 Defining Attributes and their Values</a></li>
      <li><a name="toc-Attribute-Expressions" href="#Expressions">16.19.2 Attribute Expressions</a></li>
      <li><a name="toc-Assigning-Attribute-Values-to-Insns" href="#Tagging-Insns">16.19.3 Assigning Attribute Values to Insns</a></li>
      <li><a name="toc-Example-of-Attribute-Specifications" href="#Attr-Example">16.19.4 Example of Attribute Specifications</a></li>
      <li><a name="toc-Computing-the-Length-of-an-Insn" href="#Insn-Lengths">16.19.5 Computing the Length of an Insn</a></li>
      <li><a name="toc-Constant-Attributes-1" href="#Constant-Attributes">16.19.6 Constant Attributes</a></li>
      <li><a name="toc-Delay-Slot-Scheduling" href="#Delay-Slots">16.19.7 Delay Slot Scheduling</a></li>
      <li><a name="toc-Specifying-processor-pipeline-description" href="#Processor-pipeline-description">16.19.8 Specifying processor pipeline description</a></li>
    </ul></li>
    <li><a name="toc-Conditional-Execution-1" href="#Conditional-Execution">16.20 Conditional Execution</a></li>
    <li><a name="toc-RTL-Templates-Transformations" href="#Define-Subst">16.21 RTL Templates Transformations</a>
    <ul class="no-bullet">
      <li><a name="toc-define_005fsubst-Example" href="#Define-Subst-Example">16.21.1 <code>define_subst</code> Example</a></li>
      <li><a name="toc-Pattern-Matching-in-define_005fsubst" href="#Define-Subst-Pattern-Matching">16.21.2 Pattern Matching in <code>define_subst</code></a></li>
      <li><a name="toc-Generation-of-output-template-in-define_005fsubst" href="#Define-Subst-Output-Template">16.21.3 Generation of output template in <code>define_subst</code></a></li>
    </ul></li>
    <li><a name="toc-Constant-Definitions-1" href="#Constant-Definitions">16.22 Constant Definitions</a></li>
    <li><a name="toc-Iterators-1" href="#Iterators">16.23 Iterators</a>
    <ul class="no-bullet">
      <li><a name="toc-Mode-Iterators-1" href="#Mode-Iterators">16.23.1 Mode Iterators</a>
      <ul class="no-bullet">
        <li><a name="toc-Defining-Mode-Iterators-1" href="#Defining-Mode-Iterators">16.23.1.1 Defining Mode Iterators</a></li>
        <li><a name="toc-Substitution-in-Mode-Iterators" href="#Substitutions">16.23.1.2 Substitution in Mode Iterators</a></li>
        <li><a name="toc-Mode-Iterator-Examples" href="#Examples">16.23.1.3 Mode Iterator Examples</a></li>
      </ul></li>
      <li><a name="toc-Code-Iterators-1" href="#Code-Iterators">16.23.2 Code Iterators</a></li>
      <li><a name="toc-Int-Iterators-1" href="#Int-Iterators">16.23.3 Int Iterators</a></li>
      <li><a name="toc-Subst-Iterators-1" href="#Subst-Iterators">16.23.4 Subst Iterators</a></li>
    </ul></li>
  </ul></li>
  <li><a name="toc-Target-Description-Macros-and-Functions" href="#Target-Macros">17 Target Description Macros and Functions</a>
  <ul class="no-bullet">
    <li><a name="toc-The-Global-targetm-Variable" href="#Target-Structure">17.1 The Global <code>targetm</code> Variable</a></li>
    <li><a name="toc-Controlling-the-Compilation-Driver_002c-gcc" href="#Driver">17.2 Controlling the Compilation Driver, <samp>gcc</samp></a></li>
    <li><a name="toc-Run_002dtime-Target-Specification" href="#Run_002dtime-Target">17.3 Run-time Target Specification</a></li>
    <li><a name="toc-Defining-data-structures-for-per_002dfunction-information_002e" href="#Per_002dFunction-Data">17.4 Defining data structures for per-function information.</a></li>
    <li><a name="toc-Storage-Layout-1" href="#Storage-Layout">17.5 Storage Layout</a></li>
    <li><a name="toc-Layout-of-Source-Language-Data-Types" href="#Type-Layout">17.6 Layout of Source Language Data Types</a></li>
    <li><a name="toc-Register-Usage" href="#Registers">17.7 Register Usage</a>
    <ul class="no-bullet">
      <li><a name="toc-Basic-Characteristics-of-Registers" href="#Register-Basics">17.7.1 Basic Characteristics of Registers</a></li>
      <li><a name="toc-Order-of-Allocation-of-Registers" href="#Allocation-Order">17.7.2 Order of Allocation of Registers</a></li>
      <li><a name="toc-How-Values-Fit-in-Registers" href="#Values-in-Registers">17.7.3 How Values Fit in Registers</a></li>
      <li><a name="toc-Handling-Leaf-Functions" href="#Leaf-Functions">17.7.4 Handling Leaf Functions</a></li>
      <li><a name="toc-Registers-That-Form-a-Stack" href="#Stack-Registers">17.7.5 Registers That Form a Stack</a></li>
    </ul></li>
    <li><a name="toc-Register-Classes-1" href="#Register-Classes">17.8 Register Classes</a></li>
    <li><a name="toc-Obsolete-Macros-for-Defining-Constraints" href="#Old-Constraints">17.9 Obsolete Macros for Defining Constraints</a></li>
    <li><a name="toc-Stack-Layout-and-Calling-Conventions" href="#Stack-and-Calling">17.10 Stack Layout and Calling Conventions</a>
    <ul class="no-bullet">
      <li><a name="toc-Basic-Stack-Layout" href="#Frame-Layout">17.10.1 Basic Stack Layout</a></li>
      <li><a name="toc-Exception-Handling-Support" href="#Exception-Handling">17.10.2 Exception Handling Support</a></li>
      <li><a name="toc-Specifying-How-Stack-Checking-is-Done" href="#Stack-Checking">17.10.3 Specifying How Stack Checking is Done</a></li>
      <li><a name="toc-Registers-That-Address-the-Stack-Frame" href="#Frame-Registers">17.10.4 Registers That Address the Stack Frame</a></li>
      <li><a name="toc-Eliminating-Frame-Pointer-and-Arg-Pointer" href="#Elimination">17.10.5 Eliminating Frame Pointer and Arg Pointer</a></li>
      <li><a name="toc-Passing-Function-Arguments-on-the-Stack" href="#Stack-Arguments">17.10.6 Passing Function Arguments on the Stack</a></li>
      <li><a name="toc-Passing-Arguments-in-Registers" href="#Register-Arguments">17.10.7 Passing Arguments in Registers</a></li>
      <li><a name="toc-How-Scalar-Function-Values-Are-Returned" href="#Scalar-Return">17.10.8 How Scalar Function Values Are Returned</a></li>
      <li><a name="toc-How-Large-Values-Are-Returned" href="#Aggregate-Return">17.10.9 How Large Values Are Returned</a></li>
      <li><a name="toc-Caller_002dSaves-Register-Allocation" href="#Caller-Saves">17.10.10 Caller-Saves Register Allocation</a></li>
      <li><a name="toc-Function-Entry-and-Exit" href="#Function-Entry">17.10.11 Function Entry and Exit</a></li>
      <li><a name="toc-Generating-Code-for-Profiling" href="#Profiling">17.10.12 Generating Code for Profiling</a></li>
      <li><a name="toc-Permitting-tail-calls" href="#Tail-Calls">17.10.13 Permitting tail calls</a></li>
      <li><a name="toc-Stack-smashing-protection" href="#Stack-Smashing-Protection">17.10.14 Stack smashing protection</a></li>
    </ul></li>
    <li><a name="toc-Implementing-the-Varargs-Macros" href="#Varargs">17.11 Implementing the Varargs Macros</a></li>
    <li><a name="toc-Trampolines-for-Nested-Functions" href="#Trampolines">17.12 Trampolines for Nested Functions</a></li>
    <li><a name="toc-Implicit-Calls-to-Library-Routines" href="#Library-Calls">17.13 Implicit Calls to Library Routines</a></li>
    <li><a name="toc-Addressing-Modes-1" href="#Addressing-Modes">17.14 Addressing Modes</a></li>
    <li><a name="toc-Anchored-Addresses-1" href="#Anchored-Addresses">17.15 Anchored Addresses</a></li>
    <li><a name="toc-Condition-Code-Status" href="#Condition-Code">17.16 Condition Code Status</a>
    <ul class="no-bullet">
      <li><a name="toc-Representation-of-condition-codes-using-_0028cc0_0029" href="#CC0-Condition-Codes">17.16.1 Representation of condition codes using <code>(cc0)</code></a></li>
      <li><a name="toc-Representation-of-condition-codes-using-registers" href="#MODE_005fCC-Condition-Codes">17.16.2 Representation of condition codes using registers</a></li>
    </ul></li>
    <li><a name="toc-Describing-Relative-Costs-of-Operations" href="#Costs">17.17 Describing Relative Costs of Operations</a></li>
    <li><a name="toc-Adjusting-the-Instruction-Scheduler" href="#Scheduling">17.18 Adjusting the Instruction Scheduler</a></li>
    <li><a name="toc-Dividing-the-Output-into-Sections-_0028Texts_002c-Data_002c-_2026_0029" href="#Sections">17.19 Dividing the Output into Sections (Texts, Data, &hellip;)</a></li>
    <li><a name="toc-Position-Independent-Code" href="#PIC">17.20 Position Independent Code</a></li>
    <li><a name="toc-Defining-the-Output-Assembler-Language" href="#Assembler-Format">17.21 Defining the Output Assembler Language</a>
    <ul class="no-bullet">
      <li><a name="toc-The-Overall-Framework-of-an-Assembler-File" href="#File-Framework">17.21.1 The Overall Framework of an Assembler File</a></li>
      <li><a name="toc-Output-of-Data" href="#Data-Output">17.21.2 Output of Data</a></li>
      <li><a name="toc-Output-of-Uninitialized-Variables" href="#Uninitialized-Data">17.21.3 Output of Uninitialized Variables</a></li>
      <li><a name="toc-Output-and-Generation-of-Labels" href="#Label-Output">17.21.4 Output and Generation of Labels</a></li>
      <li><a name="toc-How-Initialization-Functions-Are-Handled" href="#Initialization">17.21.5 How Initialization Functions Are Handled</a></li>
      <li><a name="toc-Macros-Controlling-Initialization-Routines" href="#Macros-for-Initialization">17.21.6 Macros Controlling Initialization Routines</a></li>
      <li><a name="toc-Output-of-Assembler-Instructions" href="#Instruction-Output">17.21.7 Output of Assembler Instructions</a></li>
      <li><a name="toc-Output-of-Dispatch-Tables" href="#Dispatch-Tables">17.21.8 Output of Dispatch Tables</a></li>
      <li><a name="toc-Assembler-Commands-for-Exception-Regions" href="#Exception-Region-Output">17.21.9 Assembler Commands for Exception Regions</a></li>
      <li><a name="toc-Assembler-Commands-for-Alignment" href="#Alignment-Output">17.21.10 Assembler Commands for Alignment</a></li>
    </ul></li>
    <li><a name="toc-Controlling-Debugging-Information-Format" href="#Debugging-Info">17.22 Controlling Debugging Information Format</a>
    <ul class="no-bullet">
      <li><a name="toc-Macros-Affecting-All-Debugging-Formats" href="#All-Debuggers">17.22.1 Macros Affecting All Debugging Formats</a></li>
      <li><a name="toc-Specific-Options-for-DBX-Output" href="#DBX-Options">17.22.2 Specific Options for DBX Output</a></li>
      <li><a name="toc-Open_002dEnded-Hooks-for-DBX-Format" href="#DBX-Hooks">17.22.3 Open-Ended Hooks for DBX Format</a></li>
      <li><a name="toc-File-Names-in-DBX-Format" href="#File-Names-and-DBX">17.22.4 File Names in DBX Format</a></li>
      <li><a name="toc-Macros-for-SDB-and-DWARF-Output" href="#SDB-and-DWARF">17.22.5 Macros for SDB and DWARF Output</a></li>
      <li><a name="toc-Macros-for-VMS-Debug-Format" href="#VMS-Debug">17.22.6 Macros for VMS Debug Format</a></li>
    </ul></li>
    <li><a name="toc-Cross-Compilation-and-Floating-Point" href="#Floating-Point">17.23 Cross Compilation and Floating Point</a></li>
    <li><a name="toc-Mode-Switching-Instructions" href="#Mode-Switching">17.24 Mode Switching Instructions</a></li>
    <li><a name="toc-Defining-target_002dspecific-uses-of-_005f_005fattribute_005f_005f" href="#Target-Attributes">17.25 Defining target-specific uses of <code>__attribute__</code></a></li>
    <li><a name="toc-Emulating-TLS" href="#Emulated-TLS">17.26 Emulating TLS</a></li>
    <li><a name="toc-Defining-coprocessor-specifics-for-MIPS-targets_002e" href="#MIPS-Coprocessors">17.27 Defining coprocessor specifics for MIPS targets.</a></li>
    <li><a name="toc-Parameters-for-Precompiled-Header-Validity-Checking" href="#PCH-Target">17.28 Parameters for Precompiled Header Validity Checking</a></li>
    <li><a name="toc-C_002b_002b-ABI-parameters" href="#C_002b_002b-ABI">17.29 C++ ABI parameters</a></li>
    <li><a name="toc-Adding-support-for-named-address-spaces" href="#Named-Address-Spaces">17.30 Adding support for named address spaces</a></li>
    <li><a name="toc-Miscellaneous-Parameters" href="#Misc">17.31 Miscellaneous Parameters</a></li>
  </ul></li>
  <li><a name="toc-Host-Configuration" href="#Host-Config">18 Host Configuration</a>
  <ul class="no-bullet">
    <li><a name="toc-Host-Common-1" href="#Host-Common">18.1 Host Common</a></li>
    <li><a name="toc-Host-Filesystem" href="#Filesystem">18.2 Host Filesystem</a></li>
    <li><a name="toc-Host-Misc-1" href="#Host-Misc">18.3 Host Misc</a></li>
  </ul></li>
  <li><a name="toc-Makefile-Fragments" href="#Fragments">19 Makefile Fragments</a>
  <ul class="no-bullet">
    <li><a name="toc-Target-Makefile-Fragments" href="#Target-Fragment">19.1 Target Makefile Fragments</a></li>
    <li><a name="toc-Host-Makefile-Fragments" href="#Host-Fragment">19.2 Host Makefile Fragments</a></li>
  </ul></li>
  <li><a name="toc-collect2" href="#Collect2">20 <code>collect2</code></a></li>
  <li><a name="toc-Standard-Header-File-Directories" href="#Header-Dirs">21 Standard Header File Directories</a></li>
  <li><a name="toc-Memory-Management-and-Type-Information" href="#Type-Information">22 Memory Management and Type Information</a>
  <ul class="no-bullet">
    <li><a name="toc-The-Inside-of-a-GTY_0028_0028_0029_0029" href="#GTY-Options">22.1 The Inside of a <code>GTY(())</code></a></li>
    <li><a name="toc-Support-for-user_002dprovided-GC-marking-routines" href="#User-GC">22.2 Support for user-provided GC marking routines</a>
    <ul class="no-bullet">
      <li><a name="toc-User_002dprovided-marking-routines-for-template-types" href="#User_002dprovided-marking-routines-for-template-types">22.2.1 User-provided marking routines for template types</a></li>
    </ul></li>
    <li><a name="toc-Marking-Roots-for-the-Garbage-Collector" href="#GGC-Roots">22.3 Marking Roots for the Garbage Collector</a></li>
    <li><a name="toc-Source-Files-Containing-Type-Information" href="#Files">22.4 Source Files Containing Type Information</a></li>
    <li><a name="toc-How-to-invoke-the-garbage-collector" href="#Invoking-the-garbage-collector">22.5 How to invoke the garbage collector</a></li>
    <li><a name="toc-Troubleshooting-the-garbage-collector" href="#Troubleshooting">22.6 Troubleshooting the garbage collector</a></li>
  </ul></li>
  <li><a name="toc-Plugins-1" href="#Plugins">23 Plugins</a>
  <ul class="no-bullet">
    <li><a name="toc-Loading-Plugins" href="#Plugins-loading">23.1 Loading Plugins</a></li>
    <li><a name="toc-Plugin-API-1" href="#Plugin-API">23.2 Plugin API</a>
    <ul class="no-bullet">
      <li><a name="toc-Plugin-license-check" href="#Plugin-license-check">23.2.1 Plugin license check</a></li>
      <li><a name="toc-Plugin-initialization" href="#Plugin-initialization">23.2.2 Plugin initialization</a></li>
      <li><a name="toc-Plugin-callbacks" href="#Plugin-callbacks">23.2.3 Plugin callbacks</a></li>
    </ul></li>
    <li><a name="toc-Interacting-with-the-pass-manager" href="#Plugins-pass">23.3 Interacting with the pass manager</a></li>
    <li><a name="toc-Interacting-with-the-GCC-Garbage-Collector" href="#Plugins-GC">23.4 Interacting with the GCC Garbage Collector</a></li>
    <li><a name="toc-Giving-information-about-a-plugin" href="#Plugins-description">23.5 Giving information about a plugin</a></li>
    <li><a name="toc-Registering-custom-attributes-or-pragmas" href="#Plugins-attr">23.6 Registering custom attributes or pragmas</a></li>
    <li><a name="toc-Recording-information-about-pass-execution" href="#Plugins-recording">23.7 Recording information about pass execution</a></li>
    <li><a name="toc-Controlling-which-passes-are-being-run" href="#Plugins-gate">23.8 Controlling which passes are being run</a></li>
    <li><a name="toc-Keeping-track-of-available-passes" href="#Plugins-tracking">23.9 Keeping track of available passes</a></li>
    <li><a name="toc-Building-GCC-plugins" href="#Plugins-building">23.10 Building GCC plugins</a></li>
  </ul></li>
  <li><a name="toc-Link-Time-Optimization" href="#LTO">24 Link Time Optimization</a>
  <ul class="no-bullet">
    <li><a name="toc-Design-Overview" href="#LTO-Overview">24.1 Design Overview</a>
    <ul class="no-bullet">
      <li><a name="toc-LTO-modes-of-operation" href="#LTO-modes-of-operation">24.1.1 LTO modes of operation</a></li>
    </ul></li>
    <li><a name="toc-LTO-file-sections" href="#LTO-object-file-layout">24.2 LTO file sections</a></li>
    <li><a name="toc-Using-summary-information-in-IPA-passes" href="#IPA">24.3 Using summary information in IPA passes</a>
    <ul class="no-bullet">
      <li><a name="toc-Virtual-clones" href="#Virtual-clones">24.3.1 Virtual clones</a></li>
      <li><a name="toc-IPA-references" href="#IPA-references">24.3.2 IPA references</a></li>
      <li><a name="toc-Jump-functions" href="#Jump-functions">24.3.3 Jump functions</a></li>
    </ul></li>
    <li><a name="toc-Whole-program-assumptions_002c-linker-plugin-and-symbol-visibilities" href="#WHOPR">24.4 Whole program assumptions, linker plugin and symbol visibilities</a></li>
    <li><a name="toc-Internal-flags-controlling-lto1" href="#Internal-flags">24.5 Internal flags controlling <code>lto1</code></a></li>
  </ul></li>
  <li><a name="toc-Funding-Free-Software" href="#Funding">Funding Free Software</a></li>
  <li><a name="toc-The-GNU-Project-and-GNU_002fLinux" href="#GNU-Project">The GNU Project and GNU/Linux</a></li>
  <li><a name="toc-GNU-General-Public-License" href="#Copying">GNU General Public License</a></li>
  <li><a name="toc-GNU-Free-Documentation-License-1" href="#GNU-Free-Documentation-License">GNU Free Documentation License</a>
  <ul class="no-bullet">
    <li><a name="toc-ADDENDUM_003a-How-to-use-this-License-for-your-documents" href="#ADDENDUM_003a-How-to-use-this-License-for-your-documents">ADDENDUM: How to use this License for your documents</a></li>
  </ul></li>
  <li><a name="toc-Contributors-to-GCC" href="#Contributors">Contributors to GCC</a></li>
  <li><a name="toc-Option-Index-1" href="#Option-Index">Option Index</a></li>
  <li><a name="toc-Concept-Index-1" href="#Concept-Index">Concept Index</a></li>
</ul>
</div>


<a name="Top"></a>
<div class="header">
<p>
Next: <a href="#Contributing" accesskey="n" rel="next">Contributing</a>, Up: <a href="DIR.html#Top" accesskey="u" rel="up">(DIR)</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Introduction"></a>
<h1 class="top">Introduction</h1>
<a name="index-introduction"></a>

<p>This manual documents the internals of the GNU compilers, including
how to port them to new targets and some information about how to
write front ends for new languages.  It corresponds to the compilers
(Ubuntu 4.8.4-2ubuntu1~14.04.4)
version 4.8.4.  The use of the GNU compilers is documented in a
separate manual.  See <a href="gcc-4.html#Top">Introduction</a> in <cite>Using the GNU
Compiler Collection (GCC)</cite>.
</p>
<p>This manual is mainly a reference manual rather than a tutorial.  It
discusses how to contribute to GCC (see <a href="#Contributing">Contributing</a>), the
characteristics of the machines supported by GCC as hosts and targets
(see <a href="#Portability">Portability</a>), how GCC relates to the ABIs on such systems
(see <a href="#Interface">Interface</a>), and the characteristics of the languages for
which GCC front ends are written (see <a href="#Languages">Languages</a>).  It then
describes the GCC source tree structure and build system, some of the
interfaces to GCC front ends, and how support for a target system is
implemented in GCC.
</p>
<p>Additional tutorial information is linked to from
<a href="http://gcc.gnu.org/readings.html">http://gcc.gnu.org/readings.html</a>.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Contributing" accesskey="1">Contributing</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to contribute to testing and developing GCC.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Portability" accesskey="2">Portability</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Goals of GCC&rsquo;s portability features.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Interface" accesskey="3">Interface</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Function-call interface of GCC output.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Libgcc" accesskey="4">Libgcc</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Low-level runtime library used by GCC.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Languages" accesskey="5">Languages</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Languages for which GCC front ends are written.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Source-Tree" accesskey="6">Source Tree</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">GCC source tree structure and build system.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Testsuites" accesskey="7">Testsuites</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">GCC testsuites.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Options" accesskey="8">Options</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Option specification files.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Passes" accesskey="9">Passes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Order of passes, what they do, and what each file is for.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GENERIC">GENERIC</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Language-independent representation generated by Front Ends
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE">GIMPLE</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Tuple representation used by Tree SSA optimizers
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Tree-SSA">Tree SSA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Analysis and optimization of GIMPLE
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#RTL">RTL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Machine-dependent low-level intermediate representation.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Control-Flow">Control Flow</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Maintaining and manipulating the control flow graph.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Loop-Analysis-and-Representation">Loop Analysis and Representation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Analysis and representation of loops
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Machine-Desc">Machine Desc</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to write machine description instruction patterns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Target-Macros">Target Macros</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to write the machine description C macros and functions.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Host-Config">Host Config</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Writing the <samp>xm-<var>machine</var>.h</samp> file.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Fragments">Fragments</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Writing the <samp>t-<var>target</var></samp> and <samp>x-<var>host</var></samp> files.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Collect2">Collect2</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How <code>collect2</code> works; how it finds <code>ld</code>.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Header-Dirs">Header Dirs</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Understanding the standard header file directories.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Type-Information">Type Information</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">GCC&rsquo;s memory management; generating type information.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugins">Plugins</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Extending the compiler with plugins.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#LTO">LTO</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Using Link-Time Optimization.
</td></tr>
<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
</pre></th></tr><tr><td align="left" valign="top">&bull; <a href="#Funding">Funding</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to help assure funding for free software.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GNU-Project">GNU Project</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The GNU Project and GNU/Linux.
</td></tr>
<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
</pre></th></tr><tr><td align="left" valign="top">&bull; <a href="#Copying">Copying</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">GNU General Public License says
                    how you can copy and share GCC.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GNU-Free-Documentation-License">GNU Free Documentation License</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How you can copy and share this manual.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Contributors">Contributors</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">People who have contributed to GCC.
</td></tr>
<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
</pre></th></tr><tr><td align="left" valign="top">&bull; <a href="#Option-Index">Option Index</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Index to command line options.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Concept-Index">Concept Index</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Index of concepts and symbol names.
</td></tr>
</table>


<hr>
<a name="Contributing"></a>
<div class="header">
<p>
Next: <a href="#Portability" accesskey="n" rel="next">Portability</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Contributing-to-GCC-Development"></a>
<h2 class="chapter">1 Contributing to GCC Development</h2>

<p>If you would like to help pretest GCC releases to assure they work well,
current development sources are available by SVN (see
<a href="http://gcc.gnu.org/svn.html">http://gcc.gnu.org/svn.html</a>).  Source and binary snapshots are
also available for FTP; see <a href="http://gcc.gnu.org/snapshots.html">http://gcc.gnu.org/snapshots.html</a>.
</p>
<p>If you would like to work on improvements to GCC, please read the
advice at these URLs:
</p>
<div class="smallexample">
<pre class="smallexample"><a href="http://gcc.gnu.org/contribute.html">http://gcc.gnu.org/contribute.html</a>
<a href="http://gcc.gnu.org/contributewhy.html">http://gcc.gnu.org/contributewhy.html</a>
</pre></div>

<p>for information on how to make useful contributions and avoid
duplication of effort.  Suggested projects are listed at
<a href="http://gcc.gnu.org/projects/">http://gcc.gnu.org/projects/</a>.
</p>
<hr>
<a name="Portability"></a>
<div class="header">
<p>
Next: <a href="#Interface" accesskey="n" rel="next">Interface</a>, Previous: <a href="#Contributing" accesskey="p" rel="prev">Contributing</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GCC-and-Portability"></a>
<h2 class="chapter">2 GCC and Portability</h2>
<a name="index-portability"></a>
<a name="index-GCC-and-portability"></a>

<p>GCC itself aims to be portable to any machine where <code>int</code> is at least
a 32-bit type.  It aims to target machines with a flat (non-segmented) byte
addressed data address space (the code address space can be separate).
Target ABIs may have 8, 16, 32 or 64-bit <code>int</code> type.  <code>char</code>
can be wider than 8 bits.
</p>
<p>GCC gets most of the information about the target machine from a machine
description which gives an algebraic formula for each of the machine&rsquo;s
instructions.  This is a very clean way to describe the target.  But when
the compiler needs information that is difficult to express in this
fashion, ad-hoc parameters have been defined for machine descriptions.
The purpose of portability is to reduce the total work needed on the
compiler; it was not of interest for its own sake.
</p>
<a name="index-endianness"></a>
<a name="index-autoincrement-addressing_002c-availability"></a>
<a name="index-abort"></a>
<p>GCC does not contain machine dependent code, but it does contain code
that depends on machine parameters such as endianness (whether the most
significant byte has the highest or lowest address of the bytes in a word)
and the availability of autoincrement addressing.  In the RTL-generation
pass, it is often necessary to have multiple strategies for generating code
for a particular kind of syntax tree, strategies that are usable for different
combinations of parameters.  Often, not all possible cases have been
addressed, but only the common ones or only the ones that have been
encountered.  As a result, a new target may require additional
strategies.  You will know
if this happens because the compiler will call <code>abort</code>.  Fortunately,
the new strategies can be added in a machine-independent fashion, and will
affect only the target machines that need them.
</p>
<hr>
<a name="Interface"></a>
<div class="header">
<p>
Next: <a href="#Libgcc" accesskey="n" rel="next">Libgcc</a>, Previous: <a href="#Portability" accesskey="p" rel="prev">Portability</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Interfacing-to-GCC-Output"></a>
<h2 class="chapter">3 Interfacing to GCC Output</h2>
<a name="index-interfacing-to-GCC-output"></a>
<a name="index-run_002dtime-conventions"></a>
<a name="index-function-call-conventions"></a>
<a name="index-conventions_002c-run_002dtime"></a>

<p>GCC is normally configured to use the same function calling convention
normally in use on the target system.  This is done with the
machine-description macros described (see <a href="#Target-Macros">Target Macros</a>).
</p>
<a name="index-unions_002c-returning"></a>
<a name="index-structures_002c-returning"></a>
<a name="index-returning-structures-and-unions"></a>
<p>However, returning of structure and union values is done differently on
some target machines.  As a result, functions compiled with PCC
returning such types cannot be called from code compiled with GCC,
and vice versa.  This does not cause trouble often because few Unix
library routines return structures or unions.
</p>
<p>GCC code returns structures and unions that are 1, 2, 4 or 8 bytes
long in the same registers used for <code>int</code> or <code>double</code> return
values.  (GCC typically allocates variables of such types in
registers also.)  Structures and unions of other sizes are returned by
storing them into an address passed by the caller (usually in a
register).  The target hook <code>TARGET_STRUCT_VALUE_RTX</code>
tells GCC where to pass this address.
</p>
<p>By contrast, PCC on most target machines returns structures and unions
of any size by copying the data into an area of static storage, and then
returning the address of that storage as if it were a pointer value.
The caller must copy the data from that memory area to the place where
the value is wanted.  This is slower than the method used by GCC, and
fails to be reentrant.
</p>
<p>On some target machines, such as RISC machines and the 80386, the
standard system convention is to pass to the subroutine the address of
where to return the value.  On these machines, GCC has been
configured to be compatible with the standard compiler, when this method
is used.  It may not be compatible for structures of 1, 2, 4 or 8 bytes.
</p>
<a name="index-argument-passing"></a>
<a name="index-passing-arguments"></a>
<p>GCC uses the system&rsquo;s standard convention for passing arguments.  On
some machines, the first few arguments are passed in registers; in
others, all are passed on the stack.  It would be possible to use
registers for argument passing on any machine, and this would probably
result in a significant speedup.  But the result would be complete
incompatibility with code that follows the standard convention.  So this
change is practical only if you are switching to GCC as the sole C
compiler for the system.  We may implement register argument passing on
certain machines once we have a complete GNU system so that we can
compile the libraries with GCC.
</p>
<p>On some machines (particularly the SPARC), certain types of arguments
are passed &ldquo;by invisible reference&rdquo;.  This means that the value is
stored in memory, and the address of the memory location is passed to
the subroutine.
</p>
<a name="index-longjmp-and-automatic-variables"></a>
<p>If you use <code>longjmp</code>, beware of automatic variables.  ISO C says that
automatic variables that are not declared <code>volatile</code> have undefined
values after a <code>longjmp</code>.  And this is all GCC promises to do,
because it is very difficult to restore register variables correctly, and
one of GCC&rsquo;s features is that it can put variables in registers without
your asking it to.
</p>
<hr>
<a name="Libgcc"></a>
<div class="header">
<p>
Next: <a href="#Languages" accesskey="n" rel="next">Languages</a>, Previous: <a href="#Interface" accesskey="p" rel="prev">Interface</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-GCC-low_002dlevel-runtime-library"></a>
<h2 class="chapter">4 The GCC low-level runtime library</h2>

<p>GCC provides a low-level runtime library, <samp>libgcc.a</samp> or
<samp>libgcc_s.so.1</samp> on some platforms.  GCC generates calls to
routines in this library automatically, whenever it needs to perform
some operation that is too complicated to emit inline code for.
</p>
<p>Most of the routines in <code>libgcc</code> handle arithmetic operations
that the target processor cannot perform directly.  This includes
integer multiply and divide on some machines, and all floating-point
and fixed-point operations on other machines.  <code>libgcc</code> also includes
routines for exception handling, and a handful of miscellaneous operations.
</p>
<p>Some of these routines can be defined in mostly machine-independent C.
Others must be hand-written in assembly language for each processor
that needs them.
</p>
<p>GCC will also generate calls to C library routines, such as
<code>memcpy</code> and <code>memset</code>, in some cases.  The set of routines
that GCC may possibly use is documented in <a href="gcc-4.html#Other-Builtins">Other
Builtins</a> in <cite>Using the GNU Compiler Collection (GCC)</cite>.
</p>
<p>These routines take arguments and return values of a specific machine
mode, not a specific C type.  See <a href="#Machine-Modes">Machine Modes</a>, for an explanation
of this concept.  For illustrative purposes, in this chapter the
floating point type <code>float</code> is assumed to correspond to <code>SFmode</code>;
<code>double</code> to <code>DFmode</code>; and <code>long&nbsp;double<!-- /@w --></code> to both
<code>TFmode</code> and <code>XFmode</code>.  Similarly, the integer types <code>int</code>
and <code>unsigned&nbsp;int<!-- /@w --></code> correspond to <code>SImode</code>; <code>long</code> and
<code>unsigned&nbsp;long<!-- /@w --></code> to <code>DImode</code>; and <code>long&nbsp;long<!-- /@w --></code> and
<code>unsigned&nbsp;long&nbsp;long<!-- /@w --></code> to <code>TImode</code>.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Integer-library-routines" accesskey="1">Integer library routines</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Soft-float-library-routines" accesskey="2">Soft float library routines</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Decimal-float-library-routines" accesskey="3">Decimal float library routines</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Fixed_002dpoint-fractional-library-routines" accesskey="4">Fixed-point fractional library routines</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Exception-handling-routines" accesskey="5">Exception handling routines</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Miscellaneous-routines" accesskey="6">Miscellaneous routines</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>

<hr>
<a name="Integer-library-routines"></a>
<div class="header">
<p>
Next: <a href="#Soft-float-library-routines" accesskey="n" rel="next">Soft float library routines</a>, Up: <a href="#Libgcc" accesskey="u" rel="up">Libgcc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Routines-for-integer-arithmetic"></a>
<h3 class="section">4.1 Routines for integer arithmetic</h3>

<p>The integer arithmetic routines are used on platforms that don&rsquo;t provide
hardware support for arithmetic operations on some modes.
</p>
<a name="Arithmetic-functions"></a>
<h4 class="subsection">4.1.1 Arithmetic functions</h4>

<dl>
<dt><a name="index-_005f_005fashlsi3"></a>Runtime Function: <em>int</em> <strong>__ashlsi3</strong> <em>(int <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashldi3"></a>Runtime Function: <em>long</em> <strong>__ashldi3</strong> <em>(long <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashlti3"></a>Runtime Function: <em>long long</em> <strong>__ashlti3</strong> <em>(long long <var>a</var>, int <var>b</var>)</em></dt>
<dd><p>These functions return the result of shifting <var>a</var> left by <var>b</var> bits.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fashrsi3"></a>Runtime Function: <em>int</em> <strong>__ashrsi3</strong> <em>(int <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashrdi3"></a>Runtime Function: <em>long</em> <strong>__ashrdi3</strong> <em>(long <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashrti3"></a>Runtime Function: <em>long long</em> <strong>__ashrti3</strong> <em>(long long <var>a</var>, int <var>b</var>)</em></dt>
<dd><p>These functions return the result of arithmetically shifting <var>a</var> right
by <var>b</var> bits.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdivsi3"></a>Runtime Function: <em>int</em> <strong>__divsi3</strong> <em>(int <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivdi3"></a>Runtime Function: <em>long</em> <strong>__divdi3</strong> <em>(long <var>a</var>, long <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivti3"></a>Runtime Function: <em>long long</em> <strong>__divti3</strong> <em>(long long <var>a</var>, long long <var>b</var>)</em></dt>
<dd><p>These functions return the quotient of the signed division of <var>a</var> and
<var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005flshrsi3"></a>Runtime Function: <em>int</em> <strong>__lshrsi3</strong> <em>(int <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flshrdi3"></a>Runtime Function: <em>long</em> <strong>__lshrdi3</strong> <em>(long <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flshrti3"></a>Runtime Function: <em>long long</em> <strong>__lshrti3</strong> <em>(long long <var>a</var>, int <var>b</var>)</em></dt>
<dd><p>These functions return the result of logically shifting <var>a</var> right by
<var>b</var> bits.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fmodsi3"></a>Runtime Function: <em>int</em> <strong>__modsi3</strong> <em>(int <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmoddi3"></a>Runtime Function: <em>long</em> <strong>__moddi3</strong> <em>(long <var>a</var>, long <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmodti3"></a>Runtime Function: <em>long long</em> <strong>__modti3</strong> <em>(long long <var>a</var>, long long <var>b</var>)</em></dt>
<dd><p>These functions return the remainder of the signed division of <var>a</var>
and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fmulsi3"></a>Runtime Function: <em>int</em> <strong>__mulsi3</strong> <em>(int <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmuldi3"></a>Runtime Function: <em>long</em> <strong>__muldi3</strong> <em>(long <var>a</var>, long <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulti3"></a>Runtime Function: <em>long long</em> <strong>__multi3</strong> <em>(long long <var>a</var>, long long <var>b</var>)</em></dt>
<dd><p>These functions return the product of <var>a</var> and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fnegdi2"></a>Runtime Function: <em>long</em> <strong>__negdi2</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegti2"></a>Runtime Function: <em>long long</em> <strong>__negti2</strong> <em>(long long <var>a</var>)</em></dt>
<dd><p>These functions return the negation of <var>a</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fudivsi3"></a>Runtime Function: <em>unsigned int</em> <strong>__udivsi3</strong> <em>(unsigned int <var>a</var>, unsigned int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fudivdi3"></a>Runtime Function: <em>unsigned long</em> <strong>__udivdi3</strong> <em>(unsigned long <var>a</var>, unsigned long <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fudivti3"></a>Runtime Function: <em>unsigned long long</em> <strong>__udivti3</strong> <em>(unsigned long long <var>a</var>, unsigned long long <var>b</var>)</em></dt>
<dd><p>These functions return the quotient of the unsigned division of <var>a</var>
and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fudivmoddi4"></a>Runtime Function: <em>unsigned long</em> <strong>__udivmoddi4</strong> <em>(unsigned long <var>a</var>, unsigned long <var>b</var>, unsigned long *<var>c</var>)</em></dt>
<dt><a name="index-_005f_005fudivmodti4"></a>Runtime Function: <em>unsigned long long</em> <strong>__udivmodti4</strong> <em>(unsigned long long <var>a</var>, unsigned long long <var>b</var>, unsigned long long *<var>c</var>)</em></dt>
<dd><p>These functions calculate both the quotient and remainder of the unsigned
division of <var>a</var> and <var>b</var>.  The return value is the quotient, and
the remainder is placed in variable pointed to by <var>c</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fumodsi3"></a>Runtime Function: <em>unsigned int</em> <strong>__umodsi3</strong> <em>(unsigned int <var>a</var>, unsigned int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fumoddi3"></a>Runtime Function: <em>unsigned long</em> <strong>__umoddi3</strong> <em>(unsigned long <var>a</var>, unsigned long <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fumodti3"></a>Runtime Function: <em>unsigned long long</em> <strong>__umodti3</strong> <em>(unsigned long long <var>a</var>, unsigned long long <var>b</var>)</em></dt>
<dd><p>These functions return the remainder of the unsigned division of <var>a</var>
and <var>b</var>.
</p></dd></dl>

<a name="Comparison-functions"></a>
<h4 class="subsection">4.1.2 Comparison functions</h4>

<p>The following functions implement integral comparisons.  These functions
implement a low-level compare, upon which the higher level comparison
operators (such as less than and greater than or equal to) can be
constructed.  The returned values lie in the range zero to two, to allow
the high-level operators to be implemented by testing the returned
result using either signed or unsigned comparison.
</p>
<dl>
<dt><a name="index-_005f_005fcmpdi2"></a>Runtime Function: <em>int</em> <strong>__cmpdi2</strong> <em>(long <var>a</var>, long <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpti2"></a>Runtime Function: <em>int</em> <strong>__cmpti2</strong> <em>(long long <var>a</var>, long long <var>b</var>)</em></dt>
<dd><p>These functions perform a signed comparison of <var>a</var> and <var>b</var>.  If
<var>a</var> is less than <var>b</var>, they return 0; if <var>a</var> is greater than
<var>b</var>, they return 2; and if <var>a</var> and <var>b</var> are equal they return 1.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fucmpdi2"></a>Runtime Function: <em>int</em> <strong>__ucmpdi2</strong> <em>(unsigned long <var>a</var>, unsigned long <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fucmpti2"></a>Runtime Function: <em>int</em> <strong>__ucmpti2</strong> <em>(unsigned long long <var>a</var>, unsigned long long <var>b</var>)</em></dt>
<dd><p>These functions perform an unsigned comparison of <var>a</var> and <var>b</var>.
If <var>a</var> is less than <var>b</var>, they return 0; if <var>a</var> is greater than
<var>b</var>, they return 2; and if <var>a</var> and <var>b</var> are equal they return 1.
</p></dd></dl>

<a name="Trapping-arithmetic-functions"></a>
<h4 class="subsection">4.1.3 Trapping arithmetic functions</h4>

<p>The following functions implement trapping arithmetic.  These functions
call the libc function <code>abort</code> upon signed arithmetic overflow.
</p>
<dl>
<dt><a name="index-_005f_005fabsvsi2"></a>Runtime Function: <em>int</em> <strong>__absvsi2</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fabsvdi2"></a>Runtime Function: <em>long</em> <strong>__absvdi2</strong> <em>(long <var>a</var>)</em></dt>
<dd><p>These functions return the absolute value of <var>a</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005faddvsi3"></a>Runtime Function: <em>int</em> <strong>__addvsi3</strong> <em>(int <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddvdi3"></a>Runtime Function: <em>long</em> <strong>__addvdi3</strong> <em>(long <var>a</var>, long <var>b</var>)</em></dt>
<dd><p>These functions return the sum of <var>a</var> and <var>b</var>; that is
<code><var>a</var> + <var>b</var></code>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fmulvsi3"></a>Runtime Function: <em>int</em> <strong>__mulvsi3</strong> <em>(int <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulvdi3"></a>Runtime Function: <em>long</em> <strong>__mulvdi3</strong> <em>(long <var>a</var>, long <var>b</var>)</em></dt>
<dd><p>The functions return the product of <var>a</var> and <var>b</var>; that is
<code><var>a</var> * <var>b</var></code>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fnegvsi2"></a>Runtime Function: <em>int</em> <strong>__negvsi2</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegvdi2"></a>Runtime Function: <em>long</em> <strong>__negvdi2</strong> <em>(long <var>a</var>)</em></dt>
<dd><p>These functions return the negation of <var>a</var>; that is <code>-<var>a</var></code>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fsubvsi3"></a>Runtime Function: <em>int</em> <strong>__subvsi3</strong> <em>(int <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubvdi3"></a>Runtime Function: <em>long</em> <strong>__subvdi3</strong> <em>(long <var>a</var>, long <var>b</var>)</em></dt>
<dd><p>These functions return the difference between <var>b</var> and <var>a</var>;
that is <code><var>a</var> - <var>b</var></code>.
</p></dd></dl>

<a name="Bit-operations"></a>
<h4 class="subsection">4.1.4 Bit operations</h4>

<dl>
<dt><a name="index-_005f_005fclzsi2"></a>Runtime Function: <em>int</em> <strong>__clzsi2</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fclzdi2"></a>Runtime Function: <em>int</em> <strong>__clzdi2</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fclzti2"></a>Runtime Function: <em>int</em> <strong>__clzti2</strong> <em>(long long <var>a</var>)</em></dt>
<dd><p>These functions return the number of leading 0-bits in <var>a</var>, starting
at the most significant bit position.  If <var>a</var> is zero, the result is
undefined.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fctzsi2"></a>Runtime Function: <em>int</em> <strong>__ctzsi2</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fctzdi2"></a>Runtime Function: <em>int</em> <strong>__ctzdi2</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fctzti2"></a>Runtime Function: <em>int</em> <strong>__ctzti2</strong> <em>(long long <var>a</var>)</em></dt>
<dd><p>These functions return the number of trailing 0-bits in <var>a</var>, starting
at the least significant bit position.  If <var>a</var> is zero, the result is
undefined.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fffsdi2"></a>Runtime Function: <em>int</em> <strong>__ffsdi2</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fffsti2"></a>Runtime Function: <em>int</em> <strong>__ffsti2</strong> <em>(long long <var>a</var>)</em></dt>
<dd><p>These functions return the index of the least significant 1-bit in <var>a</var>,
or the value zero if <var>a</var> is zero.  The least significant bit is index
one.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fparitysi2"></a>Runtime Function: <em>int</em> <strong>__paritysi2</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fparitydi2"></a>Runtime Function: <em>int</em> <strong>__paritydi2</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fparityti2"></a>Runtime Function: <em>int</em> <strong>__parityti2</strong> <em>(long long <var>a</var>)</em></dt>
<dd><p>These functions return the value zero if the number of bits set in
<var>a</var> is even, and the value one otherwise.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fpopcountsi2"></a>Runtime Function: <em>int</em> <strong>__popcountsi2</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fpopcountdi2"></a>Runtime Function: <em>int</em> <strong>__popcountdi2</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fpopcountti2"></a>Runtime Function: <em>int</em> <strong>__popcountti2</strong> <em>(long long <var>a</var>)</em></dt>
<dd><p>These functions return the number of bits set in <var>a</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fbswapsi2"></a>Runtime Function: <em>int32_t</em> <strong>__bswapsi2</strong> <em>(int32_t <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbswapdi2"></a>Runtime Function: <em>int64_t</em> <strong>__bswapdi2</strong> <em>(int64_t <var>a</var>)</em></dt>
<dd><p>These functions return the <var>a</var> byteswapped.
</p></dd></dl>

<hr>
<a name="Soft-float-library-routines"></a>
<div class="header">
<p>
Next: <a href="#Decimal-float-library-routines" accesskey="n" rel="next">Decimal float library routines</a>, Previous: <a href="#Integer-library-routines" accesskey="p" rel="prev">Integer library routines</a>, Up: <a href="#Libgcc" accesskey="u" rel="up">Libgcc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Routines-for-floating-point-emulation"></a>
<h3 class="section">4.2 Routines for floating point emulation</h3>
<a name="index-soft-float-library"></a>
<a name="index-arithmetic-library"></a>
<a name="index-math-library"></a>
<a name="index-msoft_002dfloat"></a>

<p>The software floating point library is used on machines which do not
have hardware support for floating point.  It is also used whenever
<samp>-msoft-float</samp> is used to disable generation of floating point
instructions.  (Not all targets support this switch.)
</p>
<p>For compatibility with other compilers, the floating point emulation
routines can be renamed with the <code>DECLARE_LIBRARY_RENAMES</code> macro
(see <a href="#Library-Calls">Library Calls</a>).  In this section, the default names are used.
</p>
<p>Presently the library does not support <code>XFmode</code>, which is used
for <code>long double</code> on some architectures.
</p>
<a name="Arithmetic-functions-1"></a>
<h4 class="subsection">4.2.1 Arithmetic functions</h4>

<dl>
<dt><a name="index-_005f_005faddsf3"></a>Runtime Function: <em>float</em> <strong>__addsf3</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fadddf3"></a>Runtime Function: <em>double</em> <strong>__adddf3</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddtf3"></a>Runtime Function: <em>long double</em> <strong>__addtf3</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddxf3"></a>Runtime Function: <em>long double</em> <strong>__addxf3</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return the sum of <var>a</var> and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fsubsf3"></a>Runtime Function: <em>float</em> <strong>__subsf3</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubdf3"></a>Runtime Function: <em>double</em> <strong>__subdf3</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubtf3"></a>Runtime Function: <em>long double</em> <strong>__subtf3</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubxf3"></a>Runtime Function: <em>long double</em> <strong>__subxf3</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return the difference between <var>b</var> and <var>a</var>;
that is, <em><var>a</var> - <var>b</var></em><!-- /@w -->.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fmulsf3"></a>Runtime Function: <em>float</em> <strong>__mulsf3</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmuldf3"></a>Runtime Function: <em>double</em> <strong>__muldf3</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmultf3"></a>Runtime Function: <em>long double</em> <strong>__multf3</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulxf3"></a>Runtime Function: <em>long double</em> <strong>__mulxf3</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return the product of <var>a</var> and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdivsf3"></a>Runtime Function: <em>float</em> <strong>__divsf3</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivdf3"></a>Runtime Function: <em>double</em> <strong>__divdf3</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivtf3"></a>Runtime Function: <em>long double</em> <strong>__divtf3</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivxf3"></a>Runtime Function: <em>long double</em> <strong>__divxf3</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return the quotient of <var>a</var> and <var>b</var>; that is,
<em><var>a</var> / <var>b</var></em><!-- /@w -->.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fnegsf2"></a>Runtime Function: <em>float</em> <strong>__negsf2</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegdf2"></a>Runtime Function: <em>double</em> <strong>__negdf2</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegtf2"></a>Runtime Function: <em>long double</em> <strong>__negtf2</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegxf2"></a>Runtime Function: <em>long double</em> <strong>__negxf2</strong> <em>(long double <var>a</var>)</em></dt>
<dd><p>These functions return the negation of <var>a</var>.  They simply flip the
sign bit, so they can produce negative zero and negative NaN.
</p></dd></dl>

<a name="Conversion-functions"></a>
<h4 class="subsection">4.2.2 Conversion functions</h4>

<dl>
<dt><a name="index-_005f_005fextendsfdf2"></a>Runtime Function: <em>double</em> <strong>__extendsfdf2</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fextendsftf2"></a>Runtime Function: <em>long double</em> <strong>__extendsftf2</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fextendsfxf2"></a>Runtime Function: <em>long double</em> <strong>__extendsfxf2</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fextenddftf2"></a>Runtime Function: <em>long double</em> <strong>__extenddftf2</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fextenddfxf2"></a>Runtime Function: <em>long double</em> <strong>__extenddfxf2</strong> <em>(double <var>a</var>)</em></dt>
<dd><p>These functions extend <var>a</var> to the wider mode of their return
type.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ftruncxfdf2"></a>Runtime Function: <em>double</em> <strong>__truncxfdf2</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ftrunctfdf2"></a>Runtime Function: <em>double</em> <strong>__trunctfdf2</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ftruncxfsf2"></a>Runtime Function: <em>float</em> <strong>__truncxfsf2</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ftrunctfsf2"></a>Runtime Function: <em>float</em> <strong>__trunctfsf2</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ftruncdfsf2"></a>Runtime Function: <em>float</em> <strong>__truncdfsf2</strong> <em>(double <var>a</var>)</em></dt>
<dd><p>These functions truncate <var>a</var> to the narrower mode of their return
type, rounding toward zero.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffixsfsi"></a>Runtime Function: <em>int</em> <strong>__fixsfsi</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixdfsi"></a>Runtime Function: <em>int</em> <strong>__fixdfsi</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixtfsi"></a>Runtime Function: <em>int</em> <strong>__fixtfsi</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixxfsi"></a>Runtime Function: <em>int</em> <strong>__fixxfsi</strong> <em>(long double <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to a signed integer, rounding toward zero.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffixsfdi"></a>Runtime Function: <em>long</em> <strong>__fixsfdi</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixdfdi"></a>Runtime Function: <em>long</em> <strong>__fixdfdi</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixtfdi"></a>Runtime Function: <em>long</em> <strong>__fixtfdi</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixxfdi"></a>Runtime Function: <em>long</em> <strong>__fixxfdi</strong> <em>(long double <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to a signed long, rounding toward zero.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffixsfti"></a>Runtime Function: <em>long long</em> <strong>__fixsfti</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixdfti"></a>Runtime Function: <em>long long</em> <strong>__fixdfti</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixtfti"></a>Runtime Function: <em>long long</em> <strong>__fixtfti</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixxfti"></a>Runtime Function: <em>long long</em> <strong>__fixxfti</strong> <em>(long double <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to a signed long long, rounding toward zero.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffixunssfsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fixunssfsi</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixunsdfsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fixunsdfsi</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixunstfsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fixunstfsi</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixunsxfsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fixunsxfsi</strong> <em>(long double <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to an unsigned integer, rounding
toward zero.  Negative values all become zero.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffixunssfdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fixunssfdi</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixunsdfdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fixunsdfdi</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixunstfdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fixunstfdi</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixunsxfdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fixunsxfdi</strong> <em>(long double <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to an unsigned long, rounding
toward zero.  Negative values all become zero.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffixunssfti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fixunssfti</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixunsdfti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fixunsdfti</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixunstfti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fixunstfti</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffixunsxfti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fixunsxfti</strong> <em>(long double <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to an unsigned long long, rounding
toward zero.  Negative values all become zero.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffloatsisf"></a>Runtime Function: <em>float</em> <strong>__floatsisf</strong> <em>(int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatsidf"></a>Runtime Function: <em>double</em> <strong>__floatsidf</strong> <em>(int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatsitf"></a>Runtime Function: <em>long double</em> <strong>__floatsitf</strong> <em>(int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatsixf"></a>Runtime Function: <em>long double</em> <strong>__floatsixf</strong> <em>(int <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, a signed integer, to floating point.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffloatdisf"></a>Runtime Function: <em>float</em> <strong>__floatdisf</strong> <em>(long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatdidf"></a>Runtime Function: <em>double</em> <strong>__floatdidf</strong> <em>(long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatditf"></a>Runtime Function: <em>long double</em> <strong>__floatditf</strong> <em>(long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatdixf"></a>Runtime Function: <em>long double</em> <strong>__floatdixf</strong> <em>(long <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, a signed long, to floating point.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffloattisf"></a>Runtime Function: <em>float</em> <strong>__floattisf</strong> <em>(long long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloattidf"></a>Runtime Function: <em>double</em> <strong>__floattidf</strong> <em>(long long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloattitf"></a>Runtime Function: <em>long double</em> <strong>__floattitf</strong> <em>(long long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloattixf"></a>Runtime Function: <em>long double</em> <strong>__floattixf</strong> <em>(long long <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, a signed long long, to floating point.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffloatunsisf"></a>Runtime Function: <em>float</em> <strong>__floatunsisf</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatunsidf"></a>Runtime Function: <em>double</em> <strong>__floatunsidf</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatunsitf"></a>Runtime Function: <em>long double</em> <strong>__floatunsitf</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatunsixf"></a>Runtime Function: <em>long double</em> <strong>__floatunsixf</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, an unsigned integer, to floating point.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffloatundisf"></a>Runtime Function: <em>float</em> <strong>__floatundisf</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatundidf"></a>Runtime Function: <em>double</em> <strong>__floatundidf</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatunditf"></a>Runtime Function: <em>long double</em> <strong>__floatunditf</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatundixf"></a>Runtime Function: <em>long double</em> <strong>__floatundixf</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, an unsigned long, to floating point.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffloatuntisf"></a>Runtime Function: <em>float</em> <strong>__floatuntisf</strong> <em>(unsigned long long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatuntidf"></a>Runtime Function: <em>double</em> <strong>__floatuntidf</strong> <em>(unsigned long long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatuntitf"></a>Runtime Function: <em>long double</em> <strong>__floatuntitf</strong> <em>(unsigned long long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005ffloatuntixf"></a>Runtime Function: <em>long double</em> <strong>__floatuntixf</strong> <em>(unsigned long long <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, an unsigned long long, to floating point.
</p></dd></dl>

<a name="Comparison-functions-1"></a>
<h4 class="subsection">4.2.3 Comparison functions</h4>

<p>There are two sets of basic comparison functions.
</p>
<dl>
<dt><a name="index-_005f_005fcmpsf2"></a>Runtime Function: <em>int</em> <strong>__cmpsf2</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpdf2"></a>Runtime Function: <em>int</em> <strong>__cmpdf2</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmptf2"></a>Runtime Function: <em>int</em> <strong>__cmptf2</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions calculate <em>a &lt;=&gt; b</em>.  That is, if <var>a</var> is less
than <var>b</var>, they return -1; if <var>a</var> is greater than <var>b</var>, they
return 1; and if <var>a</var> and <var>b</var> are equal they return 0.  If
either argument is NaN they return 1, but you should not rely on this;
if NaN is a possibility, use one of the higher-level comparison
functions.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005funordsf2"></a>Runtime Function: <em>int</em> <strong>__unordsf2</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005funorddf2"></a>Runtime Function: <em>int</em> <strong>__unorddf2</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005funordtf2"></a>Runtime Function: <em>int</em> <strong>__unordtf2</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return a nonzero value if either argument is NaN, otherwise 0.
</p></dd></dl>

<p>There is also a complete group of higher level functions which
correspond directly to comparison operators.  They implement the ISO C
semantics for floating-point comparisons, taking NaN into account.
Pay careful attention to the return values defined for each set.
Under the hood, all of these routines are implemented as
</p>
<div class="smallexample">
<pre class="smallexample">  if (__unord<var>X</var>f2 (a, b))
    return <var>E</var>;
  return __cmp<var>X</var>f2 (a, b);
</pre></div>

<p>where <var>E</var> is a constant chosen to give the proper behavior for
NaN.  Thus, the meaning of the return value is different for each set.
Do not rely on this implementation; only the semantics documented
below are guaranteed.
</p>
<dl>
<dt><a name="index-_005f_005feqsf2"></a>Runtime Function: <em>int</em> <strong>__eqsf2</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005feqdf2"></a>Runtime Function: <em>int</em> <strong>__eqdf2</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005feqtf2"></a>Runtime Function: <em>int</em> <strong>__eqtf2</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return zero if neither argument is NaN, and <var>a</var> and
<var>b</var> are equal.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fnesf2"></a>Runtime Function: <em>int</em> <strong>__nesf2</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fnedf2"></a>Runtime Function: <em>int</em> <strong>__nedf2</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fnetf2"></a>Runtime Function: <em>int</em> <strong>__netf2</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return a nonzero value if either argument is NaN, or
if <var>a</var> and <var>b</var> are unequal.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fgesf2"></a>Runtime Function: <em>int</em> <strong>__gesf2</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fgedf2"></a>Runtime Function: <em>int</em> <strong>__gedf2</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fgetf2"></a>Runtime Function: <em>int</em> <strong>__getf2</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return a value greater than or equal to zero if
neither argument is NaN, and <var>a</var> is greater than or equal to
<var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fltsf2"></a>Runtime Function: <em>int</em> <strong>__ltsf2</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fltdf2"></a>Runtime Function: <em>int</em> <strong>__ltdf2</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flttf2"></a>Runtime Function: <em>int</em> <strong>__lttf2</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return a value less than zero if neither argument is
NaN, and <var>a</var> is strictly less than <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005flesf2"></a>Runtime Function: <em>int</em> <strong>__lesf2</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fledf2"></a>Runtime Function: <em>int</em> <strong>__ledf2</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fletf2"></a>Runtime Function: <em>int</em> <strong>__letf2</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return a value less than or equal to zero if neither
argument is NaN, and <var>a</var> is less than or equal to <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fgtsf2"></a>Runtime Function: <em>int</em> <strong>__gtsf2</strong> <em>(float <var>a</var>, float <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fgtdf2"></a>Runtime Function: <em>int</em> <strong>__gtdf2</strong> <em>(double <var>a</var>, double <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fgttf2"></a>Runtime Function: <em>int</em> <strong>__gttf2</strong> <em>(long double <var>a</var>, long double <var>b</var>)</em></dt>
<dd><p>These functions return a value greater than zero if neither argument
is NaN, and <var>a</var> is strictly greater than <var>b</var>.
</p></dd></dl>

<a name="Other-floating_002dpoint-functions"></a>
<h4 class="subsection">4.2.4 Other floating-point functions</h4>

<dl>
<dt><a name="index-_005f_005fpowisf2"></a>Runtime Function: <em>float</em> <strong>__powisf2</strong> <em>(float <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fpowidf2"></a>Runtime Function: <em>double</em> <strong>__powidf2</strong> <em>(double <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fpowitf2"></a>Runtime Function: <em>long double</em> <strong>__powitf2</strong> <em>(long double <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fpowixf2"></a>Runtime Function: <em>long double</em> <strong>__powixf2</strong> <em>(long double <var>a</var>, int <var>b</var>)</em></dt>
<dd><p>These functions convert raise <var>a</var> to the power <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fmulsc3"></a>Runtime Function: <em>complex float</em> <strong>__mulsc3</strong> <em>(float <var>a</var>, float <var>b</var>, float <var>c</var>, float <var>d</var>)</em></dt>
<dt><a name="index-_005f_005fmuldc3"></a>Runtime Function: <em>complex double</em> <strong>__muldc3</strong> <em>(double <var>a</var>, double <var>b</var>, double <var>c</var>, double <var>d</var>)</em></dt>
<dt><a name="index-_005f_005fmultc3"></a>Runtime Function: <em>complex long double</em> <strong>__multc3</strong> <em>(long double <var>a</var>, long double <var>b</var>, long double <var>c</var>, long double <var>d</var>)</em></dt>
<dt><a name="index-_005f_005fmulxc3"></a>Runtime Function: <em>complex long double</em> <strong>__mulxc3</strong> <em>(long double <var>a</var>, long double <var>b</var>, long double <var>c</var>, long double <var>d</var>)</em></dt>
<dd><p>These functions return the product of <em><var>a</var> + i<var>b</var></em> and
<em><var>c</var> + i<var>d</var></em>, following the rules of C99 Annex G.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdivsc3"></a>Runtime Function: <em>complex float</em> <strong>__divsc3</strong> <em>(float <var>a</var>, float <var>b</var>, float <var>c</var>, float <var>d</var>)</em></dt>
<dt><a name="index-_005f_005fdivdc3"></a>Runtime Function: <em>complex double</em> <strong>__divdc3</strong> <em>(double <var>a</var>, double <var>b</var>, double <var>c</var>, double <var>d</var>)</em></dt>
<dt><a name="index-_005f_005fdivtc3"></a>Runtime Function: <em>complex long double</em> <strong>__divtc3</strong> <em>(long double <var>a</var>, long double <var>b</var>, long double <var>c</var>, long double <var>d</var>)</em></dt>
<dt><a name="index-_005f_005fdivxc3"></a>Runtime Function: <em>complex long double</em> <strong>__divxc3</strong> <em>(long double <var>a</var>, long double <var>b</var>, long double <var>c</var>, long double <var>d</var>)</em></dt>
<dd><p>These functions return the quotient of <em><var>a</var> + i<var>b</var></em> and
<em><var>c</var> + i<var>d</var></em> (i.e., <em>(<var>a</var> + i<var>b</var>) / (<var>c</var>
+ i<var>d</var>)</em>), following the rules of C99 Annex G.
</p></dd></dl>

<hr>
<a name="Decimal-float-library-routines"></a>
<div class="header">
<p>
Next: <a href="#Fixed_002dpoint-fractional-library-routines" accesskey="n" rel="next">Fixed-point fractional library routines</a>, Previous: <a href="#Soft-float-library-routines" accesskey="p" rel="prev">Soft float library routines</a>, Up: <a href="#Libgcc" accesskey="u" rel="up">Libgcc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Routines-for-decimal-floating-point-emulation"></a>
<h3 class="section">4.3 Routines for decimal floating point emulation</h3>
<a name="index-decimal-float-library"></a>
<a name="index-IEEE-754_002d2008"></a>

<p>The software decimal floating point library implements IEEE 754-2008
decimal floating point arithmetic and is only activated on selected
targets.
</p>
<p>The software decimal floating point library supports either DPD
(Densely Packed Decimal) or BID (Binary Integer Decimal) encoding
as selected at configure time.
</p>

<a name="Arithmetic-functions-2"></a>
<h4 class="subsection">4.3.1 Arithmetic functions</h4>

<dl>
<dt><a name="index-_005f_005fdpd_005faddsd3"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_addsd3</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005faddsd3"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_addsd3</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fadddd3"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_adddd3</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fadddd3"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_adddd3</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005faddtd3"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_addtd3</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005faddtd3"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_addtd3</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return the sum of <var>a</var> and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fsubsd3"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_subsd3</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fsubsd3"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_subsd3</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fsubdd3"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_subdd3</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fsubdd3"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_subdd3</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fsubtd3"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_subtd3</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fsubtd3"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_subtd3</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return the difference between <var>b</var> and <var>a</var>;
that is, <em><var>a</var> - <var>b</var></em><!-- /@w -->.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fmulsd3"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_mulsd3</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fmulsd3"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_mulsd3</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fmuldd3"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_muldd3</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fmuldd3"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_muldd3</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fmultd3"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_multd3</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fmultd3"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_multd3</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return the product of <var>a</var> and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fdivsd3"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_divsd3</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fdivsd3"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_divsd3</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fdivdd3"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_divdd3</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fdivdd3"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_divdd3</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fdivtd3"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_divtd3</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fdivtd3"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_divtd3</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return the quotient of <var>a</var> and <var>b</var>; that is,
<em><var>a</var> / <var>b</var></em><!-- /@w -->.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fnegsd2"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_negsd2</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fnegsd2"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_negsd2</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fnegdd2"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_negdd2</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fnegdd2"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_negdd2</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fnegtd2"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_negtd2</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fnegtd2"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_negtd2</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dd><p>These functions return the negation of <var>a</var>.  They simply flip the
sign bit, so they can produce negative zero and negative NaN.
</p></dd></dl>

<a name="Conversion-functions-1"></a>
<h4 class="subsection">4.3.2 Conversion functions</h4>

<dl>
<dt><a name="index-_005f_005fdpd_005fextendsddd2"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_extendsddd2</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendsddd2"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_extendsddd2</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendsdtd2"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_extendsdtd2</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendsdtd2"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_extendsdtd2</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendddtd2"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_extendddtd2</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendddtd2"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_extendddtd2</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftruncddsd2"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_truncddsd2</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftruncddsd2"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_truncddsd2</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftrunctdsd2"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_trunctdsd2</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftrunctdsd2"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_trunctdsd2</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftrunctddd2"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_trunctddd2</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftrunctddd2"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_trunctddd2</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dd><p>These functions convert the value <var>a</var> from one decimal floating type
to another.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fextendsfdd"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_extendsfdd</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendsfdd"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_extendsfdd</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendsftd"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_extendsftd</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendsftd"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_extendsftd</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextenddftd"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_extenddftd</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextenddftd"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_extenddftd</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendxftd"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_extendxftd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendxftd"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_extendxftd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftruncdfsd"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_truncdfsd</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftruncdfsd"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_truncdfsd</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftruncxfsd"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_truncxfsd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftruncxfsd"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_truncxfsd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftrunctfsd"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_trunctfsd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftrunctfsd"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_trunctfsd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftruncxfdd"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_truncxfdd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftruncxfdd"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_truncxfdd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftrunctfdd"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_trunctfdd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftrunctfdd"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_trunctfdd</strong> <em>(long double <var>a</var>)</em></dt>
<dd><p>These functions convert the value of <var>a</var> from a binary floating type
to a decimal floating type of a different size.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005ftruncddsf"></a>Runtime Function: <em>float</em> <strong>__dpd_truncddsf</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftruncddsf"></a>Runtime Function: <em>float</em> <strong>__bid_truncddsf</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftrunctdsf"></a>Runtime Function: <em>float</em> <strong>__dpd_trunctdsf</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftrunctdsf"></a>Runtime Function: <em>float</em> <strong>__bid_trunctdsf</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendsddf"></a>Runtime Function: <em>double</em> <strong>__dpd_extendsddf</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendsddf"></a>Runtime Function: <em>double</em> <strong>__bid_extendsddf</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftrunctddf"></a>Runtime Function: <em>double</em> <strong>__dpd_trunctddf</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftrunctddf"></a>Runtime Function: <em>double</em> <strong>__bid_trunctddf</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendsdxf"></a>Runtime Function: <em>long double</em> <strong>__dpd_extendsdxf</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendsdxf"></a>Runtime Function: <em>long double</em> <strong>__bid_extendsdxf</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendddxf"></a>Runtime Function: <em>long double</em> <strong>__dpd_extendddxf</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendddxf"></a>Runtime Function: <em>long double</em> <strong>__bid_extendddxf</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftrunctdxf"></a>Runtime Function: <em>long double</em> <strong>__dpd_trunctdxf</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftrunctdxf"></a>Runtime Function: <em>long double</em> <strong>__bid_trunctdxf</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendsdtf"></a>Runtime Function: <em>long double</em> <strong>__dpd_extendsdtf</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendsdtf"></a>Runtime Function: <em>long double</em> <strong>__bid_extendsdtf</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendddtf"></a>Runtime Function: <em>long double</em> <strong>__dpd_extendddtf</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendddtf"></a>Runtime Function: <em>long double</em> <strong>__bid_extendddtf</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dd><p>These functions convert the value of <var>a</var> from a decimal floating type
to a binary floating type of a different size.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fextendsfsd"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_extendsfsd</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendsfsd"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_extendsfsd</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextenddfdd"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_extenddfdd</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextenddfdd"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_extenddfdd</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fextendtftd"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_extendtftd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fextendtftd"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_extendtftd</strong> <em>(long double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftruncsdsf"></a>Runtime Function: <em>float</em> <strong>__dpd_truncsdsf</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftruncsdsf"></a>Runtime Function: <em>float</em> <strong>__bid_truncsdsf</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftruncdddf"></a>Runtime Function: <em>double</em> <strong>__dpd_truncdddf</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftruncdddf"></a>Runtime Function: <em>double</em> <strong>__bid_truncdddf</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ftrunctdtf"></a>Runtime Function: <em>long double</em> <strong>__dpd_trunctdtf</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ftrunctdtf"></a>Runtime Function: <em>long double</em> <strong>__bid_trunctdtf</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dd><p>These functions convert the value of <var>a</var> between decimal and
binary floating types of the same size.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005ffixsdsi"></a>Runtime Function: <em>int</em> <strong>__dpd_fixsdsi</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixsdsi"></a>Runtime Function: <em>int</em> <strong>__bid_fixsdsi</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffixddsi"></a>Runtime Function: <em>int</em> <strong>__dpd_fixddsi</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixddsi"></a>Runtime Function: <em>int</em> <strong>__bid_fixddsi</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffixtdsi"></a>Runtime Function: <em>int</em> <strong>__dpd_fixtdsi</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixtdsi"></a>Runtime Function: <em>int</em> <strong>__bid_fixtdsi</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to a signed integer.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005ffixsddi"></a>Runtime Function: <em>long</em> <strong>__dpd_fixsddi</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixsddi"></a>Runtime Function: <em>long</em> <strong>__bid_fixsddi</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffixdddi"></a>Runtime Function: <em>long</em> <strong>__dpd_fixdddi</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixdddi"></a>Runtime Function: <em>long</em> <strong>__bid_fixdddi</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffixtddi"></a>Runtime Function: <em>long</em> <strong>__dpd_fixtddi</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixtddi"></a>Runtime Function: <em>long</em> <strong>__bid_fixtddi</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to a signed long.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005ffixunssdsi"></a>Runtime Function: <em>unsigned int</em> <strong>__dpd_fixunssdsi</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixunssdsi"></a>Runtime Function: <em>unsigned int</em> <strong>__bid_fixunssdsi</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffixunsddsi"></a>Runtime Function: <em>unsigned int</em> <strong>__dpd_fixunsddsi</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixunsddsi"></a>Runtime Function: <em>unsigned int</em> <strong>__bid_fixunsddsi</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffixunstdsi"></a>Runtime Function: <em>unsigned int</em> <strong>__dpd_fixunstdsi</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixunstdsi"></a>Runtime Function: <em>unsigned int</em> <strong>__bid_fixunstdsi</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to an unsigned integer.  Negative values all become zero.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005ffixunssddi"></a>Runtime Function: <em>unsigned long</em> <strong>__dpd_fixunssddi</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixunssddi"></a>Runtime Function: <em>unsigned long</em> <strong>__bid_fixunssddi</strong> <em>(_Decimal32 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffixunsdddi"></a>Runtime Function: <em>unsigned long</em> <strong>__dpd_fixunsdddi</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixunsdddi"></a>Runtime Function: <em>unsigned long</em> <strong>__bid_fixunsdddi</strong> <em>(_Decimal64 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffixunstddi"></a>Runtime Function: <em>unsigned long</em> <strong>__dpd_fixunstddi</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffixunstddi"></a>Runtime Function: <em>unsigned long</em> <strong>__bid_fixunstddi</strong> <em>(_Decimal128 <var>a</var>)</em></dt>
<dd><p>These functions convert <var>a</var> to an unsigned long.  Negative values
all become zero.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005ffloatsisd"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_floatsisd</strong> <em>(int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatsisd"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_floatsisd</strong> <em>(int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffloatsidd"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_floatsidd</strong> <em>(int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatsidd"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_floatsidd</strong> <em>(int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffloatsitd"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_floatsitd</strong> <em>(int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatsitd"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_floatsitd</strong> <em>(int <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, a signed integer, to decimal floating point.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005ffloatdisd"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_floatdisd</strong> <em>(long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatdisd"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_floatdisd</strong> <em>(long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffloatdidd"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_floatdidd</strong> <em>(long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatdidd"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_floatdidd</strong> <em>(long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffloatditd"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_floatditd</strong> <em>(long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatditd"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_floatditd</strong> <em>(long <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, a signed long, to decimal floating point.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005ffloatunssisd"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_floatunssisd</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatunssisd"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_floatunssisd</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffloatunssidd"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_floatunssidd</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatunssidd"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_floatunssidd</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffloatunssitd"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_floatunssitd</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatunssitd"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_floatunssitd</strong> <em>(unsigned int <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, an unsigned integer, to decimal floating point.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005ffloatunsdisd"></a>Runtime Function: <em>_Decimal32</em> <strong>__dpd_floatunsdisd</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatunsdisd"></a>Runtime Function: <em>_Decimal32</em> <strong>__bid_floatunsdisd</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffloatunsdidd"></a>Runtime Function: <em>_Decimal64</em> <strong>__dpd_floatunsdidd</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatunsdidd"></a>Runtime Function: <em>_Decimal64</em> <strong>__bid_floatunsdidd</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005ffloatunsditd"></a>Runtime Function: <em>_Decimal128</em> <strong>__dpd_floatunsditd</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005ffloatunsditd"></a>Runtime Function: <em>_Decimal128</em> <strong>__bid_floatunsditd</strong> <em>(unsigned long <var>i</var>)</em></dt>
<dd><p>These functions convert <var>i</var>, an unsigned long, to decimal floating point.
</p></dd></dl>

<a name="Comparison-functions-2"></a>
<h4 class="subsection">4.3.3 Comparison functions</h4>

<dl>
<dt><a name="index-_005f_005fdpd_005funordsd2"></a>Runtime Function: <em>int</em> <strong>__dpd_unordsd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005funordsd2"></a>Runtime Function: <em>int</em> <strong>__bid_unordsd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005funorddd2"></a>Runtime Function: <em>int</em> <strong>__dpd_unorddd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005funorddd2"></a>Runtime Function: <em>int</em> <strong>__bid_unorddd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005funordtd2"></a>Runtime Function: <em>int</em> <strong>__dpd_unordtd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005funordtd2"></a>Runtime Function: <em>int</em> <strong>__bid_unordtd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return a nonzero value if either argument is NaN, otherwise 0.
</p></dd></dl>

<p>There is also a complete group of higher level functions which
correspond directly to comparison operators.  They implement the ISO C
semantics for floating-point comparisons, taking NaN into account.
Pay careful attention to the return values defined for each set.
Under the hood, all of these routines are implemented as
</p>
<div class="smallexample">
<pre class="smallexample">  if (__bid_unord<var>X</var>d2 (a, b))
    return <var>E</var>;
  return __bid_cmp<var>X</var>d2 (a, b);
</pre></div>

<p>where <var>E</var> is a constant chosen to give the proper behavior for
NaN.  Thus, the meaning of the return value is different for each set.
Do not rely on this implementation; only the semantics documented
below are guaranteed.
</p>
<dl>
<dt><a name="index-_005f_005fdpd_005feqsd2"></a>Runtime Function: <em>int</em> <strong>__dpd_eqsd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005feqsd2"></a>Runtime Function: <em>int</em> <strong>__bid_eqsd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005feqdd2"></a>Runtime Function: <em>int</em> <strong>__dpd_eqdd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005feqdd2"></a>Runtime Function: <em>int</em> <strong>__bid_eqdd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005feqtd2"></a>Runtime Function: <em>int</em> <strong>__dpd_eqtd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005feqtd2"></a>Runtime Function: <em>int</em> <strong>__bid_eqtd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return zero if neither argument is NaN, and <var>a</var> and
<var>b</var> are equal.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fnesd2"></a>Runtime Function: <em>int</em> <strong>__dpd_nesd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fnesd2"></a>Runtime Function: <em>int</em> <strong>__bid_nesd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fnedd2"></a>Runtime Function: <em>int</em> <strong>__dpd_nedd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fnedd2"></a>Runtime Function: <em>int</em> <strong>__bid_nedd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fnetd2"></a>Runtime Function: <em>int</em> <strong>__dpd_netd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fnetd2"></a>Runtime Function: <em>int</em> <strong>__bid_netd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return a nonzero value if either argument is NaN, or
if <var>a</var> and <var>b</var> are unequal.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fgesd2"></a>Runtime Function: <em>int</em> <strong>__dpd_gesd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fgesd2"></a>Runtime Function: <em>int</em> <strong>__bid_gesd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fgedd2"></a>Runtime Function: <em>int</em> <strong>__dpd_gedd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fgedd2"></a>Runtime Function: <em>int</em> <strong>__bid_gedd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fgetd2"></a>Runtime Function: <em>int</em> <strong>__dpd_getd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fgetd2"></a>Runtime Function: <em>int</em> <strong>__bid_getd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return a value greater than or equal to zero if
neither argument is NaN, and <var>a</var> is greater than or equal to
<var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fltsd2"></a>Runtime Function: <em>int</em> <strong>__dpd_ltsd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fltsd2"></a>Runtime Function: <em>int</em> <strong>__bid_ltsd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fltdd2"></a>Runtime Function: <em>int</em> <strong>__dpd_ltdd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fltdd2"></a>Runtime Function: <em>int</em> <strong>__bid_ltdd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005flttd2"></a>Runtime Function: <em>int</em> <strong>__dpd_lttd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005flttd2"></a>Runtime Function: <em>int</em> <strong>__bid_lttd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return a value less than zero if neither argument is
NaN, and <var>a</var> is strictly less than <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005flesd2"></a>Runtime Function: <em>int</em> <strong>__dpd_lesd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005flesd2"></a>Runtime Function: <em>int</em> <strong>__bid_lesd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fledd2"></a>Runtime Function: <em>int</em> <strong>__dpd_ledd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fledd2"></a>Runtime Function: <em>int</em> <strong>__bid_ledd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fletd2"></a>Runtime Function: <em>int</em> <strong>__dpd_letd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fletd2"></a>Runtime Function: <em>int</em> <strong>__bid_letd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return a value less than or equal to zero if neither
argument is NaN, and <var>a</var> is less than or equal to <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdpd_005fgtsd2"></a>Runtime Function: <em>int</em> <strong>__dpd_gtsd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fgtsd2"></a>Runtime Function: <em>int</em> <strong>__bid_gtsd2</strong> <em>(_Decimal32 <var>a</var>, _Decimal32 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fgtdd2"></a>Runtime Function: <em>int</em> <strong>__dpd_gtdd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fgtdd2"></a>Runtime Function: <em>int</em> <strong>__bid_gtdd2</strong> <em>(_Decimal64 <var>a</var>, _Decimal64 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdpd_005fgttd2"></a>Runtime Function: <em>int</em> <strong>__dpd_gttd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fbid_005fgttd2"></a>Runtime Function: <em>int</em> <strong>__bid_gttd2</strong> <em>(_Decimal128 <var>a</var>, _Decimal128 <var>b</var>)</em></dt>
<dd><p>These functions return a value greater than zero if neither argument
is NaN, and <var>a</var> is strictly greater than <var>b</var>.
</p></dd></dl>

<hr>
<a name="Fixed_002dpoint-fractional-library-routines"></a>
<div class="header">
<p>
Next: <a href="#Exception-handling-routines" accesskey="n" rel="next">Exception handling routines</a>, Previous: <a href="#Decimal-float-library-routines" accesskey="p" rel="prev">Decimal float library routines</a>, Up: <a href="#Libgcc" accesskey="u" rel="up">Libgcc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Routines-for-fixed_002dpoint-fractional-emulation"></a>
<h3 class="section">4.4 Routines for fixed-point fractional emulation</h3>
<a name="index-fixed_002dpoint-fractional-library"></a>
<a name="index-fractional-types"></a>
<a name="index-Embedded-C"></a>

<p>The software fixed-point library implements fixed-point fractional
arithmetic, and is only activated on selected targets.
</p>
<p>For ease of comprehension <code>fract</code> is an alias for the
<code>_Fract</code> type, <code>accum</code> an alias for <code>_Accum</code>, and
<code>sat</code> an alias for <code>_Sat</code>.
</p>
<p>For illustrative purposes, in this section the fixed-point fractional type
<code>short&nbsp;fract<!-- /@w --></code> is assumed to correspond to machine mode <code>QQmode</code>;
<code>unsigned&nbsp;short&nbsp;fract<!-- /@w --></code> to <code>UQQmode</code>;
<code>fract</code> to <code>HQmode</code>;
<code>unsigned&nbsp;fract<!-- /@w --></code> to <code>UHQmode</code>;
<code>long&nbsp;fract<!-- /@w --></code> to <code>SQmode</code>;
<code>unsigned&nbsp;long&nbsp;fract<!-- /@w --></code> to <code>USQmode</code>;
<code>long&nbsp;long&nbsp;fract<!-- /@w --></code> to <code>DQmode</code>;
and <code>unsigned&nbsp;long&nbsp;long&nbsp;fract<!-- /@w --></code> to <code>UDQmode</code>.
Similarly the fixed-point accumulator type
<code>short&nbsp;accum<!-- /@w --></code> corresponds to <code>HAmode</code>;
<code>unsigned&nbsp;short&nbsp;accum<!-- /@w --></code> to <code>UHAmode</code>;
<code>accum</code> to <code>SAmode</code>;
<code>unsigned&nbsp;accum<!-- /@w --></code> to <code>USAmode</code>;
<code>long&nbsp;accum<!-- /@w --></code> to <code>DAmode</code>;
<code>unsigned&nbsp;long&nbsp;accum<!-- /@w --></code> to <code>UDAmode</code>;
<code>long&nbsp;long&nbsp;accum<!-- /@w --></code> to <code>TAmode</code>;
and <code>unsigned&nbsp;long&nbsp;long&nbsp;accum<!-- /@w --></code> to <code>UTAmode</code>.
</p>
<a name="Arithmetic-functions-3"></a>
<h4 class="subsection">4.4.1 Arithmetic functions</h4>

<dl>
<dt><a name="index-_005f_005faddqq3"></a>Runtime Function: <em>short fract</em> <strong>__addqq3</strong> <em>(short fract <var>a</var>, short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddhq3"></a>Runtime Function: <em>fract</em> <strong>__addhq3</strong> <em>(fract <var>a</var>, fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddsq3"></a>Runtime Function: <em>long fract</em> <strong>__addsq3</strong> <em>(long fract <var>a</var>, long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fadddq3"></a>Runtime Function: <em>long long fract</em> <strong>__adddq3</strong> <em>(long long fract <var>a</var>, long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fadduqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__adduqq3</strong> <em>(unsigned short fract <var>a</var>, unsigned short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fadduhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__adduhq3</strong> <em>(unsigned fract <var>a</var>, unsigned fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__addusq3</strong> <em>(unsigned long fract <var>a</var>, unsigned long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddudq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__addudq3</strong> <em>(unsigned long long fract <var>a</var>, unsigned long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddha3"></a>Runtime Function: <em>short accum</em> <strong>__addha3</strong> <em>(short accum <var>a</var>, short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddsa3"></a>Runtime Function: <em>accum</em> <strong>__addsa3</strong> <em>(accum <var>a</var>, accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddda3"></a>Runtime Function: <em>long accum</em> <strong>__addda3</strong> <em>(long accum <var>a</var>, long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddta3"></a>Runtime Function: <em>long long accum</em> <strong>__addta3</strong> <em>(long long accum <var>a</var>, long long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fadduha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__adduha3</strong> <em>(unsigned short accum <var>a</var>, unsigned short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005faddusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__addusa3</strong> <em>(unsigned accum <var>a</var>, unsigned accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fadduda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__adduda3</strong> <em>(unsigned long accum <var>a</var>, unsigned long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fadduta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__adduta3</strong> <em>(unsigned long long accum <var>a</var>, unsigned long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the sum of <var>a</var> and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fssaddqq3"></a>Runtime Function: <em>short fract</em> <strong>__ssaddqq3</strong> <em>(short fract <var>a</var>, short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssaddhq3"></a>Runtime Function: <em>fract</em> <strong>__ssaddhq3</strong> <em>(fract <var>a</var>, fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssaddsq3"></a>Runtime Function: <em>long fract</em> <strong>__ssaddsq3</strong> <em>(long fract <var>a</var>, long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssadddq3"></a>Runtime Function: <em>long long fract</em> <strong>__ssadddq3</strong> <em>(long long fract <var>a</var>, long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssaddha3"></a>Runtime Function: <em>short accum</em> <strong>__ssaddha3</strong> <em>(short accum <var>a</var>, short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssaddsa3"></a>Runtime Function: <em>accum</em> <strong>__ssaddsa3</strong> <em>(accum <var>a</var>, accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssaddda3"></a>Runtime Function: <em>long accum</em> <strong>__ssaddda3</strong> <em>(long accum <var>a</var>, long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssaddta3"></a>Runtime Function: <em>long long accum</em> <strong>__ssaddta3</strong> <em>(long long accum <var>a</var>, long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the sum of <var>a</var> and <var>b</var> with signed saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fusadduqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__usadduqq3</strong> <em>(unsigned short fract <var>a</var>, unsigned short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusadduhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__usadduhq3</strong> <em>(unsigned fract <var>a</var>, unsigned fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusaddusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__usaddusq3</strong> <em>(unsigned long fract <var>a</var>, unsigned long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusaddudq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__usaddudq3</strong> <em>(unsigned long long fract <var>a</var>, unsigned long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusadduha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__usadduha3</strong> <em>(unsigned short accum <var>a</var>, unsigned short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusaddusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__usaddusa3</strong> <em>(unsigned accum <var>a</var>, unsigned accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusadduda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__usadduda3</strong> <em>(unsigned long accum <var>a</var>, unsigned long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusadduta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__usadduta3</strong> <em>(unsigned long long accum <var>a</var>, unsigned long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the sum of <var>a</var> and <var>b</var> with unsigned saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fsubqq3"></a>Runtime Function: <em>short fract</em> <strong>__subqq3</strong> <em>(short fract <var>a</var>, short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubhq3"></a>Runtime Function: <em>fract</em> <strong>__subhq3</strong> <em>(fract <var>a</var>, fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubsq3"></a>Runtime Function: <em>long fract</em> <strong>__subsq3</strong> <em>(long fract <var>a</var>, long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubdq3"></a>Runtime Function: <em>long long fract</em> <strong>__subdq3</strong> <em>(long long fract <var>a</var>, long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubuqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__subuqq3</strong> <em>(unsigned short fract <var>a</var>, unsigned short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubuhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__subuhq3</strong> <em>(unsigned fract <var>a</var>, unsigned fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__subusq3</strong> <em>(unsigned long fract <var>a</var>, unsigned long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubudq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__subudq3</strong> <em>(unsigned long long fract <var>a</var>, unsigned long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubha3"></a>Runtime Function: <em>short accum</em> <strong>__subha3</strong> <em>(short accum <var>a</var>, short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubsa3"></a>Runtime Function: <em>accum</em> <strong>__subsa3</strong> <em>(accum <var>a</var>, accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubda3"></a>Runtime Function: <em>long accum</em> <strong>__subda3</strong> <em>(long accum <var>a</var>, long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubta3"></a>Runtime Function: <em>long long accum</em> <strong>__subta3</strong> <em>(long long accum <var>a</var>, long long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubuha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__subuha3</strong> <em>(unsigned short accum <var>a</var>, unsigned short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__subusa3</strong> <em>(unsigned accum <var>a</var>, unsigned accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubuda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__subuda3</strong> <em>(unsigned long accum <var>a</var>, unsigned long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsubuta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__subuta3</strong> <em>(unsigned long long accum <var>a</var>, unsigned long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the difference of <var>a</var> and <var>b</var>;
that is, <code><var>a</var> - <var>b</var></code>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fsssubqq3"></a>Runtime Function: <em>short fract</em> <strong>__sssubqq3</strong> <em>(short fract <var>a</var>, short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsssubhq3"></a>Runtime Function: <em>fract</em> <strong>__sssubhq3</strong> <em>(fract <var>a</var>, fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsssubsq3"></a>Runtime Function: <em>long fract</em> <strong>__sssubsq3</strong> <em>(long fract <var>a</var>, long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsssubdq3"></a>Runtime Function: <em>long long fract</em> <strong>__sssubdq3</strong> <em>(long long fract <var>a</var>, long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsssubha3"></a>Runtime Function: <em>short accum</em> <strong>__sssubha3</strong> <em>(short accum <var>a</var>, short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsssubsa3"></a>Runtime Function: <em>accum</em> <strong>__sssubsa3</strong> <em>(accum <var>a</var>, accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsssubda3"></a>Runtime Function: <em>long accum</em> <strong>__sssubda3</strong> <em>(long accum <var>a</var>, long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fsssubta3"></a>Runtime Function: <em>long long accum</em> <strong>__sssubta3</strong> <em>(long long accum <var>a</var>, long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the difference of <var>a</var> and <var>b</var> with signed
saturation;  that is, <code><var>a</var> - <var>b</var></code>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fussubuqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__ussubuqq3</strong> <em>(unsigned short fract <var>a</var>, unsigned short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fussubuhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__ussubuhq3</strong> <em>(unsigned fract <var>a</var>, unsigned fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fussubusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__ussubusq3</strong> <em>(unsigned long fract <var>a</var>, unsigned long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fussubudq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__ussubudq3</strong> <em>(unsigned long long fract <var>a</var>, unsigned long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fussubuha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__ussubuha3</strong> <em>(unsigned short accum <var>a</var>, unsigned short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fussubusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__ussubusa3</strong> <em>(unsigned accum <var>a</var>, unsigned accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fussubuda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__ussubuda3</strong> <em>(unsigned long accum <var>a</var>, unsigned long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fussubuta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__ussubuta3</strong> <em>(unsigned long long accum <var>a</var>, unsigned long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the difference of <var>a</var> and <var>b</var> with unsigned
saturation;  that is, <code><var>a</var> - <var>b</var></code>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fmulqq3"></a>Runtime Function: <em>short fract</em> <strong>__mulqq3</strong> <em>(short fract <var>a</var>, short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulhq3"></a>Runtime Function: <em>fract</em> <strong>__mulhq3</strong> <em>(fract <var>a</var>, fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulsq3"></a>Runtime Function: <em>long fract</em> <strong>__mulsq3</strong> <em>(long fract <var>a</var>, long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmuldq3"></a>Runtime Function: <em>long long fract</em> <strong>__muldq3</strong> <em>(long long fract <var>a</var>, long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmuluqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__muluqq3</strong> <em>(unsigned short fract <var>a</var>, unsigned short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmuluhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__muluhq3</strong> <em>(unsigned fract <var>a</var>, unsigned fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__mulusq3</strong> <em>(unsigned long fract <var>a</var>, unsigned long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmuludq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__muludq3</strong> <em>(unsigned long long fract <var>a</var>, unsigned long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulha3"></a>Runtime Function: <em>short accum</em> <strong>__mulha3</strong> <em>(short accum <var>a</var>, short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulsa3"></a>Runtime Function: <em>accum</em> <strong>__mulsa3</strong> <em>(accum <var>a</var>, accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulda3"></a>Runtime Function: <em>long accum</em> <strong>__mulda3</strong> <em>(long accum <var>a</var>, long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulta3"></a>Runtime Function: <em>long long accum</em> <strong>__multa3</strong> <em>(long long accum <var>a</var>, long long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmuluha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__muluha3</strong> <em>(unsigned short accum <var>a</var>, unsigned short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmulusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__mulusa3</strong> <em>(unsigned accum <var>a</var>, unsigned accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmuluda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__muluda3</strong> <em>(unsigned long accum <var>a</var>, unsigned long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fmuluta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__muluta3</strong> <em>(unsigned long long accum <var>a</var>, unsigned long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the product of <var>a</var> and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fssmulqq3"></a>Runtime Function: <em>short fract</em> <strong>__ssmulqq3</strong> <em>(short fract <var>a</var>, short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssmulhq3"></a>Runtime Function: <em>fract</em> <strong>__ssmulhq3</strong> <em>(fract <var>a</var>, fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssmulsq3"></a>Runtime Function: <em>long fract</em> <strong>__ssmulsq3</strong> <em>(long fract <var>a</var>, long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssmuldq3"></a>Runtime Function: <em>long long fract</em> <strong>__ssmuldq3</strong> <em>(long long fract <var>a</var>, long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssmulha3"></a>Runtime Function: <em>short accum</em> <strong>__ssmulha3</strong> <em>(short accum <var>a</var>, short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssmulsa3"></a>Runtime Function: <em>accum</em> <strong>__ssmulsa3</strong> <em>(accum <var>a</var>, accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssmulda3"></a>Runtime Function: <em>long accum</em> <strong>__ssmulda3</strong> <em>(long accum <var>a</var>, long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssmulta3"></a>Runtime Function: <em>long long accum</em> <strong>__ssmulta3</strong> <em>(long long accum <var>a</var>, long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the product of <var>a</var> and <var>b</var> with signed
saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fusmuluqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__usmuluqq3</strong> <em>(unsigned short fract <var>a</var>, unsigned short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusmuluhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__usmuluhq3</strong> <em>(unsigned fract <var>a</var>, unsigned fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusmulusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__usmulusq3</strong> <em>(unsigned long fract <var>a</var>, unsigned long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusmuludq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__usmuludq3</strong> <em>(unsigned long long fract <var>a</var>, unsigned long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusmuluha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__usmuluha3</strong> <em>(unsigned short accum <var>a</var>, unsigned short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusmulusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__usmulusa3</strong> <em>(unsigned accum <var>a</var>, unsigned accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusmuluda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__usmuluda3</strong> <em>(unsigned long accum <var>a</var>, unsigned long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusmuluta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__usmuluta3</strong> <em>(unsigned long long accum <var>a</var>, unsigned long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the product of <var>a</var> and <var>b</var> with unsigned
saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fdivqq3"></a>Runtime Function: <em>short fract</em> <strong>__divqq3</strong> <em>(short fract <var>a</var>, short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivhq3"></a>Runtime Function: <em>fract</em> <strong>__divhq3</strong> <em>(fract <var>a</var>, fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivsq3"></a>Runtime Function: <em>long fract</em> <strong>__divsq3</strong> <em>(long fract <var>a</var>, long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivdq3"></a>Runtime Function: <em>long long fract</em> <strong>__divdq3</strong> <em>(long long fract <var>a</var>, long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivha3"></a>Runtime Function: <em>short accum</em> <strong>__divha3</strong> <em>(short accum <var>a</var>, short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivsa3"></a>Runtime Function: <em>accum</em> <strong>__divsa3</strong> <em>(accum <var>a</var>, accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivda3"></a>Runtime Function: <em>long accum</em> <strong>__divda3</strong> <em>(long accum <var>a</var>, long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fdivta3"></a>Runtime Function: <em>long long accum</em> <strong>__divta3</strong> <em>(long long accum <var>a</var>, long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the quotient of the signed division of <var>a</var>
and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fudivuqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__udivuqq3</strong> <em>(unsigned short fract <var>a</var>, unsigned short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fudivuhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__udivuhq3</strong> <em>(unsigned fract <var>a</var>, unsigned fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fudivusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__udivusq3</strong> <em>(unsigned long fract <var>a</var>, unsigned long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fudivudq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__udivudq3</strong> <em>(unsigned long long fract <var>a</var>, unsigned long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fudivuha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__udivuha3</strong> <em>(unsigned short accum <var>a</var>, unsigned short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fudivusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__udivusa3</strong> <em>(unsigned accum <var>a</var>, unsigned accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fudivuda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__udivuda3</strong> <em>(unsigned long accum <var>a</var>, unsigned long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fudivuta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__udivuta3</strong> <em>(unsigned long long accum <var>a</var>, unsigned long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the quotient of the unsigned division of <var>a</var>
and <var>b</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fssdivqq3"></a>Runtime Function: <em>short fract</em> <strong>__ssdivqq3</strong> <em>(short fract <var>a</var>, short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssdivhq3"></a>Runtime Function: <em>fract</em> <strong>__ssdivhq3</strong> <em>(fract <var>a</var>, fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssdivsq3"></a>Runtime Function: <em>long fract</em> <strong>__ssdivsq3</strong> <em>(long fract <var>a</var>, long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssdivdq3"></a>Runtime Function: <em>long long fract</em> <strong>__ssdivdq3</strong> <em>(long long fract <var>a</var>, long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssdivha3"></a>Runtime Function: <em>short accum</em> <strong>__ssdivha3</strong> <em>(short accum <var>a</var>, short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssdivsa3"></a>Runtime Function: <em>accum</em> <strong>__ssdivsa3</strong> <em>(accum <var>a</var>, accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssdivda3"></a>Runtime Function: <em>long accum</em> <strong>__ssdivda3</strong> <em>(long accum <var>a</var>, long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssdivta3"></a>Runtime Function: <em>long long accum</em> <strong>__ssdivta3</strong> <em>(long long accum <var>a</var>, long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the quotient of the signed division of <var>a</var>
and <var>b</var> with signed saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fusdivuqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__usdivuqq3</strong> <em>(unsigned short fract <var>a</var>, unsigned short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusdivuhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__usdivuhq3</strong> <em>(unsigned fract <var>a</var>, unsigned fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusdivusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__usdivusq3</strong> <em>(unsigned long fract <var>a</var>, unsigned long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusdivudq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__usdivudq3</strong> <em>(unsigned long long fract <var>a</var>, unsigned long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusdivuha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__usdivuha3</strong> <em>(unsigned short accum <var>a</var>, unsigned short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusdivusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__usdivusa3</strong> <em>(unsigned accum <var>a</var>, unsigned accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusdivuda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__usdivuda3</strong> <em>(unsigned long accum <var>a</var>, unsigned long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusdivuta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__usdivuta3</strong> <em>(unsigned long long accum <var>a</var>, unsigned long long accum <var>b</var>)</em></dt>
<dd><p>These functions return the quotient of the unsigned division of <var>a</var>
and <var>b</var> with unsigned saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fnegqq2"></a>Runtime Function: <em>short fract</em> <strong>__negqq2</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fneghq2"></a>Runtime Function: <em>fract</em> <strong>__neghq2</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegsq2"></a>Runtime Function: <em>long fract</em> <strong>__negsq2</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegdq2"></a>Runtime Function: <em>long long fract</em> <strong>__negdq2</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fneguqq2"></a>Runtime Function: <em>unsigned short fract</em> <strong>__neguqq2</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fneguhq2"></a>Runtime Function: <em>unsigned fract</em> <strong>__neguhq2</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegusq2"></a>Runtime Function: <em>unsigned long fract</em> <strong>__negusq2</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegudq2"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__negudq2</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegha2"></a>Runtime Function: <em>short accum</em> <strong>__negha2</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegsa2"></a>Runtime Function: <em>accum</em> <strong>__negsa2</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegda2"></a>Runtime Function: <em>long accum</em> <strong>__negda2</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegta2"></a>Runtime Function: <em>long long accum</em> <strong>__negta2</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fneguha2"></a>Runtime Function: <em>unsigned short accum</em> <strong>__neguha2</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fnegusa2"></a>Runtime Function: <em>unsigned accum</em> <strong>__negusa2</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fneguda2"></a>Runtime Function: <em>unsigned long accum</em> <strong>__neguda2</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fneguta2"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__neguta2</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dd><p>These functions return the negation of <var>a</var>.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fssnegqq2"></a>Runtime Function: <em>short fract</em> <strong>__ssnegqq2</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fssneghq2"></a>Runtime Function: <em>fract</em> <strong>__ssneghq2</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fssnegsq2"></a>Runtime Function: <em>long fract</em> <strong>__ssnegsq2</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fssnegdq2"></a>Runtime Function: <em>long long fract</em> <strong>__ssnegdq2</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fssnegha2"></a>Runtime Function: <em>short accum</em> <strong>__ssnegha2</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fssnegsa2"></a>Runtime Function: <em>accum</em> <strong>__ssnegsa2</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fssnegda2"></a>Runtime Function: <em>long accum</em> <strong>__ssnegda2</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fssnegta2"></a>Runtime Function: <em>long long accum</em> <strong>__ssnegta2</strong> <em>(long long accum <var>a</var>)</em></dt>
<dd><p>These functions return the negation of <var>a</var> with signed saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fusneguqq2"></a>Runtime Function: <em>unsigned short fract</em> <strong>__usneguqq2</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fusneguhq2"></a>Runtime Function: <em>unsigned fract</em> <strong>__usneguhq2</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fusnegusq2"></a>Runtime Function: <em>unsigned long fract</em> <strong>__usnegusq2</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fusnegudq2"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__usnegudq2</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fusneguha2"></a>Runtime Function: <em>unsigned short accum</em> <strong>__usneguha2</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fusnegusa2"></a>Runtime Function: <em>unsigned accum</em> <strong>__usnegusa2</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fusneguda2"></a>Runtime Function: <em>unsigned long accum</em> <strong>__usneguda2</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fusneguta2"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__usneguta2</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dd><p>These functions return the negation of <var>a</var> with unsigned saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fashlqq3"></a>Runtime Function: <em>short fract</em> <strong>__ashlqq3</strong> <em>(short fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashlhq3"></a>Runtime Function: <em>fract</em> <strong>__ashlhq3</strong> <em>(fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashlsq3"></a>Runtime Function: <em>long fract</em> <strong>__ashlsq3</strong> <em>(long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashldq3"></a>Runtime Function: <em>long long fract</em> <strong>__ashldq3</strong> <em>(long long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashluqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__ashluqq3</strong> <em>(unsigned short fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashluhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__ashluhq3</strong> <em>(unsigned fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashlusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__ashlusq3</strong> <em>(unsigned long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashludq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__ashludq3</strong> <em>(unsigned long long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashlha3"></a>Runtime Function: <em>short accum</em> <strong>__ashlha3</strong> <em>(short accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashlsa3"></a>Runtime Function: <em>accum</em> <strong>__ashlsa3</strong> <em>(accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashlda3"></a>Runtime Function: <em>long accum</em> <strong>__ashlda3</strong> <em>(long accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashlta3"></a>Runtime Function: <em>long long accum</em> <strong>__ashlta3</strong> <em>(long long accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashluha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__ashluha3</strong> <em>(unsigned short accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashlusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__ashlusa3</strong> <em>(unsigned accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashluda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__ashluda3</strong> <em>(unsigned long accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashluta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__ashluta3</strong> <em>(unsigned long long accum <var>a</var>, int <var>b</var>)</em></dt>
<dd><p>These functions return the result of shifting <var>a</var> left by <var>b</var> bits.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fashrqq3"></a>Runtime Function: <em>short fract</em> <strong>__ashrqq3</strong> <em>(short fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashrhq3"></a>Runtime Function: <em>fract</em> <strong>__ashrhq3</strong> <em>(fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashrsq3"></a>Runtime Function: <em>long fract</em> <strong>__ashrsq3</strong> <em>(long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashrdq3"></a>Runtime Function: <em>long long fract</em> <strong>__ashrdq3</strong> <em>(long long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashrha3"></a>Runtime Function: <em>short accum</em> <strong>__ashrha3</strong> <em>(short accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashrsa3"></a>Runtime Function: <em>accum</em> <strong>__ashrsa3</strong> <em>(accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashrda3"></a>Runtime Function: <em>long accum</em> <strong>__ashrda3</strong> <em>(long accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fashrta3"></a>Runtime Function: <em>long long accum</em> <strong>__ashrta3</strong> <em>(long long accum <var>a</var>, int <var>b</var>)</em></dt>
<dd><p>These functions return the result of arithmetically shifting <var>a</var> right
by <var>b</var> bits.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005flshruqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__lshruqq3</strong> <em>(unsigned short fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flshruhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__lshruhq3</strong> <em>(unsigned fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flshrusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__lshrusq3</strong> <em>(unsigned long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flshrudq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__lshrudq3</strong> <em>(unsigned long long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flshruha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__lshruha3</strong> <em>(unsigned short accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flshrusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__lshrusa3</strong> <em>(unsigned accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flshruda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__lshruda3</strong> <em>(unsigned long accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005flshruta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__lshruta3</strong> <em>(unsigned long long accum <var>a</var>, int <var>b</var>)</em></dt>
<dd><p>These functions return the result of logically shifting <var>a</var> right
by <var>b</var> bits.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fssashlhq3"></a>Runtime Function: <em>fract</em> <strong>__ssashlhq3</strong> <em>(fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssashlsq3"></a>Runtime Function: <em>long fract</em> <strong>__ssashlsq3</strong> <em>(long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssashldq3"></a>Runtime Function: <em>long long fract</em> <strong>__ssashldq3</strong> <em>(long long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssashlha3"></a>Runtime Function: <em>short accum</em> <strong>__ssashlha3</strong> <em>(short accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssashlsa3"></a>Runtime Function: <em>accum</em> <strong>__ssashlsa3</strong> <em>(accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssashlda3"></a>Runtime Function: <em>long accum</em> <strong>__ssashlda3</strong> <em>(long accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fssashlta3"></a>Runtime Function: <em>long long accum</em> <strong>__ssashlta3</strong> <em>(long long accum <var>a</var>, int <var>b</var>)</em></dt>
<dd><p>These functions return the result of shifting <var>a</var> left by <var>b</var> bits
with signed saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fusashluqq3"></a>Runtime Function: <em>unsigned short fract</em> <strong>__usashluqq3</strong> <em>(unsigned short fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusashluhq3"></a>Runtime Function: <em>unsigned fract</em> <strong>__usashluhq3</strong> <em>(unsigned fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusashlusq3"></a>Runtime Function: <em>unsigned long fract</em> <strong>__usashlusq3</strong> <em>(unsigned long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusashludq3"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__usashludq3</strong> <em>(unsigned long long fract <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusashluha3"></a>Runtime Function: <em>unsigned short accum</em> <strong>__usashluha3</strong> <em>(unsigned short accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusashlusa3"></a>Runtime Function: <em>unsigned accum</em> <strong>__usashlusa3</strong> <em>(unsigned accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusashluda3"></a>Runtime Function: <em>unsigned long accum</em> <strong>__usashluda3</strong> <em>(unsigned long accum <var>a</var>, int <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fusashluta3"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__usashluta3</strong> <em>(unsigned long long accum <var>a</var>, int <var>b</var>)</em></dt>
<dd><p>These functions return the result of shifting <var>a</var> left by <var>b</var> bits
with unsigned saturation.
</p></dd></dl>

<a name="Comparison-functions-3"></a>
<h4 class="subsection">4.4.2 Comparison functions</h4>

<p>The following functions implement fixed-point comparisons.  These functions
implement a low-level compare, upon which the higher level comparison
operators (such as less than and greater than or equal to) can be
constructed.  The returned values lie in the range zero to two, to allow
the high-level operators to be implemented by testing the returned
result using either signed or unsigned comparison.
</p>
<dl>
<dt><a name="index-_005f_005fcmpqq2"></a>Runtime Function: <em>int</em> <strong>__cmpqq2</strong> <em>(short fract <var>a</var>, short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmphq2"></a>Runtime Function: <em>int</em> <strong>__cmphq2</strong> <em>(fract <var>a</var>, fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpsq2"></a>Runtime Function: <em>int</em> <strong>__cmpsq2</strong> <em>(long fract <var>a</var>, long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpdq2"></a>Runtime Function: <em>int</em> <strong>__cmpdq2</strong> <em>(long long fract <var>a</var>, long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpuqq2"></a>Runtime Function: <em>int</em> <strong>__cmpuqq2</strong> <em>(unsigned short fract <var>a</var>, unsigned short fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpuhq2"></a>Runtime Function: <em>int</em> <strong>__cmpuhq2</strong> <em>(unsigned fract <var>a</var>, unsigned fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpusq2"></a>Runtime Function: <em>int</em> <strong>__cmpusq2</strong> <em>(unsigned long fract <var>a</var>, unsigned long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpudq2"></a>Runtime Function: <em>int</em> <strong>__cmpudq2</strong> <em>(unsigned long long fract <var>a</var>, unsigned long long fract <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpha2"></a>Runtime Function: <em>int</em> <strong>__cmpha2</strong> <em>(short accum <var>a</var>, short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpsa2"></a>Runtime Function: <em>int</em> <strong>__cmpsa2</strong> <em>(accum <var>a</var>, accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpda2"></a>Runtime Function: <em>int</em> <strong>__cmpda2</strong> <em>(long accum <var>a</var>, long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpta2"></a>Runtime Function: <em>int</em> <strong>__cmpta2</strong> <em>(long long accum <var>a</var>, long long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpuha2"></a>Runtime Function: <em>int</em> <strong>__cmpuha2</strong> <em>(unsigned short accum <var>a</var>, unsigned short accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpusa2"></a>Runtime Function: <em>int</em> <strong>__cmpusa2</strong> <em>(unsigned accum <var>a</var>, unsigned accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmpuda2"></a>Runtime Function: <em>int</em> <strong>__cmpuda2</strong> <em>(unsigned long accum <var>a</var>, unsigned long accum <var>b</var>)</em></dt>
<dt><a name="index-_005f_005fcmputa2"></a>Runtime Function: <em>int</em> <strong>__cmputa2</strong> <em>(unsigned long long accum <var>a</var>, unsigned long long accum <var>b</var>)</em></dt>
<dd><p>These functions perform a signed or unsigned comparison of <var>a</var> and
<var>b</var> (depending on the selected machine mode).  If <var>a</var> is less
than <var>b</var>, they return 0; if <var>a</var> is greater than <var>b</var>, they
return 2; and if <var>a</var> and <var>b</var> are equal they return 1.
</p></dd></dl>

<a name="Conversion-functions-2"></a>
<h4 class="subsection">4.4.3 Conversion functions</h4>

<dl>
<dt><a name="index-_005f_005ffractqqhq2"></a>Runtime Function: <em>fract</em> <strong>__fractqqhq2</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqsq2"></a>Runtime Function: <em>long fract</em> <strong>__fractqqsq2</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqdq2"></a>Runtime Function: <em>long long fract</em> <strong>__fractqqdq2</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqha"></a>Runtime Function: <em>short accum</em> <strong>__fractqqha</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqsa"></a>Runtime Function: <em>accum</em> <strong>__fractqqsa</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqda"></a>Runtime Function: <em>long accum</em> <strong>__fractqqda</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqta"></a>Runtime Function: <em>long long accum</em> <strong>__fractqqta</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqquqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractqquqq</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqquhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractqquhq</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractqqusq</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractqqudq</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractqquha</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractqqusa</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractqquda</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractqquta</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqqi"></a>Runtime Function: <em>signed char</em> <strong>__fractqqqi</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqhi"></a>Runtime Function: <em>short</em> <strong>__fractqqhi</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqsi"></a>Runtime Function: <em>int</em> <strong>__fractqqsi</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqdi"></a>Runtime Function: <em>long</em> <strong>__fractqqdi</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqti"></a>Runtime Function: <em>long long</em> <strong>__fractqqti</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqsf"></a>Runtime Function: <em>float</em> <strong>__fractqqsf</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqqdf"></a>Runtime Function: <em>double</em> <strong>__fractqqdf</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqqq2"></a>Runtime Function: <em>short fract</em> <strong>__fracthqqq2</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqsq2"></a>Runtime Function: <em>long fract</em> <strong>__fracthqsq2</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqdq2"></a>Runtime Function: <em>long long fract</em> <strong>__fracthqdq2</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqha"></a>Runtime Function: <em>short accum</em> <strong>__fracthqha</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqsa"></a>Runtime Function: <em>accum</em> <strong>__fracthqsa</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqda"></a>Runtime Function: <em>long accum</em> <strong>__fracthqda</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqta"></a>Runtime Function: <em>long long accum</em> <strong>__fracthqta</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthquqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fracthquqq</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthquhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fracthquhq</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fracthqusq</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fracthqudq</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fracthquha</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fracthqusa</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fracthquda</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fracthquta</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqqi"></a>Runtime Function: <em>signed char</em> <strong>__fracthqqi</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqhi"></a>Runtime Function: <em>short</em> <strong>__fracthqhi</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqsi"></a>Runtime Function: <em>int</em> <strong>__fracthqsi</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqdi"></a>Runtime Function: <em>long</em> <strong>__fracthqdi</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqti"></a>Runtime Function: <em>long long</em> <strong>__fracthqti</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqsf"></a>Runtime Function: <em>float</em> <strong>__fracthqsf</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthqdf"></a>Runtime Function: <em>double</em> <strong>__fracthqdf</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqqq2"></a>Runtime Function: <em>short fract</em> <strong>__fractsqqq2</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqhq2"></a>Runtime Function: <em>fract</em> <strong>__fractsqhq2</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqdq2"></a>Runtime Function: <em>long long fract</em> <strong>__fractsqdq2</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqha"></a>Runtime Function: <em>short accum</em> <strong>__fractsqha</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqsa"></a>Runtime Function: <em>accum</em> <strong>__fractsqsa</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqda"></a>Runtime Function: <em>long accum</em> <strong>__fractsqda</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqta"></a>Runtime Function: <em>long long accum</em> <strong>__fractsqta</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsquqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractsquqq</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsquhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractsquhq</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractsqusq</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractsqudq</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractsquha</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractsqusa</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractsquda</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractsquta</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqqi"></a>Runtime Function: <em>signed char</em> <strong>__fractsqqi</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqhi"></a>Runtime Function: <em>short</em> <strong>__fractsqhi</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqsi"></a>Runtime Function: <em>int</em> <strong>__fractsqsi</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqdi"></a>Runtime Function: <em>long</em> <strong>__fractsqdi</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqti"></a>Runtime Function: <em>long long</em> <strong>__fractsqti</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqsf"></a>Runtime Function: <em>float</em> <strong>__fractsqsf</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsqdf"></a>Runtime Function: <em>double</em> <strong>__fractsqdf</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqqq2"></a>Runtime Function: <em>short fract</em> <strong>__fractdqqq2</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqhq2"></a>Runtime Function: <em>fract</em> <strong>__fractdqhq2</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqsq2"></a>Runtime Function: <em>long fract</em> <strong>__fractdqsq2</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqha"></a>Runtime Function: <em>short accum</em> <strong>__fractdqha</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqsa"></a>Runtime Function: <em>accum</em> <strong>__fractdqsa</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqda"></a>Runtime Function: <em>long accum</em> <strong>__fractdqda</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqta"></a>Runtime Function: <em>long long accum</em> <strong>__fractdqta</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdquqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractdquqq</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdquhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractdquhq</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractdqusq</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractdqudq</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractdquha</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractdqusa</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractdquda</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractdquta</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqqi"></a>Runtime Function: <em>signed char</em> <strong>__fractdqqi</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqhi"></a>Runtime Function: <em>short</em> <strong>__fractdqhi</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqsi"></a>Runtime Function: <em>int</em> <strong>__fractdqsi</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqdi"></a>Runtime Function: <em>long</em> <strong>__fractdqdi</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqti"></a>Runtime Function: <em>long long</em> <strong>__fractdqti</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqsf"></a>Runtime Function: <em>float</em> <strong>__fractdqsf</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdqdf"></a>Runtime Function: <em>double</em> <strong>__fractdqdf</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthaqq"></a>Runtime Function: <em>short fract</em> <strong>__fracthaqq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthahq"></a>Runtime Function: <em>fract</em> <strong>__fracthahq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthasq"></a>Runtime Function: <em>long fract</em> <strong>__fracthasq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthadq"></a>Runtime Function: <em>long long fract</em> <strong>__fracthadq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthasa2"></a>Runtime Function: <em>accum</em> <strong>__fracthasa2</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthada2"></a>Runtime Function: <em>long accum</em> <strong>__fracthada2</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthata2"></a>Runtime Function: <em>long long accum</em> <strong>__fracthata2</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fracthauqq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fracthauhq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fracthausq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fracthaudq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthauha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fracthauha</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthausa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fracthausa</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthauda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fracthauda</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthauta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fracthauta</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthaqi"></a>Runtime Function: <em>signed char</em> <strong>__fracthaqi</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthahi"></a>Runtime Function: <em>short</em> <strong>__fracthahi</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthasi"></a>Runtime Function: <em>int</em> <strong>__fracthasi</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthadi"></a>Runtime Function: <em>long</em> <strong>__fracthadi</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthati"></a>Runtime Function: <em>long long</em> <strong>__fracthati</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthasf"></a>Runtime Function: <em>float</em> <strong>__fracthasf</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthadf"></a>Runtime Function: <em>double</em> <strong>__fracthadf</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsaqq"></a>Runtime Function: <em>short fract</em> <strong>__fractsaqq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsahq"></a>Runtime Function: <em>fract</em> <strong>__fractsahq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsasq"></a>Runtime Function: <em>long fract</em> <strong>__fractsasq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsadq"></a>Runtime Function: <em>long long fract</em> <strong>__fractsadq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsaha2"></a>Runtime Function: <em>short accum</em> <strong>__fractsaha2</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsada2"></a>Runtime Function: <em>long accum</em> <strong>__fractsada2</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsata2"></a>Runtime Function: <em>long long accum</em> <strong>__fractsata2</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractsauqq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractsauhq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractsausq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractsaudq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsauha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractsauha</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsausa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractsausa</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsauda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractsauda</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsauta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractsauta</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsaqi"></a>Runtime Function: <em>signed char</em> <strong>__fractsaqi</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsahi"></a>Runtime Function: <em>short</em> <strong>__fractsahi</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsasi"></a>Runtime Function: <em>int</em> <strong>__fractsasi</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsadi"></a>Runtime Function: <em>long</em> <strong>__fractsadi</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsati"></a>Runtime Function: <em>long long</em> <strong>__fractsati</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsasf"></a>Runtime Function: <em>float</em> <strong>__fractsasf</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsadf"></a>Runtime Function: <em>double</em> <strong>__fractsadf</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdaqq"></a>Runtime Function: <em>short fract</em> <strong>__fractdaqq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdahq"></a>Runtime Function: <em>fract</em> <strong>__fractdahq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdasq"></a>Runtime Function: <em>long fract</em> <strong>__fractdasq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdadq"></a>Runtime Function: <em>long long fract</em> <strong>__fractdadq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdaha2"></a>Runtime Function: <em>short accum</em> <strong>__fractdaha2</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdasa2"></a>Runtime Function: <em>accum</em> <strong>__fractdasa2</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdata2"></a>Runtime Function: <em>long long accum</em> <strong>__fractdata2</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractdauqq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractdauhq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractdausq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractdaudq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdauha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractdauha</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdausa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractdausa</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdauda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractdauda</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdauta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractdauta</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdaqi"></a>Runtime Function: <em>signed char</em> <strong>__fractdaqi</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdahi"></a>Runtime Function: <em>short</em> <strong>__fractdahi</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdasi"></a>Runtime Function: <em>int</em> <strong>__fractdasi</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdadi"></a>Runtime Function: <em>long</em> <strong>__fractdadi</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdati"></a>Runtime Function: <em>long long</em> <strong>__fractdati</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdasf"></a>Runtime Function: <em>float</em> <strong>__fractdasf</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdadf"></a>Runtime Function: <em>double</em> <strong>__fractdadf</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttaqq"></a>Runtime Function: <em>short fract</em> <strong>__fracttaqq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttahq"></a>Runtime Function: <em>fract</em> <strong>__fracttahq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttasq"></a>Runtime Function: <em>long fract</em> <strong>__fracttasq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttadq"></a>Runtime Function: <em>long long fract</em> <strong>__fracttadq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttaha2"></a>Runtime Function: <em>short accum</em> <strong>__fracttaha2</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttasa2"></a>Runtime Function: <em>accum</em> <strong>__fracttasa2</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttada2"></a>Runtime Function: <em>long accum</em> <strong>__fracttada2</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fracttauqq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fracttauhq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fracttausq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fracttaudq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttauha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fracttauha</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttausa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fracttausa</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttauda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fracttauda</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttauta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fracttauta</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttaqi"></a>Runtime Function: <em>signed char</em> <strong>__fracttaqi</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttahi"></a>Runtime Function: <em>short</em> <strong>__fracttahi</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttasi"></a>Runtime Function: <em>int</em> <strong>__fracttasi</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttadi"></a>Runtime Function: <em>long</em> <strong>__fracttadi</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttati"></a>Runtime Function: <em>long long</em> <strong>__fracttati</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttasf"></a>Runtime Function: <em>float</em> <strong>__fracttasf</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttadf"></a>Runtime Function: <em>double</em> <strong>__fracttadf</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqqq"></a>Runtime Function: <em>short fract</em> <strong>__fractuqqqq</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqhq"></a>Runtime Function: <em>fract</em> <strong>__fractuqqhq</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqsq"></a>Runtime Function: <em>long fract</em> <strong>__fractuqqsq</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqdq"></a>Runtime Function: <em>long long fract</em> <strong>__fractuqqdq</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqha"></a>Runtime Function: <em>short accum</em> <strong>__fractuqqha</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqsa"></a>Runtime Function: <em>accum</em> <strong>__fractuqqsa</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqda"></a>Runtime Function: <em>long accum</em> <strong>__fractuqqda</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqta"></a>Runtime Function: <em>long long accum</em> <strong>__fractuqqta</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqquhq2"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractuqquhq2</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqusq2"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractuqqusq2</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqudq2"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractuqqudq2</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractuqquha</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractuqqusa</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractuqquda</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractuqquta</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqqi"></a>Runtime Function: <em>signed char</em> <strong>__fractuqqqi</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqhi"></a>Runtime Function: <em>short</em> <strong>__fractuqqhi</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqsi"></a>Runtime Function: <em>int</em> <strong>__fractuqqsi</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqdi"></a>Runtime Function: <em>long</em> <strong>__fractuqqdi</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqti"></a>Runtime Function: <em>long long</em> <strong>__fractuqqti</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqsf"></a>Runtime Function: <em>float</em> <strong>__fractuqqsf</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuqqdf"></a>Runtime Function: <em>double</em> <strong>__fractuqqdf</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqqq"></a>Runtime Function: <em>short fract</em> <strong>__fractuhqqq</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqhq"></a>Runtime Function: <em>fract</em> <strong>__fractuhqhq</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqsq"></a>Runtime Function: <em>long fract</em> <strong>__fractuhqsq</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqdq"></a>Runtime Function: <em>long long fract</em> <strong>__fractuhqdq</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqha"></a>Runtime Function: <em>short accum</em> <strong>__fractuhqha</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqsa"></a>Runtime Function: <em>accum</em> <strong>__fractuhqsa</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqda"></a>Runtime Function: <em>long accum</em> <strong>__fractuhqda</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqta"></a>Runtime Function: <em>long long accum</em> <strong>__fractuhqta</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhquqq2"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractuhquqq2</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqusq2"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractuhqusq2</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqudq2"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractuhqudq2</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractuhquha</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractuhqusa</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractuhquda</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractuhquta</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqqi"></a>Runtime Function: <em>signed char</em> <strong>__fractuhqqi</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqhi"></a>Runtime Function: <em>short</em> <strong>__fractuhqhi</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqsi"></a>Runtime Function: <em>int</em> <strong>__fractuhqsi</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqdi"></a>Runtime Function: <em>long</em> <strong>__fractuhqdi</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqti"></a>Runtime Function: <em>long long</em> <strong>__fractuhqti</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqsf"></a>Runtime Function: <em>float</em> <strong>__fractuhqsf</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhqdf"></a>Runtime Function: <em>double</em> <strong>__fractuhqdf</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqqq"></a>Runtime Function: <em>short fract</em> <strong>__fractusqqq</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqhq"></a>Runtime Function: <em>fract</em> <strong>__fractusqhq</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqsq"></a>Runtime Function: <em>long fract</em> <strong>__fractusqsq</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqdq"></a>Runtime Function: <em>long long fract</em> <strong>__fractusqdq</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqha"></a>Runtime Function: <em>short accum</em> <strong>__fractusqha</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqsa"></a>Runtime Function: <em>accum</em> <strong>__fractusqsa</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqda"></a>Runtime Function: <em>long accum</em> <strong>__fractusqda</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqta"></a>Runtime Function: <em>long long accum</em> <strong>__fractusqta</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusquqq2"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractusquqq2</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusquhq2"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractusquhq2</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqudq2"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractusqudq2</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractusquha</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractusqusa</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractusquda</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractusquta</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqqi"></a>Runtime Function: <em>signed char</em> <strong>__fractusqqi</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqhi"></a>Runtime Function: <em>short</em> <strong>__fractusqhi</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqsi"></a>Runtime Function: <em>int</em> <strong>__fractusqsi</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqdi"></a>Runtime Function: <em>long</em> <strong>__fractusqdi</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqti"></a>Runtime Function: <em>long long</em> <strong>__fractusqti</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqsf"></a>Runtime Function: <em>float</em> <strong>__fractusqsf</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusqdf"></a>Runtime Function: <em>double</em> <strong>__fractusqdf</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqqq"></a>Runtime Function: <em>short fract</em> <strong>__fractudqqq</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqhq"></a>Runtime Function: <em>fract</em> <strong>__fractudqhq</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqsq"></a>Runtime Function: <em>long fract</em> <strong>__fractudqsq</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqdq"></a>Runtime Function: <em>long long fract</em> <strong>__fractudqdq</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqha"></a>Runtime Function: <em>short accum</em> <strong>__fractudqha</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqsa"></a>Runtime Function: <em>accum</em> <strong>__fractudqsa</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqda"></a>Runtime Function: <em>long accum</em> <strong>__fractudqda</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqta"></a>Runtime Function: <em>long long accum</em> <strong>__fractudqta</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudquqq2"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractudquqq2</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudquhq2"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractudquhq2</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqusq2"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractudqusq2</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractudquha</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractudqusa</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractudquda</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractudquta</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqqi"></a>Runtime Function: <em>signed char</em> <strong>__fractudqqi</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqhi"></a>Runtime Function: <em>short</em> <strong>__fractudqhi</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqsi"></a>Runtime Function: <em>int</em> <strong>__fractudqsi</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqdi"></a>Runtime Function: <em>long</em> <strong>__fractudqdi</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqti"></a>Runtime Function: <em>long long</em> <strong>__fractudqti</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqsf"></a>Runtime Function: <em>float</em> <strong>__fractudqsf</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudqdf"></a>Runtime Function: <em>double</em> <strong>__fractudqdf</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhaqq"></a>Runtime Function: <em>short fract</em> <strong>__fractuhaqq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhahq"></a>Runtime Function: <em>fract</em> <strong>__fractuhahq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhasq"></a>Runtime Function: <em>long fract</em> <strong>__fractuhasq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhadq"></a>Runtime Function: <em>long long fract</em> <strong>__fractuhadq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhaha"></a>Runtime Function: <em>short accum</em> <strong>__fractuhaha</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhasa"></a>Runtime Function: <em>accum</em> <strong>__fractuhasa</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhada"></a>Runtime Function: <em>long accum</em> <strong>__fractuhada</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhata"></a>Runtime Function: <em>long long accum</em> <strong>__fractuhata</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractuhauqq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractuhauhq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractuhausq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractuhaudq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhausa2"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractuhausa2</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhauda2"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractuhauda2</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhauta2"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractuhauta2</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhaqi"></a>Runtime Function: <em>signed char</em> <strong>__fractuhaqi</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhahi"></a>Runtime Function: <em>short</em> <strong>__fractuhahi</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhasi"></a>Runtime Function: <em>int</em> <strong>__fractuhasi</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhadi"></a>Runtime Function: <em>long</em> <strong>__fractuhadi</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhati"></a>Runtime Function: <em>long long</em> <strong>__fractuhati</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhasf"></a>Runtime Function: <em>float</em> <strong>__fractuhasf</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractuhadf"></a>Runtime Function: <em>double</em> <strong>__fractuhadf</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusaqq"></a>Runtime Function: <em>short fract</em> <strong>__fractusaqq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusahq"></a>Runtime Function: <em>fract</em> <strong>__fractusahq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusasq"></a>Runtime Function: <em>long fract</em> <strong>__fractusasq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusadq"></a>Runtime Function: <em>long long fract</em> <strong>__fractusadq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusaha"></a>Runtime Function: <em>short accum</em> <strong>__fractusaha</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusasa"></a>Runtime Function: <em>accum</em> <strong>__fractusasa</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusada"></a>Runtime Function: <em>long accum</em> <strong>__fractusada</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusata"></a>Runtime Function: <em>long long accum</em> <strong>__fractusata</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractusauqq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractusauhq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractusausq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractusaudq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusauha2"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractusauha2</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusauda2"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractusauda2</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusauta2"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractusauta2</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusaqi"></a>Runtime Function: <em>signed char</em> <strong>__fractusaqi</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusahi"></a>Runtime Function: <em>short</em> <strong>__fractusahi</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusasi"></a>Runtime Function: <em>int</em> <strong>__fractusasi</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusadi"></a>Runtime Function: <em>long</em> <strong>__fractusadi</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusati"></a>Runtime Function: <em>long long</em> <strong>__fractusati</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusasf"></a>Runtime Function: <em>float</em> <strong>__fractusasf</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractusadf"></a>Runtime Function: <em>double</em> <strong>__fractusadf</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudaqq"></a>Runtime Function: <em>short fract</em> <strong>__fractudaqq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudahq"></a>Runtime Function: <em>fract</em> <strong>__fractudahq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudasq"></a>Runtime Function: <em>long fract</em> <strong>__fractudasq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudadq"></a>Runtime Function: <em>long long fract</em> <strong>__fractudadq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudaha"></a>Runtime Function: <em>short accum</em> <strong>__fractudaha</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudasa"></a>Runtime Function: <em>accum</em> <strong>__fractudasa</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudada"></a>Runtime Function: <em>long accum</em> <strong>__fractudada</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudata"></a>Runtime Function: <em>long long accum</em> <strong>__fractudata</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractudauqq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractudauhq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractudausq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractudaudq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudauha2"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractudauha2</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudausa2"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractudausa2</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudauta2"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractudauta2</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudaqi"></a>Runtime Function: <em>signed char</em> <strong>__fractudaqi</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudahi"></a>Runtime Function: <em>short</em> <strong>__fractudahi</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudasi"></a>Runtime Function: <em>int</em> <strong>__fractudasi</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudadi"></a>Runtime Function: <em>long</em> <strong>__fractudadi</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudati"></a>Runtime Function: <em>long long</em> <strong>__fractudati</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudasf"></a>Runtime Function: <em>float</em> <strong>__fractudasf</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractudadf"></a>Runtime Function: <em>double</em> <strong>__fractudadf</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutaqq"></a>Runtime Function: <em>short fract</em> <strong>__fractutaqq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutahq"></a>Runtime Function: <em>fract</em> <strong>__fractutahq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutasq"></a>Runtime Function: <em>long fract</em> <strong>__fractutasq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutadq"></a>Runtime Function: <em>long long fract</em> <strong>__fractutadq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutaha"></a>Runtime Function: <em>short accum</em> <strong>__fractutaha</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutasa"></a>Runtime Function: <em>accum</em> <strong>__fractutasa</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutada"></a>Runtime Function: <em>long accum</em> <strong>__fractutada</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutata"></a>Runtime Function: <em>long long accum</em> <strong>__fractutata</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractutauqq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractutauhq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractutausq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractutaudq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutauha2"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractutauha2</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutausa2"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractutausa2</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutauda2"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractutauda2</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutaqi"></a>Runtime Function: <em>signed char</em> <strong>__fractutaqi</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutahi"></a>Runtime Function: <em>short</em> <strong>__fractutahi</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutasi"></a>Runtime Function: <em>int</em> <strong>__fractutasi</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutadi"></a>Runtime Function: <em>long</em> <strong>__fractutadi</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutati"></a>Runtime Function: <em>long long</em> <strong>__fractutati</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutasf"></a>Runtime Function: <em>float</em> <strong>__fractutasf</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractutadf"></a>Runtime Function: <em>double</em> <strong>__fractutadf</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiqq"></a>Runtime Function: <em>short fract</em> <strong>__fractqiqq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqihq"></a>Runtime Function: <em>fract</em> <strong>__fractqihq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqisq"></a>Runtime Function: <em>long fract</em> <strong>__fractqisq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqidq"></a>Runtime Function: <em>long long fract</em> <strong>__fractqidq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiha"></a>Runtime Function: <em>short accum</em> <strong>__fractqiha</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqisa"></a>Runtime Function: <em>accum</em> <strong>__fractqisa</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqida"></a>Runtime Function: <em>long accum</em> <strong>__fractqida</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqita"></a>Runtime Function: <em>long long accum</em> <strong>__fractqita</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractqiuqq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractqiuhq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractqiusq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractqiudq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractqiuha</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractqiusa</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractqiuda</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractqiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractqiuta</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiqq"></a>Runtime Function: <em>short fract</em> <strong>__fracthiqq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthihq"></a>Runtime Function: <em>fract</em> <strong>__fracthihq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthisq"></a>Runtime Function: <em>long fract</em> <strong>__fracthisq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthidq"></a>Runtime Function: <em>long long fract</em> <strong>__fracthidq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiha"></a>Runtime Function: <em>short accum</em> <strong>__fracthiha</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthisa"></a>Runtime Function: <em>accum</em> <strong>__fracthisa</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthida"></a>Runtime Function: <em>long accum</em> <strong>__fracthida</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthita"></a>Runtime Function: <em>long long accum</em> <strong>__fracthita</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fracthiuqq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fracthiuhq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fracthiusq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fracthiudq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fracthiuha</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fracthiusa</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fracthiuda</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracthiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fracthiuta</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiqq"></a>Runtime Function: <em>short fract</em> <strong>__fractsiqq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsihq"></a>Runtime Function: <em>fract</em> <strong>__fractsihq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsisq"></a>Runtime Function: <em>long fract</em> <strong>__fractsisq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsidq"></a>Runtime Function: <em>long long fract</em> <strong>__fractsidq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiha"></a>Runtime Function: <em>short accum</em> <strong>__fractsiha</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsisa"></a>Runtime Function: <em>accum</em> <strong>__fractsisa</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsida"></a>Runtime Function: <em>long accum</em> <strong>__fractsida</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsita"></a>Runtime Function: <em>long long accum</em> <strong>__fractsita</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractsiuqq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractsiuhq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractsiusq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractsiudq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractsiuha</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractsiusa</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractsiuda</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractsiuta</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiqq"></a>Runtime Function: <em>short fract</em> <strong>__fractdiqq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdihq"></a>Runtime Function: <em>fract</em> <strong>__fractdihq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdisq"></a>Runtime Function: <em>long fract</em> <strong>__fractdisq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdidq"></a>Runtime Function: <em>long long fract</em> <strong>__fractdidq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiha"></a>Runtime Function: <em>short accum</em> <strong>__fractdiha</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdisa"></a>Runtime Function: <em>accum</em> <strong>__fractdisa</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdida"></a>Runtime Function: <em>long accum</em> <strong>__fractdida</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdita"></a>Runtime Function: <em>long long accum</em> <strong>__fractdita</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractdiuqq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractdiuhq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractdiusq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractdiudq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractdiuha</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractdiusa</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractdiuda</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractdiuta</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiqq"></a>Runtime Function: <em>short fract</em> <strong>__fracttiqq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttihq"></a>Runtime Function: <em>fract</em> <strong>__fracttihq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttisq"></a>Runtime Function: <em>long fract</em> <strong>__fracttisq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttidq"></a>Runtime Function: <em>long long fract</em> <strong>__fracttidq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiha"></a>Runtime Function: <em>short accum</em> <strong>__fracttiha</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttisa"></a>Runtime Function: <em>accum</em> <strong>__fracttisa</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttida"></a>Runtime Function: <em>long accum</em> <strong>__fracttida</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttita"></a>Runtime Function: <em>long long accum</em> <strong>__fracttita</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fracttiuqq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fracttiuhq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fracttiusq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fracttiudq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fracttiuha</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fracttiusa</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fracttiuda</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffracttiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fracttiuta</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfqq"></a>Runtime Function: <em>short fract</em> <strong>__fractsfqq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfhq"></a>Runtime Function: <em>fract</em> <strong>__fractsfhq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfsq"></a>Runtime Function: <em>long fract</em> <strong>__fractsfsq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfdq"></a>Runtime Function: <em>long long fract</em> <strong>__fractsfdq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfha"></a>Runtime Function: <em>short accum</em> <strong>__fractsfha</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfsa"></a>Runtime Function: <em>accum</em> <strong>__fractsfsa</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfda"></a>Runtime Function: <em>long accum</em> <strong>__fractsfda</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfta"></a>Runtime Function: <em>long long accum</em> <strong>__fractsfta</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractsfuqq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractsfuhq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractsfusq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractsfudq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractsfuha</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractsfusa</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractsfuda</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractsfuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractsfuta</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfqq"></a>Runtime Function: <em>short fract</em> <strong>__fractdfqq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfhq"></a>Runtime Function: <em>fract</em> <strong>__fractdfhq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfsq"></a>Runtime Function: <em>long fract</em> <strong>__fractdfsq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfdq"></a>Runtime Function: <em>long long fract</em> <strong>__fractdfdq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfha"></a>Runtime Function: <em>short accum</em> <strong>__fractdfha</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfsa"></a>Runtime Function: <em>accum</em> <strong>__fractdfsa</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfda"></a>Runtime Function: <em>long accum</em> <strong>__fractdfda</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfta"></a>Runtime Function: <em>long long accum</em> <strong>__fractdfta</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractdfuqq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractdfuhq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractdfusq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractdfudq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractdfuha</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractdfusa</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractdfuda</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractdfuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractdfuta</strong> <em>(double <var>a</var>)</em></dt>
<dd><p>These functions convert from fractional and signed non-fractionals to
fractionals and signed non-fractionals, without saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fsatfractqqhq2"></a>Runtime Function: <em>fract</em> <strong>__satfractqqhq2</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqqsq2"></a>Runtime Function: <em>long fract</em> <strong>__satfractqqsq2</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqqdq2"></a>Runtime Function: <em>long long fract</em> <strong>__satfractqqdq2</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqqha"></a>Runtime Function: <em>short accum</em> <strong>__satfractqqha</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqqsa"></a>Runtime Function: <em>accum</em> <strong>__satfractqqsa</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqqda"></a>Runtime Function: <em>long accum</em> <strong>__satfractqqda</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqqta"></a>Runtime Function: <em>long long accum</em> <strong>__satfractqqta</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqquqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractqquqq</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqquhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractqquhq</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqqusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractqqusq</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqqudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractqqudq</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractqquha</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractqqusa</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractqquda</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractqquta</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqqq2"></a>Runtime Function: <em>short fract</em> <strong>__satfracthqqq2</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqsq2"></a>Runtime Function: <em>long fract</em> <strong>__satfracthqsq2</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqdq2"></a>Runtime Function: <em>long long fract</em> <strong>__satfracthqdq2</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqha"></a>Runtime Function: <em>short accum</em> <strong>__satfracthqha</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqsa"></a>Runtime Function: <em>accum</em> <strong>__satfracthqsa</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqda"></a>Runtime Function: <em>long accum</em> <strong>__satfracthqda</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqta"></a>Runtime Function: <em>long long accum</em> <strong>__satfracthqta</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthquqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfracthquqq</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthquhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfracthquhq</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfracthqusq</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfracthqudq</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfracthquha</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfracthqusa</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfracthquda</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfracthquta</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqqq2"></a>Runtime Function: <em>short fract</em> <strong>__satfractsqqq2</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqhq2"></a>Runtime Function: <em>fract</em> <strong>__satfractsqhq2</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqdq2"></a>Runtime Function: <em>long long fract</em> <strong>__satfractsqdq2</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqha"></a>Runtime Function: <em>short accum</em> <strong>__satfractsqha</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqsa"></a>Runtime Function: <em>accum</em> <strong>__satfractsqsa</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqda"></a>Runtime Function: <em>long accum</em> <strong>__satfractsqda</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqta"></a>Runtime Function: <em>long long accum</em> <strong>__satfractsqta</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsquqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractsquqq</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsquhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractsquhq</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractsqusq</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractsqudq</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractsquha</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractsqusa</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractsquda</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractsquta</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqqq2"></a>Runtime Function: <em>short fract</em> <strong>__satfractdqqq2</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqhq2"></a>Runtime Function: <em>fract</em> <strong>__satfractdqhq2</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqsq2"></a>Runtime Function: <em>long fract</em> <strong>__satfractdqsq2</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqha"></a>Runtime Function: <em>short accum</em> <strong>__satfractdqha</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqsa"></a>Runtime Function: <em>accum</em> <strong>__satfractdqsa</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqda"></a>Runtime Function: <em>long accum</em> <strong>__satfractdqda</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqta"></a>Runtime Function: <em>long long accum</em> <strong>__satfractdqta</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdquqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractdquqq</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdquhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractdquhq</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractdqusq</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractdqudq</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractdquha</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractdqusa</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractdquda</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractdquta</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthaqq"></a>Runtime Function: <em>short fract</em> <strong>__satfracthaqq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthahq"></a>Runtime Function: <em>fract</em> <strong>__satfracthahq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthasq"></a>Runtime Function: <em>long fract</em> <strong>__satfracthasq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthadq"></a>Runtime Function: <em>long long fract</em> <strong>__satfracthadq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthasa2"></a>Runtime Function: <em>accum</em> <strong>__satfracthasa2</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthada2"></a>Runtime Function: <em>long accum</em> <strong>__satfracthada2</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthata2"></a>Runtime Function: <em>long long accum</em> <strong>__satfracthata2</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfracthauqq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfracthauhq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfracthausq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfracthaudq</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthauha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfracthauha</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthausa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfracthausa</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthauda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfracthauda</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthauta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfracthauta</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsaqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractsaqq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsahq"></a>Runtime Function: <em>fract</em> <strong>__satfractsahq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsasq"></a>Runtime Function: <em>long fract</em> <strong>__satfractsasq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsadq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractsadq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsaha2"></a>Runtime Function: <em>short accum</em> <strong>__satfractsaha2</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsada2"></a>Runtime Function: <em>long accum</em> <strong>__satfractsada2</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsata2"></a>Runtime Function: <em>long long accum</em> <strong>__satfractsata2</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractsauqq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractsauhq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractsausq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractsaudq</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsauha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractsauha</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsausa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractsausa</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsauda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractsauda</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsauta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractsauta</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdaqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractdaqq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdahq"></a>Runtime Function: <em>fract</em> <strong>__satfractdahq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdasq"></a>Runtime Function: <em>long fract</em> <strong>__satfractdasq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdadq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractdadq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdaha2"></a>Runtime Function: <em>short accum</em> <strong>__satfractdaha2</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdasa2"></a>Runtime Function: <em>accum</em> <strong>__satfractdasa2</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdata2"></a>Runtime Function: <em>long long accum</em> <strong>__satfractdata2</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractdauqq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractdauhq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractdausq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractdaudq</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdauha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractdauha</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdausa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractdausa</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdauda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractdauda</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdauta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractdauta</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttaqq"></a>Runtime Function: <em>short fract</em> <strong>__satfracttaqq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttahq"></a>Runtime Function: <em>fract</em> <strong>__satfracttahq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttasq"></a>Runtime Function: <em>long fract</em> <strong>__satfracttasq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttadq"></a>Runtime Function: <em>long long fract</em> <strong>__satfracttadq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttaha2"></a>Runtime Function: <em>short accum</em> <strong>__satfracttaha2</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttasa2"></a>Runtime Function: <em>accum</em> <strong>__satfracttasa2</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttada2"></a>Runtime Function: <em>long accum</em> <strong>__satfracttada2</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfracttauqq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfracttauhq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfracttausq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfracttaudq</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttauha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfracttauha</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttausa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfracttausa</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttauda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfracttauda</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttauta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfracttauta</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractuqqqq</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqhq"></a>Runtime Function: <em>fract</em> <strong>__satfractuqqhq</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqsq"></a>Runtime Function: <em>long fract</em> <strong>__satfractuqqsq</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqdq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractuqqdq</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqha"></a>Runtime Function: <em>short accum</em> <strong>__satfractuqqha</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqsa"></a>Runtime Function: <em>accum</em> <strong>__satfractuqqsa</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqda"></a>Runtime Function: <em>long accum</em> <strong>__satfractuqqda</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqta"></a>Runtime Function: <em>long long accum</em> <strong>__satfractuqqta</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqquhq2"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractuqquhq2</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqusq2"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractuqqusq2</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqudq2"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractuqqudq2</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractuqquha</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractuqqusa</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractuqquda</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuqquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractuqquta</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractuhqqq</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqhq"></a>Runtime Function: <em>fract</em> <strong>__satfractuhqhq</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqsq"></a>Runtime Function: <em>long fract</em> <strong>__satfractuhqsq</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqdq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractuhqdq</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqha"></a>Runtime Function: <em>short accum</em> <strong>__satfractuhqha</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqsa"></a>Runtime Function: <em>accum</em> <strong>__satfractuhqsa</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqda"></a>Runtime Function: <em>long accum</em> <strong>__satfractuhqda</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqta"></a>Runtime Function: <em>long long accum</em> <strong>__satfractuhqta</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhquqq2"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractuhquqq2</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqusq2"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractuhqusq2</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqudq2"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractuhqudq2</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractuhquha</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractuhqusa</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractuhquda</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractuhquta</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractusqqq</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqhq"></a>Runtime Function: <em>fract</em> <strong>__satfractusqhq</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqsq"></a>Runtime Function: <em>long fract</em> <strong>__satfractusqsq</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqdq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractusqdq</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqha"></a>Runtime Function: <em>short accum</em> <strong>__satfractusqha</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqsa"></a>Runtime Function: <em>accum</em> <strong>__satfractusqsa</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqda"></a>Runtime Function: <em>long accum</em> <strong>__satfractusqda</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqta"></a>Runtime Function: <em>long long accum</em> <strong>__satfractusqta</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusquqq2"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractusquqq2</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusquhq2"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractusquhq2</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqudq2"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractusqudq2</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractusquha</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractusqusa</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractusquda</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractusquta</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractudqqq</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqhq"></a>Runtime Function: <em>fract</em> <strong>__satfractudqhq</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqsq"></a>Runtime Function: <em>long fract</em> <strong>__satfractudqsq</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqdq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractudqdq</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqha"></a>Runtime Function: <em>short accum</em> <strong>__satfractudqha</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqsa"></a>Runtime Function: <em>accum</em> <strong>__satfractudqsa</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqda"></a>Runtime Function: <em>long accum</em> <strong>__satfractudqda</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqta"></a>Runtime Function: <em>long long accum</em> <strong>__satfractudqta</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudquqq2"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractudquqq2</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudquhq2"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractudquhq2</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqusq2"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractudqusq2</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudquha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractudquha</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudqusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractudqusa</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudquda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractudquda</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudquta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractudquta</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhaqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractuhaqq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhahq"></a>Runtime Function: <em>fract</em> <strong>__satfractuhahq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhasq"></a>Runtime Function: <em>long fract</em> <strong>__satfractuhasq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhadq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractuhadq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhaha"></a>Runtime Function: <em>short accum</em> <strong>__satfractuhaha</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhasa"></a>Runtime Function: <em>accum</em> <strong>__satfractuhasa</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhada"></a>Runtime Function: <em>long accum</em> <strong>__satfractuhada</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhata"></a>Runtime Function: <em>long long accum</em> <strong>__satfractuhata</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractuhauqq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractuhauhq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractuhausq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractuhaudq</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhausa2"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractuhausa2</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhauda2"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractuhauda2</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractuhauta2"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractuhauta2</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusaqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractusaqq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusahq"></a>Runtime Function: <em>fract</em> <strong>__satfractusahq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusasq"></a>Runtime Function: <em>long fract</em> <strong>__satfractusasq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusadq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractusadq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusaha"></a>Runtime Function: <em>short accum</em> <strong>__satfractusaha</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusasa"></a>Runtime Function: <em>accum</em> <strong>__satfractusasa</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusada"></a>Runtime Function: <em>long accum</em> <strong>__satfractusada</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusata"></a>Runtime Function: <em>long long accum</em> <strong>__satfractusata</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractusauqq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractusauhq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractusausq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractusaudq</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusauha2"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractusauha2</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusauda2"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractusauda2</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractusauta2"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractusauta2</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudaqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractudaqq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudahq"></a>Runtime Function: <em>fract</em> <strong>__satfractudahq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudasq"></a>Runtime Function: <em>long fract</em> <strong>__satfractudasq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudadq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractudadq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudaha"></a>Runtime Function: <em>short accum</em> <strong>__satfractudaha</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudasa"></a>Runtime Function: <em>accum</em> <strong>__satfractudasa</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudada"></a>Runtime Function: <em>long accum</em> <strong>__satfractudada</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudata"></a>Runtime Function: <em>long long accum</em> <strong>__satfractudata</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractudauqq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractudauhq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractudausq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractudaudq</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudauha2"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractudauha2</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudausa2"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractudausa2</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractudauta2"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractudauta2</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutaqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractutaqq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutahq"></a>Runtime Function: <em>fract</em> <strong>__satfractutahq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutasq"></a>Runtime Function: <em>long fract</em> <strong>__satfractutasq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutadq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractutadq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutaha"></a>Runtime Function: <em>short accum</em> <strong>__satfractutaha</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutasa"></a>Runtime Function: <em>accum</em> <strong>__satfractutasa</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutada"></a>Runtime Function: <em>long accum</em> <strong>__satfractutada</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutata"></a>Runtime Function: <em>long long accum</em> <strong>__satfractutata</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutauqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractutauqq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutauhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractutauhq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutausq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractutausq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutaudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractutaudq</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutauha2"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractutauha2</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutausa2"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractutausa2</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractutauda2"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractutauda2</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractqiqq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqihq"></a>Runtime Function: <em>fract</em> <strong>__satfractqihq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqisq"></a>Runtime Function: <em>long fract</em> <strong>__satfractqisq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractqidq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiha"></a>Runtime Function: <em>short accum</em> <strong>__satfractqiha</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqisa"></a>Runtime Function: <em>accum</em> <strong>__satfractqisa</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqida"></a>Runtime Function: <em>long accum</em> <strong>__satfractqida</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqita"></a>Runtime Function: <em>long long accum</em> <strong>__satfractqita</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractqiuqq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractqiuhq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractqiusq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractqiudq</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractqiuha</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractqiusa</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractqiuda</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractqiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractqiuta</strong> <em>(signed char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfracthiqq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthihq"></a>Runtime Function: <em>fract</em> <strong>__satfracthihq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthisq"></a>Runtime Function: <em>long fract</em> <strong>__satfracthisq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfracthidq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiha"></a>Runtime Function: <em>short accum</em> <strong>__satfracthiha</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthisa"></a>Runtime Function: <em>accum</em> <strong>__satfracthisa</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthida"></a>Runtime Function: <em>long accum</em> <strong>__satfracthida</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthita"></a>Runtime Function: <em>long long accum</em> <strong>__satfracthita</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfracthiuqq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfracthiuhq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfracthiusq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfracthiudq</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfracthiuha</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfracthiusa</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfracthiuda</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracthiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfracthiuta</strong> <em>(short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractsiqq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsihq"></a>Runtime Function: <em>fract</em> <strong>__satfractsihq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsisq"></a>Runtime Function: <em>long fract</em> <strong>__satfractsisq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractsidq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiha"></a>Runtime Function: <em>short accum</em> <strong>__satfractsiha</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsisa"></a>Runtime Function: <em>accum</em> <strong>__satfractsisa</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsida"></a>Runtime Function: <em>long accum</em> <strong>__satfractsida</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsita"></a>Runtime Function: <em>long long accum</em> <strong>__satfractsita</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractsiuqq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractsiuhq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractsiusq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractsiudq</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractsiuha</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractsiusa</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractsiuda</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractsiuta</strong> <em>(int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractdiqq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdihq"></a>Runtime Function: <em>fract</em> <strong>__satfractdihq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdisq"></a>Runtime Function: <em>long fract</em> <strong>__satfractdisq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractdidq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiha"></a>Runtime Function: <em>short accum</em> <strong>__satfractdiha</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdisa"></a>Runtime Function: <em>accum</em> <strong>__satfractdisa</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdida"></a>Runtime Function: <em>long accum</em> <strong>__satfractdida</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdita"></a>Runtime Function: <em>long long accum</em> <strong>__satfractdita</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractdiuqq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractdiuhq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractdiusq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractdiudq</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractdiuha</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractdiusa</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractdiuda</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractdiuta</strong> <em>(long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfracttiqq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttihq"></a>Runtime Function: <em>fract</em> <strong>__satfracttihq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttisq"></a>Runtime Function: <em>long fract</em> <strong>__satfracttisq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfracttidq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiha"></a>Runtime Function: <em>short accum</em> <strong>__satfracttiha</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttisa"></a>Runtime Function: <em>accum</em> <strong>__satfracttisa</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttida"></a>Runtime Function: <em>long accum</em> <strong>__satfracttida</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttita"></a>Runtime Function: <em>long long accum</em> <strong>__satfracttita</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfracttiuqq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfracttiuhq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfracttiusq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfracttiudq</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfracttiuha</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfracttiusa</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfracttiuda</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfracttiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfracttiuta</strong> <em>(long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractsfqq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfhq"></a>Runtime Function: <em>fract</em> <strong>__satfractsfhq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfsq"></a>Runtime Function: <em>long fract</em> <strong>__satfractsfsq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfdq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractsfdq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfha"></a>Runtime Function: <em>short accum</em> <strong>__satfractsfha</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfsa"></a>Runtime Function: <em>accum</em> <strong>__satfractsfsa</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfda"></a>Runtime Function: <em>long accum</em> <strong>__satfractsfda</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfta"></a>Runtime Function: <em>long long accum</em> <strong>__satfractsfta</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractsfuqq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractsfuhq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractsfusq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractsfudq</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractsfuha</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractsfusa</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractsfuda</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractsfuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractsfuta</strong> <em>(float <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractdfqq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfhq"></a>Runtime Function: <em>fract</em> <strong>__satfractdfhq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfsq"></a>Runtime Function: <em>long fract</em> <strong>__satfractdfsq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfdq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractdfdq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfha"></a>Runtime Function: <em>short accum</em> <strong>__satfractdfha</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfsa"></a>Runtime Function: <em>accum</em> <strong>__satfractdfsa</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfda"></a>Runtime Function: <em>long accum</em> <strong>__satfractdfda</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfta"></a>Runtime Function: <em>long long accum</em> <strong>__satfractdfta</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractdfuqq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractdfuhq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractdfusq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractdfudq</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractdfuha</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractdfusa</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractdfuda</strong> <em>(double <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractdfuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractdfuta</strong> <em>(double <var>a</var>)</em></dt>
<dd><p>The functions convert from fractional and signed non-fractionals to
fractionals, with saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005ffractunsqqqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsqqqi</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqqhi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsqqhi</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqqsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsqqsi</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqqdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsqqdi</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqqti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsqqti</strong> <em>(short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshqqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunshqqi</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshqhi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunshqhi</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshqsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunshqsi</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshqdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunshqdi</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshqti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunshqti</strong> <em>(fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssqqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunssqqi</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssqhi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunssqhi</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssqsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunssqsi</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssqdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunssqdi</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssqti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunssqti</strong> <em>(long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdqqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsdqqi</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdqhi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsdqhi</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdqsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsdqsi</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdqdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsdqdi</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdqti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsdqti</strong> <em>(long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshaqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunshaqi</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshahi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunshahi</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshasi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunshasi</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshadi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunshadi</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshati"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunshati</strong> <em>(short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssaqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunssaqi</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssahi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunssahi</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssasi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunssasi</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssadi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunssadi</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssati"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunssati</strong> <em>(accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdaqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsdaqi</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdahi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsdahi</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdasi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsdasi</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdadi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsdadi</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdati"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsdati</strong> <em>(long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstaqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunstaqi</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstahi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunstahi</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstasi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunstasi</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstadi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunstadi</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstati"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunstati</strong> <em>(long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuqqqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsuqqqi</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuqqhi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsuqqhi</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuqqsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsuqqsi</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuqqdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsuqqdi</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuqqti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsuqqti</strong> <em>(unsigned short fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhqqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsuhqqi</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhqhi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsuhqhi</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhqsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsuhqsi</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhqdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsuhqdi</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhqti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsuhqti</strong> <em>(unsigned fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusqqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsusqqi</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusqhi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsusqhi</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusqsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsusqsi</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusqdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsusqdi</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusqti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsusqti</strong> <em>(unsigned long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudqqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsudqqi</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudqhi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsudqhi</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudqsi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsudqsi</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudqdi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsudqdi</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudqti"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsudqti</strong> <em>(unsigned long long fract <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhaqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsuhaqi</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhahi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsuhahi</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhasi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsuhasi</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhadi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsuhadi</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsuhati"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsuhati</strong> <em>(unsigned short accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusaqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsusaqi</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusahi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsusahi</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusasi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsusasi</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusadi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsusadi</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsusati"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsusati</strong> <em>(unsigned accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudaqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsudaqi</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudahi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsudahi</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudasi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsudasi</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudadi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsudadi</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsudati"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsudati</strong> <em>(unsigned long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsutaqi"></a>Runtime Function: <em>unsigned char</em> <strong>__fractunsutaqi</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsutahi"></a>Runtime Function: <em>unsigned short</em> <strong>__fractunsutahi</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsutasi"></a>Runtime Function: <em>unsigned int</em> <strong>__fractunsutasi</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsutadi"></a>Runtime Function: <em>unsigned long</em> <strong>__fractunsutadi</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsutati"></a>Runtime Function: <em>unsigned long long</em> <strong>__fractunsutati</strong> <em>(unsigned long long accum <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiqq"></a>Runtime Function: <em>short fract</em> <strong>__fractunsqiqq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqihq"></a>Runtime Function: <em>fract</em> <strong>__fractunsqihq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqisq"></a>Runtime Function: <em>long fract</em> <strong>__fractunsqisq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqidq"></a>Runtime Function: <em>long long fract</em> <strong>__fractunsqidq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiha"></a>Runtime Function: <em>short accum</em> <strong>__fractunsqiha</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqisa"></a>Runtime Function: <em>accum</em> <strong>__fractunsqisa</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqida"></a>Runtime Function: <em>long accum</em> <strong>__fractunsqida</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqita"></a>Runtime Function: <em>long long accum</em> <strong>__fractunsqita</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractunsqiuqq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractunsqiuhq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractunsqiusq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractunsqiudq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractunsqiuha</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractunsqiusa</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractunsqiuda</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsqiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractunsqiuta</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiqq"></a>Runtime Function: <em>short fract</em> <strong>__fractunshiqq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshihq"></a>Runtime Function: <em>fract</em> <strong>__fractunshihq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshisq"></a>Runtime Function: <em>long fract</em> <strong>__fractunshisq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshidq"></a>Runtime Function: <em>long long fract</em> <strong>__fractunshidq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiha"></a>Runtime Function: <em>short accum</em> <strong>__fractunshiha</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshisa"></a>Runtime Function: <em>accum</em> <strong>__fractunshisa</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshida"></a>Runtime Function: <em>long accum</em> <strong>__fractunshida</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshita"></a>Runtime Function: <em>long long accum</em> <strong>__fractunshita</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractunshiuqq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractunshiuhq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractunshiusq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractunshiudq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractunshiuha</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractunshiusa</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractunshiuda</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunshiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractunshiuta</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiqq"></a>Runtime Function: <em>short fract</em> <strong>__fractunssiqq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssihq"></a>Runtime Function: <em>fract</em> <strong>__fractunssihq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssisq"></a>Runtime Function: <em>long fract</em> <strong>__fractunssisq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssidq"></a>Runtime Function: <em>long long fract</em> <strong>__fractunssidq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiha"></a>Runtime Function: <em>short accum</em> <strong>__fractunssiha</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssisa"></a>Runtime Function: <em>accum</em> <strong>__fractunssisa</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssida"></a>Runtime Function: <em>long accum</em> <strong>__fractunssida</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssita"></a>Runtime Function: <em>long long accum</em> <strong>__fractunssita</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractunssiuqq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractunssiuhq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractunssiusq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractunssiudq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractunssiuha</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractunssiusa</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractunssiuda</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunssiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractunssiuta</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiqq"></a>Runtime Function: <em>short fract</em> <strong>__fractunsdiqq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdihq"></a>Runtime Function: <em>fract</em> <strong>__fractunsdihq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdisq"></a>Runtime Function: <em>long fract</em> <strong>__fractunsdisq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdidq"></a>Runtime Function: <em>long long fract</em> <strong>__fractunsdidq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiha"></a>Runtime Function: <em>short accum</em> <strong>__fractunsdiha</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdisa"></a>Runtime Function: <em>accum</em> <strong>__fractunsdisa</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdida"></a>Runtime Function: <em>long accum</em> <strong>__fractunsdida</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdita"></a>Runtime Function: <em>long long accum</em> <strong>__fractunsdita</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractunsdiuqq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractunsdiuhq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractunsdiusq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractunsdiudq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractunsdiuha</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractunsdiusa</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractunsdiuda</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunsdiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractunsdiuta</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiqq"></a>Runtime Function: <em>short fract</em> <strong>__fractunstiqq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstihq"></a>Runtime Function: <em>fract</em> <strong>__fractunstihq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstisq"></a>Runtime Function: <em>long fract</em> <strong>__fractunstisq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstidq"></a>Runtime Function: <em>long long fract</em> <strong>__fractunstidq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiha"></a>Runtime Function: <em>short accum</em> <strong>__fractunstiha</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstisa"></a>Runtime Function: <em>accum</em> <strong>__fractunstisa</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstida"></a>Runtime Function: <em>long accum</em> <strong>__fractunstida</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstita"></a>Runtime Function: <em>long long accum</em> <strong>__fractunstita</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__fractunstiuqq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__fractunstiuhq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__fractunstiusq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__fractunstiudq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__fractunstiuha</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__fractunstiusa</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__fractunstiuda</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005ffractunstiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__fractunstiuta</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dd><p>These functions convert from fractionals to unsigned non-fractionals;
and from unsigned non-fractionals to fractionals, without saturation.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fsatfractunsqiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractunsqiqq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqihq"></a>Runtime Function: <em>fract</em> <strong>__satfractunsqihq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqisq"></a>Runtime Function: <em>long fract</em> <strong>__satfractunsqisq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractunsqidq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqiha"></a>Runtime Function: <em>short accum</em> <strong>__satfractunsqiha</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqisa"></a>Runtime Function: <em>accum</em> <strong>__satfractunsqisa</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqida"></a>Runtime Function: <em>long accum</em> <strong>__satfractunsqida</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqita"></a>Runtime Function: <em>long long accum</em> <strong>__satfractunsqita</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractunsqiuqq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractunsqiuhq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractunsqiusq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractunsqiudq</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractunsqiuha</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractunsqiusa</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractunsqiuda</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsqiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractunsqiuta</strong> <em>(unsigned char <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractunshiqq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshihq"></a>Runtime Function: <em>fract</em> <strong>__satfractunshihq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshisq"></a>Runtime Function: <em>long fract</em> <strong>__satfractunshisq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractunshidq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiha"></a>Runtime Function: <em>short accum</em> <strong>__satfractunshiha</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshisa"></a>Runtime Function: <em>accum</em> <strong>__satfractunshisa</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshida"></a>Runtime Function: <em>long accum</em> <strong>__satfractunshida</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshita"></a>Runtime Function: <em>long long accum</em> <strong>__satfractunshita</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractunshiuqq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractunshiuhq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractunshiusq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractunshiudq</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractunshiuha</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractunshiusa</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractunshiuda</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunshiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractunshiuta</strong> <em>(unsigned short <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractunssiqq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssihq"></a>Runtime Function: <em>fract</em> <strong>__satfractunssihq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssisq"></a>Runtime Function: <em>long fract</em> <strong>__satfractunssisq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractunssidq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiha"></a>Runtime Function: <em>short accum</em> <strong>__satfractunssiha</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssisa"></a>Runtime Function: <em>accum</em> <strong>__satfractunssisa</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssida"></a>Runtime Function: <em>long accum</em> <strong>__satfractunssida</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssita"></a>Runtime Function: <em>long long accum</em> <strong>__satfractunssita</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractunssiuqq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractunssiuhq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractunssiusq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractunssiudq</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractunssiuha</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractunssiusa</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractunssiuda</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunssiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractunssiuta</strong> <em>(unsigned int <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractunsdiqq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdihq"></a>Runtime Function: <em>fract</em> <strong>__satfractunsdihq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdisq"></a>Runtime Function: <em>long fract</em> <strong>__satfractunsdisq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractunsdidq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiha"></a>Runtime Function: <em>short accum</em> <strong>__satfractunsdiha</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdisa"></a>Runtime Function: <em>accum</em> <strong>__satfractunsdisa</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdida"></a>Runtime Function: <em>long accum</em> <strong>__satfractunsdida</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdita"></a>Runtime Function: <em>long long accum</em> <strong>__satfractunsdita</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractunsdiuqq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractunsdiuhq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractunsdiusq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractunsdiudq</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractunsdiuha</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractunsdiusa</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractunsdiuda</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunsdiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractunsdiuta</strong> <em>(unsigned long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiqq"></a>Runtime Function: <em>short fract</em> <strong>__satfractunstiqq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstihq"></a>Runtime Function: <em>fract</em> <strong>__satfractunstihq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstisq"></a>Runtime Function: <em>long fract</em> <strong>__satfractunstisq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstidq"></a>Runtime Function: <em>long long fract</em> <strong>__satfractunstidq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiha"></a>Runtime Function: <em>short accum</em> <strong>__satfractunstiha</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstisa"></a>Runtime Function: <em>accum</em> <strong>__satfractunstisa</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstida"></a>Runtime Function: <em>long accum</em> <strong>__satfractunstida</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstita"></a>Runtime Function: <em>long long accum</em> <strong>__satfractunstita</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiuqq"></a>Runtime Function: <em>unsigned short fract</em> <strong>__satfractunstiuqq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiuhq"></a>Runtime Function: <em>unsigned fract</em> <strong>__satfractunstiuhq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiusq"></a>Runtime Function: <em>unsigned long fract</em> <strong>__satfractunstiusq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiudq"></a>Runtime Function: <em>unsigned long long fract</em> <strong>__satfractunstiudq</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiuha"></a>Runtime Function: <em>unsigned short accum</em> <strong>__satfractunstiuha</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiusa"></a>Runtime Function: <em>unsigned accum</em> <strong>__satfractunstiusa</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiuda"></a>Runtime Function: <em>unsigned long accum</em> <strong>__satfractunstiuda</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dt><a name="index-_005f_005fsatfractunstiuta"></a>Runtime Function: <em>unsigned long long accum</em> <strong>__satfractunstiuta</strong> <em>(unsigned long long <var>a</var>)</em></dt>
<dd><p>These functions convert from unsigned non-fractionals to fractionals,
with saturation.
</p></dd></dl>

<hr>
<a name="Exception-handling-routines"></a>
<div class="header">
<p>
Next: <a href="#Miscellaneous-routines" accesskey="n" rel="next">Miscellaneous routines</a>, Previous: <a href="#Fixed_002dpoint-fractional-library-routines" accesskey="p" rel="prev">Fixed-point fractional library routines</a>, Up: <a href="#Libgcc" accesskey="u" rel="up">Libgcc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Language_002dindependent-routines-for-exception-handling"></a>
<h3 class="section">4.5 Language-independent routines for exception handling</h3>

<p>document me!
</p>
<div class="smallexample">
<pre class="smallexample">  _Unwind_DeleteException
  _Unwind_Find_FDE
  _Unwind_ForcedUnwind
  _Unwind_GetGR
  _Unwind_GetIP
  _Unwind_GetLanguageSpecificData
  _Unwind_GetRegionStart
  _Unwind_GetTextRelBase
  _Unwind_GetDataRelBase
  _Unwind_RaiseException
  _Unwind_Resume
  _Unwind_SetGR
  _Unwind_SetIP
  _Unwind_FindEnclosingFunction
  _Unwind_SjLj_Register
  _Unwind_SjLj_Unregister
  _Unwind_SjLj_RaiseException
  _Unwind_SjLj_ForcedUnwind
  _Unwind_SjLj_Resume
  __deregister_frame
  __deregister_frame_info
  __deregister_frame_info_bases
  __register_frame
  __register_frame_info
  __register_frame_info_bases
  __register_frame_info_table
  __register_frame_info_table_bases
  __register_frame_table
</pre></div>

<hr>
<a name="Miscellaneous-routines"></a>
<div class="header">
<p>
Previous: <a href="#Exception-handling-routines" accesskey="p" rel="prev">Exception handling routines</a>, Up: <a href="#Libgcc" accesskey="u" rel="up">Libgcc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Miscellaneous-runtime-library-routines"></a>
<h3 class="section">4.6 Miscellaneous runtime library routines</h3>

<a name="Cache-control-functions"></a>
<h4 class="subsection">4.6.1 Cache control functions</h4>
<dl>
<dt><a name="index-_005f_005fclear_005fcache"></a>Runtime Function: <em>void</em> <strong>__clear_cache</strong> <em>(char *<var>beg</var>, char *<var>end</var>)</em></dt>
<dd><p>This function clears the instruction cache between <var>beg</var> and <var>end</var>.
</p></dd></dl>

<a name="Split-stack-functions-and-variables"></a>
<h4 class="subsection">4.6.2 Split stack functions and variables</h4>
<dl>
<dt><a name="index-_005f_005fsplitstack_005ffind"></a>Runtime Function: <em>void *</em> <strong>__splitstack_find</strong> <em>(void *<var>segment_arg</var>, void *<var>sp</var>, size_t <var>len</var>, void **<var>next_segment</var>, void **<var>next_sp</var>, void **<var>initial_sp</var>)</em></dt>
<dd><p>When using <samp>-fsplit-stack</samp>, this call may be used to iterate
over the stack segments.  It may be called like this:
</p><div class="smallexample">
<pre class="smallexample">  void *next_segment = NULL;
  void *next_sp = NULL;
  void *initial_sp = NULL;
  void *stack;
  size_t stack_size;
  while ((stack = __splitstack_find (next_segment, next_sp,
                                     &amp;stack_size, &amp;next_segment,
                                     &amp;next_sp, &amp;initial_sp))
         != NULL)
    {
      /* Stack segment starts at stack and is
         stack_size bytes long.  */
    }
</pre></div>

<p>There is no way to iterate over the stack segments of a different
thread.  However, what is permitted is for one thread to call this
with the <var>segment_arg</var> and <var>sp</var> arguments NULL, to pass
<var>next_segment</var>, <var>next_sp</var>, and <var>initial_sp</var> to a different
thread, and then to suspend one way or another.  A different thread
may run the subsequent <code>__splitstack_find</code> iterations.  Of
course, this will only work if the first thread is suspended while the
second thread is calling <code>__splitstack_find</code>.  If not, the second
thread could be looking at the stack while it is changing, and
anything could happen.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fmorestack_005fsegments"></a>Variable: <strong>__morestack_segments</strong></dt>
<dt><a name="index-_005f_005fmorestack_005fcurrent_005fsegment"></a>Variable: <strong>__morestack_current_segment</strong></dt>
<dt><a name="index-_005f_005fmorestack_005finitial_005fsp"></a>Variable: <strong>__morestack_initial_sp</strong></dt>
<dd><p>Internal variables used by the <samp>-fsplit-stack</samp> implementation.
</p></dd></dl>

<hr>
<a name="Languages"></a>
<div class="header">
<p>
Next: <a href="#Source-Tree" accesskey="n" rel="next">Source Tree</a>, Previous: <a href="#Libgcc" accesskey="p" rel="prev">Libgcc</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Language-Front-Ends-in-GCC"></a>
<h2 class="chapter">5 Language Front Ends in GCC</h2>

<p>The interface to front ends for languages in GCC, and in particular
the <code>tree</code> structure (see <a href="#GENERIC">GENERIC</a>), was initially designed for
C, and many aspects of it are still somewhat biased towards C and
C-like languages.  It is, however, reasonably well suited to other
procedural languages, and front ends for many such languages have been
written for GCC.
</p>
<p>Writing a compiler as a front end for GCC, rather than compiling
directly to assembler or generating C code which is then compiled by
GCC, has several advantages:
</p>
<ul>
<li> GCC front ends benefit from the support for many different
target machines already present in GCC.
</li><li> GCC front ends benefit from all the optimizations in GCC.  Some
of these, such as alias analysis, may work better when GCC is
compiling directly from source code then when it is compiling from
generated C code.
</li><li> Better debugging information is generated when compiling
directly from source code than when going via intermediate generated C
code.
</li></ul>

<p>Because of the advantages of writing a compiler as a GCC front end,
GCC front ends have also been created for languages very different
from those for which GCC was designed, such as the declarative
logic/functional language Mercury.  For these reasons, it may also be
useful to implement compilers created for specialized purposes (for
example, as part of a research project) as GCC front ends.
</p>
<hr>
<a name="Source-Tree"></a>
<div class="header">
<p>
Next: <a href="#Testsuites" accesskey="n" rel="next">Testsuites</a>, Previous: <a href="#Languages" accesskey="p" rel="prev">Languages</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Source-Tree-Structure-and-Build-System"></a>
<h2 class="chapter">6 Source Tree Structure and Build System</h2>

<p>This chapter describes the structure of the GCC source tree, and how
GCC is built.  The user documentation for building and installing GCC
is in a separate manual (<a href="http://gcc.gnu.org/install/">http://gcc.gnu.org/install/</a>), with
which it is presumed that you are familiar.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Configure-Terms" accesskey="1">Configure Terms</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Configuration terminology and history.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Top-Level" accesskey="2">Top Level</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The top level source directory.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#gcc-Directory" accesskey="3">gcc Directory</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The <samp>gcc</samp> subdirectory.
</td></tr>
</table>


<hr>
<a name="Configure-Terms"></a>
<div class="header">
<p>
Next: <a href="#Top-Level" accesskey="n" rel="next">Top Level</a>, Up: <a href="#Source-Tree" accesskey="u" rel="up">Source Tree</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Configure-Terms-and-History"></a>
<h3 class="section">6.1 Configure Terms and History</h3>
<a name="index-configure-terms"></a>
<a name="index-canadian"></a>

<p>The configure and build process has a long and colorful history, and can
be confusing to anyone who doesn&rsquo;t know why things are the way they are.
While there are other documents which describe the configuration process
in detail, here are a few things that everyone working on GCC should
know.
</p>
<p>There are three system names that the build knows about: the machine you
are building on (<em>build</em>), the machine that you are building for
(<em>host</em>), and the machine that GCC will produce code for
(<em>target</em>).  When you configure GCC, you specify these with
<samp>--build=</samp>, <samp>--host=</samp>, and <samp>--target=</samp>.
</p>
<p>Specifying the host without specifying the build should be avoided, as
<code>configure</code> may (and once did) assume that the host you specify
is also the build, which may not be true.
</p>
<p>If build, host, and target are all the same, this is called a
<em>native</em>.  If build and host are the same but target is different,
this is called a <em>cross</em>.  If build, host, and target are all
different this is called a <em>canadian</em> (for obscure reasons dealing
with Canada&rsquo;s political party and the background of the person working
on the build at that time).  If host and target are the same, but build
is different, you are using a cross-compiler to build a native for a
different system.  Some people call this a <em>host-x-host</em>,
<em>crossed native</em>, or <em>cross-built native</em>.  If build and target
are the same, but host is different, you are using a cross compiler to
build a cross compiler that produces code for the machine you&rsquo;re
building on.  This is rare, so there is no common way of describing it.
There is a proposal to call this a <em>crossback</em>.
</p>
<p>If build and host are the same, the GCC you are building will also be
used to build the target libraries (like <code>libstdc++</code>).  If build and host
are different, you must have already built and installed a cross
compiler that will be used to build the target libraries (if you
configured with <samp>--target=foo-bar</samp>, this compiler will be called
<code>foo-bar-gcc</code>).
</p>
<p>In the case of target libraries, the machine you&rsquo;re building for is the
machine you specified with <samp>--target</samp>.  So, build is the machine
you&rsquo;re building on (no change there), host is the machine you&rsquo;re
building for (the target libraries are built for the target, so host is
the target you specified), and target doesn&rsquo;t apply (because you&rsquo;re not
building a compiler, you&rsquo;re building libraries).  The configure/make
process will adjust these variables as needed.  It also sets
<code>$with_cross_host</code> to the original <samp>--host</samp> value in case you
need it.
</p>
<p>The <code>libiberty</code> support library is built up to three times: once
for the host, once for the target (even if they are the same), and once
for the build if build and host are different.  This allows it to be
used by all programs which are generated in the course of the build
process.
</p>
<hr>
<a name="Top-Level"></a>
<div class="header">
<p>
Next: <a href="#gcc-Directory" accesskey="n" rel="next">gcc Directory</a>, Previous: <a href="#Configure-Terms" accesskey="p" rel="prev">Configure Terms</a>, Up: <a href="#Source-Tree" accesskey="u" rel="up">Source Tree</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Top-Level-Source-Directory"></a>
<h3 class="section">6.2 Top Level Source Directory</h3>

<p>The top level source directory in a GCC distribution contains several
files and directories that are shared with other software
distributions such as that of GNU Binutils.  It also contains several
subdirectories that contain parts of GCC and its runtime libraries:
</p>
<dl compact="compact">
<dt><samp>boehm-gc</samp></dt>
<dd><p>The Boehm conservative garbage collector, used as part of the Java
runtime library.
</p>
</dd>
<dt><samp>config</samp></dt>
<dd><p>Autoconf macros and Makefile fragments used throughout the tree.
</p>
</dd>
<dt><samp>contrib</samp></dt>
<dd><p>Contributed scripts that may be found useful in conjunction with GCC.
One of these, <samp>contrib/texi2pod.pl</samp>, is used to generate man
pages from Texinfo manuals as part of the GCC build process.
</p>
</dd>
<dt><samp>fixincludes</samp></dt>
<dd><p>The support for fixing system headers to work with GCC.  See
<samp>fixincludes/README</samp> for more information.  The headers fixed by
this mechanism are installed in <samp><var>libsubdir</var>/include-fixed</samp>.
Along with those headers, <samp>README-fixinc</samp> is also installed, as
<samp><var>libsubdir</var>/include-fixed/README</samp>.
</p>
</dd>
<dt><samp>gcc</samp></dt>
<dd><p>The main sources of GCC itself (except for runtime libraries),
including optimizers, support for different target architectures,
language front ends, and testsuites.  See <a href="#gcc-Directory">The
<samp>gcc</samp> Subdirectory</a>, for details.
</p>
</dd>
<dt><samp>gnattools</samp></dt>
<dd><p>Support tools for GNAT.
</p>
</dd>
<dt><samp>include</samp></dt>
<dd><p>Headers for the <code>libiberty</code> library.
</p>
</dd>
<dt><samp>intl</samp></dt>
<dd><p>GNU <code>libintl</code>, from GNU <code>gettext</code>, for systems which do not
include it in <code>libc</code>.
</p>
</dd>
<dt><samp>libada</samp></dt>
<dd><p>The Ada runtime library.
</p>
</dd>
<dt><samp>libatomic</samp></dt>
<dd><p>The runtime support library for atomic operations (e.g. for <code>__sync</code>
and <code>__atomic</code>).
</p>
</dd>
<dt><samp>libcpp</samp></dt>
<dd><p>The C preprocessor library.
</p>
</dd>
<dt><samp>libdecnumber</samp></dt>
<dd><p>The Decimal Float support library.
</p>
</dd>
<dt><samp>libffi</samp></dt>
<dd><p>The <code>libffi</code> library, used as part of the Java runtime library.
</p>
</dd>
<dt><samp>libgcc</samp></dt>
<dd><p>The GCC runtime library.
</p>
</dd>
<dt><samp>libgfortran</samp></dt>
<dd><p>The Fortran runtime library.
</p>
</dd>
<dt><samp>libgo</samp></dt>
<dd><p>The Go runtime library.  The bulk of this library is mirrored from the
<a href="http://code.google.com/p/go/">master Go repository</a>.
</p>
</dd>
<dt><samp>libgomp</samp></dt>
<dd><p>The GNU OpenMP runtime library.
</p>
</dd>
<dt><samp>libiberty</samp></dt>
<dd><p>The <code>libiberty</code> library, used for portability and for some
generally useful data structures and algorithms.  See <a href="http://gcc.gnu.org/onlinedocs/libiberty/index.html#Top">Introduction</a> in <cite><small>GNU</small> libiberty</cite>, for more information
about this library.
</p>
</dd>
<dt><samp>libitm</samp></dt>
<dd><p>The runtime support library for transactional memory.
</p>
</dd>
<dt><samp>libjava</samp></dt>
<dd><p>The Java runtime library.
</p>
</dd>
<dt><samp>libmudflap</samp></dt>
<dd><p>The <code>libmudflap</code> library, used for instrumenting pointer and array
dereferencing operations.
</p>
</dd>
<dt><samp>libobjc</samp></dt>
<dd><p>The Objective-C and Objective-C++ runtime library.
</p>
</dd>
<dt><samp>libquadmath</samp></dt>
<dd><p>The runtime support library for quad-precision math operations.
</p>
</dd>
<dt><samp>libphobos</samp></dt>
<dd><p>The D standard runtime library.
</p>
</dd>
<dt><samp>libssp</samp></dt>
<dd><p>The Stack protector runtime library.
</p>
</dd>
<dt><samp>libstdc++-v3</samp></dt>
<dd><p>The C++ runtime library.
</p>
</dd>
<dt><samp>lto-plugin</samp></dt>
<dd><p>Plugin used by <code>gold</code> if link-time optimizations are enabled.
</p>
</dd>
<dt><samp>maintainer-scripts</samp></dt>
<dd><p>Scripts used by the <code>gccadmin</code> account on <code>gcc.gnu.org</code>.
</p>
</dd>
<dt><samp>zlib</samp></dt>
<dd><p>The <code>zlib</code> compression library, used by the Java front end, as
part of the Java runtime library, and for compressing and uncompressing
GCC&rsquo;s intermediate language in LTO object files.
</p></dd>
</dl>

<p>The build system in the top level directory, including how recursion
into subdirectories works and how building runtime libraries for
multilibs is handled, is documented in a separate manual, included
with GNU Binutils.  See <a href="configure.html#Top">GNU configure and build system</a> in <cite>The GNU configure and build system</cite>, for details.
</p>
<hr>
<a name="gcc-Directory"></a>
<div class="header">
<p>
Previous: <a href="#Top-Level" accesskey="p" rel="prev">Top Level</a>, Up: <a href="#Source-Tree" accesskey="u" rel="up">Source Tree</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-gcc-Subdirectory"></a>
<h3 class="section">6.3 The <samp>gcc</samp> Subdirectory</h3>

<p>The <samp>gcc</samp> directory contains many files that are part of the C
sources of GCC, other files used as part of the configuration and
build process, and subdirectories including documentation and a
testsuite.  The files that are sources of GCC are documented in a
separate chapter.  See <a href="#Passes">Passes and Files of the Compiler</a>.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Subdirectories" accesskey="1">Subdirectories</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Subdirectories of <samp>gcc</samp>.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Configuration" accesskey="2">Configuration</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The configuration process, and the files it uses.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Build" accesskey="3">Build</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The build system in the <samp>gcc</samp> directory.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Makefile" accesskey="4">Makefile</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Targets in <samp>gcc/Makefile</samp>.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Library-Files" accesskey="5">Library Files</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Library source files and headers under <samp>gcc/</samp>.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Headers" accesskey="6">Headers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Headers installed by GCC.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Documentation" accesskey="7">Documentation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Building documentation in GCC.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Front-End" accesskey="8">Front End</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Anatomy of a language front end.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Back-End" accesskey="9">Back End</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Anatomy of a target back end.
</td></tr>
</table>

<hr>
<a name="Subdirectories"></a>
<div class="header">
<p>
Next: <a href="#Configuration" accesskey="n" rel="next">Configuration</a>, Up: <a href="#gcc-Directory" accesskey="u" rel="up">gcc Directory</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Subdirectories-of-gcc"></a>
<h4 class="subsection">6.3.1 Subdirectories of <samp>gcc</samp></h4>

<p>The <samp>gcc</samp> directory contains the following subdirectories:
</p>
<dl compact="compact">
<dt><samp><var>language</var></samp></dt>
<dd><p>Subdirectories for various languages.  Directories containing a file
<samp>config-lang.in</samp> are language subdirectories.  The contents of
the subdirectories <samp>c</samp> (for C), <samp>cp</samp> (for C++),
<samp>objc</samp> (for Objective-C), <samp>objcp</samp> (for Objective-C++),
and <samp>lto</samp> (for LTO) are documented in this
manual (see <a href="#Passes">Passes and Files of the Compiler</a>);
those for other languages are not.  See <a href="#Front-End">Anatomy of a Language Front End</a>, for details of the files in these
directories.
</p>
</dd>
<dt><samp>common</samp></dt>
<dd><p>Source files shared between the compiler drivers (such as
<code>gcc</code>) and the compilers proper (such as <samp>cc1</samp>).  If an
architecture defines target hooks shared between those places, it also
has a subdirectory in <samp>common/config</samp>.  See <a href="#Target-Structure">Target Structure</a>.
</p>
</dd>
<dt><samp>config</samp></dt>
<dd><p>Configuration files for supported architectures and operating
systems.  See <a href="#Back-End">Anatomy of a Target Back End</a>, for
details of the files in this directory.
</p>
</dd>
<dt><samp>doc</samp></dt>
<dd><p>Texinfo documentation for GCC, together with automatically generated
man pages and support for converting the installation manual to
HTML.  See <a href="#Documentation">Documentation</a>.
</p>
</dd>
<dt><samp>ginclude</samp></dt>
<dd><p>System headers installed by GCC, mainly those required by the C
standard of freestanding implementations.  See <a href="#Headers">Headers
Installed by GCC</a>, for details of when these and other headers are
installed.
</p>
</dd>
<dt><samp>po</samp></dt>
<dd><p>Message catalogs with translations of messages produced by GCC into
various languages, <samp><var>language</var>.po</samp>.  This directory also
contains <samp>gcc.pot</samp>, the template for these message catalogues,
<samp>exgettext</samp>, a wrapper around <code>gettext</code> to extract the
messages from the GCC sources and create <samp>gcc.pot</samp>, which is run
by &lsquo;<samp>make gcc.pot</samp>&rsquo;, and <samp>EXCLUDES</samp>, a list of files from
which messages should not be extracted.
</p>
</dd>
<dt><samp>testsuite</samp></dt>
<dd><p>The GCC testsuites (except for those for runtime libraries).
See <a href="#Testsuites">Testsuites</a>.
</p></dd>
</dl>

<hr>
<a name="Configuration"></a>
<div class="header">
<p>
Next: <a href="#Build" accesskey="n" rel="next">Build</a>, Previous: <a href="#Subdirectories" accesskey="p" rel="prev">Subdirectories</a>, Up: <a href="#gcc-Directory" accesskey="u" rel="up">gcc Directory</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Configuration-in-the-gcc-Directory"></a>
<h4 class="subsection">6.3.2 Configuration in the <samp>gcc</samp> Directory</h4>

<p>The <samp>gcc</samp> directory is configured with an Autoconf-generated
script <samp>configure</samp>.  The <samp>configure</samp> script is generated
from <samp>configure.ac</samp> and <samp>aclocal.m4</samp>.  From the files
<samp>configure.ac</samp> and <samp>acconfig.h</samp>, Autoheader generates the
file <samp>config.in</samp>.  The file <samp>cstamp-h.in</samp> is used as a
timestamp.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Config-Fragments" accesskey="1">Config Fragments</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Scripts used by <samp>configure</samp>.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#System-Config" accesskey="2">System Config</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The <samp>config.build</samp>, <samp>config.host</samp>, and
                         <samp>config.gcc</samp> files.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Configuration-Files" accesskey="3">Configuration Files</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Files created by running <samp>configure</samp>.
</td></tr>
</table>

<hr>
<a name="Config-Fragments"></a>
<div class="header">
<p>
Next: <a href="#System-Config" accesskey="n" rel="next">System Config</a>, Up: <a href="#Configuration" accesskey="u" rel="up">Configuration</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Scripts-Used-by-configure"></a>
<h4 class="subsubsection">6.3.2.1 Scripts Used by <samp>configure</samp></h4>

<p><samp>configure</samp> uses some other scripts to help in its work:
</p>
<ul>
<li> The standard GNU <samp>config.sub</samp> and <samp>config.guess</samp>
files, kept in the top level directory, are used.

</li><li> The file <samp>config.gcc</samp> is used to handle configuration
specific to the particular target machine.  The file
<samp>config.build</samp> is used to handle configuration specific to the
particular build machine.  The file <samp>config.host</samp> is used to handle
configuration specific to the particular host machine.  (In general,
these should only be used for features that cannot reasonably be tested in
Autoconf feature tests.)
See <a href="#System-Config">The <samp>config.build</samp>; <samp>config.host</samp>;
and <samp>config.gcc</samp> Files</a>, for details of the contents of these files.

</li><li> Each language subdirectory has a file
<samp><var>language</var>/config-lang.in</samp> that is used for
front-end-specific configuration.  See <a href="#Front-End-Config">The Front
End <samp>config-lang.in</samp> File</a>, for details of this file.

</li><li> A helper script <samp>configure.frag</samp> is used as part of
creating the output of <samp>configure</samp>.
</li></ul>

<hr>
<a name="System-Config"></a>
<div class="header">
<p>
Next: <a href="#Configuration-Files" accesskey="n" rel="next">Configuration Files</a>, Previous: <a href="#Config-Fragments" accesskey="p" rel="prev">Config Fragments</a>, Up: <a href="#Configuration" accesskey="u" rel="up">Configuration</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-config_002ebuild_003b-config_002ehost_003b-and-config_002egcc-Files"></a>
<h4 class="subsubsection">6.3.2.2 The <samp>config.build</samp>; <samp>config.host</samp>; and <samp>config.gcc</samp> Files</h4>

<p>The <samp>config.build</samp> file contains specific rules for particular systems
which GCC is built on.  This should be used as rarely as possible, as the
behavior of the build system can always be detected by autoconf.
</p>
<p>The <samp>config.host</samp> file contains specific rules for particular systems
which GCC will run on.  This is rarely needed.
</p>
<p>The <samp>config.gcc</samp> file contains specific rules for particular systems
which GCC will generate code for.  This is usually needed.
</p>
<p>Each file has a list of the shell variables it sets, with descriptions, at the
top of the file.
</p>
<p>FIXME: document the contents of these files, and what variables should
be set to control build, host and target configuration.
</p>

<hr>
<a name="Configuration-Files"></a>
<div class="header">
<p>
Previous: <a href="#System-Config" accesskey="p" rel="prev">System Config</a>, Up: <a href="#Configuration" accesskey="u" rel="up">Configuration</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Files-Created-by-configure"></a>
<h4 class="subsubsection">6.3.2.3 Files Created by <code>configure</code></h4>

<p>Here we spell out what files will be set up by <samp>configure</samp> in the
<samp>gcc</samp> directory.  Some other files are created as temporary files
in the configuration process, and are not used in the subsequent
build; these are not documented.
</p>
<ul>
<li> <samp>Makefile</samp> is constructed from <samp>Makefile.in</samp>, together with
the host and target fragments (see <a href="#Fragments">Makefile
Fragments</a>) <samp>t-<var>target</var></samp> and <samp>x-<var>host</var></samp> from
<samp>config</samp>, if any, and language Makefile fragments
<samp><var>language</var>/Make-lang.in</samp>.
</li><li> <samp>auto-host.h</samp> contains information about the host machine
determined by <samp>configure</samp>.  If the host machine is different from
the build machine, then <samp>auto-build.h</samp> is also created,
containing such information about the build machine.
</li><li> <samp>config.status</samp> is a script that may be run to recreate the
current configuration.
</li><li> <samp>configargs.h</samp> is a header containing details of the arguments
passed to <samp>configure</samp> to configure GCC, and of the thread model
used.
</li><li> <samp>cstamp-h</samp> is used as a timestamp.
</li><li> If a language <samp>config-lang.in</samp> file (see <a href="#Front-End-Config">The Front End <samp>config-lang.in</samp> File</a>) sets <code>outputs</code>, then
the files listed in <code>outputs</code> there are also generated.
</li></ul>

<p>The following configuration headers are created from the Makefile,
using <samp>mkconfig.sh</samp>, rather than directly by <samp>configure</samp>.
<samp>config.h</samp>, <samp>bconfig.h</samp> and <samp>tconfig.h</samp> all contain the
<samp>xm-<var>machine</var>.h</samp> header, if any, appropriate to the host,
build and target machines respectively, the configuration headers for
the target, and some definitions; for the host and build machines,
these include the autoconfigured headers generated by
<samp>configure</samp>.  The other configuration headers are determined by
<samp>config.gcc</samp>.  They also contain the typedefs for <code>rtx</code>,
<code>rtvec</code> and <code>tree</code>.
</p>
<ul>
<li> <samp>config.h</samp>, for use in programs that run on the host machine.
</li><li> <samp>bconfig.h</samp>, for use in programs that run on the build machine.
</li><li> <samp>tconfig.h</samp>, for use in programs and libraries for the target
machine.
</li><li> <samp>tm_p.h</samp>, which includes the header <samp><var>machine</var>-protos.h</samp>
that contains prototypes for functions in the target
<samp><var>machine</var>.c</samp> file.  The header <samp><var>machine</var>-protos.h</samp>
can include prototypes of functions that use rtl and tree data
structures inside appropriate <code>#ifdef RTX_CODE</code> and <code>#ifdef
TREE_CODE</code> conditional code segements.  The
<samp><var>machine</var>-protos.h</samp> is included after the <samp>rtl.h</samp>
and/or <samp>tree.h</samp> would have been included.  The <samp>tm_p.h</samp> also
includes the header <samp>tm-preds.h</samp> which is generated by
<samp>genpreds</samp> program during the build to define the declarations
and inline functions for the predicate functions.
</li></ul>

<hr>
<a name="Build"></a>
<div class="header">
<p>
Next: <a href="#Makefile" accesskey="n" rel="next">Makefile</a>, Previous: <a href="#Configuration" accesskey="p" rel="prev">Configuration</a>, Up: <a href="#gcc-Directory" accesskey="u" rel="up">gcc Directory</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Build-System-in-the-gcc-Directory"></a>
<h4 class="subsection">6.3.3 Build System in the <samp>gcc</samp> Directory</h4>

<p>FIXME: describe the build system, including what is built in what
stages.  Also list the various source files that are used in the build
process but aren&rsquo;t source files of GCC itself and so aren&rsquo;t documented
below (see <a href="#Passes">Passes</a>).
</p>

<hr>
<a name="Makefile"></a>
<div class="header">
<p>
Next: <a href="#Library-Files" accesskey="n" rel="next">Library Files</a>, Previous: <a href="#Build" accesskey="p" rel="prev">Build</a>, Up: <a href="#gcc-Directory" accesskey="u" rel="up">gcc Directory</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Makefile-Targets"></a>
<h4 class="subsection">6.3.4 Makefile Targets</h4>
<a name="index-makefile-targets"></a>
<a name="index-targets_002c-makefile"></a>

<p>These targets are available from the &lsquo;<samp>gcc</samp>&rsquo; directory:
</p>
<dl compact="compact">
<dt><code>all</code></dt>
<dd><p>This is the default target.  Depending on what your build/host/target
configuration is, it coordinates all the things that need to be built.
</p>
</dd>
<dt><code>doc</code></dt>
<dd><p>Produce info-formatted documentation and man pages.  Essentially it
calls &lsquo;<samp>make man</samp>&rsquo; and &lsquo;<samp>make info</samp>&rsquo;.
</p>
</dd>
<dt><code>dvi</code></dt>
<dd><p>Produce DVI-formatted documentation.
</p>
</dd>
<dt><code>pdf</code></dt>
<dd><p>Produce PDF-formatted documentation.
</p>
</dd>
<dt><code>html</code></dt>
<dd><p>Produce HTML-formatted documentation.
</p>
</dd>
<dt><code>man</code></dt>
<dd><p>Generate man pages.
</p>
</dd>
<dt><code>info</code></dt>
<dd><p>Generate info-formatted pages.
</p>
</dd>
<dt><code>mostlyclean</code></dt>
<dd><p>Delete the files made while building the compiler.
</p>
</dd>
<dt><code>clean</code></dt>
<dd><p>That, and all the other files built by &lsquo;<samp>make all</samp>&rsquo;.
</p>
</dd>
<dt><code>distclean</code></dt>
<dd><p>That, and all the files created by <code>configure</code>.
</p>
</dd>
<dt><code>maintainer-clean</code></dt>
<dd><p>Distclean plus any file that can be generated from other files.  Note
that additional tools may be required beyond what is normally needed to
build GCC.
</p>
</dd>
<dt><code>srcextra</code></dt>
<dd><p>Generates files in the source directory that are not version-controlled but
should go into a release tarball.
</p>
</dd>
<dt><code>srcinfo</code></dt>
<dt><code>srcman</code></dt>
<dd><p>Copies the info-formatted and manpage documentation into the source
directory usually for the purpose of generating a release tarball.
</p>
</dd>
<dt><code>install</code></dt>
<dd><p>Installs GCC.
</p>
</dd>
<dt><code>uninstall</code></dt>
<dd><p>Deletes installed files, though this is not supported.
</p>
</dd>
<dt><code>check</code></dt>
<dd><p>Run the testsuite.  This creates a <samp>testsuite</samp> subdirectory that
has various <samp>.sum</samp> and <samp>.log</samp> files containing the results of
the testing.  You can run subsets with, for example, &lsquo;<samp>make check-gcc</samp>&rsquo;.
You can specify specific tests by setting <code>RUNTESTFLAGS</code> to be the name
of the <samp>.exp</samp> file, optionally followed by (for some tests) an equals
and a file wildcard, like:
</p>
<div class="smallexample">
<pre class="smallexample">make check-gcc RUNTESTFLAGS=&quot;execute.exp=19980413-*&quot;
</pre></div>

<p>Note that running the testsuite may require additional tools be
installed, such as Tcl or DejaGnu.
</p></dd>
</dl>

<p>The toplevel tree from which you start GCC compilation is not
the GCC directory, but rather a complex Makefile that coordinates
the various steps of the build, including bootstrapping the compiler
and using the new compiler to build target libraries.
</p>
<p>When GCC is configured for a native configuration, the default action
for <code>make</code> is to do a full three-stage bootstrap.  This means
that GCC is built three times&mdash;once with the native compiler, once with
the native-built compiler it just built, and once with the compiler it
built the second time.  In theory, the last two should produce the same
results, which &lsquo;<samp>make compare</samp>&rsquo; can check.  Each stage is configured
separately and compiled into a separate directory, to minimize problems
due to ABI incompatibilities between the native compiler and GCC.
</p>
<p>If you do a change, rebuilding will also start from the first stage
and &ldquo;bubble&rdquo; up the change through the three stages.  Each stage
is taken from its build directory (if it had been built previously),
rebuilt, and copied to its subdirectory.  This will allow you to, for
example, continue a bootstrap after fixing a bug which causes the
stage2 build to crash.  It does not provide as good coverage of the
compiler as bootstrapping from scratch, but it ensures that the new
code is syntactically correct (e.g., that you did not use GCC extensions
by mistake), and avoids spurious bootstrap comparison
failures<a name="DOCF1" href="#FOOT1"><sup>1</sup></a>.
</p>
<p>Other targets available from the top level include:
</p>
<dl compact="compact">
<dt><code>bootstrap-lean</code></dt>
<dd><p>Like <code>bootstrap</code>, except that the various stages are removed once
they&rsquo;re no longer needed.  This saves disk space.
</p>
</dd>
<dt><code>bootstrap2</code></dt>
<dt><code>bootstrap2-lean</code></dt>
<dd><p>Performs only the first two stages of bootstrap.  Unlike a three-stage
bootstrap, this does not perform a comparison to test that the compiler
is running properly.  Note that the disk space required by a &ldquo;lean&rdquo;
bootstrap is approximately independent of the number of stages.
</p>
</dd>
<dt><code>stage<var>N</var>-bubble (<var>N</var> = 1&hellip;4, profile, feedback)</code></dt>
<dd><p>Rebuild all the stages up to <var>N</var>, with the appropriate flags,
&ldquo;bubbling&rdquo; the changes as described above.
</p>
</dd>
<dt><code>all-stage<var>N</var> (<var>N</var> = 1&hellip;4, profile, feedback)</code></dt>
<dd><p>Assuming that stage <var>N</var> has already been built, rebuild it with the
appropriate flags.  This is rarely needed.
</p>
</dd>
<dt><code>cleanstrap</code></dt>
<dd><p>Remove everything (&lsquo;<samp>make clean</samp>&rsquo;) and rebuilds (&lsquo;<samp>make bootstrap</samp>&rsquo;).
</p>
</dd>
<dt><code>compare</code></dt>
<dd><p>Compares the results of stages 2 and 3.  This ensures that the compiler
is running properly, since it should produce the same object files
regardless of how it itself was compiled.
</p>
</dd>
<dt><code>profiledbootstrap</code></dt>
<dd><p>Builds a compiler with profiling feedback information.  In this case,
the second and third stages are named &lsquo;<samp>profile</samp>&rsquo; and &lsquo;<samp>feedback</samp>&rsquo;,
respectively.  For more information, see
<a href="gccinstall-4.html#Building">Building with profile feedback</a> in <cite>Installing GCC</cite>.
</p>
</dd>
<dt><code>restrap</code></dt>
<dd><p>Restart a bootstrap, so that everything that was not built with
the system compiler is rebuilt.
</p>
</dd>
<dt><code>stage<var>N</var>-start (<var>N</var> = 1&hellip;4, profile, feedback)</code></dt>
<dd><p>For each package that is bootstrapped, rename directories so that,
for example, <samp>gcc</samp> points to the stage<var>N</var> GCC, compiled
with the stage<var>N-1</var> GCC<a name="DOCF2" href="#FOOT2"><sup>2</sup></a>.
</p>
<p>You will invoke this target if you need to test or debug the
stage<var>N</var> GCC.  If you only need to execute GCC (but you need
not run &lsquo;<samp>make</samp>&rsquo; either to rebuild it or to run test suites),
you should be able to work directly in the <samp>stage<var>N</var>-gcc</samp>
directory.  This makes it easier to debug multiple stages in
parallel.
</p>
</dd>
<dt><code>stage</code></dt>
<dd><p>For each package that is bootstrapped, relocate its build directory
to indicate its stage.  For example, if the <samp>gcc</samp> directory
points to the stage2 GCC, after invoking this target it will be
renamed to <samp>stage2-gcc</samp>.
</p>
</dd>
</dl>

<p>If you wish to use non-default GCC flags when compiling the stage2 and
stage3 compilers, set <code>BOOT_CFLAGS</code> on the command line when doing
&lsquo;<samp>make</samp>&rsquo;.
</p>
<p>Usually, the first stage only builds the languages that the compiler
is written in: typically, C and maybe Ada.  If you are debugging a
miscompilation of a different stage2 front-end (for example, of the
Fortran front-end), you may want to have front-ends for other languages
in the first stage as well.  To do so, set <code>STAGE1_LANGUAGES</code>
on the command line when doing &lsquo;<samp>make</samp>&rsquo;.
</p>
<p>For example, in the aforementioned scenario of debugging a Fortran
front-end miscompilation caused by the stage1 compiler, you may need a
command like
</p>
<div class="example">
<pre class="example">make stage2-bubble STAGE1_LANGUAGES=c,fortran
</pre></div>

<p>Alternatively, you can use per-language targets to build and test
languages that are not enabled by default in stage1.  For example,
<code>make f951</code> will build a Fortran compiler even in the stage1
build directory.
</p>

<hr>
<a name="Library-Files"></a>
<div class="header">
<p>
Next: <a href="#Headers" accesskey="n" rel="next">Headers</a>, Previous: <a href="#Makefile" accesskey="p" rel="prev">Makefile</a>, Up: <a href="#gcc-Directory" accesskey="u" rel="up">gcc Directory</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Library-Source-Files-and-Headers-under-the-gcc-Directory"></a>
<h4 class="subsection">6.3.5 Library Source Files and Headers under the <samp>gcc</samp> Directory</h4>

<p>FIXME: list here, with explanation, all the C source files and headers
under the <samp>gcc</samp> directory that aren&rsquo;t built into the GCC
executable but rather are part of runtime libraries and object files,
such as <samp>crtstuff.c</samp> and <samp>unwind-dw2.c</samp>.  See <a href="#Headers">Headers Installed by GCC</a>, for more information about the
<samp>ginclude</samp> directory.
</p>
<hr>
<a name="Headers"></a>
<div class="header">
<p>
Next: <a href="#Documentation" accesskey="n" rel="next">Documentation</a>, Previous: <a href="#Library-Files" accesskey="p" rel="prev">Library Files</a>, Up: <a href="#gcc-Directory" accesskey="u" rel="up">gcc Directory</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Headers-Installed-by-GCC"></a>
<h4 class="subsection">6.3.6 Headers Installed by GCC</h4>

<p>In general, GCC expects the system C library to provide most of the
headers to be used with it.  However, GCC will fix those headers if
necessary to make them work with GCC, and will install some headers
required of freestanding implementations.  These headers are installed
in <samp><var>libsubdir</var>/include</samp>.  Headers for non-C runtime
libraries are also installed by GCC; these are not documented here.
(FIXME: document them somewhere.)
</p>
<p>Several of the headers GCC installs are in the <samp>ginclude</samp>
directory.  These headers, <samp>iso646.h</samp>,
<samp>stdarg.h</samp>, <samp>stdbool.h</samp>, and <samp>stddef.h</samp>,
are installed in <samp><var>libsubdir</var>/include</samp>,
unless the target Makefile fragment (see <a href="#Target-Fragment">Target Fragment</a>)
overrides this by setting <code>USER_H</code>.
</p>
<p>In addition to these headers and those generated by fixing system
headers to work with GCC, some other headers may also be installed in
<samp><var>libsubdir</var>/include</samp>.  <samp>config.gcc</samp> may set
<code>extra_headers</code>; this specifies additional headers under
<samp>config</samp> to be installed on some systems.
</p>
<p>GCC installs its own version of <code>&lt;float.h&gt;</code>, from <samp>ginclude/float.h</samp>.
This is done to cope with command-line options that change the
representation of floating point numbers.
</p>
<p>GCC also installs its own version of <code>&lt;limits.h&gt;</code>; this is generated
from <samp>glimits.h</samp>, together with <samp>limitx.h</samp> and
<samp>limity.h</samp> if the system also has its own version of
<code>&lt;limits.h&gt;</code>.  (GCC provides its own header because it is
required of ISO C freestanding implementations, but needs to include
the system header from its own header as well because other standards
such as POSIX specify additional values to be defined in
<code>&lt;limits.h&gt;</code>.)  The system&rsquo;s <code>&lt;limits.h&gt;</code> header is used via
<samp><var>libsubdir</var>/include/syslimits.h</samp>, which is copied from
<samp>gsyslimits.h</samp> if it does not need fixing to work with GCC; if it
needs fixing, <samp>syslimits.h</samp> is the fixed copy.
</p>
<p>GCC can also install <code>&lt;tgmath.h&gt;</code>.  It will do this when
<samp>config.gcc</samp> sets <code>use_gcc_tgmath</code> to <code>yes</code>.
</p>
<hr>
<a name="Documentation"></a>
<div class="header">
<p>
Next: <a href="#Front-End" accesskey="n" rel="next">Front End</a>, Previous: <a href="#Headers" accesskey="p" rel="prev">Headers</a>, Up: <a href="#gcc-Directory" accesskey="u" rel="up">gcc Directory</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Building-Documentation"></a>
<h4 class="subsection">6.3.7 Building Documentation</h4>

<p>The main GCC documentation is in the form of manuals in Texinfo
format.  These are installed in Info format; DVI versions may be
generated by &lsquo;<samp>make dvi</samp>&rsquo;, PDF versions by &lsquo;<samp>make pdf</samp>&rsquo;, and
HTML versions by &lsquo;<samp>make html</samp>&rsquo;.  In addition, some man pages are
generated from the Texinfo manuals, there are some other text files
with miscellaneous documentation, and runtime libraries have their own
documentation outside the <samp>gcc</samp> directory.  FIXME: document the
documentation for runtime libraries somewhere.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Texinfo-Manuals" accesskey="1">Texinfo Manuals</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">GCC manuals in Texinfo format.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Man-Page-Generation" accesskey="2">Man Page Generation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Generating man pages from Texinfo manuals.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Miscellaneous-Docs" accesskey="3">Miscellaneous Docs</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Miscellaneous text files with documentation.
</td></tr>
</table>

<hr>
<a name="Texinfo-Manuals"></a>
<div class="header">
<p>
Next: <a href="#Man-Page-Generation" accesskey="n" rel="next">Man Page Generation</a>, Up: <a href="#Documentation" accesskey="u" rel="up">Documentation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Texinfo-Manuals-1"></a>
<h4 class="subsubsection">6.3.7.1 Texinfo Manuals</h4>

<p>The manuals for GCC as a whole, and the C and C++ front ends, are in
files <samp>doc/*.texi</samp>.  Other front ends have their own manuals in
files <samp><var>language</var>/*.texi</samp>.  Common files
<samp>doc/include/*.texi</samp> are provided which may be included in
multiple manuals; the following files are in <samp>doc/include</samp>:
</p>
<dl compact="compact">
<dt><samp>fdl.texi</samp></dt>
<dd><p>The GNU Free Documentation License.
</p></dd>
<dt><samp>funding.texi</samp></dt>
<dd><p>The section &ldquo;Funding Free Software&rdquo;.
</p></dd>
<dt><samp>gcc-common.texi</samp></dt>
<dd><p>Common definitions for manuals.
</p></dd>
<dt><samp>gpl_v3.texi</samp></dt>
<dd><p>The GNU General Public License.
</p></dd>
<dt><samp>texinfo.tex</samp></dt>
<dd><p>A copy of <samp>texinfo.tex</samp> known to work with the GCC manuals.
</p></dd>
</dl>

<p>DVI-formatted manuals are generated by &lsquo;<samp>make dvi</samp>&rsquo;, which uses
<code>texi2dvi</code> (via the Makefile macro <code>$(TEXI2DVI)</code>).
PDF-formatted manuals are generated by &lsquo;<samp>make pdf</samp>&rsquo;, which uses
<code>texi2pdf</code> (via the Makefile macro <code>$(TEXI2PDF)</code>).  HTML
formatted manuals are generated by &lsquo;<samp>make html</samp>&rsquo;.  Info
manuals are generated by &lsquo;<samp>make info</samp>&rsquo; (which is run as part of
a bootstrap); this generates the manuals in the source directory,
using <code>makeinfo</code> via the Makefile macro <code>$(MAKEINFO)</code>,
and they are included in release distributions.
</p>
<p>Manuals are also provided on the GCC web site, in both HTML and
PostScript forms.  This is done via the script
<samp>maintainer-scripts/update_web_docs_svn</samp>.  Each manual to be
provided online must be listed in the definition of <code>MANUALS</code> in
that file; a file <samp><var>name</var>.texi</samp> must only appear once in the
source tree, and the output manual must have the same name as the
source file.  (However, other Texinfo files, included in manuals but
not themselves the root files of manuals, may have names that appear
more than once in the source tree.)  The manual file
<samp><var>name</var>.texi</samp> should only include other files in its own
directory or in <samp>doc/include</samp>.  HTML manuals will be generated by
&lsquo;<samp>makeinfo --html</samp>&rsquo;, PostScript manuals by <code>texi2dvi</code>
and <code>dvips</code>, and PDF manuals by <code>texi2pdf</code>.
All Texinfo files that are parts of manuals must
be version-controlled, even if they are generated files, for the
generation of online manuals to work.
</p>
<p>The installation manual, <samp>doc/install.texi</samp>, is also provided on
the GCC web site.  The HTML version is generated by the script
<samp>doc/install.texi2html</samp>.
</p>
<hr>
<a name="Man-Page-Generation"></a>
<div class="header">
<p>
Next: <a href="#Miscellaneous-Docs" accesskey="n" rel="next">Miscellaneous Docs</a>, Previous: <a href="#Texinfo-Manuals" accesskey="p" rel="prev">Texinfo Manuals</a>, Up: <a href="#Documentation" accesskey="u" rel="up">Documentation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Man-Page-Generation-1"></a>
<h4 class="subsubsection">6.3.7.2 Man Page Generation</h4>

<p>Because of user demand, in addition to full Texinfo manuals, man pages
are provided which contain extracts from those manuals.  These man
pages are generated from the Texinfo manuals using
<samp>contrib/texi2pod.pl</samp> and <code>pod2man</code>.  (The man page for
<code>g++</code>, <samp>cp/g++.1</samp>, just contains a &lsquo;<samp>.so</samp>&rsquo; reference
to <samp>gcc.1</samp>, but all the other man pages are generated from
Texinfo manuals.)
</p>
<p>Because many systems may not have the necessary tools installed to
generate the man pages, they are only generated if the
<samp>configure</samp> script detects that recent enough tools are
installed, and the Makefiles allow generating man pages to fail
without aborting the build.  Man pages are also included in release
distributions.  They are generated in the source directory.
</p>
<p>Magic comments in Texinfo files starting &lsquo;<samp>@c man</samp>&rsquo; control what
parts of a Texinfo file go into a man page.  Only a subset of Texinfo
is supported by <samp>texi2pod.pl</samp>, and it may be necessary to add
support for more Texinfo features to this script when generating new
man pages.  To improve the man page output, some special Texinfo
macros are provided in <samp>doc/include/gcc-common.texi</samp> which
<samp>texi2pod.pl</samp> understands:
</p>
<dl compact="compact">
<dt><code>@gcctabopt</code></dt>
<dd><p>Use in the form &lsquo;<samp>@table @gcctabopt</samp>&rsquo; for tables of options,
where for printed output the effect of &lsquo;<samp>@code</samp>&rsquo; is better than
that of &lsquo;<samp>@option</samp>&rsquo; but for man page output a different effect is
wanted.
</p></dd>
<dt><code>@gccoptlist</code></dt>
<dd><p>Use for summary lists of options in manuals.
</p></dd>
<dt><code>@gol</code></dt>
<dd><p>Use at the end of each line inside &lsquo;<samp>@gccoptlist</samp>&rsquo;.  This is
necessary to avoid problems with differences in how the
&lsquo;<samp>@gccoptlist</samp>&rsquo; macro is handled by different Texinfo formatters.
</p></dd>
</dl>

<p>FIXME: describe the <samp>texi2pod.pl</samp> input language and magic
comments in more detail.
</p>
<hr>
<a name="Miscellaneous-Docs"></a>
<div class="header">
<p>
Previous: <a href="#Man-Page-Generation" accesskey="p" rel="prev">Man Page Generation</a>, Up: <a href="#Documentation" accesskey="u" rel="up">Documentation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Miscellaneous-Documentation"></a>
<h4 class="subsubsection">6.3.7.3 Miscellaneous Documentation</h4>

<p>In addition to the formal documentation that is installed by GCC,
there are several other text files in the <samp>gcc</samp> subdirectory
with miscellaneous documentation:
</p>
<dl compact="compact">
<dt><samp>ABOUT-GCC-NLS</samp></dt>
<dd><p>Notes on GCC&rsquo;s Native Language Support.  FIXME: this should be part of
this manual rather than a separate file.
</p></dd>
<dt><samp>ABOUT-NLS</samp></dt>
<dd><p>Notes on the Free Translation Project.
</p></dd>
<dt><samp>COPYING</samp></dt>
<dt><samp>COPYING3</samp></dt>
<dd><p>The GNU General Public License, Versions 2 and 3.
</p></dd>
<dt><samp>COPYING.LIB</samp></dt>
<dt><samp>COPYING3.LIB</samp></dt>
<dd><p>The GNU Lesser General Public License, Versions 2.1 and 3.
</p></dd>
<dt><samp>*ChangeLog*</samp></dt>
<dt><samp>*/ChangeLog*</samp></dt>
<dd><p>Change log files for various parts of GCC.
</p></dd>
<dt><samp>LANGUAGES</samp></dt>
<dd><p>Details of a few changes to the GCC front-end interface.  FIXME: the
information in this file should be part of general documentation of
the front-end interface in this manual.
</p></dd>
<dt><samp>ONEWS</samp></dt>
<dd><p>Information about new features in old versions of GCC.  (For recent
versions, the information is on the GCC web site.)
</p></dd>
<dt><samp>README.Portability</samp></dt>
<dd><p>Information about portability issues when writing code in GCC.  FIXME:
why isn&rsquo;t this part of this manual or of the GCC Coding Conventions?
</p></dd>
</dl>

<p>FIXME: document such files in subdirectories, at least <samp>config</samp>,
<samp>c</samp>, <samp>cp</samp>, <samp>objc</samp>, <samp>testsuite</samp>.
</p>
<hr>
<a name="Front-End"></a>
<div class="header">
<p>
Next: <a href="#Back-End" accesskey="n" rel="next">Back End</a>, Previous: <a href="#Documentation" accesskey="p" rel="prev">Documentation</a>, Up: <a href="#gcc-Directory" accesskey="u" rel="up">gcc Directory</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Anatomy-of-a-Language-Front-End"></a>
<h4 class="subsection">6.3.8 Anatomy of a Language Front End</h4>

<p>A front end for a language in GCC has the following parts:
</p>
<ul>
<li> A directory <samp><var>language</var></samp> under <samp>gcc</samp> containing source
files for that front end.  See <a href="#Front-End-Directory">The Front End
<samp><var>language</var></samp> Directory</a>, for details.
</li><li> A mention of the language in the list of supported languages in
<samp>gcc/doc/install.texi</samp>.
</li><li> A mention of the name under which the language&rsquo;s runtime library is
recognized by <samp>--enable-shared=<var>package</var></samp> in the
documentation of that option in <samp>gcc/doc/install.texi</samp>.
</li><li> A mention of any special prerequisites for building the front end in
the documentation of prerequisites in <samp>gcc/doc/install.texi</samp>.
</li><li> Details of contributors to that front end in
<samp>gcc/doc/contrib.texi</samp>.  If the details are in that front end&rsquo;s
own manual then there should be a link to that manual&rsquo;s list in
<samp>contrib.texi</samp>.
</li><li> Information about support for that language in
<samp>gcc/doc/frontends.texi</samp>.
</li><li> Information about standards for that language, and the front end&rsquo;s
support for them, in <samp>gcc/doc/standards.texi</samp>.  This may be a
link to such information in the front end&rsquo;s own manual.
</li><li> Details of source file suffixes for that language and <samp>-x
<var>lang</var></samp> options supported, in <samp>gcc/doc/invoke.texi</samp>.
</li><li> Entries in <code>default_compilers</code> in <samp>gcc.c</samp> for source file
suffixes for that language.
</li><li> Preferably testsuites, which may be under <samp>gcc/testsuite</samp> or
runtime library directories.  FIXME: document somewhere how to write
testsuite harnesses.
</li><li> Probably a runtime library for the language, outside the <samp>gcc</samp>
directory.  FIXME: document this further.
</li><li> Details of the directories of any runtime libraries in
<samp>gcc/doc/sourcebuild.texi</samp>.
</li><li> Check targets in <samp>Makefile.def</samp> for the top-level <samp>Makefile</samp>
to check just the compiler or the compiler and runtime library for the
language.
</li></ul>

<p>If the front end is added to the official GCC source repository, the
following are also necessary:
</p>
<ul>
<li> At least one Bugzilla component for bugs in that front end and runtime
libraries.  This category needs to be added to the Bugzilla database.
</li><li> Normally, one or more maintainers of that front end listed in
<samp>MAINTAINERS</samp>.
</li><li> Mentions on the GCC web site in <samp>index.html</samp> and
<samp>frontends.html</samp>, with any relevant links on
<samp>readings.html</samp>.  (Front ends that are not an official part of
GCC may also be listed on <samp>frontends.html</samp>, with relevant links.)
</li><li> A news item on <samp>index.html</samp>, and possibly an announcement on the
<a href="mailto:gcc-announce@gcc.gnu.org">gcc-announce@gcc.gnu.org</a> mailing list.
</li><li> The front end&rsquo;s manuals should be mentioned in
<samp>maintainer-scripts/update_web_docs_svn</samp> (see <a href="#Texinfo-Manuals">Texinfo Manuals</a>)
and the online manuals should be linked to from
<samp>onlinedocs/index.html</samp>.
</li><li> Any old releases or CVS repositories of the front end, before its
inclusion in GCC, should be made available on the GCC FTP site
<a href="ftp://gcc.gnu.org/pub/gcc/old-releases/">ftp://gcc.gnu.org/pub/gcc/old-releases/</a>.
</li><li> The release and snapshot script <samp>maintainer-scripts/gcc_release</samp>
should be updated to generate appropriate tarballs for this front end.
</li><li> If this front end includes its own version files that include the
current date, <samp>maintainer-scripts/update_version</samp> should be
updated accordingly.
</li></ul>

<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Front-End-Directory" accesskey="1">Front End Directory</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The front end <samp><var>language</var></samp> directory.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Front-End-Config" accesskey="2">Front End Config</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The front end <samp>config-lang.in</samp> file.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Front-End-Makefile" accesskey="3">Front End Makefile</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The front end <samp>Make-lang.in</samp> file.
</td></tr>
</table>

<hr>
<a name="Front-End-Directory"></a>
<div class="header">
<p>
Next: <a href="#Front-End-Config" accesskey="n" rel="next">Front End Config</a>, Up: <a href="#Front-End" accesskey="u" rel="up">Front End</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-Front-End-language-Directory"></a>
<h4 class="subsubsection">6.3.8.1 The Front End <samp><var>language</var></samp> Directory</h4>

<p>A front end <samp><var>language</var></samp> directory contains the source files
of that front end (but not of any runtime libraries, which should be
outside the <samp>gcc</samp> directory).  This includes documentation, and
possibly some subsidiary programs built alongside the front end.
Certain files are special and other parts of the compiler depend on
their names:
</p>
<dl compact="compact">
<dt><samp>config-lang.in</samp></dt>
<dd><p>This file is required in all language subdirectories.  See <a href="#Front-End-Config">The Front End <samp>config-lang.in</samp> File</a>, for details of
its contents
</p></dd>
<dt><samp>Make-lang.in</samp></dt>
<dd><p>This file is required in all language subdirectories.  See <a href="#Front-End-Makefile">The Front End <samp>Make-lang.in</samp> File</a>, for details of its
contents.
</p></dd>
<dt><samp>lang.opt</samp></dt>
<dd><p>This file registers the set of switches that the front end accepts on
the command line, and their <samp>--help</samp> text.  See <a href="#Options">Options</a>.
</p></dd>
<dt><samp>lang-specs.h</samp></dt>
<dd><p>This file provides entries for <code>default_compilers</code> in
<samp>gcc.c</samp> which override the default of giving an error that a
compiler for that language is not installed.
</p></dd>
<dt><samp><var>language</var>-tree.def</samp></dt>
<dd><p>This file, which need not exist, defines any language-specific tree
codes.
</p></dd>
</dl>

<hr>
<a name="Front-End-Config"></a>
<div class="header">
<p>
Next: <a href="#Front-End-Makefile" accesskey="n" rel="next">Front End Makefile</a>, Previous: <a href="#Front-End-Directory" accesskey="p" rel="prev">Front End Directory</a>, Up: <a href="#Front-End" accesskey="u" rel="up">Front End</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-Front-End-config_002dlang_002ein-File"></a>
<h4 class="subsubsection">6.3.8.2 The Front End <samp>config-lang.in</samp> File</h4>

<p>Each language subdirectory contains a <samp>config-lang.in</samp> file.
This file is a shell script that may define some variables describing
the language:
</p>
<dl compact="compact">
<dt><code>language</code></dt>
<dd><p>This definition must be present, and gives the name of the language
for some purposes such as arguments to <samp>--enable-languages</samp>.
</p></dd>
<dt><code>lang_requires</code></dt>
<dd><p>If defined, this variable lists (space-separated) language front ends
other than C that this front end requires to be enabled (with the
names given being their <code>language</code> settings).  For example, the
Java front end depends on the C++ front end, so sets
&lsquo;<samp>lang_requires=c++</samp>&rsquo;.
</p></dd>
<dt><code>subdir_requires</code></dt>
<dd><p>If defined, this variable lists (space-separated) front end directories
other than C that this front end requires to be present.  For example,
the Objective-C++ front end uses source files from the C++ and
Objective-C front ends, so sets &lsquo;<samp>subdir_requires=&quot;cp objc&quot;</samp>&rsquo;.
</p></dd>
<dt><code>target_libs</code></dt>
<dd><p>If defined, this variable lists (space-separated) targets in the top
level <samp>Makefile</samp> to build the runtime libraries for this
language, such as <code>target-libobjc</code>.
</p></dd>
<dt><code>lang_dirs</code></dt>
<dd><p>If defined, this variable lists (space-separated) top level
directories (parallel to <samp>gcc</samp>), apart from the runtime libraries,
that should not be configured if this front end is not built.
</p></dd>
<dt><code>build_by_default</code></dt>
<dd><p>If defined to &lsquo;<samp>no</samp>&rsquo;, this language front end is not built unless
enabled in a <samp>--enable-languages</samp> argument.  Otherwise, front
ends are built by default, subject to any special logic in
<samp>configure.ac</samp> (as is present to disable the Ada front end if the
Ada compiler is not already installed).
</p></dd>
<dt><code>boot_language</code></dt>
<dd><p>If defined to &lsquo;<samp>yes</samp>&rsquo;, this front end is built in stage1 of the
bootstrap.  This is only relevant to front ends written in their own
languages.
</p></dd>
<dt><code>compilers</code></dt>
<dd><p>If defined, a space-separated list of compiler executables that will
be run by the driver.  The names here will each end
with &lsquo;<samp>\$(exeext)</samp>&rsquo;.
</p></dd>
<dt><code>outputs</code></dt>
<dd><p>If defined, a space-separated list of files that should be generated
by <samp>configure</samp> substituting values in them.  This mechanism can
be used to create a file <samp><var>language</var>/Makefile</samp> from
<samp><var>language</var>/Makefile.in</samp>, but this is deprecated, building
everything from the single <samp>gcc/Makefile</samp> is preferred.
</p></dd>
<dt><code>gtfiles</code></dt>
<dd><p>If defined, a space-separated list of files that should be scanned by
<samp>gengtype.c</samp> to generate the garbage collection tables and routines for
this language.  This excludes the files that are common to all front
ends.  See <a href="#Type-Information">Type Information</a>.
</p>
</dd>
</dl>

<hr>
<a name="Front-End-Makefile"></a>
<div class="header">
<p>
Previous: <a href="#Front-End-Config" accesskey="p" rel="prev">Front End Config</a>, Up: <a href="#Front-End" accesskey="u" rel="up">Front End</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-Front-End-Make_002dlang_002ein-File"></a>
<h4 class="subsubsection">6.3.8.3 The Front End <samp>Make-lang.in</samp> File</h4>

<p>Each language subdirectory contains a <samp>Make-lang.in</samp> file.  It contains
targets <code><var>lang</var>.<var>hook</var></code> (where <code><var>lang</var></code> is the
setting of <code>language</code> in <samp>config-lang.in</samp>) for the following
values of <code><var>hook</var></code>, and any other Makefile rules required to
build those targets (which may if necessary use other Makefiles
specified in <code>outputs</code> in <samp>config-lang.in</samp>, although this is
deprecated).  It also adds any testsuite targets that can use the
standard rule in <samp>gcc/Makefile.in</samp> to the variable
<code>lang_checks</code>.
</p>
<dl compact="compact">
<dt><code>all.cross</code></dt>
<dt><code>start.encap</code></dt>
<dt><code>rest.encap</code></dt>
<dd><p>FIXME: exactly what goes in each of these targets?
</p></dd>
<dt><code>tags</code></dt>
<dd><p>Build an <code>etags</code> <samp>TAGS</samp> file in the language subdirectory
in the source tree.
</p></dd>
<dt><code>info</code></dt>
<dd><p>Build info documentation for the front end, in the build directory.
This target is only called by &lsquo;<samp>make bootstrap</samp>&rsquo; if a suitable
version of <code>makeinfo</code> is available, so does not need to check
for this, and should fail if an error occurs.
</p></dd>
<dt><code>dvi</code></dt>
<dd><p>Build DVI documentation for the front end, in the build directory.
This should be done using <code>$(TEXI2DVI)</code>, with appropriate
<samp>-I</samp> arguments pointing to directories of included files.
</p></dd>
<dt><code>pdf</code></dt>
<dd><p>Build PDF documentation for the front end, in the build directory.
This should be done using <code>$(TEXI2PDF)</code>, with appropriate
<samp>-I</samp> arguments pointing to directories of included files.
</p></dd>
<dt><code>html</code></dt>
<dd><p>Build HTML documentation for the front end, in the build directory.
</p></dd>
<dt><code>man</code></dt>
<dd><p>Build generated man pages for the front end from Texinfo manuals
(see <a href="#Man-Page-Generation">Man Page Generation</a>), in the build directory.  This target
is only called if the necessary tools are available, but should ignore
errors so as not to stop the build if errors occur; man pages are
optional and the tools involved may be installed in a broken way.
</p></dd>
<dt><code>install-common</code></dt>
<dd><p>Install everything that is part of the front end, apart from the
compiler executables listed in <code>compilers</code> in
<samp>config-lang.in</samp>.
</p></dd>
<dt><code>install-info</code></dt>
<dd><p>Install info documentation for the front end, if it is present in the
source directory.  This target should have dependencies on info files
that should be installed.
</p></dd>
<dt><code>install-man</code></dt>
<dd><p>Install man pages for the front end.  This target should ignore
errors.
</p></dd>
<dt><code>install-plugin</code></dt>
<dd><p>Install headers needed for plugins.
</p></dd>
<dt><code>srcextra</code></dt>
<dd><p>Copies its dependencies into the source directory.  This generally should
be used for generated files such as Bison output files which are not
version-controlled, but should be included in any release tarballs.  This
target will be executed during a bootstrap if
&lsquo;<samp>--enable-generated-files-in-srcdir</samp>&rsquo; was specified as a
<samp>configure</samp> option.
</p></dd>
<dt><code>srcinfo</code></dt>
<dt><code>srcman</code></dt>
<dd><p>Copies its dependencies into the source directory.  These targets will be
executed during a bootstrap if &lsquo;<samp>--enable-generated-files-in-srcdir</samp>&rsquo;
was specified as a <samp>configure</samp> option.
</p></dd>
<dt><code>uninstall</code></dt>
<dd><p>Uninstall files installed by installing the compiler.  This is
currently documented not to be supported, so the hook need not do
anything.
</p></dd>
<dt><code>mostlyclean</code></dt>
<dt><code>clean</code></dt>
<dt><code>distclean</code></dt>
<dt><code>maintainer-clean</code></dt>
<dd><p>The language parts of the standard GNU
&lsquo;<samp>*clean</samp>&rsquo; targets.  See <a href="http://www.gnu.org/prep/standards/standards.html#Standard-Targets">Standard Targets for
Users</a> in <cite>GNU Coding Standards</cite>, for details of the standard
targets.  For GCC, <code>maintainer-clean</code> should delete
all generated files in the source directory that are not version-controlled,
but should not delete anything that is.
</p></dd>
</dl>

<p><samp>Make-lang.in</samp> must also define a variable <code><var>lang</var>_OBJS</code>
to a list of host object files that are used by that language.
</p>
<hr>
<a name="Back-End"></a>
<div class="header">
<p>
Previous: <a href="#Front-End" accesskey="p" rel="prev">Front End</a>, Up: <a href="#gcc-Directory" accesskey="u" rel="up">gcc Directory</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Anatomy-of-a-Target-Back-End"></a>
<h4 class="subsection">6.3.9 Anatomy of a Target Back End</h4>

<p>A back end for a target architecture in GCC has the following parts:
</p>
<ul>
<li> A directory <samp><var>machine</var></samp> under <samp>gcc/config</samp>, containing a
machine description <samp><var>machine</var>.md</samp> file (see <a href="#Machine-Desc">Machine Descriptions</a>), header files <samp><var>machine</var>.h</samp> and
<samp><var>machine</var>-protos.h</samp> and a source file <samp><var>machine</var>.c</samp>
(see <a href="#Target-Macros">Target Description Macros and Functions</a>),
possibly a target Makefile fragment <samp>t-<var>machine</var></samp>
(see <a href="#Target-Fragment">The Target Makefile Fragment</a>), and maybe
some other files.  The names of these files may be changed from the
defaults given by explicit specifications in <samp>config.gcc</samp>.
</li><li> If necessary, a file <samp><var>machine</var>-modes.def</samp> in the
<samp><var>machine</var></samp> directory, containing additional machine modes to
represent condition codes.  See <a href="#Condition-Code">Condition Code</a>, for further details.
</li><li> An optional <samp><var>machine</var>.opt</samp> file in the <samp><var>machine</var></samp>
directory, containing a list of target-specific options.  You can also
add other option files using the <code>extra_options</code> variable in
<samp>config.gcc</samp>.  See <a href="#Options">Options</a>.
</li><li> Entries in <samp>config.gcc</samp> (see <a href="#System-Config">The
<samp>config.gcc</samp> File</a>) for the systems with this target
architecture.
</li><li> Documentation in <samp>gcc/doc/invoke.texi</samp> for any command-line
options supported by this target (see <a href="#Run_002dtime-Target">Run-time
Target Specification</a>).  This means both entries in the summary table
of options and details of the individual options.
</li><li> Documentation in <samp>gcc/doc/extend.texi</samp> for any target-specific
attributes supported (see <a href="#Target-Attributes">Defining
target-specific uses of <code>__attribute__</code></a>), including where the
same attribute is already supported on some targets, which are
enumerated in the manual.
</li><li> Documentation in <samp>gcc/doc/extend.texi</samp> for any target-specific
pragmas supported.
</li><li> Documentation in <samp>gcc/doc/extend.texi</samp> of any target-specific
built-in functions supported.
</li><li> Documentation in <samp>gcc/doc/extend.texi</samp> of any target-specific
format checking styles supported.
</li><li> Documentation in <samp>gcc/doc/md.texi</samp> of any target-specific
constraint letters (see <a href="#Machine-Constraints">Constraints for
Particular Machines</a>).
</li><li> A note in <samp>gcc/doc/contrib.texi</samp> under the person or people who
contributed the target support.
</li><li> Entries in <samp>gcc/doc/install.texi</samp> for all target triplets
supported with this target architecture, giving details of any special
notes about installation for this target, or saying that there are no
special notes if there are none.
</li><li> Possibly other support outside the <samp>gcc</samp> directory for runtime
libraries.  FIXME: reference docs for this.  The <code>libstdc++</code> porting
manual needs to be installed as info for this to work, or to be a
chapter of this manual.
</li></ul>

<p>If the back end is added to the official GCC source repository, the
following are also necessary:
</p>
<ul>
<li> An entry for the target architecture in <samp>readings.html</samp> on the
GCC web site, with any relevant links.
</li><li> Details of the properties of the back end and target architecture in
<samp>backends.html</samp> on the GCC web site.
</li><li> A news item about the contribution of support for that target
architecture, in <samp>index.html</samp> on the GCC web site.
</li><li> Normally, one or more maintainers of that target listed in
<samp>MAINTAINERS</samp>.  Some existing architectures may be unmaintained,
but it would be unusual to add support for a target that does not have
a maintainer when support is added.
</li><li> Target triplets covering all <samp>config.gcc</samp> stanzas for the target,
in the list in <samp>contrib/config-list.mk</samp>.
</li></ul>

<hr>
<a name="Testsuites"></a>
<div class="header">
<p>
Next: <a href="#Options" accesskey="n" rel="next">Options</a>, Previous: <a href="#Source-Tree" accesskey="p" rel="prev">Source Tree</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Testsuites-1"></a>
<h2 class="chapter">7 Testsuites</h2>

<p>GCC contains several testsuites to help maintain compiler quality.
Most of the runtime libraries and language front ends in GCC have
testsuites.  Currently only the C language testsuites are documented
here; FIXME: document the others.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Test-Idioms" accesskey="1">Test Idioms</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Idioms used in testsuite code.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Test-Directives" accesskey="2">Test Directives</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Directives used within DejaGnu tests.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Ada-Tests" accesskey="3">Ada Tests</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The Ada language testsuites.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#C-Tests" accesskey="4">C Tests</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The C language testsuites.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#libgcj-Tests" accesskey="5">libgcj Tests</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The Java library testsuites.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#LTO-Testing" accesskey="6">LTO Testing</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Support for testing link-time optimizations.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#gcov-Testing" accesskey="7">gcov Testing</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Support for testing gcov.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#profopt-Testing" accesskey="8">profopt Testing</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Support for testing profile-directed optimizations.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#compat-Testing" accesskey="9">compat Testing</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Support for testing binary compatibility.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Torture-Tests">Torture Tests</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Support for torture testing using multiple options.
</td></tr>
</table>

<hr>
<a name="Test-Idioms"></a>
<div class="header">
<p>
Next: <a href="#Test-Directives" accesskey="n" rel="next">Test Directives</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Idioms-Used-in-Testsuite-Code"></a>
<h3 class="section">7.1 Idioms Used in Testsuite Code</h3>

<p>In general, C testcases have a trailing <samp>-<var>n</var>.c</samp>, starting
with <samp>-1.c</samp>, in case other testcases with similar names are added
later.  If the test is a test of some well-defined feature, it should
have a name referring to that feature such as
<samp><var>feature</var>-1.c</samp>.  If it does not test a well-defined feature
but just happens to exercise a bug somewhere in the compiler, and a
bug report has been filed for this bug in the GCC bug database,
<samp>pr<var>bug-number</var>-1.c</samp> is the appropriate form of name.
Otherwise (for miscellaneous bugs not filed in the GCC bug database),
and previously more generally, test cases are named after the date on
which they were added.  This allows people to tell at a glance whether
a test failure is because of a recently found bug that has not yet
been fixed, or whether it may be a regression, but does not give any
other information about the bug or where discussion of it may be
found.  Some other language testsuites follow similar conventions.
</p>
<p>In the <samp>gcc.dg</samp> testsuite, it is often necessary to test that an
error is indeed a hard error and not just a warning&mdash;for example,
where it is a constraint violation in the C standard, which must
become an error with <samp>-pedantic-errors</samp>.  The following idiom,
where the first line shown is line <var>line</var> of the file and the line
that generates the error, is used for this:
</p>
<div class="smallexample">
<pre class="smallexample">/* { dg-bogus &quot;warning&quot; &quot;warning in place of error&quot; } */
/* { dg-error &quot;<var>regexp</var>&quot; &quot;<var>message</var>&quot; { target *-*-* } <var>line</var> } */
</pre></div>

<p>It may be necessary to check that an expression is an integer constant
expression and has a certain value.  To check that <code><var>E</var></code> has
value <code><var>V</var></code>, an idiom similar to the following is used:
</p>
<div class="smallexample">
<pre class="smallexample">char x[((E) == (V) ? 1 : -1)];
</pre></div>

<p>In <samp>gcc.dg</samp> tests, <code>__typeof__</code> is sometimes used to make
assertions about the types of expressions.  See, for example,
<samp>gcc.dg/c99-condexpr-1.c</samp>.  The more subtle uses depend on the
exact rules for the types of conditional expressions in the C
standard; see, for example, <samp>gcc.dg/c99-intconst-1.c</samp>.
</p>
<p>It is useful to be able to test that optimizations are being made
properly.  This cannot be done in all cases, but it can be done where
the optimization will lead to code being optimized away (for example,
where flow analysis or alias analysis should show that certain code
cannot be called) or to functions not being called because they have
been expanded as built-in functions.  Such tests go in
<samp>gcc.c-torture/execute</samp>.  Where code should be optimized away, a
call to a nonexistent function such as <code>link_failure ()</code> may be
inserted; a definition
</p>
<div class="smallexample">
<pre class="smallexample">#ifndef __OPTIMIZE__
void
link_failure (void)
{
  abort ();
}
#endif
</pre></div>

<p>will also be needed so that linking still succeeds when the test is
run without optimization.  When all calls to a built-in function
should have been optimized and no calls to the non-built-in version of
the function should remain, that function may be defined as
<code>static</code> to call <code>abort ()</code> (although redeclaring a function
as static may not work on all targets).
</p>
<p>All testcases must be portable.  Target-specific testcases must have
appropriate code to avoid causing failures on unsupported systems;
unfortunately, the mechanisms for this differ by directory.
</p>
<p>FIXME: discuss non-C testsuites here.
</p>
<hr>
<a name="Test-Directives"></a>
<div class="header">
<p>
Next: <a href="#Ada-Tests" accesskey="n" rel="next">Ada Tests</a>, Previous: <a href="#Test-Idioms" accesskey="p" rel="prev">Test Idioms</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Directives-used-within-DejaGnu-tests"></a>
<h3 class="section">7.2 Directives used within DejaGnu tests</h3>

<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Directives" accesskey="1">Directives</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Syntax and descriptions of test directives.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Selectors" accesskey="2">Selectors</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Selecting targets to which a test applies.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Effective_002dTarget-Keywords" accesskey="3">Effective-Target Keywords</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Keywords describing target attributes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Add-Options" accesskey="4">Add Options</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Features for <code>dg-add-options</code>
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Require-Support" accesskey="5">Require Support</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Variants of <code>dg-require-<var>support</var></code>
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Final-Actions" accesskey="6">Final Actions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Commands for use in <code>dg-final</code>
</td></tr>
</table>

<hr>
<a name="Directives"></a>
<div class="header">
<p>
Next: <a href="#Selectors" accesskey="n" rel="next">Selectors</a>, Up: <a href="#Test-Directives" accesskey="u" rel="up">Test Directives</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Syntax-and-Descriptions-of-test-directives"></a>
<h4 class="subsection">7.2.1 Syntax and Descriptions of test directives</h4>

<p>Test directives appear within comments in a test source file and begin
with <code>dg-</code>.  Some of these are defined within DejaGnu and others
are local to the GCC testsuite.
</p>
<p>The order in which test directives appear in a test can be important:
directives local to GCC sometimes override information used by the
DejaGnu directives, which know nothing about the GCC directives, so the
DejaGnu directives must precede GCC directives.
</p>
<p>Several test directives include selectors (see <a href="#Selectors">Selectors</a>)
which are usually preceded by the keyword <code>target</code> or <code>xfail</code>.
</p>
<a name="Specify-how-to-build-the-test"></a>
<h4 class="subsubsection">7.2.1.1 Specify how to build the test</h4>

<dl compact="compact">
<dt><code>{ dg-do <var>do-what-keyword</var> [{ target/xfail <var>selector</var> }] }</code></dt>
<dd><p><var>do-what-keyword</var> specifies how the test is compiled and whether
it is executed.  It is one of:
</p>
<dl compact="compact">
<dt><code>preprocess</code></dt>
<dd><p>Compile with <samp>-E</samp> to run only the preprocessor.
</p></dd>
<dt><code>compile</code></dt>
<dd><p>Compile with <samp>-S</samp> to produce an assembly code file.
</p></dd>
<dt><code>assemble</code></dt>
<dd><p>Compile with <samp>-c</samp> to produce a relocatable object file.
</p></dd>
<dt><code>link</code></dt>
<dd><p>Compile, assemble, and link to produce an executable file.
</p></dd>
<dt><code>run</code></dt>
<dd><p>Produce and run an executable file, which is expected to return
an exit code of 0.
</p></dd>
</dl>

<p>The default is <code>compile</code>.  That can be overridden for a set of
tests by redefining <code>dg-do-what-default</code> within the <code>.exp</code>
file for those tests.
</p>
<p>If the directive includes the optional &lsquo;<samp>{ target <var>selector</var> }</samp>&rsquo;
then the test is skipped unless the target system matches the
<var>selector</var>.
</p>
<p>If <var>do-what-keyword</var> is <code>run</code> and the directive includes
the optional &lsquo;<samp>{ xfail <var>selector</var> }</samp>&rsquo; and the selector is met
then the test is expected to fail.  The <code>xfail</code> clause is ignored
for other values of <var>do-what-keyword</var>; those tests can use
directive <code>dg-xfail-if</code>.
</p></dd>
</dl>

<a name="Specify-additional-compiler-options"></a>
<h4 class="subsubsection">7.2.1.2 Specify additional compiler options</h4>

<dl compact="compact">
<dt><code>{ dg-options <var>options</var> [{ target <var>selector</var> }] }</code></dt>
<dd><p>This DejaGnu directive provides a list of compiler options, to be used
if the target system matches <var>selector</var>, that replace the default
options used for this set of tests.
</p>
</dd>
<dt><code>{ dg-add-options <var>feature</var> &hellip; }</code></dt>
<dd><p>Add any compiler options that are needed to access certain features.
This directive does nothing on targets that enable the features by
default, or that don&rsquo;t provide them at all.  It must come after
all <code>dg-options</code> directives.
For supported values of <var>feature</var> see <a href="#Add-Options">Add Options</a>.
</p>
</dd>
<dt><code>{ dg-additional-options <var>options</var> [{ target <var>selector</var> }] }</code></dt>
<dd><p>This directive provides a list of compiler options, to be used
if the target system matches <var>selector</var>, that are added to the default
options used for this set of tests.
</p></dd>
</dl>

<a name="Modify-the-test-timeout-value"></a>
<h4 class="subsubsection">7.2.1.3 Modify the test timeout value</h4>

<p>The normal timeout limit, in seconds, is found by searching the
following in order:
</p>
<ul>
<li> the value defined by an earlier <code>dg-timeout</code> directive in
the test

</li><li> variable <var>tool_timeout</var> defined by the set of tests

</li><li> <var>gcc</var>,<var>timeout</var> set in the target board

</li><li> 300
</li></ul>

<dl compact="compact">
<dt><code>{ dg-timeout <var>n</var> [{target <var>selector</var> }] }</code></dt>
<dd><p>Set the time limit for the compilation and for the execution of the test
to the specified number of seconds.
</p>
</dd>
<dt><code>{ dg-timeout-factor <var>x</var> [{ target <var>selector</var> }] }</code></dt>
<dd><p>Multiply the normal time limit for compilation and execution of the test
by the specified floating-point factor.
</p></dd>
</dl>

<a name="Skip-a-test-for-some-targets"></a>
<h4 class="subsubsection">7.2.1.4 Skip a test for some targets</h4>

<dl compact="compact">
<dt><code>{ dg-skip-if <var>comment</var> { <var>selector</var> } [{ <var>include-opts</var> } [{ <var>exclude-opts</var> }]] }</code></dt>
<dd><p>Arguments <var>include-opts</var> and <var>exclude-opts</var> are lists in which
each element is a string of zero or more GCC options.
Skip the test if all of the following conditions are met:
</p><ul>
<li> the test system is included in <var>selector</var>

</li><li> for at least one of the option strings in <var>include-opts</var>,
every option from that string is in the set of options with which
the test would be compiled; use &lsquo;<samp>&quot;*&quot;</samp>&rsquo; for an <var>include-opts</var> list
that matches any options; that is the default if <var>include-opts</var> is
not specified

</li><li> for each of the option strings in <var>exclude-opts</var>, at least one
option from that string is not in the set of options with which the test
would be compiled; use &lsquo;<samp>&quot;&quot;</samp>&rsquo; for an empty <var>exclude-opts</var> list;
that is the default if <var>exclude-opts</var> is not specified
</li></ul>

<p>For example, to skip a test if option <code>-Os</code> is present:
</p>
<div class="smallexample">
<pre class="smallexample">/* { dg-skip-if &quot;&quot; { *-*-* }  { &quot;-Os&quot; } { &quot;&quot; } } */
</pre></div>

<p>To skip a test if both options <code>-O2</code> and <code>-g</code> are present:
</p>
<div class="smallexample">
<pre class="smallexample">/* { dg-skip-if &quot;&quot; { *-*-* }  { &quot;-O2 -g&quot; } { &quot;&quot; } } */
</pre></div>

<p>To skip a test if either <code>-O2</code> or <code>-O3</code> is present:
</p>
<div class="smallexample">
<pre class="smallexample">/* { dg-skip-if &quot;&quot; { *-*-* }  { &quot;-O2&quot; &quot;-O3&quot; } { &quot;&quot; } } */
</pre></div>

<p>To skip a test unless option <code>-Os</code> is present:
</p>
<div class="smallexample">
<pre class="smallexample">/* { dg-skip-if &quot;&quot; { *-*-* }  { &quot;*&quot; } { &quot;-Os&quot; } } */
</pre></div>

<p>To skip a test if either <code>-O2</code> or <code>-O3</code> is used with <code>-g</code>
but not if <code>-fpic</code> is also present:
</p>
<div class="smallexample">
<pre class="smallexample">/* { dg-skip-if &quot;&quot; { *-*-* }  { &quot;-O2 -g&quot; &quot;-O3 -g&quot; } { &quot;-fpic&quot; } } */
</pre></div>

</dd>
<dt><code>{ dg-require-effective-target <var>keyword</var> [{ <var>selector</var> }] }</code></dt>
<dd><p>Skip the test if the test target, including current multilib flags,
is not covered by the effective-target keyword.
If the directive includes the optional &lsquo;<samp>{ <var>selector</var> }</samp>&rsquo;
then the effective-target test is only performed if the target system
matches the <var>selector</var>.
This directive must appear after any <code>dg-do</code> directive in the test
and before any <code>dg-additional-sources</code> directive.
See <a href="#Effective_002dTarget-Keywords">Effective-Target Keywords</a>.
</p>
</dd>
<dt><code>{ dg-require-<var>support</var> args }</code></dt>
<dd><p>Skip the test if the target does not provide the required support.
These directives must appear after any <code>dg-do</code> directive in the test
and before any <code>dg-additional-sources</code> directive.
They require at least one argument, which can be an empty string if the
specific procedure does not examine the argument.
See <a href="#Require-Support">Require Support</a>, for a complete list of these directives.
</p></dd>
</dl>

<a name="Expect-a-test-to-fail-for-some-targets"></a>
<h4 class="subsubsection">7.2.1.5 Expect a test to fail for some targets</h4>

<dl compact="compact">
<dt><code>{ dg-xfail-if <var>comment</var> { <var>selector</var> } [{ <var>include-opts</var> } [{ <var>exclude-opts</var> }]] }</code></dt>
<dd><p>Expect the test to fail if the conditions (which are the same as for
<code>dg-skip-if</code>) are met.  This does not affect the execute step.
</p>
</dd>
<dt><code>{ dg-xfail-run-if <var>comment</var> { <var>selector</var> } [{ <var>include-opts</var> } [{ <var>exclude-opts</var> }]] }</code></dt>
<dd><p>Expect the execute step of a test to fail if the conditions (which are
the same as for <code>dg-skip-if</code>) are met.
</p></dd>
</dl>

<a name="Expect-the-test-executable-to-fail"></a>
<h4 class="subsubsection">7.2.1.6 Expect the test executable to fail</h4>

<dl compact="compact">
<dt><code>{ dg-shouldfail <var>comment</var> [{ <var>selector</var> } [{ <var>include-opts</var> } [{ <var>exclude-opts</var> }]]] }</code></dt>
<dd><p>Expect the test executable to return a nonzero exit status if the
conditions (which are the same as for <code>dg-skip-if</code>) are met.
</p></dd>
</dl>

<a name="Verify-compiler-messages"></a>
<h4 class="subsubsection">7.2.1.7 Verify compiler messages</h4>

<dl compact="compact">
<dt><code>{ dg-error <var>regexp</var> [<var>comment</var> [{ target/xfail <var>selector</var> } [<var>line</var>] }]] }</code></dt>
<dd><p>This DejaGnu directive appears on a source line that is expected to get
an error message, or else specifies the source line associated with the
message.  If there is no message for that line or if the text of that
message is not matched by <var>regexp</var> then the check fails and
<var>comment</var> is included in the <code>FAIL</code> message.  The check does
not look for the string &lsquo;<samp>error</samp>&rsquo; unless it is part of <var>regexp</var>.
</p>
</dd>
<dt><code>{ dg-warning <var>regexp</var> [<var>comment</var> [{ target/xfail <var>selector</var> } [<var>line</var>] }]] }</code></dt>
<dd><p>This DejaGnu directive appears on a source line that is expected to get
a warning message, or else specifies the source line associated with the
message.  If there is no message for that line or if the text of that
message is not matched by <var>regexp</var> then the check fails and
<var>comment</var> is included in the <code>FAIL</code> message.  The check does
not look for the string &lsquo;<samp>warning</samp>&rsquo; unless it is part of <var>regexp</var>.
</p>
</dd>
<dt><code>{ dg-message <var>regexp</var> [<var>comment</var> [{ target/xfail <var>selector</var> } [<var>line</var>] }]] }</code></dt>
<dd><p>The line is expected to get a message other than an error or warning.
If there is no message for that line or if the text of that message is
not matched by <var>regexp</var> then the check fails and <var>comment</var> is
included in the <code>FAIL</code> message.
</p>
</dd>
<dt><code>{ dg-bogus <var>regexp</var> [<var>comment</var> [{ target/xfail <var>selector</var> } [<var>line</var>] }]] }</code></dt>
<dd><p>This DejaGnu directive appears on a source line that should not get a
message matching <var>regexp</var>, or else specifies the source line
associated with the bogus message.  It is usually used with &lsquo;<samp>xfail</samp>&rsquo;
to indicate that the message is a known problem for a particular set of
targets.
</p>
</dd>
<dt><code>{ dg-excess-errors <var>comment</var> [{ target/xfail <var>selector</var> }] }</code></dt>
<dd><p>This DejaGnu directive indicates that the test is expected to fail due
to compiler messages that are not handled by &lsquo;<samp>dg-error</samp>&rsquo;,
&lsquo;<samp>dg-warning</samp>&rsquo; or &lsquo;<samp>dg-bogus</samp>&rsquo;.  For this directive &lsquo;<samp>xfail</samp>&rsquo;
has the same effect as &lsquo;<samp>target</samp>&rsquo;.
</p>
</dd>
<dt><code>{ dg-prune-output <var>regexp</var> }</code></dt>
<dd><p>Prune messages matching <var>regexp</var> from the test output.
</p></dd>
</dl>

<a name="Verify-output-of-the-test-executable"></a>
<h4 class="subsubsection">7.2.1.8 Verify output of the test executable</h4>

<dl compact="compact">
<dt><code>{ dg-output <var>regexp</var> [{ target/xfail <var>selector</var> }] }</code></dt>
<dd><p>This DejaGnu directive compares <var>regexp</var> to the combined output
that the test executable writes to <samp>stdout</samp> and <samp>stderr</samp>.
</p></dd>
</dl>

<a name="Specify-additional-files-for-a-test"></a>
<h4 class="subsubsection">7.2.1.9 Specify additional files for a test</h4>

<dl compact="compact">
<dt><code>{ dg-additional-files &quot;<var>filelist</var>&quot; }</code></dt>
<dd><p>Specify additional files, other than source files, that must be copied
to the system where the compiler runs.
</p>
</dd>
<dt><code>{ dg-additional-sources &quot;<var>filelist</var>&quot; }</code></dt>
<dd><p>Specify additional source files to appear in the compile line
following the main test file.
</p></dd>
</dl>

<a name="Add-checks-at-the-end-of-a-test"></a>
<h4 class="subsubsection">7.2.1.10 Add checks at the end of a test</h4>

<dl compact="compact">
<dt><code>{ dg-final { <var>local-directive</var> } }</code></dt>
<dd><p>This DejaGnu directive is placed within a comment anywhere in the
source file and is processed after the test has been compiled and run.
Multiple &lsquo;<samp>dg-final</samp>&rsquo; commands are processed in the order in which
they appear in the source file.  See <a href="#Final-Actions">Final Actions</a>, for a list
of directives that can be used within <code>dg-final</code>.
</p></dd>
</dl>

<hr>
<a name="Selectors"></a>
<div class="header">
<p>
Next: <a href="#Effective_002dTarget-Keywords" accesskey="n" rel="next">Effective-Target Keywords</a>, Previous: <a href="#Directives" accesskey="p" rel="prev">Directives</a>, Up: <a href="#Test-Directives" accesskey="u" rel="up">Test Directives</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Selecting-targets-to-which-a-test-applies"></a>
<h4 class="subsection">7.2.2 Selecting targets to which a test applies</h4>

<p>Several test directives include <var>selector</var>s to limit the targets
for which a test is run or to declare that a test is expected to fail
on particular targets.
</p>
<p>A selector is:
</p><ul>
<li> one or more target triplets, possibly including wildcard characters;
use &lsquo;<samp>*-*-*</samp>&rsquo; to match any target
</li><li> a single effective-target keyword (see <a href="#Effective_002dTarget-Keywords">Effective-Target Keywords</a>)
</li><li> a logical expression
</li></ul>

<p>Depending on the context, the selector specifies whether a test is
skipped and reported as unsupported or is expected to fail.  A context
that allows either &lsquo;<samp>target</samp>&rsquo; or &lsquo;<samp>xfail</samp>&rsquo; also allows
&lsquo;<samp>{ target <var>selector1</var> xfail <var>selector2</var> }</samp>&rsquo;
to skip the test for targets that don&rsquo;t match <var>selector1</var> and the
test to fail for targets that match <var>selector2</var>.
</p>
<p>A selector expression appears within curly braces and uses a single
logical operator: one of &lsquo;<samp>!</samp>&rsquo;, &lsquo;<samp>&amp;&amp;</samp>&rsquo;, or &lsquo;<samp>||</samp>&rsquo;.  An
operand is another selector expression, an effective-target keyword,
a single target triplet, or a list of target triplets within quotes or
curly braces.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">{ target { ! &quot;hppa*-*-* ia64*-*-*&quot; } }
{ target { powerpc*-*-* &amp;&amp; lp64 } }
{ xfail { lp64 || vect_no_align } }
</pre></div>

<hr>
<a name="Effective_002dTarget-Keywords"></a>
<div class="header">
<p>
Next: <a href="#Add-Options" accesskey="n" rel="next">Add Options</a>, Previous: <a href="#Selectors" accesskey="p" rel="prev">Selectors</a>, Up: <a href="#Test-Directives" accesskey="u" rel="up">Test Directives</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Keywords-describing-target-attributes"></a>
<h4 class="subsection">7.2.3 Keywords describing target attributes</h4>

<p>Effective-target keywords identify sets of targets that support
particular functionality.  They are used to limit tests to be run only
for particular targets, or to specify that particular sets of targets
are expected to fail some tests.
</p>
<p>Effective-target keywords are defined in <samp>lib/target-supports.exp</samp> in
the GCC testsuite, with the exception of those that are documented as
being local to a particular test directory.
</p>
<p>The &lsquo;<samp>effective target</samp>&rsquo; takes into account all of the compiler options
with which the test will be compiled, including the multilib options.
By convention, keywords ending in <code>_nocache</code> can also include options
specified for the particular test in an earlier <code>dg-options</code> or
<code>dg-add-options</code> directive.
</p>
<a name="Data-type-sizes"></a>
<h4 class="subsubsection">7.2.3.1 Data type sizes</h4>

<dl compact="compact">
<dt><code>ilp32</code></dt>
<dd><p>Target has 32-bit <code>int</code>, <code>long</code>, and pointers.
</p>
</dd>
<dt><code>lp64</code></dt>
<dd><p>Target has 32-bit <code>int</code>, 64-bit <code>long</code> and pointers.
</p>
</dd>
<dt><code>llp64</code></dt>
<dd><p>Target has 32-bit <code>int</code> and <code>long</code>, 64-bit <code>long long</code>
and pointers.
</p>
</dd>
<dt><code>double64</code></dt>
<dd><p>Target has 64-bit <code>double</code>.
</p>
</dd>
<dt><code>double64plus</code></dt>
<dd><p>Target has <code>double</code> that is 64 bits or longer.
</p>
</dd>
<dt><code>longdouble128</code></dt>
<dd><p>Target has 128-bit <code>long double</code>.
</p>
</dd>
<dt><code>int32plus</code></dt>
<dd><p>Target has <code>int</code> that is at 32 bits or longer.
</p>
</dd>
<dt><code>int16</code></dt>
<dd><p>Target has <code>int</code> that is 16 bits or shorter.
</p>
</dd>
<dt><code>long_neq_int</code></dt>
<dd><p>Target has <code>int</code> and <code>long</code> with different sizes.
</p>
</dd>
<dt><code>large_double</code></dt>
<dd><p>Target supports <code>double</code> that is longer than <code>float</code>.
</p>
</dd>
<dt><code>large_long_double</code></dt>
<dd><p>Target supports <code>long double</code> that is longer than <code>double</code>.
</p>
</dd>
<dt><code>ptr32plus</code></dt>
<dd><p>Target has pointers that are 32 bits or longer.
</p>
</dd>
<dt><code>size32plus</code></dt>
<dd><p>Target supports array and structure sizes that are 32 bits or longer.
</p>
</dd>
<dt><code>4byte_wchar_t</code></dt>
<dd><p>Target has <code>wchar_t</code> that is at least 4 bytes.
</p></dd>
</dl>

<a name="Fortran_002dspecific-attributes"></a>
<h4 class="subsubsection">7.2.3.2 Fortran-specific attributes</h4>

<dl compact="compact">
<dt><code>fortran_integer_16</code></dt>
<dd><p>Target supports Fortran <code>integer</code> that is 16 bytes or longer.
</p>
</dd>
<dt><code>fortran_large_int</code></dt>
<dd><p>Target supports Fortran <code>integer</code> kinds larger than <code>integer(8)</code>.
</p>
</dd>
<dt><code>fortran_large_real</code></dt>
<dd><p>Target supports Fortran <code>real</code> kinds larger than <code>real(8)</code>.
</p></dd>
</dl>

<a name="Vector_002dspecific-attributes"></a>
<h4 class="subsubsection">7.2.3.3 Vector-specific attributes</h4>

<dl compact="compact">
<dt><code>vect_condition</code></dt>
<dd><p>Target supports vector conditional operations.
</p>
</dd>
<dt><code>vect_double</code></dt>
<dd><p>Target supports hardware vectors of <code>double</code>.
</p>
</dd>
<dt><code>vect_float</code></dt>
<dd><p>Target supports hardware vectors of <code>float</code>.
</p>
</dd>
<dt><code>vect_int</code></dt>
<dd><p>Target supports hardware vectors of <code>int</code>.
</p>
</dd>
<dt><code>vect_long</code></dt>
<dd><p>Target supports hardware vectors of <code>long</code>.
</p>
</dd>
<dt><code>vect_long_long</code></dt>
<dd><p>Target supports hardware vectors of <code>long long</code>.
</p>
</dd>
<dt><code>vect_aligned_arrays</code></dt>
<dd><p>Target aligns arrays to vector alignment boundary.
</p>
</dd>
<dt><code>vect_hw_misalign</code></dt>
<dd><p>Target supports a vector misalign access.
</p>
</dd>
<dt><code>vect_no_align</code></dt>
<dd><p>Target does not support a vector alignment mechanism.
</p>
</dd>
<dt><code>vect_no_int_max</code></dt>
<dd><p>Target does not support a vector max instruction on <code>int</code>.
</p>
</dd>
<dt><code>vect_no_int_add</code></dt>
<dd><p>Target does not support a vector add instruction on <code>int</code>.
</p>
</dd>
<dt><code>vect_no_bitwise</code></dt>
<dd><p>Target does not support vector bitwise instructions.
</p>
</dd>
<dt><code>vect_char_mult</code></dt>
<dd><p>Target supports <code>vector char</code> multiplication.
</p>
</dd>
<dt><code>vect_short_mult</code></dt>
<dd><p>Target supports <code>vector short</code> multiplication.
</p>
</dd>
<dt><code>vect_int_mult</code></dt>
<dd><p>Target supports <code>vector int</code> multiplication.
</p>
</dd>
<dt><code>vect_extract_even_odd</code></dt>
<dd><p>Target supports vector even/odd element extraction.
</p>
</dd>
<dt><code>vect_extract_even_odd_wide</code></dt>
<dd><p>Target supports vector even/odd element extraction of vectors with elements
<code>SImode</code> or larger.
</p>
</dd>
<dt><code>vect_interleave</code></dt>
<dd><p>Target supports vector interleaving.
</p>
</dd>
<dt><code>vect_strided</code></dt>
<dd><p>Target supports vector interleaving and extract even/odd.
</p>
</dd>
<dt><code>vect_strided_wide</code></dt>
<dd><p>Target supports vector interleaving and extract even/odd for wide
element types.
</p>
</dd>
<dt><code>vect_perm</code></dt>
<dd><p>Target supports vector permutation.
</p>
</dd>
<dt><code>vect_shift</code></dt>
<dd><p>Target supports a hardware vector shift operation.
</p>
</dd>
<dt><code>vect_widen_sum_hi_to_si</code></dt>
<dd><p>Target supports a vector widening summation of <code>short</code> operands
into <code>int</code> results, or can promote (unpack) from <code>short</code>
to <code>int</code>.
</p>
</dd>
<dt><code>vect_widen_sum_qi_to_hi</code></dt>
<dd><p>Target supports a vector widening summation of <code>char</code> operands
into <code>short</code> results, or can promote (unpack) from <code>char</code>
to <code>short</code>.
</p>
</dd>
<dt><code>vect_widen_sum_qi_to_si</code></dt>
<dd><p>Target supports a vector widening summation of <code>char</code> operands
into <code>int</code> results.
</p>
</dd>
<dt><code>vect_widen_mult_qi_to_hi</code></dt>
<dd><p>Target supports a vector widening multiplication of <code>char</code> operands
into <code>short</code> results, or can promote (unpack) from <code>char</code> to
<code>short</code> and perform non-widening multiplication of <code>short</code>.
</p>
</dd>
<dt><code>vect_widen_mult_hi_to_si</code></dt>
<dd><p>Target supports a vector widening multiplication of <code>short</code> operands
into <code>int</code> results, or can promote (unpack) from <code>short</code> to
<code>int</code> and perform non-widening multiplication of <code>int</code>.
</p>
</dd>
<dt><code>vect_sdot_qi</code></dt>
<dd><p>Target supports a vector dot-product of <code>signed char</code>.
</p>
</dd>
<dt><code>vect_udot_qi</code></dt>
<dd><p>Target supports a vector dot-product of <code>unsigned char</code>.
</p>
</dd>
<dt><code>vect_sdot_hi</code></dt>
<dd><p>Target supports a vector dot-product of <code>signed short</code>.
</p>
</dd>
<dt><code>vect_udot_hi</code></dt>
<dd><p>Target supports a vector dot-product of <code>unsigned short</code>.
</p>
</dd>
<dt><code>vect_pack_trunc</code></dt>
<dd><p>Target supports a vector demotion (packing) of <code>short</code> to <code>char</code>
and from <code>int</code> to <code>short</code> using modulo arithmetic.
</p>
</dd>
<dt><code>vect_unpack</code></dt>
<dd><p>Target supports a vector promotion (unpacking) of <code>char</code> to <code>short</code>
and from <code>char</code> to <code>int</code>.
</p>
</dd>
<dt><code>vect_intfloat_cvt</code></dt>
<dd><p>Target supports conversion from <code>signed int</code> to <code>float</code>.
</p>
</dd>
<dt><code>vect_uintfloat_cvt</code></dt>
<dd><p>Target supports conversion from <code>unsigned int</code> to <code>float</code>.
</p>
</dd>
<dt><code>vect_floatint_cvt</code></dt>
<dd><p>Target supports conversion from <code>float</code> to <code>signed int</code>.
</p>
</dd>
<dt><code>vect_floatuint_cvt</code></dt>
<dd><p>Target supports conversion from <code>float</code> to <code>unsigned int</code>.
</p></dd>
</dl>

<a name="Thread-Local-Storage-attributes"></a>
<h4 class="subsubsection">7.2.3.4 Thread Local Storage attributes</h4>

<dl compact="compact">
<dt><code>tls</code></dt>
<dd><p>Target supports thread-local storage.
</p>
</dd>
<dt><code>tls_native</code></dt>
<dd><p>Target supports native (rather than emulated) thread-local storage.
</p>
</dd>
<dt><code>tls_runtime</code></dt>
<dd><p>Test system supports executing TLS executables.
</p></dd>
</dl>

<a name="Decimal-floating-point-attributes"></a>
<h4 class="subsubsection">7.2.3.5 Decimal floating point attributes</h4>

<dl compact="compact">
<dt><code>dfp</code></dt>
<dd><p>Targets supports compiling decimal floating point extension to C.
</p>
</dd>
<dt><code>dfp_nocache</code></dt>
<dd><p>Including the options used to compile this particular test, the
target supports compiling decimal floating point extension to C.
</p>
</dd>
<dt><code>dfprt</code></dt>
<dd><p>Test system can execute decimal floating point tests.
</p>
</dd>
<dt><code>dfprt_nocache</code></dt>
<dd><p>Including the options used to compile this particular test, the
test system can execute decimal floating point tests.
</p>
</dd>
<dt><code>hard_dfp</code></dt>
<dd><p>Target generates decimal floating point instructions with current options.
</p></dd>
</dl>

<a name="ARM_002dspecific-attributes"></a>
<h4 class="subsubsection">7.2.3.6 ARM-specific attributes</h4>

<dl compact="compact">
<dt><code>arm32</code></dt>
<dd><p>ARM target generates 32-bit code.
</p>
</dd>
<dt><code>arm_eabi</code></dt>
<dd><p>ARM target adheres to the ABI for the ARM Architecture.
</p>
</dd>
<dt><code>arm_hf_eabi</code></dt>
<dd><p>ARM target adheres to the VFP and Advanced SIMD Register Arguments
variant of the ABI for the ARM Architecture (as selected with
<code>-mfloat-abi=hard</code>).
</p>
</dd>
<dt><code>arm_hard_vfp_ok</code></dt>
<dd><p>ARM target supports <code>-mfpu=vfp -mfloat-abi=hard</code>.
Some multilibs may be incompatible with these options.
</p>
</dd>
<dt><code>arm_iwmmxt_ok</code></dt>
<dd><p>ARM target supports <code>-mcpu=iwmmxt</code>.
Some multilibs may be incompatible with this option.
</p>
</dd>
<dt><code>arm_neon</code></dt>
<dd><p>ARM target supports generating NEON instructions.
</p>
</dd>
<dt><code>arm_neon_hw</code></dt>
<dd><p>Test system supports executing NEON instructions.
</p>
</dd>
<dt><code>arm_neonv2_hw</code></dt>
<dd><p>Test system supports executing NEON v2 instructions.
</p>
</dd>
<dt><code>arm_neon_ok</code></dt>
<dd><a name="arm_005fneon_005fok"></a><p>ARM Target supports <code>-mfpu=neon -mfloat-abi=softfp</code> or compatible
options.  Some multilibs may be incompatible with these options.
</p>
</dd>
<dt><code>arm_neonv2_ok</code></dt>
<dd><a name="arm_005fneonv2_005fok"></a><p>ARM Target supports <code>-mfpu=neon-vfpv4 -mfloat-abi=softfp</code> or compatible
options.  Some multilibs may be incompatible with these options.
</p>
</dd>
<dt><code>arm_neon_fp16_ok</code></dt>
<dd><a name="arm_005fneon_005ffp16_005fok"></a><p>ARM Target supports <code>-mfpu=neon-fp16 -mfloat-abi=softfp</code> or compatible
options.  Some multilibs may be incompatible with these options.
</p>
</dd>
<dt><code>arm_thumb1_ok</code></dt>
<dd><p>ARM target generates Thumb-1 code for <code>-mthumb</code>.
</p>
</dd>
<dt><code>arm_thumb2_ok</code></dt>
<dd><p>ARM target generates Thumb-2 code for <code>-mthumb</code>.
</p>
</dd>
<dt><code>arm_vfp_ok</code></dt>
<dd><p>ARM target supports <code>-mfpu=vfp -mfloat-abi=softfp</code>.
Some multilibs may be incompatible with these options.
</p>
</dd>
<dt><code>arm_v8_vfp_ok</code></dt>
<dd><p>ARM target supports <code>-mfpu=fp-armv8 -mfloat-abi=softfp</code>.
Some multilibs may be incompatible with these options.
</p>
</dd>
<dt><code>arm_v8_neon_ok</code></dt>
<dd><p>ARM target supports <code>-mfpu=neon-fp-armv8 -mfloat-abi=softfp</code>.
Some multilibs may be incompatible with these options.
</p>
</dd>
<dt><code>arm_prefer_ldrd_strd</code></dt>
<dd><p>ARM target prefers <code>LDRD</code> and <code>STRD</code> instructions over
<code>LDM</code> and <code>STM</code> instructions.
</p>
</dd>
</dl>

<a name="MIPS_002dspecific-attributes"></a>
<h4 class="subsubsection">7.2.3.7 MIPS-specific attributes</h4>

<dl compact="compact">
<dt><code>mips64</code></dt>
<dd><p>MIPS target supports 64-bit instructions.
</p>
</dd>
<dt><code>nomips16</code></dt>
<dd><p>MIPS target does not produce MIPS16 code.
</p>
</dd>
<dt><code>mips16_attribute</code></dt>
<dd><p>MIPS target can generate MIPS16 code.
</p>
</dd>
<dt><code>mips_loongson</code></dt>
<dd><p>MIPS target is a Loongson-2E or -2F target using an ABI that supports
the Loongson vector modes.
</p>
</dd>
<dt><code>mips_newabi_large_long_double</code></dt>
<dd><p>MIPS target supports <code>long double</code> larger than <code>double</code>
when using the new ABI.
</p>
</dd>
<dt><code>mpaired_single</code></dt>
<dd><p>MIPS target supports <code>-mpaired-single</code>.
</p></dd>
</dl>

<a name="PowerPC_002dspecific-attributes"></a>
<h4 class="subsubsection">7.2.3.8 PowerPC-specific attributes</h4>

<dl compact="compact">
<dt><code>dfp_hw</code></dt>
<dd><p>PowerPC target supports executing hardware DFP instructions.
</p>
</dd>
<dt><code>p8vector_hw</code></dt>
<dd><p>PowerPC target supports executing VSX instructions (ISA 2.07).
</p>
</dd>
<dt><code>powerpc64</code></dt>
<dd><p>Test system supports executing 64-bit instructions.
</p>
</dd>
<dt><code>powerpc_altivec</code></dt>
<dd><p>PowerPC target supports AltiVec.
</p>
</dd>
<dt><code>powerpc_altivec_ok</code></dt>
<dd><p>PowerPC target supports <code>-maltivec</code>.
</p>
</dd>
<dt><code>powerpc_eabi_ok</code></dt>
<dd><p>PowerPC target supports <code>-meabi</code>.
</p>
</dd>
<dt><code>powerpc_elfv2</code></dt>
<dd><p>PowerPC target supports <code>-mabi=elfv2</code>.
</p>
</dd>
<dt><code>powerpc_fprs</code></dt>
<dd><p>PowerPC target supports floating-point registers.
</p>
</dd>
<dt><code>powerpc_hard_double</code></dt>
<dd><p>PowerPC target supports hardware double-precision floating-point.
</p>
</dd>
<dt><code>powerpc_htm_ok</code></dt>
<dd><p>PowerPC target supports <code>-mhtm</code>
</p>
</dd>
<dt><code>powerpc_p8vector_ok</code></dt>
<dd><p>PowerPC target supports <code>-mpower8-vector</code>
</p>
</dd>
<dt><code>powerpc_ppu_ok</code></dt>
<dd><p>PowerPC target supports <code>-mcpu=cell</code>.
</p>
</dd>
<dt><code>powerpc_spe</code></dt>
<dd><p>PowerPC target supports PowerPC SPE.
</p>
</dd>
<dt><code>powerpc_spe_nocache</code></dt>
<dd><p>Including the options used to compile this particular test, the
PowerPC target supports PowerPC SPE.
</p>
</dd>
<dt><code>powerpc_spu</code></dt>
<dd><p>PowerPC target supports PowerPC SPU.
</p>
</dd>
<dt><code>powerpc_vsx_ok</code></dt>
<dd><p>PowerPC target supports <code>-mvsx</code>.
</p>
</dd>
<dt><code>powerpc_405_nocache</code></dt>
<dd><p>Including the options used to compile this particular test, the
PowerPC target supports PowerPC 405.
</p>
</dd>
<dt><code>ppc_recip_hw</code></dt>
<dd><p>PowerPC target supports executing reciprocal estimate instructions.
</p>
</dd>
<dt><code>spu_auto_overlay</code></dt>
<dd><p>SPU target has toolchain that supports automatic overlay generation.
</p>
</dd>
<dt><code>vmx_hw</code></dt>
<dd><p>PowerPC target supports executing AltiVec instructions.
</p>
</dd>
<dt><code>vsx_hw</code></dt>
<dd><p>PowerPC target supports executing VSX instructions (ISA 2.06).
</p></dd>
</dl>

<a name="Other-hardware-attributes"></a>
<h4 class="subsubsection">7.2.3.9 Other hardware attributes</h4>

<dl compact="compact">
<dt><code>avx</code></dt>
<dd><p>Target supports compiling <code>avx</code> instructions.
</p>
</dd>
<dt><code>avx_runtime</code></dt>
<dd><p>Target supports the execution of <code>avx</code> instructions.
</p>
</dd>
<dt><code>cell_hw</code></dt>
<dd><p>Test system can execute AltiVec and Cell PPU instructions.
</p>
</dd>
<dt><code>coldfire_fpu</code></dt>
<dd><p>Target uses a ColdFire FPU.
</p>
</dd>
<dt><code>hard_float</code></dt>
<dd><p>Target supports FPU instructions.
</p>
</dd>
<dt><code>sse</code></dt>
<dd><p>Target supports compiling <code>sse</code> instructions.
</p>
</dd>
<dt><code>sse_runtime</code></dt>
<dd><p>Target supports the execution of <code>sse</code> instructions.
</p>
</dd>
<dt><code>sse2</code></dt>
<dd><p>Target supports compiling <code>sse2</code> instructions.
</p>
</dd>
<dt><code>sse2_runtime</code></dt>
<dd><p>Target supports the execution of <code>sse2</code> instructions.
</p>
</dd>
<dt><code>sync_char_short</code></dt>
<dd><p>Target supports atomic operations on <code>char</code> and <code>short</code>.
</p>
</dd>
<dt><code>sync_int_long</code></dt>
<dd><p>Target supports atomic operations on <code>int</code> and <code>long</code>.
</p>
</dd>
<dt><code>ultrasparc_hw</code></dt>
<dd><p>Test environment appears to run executables on a simulator that
accepts only <code>EM_SPARC</code> executables and chokes on <code>EM_SPARC32PLUS</code>
or <code>EM_SPARCV9</code> executables.
</p>
</dd>
<dt><code>vect_cmdline_needed</code></dt>
<dd><p>Target requires a command line argument to enable a SIMD instruction set.
</p></dd>
</dl>

<a name="Environment-attributes"></a>
<h4 class="subsubsection">7.2.3.10 Environment attributes</h4>

<dl compact="compact">
<dt><code>c</code></dt>
<dd><p>The language for the compiler under test is C.
</p>
</dd>
<dt><code>c++</code></dt>
<dd><p>The language for the compiler under test is C++.
</p>
</dd>
<dt><code>c99_runtime</code></dt>
<dd><p>Target provides a full C99 runtime.
</p>
</dd>
<dt><code>correct_iso_cpp_string_wchar_protos</code></dt>
<dd><p>Target <code>string.h</code> and <code>wchar.h</code> headers provide C++ required
overloads for <code>strchr</code> etc. functions.
</p>
</dd>
<dt><code>dummy_wcsftime</code></dt>
<dd><p>Target uses a dummy <code>wcsftime</code> function that always returns zero.
</p>
</dd>
<dt><code>fd_truncate</code></dt>
<dd><p>Target can truncate a file from a file descriptor, as used by
<samp>libgfortran/io/unix.c:fd_truncate</samp>; i.e. <code>ftruncate</code> or
<code>chsize</code>.
</p>
</dd>
<dt><code>freestanding</code></dt>
<dd><p>Target is &lsquo;<samp>freestanding</samp>&rsquo; as defined in section 4 of the C99 standard.
Effectively, it is a target which supports no extra headers or libraries
other than what is considered essential.
</p>
</dd>
<dt><code>init_priority</code></dt>
<dd><p>Target supports constructors with initialization priority arguments.
</p>
</dd>
<dt><code>inttypes_types</code></dt>
<dd><p>Target has the basic signed and unsigned types in <code>inttypes.h</code>.
This is for tests that GCC&rsquo;s notions of these types agree with those
in the header, as some systems have only <code>inttypes.h</code>.
</p>
</dd>
<dt><code>lax_strtofp</code></dt>
<dd><p>Target might have errors of a few ULP in string to floating-point
conversion functions and overflow is not always detected correctly by
those functions.
</p>
</dd>
<dt><code>mmap</code></dt>
<dd><p>Target supports <code>mmap</code>.
</p>
</dd>
<dt><code>newlib</code></dt>
<dd><p>Target supports Newlib.
</p>
</dd>
<dt><code>pow10</code></dt>
<dd><p>Target provides <code>pow10</code> function.
</p>
</dd>
<dt><code>pthread</code></dt>
<dd><p>Target can compile using <code>pthread.h</code> with no errors or warnings.
</p>
</dd>
<dt><code>pthread_h</code></dt>
<dd><p>Target has <code>pthread.h</code>.
</p>
</dd>
<dt><code>run_expensive_tests</code></dt>
<dd><p>Expensive testcases (usually those that consume excessive amounts of CPU
time) should be run on this target.  This can be enabled by setting the
<code>GCC_TEST_RUN_EXPENSIVE</code> environment variable to a non-empty string.
</p>
</dd>
<dt><code>simulator</code></dt>
<dd><p>Test system runs executables on a simulator (i.e. slowly) rather than
hardware (i.e. fast).
</p>
</dd>
<dt><code>stdint_types</code></dt>
<dd><p>Target has the basic signed and unsigned C types in <code>stdint.h</code>.
This will be obsolete when GCC ensures a working <code>stdint.h</code> for
all targets.
</p>
</dd>
<dt><code>trampolines</code></dt>
<dd><p>Target supports trampolines.
</p>
</dd>
<dt><code>uclibc</code></dt>
<dd><p>Target supports uClibc.
</p>
</dd>
<dt><code>unwrapped</code></dt>
<dd><p>Target does not use a status wrapper.
</p>
</dd>
<dt><code>vxworks_kernel</code></dt>
<dd><p>Target is a VxWorks kernel.
</p>
</dd>
<dt><code>vxworks_rtp</code></dt>
<dd><p>Target is a VxWorks RTP.
</p>
</dd>
<dt><code>wchar</code></dt>
<dd><p>Target supports wide characters.
</p></dd>
</dl>

<a name="Other-attributes"></a>
<h4 class="subsubsection">7.2.3.11 Other attributes</h4>

<dl compact="compact">
<dt><code>automatic_stack_alignment</code></dt>
<dd><p>Target supports automatic stack alignment.
</p>
</dd>
<dt><code>cxa_atexit</code></dt>
<dd><p>Target uses <code>__cxa_atexit</code>.
</p>
</dd>
<dt><code>default_packed</code></dt>
<dd><p>Target has packed layout of structure members by default.
</p>
</dd>
<dt><code>fgraphite</code></dt>
<dd><p>Target supports Graphite optimizations.
</p>
</dd>
<dt><code>fixed_point</code></dt>
<dd><p>Target supports fixed-point extension to C.
</p>
</dd>
<dt><code>fopenmp</code></dt>
<dd><p>Target supports OpenMP via <samp>-fopenmp</samp>.
</p>
</dd>
<dt><code>fpic</code></dt>
<dd><p>Target supports <samp>-fpic</samp> and <samp>-fPIC</samp>.
</p>
</dd>
<dt><code>freorder</code></dt>
<dd><p>Target supports <samp>-freorder-blocks-and-partition</samp>.
</p>
</dd>
<dt><code>fstack_protector</code></dt>
<dd><p>Target supports <samp>-fstack-protector</samp>.
</p>
</dd>
<dt><code>gas</code></dt>
<dd><p>Target uses GNU <code>as</code>.
</p>
</dd>
<dt><code>gc_sections</code></dt>
<dd><p>Target supports <samp>--gc-sections</samp>.
</p>
</dd>
<dt><code>gld</code></dt>
<dd><p>Target uses GNU <code>ld</code>.
</p>
</dd>
<dt><code>keeps_null_pointer_checks</code></dt>
<dd><p>Target keeps null pointer checks, either due to the use of
<samp>-fno-delete-null-pointer-checks</samp> or hardwired into the target.
</p>
</dd>
<dt><code>lto</code></dt>
<dd><p>Compiler has been configured to support link-time optimization (LTO).
</p>
</dd>
<dt><code>naked_functions</code></dt>
<dd><p>Target supports the <code>naked</code> function attribute.
</p>
</dd>
<dt><code>named_sections</code></dt>
<dd><p>Target supports named sections.
</p>
</dd>
<dt><code>natural_alignment_32</code></dt>
<dd><p>Target uses natural alignment (aligned to type size) for types of
32 bits or less.
</p>
</dd>
<dt><code>target_natural_alignment_64</code></dt>
<dd><p>Target uses natural alignment (aligned to type size) for types of
64 bits or less.
</p>
</dd>
<dt><code>nonpic</code></dt>
<dd><p>Target does not generate PIC by default.
</p>
</dd>
<dt><code>pcc_bitfield_type_matters</code></dt>
<dd><p>Target defines <code>PCC_BITFIELD_TYPE_MATTERS</code>.
</p>
</dd>
<dt><code>pe_aligned_commons</code></dt>
<dd><p>Target supports <samp>-mpe-aligned-commons</samp>.
</p>
</dd>
<dt><code>pie</code></dt>
<dd><p>Target supports <samp>-pie</samp>, <samp>-fpie</samp> and <samp>-fPIE</samp>.
</p>
</dd>
<dt><code>section_anchors</code></dt>
<dd><p>Target supports section anchors.
</p>
</dd>
<dt><code>short_enums</code></dt>
<dd><p>Target defaults to short enums.
</p>
</dd>
<dt><code>static</code></dt>
<dd><p>Target supports <samp>-static</samp>.
</p>
</dd>
<dt><code>static_libgfortran</code></dt>
<dd><p>Target supports statically linking &lsquo;<samp>libgfortran</samp>&rsquo;.
</p>
</dd>
<dt><code>string_merging</code></dt>
<dd><p>Target supports merging string constants at link time.
</p>
</dd>
<dt><code>ucn</code></dt>
<dd><p>Target supports compiling and assembling UCN.
</p>
</dd>
<dt><code>ucn_nocache</code></dt>
<dd><p>Including the options used to compile this particular test, the
target supports compiling and assembling UCN.
</p>
</dd>
<dt><code>unaligned_stack</code></dt>
<dd><p>Target does not guarantee that its <code>STACK_BOUNDARY</code> is greater than
or equal to the required vector alignment.
</p>
</dd>
<dt><code>vector_alignment_reachable</code></dt>
<dd><p>Vector alignment is reachable for types of 32 bits or less.
</p>
</dd>
<dt><code>vector_alignment_reachable_for_64bit</code></dt>
<dd><p>Vector alignment is reachable for types of 64 bits or less.
</p>
</dd>
<dt><code>wchar_t_char16_t_compatible</code></dt>
<dd><p>Target supports <code>wchar_t</code> that is compatible with <code>char16_t</code>.
</p>
</dd>
<dt><code>wchar_t_char32_t_compatible</code></dt>
<dd><p>Target supports <code>wchar_t</code> that is compatible with <code>char32_t</code>.
</p></dd>
</dl>

<a name="Local-to-tests-in-gcc_002etarget_002fi386"></a>
<h4 class="subsubsection">7.2.3.12 Local to tests in <code>gcc.target/i386</code></h4>

<dl compact="compact">
<dt><code>3dnow</code></dt>
<dd><p>Target supports compiling <code>3dnow</code> instructions.
</p>
</dd>
<dt><code>aes</code></dt>
<dd><p>Target supports compiling <code>aes</code> instructions.
</p>
</dd>
<dt><code>fma4</code></dt>
<dd><p>Target supports compiling <code>fma4</code> instructions.
</p>
</dd>
<dt><code>ms_hook_prologue</code></dt>
<dd><p>Target supports attribute <code>ms_hook_prologue</code>.
</p>
</dd>
<dt><code>pclmul</code></dt>
<dd><p>Target supports compiling <code>pclmul</code> instructions.
</p>
</dd>
<dt><code>sse3</code></dt>
<dd><p>Target supports compiling <code>sse3</code> instructions.
</p>
</dd>
<dt><code>sse4</code></dt>
<dd><p>Target supports compiling <code>sse4</code> instructions.
</p>
</dd>
<dt><code>sse4a</code></dt>
<dd><p>Target supports compiling <code>sse4a</code> instructions.
</p>
</dd>
<dt><code>ssse3</code></dt>
<dd><p>Target supports compiling <code>ssse3</code> instructions.
</p>
</dd>
<dt><code>vaes</code></dt>
<dd><p>Target supports compiling <code>vaes</code> instructions.
</p>
</dd>
<dt><code>vpclmul</code></dt>
<dd><p>Target supports compiling <code>vpclmul</code> instructions.
</p>
</dd>
<dt><code>xop</code></dt>
<dd><p>Target supports compiling <code>xop</code> instructions.
</p></dd>
</dl>

<a name="Local-to-tests-in-gcc_002etarget_002fspu_002fea"></a>
<h4 class="subsubsection">7.2.3.13 Local to tests in <code>gcc.target/spu/ea</code></h4>

<dl compact="compact">
<dt><code>ealib</code></dt>
<dd><p>Target <code>__ea</code> library functions are available.
</p></dd>
</dl>

<a name="Local-to-tests-in-gcc_002etest_002dframework"></a>
<h4 class="subsubsection">7.2.3.14 Local to tests in <code>gcc.test-framework</code></h4>

<dl compact="compact">
<dt><code>no</code></dt>
<dd><p>Always returns 0.
</p>
</dd>
<dt><code>yes</code></dt>
<dd><p>Always returns 1.
</p></dd>
</dl>

<hr>
<a name="Add-Options"></a>
<div class="header">
<p>
Next: <a href="#Require-Support" accesskey="n" rel="next">Require Support</a>, Previous: <a href="#Effective_002dTarget-Keywords" accesskey="p" rel="prev">Effective-Target Keywords</a>, Up: <a href="#Test-Directives" accesskey="u" rel="up">Test Directives</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Features-for-dg_002dadd_002doptions"></a>
<h4 class="subsection">7.2.4 Features for <code>dg-add-options</code></h4>

<p>The supported values of <var>feature</var> for directive <code>dg-add-options</code>
are:
</p>
<dl compact="compact">
<dt><code>arm_neon</code></dt>
<dd><p>NEON support.  Only ARM targets support this feature, and only then
in certain modes; see the <a href="#arm_005fneon_005fok">arm_neon_ok effective target
keyword</a>.
</p>
</dd>
<dt><code>arm_neon_fp16</code></dt>
<dd><p>NEON and half-precision floating point support.  Only ARM targets
support this feature, and only then in certain modes; see
the <a href="#arm_005fneon_005fok">arm_neon_fp16_ok effective target keyword</a>.
</p>
</dd>
<dt><code>bind_pic_locally</code></dt>
<dd><p>Add the target-specific flags needed to enable functions to bind
locally when using pic/PIC passes in the testsuite.
</p>
</dd>
<dt><code>c99_runtime</code></dt>
<dd><p>Add the target-specific flags needed to access the C99 runtime.
</p>
</dd>
<dt><code>ieee</code></dt>
<dd><p>Add the target-specific flags needed to enable full IEEE
compliance mode.
</p>
</dd>
<dt><code>mips16_attribute</code></dt>
<dd><p><code>mips16</code> function attributes.
Only MIPS targets support this feature, and only then in certain modes.
</p>
</dd>
<dt><code>tls</code></dt>
<dd><p>Add the target-specific flags needed to use thread-local storage.
</p></dd>
</dl>

<hr>
<a name="Require-Support"></a>
<div class="header">
<p>
Next: <a href="#Final-Actions" accesskey="n" rel="next">Final Actions</a>, Previous: <a href="#Add-Options" accesskey="p" rel="prev">Add Options</a>, Up: <a href="#Test-Directives" accesskey="u" rel="up">Test Directives</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Variants-of-dg_002drequire_002dsupport"></a>
<h4 class="subsection">7.2.5 Variants of <code>dg-require-<var>support</var></code></h4>

<p>A few of the <code>dg-require</code> directives take arguments.
</p>
<dl compact="compact">
<dt><code>dg-require-iconv <var>codeset</var></code></dt>
<dd><p>Skip the test if the target does not support iconv.  <var>codeset</var> is
the codeset to convert to.
</p>
</dd>
<dt><code>dg-require-profiling <var>profopt</var></code></dt>
<dd><p>Skip the test if the target does not support profiling with option
<var>profopt</var>.
</p>
</dd>
<dt><code>dg-require-visibility <var>vis</var></code></dt>
<dd><p>Skip the test if the target does not support the <code>visibility</code> attribute.
If <var>vis</var> is <code>&quot;&quot;</code>, support for <code>visibility(&quot;hidden&quot;)</code> is
checked, for <code>visibility(&quot;<var>vis</var>&quot;)</code> otherwise.
</p></dd>
</dl>

<p>The original <code>dg-require</code> directives were defined before there
was support for effective-target keywords.  The directives that do not
take arguments could be replaced with effective-target keywords.
</p>
<dl compact="compact">
<dt><code>dg-require-alias &quot;&quot;</code></dt>
<dd><p>Skip the test if the target does not support the &lsquo;<samp>alias</samp>&rsquo; attribute.
</p>
</dd>
<dt><code>dg-require-ascii-locale &quot;&quot;</code></dt>
<dd><p>Skip the test if the host does not support an ASCII locale.
</p>
</dd>
<dt><code>dg-require-compat-dfp &quot;&quot;</code></dt>
<dd><p>Skip this test unless both compilers in a <samp>compat</samp> testsuite
support decimal floating point.
</p>
</dd>
<dt><code>dg-require-cxa-atexit &quot;&quot;</code></dt>
<dd><p>Skip the test if the target does not support <code>__cxa_atexit</code>.
This is equivalent to <code>dg-require-effective-target cxa_atexit</code>.
</p>
</dd>
<dt><code>dg-require-dll &quot;&quot;</code></dt>
<dd><p>Skip the test if the target does not support DLL attributes.
</p>
</dd>
<dt><code>dg-require-fork &quot;&quot;</code></dt>
<dd><p>Skip the test if the target does not support <code>fork</code>.
</p>
</dd>
<dt><code>dg-require-gc-sections &quot;&quot;</code></dt>
<dd><p>Skip the test if the target&rsquo;s linker does not support the
<code>--gc-sections</code> flags.
This is equivalent to <code>dg-require-effective-target gc-sections</code>.
</p>
</dd>
<dt><code>dg-require-host-local &quot;&quot;</code></dt>
<dd><p>Skip the test if the host is remote, rather than the same as the build
system.  Some tests are incompatible with DejaGnu&rsquo;s handling of remote
hosts, which involves copying the source file to the host and compiling
it with a relative path and &quot;<code>-o a.out</code>&quot;.
</p>
</dd>
<dt><code>dg-require-mkfifo &quot;&quot;</code></dt>
<dd><p>Skip the test if the target does not support <code>mkfifo</code>.
</p>
</dd>
<dt><code>dg-require-named-sections &quot;&quot;</code></dt>
<dd><p>Skip the test is the target does not support named sections.
This is equivalent to <code>dg-require-effective-target named_sections</code>.
</p>
</dd>
<dt><code>dg-require-weak &quot;&quot;</code></dt>
<dd><p>Skip the test if the target does not support weak symbols.
</p>
</dd>
<dt><code>dg-require-weak-override &quot;&quot;</code></dt>
<dd><p>Skip the test if the target does not support overriding weak symbols.
</p></dd>
</dl>

<hr>
<a name="Final-Actions"></a>
<div class="header">
<p>
Previous: <a href="#Require-Support" accesskey="p" rel="prev">Require Support</a>, Up: <a href="#Test-Directives" accesskey="u" rel="up">Test Directives</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Commands-for-use-in-dg_002dfinal"></a>
<h4 class="subsection">7.2.6 Commands for use in <code>dg-final</code></h4>

<p>The GCC testsuite defines the following directives to be used within
<code>dg-final</code>.
</p>
<a name="Scan-a-particular-file"></a>
<h4 class="subsubsection">7.2.6.1 Scan a particular file</h4>

<dl compact="compact">
<dt><code>scan-file <var>filename</var> <var>regexp</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regexp</var> matches text in <var>filename</var>.
</p></dd>
<dt><code>scan-file-not <var>filename</var> <var>regexp</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regexp</var> does not match text in <var>filename</var>.
</p></dd>
<dt><code>scan-module <var>module</var> <var>regexp</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regexp</var> matches in Fortran module <var>module</var>.
</p></dd>
</dl>

<a name="Scan-the-assembly-output"></a>
<h4 class="subsubsection">7.2.6.2 Scan the assembly output</h4>

<dl compact="compact">
<dt><code>scan-assembler <var>regex</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> matches text in the test&rsquo;s assembler output.
</p>
</dd>
<dt><code>scan-assembler-not <var>regex</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> does not match text in the test&rsquo;s assembler output.
</p>
</dd>
<dt><code>scan-assembler-times <var>regex</var> <var>num</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> is matched exactly <var>num</var> times in the test&rsquo;s
assembler output.
</p>
</dd>
<dt><code>scan-assembler-dem <var>regex</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> matches text in the test&rsquo;s demangled assembler output.
</p>
</dd>
<dt><code>scan-assembler-dem-not <var>regex</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> does not match text in the test&rsquo;s demangled assembler
output.
</p>
</dd>
<dt><code>scan-hidden <var>symbol</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>symbol</var> is defined as a hidden symbol in the test&rsquo;s
assembly output.
</p>
</dd>
<dt><code>scan-not-hidden <var>symbol</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>symbol</var> is not defined as a hidden symbol in the test&rsquo;s
assembly output.
</p></dd>
</dl>

<a name="Scan-optimization-dump-files"></a>
<h4 class="subsubsection">7.2.6.3 Scan optimization dump files</h4>

<p>These commands are available for <var>kind</var> of <code>tree</code>, <code>rtl</code>,
and <code>ipa</code>.
</p>
<dl compact="compact">
<dt><code>scan-<var>kind</var>-dump <var>regex</var> <var>suffix</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> matches text in the dump file with suffix <var>suffix</var>.
</p>
</dd>
<dt><code>scan-<var>kind</var>-dump-not <var>regex</var> <var>suffix</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> does not match text in the dump file with suffix
<var>suffix</var>.
</p>
</dd>
<dt><code>scan-<var>kind</var>-dump-times <var>regex</var> <var>num</var> <var>suffix</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> is found exactly <var>num</var> times in the dump file
with suffix <var>suffix</var>.
</p>
</dd>
<dt><code>scan-<var>kind</var>-dump-dem <var>regex</var> <var>suffix</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> matches demangled text in the dump file with
suffix <var>suffix</var>.
</p>
</dd>
<dt><code>scan-<var>kind</var>-dump-dem-not <var>regex</var> <var>suffix</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if <var>regex</var> does not match demangled text in the dump file with
suffix <var>suffix</var>.
</p></dd>
</dl>

<a name="Verify-that-an-output-files-exists-or-not"></a>
<h4 class="subsubsection">7.2.6.4 Verify that an output files exists or not</h4>

<dl compact="compact">
<dt><code>output-exists [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if compiler output file exists.
</p>
</dd>
<dt><code>output-exists-not [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if compiler output file does not exist.
</p></dd>
</dl>

<a name="Check-for-LTO-tests"></a>
<h4 class="subsubsection">7.2.6.5 Check for LTO tests</h4>

<dl compact="compact">
<dt><code>scan-symbol <var>regexp</var> [{ target/xfail <var>selector</var> }]</code></dt>
<dd><p>Passes if the pattern is present in the final executable.
</p></dd>
</dl>

<a name="Checks-for-gcov-tests"></a>
<h4 class="subsubsection">7.2.6.6 Checks for <code>gcov</code> tests</h4>

<dl compact="compact">
<dt><code>run-gcov <var>sourcefile</var></code></dt>
<dd><p>Check line counts in <code>gcov</code> tests.
</p>
</dd>
<dt><code>run-gcov [branches] [calls] { <var>opts</var> <var>sourcefile</var> }</code></dt>
<dd><p>Check branch and/or call counts, in addition to line counts, in
<code>gcov</code> tests.
</p></dd>
</dl>

<a name="Clean-up-generated-test-files"></a>
<h4 class="subsubsection">7.2.6.7 Clean up generated test files</h4>

<dl compact="compact">
<dt><code>cleanup-coverage-files</code></dt>
<dd><p>Removes coverage data files generated for this test.
</p>
</dd>
<dt><code>cleanup-ipa-dump <var>suffix</var></code></dt>
<dd><p>Removes IPA dump files generated for this test.
</p>
</dd>
<dt><code>cleanup-modules &quot;<var>list-of-extra-modules</var>&quot;</code></dt>
<dd><p>Removes Fortran module files generated for this test, excluding the
module names listed in keep-modules.
Cleaning up module files is usually done automatically by the testsuite
by looking at the source files and removing the modules after the test
has been executed.
</p><div class="smallexample">
<pre class="smallexample">module MoD1
end module MoD1
module Mod2
end module Mod2
module moD3
end module moD3
module mod4
end module mod4
! { dg-final { cleanup-modules &quot;mod1 mod2&quot; } } ! redundant
! { dg-final { keep-modules &quot;mod3 mod4&quot; } }
</pre></div>

</dd>
<dt><code>keep-modules &quot;<var>list-of-modules-not-to-delete</var>&quot;</code></dt>
<dd><p>Whitespace separated list of module names that should not be deleted by
cleanup-modules.
If the list of modules is empty, all modules defined in this file are kept.
</p><div class="smallexample">
<pre class="smallexample">module maybe_unneeded
end module maybe_unneeded
module keep1
end module keep1
module keep2
end module keep2
! { dg-final { keep-modules &quot;keep1 keep2&quot; } } ! just keep these two
! { dg-final { keep-modules &quot;&quot; } } ! keep all
</pre></div>

</dd>
<dt><code>cleanup-profile-file</code></dt>
<dd><p>Removes profiling files generated for this test.
</p>
</dd>
<dt><code>cleanup-repo-files</code></dt>
<dd><p>Removes files generated for this test for <samp>-frepo</samp>.
</p>
</dd>
<dt><code>cleanup-rtl-dump <var>suffix</var></code></dt>
<dd><p>Removes RTL dump files generated for this test.
</p>
</dd>
<dt><code>cleanup-saved-temps</code></dt>
<dd><p>Removes files for the current test which were kept for <samp>-save-temps</samp>.
</p>
</dd>
<dt><code>cleanup-tree-dump <var>suffix</var></code></dt>
<dd><p>Removes tree dump files matching <var>suffix</var> which were generated for
this test.
</p></dd>
</dl>

<hr>
<a name="Ada-Tests"></a>
<div class="header">
<p>
Next: <a href="#C-Tests" accesskey="n" rel="next">C Tests</a>, Previous: <a href="#Test-Directives" accesskey="p" rel="prev">Test Directives</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Ada-Language-Testsuites"></a>
<h3 class="section">7.3 Ada Language Testsuites</h3>

<p>The Ada testsuite includes executable tests from the ACATS
testsuite, publicly available at
<a href="http://www.ada-auth.org/acats.html">http://www.ada-auth.org/acats.html</a>.
</p>
<p>These tests are integrated in the GCC testsuite in the
<samp>ada/acats</samp> directory, and
enabled automatically when running <code>make check</code>, assuming
the Ada language has been enabled when configuring GCC.
</p>
<p>You can also run the Ada testsuite independently, using
<code>make check-ada</code>, or run a subset of the tests by specifying which
chapter to run, e.g.:
</p>
<div class="smallexample">
<pre class="smallexample">$ make check-ada CHAPTERS=&quot;c3 c9&quot;
</pre></div>

<p>The tests are organized by directory, each directory corresponding to
a chapter of the Ada Reference Manual.  So for example, <samp>c9</samp> corresponds
to chapter 9, which deals with tasking features of the language.
</p>
<p>There is also an extra chapter called <samp>gcc</samp> containing a template for
creating new executable tests, although this is deprecated in favor of
the <samp>gnat.dg</samp> testsuite.
</p>
<p>The tests are run using two <code>sh</code> scripts: <samp>run_acats</samp> and
<samp>run_all.sh</samp>.  To run the tests using a simulator or a cross
target, see the small
customization section at the top of <samp>run_all.sh</samp>.
</p>
<p>These tests are run using the build tree: they can be run without doing
a <code>make install</code>.
</p>
<hr>
<a name="C-Tests"></a>
<div class="header">
<p>
Next: <a href="#libgcj-Tests" accesskey="n" rel="next">libgcj Tests</a>, Previous: <a href="#Ada-Tests" accesskey="p" rel="prev">Ada Tests</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="C-Language-Testsuites"></a>
<h3 class="section">7.4 C Language Testsuites</h3>

<p>GCC contains the following C language testsuites, in the
<samp>gcc/testsuite</samp> directory:
</p>
<dl compact="compact">
<dt><samp>gcc.dg</samp></dt>
<dd><p>This contains tests of particular features of the C compiler, using the
more modern &lsquo;<samp>dg</samp>&rsquo; harness.  Correctness tests for various compiler
features should go here if possible.
</p>
<p>Magic comments determine whether the file
is preprocessed, compiled, linked or run.  In these tests, error and warning
message texts are compared against expected texts or regular expressions
given in comments.  These tests are run with the options &lsquo;<samp>-ansi -pedantic</samp>&rsquo;
unless other options are given in the test.  Except as noted below they
are not run with multiple optimization options.
</p></dd>
<dt><samp>gcc.dg/compat</samp></dt>
<dd><p>This subdirectory contains tests for binary compatibility using
<samp>lib/compat.exp</samp>, which in turn uses the language-independent support
(see <a href="#compat-Testing">Support for testing binary compatibility</a>).
</p></dd>
<dt><samp>gcc.dg/cpp</samp></dt>
<dd><p>This subdirectory contains tests of the preprocessor.
</p></dd>
<dt><samp>gcc.dg/debug</samp></dt>
<dd><p>This subdirectory contains tests for debug formats.  Tests in this
subdirectory are run for each debug format that the compiler supports.
</p></dd>
<dt><samp>gcc.dg/format</samp></dt>
<dd><p>This subdirectory contains tests of the <samp>-Wformat</samp> format
checking.  Tests in this directory are run with and without
<samp>-DWIDE</samp>.
</p></dd>
<dt><samp>gcc.dg/noncompile</samp></dt>
<dd><p>This subdirectory contains tests of code that should not compile and
does not need any special compilation options.  They are run with
multiple optimization options, since sometimes invalid code crashes
the compiler with optimization.
</p></dd>
<dt><samp>gcc.dg/special</samp></dt>
<dd><p>FIXME: describe this.
</p>
</dd>
<dt><samp>gcc.c-torture</samp></dt>
<dd><p>This contains particular code fragments which have historically broken easily.
These tests are run with multiple optimization options, so tests for features
which only break at some optimization levels belong here.  This also contains
tests to check that certain optimizations occur.  It might be worthwhile to
separate the correctness tests cleanly from the code quality tests, but
it hasn&rsquo;t been done yet.
</p>
</dd>
<dt><samp>gcc.c-torture/compat</samp></dt>
<dd><p>FIXME: describe this.
</p>
<p>This directory should probably not be used for new tests.
</p></dd>
<dt><samp>gcc.c-torture/compile</samp></dt>
<dd><p>This testsuite contains test cases that should compile, but do not
need to link or run.  These test cases are compiled with several
different combinations of optimization options.  All warnings are
disabled for these test cases, so this directory is not suitable if
you wish to test for the presence or absence of compiler warnings.
While special options can be set, and tests disabled on specific
platforms, by the use of <samp>.x</samp> files, mostly these test cases
should not contain platform dependencies.  FIXME: discuss how defines
such as <code>NO_LABEL_VALUES</code> and <code>STACK_SIZE</code> are used.
</p></dd>
<dt><samp>gcc.c-torture/execute</samp></dt>
<dd><p>This testsuite contains test cases that should compile, link and run;
otherwise the same comments as for <samp>gcc.c-torture/compile</samp> apply.
</p></dd>
<dt><samp>gcc.c-torture/execute/ieee</samp></dt>
<dd><p>This contains tests which are specific to IEEE floating point.
</p></dd>
<dt><samp>gcc.c-torture/unsorted</samp></dt>
<dd><p>FIXME: describe this.
</p>
<p>This directory should probably not be used for new tests.
</p></dd>
<dt><samp>gcc.misc-tests</samp></dt>
<dd><p>This directory contains C tests that require special handling.  Some
of these tests have individual expect files, and others share
special-purpose expect files:
</p>
<dl compact="compact">
<dt><samp><code>bprob*.c</code></samp></dt>
<dd><p>Test <samp>-fbranch-probabilities</samp> using
<samp>gcc.misc-tests/bprob.exp</samp>, which
in turn uses the generic, language-independent framework
(see <a href="#profopt-Testing">Support for testing profile-directed
optimizations</a>).
</p>
</dd>
<dt><samp><code>gcov*.c</code></samp></dt>
<dd><p>Test <code>gcov</code> output using <samp>gcov.exp</samp>, which in turn uses the
language-independent support (see <a href="#gcov-Testing">Support for testing gcov</a>).
</p>
</dd>
<dt><samp><code>i386-pf-*.c</code></samp></dt>
<dd><p>Test i386-specific support for data prefetch using <samp>i386-prefetch.exp</samp>.
</p></dd>
</dl>

</dd>
<dt><samp>gcc.test-framework</samp></dt>
<dd><dl compact="compact">
<dt><samp><code>dg-*.c</code></samp></dt>
<dd><p>Test the testsuite itself using <samp>gcc.test-framework/test-framework.exp</samp>.
</p></dd>
</dl>

</dd>
</dl>

<p>FIXME: merge in <samp>testsuite/README.gcc</samp> and discuss the format of
test cases and magic comments more.
</p>
<hr>
<a name="libgcj-Tests"></a>
<div class="header">
<p>
Next: <a href="#LTO-Testing" accesskey="n" rel="next">LTO Testing</a>, Previous: <a href="#C-Tests" accesskey="p" rel="prev">C Tests</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-Java-library-testsuites_002e"></a>
<h3 class="section">7.5 The Java library testsuites.</h3>

<p>Runtime tests are executed via &lsquo;<samp>make check</samp>&rsquo; in the
<samp><var>target</var>/libjava/testsuite</samp> directory in the build
tree.  Additional runtime tests can be checked into this testsuite.
</p>
<p>Regression testing of the core packages in libgcj is also covered by the
Mauve testsuite.  The <a href="http://sourceware.org/mauve/">Mauve Project</a>
develops tests for the Java Class Libraries.  These tests are run as part
of libgcj testing by placing the Mauve tree within the libjava testsuite
sources at <samp>libjava/testsuite/libjava.mauve/mauve</samp>, or by specifying
the location of that tree when invoking &lsquo;<samp>make</samp>&rsquo;, as in
&lsquo;<samp>make MAUVEDIR=~/mauve check</samp>&rsquo;.
</p>
<p>To detect regressions, a mechanism in <samp>mauve.exp</samp> compares the
failures for a test run against the list of expected failures in
<samp>libjava/testsuite/libjava.mauve/xfails</samp> from the source hierarchy.
Update this file when adding new failing tests to Mauve, or when fixing
bugs in libgcj that had caused Mauve test failures.
</p>
<p>We encourage developers to contribute test cases to Mauve.
</p>
<hr>
<a name="LTO-Testing"></a>
<div class="header">
<p>
Next: <a href="#gcov-Testing" accesskey="n" rel="next">gcov Testing</a>, Previous: <a href="#libgcj-Tests" accesskey="p" rel="prev">libgcj Tests</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Support-for-testing-link_002dtime-optimizations"></a>
<h3 class="section">7.6 Support for testing link-time optimizations</h3>

<p>Tests for link-time optimizations usually require multiple source files
that are compiled separately, perhaps with different sets of options.
There are several special-purpose test directives used for these tests.
</p>
<dl compact="compact">
<dt><code>{ dg-lto-do <var>do-what-keyword</var> }</code></dt>
<dd><p><var>do-what-keyword</var> specifies how the test is compiled and whether
it is executed.  It is one of:
</p>
<dl compact="compact">
<dt><code>assemble</code></dt>
<dd><p>Compile with <samp>-c</samp> to produce a relocatable object file.
</p></dd>
<dt><code>link</code></dt>
<dd><p>Compile, assemble, and link to produce an executable file.
</p></dd>
<dt><code>run</code></dt>
<dd><p>Produce and run an executable file, which is expected to return
an exit code of 0.
</p></dd>
</dl>

<p>The default is <code>assemble</code>.  That can be overridden for a set of
tests by redefining <code>dg-do-what-default</code> within the <code>.exp</code>
file for those tests.
</p>
<p>Unlike <code>dg-do</code>, <code>dg-lto-do</code> does not support an optional
&lsquo;<samp>target</samp>&rsquo; or &lsquo;<samp>xfail</samp>&rsquo; list.  Use <code>dg-skip-if</code>,
<code>dg-xfail-if</code>, or <code>dg-xfail-run-if</code>.
</p>
</dd>
<dt><code>{ dg-lto-options { { <var>options</var> } [{ <var>options</var> }] } [{ target <var>selector</var> }]}</code></dt>
<dd><p>This directive provides a list of one or more sets of compiler options
to override <var>LTO_OPTIONS</var>.  Each test will be compiled and run with
each of these sets of options.
</p>
</dd>
<dt><code>{ dg-extra-ld-options <var>options</var> [{ target <var>selector</var> }]}</code></dt>
<dd><p>This directive adds <var>options</var> to the linker options used.
</p>
</dd>
<dt><code>{ dg-suppress-ld-options <var>options</var> [{ target <var>selector</var> }]}</code></dt>
<dd><p>This directive removes <var>options</var> from the set of linker options used.
</p></dd>
</dl>

<hr>
<a name="gcov-Testing"></a>
<div class="header">
<p>
Next: <a href="#profopt-Testing" accesskey="n" rel="next">profopt Testing</a>, Previous: <a href="#LTO-Testing" accesskey="p" rel="prev">LTO Testing</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Support-for-testing-gcov"></a>
<h3 class="section">7.7 Support for testing <code>gcov</code></h3>

<p>Language-independent support for testing <code>gcov</code>, and for checking
that branch profiling produces expected values, is provided by the
expect file <samp>lib/gcov.exp</samp>.  <code>gcov</code> tests also rely on procedures
in <samp>lib/gcc-dg.exp</samp> to compile and run the test program.  A typical
<code>gcov</code> test contains the following DejaGnu commands within comments:
</p>
<div class="smallexample">
<pre class="smallexample">{ dg-options &quot;-fprofile-arcs -ftest-coverage&quot; }
{ dg-do run { target native } }
{ dg-final { run-gcov sourcefile } }
</pre></div>

<p>Checks of <code>gcov</code> output can include line counts, branch percentages,
and call return percentages.  All of these checks are requested via
commands that appear in comments in the test&rsquo;s source file.
Commands to check line counts are processed by default.
Commands to check branch percentages and call return percentages are
processed if the <code>run-gcov</code> command has arguments <code>branches</code>
or <code>calls</code>, respectively.  For example, the following specifies
checking both, as well as passing <samp>-b</samp> to <code>gcov</code>:
</p>
<div class="smallexample">
<pre class="smallexample">{ dg-final { run-gcov branches calls { -b sourcefile } } }
</pre></div>

<p>A line count command appears within a comment on the source line
that is expected to get the specified count and has the form
<code>count(<var>cnt</var>)</code>.  A test should only check line counts for
lines that will get the same count for any architecture.
</p>
<p>Commands to check branch percentages (<code>branch</code>) and call
return percentages (<code>returns</code>) are very similar to each other.
A beginning command appears on or before the first of a range of
lines that will report the percentage, and the ending command
follows that range of lines.  The beginning command can include a
list of percentages, all of which are expected to be found within
the range.  A range is terminated by the next command of the same
kind.  A command <code>branch(end)</code> or <code>returns(end)</code> marks
the end of a range without starting a new one.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">if (i &gt; 10 &amp;&amp; j &gt; i &amp;&amp; j &lt; 20)  /* <span class="roman">branch(27 50 75)</span> */
                                /* <span class="roman">branch(end)</span> */
  foo (i, j);
</pre></div>

<p>For a call return percentage, the value specified is the
percentage of calls reported to return.  For a branch percentage,
the value is either the expected percentage or 100 minus that
value, since the direction of a branch can differ depending on the
target or the optimization level.
</p>
<p>Not all branches and calls need to be checked.  A test should not
check for branches that might be optimized away or replaced with
predicated instructions.  Don&rsquo;t check for calls inserted by the
compiler or ones that might be inlined or optimized away.
</p>
<p>A single test can check for combinations of line counts, branch
percentages, and call return percentages.  The command to check a
line count must appear on the line that will report that count, but
commands to check branch percentages and call return percentages can
bracket the lines that report them.
</p>
<hr>
<a name="profopt-Testing"></a>
<div class="header">
<p>
Next: <a href="#compat-Testing" accesskey="n" rel="next">compat Testing</a>, Previous: <a href="#gcov-Testing" accesskey="p" rel="prev">gcov Testing</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Support-for-testing-profile_002ddirected-optimizations"></a>
<h3 class="section">7.8 Support for testing profile-directed optimizations</h3>

<p>The file <samp>profopt.exp</samp> provides language-independent support for
checking correct execution of a test built with profile-directed
optimization.  This testing requires that a test program be built and
executed twice.  The first time it is compiled to generate profile
data, and the second time it is compiled to use the data that was
generated during the first execution.  The second execution is to
verify that the test produces the expected results.
</p>
<p>To check that the optimization actually generated better code, a
test can be built and run a third time with normal optimizations to
verify that the performance is better with the profile-directed
optimizations.  <samp>profopt.exp</samp> has the beginnings of this kind
of support.
</p>
<p><samp>profopt.exp</samp> provides generic support for profile-directed
optimizations.  Each set of tests that uses it provides information
about a specific optimization:
</p>
<dl compact="compact">
<dt><code>tool</code></dt>
<dd><p>tool being tested, e.g., <code>gcc</code>
</p>
</dd>
<dt><code>profile_option</code></dt>
<dd><p>options used to generate profile data
</p>
</dd>
<dt><code>feedback_option</code></dt>
<dd><p>options used to optimize using that profile data
</p>
</dd>
<dt><code>prof_ext</code></dt>
<dd><p>suffix of profile data files
</p>
</dd>
<dt><code>PROFOPT_OPTIONS</code></dt>
<dd><p>list of options with which to run each test, similar to the lists for
torture tests
</p>
</dd>
<dt><code>{ dg-final-generate { <var>local-directive</var> } }</code></dt>
<dd><p>This directive is similar to <code>dg-final</code>, but the
<var>local-directive</var> is run after the generation of profile data.
</p>
</dd>
<dt><code>{ dg-final-use { <var>local-directive</var> } }</code></dt>
<dd><p>The <var>local-directive</var> is run after the profile data have been
used.
</p></dd>
</dl>

<hr>
<a name="compat-Testing"></a>
<div class="header">
<p>
Next: <a href="#Torture-Tests" accesskey="n" rel="next">Torture Tests</a>, Previous: <a href="#profopt-Testing" accesskey="p" rel="prev">profopt Testing</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Support-for-testing-binary-compatibility"></a>
<h3 class="section">7.9 Support for testing binary compatibility</h3>

<p>The file <samp>compat.exp</samp> provides language-independent support for
binary compatibility testing.  It supports testing interoperability of
two compilers that follow the same ABI, or of multiple sets of
compiler options that should not affect binary compatibility.  It is
intended to be used for testsuites that complement ABI testsuites.
</p>
<p>A test supported by this framework has three parts, each in a
separate source file: a main program and two pieces that interact
with each other to split up the functionality being tested.
</p>
<dl compact="compact">
<dt><samp><var>testname</var>_main.<var>suffix</var></samp></dt>
<dd><p>Contains the main program, which calls a function in file
<samp><var>testname</var>_x.<var>suffix</var></samp>.
</p>
</dd>
<dt><samp><var>testname</var>_x.<var>suffix</var></samp></dt>
<dd><p>Contains at least one call to a function in
<samp><var>testname</var>_y.<var>suffix</var></samp>.
</p>
</dd>
<dt><samp><var>testname</var>_y.<var>suffix</var></samp></dt>
<dd><p>Shares data with, or gets arguments from,
<samp><var>testname</var>_x.<var>suffix</var></samp>.
</p></dd>
</dl>

<p>Within each test, the main program and one functional piece are
compiled by the GCC under test.  The other piece can be compiled by
an alternate compiler.  If no alternate compiler is specified,
then all three source files are all compiled by the GCC under test.
You can specify pairs of sets of compiler options.  The first element
of such a pair specifies options used with the GCC under test, and the
second element of the pair specifies options used with the alternate
compiler.  Each test is compiled with each pair of options.
</p>
<p><samp>compat.exp</samp> defines default pairs of compiler options.
These can be overridden by defining the environment variable
<code>COMPAT_OPTIONS</code> as:
</p>
<div class="smallexample">
<pre class="smallexample">COMPAT_OPTIONS=&quot;[list [list {<var>tst1</var>} {<var>alt1</var>}]
  &hellip;[list {<var>tstn</var>} {<var>altn</var>}]]&quot;
</pre></div>

<p>where <var>tsti</var> and <var>alti</var> are lists of options, with <var>tsti</var>
used by the compiler under test and <var>alti</var> used by the alternate
compiler.  For example, with
<code>[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]</code>,
the test is first built with <samp>-g -O0</samp> by the compiler under
test and with <samp>-O3</samp> by the alternate compiler.  The test is
built a second time using <samp>-fpic</samp> by the compiler under test
and <samp>-fPIC -O2</samp> by the alternate compiler.
</p>
<p>An alternate compiler is specified by defining an environment
variable to be the full pathname of an installed compiler; for C
define <code>ALT_CC_UNDER_TEST</code>, and for C++ define
<code>ALT_CXX_UNDER_TEST</code>.  These will be written to the
<samp>site.exp</samp> file used by DejaGnu.  The default is to build each
test with the compiler under test using the first of each pair of
compiler options from <code>COMPAT_OPTIONS</code>.  When
<code>ALT_CC_UNDER_TEST</code> or
<code>ALT_CXX_UNDER_TEST</code> is <code>same</code>, each test is built using
the compiler under test but with combinations of the options from
<code>COMPAT_OPTIONS</code>.
</p>
<p>To run only the C++ compatibility suite using the compiler under test
and another version of GCC using specific compiler options, do the
following from <samp><var>objdir</var>/gcc</samp>:
</p>
<div class="smallexample">
<pre class="smallexample">rm site.exp
make -k \
  ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \
  COMPAT_OPTIONS=&quot;<var>lists as shown above</var>&quot; \
  check-c++ \
  RUNTESTFLAGS=&quot;compat.exp&quot;
</pre></div>

<p>A test that fails when the source files are compiled with different
compilers, but passes when the files are compiled with the same
compiler, demonstrates incompatibility of the generated code or
runtime support.  A test that fails for the alternate compiler but
passes for the compiler under test probably tests for a bug that was
fixed in the compiler under test but is present in the alternate
compiler.
</p>
<p>The binary compatibility tests support a small number of test framework
commands that appear within comments in a test file.
</p>
<dl compact="compact">
<dt><code>dg-require-*</code></dt>
<dd><p>These commands can be used in <samp><var>testname</var>_main.<var>suffix</var></samp>
to skip the test if specific support is not available on the target.
</p>
</dd>
<dt><code>dg-options</code></dt>
<dd><p>The specified options are used for compiling this particular source
file, appended to the options from <code>COMPAT_OPTIONS</code>.  When this
command appears in <samp><var>testname</var>_main.<var>suffix</var></samp> the options
are also used to link the test program.
</p>
</dd>
<dt><code>dg-xfail-if</code></dt>
<dd><p>This command can be used in a secondary source file to specify that
compilation is expected to fail for particular options on particular
targets.
</p></dd>
</dl>

<hr>
<a name="Torture-Tests"></a>
<div class="header">
<p>
Previous: <a href="#compat-Testing" accesskey="p" rel="prev">compat Testing</a>, Up: <a href="#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Support-for-torture-testing-using-multiple-options"></a>
<h3 class="section">7.10 Support for torture testing using multiple options</h3>

<p>Throughout the compiler testsuite there are several directories whose
tests are run multiple times, each with a different set of options.
These are known as torture tests.
<samp>lib/torture-options.exp</samp> defines procedures to
set up these lists:
</p>
<dl compact="compact">
<dt><code>torture-init</code></dt>
<dd><p>Initialize use of torture lists.
</p></dd>
<dt><code>set-torture-options</code></dt>
<dd><p>Set lists of torture options to use for tests with and without loops.
Optionally combine a set of torture options with a set of other
options, as is done with Objective-C runtime options.
</p></dd>
<dt><code>torture-finish</code></dt>
<dd><p>Finalize use of torture lists.
</p></dd>
</dl>

<p>The <samp>.exp</samp> file for a set of tests that use torture options must
include calls to these three procedures if:
</p>
<ul>
<li> It calls <code>gcc-dg-runtest</code> and overrides <var>DG_TORTURE_OPTIONS</var>.

</li><li> It calls <var>${tool}</var><code>-torture</code> or
<var>${tool}</var><code>-torture-execute</code>, where <var>tool</var> is <code>c</code>,
<code>fortran</code>, or <code>objc</code>.

</li><li> It calls <code>dg-pch</code>.
</li></ul>

<p>It is not necessary for a <samp>.exp</samp> file that calls <code>gcc-dg-runtest</code>
to call the torture procedures if the tests should use the list in
<var>DG_TORTURE_OPTIONS</var> defined in <samp>gcc-dg.exp</samp>.
</p>
<p>Most uses of torture options can override the default lists by defining
<var>TORTURE_OPTIONS</var> or add to the default list by defining
<var>ADDITIONAL_TORTURE_OPTIONS</var>.  Define these in a <samp>.dejagnurc</samp>
file or add them to the <samp>site.exp</samp> file; for example
</p>
<div class="smallexample">
<pre class="smallexample">set ADDITIONAL_TORTURE_OPTIONS  [list \
  { -O2 -ftree-loop-linear } \
  { -O2 -fpeel-loops } ]
</pre></div>

<hr>
<a name="Options"></a>
<div class="header">
<p>
Next: <a href="#Passes" accesskey="n" rel="next">Passes</a>, Previous: <a href="#Testsuites" accesskey="p" rel="prev">Testsuites</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Option-specification-files"></a>
<h2 class="chapter">8 Option specification files</h2>
<a name="index-option-specification-files"></a>
<a name="index-optc_002dgen_002eawk"></a>

<p>Most GCC command-line options are described by special option
definition files, the names of which conventionally end in
<code>.opt</code>.  This chapter describes the format of these files.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Option-file-format" accesskey="1">Option file format</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The general layout of the files
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Option-properties" accesskey="2">Option properties</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Supported option properties
</td></tr>
</table>

<hr>
<a name="Option-file-format"></a>
<div class="header">
<p>
Next: <a href="#Option-properties" accesskey="n" rel="next">Option properties</a>, Up: <a href="#Options" accesskey="u" rel="up">Options</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Option-file-format-1"></a>
<h3 class="section">8.1 Option file format</h3>

<p>Option files are a simple list of records in which each field occupies
its own line and in which the records themselves are separated by
blank lines.  Comments may appear on their own line anywhere within
the file and are preceded by semicolons.  Whitespace is allowed before
the semicolon.
</p>
<p>The files can contain the following types of record:
</p>
<ul>
<li> A language definition record.  These records have two fields: the
string &lsquo;<samp>Language</samp>&rsquo; and the name of the language.  Once a language
has been declared in this way, it can be used as an option property.
See <a href="#Option-properties">Option properties</a>.

</li><li> A target specific save record to save additional information. These
records have two fields: the string &lsquo;<samp>TargetSave</samp>&rsquo;, and a
declaration type to go in the <code>cl_target_option</code> structure.

</li><li> A variable record to define a variable used to store option
information.  These records have two fields: the string
&lsquo;<samp>Variable</samp>&rsquo;, and a declaration of the type and name of the
variable, optionally with an initializer (but without any trailing
&lsquo;<samp>;</samp>&rsquo;).  These records may be used for variables used for many
options where declaring the initializer in a single option definition
record, or duplicating it in many records, would be inappropriate, or
for variables set in option handlers rather than referenced by
<code>Var</code> properties.

</li><li> A variable record to define a variable used to store option
information.  These records have two fields: the string
&lsquo;<samp>TargetVariable</samp>&rsquo;, and a declaration of the type and name of the
variable, optionally with an initializer (but without any trailing
&lsquo;<samp>;</samp>&rsquo;).  &lsquo;<samp>TargetVariable</samp>&rsquo; is a combination of &lsquo;<samp>Variable</samp>&rsquo;
and &lsquo;<samp>TargetSave</samp>&rsquo; records in that the variable is defined in the
<code>gcc_options</code> structure, but these variables are also stored in
the <code>cl_target_option</code> structure.  The variables are saved in the
target save code and restored in the target restore code.

</li><li> A variable record to record any additional files that the
<samp>options.h</samp> file should include.  This is useful to provide
enumeration or structure definitions needed for target variables.
These records have two fields: the string &lsquo;<samp>HeaderInclude</samp>&rsquo; and the
name of the include file.

</li><li> A variable record to record any additional files that the
<samp>options.c</samp> or <samp>options-save.c</samp> file should include.  This
is useful to provide
inline functions needed for target variables and/or <code>#ifdef</code>
sequences to properly set up the initialization.  These records have
two fields: the string &lsquo;<samp>SourceInclude</samp>&rsquo; and the name of the
include file.

</li><li> An enumeration record to define a set of strings that may be used as
arguments to an option or options.  These records have three fields:
the string &lsquo;<samp>Enum</samp>&rsquo;, a space-separated list of properties and help
text used to describe the set of strings in <samp>--help</samp> output.
Properties use the same format as option properties; the following are
valid:
<dl compact="compact">
<dt><code>Name(<var>name</var>)</code></dt>
<dd><p>This property is required; <var>name</var> must be a name (suitable for use
in C identifiers) used to identify the set of strings in <code>Enum</code>
option properties.
</p>
</dd>
<dt><code>Type(<var>type</var>)</code></dt>
<dd><p>This property is required; <var>type</var> is the C type for variables set
by options using this enumeration together with <code>Var</code>.
</p>
</dd>
<dt><code>UnknownError(<var>message</var>)</code></dt>
<dd><p>The message <var>message</var> will be used as an error message if the
argument is invalid; for enumerations without <code>UnknownError</code>, a
generic error message is used.  <var>message</var> should contain a single
&lsquo;<samp>%qs</samp>&rsquo; format, which will be used to format the invalid argument.
</p></dd>
</dl>

</li><li> An enumeration value record to define one of the strings in a set
given in an &lsquo;<samp>Enum</samp>&rsquo; record.  These records have two fields: the
string &lsquo;<samp>EnumValue</samp>&rsquo; and a space-separated list of properties.
Properties use the same format as option properties; the following are
valid:
<dl compact="compact">
<dt><code>Enum(<var>name</var>)</code></dt>
<dd><p>This property is required; <var>name</var> says which &lsquo;<samp>Enum</samp>&rsquo; record
this &lsquo;<samp>EnumValue</samp>&rsquo; record corresponds to.
</p>
</dd>
<dt><code>String(<var>string</var>)</code></dt>
<dd><p>This property is required; <var>string</var> is the string option argument
being described by this record.
</p>
</dd>
<dt><code>Value(<var>value</var>)</code></dt>
<dd><p>This property is required; it says what value (representable as
<code>int</code>) should be used for the given string.
</p>
</dd>
<dt><code>Canonical</code></dt>
<dd><p>This property is optional.  If present, it says the present string is
the canonical one among all those with the given value.  Other strings
yielding that value will be mapped to this one so specs do not need to
handle them.
</p>
</dd>
<dt><code>DriverOnly</code></dt>
<dd><p>This property is optional.  If present, the present string will only
be accepted by the driver.  This is used for cases such as
<samp>-march=native</samp> that are processed by the driver so that
&lsquo;<samp>gcc -v</samp>&rsquo; shows how the options chosen depended on the system on
which the compiler was run.
</p></dd>
</dl>

</li><li> An option definition record.  These records have the following fields:
<ol>
<li> the name of the option, with the leading &ldquo;-&rdquo; removed
</li><li> a space-separated list of option properties (see <a href="#Option-properties">Option properties</a>)
</li><li> the help text to use for <samp>--help</samp> (omitted if the second field
contains the <code>Undocumented</code> property).
</li></ol>

<p>By default, all options beginning with &ldquo;f&rdquo;, &ldquo;W&rdquo; or &ldquo;m&rdquo; are
implicitly assumed to take a &ldquo;no-&rdquo; form.  This form should not be
listed separately.  If an option beginning with one of these letters
does not have a &ldquo;no-&rdquo; form, you can use the <code>RejectNegative</code>
property to reject it.
</p>
<p>The help text is automatically line-wrapped before being displayed.
Normally the name of the option is printed on the left-hand side of
the output and the help text is printed on the right.  However, if the
help text contains a tab character, the text to the left of the tab is
used instead of the option&rsquo;s name and the text to the right of the
tab forms the help text.  This allows you to elaborate on what type
of argument the option takes.
</p>
</li><li> A target mask record.  These records have one field of the form
&lsquo;<samp>Mask(<var>x</var>)</samp>&rsquo;.  The options-processing script will automatically
allocate a bit in <code>target_flags</code> (see <a href="#Run_002dtime-Target">Run-time Target</a>) for
each mask name <var>x</var> and set the macro <code>MASK_<var>x</var></code> to the
appropriate bitmask.  It will also declare a <code>TARGET_<var>x</var></code>
macro that has the value 1 when bit <code>MASK_<var>x</var></code> is set and
0 otherwise.

<p>They are primarily intended to declare target masks that are not
associated with user options, either because these masks represent
internal switches or because the options are not available on all
configurations and yet the masks always need to be defined.
</p></li></ul>

<hr>
<a name="Option-properties"></a>
<div class="header">
<p>
Previous: <a href="#Option-file-format" accesskey="p" rel="prev">Option file format</a>, Up: <a href="#Options" accesskey="u" rel="up">Options</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Option-properties-1"></a>
<h3 class="section">8.2 Option properties</h3>

<p>The second field of an option record can specify any of the following
properties.  When an option takes an argument, it is enclosed in parentheses
following the option property name.  The parser that handles option files
is quite simplistic, and will be tricked by any nested parentheses within
the argument text itself; in this case, the entire option argument can
be wrapped in curly braces within the parentheses to demarcate it, e.g.:
</p>
<div class="smallexample">
<pre class="smallexample">Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)})
</pre></div>

<dl compact="compact">
<dt><code>Common</code></dt>
<dd><p>The option is available for all languages and targets.
</p>
</dd>
<dt><code>Target</code></dt>
<dd><p>The option is available for all languages but is target-specific.
</p>
</dd>
<dt><code>Driver</code></dt>
<dd><p>The option is handled by the compiler driver using code not shared
with the compilers proper (<samp>cc1</samp> etc.).
</p>
</dd>
<dt><code><var>language</var></code></dt>
<dd><p>The option is available when compiling for the given language.
</p>
<p>It is possible to specify several different languages for the same
option.  Each <var>language</var> must have been declared by an earlier
<code>Language</code> record.  See <a href="#Option-file-format">Option file format</a>.
</p>
</dd>
<dt><code>RejectDriver</code></dt>
<dd><p>The option is only handled by the compilers proper (<samp>cc1</samp> etc.)
and should not be accepted by the driver.
</p>
</dd>
<dt><code>RejectNegative</code></dt>
<dd><p>The option does not have a &ldquo;no-&rdquo; form.  All options beginning with
&ldquo;f&rdquo;, &ldquo;W&rdquo; or &ldquo;m&rdquo; are assumed to have a &ldquo;no-&rdquo; form unless this
property is used.
</p>
</dd>
<dt><code>Negative(<var>othername</var>)</code></dt>
<dd><p>The option will turn off another option <var>othername</var>, which is
the option name with the leading &ldquo;-&rdquo; removed.  This chain action will
propagate through the <code>Negative</code> property of the option to be
turned off.
</p>
<p>As a consequence, if you have a group of mutually-exclusive
options, their <code>Negative</code> properties should form a circular chain.
For example, if options <samp>-<var>a</var></samp>, <samp>-<var>b</var></samp> and
<samp>-<var>c</var></samp> are mutually exclusive, their respective <code>Negative</code>
properties should be &lsquo;<samp>Negative(<var>b</var>)</samp>&rsquo;, &lsquo;<samp>Negative(<var>c</var>)</samp>&rsquo;
and &lsquo;<samp>Negative(<var>a</var>)</samp>&rsquo;.
</p>
</dd>
<dt><code>Joined</code></dt>
<dt><code>Separate</code></dt>
<dd><p>The option takes a mandatory argument.  <code>Joined</code> indicates
that the option and argument can be included in the same <code>argv</code>
entry (as with <code>-mflush-func=<var>name</var></code>, for example).
<code>Separate</code> indicates that the option and argument can be
separate <code>argv</code> entries (as with <code>-o</code>).  An option is
allowed to have both of these properties.
</p>
</dd>
<dt><code>JoinedOrMissing</code></dt>
<dd><p>The option takes an optional argument.  If the argument is given,
it will be part of the same <code>argv</code> entry as the option itself.
</p>
<p>This property cannot be used alongside <code>Joined</code> or <code>Separate</code>.
</p>
</dd>
<dt><code>MissingArgError(<var>message</var>)</code></dt>
<dd><p>For an option marked <code>Joined</code> or <code>Separate</code>, the message
<var>message</var> will be used as an error message if the mandatory
argument is missing; for options without <code>MissingArgError</code>, a
generic error message is used.  <var>message</var> should contain a single
&lsquo;<samp>%qs</samp>&rsquo; format, which will be used to format the name of the option
passed.
</p>
</dd>
<dt><code>Args(<var>n</var>)</code></dt>
<dd><p>For an option marked <code>Separate</code>, indicate that it takes <var>n</var>
arguments.  The default is 1.
</p>
</dd>
<dt><code>UInteger</code></dt>
<dd><p>The option&rsquo;s argument is a non-negative integer.  The option parser
will check and convert the argument before passing it to the relevant
option handler.  <code>UInteger</code> should also be used on options like
<code>-falign-loops</code> where both <code>-falign-loops</code> and
<code>-falign-loops</code>=<var>n</var> are supported to make sure the saved
options are given a full integer.
</p>
</dd>
<dt><code>ToLower</code></dt>
<dd><p>The option&rsquo;s argument should be converted to lowercase as part of
putting it in canonical form, and before comparing with the strings
indicated by any <code>Enum</code> property.
</p>
</dd>
<dt><code>NoDriverArg</code></dt>
<dd><p>For an option marked <code>Separate</code>, the option only takes an
argument in the compiler proper, not in the driver.  This is for
compatibility with existing options that are used both directly and
via <samp>-Wp,</samp>; new options should not have this property.
</p>
</dd>
<dt><code>Var(<var>var</var>)</code></dt>
<dd><p>The state of this option should be stored in variable <var>var</var>
(actually a macro for <code>global_options.x_<var>var</var></code>).
The way that the state is stored depends on the type of option:
</p>
<ul>
<li> If the option uses the <code>Mask</code> or <code>InverseMask</code> properties,
<var>var</var> is the integer variable that contains the mask.

</li><li> If the option is a normal on/off switch, <var>var</var> is an integer
variable that is nonzero when the option is enabled.  The options
parser will set the variable to 1 when the positive form of the
option is used and 0 when the &ldquo;no-&rdquo; form is used.

</li><li> If the option takes an argument and has the <code>UInteger</code> property,
<var>var</var> is an integer variable that stores the value of the argument.

</li><li> If the option takes an argument and has the <code>Enum</code> property,
<var>var</var> is a variable (type given in the <code>Type</code> property of the
&lsquo;<samp>Enum</samp>&rsquo; record whose <code>Name</code> property has the same argument as
the <code>Enum</code> property of this option) that stores the value of the
argument.

</li><li> If the option has the <code>Defer</code> property, <var>var</var> is a pointer to
a <code>VEC(cl_deferred_option,heap)</code> that stores the option for later
processing.  (<var>var</var> is declared with type <code>void *</code> and needs
to be cast to <code>VEC(cl_deferred_option,heap)</code> before use.)

</li><li> Otherwise, if the option takes an argument, <var>var</var> is a pointer to
the argument string.  The pointer will be null if the argument is optional
and wasn&rsquo;t given.
</li></ul>

<p>The option-processing script will usually zero-initialize <var>var</var>.
You can modify this behavior using <code>Init</code>.
</p>
</dd>
<dt><code>Var(<var>var</var>, <var>set</var>)</code></dt>
<dd><p>The option controls an integer variable <var>var</var> and is active when
<var>var</var> equals <var>set</var>.  The option parser will set <var>var</var> to
<var>set</var> when the positive form of the option is used and <code>!<var>set</var></code>
when the &ldquo;no-&rdquo; form is used.
</p>
<p><var>var</var> is declared in the same way as for the single-argument form
described above.
</p>
</dd>
<dt><code>Init(<var>value</var>)</code></dt>
<dd><p>The variable specified by the <code>Var</code> property should be statically
initialized to <var>value</var>.  If more than one option using the same
variable specifies <code>Init</code>, all must specify the same initializer.
</p>
</dd>
<dt><code>Mask(<var>name</var>)</code></dt>
<dd><p>The option is associated with a bit in the <code>target_flags</code>
variable (see <a href="#Run_002dtime-Target">Run-time Target</a>) and is active when that bit is set.
You may also specify <code>Var</code> to select a variable other than
<code>target_flags</code>.
</p>
<p>The options-processing script will automatically allocate a unique bit
for the option.  If the option is attached to &lsquo;<samp>target_flags</samp>&rsquo;,
the script will set the macro <code>MASK_<var>name</var></code> to the appropriate
bitmask.  It will also declare a <code>TARGET_<var>name</var></code> macro that has
the value 1 when the option is active and 0 otherwise.  If you use <code>Var</code>
to attach the option to a different variable, the bitmask macro with be
called <code>OPTION_MASK_<var>name</var></code>.
</p>
</dd>
<dt><code>InverseMask(<var>othername</var>)</code></dt>
<dt><code>InverseMask(<var>othername</var>, <var>thisname</var>)</code></dt>
<dd><p>The option is the inverse of another option that has the
<code>Mask(<var>othername</var>)</code> property.  If <var>thisname</var> is given,
the options-processing script will declare a <code>TARGET_<var>thisname</var></code>
macro that is 1 when the option is active and 0 otherwise.
</p>
</dd>
<dt><code>Enum(<var>name</var>)</code></dt>
<dd><p>The option&rsquo;s argument is a string from the set of strings associated
with the corresponding &lsquo;<samp>Enum</samp>&rsquo; record.  The string is checked and
converted to the integer specified in the corresponding
&lsquo;<samp>EnumValue</samp>&rsquo; record before being passed to option handlers.
</p>
</dd>
<dt><code>Defer</code></dt>
<dd><p>The option should be stored in a vector, specified with <code>Var</code>,
for later processing.
</p>
</dd>
<dt><code>Alias(<var>opt</var>)</code></dt>
<dt><code>Alias(<var>opt</var>, <var>arg</var>)</code></dt>
<dt><code>Alias(<var>opt</var>, <var>posarg</var>, <var>negarg</var>)</code></dt>
<dd><p>The option is an alias for <samp>-<var>opt</var></samp> (or the negative form
of that option, depending on <code>NegativeAlias</code>).  In the first form,
any argument passed to the alias is considered to be passed to
<samp>-<var>opt</var></samp>, and <samp>-<var>opt</var></samp> is considered to be
negated if the alias is used in negated form.  In the second form, the
alias may not be negated or have an argument, and <var>posarg</var> is
considered to be passed as an argument to <samp>-<var>opt</var></samp>.  In the
third form, the alias may not have an argument, if the alias is used
in the positive form then <var>posarg</var> is considered to be passed to
<samp>-<var>opt</var></samp>, and if the alias is used in the negative form
then <var>negarg</var> is considered to be passed to <samp>-<var>opt</var></samp>.
</p>
<p>Aliases should not specify <code>Var</code> or <code>Mask</code> or
<code>UInteger</code>.  Aliases should normally specify the same languages
as the target of the alias; the flags on the target will be used to
determine any diagnostic for use of an option for the wrong language,
while those on the alias will be used to identify what command-line
text is the option and what text is any argument to that option.
</p>
<p>When an <code>Alias</code> definition is used for an option, driver specs do
not need to handle it and no &lsquo;<samp>OPT_</samp>&rsquo; enumeration value is defined
for it; only the canonical form of the option will be seen in those
places.
</p>
</dd>
<dt><code>NegativeAlias</code></dt>
<dd><p>For an option marked with <code>Alias(<var>opt</var>)</code>, the option is
considered to be an alias for the positive form of <samp>-<var>opt</var></samp>
if negated and for the negative form of <samp>-<var>opt</var></samp> if not
negated.  <code>NegativeAlias</code> may not be used with the forms of
<code>Alias</code> taking more than one argument.
</p>
</dd>
<dt><code>Ignore</code></dt>
<dd><p>This option is ignored apart from printing any warning specified using
<code>Warn</code>.  The option will not be seen by specs and no &lsquo;<samp>OPT_</samp>&rsquo;
enumeration value is defined for it.
</p>
</dd>
<dt><code>SeparateAlias</code></dt>
<dd><p>For an option marked with <code>Joined</code>, <code>Separate</code> and
<code>Alias</code>, the option only acts as an alias when passed a separate
argument; with a joined argument it acts as a normal option, with an
&lsquo;<samp>OPT_</samp>&rsquo; enumeration value.  This is for compatibility with the
Java <samp>-d</samp> option and should not be used for new options.
</p>
</dd>
<dt><code>Warn(<var>message</var>)</code></dt>
<dd><p>If this option is used, output the warning <var>message</var>.
<var>message</var> is a format string, either taking a single operand with
a &lsquo;<samp>%qs</samp>&rsquo; format which is the option name, or not taking any
operands, which is passed to the &lsquo;<samp>warning</samp>&rsquo; function.  If an alias
is marked <code>Warn</code>, the target of the alias must not also be marked
<code>Warn</code>.
</p>
</dd>
<dt><code>Report</code></dt>
<dd><p>The state of the option should be printed by <samp>-fverbose-asm</samp>.
</p>
</dd>
<dt><code>Warning</code></dt>
<dd><p>This is a warning option and should be shown as such in
<samp>--help</samp> output.  This flag does not currently affect anything
other than <samp>--help</samp>.
</p>
</dd>
<dt><code>Optimization</code></dt>
<dd><p>This is an optimization option.  It should be shown as such in
<samp>--help</samp> output, and any associated variable named using
<code>Var</code> should be saved and restored when the optimization level is
changed with <code>optimize</code> attributes.
</p>
</dd>
<dt><code>Undocumented</code></dt>
<dd><p>The option is deliberately missing documentation and should not
be included in the <samp>--help</samp> output.
</p>
</dd>
<dt><code>Condition(<var>cond</var>)</code></dt>
<dd><p>The option should only be accepted if preprocessor condition
<var>cond</var> is true.  Note that any C declarations associated with the
option will be present even if <var>cond</var> is false; <var>cond</var> simply
controls whether the option is accepted and whether it is printed in
the <samp>--help</samp> output.
</p>
</dd>
<dt><code>Save</code></dt>
<dd><p>Build the <code>cl_target_option</code> structure to hold a copy of the
option, add the functions <code>cl_target_option_save</code> and
<code>cl_target_option_restore</code> to save and restore the options.
</p>
</dd>
<dt><code>SetByCombined</code></dt>
<dd><p>The option may also be set by a combined option such as
<samp>-ffast-math</samp>.  This causes the <code>gcc_options</code> struct to
have a field <code>frontend_set_<var>name</var></code>, where <code><var>name</var></code>
is the name of the field holding the value of this option (without the
leading <code>x_</code>).  This gives the front end a way to indicate that
the value has been set explicitly and should not be changed by the
combined option.  For example, some front ends use this to prevent
<samp>-ffast-math</samp> and <samp>-fno-fast-math</samp> from changing the
value of <samp>-fmath-errno</samp> for languages that do not use
<code>errno</code>.
</p>
</dd>
<dt><code>EnabledBy(<var>opt</var>)</code></dt>
<dt><code>EnabledBy(<var>opt</var> &amp;&amp; <var>opt2</var>)</code></dt>
<dd><p>If not explicitly set, the option is set to the value of
<samp>-<var>opt</var></samp>.  The second form specifies that the option is
only set if both <var>opt</var> and <var>opt2</var> are set.
</p>
</dd>
<dt><code>LangEnabledBy(<var>language</var>, <var>opt</var>)</code></dt>
<dt><code>LangEnabledBy(<var>language</var>, <var>opt</var>, <var>posarg</var>, <var>negarg</var>)</code></dt>
<dd><p>When compiling for the given language, the option is set to the value
of <samp>-<var>opt</var></samp>, if not explicitly set. In the second form, if
<var>opt</var> is used in the positive form then <var>posarg</var> is considered
to be passed to the option, and if <var>opt</var> is used in the negative
form then <var>negarg</var> is considered to be passed to the option.  It
is possible to specify several different languages.  Each
<var>language</var> must have been declared by an earlier <code>Language</code>
record.  See <a href="#Option-file-format">Option file format</a>.
</p>
</dd>
<dt><code>NoDWARFRecord</code></dt>
<dd><p>The option is omitted from the producer string written by
<samp>-grecord-gcc-switches</samp>.
</p></dd>
</dl>


<hr>
<a name="Passes"></a>
<div class="header">
<p>
Next: <a href="#RTL" accesskey="n" rel="next">RTL</a>, Previous: <a href="#Options" accesskey="p" rel="prev">Options</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Passes-and-Files-of-the-Compiler"></a>
<h2 class="chapter">9 Passes and Files of the Compiler</h2>
<a name="index-passes-and-files-of-the-compiler"></a>
<a name="index-files-and-passes-of-the-compiler"></a>
<a name="index-compiler-passes-and-files"></a>

<p>This chapter is dedicated to giving an overview of the optimization and
code generation passes of the compiler.  In the process, it describes
some of the language front end interface, though this description is no
where near complete.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Parsing-pass" accesskey="1">Parsing pass</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The language front end turns text into bits.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Gimplification-pass" accesskey="2">Gimplification pass</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The bits are turned into something we can optimize.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Pass-manager" accesskey="3">Pass manager</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Sequencing the optimization passes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Tree-SSA-passes" accesskey="4">Tree SSA passes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Optimizations on a high-level representation.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#RTL-passes" accesskey="5">RTL passes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Optimizations on a low-level representation.
</td></tr>
</table>

<hr>
<a name="Parsing-pass"></a>
<div class="header">
<p>
Next: <a href="#Gimplification-pass" accesskey="n" rel="next">Gimplification pass</a>, Up: <a href="#Passes" accesskey="u" rel="up">Passes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Parsing-pass-1"></a>
<h3 class="section">9.1 Parsing pass</h3>
<a name="index-GENERIC"></a>
<a name="index-lang_005fhooks_002eparse_005ffile"></a>
<p>The language front end is invoked only once, via
<code>lang_hooks.parse_file</code>, to parse the entire input.  The language
front end may use any intermediate language representation deemed
appropriate.  The C front end uses GENERIC trees (see <a href="#GENERIC">GENERIC</a>), plus
a double handful of language specific tree codes defined in
<samp>c-common.def</samp>.  The Fortran front end uses a completely different
private representation.
</p>
<a name="index-GIMPLE"></a>
<a name="index-gimplification"></a>
<a name="index-gimplifier"></a>
<a name="index-language_002dindependent-intermediate-representation"></a>
<a name="index-intermediate-representation-lowering"></a>
<a name="index-lowering_002c-language_002ddependent-intermediate-representation"></a>
<p>At some point the front end must translate the representation used in the
front end to a representation understood by the language-independent
portions of the compiler.  Current practice takes one of two forms.
The C front end manually invokes the gimplifier (see <a href="#GIMPLE">GIMPLE</a>) on each function,
and uses the gimplifier callbacks to convert the language-specific tree
nodes directly to GIMPLE before passing the function off to be compiled.
The Fortran front end converts from a private representation to GENERIC,
which is later lowered to GIMPLE when the function is compiled.  Which
route to choose probably depends on how well GENERIC (plus extensions)
can be made to match up with the source language and necessary parsing
data structures.
</p>
<p>BUG: Gimplification must occur before nested function lowering,
and nested function lowering must be done by the front end before
passing the data off to cgraph.
</p>
<p>TODO: Cgraph should control nested function lowering.  It would
only be invoked when it is certain that the outer-most function
is used.
</p>
<p>TODO: Cgraph needs a gimplify_function callback.  It should be
invoked when (1) it is certain that the function is used, (2)
warning flags specified by the user require some amount of
compilation in order to honor, (3) the language indicates that
semantic analysis is not complete until gimplification occurs.
Hum&hellip; this sounds overly complicated.  Perhaps we should just
have the front end gimplify always; in most cases it&rsquo;s only one
function call.
</p>
<p>The front end needs to pass all function definitions and top level
declarations off to the middle-end so that they can be compiled and
emitted to the object file.  For a simple procedural language, it is
usually most convenient to do this as each top level declaration or
definition is seen.  There is also a distinction to be made between
generating functional code and generating complete debug information.
The only thing that is absolutely required for functional code is that
function and data <em>definitions</em> be passed to the middle-end.  For
complete debug information, function, data and type declarations
should all be passed as well.
</p>
<a name="index-rest_005fof_005fdecl_005fcompilation"></a>
<a name="index-rest_005fof_005ftype_005fcompilation"></a>
<a name="index-cgraph_005ffinalize_005ffunction"></a>
<p>In any case, the front end needs each complete top-level function or
data declaration, and each data definition should be passed to
<code>rest_of_decl_compilation</code>.  Each complete type definition should
be passed to <code>rest_of_type_compilation</code>.  Each function definition
should be passed to <code>cgraph_finalize_function</code>.
</p>
<p>TODO: I know rest_of_compilation currently has all sorts of
RTL generation semantics.  I plan to move all code generation
bits (both Tree and RTL) to compile_function.  Should we hide
cgraph from the front ends and move back to rest_of_compilation
as the official interface?  Possibly we should rename all three
interfaces such that the names match in some meaningful way and
that is more descriptive than &quot;rest_of&quot;.
</p>
<p>The middle-end will, at its option, emit the function and data
definitions immediately or queue them for later processing.
</p>
<hr>
<a name="Gimplification-pass"></a>
<div class="header">
<p>
Next: <a href="#Pass-manager" accesskey="n" rel="next">Pass manager</a>, Previous: <a href="#Parsing-pass" accesskey="p" rel="prev">Parsing pass</a>, Up: <a href="#Passes" accesskey="u" rel="up">Passes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Gimplification-pass-1"></a>
<h3 class="section">9.2 Gimplification pass</h3>

<a name="index-gimplification-1"></a>
<a name="index-GIMPLE-1"></a>
<p><em>Gimplification</em> is a whimsical term for the process of converting
the intermediate representation of a function into the GIMPLE language
(see <a href="#GIMPLE">GIMPLE</a>).  The term stuck, and so words like &ldquo;gimplification&rdquo;,
&ldquo;gimplify&rdquo;, &ldquo;gimplifier&rdquo; and the like are sprinkled throughout this
section of code.
</p>
<p>While a front end may certainly choose to generate GIMPLE directly if
it chooses, this can be a moderately complex process unless the
intermediate language used by the front end is already fairly simple.
Usually it is easier to generate GENERIC trees plus extensions
and let the language-independent gimplifier do most of the work.
</p>
<a name="index-gimplify_005ffunction_005ftree"></a>
<a name="index-gimplify_005fexpr"></a>
<a name="index-lang_005fhooks_002egimplify_005fexpr"></a>
<p>The main entry point to this pass is <code>gimplify_function_tree</code>
located in <samp>gimplify.c</samp>.  From here we process the entire
function gimplifying each statement in turn.  The main workhorse
for this pass is <code>gimplify_expr</code>.  Approximately everything
passes through here at least once, and it is from here that we
invoke the <code>lang_hooks.gimplify_expr</code> callback.
</p>
<p>The callback should examine the expression in question and return
<code>GS_UNHANDLED</code> if the expression is not a language specific
construct that requires attention.  Otherwise it should alter the
expression in some way to such that forward progress is made toward
producing valid GIMPLE.  If the callback is certain that the
transformation is complete and the expression is valid GIMPLE, it
should return <code>GS_ALL_DONE</code>.  Otherwise it should return
<code>GS_OK</code>, which will cause the expression to be processed again.
If the callback encounters an error during the transformation (because
the front end is relying on the gimplification process to finish
semantic checks), it should return <code>GS_ERROR</code>.
</p>
<hr>
<a name="Pass-manager"></a>
<div class="header">
<p>
Next: <a href="#Tree-SSA-passes" accesskey="n" rel="next">Tree SSA passes</a>, Previous: <a href="#Gimplification-pass" accesskey="p" rel="prev">Gimplification pass</a>, Up: <a href="#Passes" accesskey="u" rel="up">Passes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Pass-manager-1"></a>
<h3 class="section">9.3 Pass manager</h3>

<p>The pass manager is located in <samp>passes.c</samp>, <samp>tree-optimize.c</samp>
and <samp>tree-pass.h</samp>.
Its job is to run all of the individual passes in the correct order,
and take care of standard bookkeeping that applies to every pass.
</p>
<p>The theory of operation is that each pass defines a structure that
represents everything we need to know about that pass&mdash;when it
should be run, how it should be run, what intermediate language
form or on-the-side data structures it needs.  We register the pass
to be run in some particular order, and the pass manager arranges
for everything to happen in the correct order.
</p>
<p>The actuality doesn&rsquo;t completely live up to the theory at present.
Command-line switches and <code>timevar_id_t</code> enumerations must still
be defined elsewhere.  The pass manager validates constraints but does
not attempt to (re-)generate data structures or lower intermediate
language form based on the requirements of the next pass.  Nevertheless,
what is present is useful, and a far sight better than nothing at all.
</p>
<p>Each pass should have a unique name.
Each pass may have its own dump file (for GCC debugging purposes).
Passes with a name starting with a star do not dump anything.
Sometimes passes are supposed to share a dump file / option name.
To still give these unique names, you can use a prefix that is delimited
by a space from the part that is used for the dump file / option name.
E.g. When the pass name is &quot;ud dce&quot;, the name used for dump file/options
is &quot;dce&quot;.
</p>
<p>TODO: describe the global variables set up by the pass manager,
and a brief description of how a new pass should use it.
I need to look at what info RTL passes use first<small class="enddots">...</small>
</p>
<hr>
<a name="Tree-SSA-passes"></a>
<div class="header">
<p>
Next: <a href="#RTL-passes" accesskey="n" rel="next">RTL passes</a>, Previous: <a href="#Pass-manager" accesskey="p" rel="prev">Pass manager</a>, Up: <a href="#Passes" accesskey="u" rel="up">Passes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Tree-SSA-passes-1"></a>
<h3 class="section">9.4 Tree SSA passes</h3>

<p>The following briefly describes the Tree optimization passes that are
run after gimplification and what source files they are located in.
</p>
<ul>
<li> Remove useless statements

<p>This pass is an extremely simple sweep across the gimple code in which
we identify obviously dead code and remove it.  Here we do things like
simplify <code>if</code> statements with constant conditions, remove
exception handling constructs surrounding code that obviously cannot
throw, remove lexical bindings that contain no variables, and other
assorted simplistic cleanups.  The idea is to get rid of the obvious
stuff quickly rather than wait until later when it&rsquo;s more work to get
rid of it.  This pass is located in <samp>tree-cfg.c</samp> and described by
<code>pass_remove_useless_stmts</code>.
</p>
</li><li> Mudflap declaration registration

<p>If mudflap (see <a href="gcc-4.html#Optimize-Options">-fmudflap -fmudflapth
-fmudflapir</a> in <cite>Using the GNU Compiler Collection (GCC)</cite>) is
enabled, we generate code to register some variable declarations with
the mudflap runtime.  Specifically, the runtime tracks the lifetimes of
those variable declarations that have their addresses taken, or whose
bounds are unknown at compile time (<code>extern</code>).  This pass generates
new exception handling constructs (<code>try</code>/<code>finally</code>), and so
must run before those are lowered.  In addition, the pass enqueues
declarations of static variables whose lifetimes extend to the entire
program.  The pass is located in <samp>tree-mudflap.c</samp> and is described
by <code>pass_mudflap_1</code>.
</p>
</li><li> OpenMP lowering

<p>If OpenMP generation (<samp>-fopenmp</samp>) is enabled, this pass lowers
OpenMP constructs into GIMPLE.
</p>
<p>Lowering of OpenMP constructs involves creating replacement
expressions for local variables that have been mapped using data
sharing clauses, exposing the control flow of most synchronization
directives and adding region markers to facilitate the creation of the
control flow graph.  The pass is located in <samp>omp-low.c</samp> and is
described by <code>pass_lower_omp</code>.
</p>
</li><li> OpenMP expansion

<p>If OpenMP generation (<samp>-fopenmp</samp>) is enabled, this pass expands
parallel regions into their own functions to be invoked by the thread
library.  The pass is located in <samp>omp-low.c</samp> and is described by
<code>pass_expand_omp</code>.
</p>
</li><li> Lower control flow

<p>This pass flattens <code>if</code> statements (<code>COND_EXPR</code>)
and moves lexical bindings (<code>BIND_EXPR</code>) out of line.  After
this pass, all <code>if</code> statements will have exactly two <code>goto</code>
statements in its <code>then</code> and <code>else</code> arms.  Lexical binding
information for each statement will be found in <code>TREE_BLOCK</code> rather
than being inferred from its position under a <code>BIND_EXPR</code>.  This
pass is found in <samp>gimple-low.c</samp> and is described by
<code>pass_lower_cf</code>.
</p>
</li><li> Lower exception handling control flow

<p>This pass decomposes high-level exception handling constructs
(<code>TRY_FINALLY_EXPR</code> and <code>TRY_CATCH_EXPR</code>) into a form
that explicitly represents the control flow involved.  After this
pass, <code>lookup_stmt_eh_region</code> will return a non-negative
number for any statement that may have EH control flow semantics;
examine <code>tree_can_throw_internal</code> or <code>tree_can_throw_external</code>
for exact semantics.  Exact control flow may be extracted from
<code>foreach_reachable_handler</code>.  The EH region nesting tree is defined
in <samp>except.h</samp> and built in <samp>except.c</samp>.  The lowering pass
itself is in <samp>tree-eh.c</samp> and is described by <code>pass_lower_eh</code>.
</p>
</li><li> Build the control flow graph

<p>This pass decomposes a function into basic blocks and creates all of
the edges that connect them.  It is located in <samp>tree-cfg.c</samp> and
is described by <code>pass_build_cfg</code>.
</p>
</li><li> Find all referenced variables

<p>This pass walks the entire function and collects an array of all
variables referenced in the function, <code>referenced_vars</code>.  The
index at which a variable is found in the array is used as a UID
for the variable within this function.  This data is needed by the
SSA rewriting routines.  The pass is located in <samp>tree-dfa.c</samp>
and is described by <code>pass_referenced_vars</code>.
</p>
</li><li> Enter static single assignment form

<p>This pass rewrites the function such that it is in SSA form.  After
this pass, all <code>is_gimple_reg</code> variables will be referenced by
<code>SSA_NAME</code>, and all occurrences of other variables will be
annotated with <code>VDEFS</code> and <code>VUSES</code>; PHI nodes will have
been inserted as necessary for each basic block.  This pass is
located in <samp>tree-ssa.c</samp> and is described by <code>pass_build_ssa</code>.
</p>
</li><li> Warn for uninitialized variables

<p>This pass scans the function for uses of <code>SSA_NAME</code>s that
are fed by default definition.  For non-parameter variables, such
uses are uninitialized.  The pass is run twice, before and after
optimization (if turned on).  In the first pass we only warn for uses that are
positively uninitialized; in the second pass we warn for uses that
are possibly uninitialized.  The pass is located in <samp>tree-ssa.c</samp>
and is defined by <code>pass_early_warn_uninitialized</code> and
<code>pass_late_warn_uninitialized</code>.
</p>
</li><li> Dead code elimination

<p>This pass scans the function for statements without side effects whose
result is unused.  It does not do memory life analysis, so any value
that is stored in memory is considered used.  The pass is run multiple
times throughout the optimization process.  It is located in
<samp>tree-ssa-dce.c</samp> and is described by <code>pass_dce</code>.
</p>
</li><li> Dominator optimizations

<p>This pass performs trivial dominator-based copy and constant propagation,
expression simplification, and jump threading.  It is run multiple times
throughout the optimization process.  It is located in <samp>tree-ssa-dom.c</samp>
and is described by <code>pass_dominator</code>.
</p>
</li><li> Forward propagation of single-use variables

<p>This pass attempts to remove redundant computation by substituting
variables that are used once into the expression that uses them and
seeing if the result can be simplified.  It is located in
<samp>tree-ssa-forwprop.c</samp> and is described by <code>pass_forwprop</code>.
</p>
</li><li> Copy Renaming

<p>This pass attempts to change the name of compiler temporaries involved in
copy operations such that SSA-&gt;normal can coalesce the copy away.  When compiler
temporaries are copies of user variables, it also renames the compiler
temporary to the user variable resulting in better use of user symbols.  It is
located in <samp>tree-ssa-copyrename.c</samp> and is described by
<code>pass_copyrename</code>.
</p>
</li><li> PHI node optimizations

<p>This pass recognizes forms of PHI inputs that can be represented as
conditional expressions and rewrites them into straight line code.
It is located in <samp>tree-ssa-phiopt.c</samp> and is described by
<code>pass_phiopt</code>.
</p>
</li><li> May-alias optimization

<p>This pass performs a flow sensitive SSA-based points-to analysis.
The resulting may-alias, must-alias, and escape analysis information
is used to promote variables from in-memory addressable objects to
non-aliased variables that can be renamed into SSA form.  We also
update the <code>VDEF</code>/<code>VUSE</code> memory tags for non-renameable
aggregates so that we get fewer false kills.  The pass is located
in <samp>tree-ssa-alias.c</samp> and is described by <code>pass_may_alias</code>.
</p>
<p>Interprocedural points-to information is located in
<samp>tree-ssa-structalias.c</samp> and described by <code>pass_ipa_pta</code>.
</p>
</li><li> Profiling

<p>This pass rewrites the function in order to collect runtime block
and value profiling data.  Such data may be fed back into the compiler
on a subsequent run so as to allow optimization based on expected
execution frequencies.  The pass is located in <samp>predict.c</samp> and
is described by <code>pass_profile</code>.
</p>
</li><li> Lower complex arithmetic

<p>This pass rewrites complex arithmetic operations into their component
scalar arithmetic operations.  The pass is located in <samp>tree-complex.c</samp>
and is described by <code>pass_lower_complex</code>.
</p>
</li><li> Scalar replacement of aggregates

<p>This pass rewrites suitable non-aliased local aggregate variables into
a set of scalar variables.  The resulting scalar variables are
rewritten into SSA form, which allows subsequent optimization passes
to do a significantly better job with them.  The pass is located in
<samp>tree-sra.c</samp> and is described by <code>pass_sra</code>.
</p>
</li><li> Dead store elimination

<p>This pass eliminates stores to memory that are subsequently overwritten
by another store, without any intervening loads.  The pass is located
in <samp>tree-ssa-dse.c</samp> and is described by <code>pass_dse</code>.
</p>
</li><li> Tail recursion elimination

<p>This pass transforms tail recursion into a loop.  It is located in
<samp>tree-tailcall.c</samp> and is described by <code>pass_tail_recursion</code>.
</p>
</li><li> Forward store motion

<p>This pass sinks stores and assignments down the flowgraph closer to their
use point.  The pass is located in <samp>tree-ssa-sink.c</samp> and is
described by <code>pass_sink_code</code>.
</p>
</li><li> Partial redundancy elimination

<p>This pass eliminates partially redundant computations, as well as
performing load motion.  The pass is located in <samp>tree-ssa-pre.c</samp>
and is described by <code>pass_pre</code>.
</p>
<p>Just before partial redundancy elimination, if
<samp>-funsafe-math-optimizations</samp> is on, GCC tries to convert
divisions to multiplications by the reciprocal.  The pass is located
in <samp>tree-ssa-math-opts.c</samp> and is described by
<code>pass_cse_reciprocal</code>.
</p>
</li><li> Full redundancy elimination

<p>This is a simpler form of PRE that only eliminates redundancies that
occur on all paths.  It is located in <samp>tree-ssa-pre.c</samp> and
described by <code>pass_fre</code>.
</p>
</li><li> Loop optimization

<p>The main driver of the pass is placed in <samp>tree-ssa-loop.c</samp>
and described by <code>pass_loop</code>.
</p>
<p>The optimizations performed by this pass are:
</p>
<p>Loop invariant motion.  This pass moves only invariants that
would be hard to handle on RTL level (function calls, operations that expand to
nontrivial sequences of insns).  With <samp>-funswitch-loops</samp> it also moves
operands of conditions that are invariant out of the loop, so that we can use
just trivial invariantness analysis in loop unswitching.  The pass also includes
store motion.  The pass is implemented in <samp>tree-ssa-loop-im.c</samp>.
</p>
<p>Canonical induction variable creation.  This pass creates a simple counter
for number of iterations of the loop and replaces the exit condition of the
loop using it, in case when a complicated analysis is necessary to determine
the number of iterations.  Later optimizations then may determine the number
easily.  The pass is implemented in <samp>tree-ssa-loop-ivcanon.c</samp>.
</p>
<p>Induction variable optimizations.  This pass performs standard induction
variable optimizations, including strength reduction, induction variable
merging and induction variable elimination.  The pass is implemented in
<samp>tree-ssa-loop-ivopts.c</samp>.
</p>
<p>Loop unswitching.  This pass moves the conditional jumps that are invariant
out of the loops.  To achieve this, a duplicate of the loop is created for
each possible outcome of conditional jump(s).  The pass is implemented in
<samp>tree-ssa-loop-unswitch.c</samp>.  This pass should eventually replace the
RTL level loop unswitching in <samp>loop-unswitch.c</samp>, but currently
the RTL level pass is not completely redundant yet due to deficiencies
in tree level alias analysis.
</p>
<p>The optimizations also use various utility functions contained in
<samp>tree-ssa-loop-manip.c</samp>, <samp>cfgloop.c</samp>, <samp>cfgloopanal.c</samp> and
<samp>cfgloopmanip.c</samp>.
</p>
<p>Vectorization.  This pass transforms loops to operate on vector types
instead of scalar types.  Data parallelism across loop iterations is exploited
to group data elements from consecutive iterations into a vector and operate
on them in parallel.  Depending on available target support the loop is
conceptually unrolled by a factor <code>VF</code> (vectorization factor), which is
the number of elements operated upon in parallel in each iteration, and the
<code>VF</code> copies of each scalar operation are fused to form a vector operation.
Additional loop transformations such as peeling and versioning may take place
to align the number of iterations, and to align the memory accesses in the
loop.
The pass is implemented in <samp>tree-vectorizer.c</samp> (the main driver),
<samp>tree-vect-loop.c</samp> and <samp>tree-vect-loop-manip.c</samp> (loop specific parts
and general loop utilities), <samp>tree-vect-slp</samp> (loop-aware SLP
functionality), <samp>tree-vect-stmts.c</samp> and <samp>tree-vect-data-refs.c</samp>.
Analysis of data references is in <samp>tree-data-ref.c</samp>.
</p>
<p>SLP Vectorization.  This pass performs vectorization of straight-line code. The
pass is implemented in <samp>tree-vectorizer.c</samp> (the main driver),
<samp>tree-vect-slp.c</samp>, <samp>tree-vect-stmts.c</samp> and
<samp>tree-vect-data-refs.c</samp>.
</p>
<p>Autoparallelization.  This pass splits the loop iteration space to run
into several threads.  The pass is implemented in <samp>tree-parloops.c</samp>.
</p>
<p>Graphite is a loop transformation framework based on the polyhedral
model.  Graphite stands for Gimple Represented as Polyhedra.  The
internals of this infrastructure are documented in
<a href="http://gcc.gnu.org/wiki/Graphite">http://gcc.gnu.org/wiki/Graphite</a><!-- /@w -->.  The passes working on
this representation are implemented in the various <samp>graphite-*</samp>
files.
</p>
</li><li> Tree level if-conversion for vectorizer

<p>This pass applies if-conversion to simple loops to help vectorizer.
We identify if convertible loops, if-convert statements and merge
basic blocks in one big block.  The idea is to present loop in such
form so that vectorizer can have one to one mapping between statements
and available vector operations.  This pass is located in
<samp>tree-if-conv.c</samp> and is described by <code>pass_if_conversion</code>.
</p>
</li><li> Conditional constant propagation

<p>This pass relaxes a lattice of values in order to identify those
that must be constant even in the presence of conditional branches.
The pass is located in <samp>tree-ssa-ccp.c</samp> and is described
by <code>pass_ccp</code>.
</p>
<p>A related pass that works on memory loads and stores, and not just
register values, is located in <samp>tree-ssa-ccp.c</samp> and described by
<code>pass_store_ccp</code>.
</p>
</li><li> Conditional copy propagation

<p>This is similar to constant propagation but the lattice of values is
the &ldquo;copy-of&rdquo; relation.  It eliminates redundant copies from the
code.  The pass is located in <samp>tree-ssa-copy.c</samp> and described by
<code>pass_copy_prop</code>.
</p>
<p>A related pass that works on memory copies, and not just register
copies, is located in <samp>tree-ssa-copy.c</samp> and described by
<code>pass_store_copy_prop</code>.
</p>
</li><li> Value range propagation

<p>This transformation is similar to constant propagation but
instead of propagating single constant values, it propagates
known value ranges.  The implementation is based on Patterson&rsquo;s
range propagation algorithm (Accurate Static Branch Prediction by
Value Range Propagation, J. R. C. Patterson, PLDI &rsquo;95).  In
contrast to Patterson&rsquo;s algorithm, this implementation does not
propagate branch probabilities nor it uses more than a single
range per SSA name. This means that the current implementation
cannot be used for branch prediction (though adapting it would
not be difficult).  The pass is located in <samp>tree-vrp.c</samp> and is
described by <code>pass_vrp</code>.
</p>
</li><li> Folding built-in functions

<p>This pass simplifies built-in functions, as applicable, with constant
arguments or with inferable string lengths.  It is located in
<samp>tree-ssa-ccp.c</samp> and is described by <code>pass_fold_builtins</code>.
</p>
</li><li> Split critical edges

<p>This pass identifies critical edges and inserts empty basic blocks
such that the edge is no longer critical.  The pass is located in
<samp>tree-cfg.c</samp> and is described by <code>pass_split_crit_edges</code>.
</p>
</li><li> Control dependence dead code elimination

<p>This pass is a stronger form of dead code elimination that can
eliminate unnecessary control flow statements.   It is located
in <samp>tree-ssa-dce.c</samp> and is described by <code>pass_cd_dce</code>.
</p>
</li><li> Tail call elimination

<p>This pass identifies function calls that may be rewritten into
jumps.  No code transformation is actually applied here, but the
data and control flow problem is solved.  The code transformation
requires target support, and so is delayed until RTL.  In the
meantime <code>CALL_EXPR_TAILCALL</code> is set indicating the possibility.
The pass is located in <samp>tree-tailcall.c</samp> and is described by
<code>pass_tail_calls</code>.  The RTL transformation is handled by
<code>fixup_tail_calls</code> in <samp>calls.c</samp>.
</p>
</li><li> Warn for function return without value

<p>For non-void functions, this pass locates return statements that do
not specify a value and issues a warning.  Such a statement may have
been injected by falling off the end of the function.  This pass is
run last so that we have as much time as possible to prove that the
statement is not reachable.  It is located in <samp>tree-cfg.c</samp> and
is described by <code>pass_warn_function_return</code>.
</p>
</li><li> Mudflap statement annotation

<p>If mudflap is enabled, we rewrite some memory accesses with code to
validate that the memory access is correct.  In particular, expressions
involving pointer dereferences (<code>INDIRECT_REF</code>, <code>ARRAY_REF</code>,
etc.) are replaced by code that checks the selected address range
against the mudflap runtime&rsquo;s database of valid regions.  This check
includes an inline lookup into a direct-mapped cache, based on
shift/mask operations of the pointer value, with a fallback function
call into the runtime.  The pass is located in <samp>tree-mudflap.c</samp> and
is described by <code>pass_mudflap_2</code>.
</p>
</li><li> Leave static single assignment form

<p>This pass rewrites the function such that it is in normal form.  At
the same time, we eliminate as many single-use temporaries as possible,
so the intermediate language is no longer GIMPLE, but GENERIC.  The
pass is located in <samp>tree-outof-ssa.c</samp> and is described by
<code>pass_del_ssa</code>.
</p>
</li><li> Merge PHI nodes that feed into one another

<p>This is part of the CFG cleanup passes.  It attempts to join PHI nodes
from a forwarder CFG block into another block with PHI nodes.  The
pass is located in <samp>tree-cfgcleanup.c</samp> and is described by
<code>pass_merge_phi</code>.
</p>
</li><li> Return value optimization

<p>If a function always returns the same local variable, and that local
variable is an aggregate type, then the variable is replaced with the
return value for the function (i.e., the function&rsquo;s DECL_RESULT).  This
is equivalent to the C++ named return value optimization applied to
GIMPLE.  The pass is located in <samp>tree-nrv.c</samp> and is described by
<code>pass_nrv</code>.
</p>
</li><li> Return slot optimization

<p>If a function returns a memory object and is called as <code>var =
foo()</code>, this pass tries to change the call so that the address of
<code>var</code> is sent to the caller to avoid an extra memory copy.  This
pass is located in <code>tree-nrv.c</code> and is described by
<code>pass_return_slot</code>.
</p>
</li><li> Optimize calls to <code>__builtin_object_size</code>

<p>This is a propagation pass similar to CCP that tries to remove calls
to <code>__builtin_object_size</code> when the size of the object can be
computed at compile-time.  This pass is located in
<samp>tree-object-size.c</samp> and is described by
<code>pass_object_sizes</code>.
</p>
</li><li> Loop invariant motion

<p>This pass removes expensive loop-invariant computations out of loops.
The pass is located in <samp>tree-ssa-loop.c</samp> and described by
<code>pass_lim</code>.
</p>
</li><li> Loop nest optimizations

<p>This is a family of loop transformations that works on loop nests.  It
includes loop interchange, scaling, skewing and reversal and they are
all geared to the optimization of data locality in array traversals
and the removal of dependencies that hamper optimizations such as loop
parallelization and vectorization.  The pass is located in
<samp>tree-loop-linear.c</samp> and described by
<code>pass_linear_transform</code>.
</p>
</li><li> Removal of empty loops

<p>This pass removes loops with no code in them.  The pass is located in
<samp>tree-ssa-loop-ivcanon.c</samp> and described by
<code>pass_empty_loop</code>.
</p>
</li><li> Unrolling of small loops

<p>This pass completely unrolls loops with few iterations.  The pass
is located in <samp>tree-ssa-loop-ivcanon.c</samp> and described by
<code>pass_complete_unroll</code>.
</p>
</li><li> Predictive commoning

<p>This pass makes the code reuse the computations from the previous
iterations of the loops, especially loads and stores to memory.
It does so by storing the values of these computations to a bank
of temporary variables that are rotated at the end of loop.  To avoid
the need for this rotation, the loop is then unrolled and the copies
of the loop body are rewritten to use the appropriate version of
the temporary variable.  This pass is located in <samp>tree-predcom.c</samp>
and described by <code>pass_predcom</code>.
</p>
</li><li> Array prefetching

<p>This pass issues prefetch instructions for array references inside
loops.  The pass is located in <samp>tree-ssa-loop-prefetch.c</samp> and
described by <code>pass_loop_prefetch</code>.
</p>
</li><li> Reassociation

<p>This pass rewrites arithmetic expressions to enable optimizations that
operate on them, like redundancy elimination and vectorization.  The
pass is located in <samp>tree-ssa-reassoc.c</samp> and described by
<code>pass_reassoc</code>.
</p>
</li><li> Optimization of <code>stdarg</code> functions

<p>This pass tries to avoid the saving of register arguments into the
stack on entry to <code>stdarg</code> functions.  If the function doesn&rsquo;t
use any <code>va_start</code> macros, no registers need to be saved.  If
<code>va_start</code> macros are used, the <code>va_list</code> variables don&rsquo;t
escape the function, it is only necessary to save registers that will
be used in <code>va_arg</code> macros.  For instance, if <code>va_arg</code> is
only used with integral types in the function, floating point
registers don&rsquo;t need to be saved.  This pass is located in
<code>tree-stdarg.c</code> and described by <code>pass_stdarg</code>.
</p>
</li></ul>

<hr>
<a name="RTL-passes"></a>
<div class="header">
<p>
Previous: <a href="#Tree-SSA-passes" accesskey="p" rel="prev">Tree SSA passes</a>, Up: <a href="#Passes" accesskey="u" rel="up">Passes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-passes-1"></a>
<h3 class="section">9.5 RTL passes</h3>

<p>The following briefly describes the RTL generation and optimization
passes that are run after the Tree optimization passes.
</p>
<ul>
<li> RTL generation

<p>The source files for RTL generation include
<samp>stmt.c</samp>,
<samp>calls.c</samp>,
<samp>expr.c</samp>,
<samp>explow.c</samp>,
<samp>expmed.c</samp>,
<samp>function.c</samp>,
<samp>optabs.c</samp>
and <samp>emit-rtl.c</samp>.
Also, the file
<samp>insn-emit.c</samp>, generated from the machine description by the
program <code>genemit</code>, is used in this pass.  The header file
<samp>expr.h</samp> is used for communication within this pass.
</p>
<a name="index-genflags"></a>
<a name="index-gencodes"></a>
<p>The header files <samp>insn-flags.h</samp> and <samp>insn-codes.h</samp>,
generated from the machine description by the programs <code>genflags</code>
and <code>gencodes</code>, tell this pass which standard names are available
for use and which patterns correspond to them.
</p>
</li><li> Generation of exception landing pads

<p>This pass generates the glue that handles communication between the
exception handling library routines and the exception handlers within
the function.  Entry points in the function that are invoked by the
exception handling library are called <em>landing pads</em>.  The code
for this pass is located in <samp>except.c</samp>.
</p>
</li><li> Control flow graph cleanup

<p>This pass removes unreachable code, simplifies jumps to next, jumps to
jump, jumps across jumps, etc.  The pass is run multiple times.
For historical reasons, it is occasionally referred to as the &ldquo;jump
optimization pass&rdquo;.  The bulk of the code for this pass is in
<samp>cfgcleanup.c</samp>, and there are support routines in <samp>cfgrtl.c</samp>
and <samp>jump.c</samp>.
</p>
</li><li> Forward propagation of single-def values

<p>This pass attempts to remove redundant computation by substituting
variables that come from a single definition, and
seeing if the result can be simplified.  It performs copy propagation
and addressing mode selection.  The pass is run twice, with values
being propagated into loops only on the second run.  The code is
located in <samp>fwprop.c</samp>.
</p>
</li><li> Common subexpression elimination

<p>This pass removes redundant computation within basic blocks, and
optimizes addressing modes based on cost.  The pass is run twice.
The code for this pass is located in <samp>cse.c</samp>.
</p>
</li><li> Global common subexpression elimination

<p>This pass performs two
different types of GCSE  depending on whether you are optimizing for
size or not (LCM based GCSE tends to increase code size for a gain in
speed, while Morel-Renvoise based GCSE does not).
When optimizing for size, GCSE is done using Morel-Renvoise Partial
Redundancy Elimination, with the exception that it does not try to move
invariants out of loops&mdash;that is left to  the loop optimization pass.
If MR PRE GCSE is done, code hoisting (aka unification) is also done, as
well as load motion.
If you are optimizing for speed, LCM (lazy code motion) based GCSE is
done.  LCM is based on the work of Knoop, Ruthing, and Steffen.  LCM
based GCSE also does loop invariant code motion.  We also perform load
and store motion when optimizing for speed.
Regardless of which type of GCSE is used, the GCSE pass also performs
global constant and  copy propagation.
The source file for this pass is <samp>gcse.c</samp>, and the LCM routines
are in <samp>lcm.c</samp>.
</p>
</li><li> Loop optimization

<p>This pass performs several loop related optimizations.
The source files <samp>cfgloopanal.c</samp> and <samp>cfgloopmanip.c</samp> contain
generic loop analysis and manipulation code.  Initialization and finalization
of loop structures is handled by <samp>loop-init.c</samp>.
A loop invariant motion pass is implemented in <samp>loop-invariant.c</samp>.
Basic block level optimizations&mdash;unrolling, peeling and unswitching loops&mdash;
are implemented in <samp>loop-unswitch.c</samp> and <samp>loop-unroll.c</samp>.
Replacing of the exit condition of loops by special machine-dependent
instructions is handled by <samp>loop-doloop.c</samp>.
</p>
</li><li> Jump bypassing

<p>This pass is an aggressive form of GCSE that transforms the control
flow graph of a function by propagating constants into conditional
branch instructions.  The source file for this pass is <samp>gcse.c</samp>.
</p>
</li><li> If conversion

<p>This pass attempts to replace conditional branches and surrounding
assignments with arithmetic, boolean value producing comparison
instructions, and conditional move instructions.  In the very last
invocation after reload/LRA, it will generate predicated instructions
when supported by the target.  The code is located in <samp>ifcvt.c</samp>.
</p>
</li><li> Web construction

<p>This pass splits independent uses of each pseudo-register.  This can
improve effect of the other transformation, such as CSE or register
allocation.  The code for this pass is located in <samp>web.c</samp>.
</p>
</li><li> Instruction combination

<p>This pass attempts to combine groups of two or three instructions that
are related by data flow into single instructions.  It combines the
RTL expressions for the instructions by substitution, simplifies the
result using algebra, and then attempts to match the result against
the machine description.  The code is located in <samp>combine.c</samp>.
</p>
</li><li> Register movement

<p>This pass looks for cases where matching constraints would force an
instruction to need a reload, and this reload would be a
register-to-register move.  It then attempts to change the registers
used by the instruction to avoid the move instruction.  The code is
located in <samp>regmove.c</samp>.
</p>
</li><li> Mode switching optimization

<p>This pass looks for instructions that require the processor to be in a
specific &ldquo;mode&rdquo; and minimizes the number of mode changes required to
satisfy all users.  What these modes are, and what they apply to are
completely target-specific.  The code for this pass is located in
<samp>mode-switching.c</samp>.
</p>
</li><li> <a name="index-modulo-scheduling"></a>
<a name="index-sms_002c-swing_002c-software-pipelining"></a>
Modulo scheduling

<p>This pass looks at innermost loops and reorders their instructions
by overlapping different iterations.  Modulo scheduling is performed
immediately before instruction scheduling.  The code for this pass is
located in <samp>modulo-sched.c</samp>.
</p>
</li><li> Instruction scheduling

<p>This pass looks for instructions whose output will not be available by
the time that it is used in subsequent instructions.  Memory loads and
floating point instructions often have this behavior on RISC machines.
It re-orders instructions within a basic block to try to separate the
definition and use of items that otherwise would cause pipeline
stalls.  This pass is performed twice, before and after register
allocation.  The code for this pass is located in <samp>haifa-sched.c</samp>,
<samp>sched-deps.c</samp>, <samp>sched-ebb.c</samp>, <samp>sched-rgn.c</samp> and
<samp>sched-vis.c</samp>.
</p>
</li><li> Register allocation

<p>These passes make sure that all occurrences of pseudo registers are
eliminated, either by allocating them to a hard register, replacing
them by an equivalent expression (e.g. a constant) or by placing
them on the stack.  This is done in several subpasses:
</p>
<ul>
<li> Register move optimizations.  This pass makes some simple RTL code
transformations which improve the subsequent register allocation.  The
source file is <samp>regmove.c</samp>.

</li><li> The integrated register allocator (<acronym>IRA</acronym>).  It is called
integrated because coalescing, register live range splitting, and hard
register preferencing are done on-the-fly during coloring.  It also
has better integration with the reload/LRA pass.  Pseudo-registers spilled
by the allocator or the reload/LRA have still a chance to get
hard-registers if the reload/LRA evicts some pseudo-registers from
hard-registers.  The allocator helps to choose better pseudos for
spilling based on their live ranges and to coalesce stack slots
allocated for the spilled pseudo-registers.  IRA is a regional
register allocator which is transformed into Chaitin-Briggs allocator
if there is one region.  By default, IRA chooses regions using
register pressure but the user can force it to use one region or
regions corresponding to all loops.

<p>Source files of the allocator are <samp>ira.c</samp>, <samp>ira-build.c</samp>,
<samp>ira-costs.c</samp>, <samp>ira-conflicts.c</samp>, <samp>ira-color.c</samp>,
<samp>ira-emit.c</samp>, <samp>ira-lives</samp>, plus header files <samp>ira.h</samp>
and <samp>ira-int.h</samp> used for the communication between the allocator
and the rest of the compiler and between the IRA files.
</p>
</li><li> <a name="index-reloading"></a>
Reloading.  This pass renumbers pseudo registers with the hardware
registers numbers they were allocated.  Pseudo registers that did not
get hard registers are replaced with stack slots.  Then it finds
instructions that are invalid because a value has failed to end up in
a register, or has ended up in a register of the wrong kind.  It fixes
up these instructions by reloading the problematical values
temporarily into registers.  Additional instructions are generated to
do the copying.

<p>The reload pass also optionally eliminates the frame pointer and inserts
instructions to save and restore call-clobbered registers around calls.
</p>
<p>Source files are <samp>reload.c</samp> and <samp>reload1.c</samp>, plus the header
<samp>reload.h</samp> used for communication between them.
</p>
</li><li> <a name="index-Local-Register-Allocator-_0028LRA_0029"></a>
This pass is a modern replacement of the reload pass.  Source files
are <samp>lra.c</samp>, <samp>lra-assign.c</samp>, <samp>lra-coalesce.c</samp>,
<samp>lra-constraints.c</samp>, <samp>lra-eliminations.c</samp>,
<samp>lra-equivs.c</samp>, <samp>lra-lives.c</samp>, <samp>lra-saves.c</samp>,
<samp>lra-spills.c</samp>, the header <samp>lra-int.h</samp> used for
communication between them, and the header <samp>lra.h</samp> used for
communication between LRA and the rest of compiler.

<p>Unlike the reload pass, intermediate LRA decisions are reflected in
RTL as much as possible.  This reduces the number of target-dependent
macros and hooks, leaving instruction constraints as the primary
source of control.
</p>
<p>LRA is run on targets for which TARGET_LRA_P returns true.
</p></li></ul>

</li><li> Basic block reordering

<p>This pass implements profile guided code positioning.  If profile
information is not available, various types of static analysis are
performed to make the predictions normally coming from the profile
feedback (IE execution frequency, branch probability, etc).  It is
implemented in the file <samp>bb-reorder.c</samp>, and the various
prediction routines are in <samp>predict.c</samp>.
</p>
</li><li> Variable tracking

<p>This pass computes where the variables are stored at each
position in code and generates notes describing the variable locations
to RTL code.  The location lists are then generated according to these
notes to debug information if the debugging information format supports
location lists.  The code is located in <samp>var-tracking.c</samp>.
</p>
</li><li> Delayed branch scheduling

<p>This optional pass attempts to find instructions that can go into the
delay slots of other instructions, usually jumps and calls.  The code
for this pass is located in <samp>reorg.c</samp>.
</p>
</li><li> Branch shortening

<p>On many RISC machines, branch instructions have a limited range.
Thus, longer sequences of instructions must be used for long branches.
In this pass, the compiler figures out what how far each instruction
will be from each other instruction, and therefore whether the usual
instructions, or the longer sequences, must be used for each branch.
The code for this pass is located in <samp>final.c</samp>.
</p>
</li><li> Register-to-stack conversion

<p>Conversion from usage of some hard registers to usage of a register
stack may be done at this point.  Currently, this is supported only
for the floating-point registers of the Intel 80387 coprocessor.  The
code for this pass is located in <samp>reg-stack.c</samp>.
</p>
</li><li> Final

<p>This pass outputs the assembler code for the function.  The source files
are <samp>final.c</samp> plus <samp>insn-output.c</samp>; the latter is generated
automatically from the machine description by the tool <samp>genoutput</samp>.
The header file <samp>conditions.h</samp> is used for communication between
these files.  If mudflap is enabled, the queue of deferred declarations
and any addressed constants (e.g., string literals) is processed by
<code>mudflap_finish_file</code> into a synthetic constructor function
containing calls into the mudflap runtime.
</p>
</li><li> Debugging information output

<p>This is run after final because it must output the stack slot offsets
for pseudo registers that did not get hard registers.  Source files
are <samp>dbxout.c</samp> for DBX symbol table format, <samp>sdbout.c</samp> for
SDB symbol table format, <samp>dwarfout.c</samp> for DWARF symbol table
format, files <samp>dwarf2out.c</samp> and <samp>dwarf2asm.c</samp> for DWARF2
symbol table format, and <samp>vmsdbgout.c</samp> for VMS debug symbol table
format.
</p>
</li></ul>

<hr>
<a name="RTL"></a>
<div class="header">
<p>
Next: <a href="#GENERIC" accesskey="n" rel="next">GENERIC</a>, Previous: <a href="#Passes" accesskey="p" rel="prev">Passes</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-Representation"></a>
<h2 class="chapter">10 RTL Representation</h2>
<a name="index-RTL-representation"></a>
<a name="index-representation-of-RTL"></a>
<a name="index-Register-Transfer-Language-_0028RTL_0029"></a>

<p>The last part of the compiler work is done on a low-level intermediate
representation called Register Transfer Language.  In this language, the
instructions to be output are described, pretty much one by one, in an
algebraic form that describes what the instruction does.
</p>
<p>RTL is inspired by Lisp lists.  It has both an internal form, made up of
structures that point at other structures, and a textual form that is used
in the machine description and in printed debugging dumps.  The textual
form uses nested parentheses to indicate the pointers in the internal form.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#RTL-Objects" accesskey="1">RTL Objects</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expressions vs vectors vs strings vs integers.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#RTL-Classes" accesskey="2">RTL Classes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Categories of RTL expression objects, and their structure.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Accessors" accesskey="3">Accessors</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros to access expression operands or vector elts.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Special-Accessors" accesskey="4">Special Accessors</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros to access specific annotations on RTL.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Flags" accesskey="5">Flags</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Other flags in an RTL expression.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Machine-Modes" accesskey="6">Machine Modes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Describing the size and format of a datum.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Constants" accesskey="7">Constants</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expressions with constant values.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Regs-and-Memory" accesskey="8">Regs and Memory</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expressions representing register contents or memory.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Arithmetic" accesskey="9">Arithmetic</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expressions representing arithmetic on other expressions.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Comparisons">Comparisons</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expressions representing comparison of expressions.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Bit_002dFields">Bit-Fields</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expressions representing bit-fields in memory or reg.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Vector-Operations">Vector Operations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expressions involving vector datatypes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Conversions">Conversions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Extending, truncating, floating or fixing.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#RTL-Declarations">RTL Declarations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Declaring volatility, constancy, etc.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Side-Effects">Side Effects</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expressions for storing in registers, etc.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Incdec">Incdec</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Embedded side-effects for autoincrement addressing.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Assembler">Assembler</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Representing <code>asm</code> with operands.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Debug-Information">Debug Information</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expressions representing debugging information.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Insns">Insns</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expression types for entire insns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Calls">Calls</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">RTL representation of function call insns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Sharing">Sharing</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Some expressions are unique; others *must* be copied.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Reading-RTL">Reading RTL</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Reading textual RTL from a file.
</td></tr>
</table>

<hr>
<a name="RTL-Objects"></a>
<div class="header">
<p>
Next: <a href="#RTL-Classes" accesskey="n" rel="next">RTL Classes</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-Object-Types"></a>
<h3 class="section">10.1 RTL Object Types</h3>
<a name="index-RTL-object-types"></a>

<a name="index-RTL-integers"></a>
<a name="index-RTL-strings"></a>
<a name="index-RTL-vectors"></a>
<a name="index-RTL-expression"></a>
<a name="index-RTX-_0028See-RTL_0029"></a>
<p>RTL uses five kinds of objects: expressions, integers, wide integers,
strings and vectors.  Expressions are the most important ones.  An RTL
expression (&ldquo;RTX&rdquo;, for short) is a C structure, but it is usually
referred to with a pointer; a type that is given the typedef name
<code>rtx</code>.
</p>
<p>An integer is simply an <code>int</code>; their written form uses decimal
digits.  A wide integer is an integral object whose type is
<code>HOST_WIDE_INT</code>; their written form uses decimal digits.
</p>
<p>A string is a sequence of characters.  In core it is represented as a
<code>char *</code> in usual C fashion, and it is written in C syntax as well.
However, strings in RTL may never be null.  If you write an empty string in
a machine description, it is represented in core as a null pointer rather
than as a pointer to a null character.  In certain contexts, these null
pointers instead of strings are valid.  Within RTL code, strings are most
commonly found inside <code>symbol_ref</code> expressions, but they appear in
other contexts in the RTL expressions that make up machine descriptions.
</p>
<p>In a machine description, strings are normally written with double
quotes, as you would in C.  However, strings in machine descriptions may
extend over many lines, which is invalid C, and adjacent string
constants are not concatenated as they are in C.  Any string constant
may be surrounded with a single set of parentheses.  Sometimes this
makes the machine description easier to read.
</p>
<p>There is also a special syntax for strings, which can be useful when C
code is embedded in a machine description.  Wherever a string can
appear, it is also valid to write a C-style brace block.  The entire
brace block, including the outermost pair of braces, is considered to be
the string constant.  Double quote characters inside the braces are not
special.  Therefore, if you write string constants in the C code, you
need not escape each quote character with a backslash.
</p>
<p>A vector contains an arbitrary number of pointers to expressions.  The
number of elements in the vector is explicitly present in the vector.
The written form of a vector consists of square brackets
(&lsquo;<samp>[&hellip;]</samp>&rsquo;) surrounding the elements, in sequence and with
whitespace separating them.  Vectors of length zero are not created;
null pointers are used instead.
</p>
<a name="index-expression-codes"></a>
<a name="index-codes_002c-RTL-expression"></a>
<a name="index-GET_005fCODE"></a>
<a name="index-PUT_005fCODE"></a>
<p>Expressions are classified by <em>expression codes</em> (also called RTX
codes).  The expression code is a name defined in <samp>rtl.def</samp>, which is
also (in uppercase) a C enumeration constant.  The possible expression
codes and their meanings are machine-independent.  The code of an RTX can
be extracted with the macro <code>GET_CODE (<var>x</var>)</code> and altered with
<code>PUT_CODE (<var>x</var>, <var>newcode</var>)</code>.
</p>
<p>The expression code determines how many operands the expression contains,
and what kinds of objects they are.  In RTL, unlike Lisp, you cannot tell
by looking at an operand what kind of object it is.  Instead, you must know
from its context&mdash;from the expression code of the containing expression.
For example, in an expression of code <code>subreg</code>, the first operand is
to be regarded as an expression and the second operand as an integer.  In
an expression of code <code>plus</code>, there are two operands, both of which
are to be regarded as expressions.  In a <code>symbol_ref</code> expression,
there is one operand, which is to be regarded as a string.
</p>
<p>Expressions are written as parentheses containing the name of the
expression type, its flags and machine mode if any, and then the operands
of the expression (separated by spaces).
</p>
<p>Expression code names in the &lsquo;<samp>md</samp>&rsquo; file are written in lowercase,
but when they appear in C code they are written in uppercase.  In this
manual, they are shown as follows: <code>const_int</code>.
</p>
<a name="index-_0028nil_0029"></a>
<a name="index-nil"></a>
<p>In a few contexts a null pointer is valid where an expression is normally
wanted.  The written form of this is <code>(nil)</code>.
</p>
<hr>
<a name="RTL-Classes"></a>
<div class="header">
<p>
Next: <a href="#Accessors" accesskey="n" rel="next">Accessors</a>, Previous: <a href="#RTL-Objects" accesskey="p" rel="prev">RTL Objects</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-Classes-and-Formats"></a>
<h3 class="section">10.2 RTL Classes and Formats</h3>
<a name="index-RTL-classes"></a>
<a name="index-classes-of-RTX-codes"></a>
<a name="index-RTX-codes_002c-classes-of"></a>
<a name="index-GET_005fRTX_005fCLASS"></a>

<p>The various expression codes are divided into several <em>classes</em>,
which are represented by single characters.  You can determine the class
of an RTX code with the macro <code>GET_RTX_CLASS (<var>code</var>)</code>.
Currently, <samp>rtl.def</samp> defines these classes:
</p>
<dl compact="compact">
<dt><code>RTX_OBJ</code></dt>
<dd><p>An RTX code that represents an actual object, such as a register
(<code>REG</code>) or a memory location (<code>MEM</code>, <code>SYMBOL_REF</code>).
<code>LO_SUM</code>) is also included; instead, <code>SUBREG</code> and
<code>STRICT_LOW_PART</code> are not in this class, but in class <code>x</code>.
</p>
</dd>
<dt><code>RTX_CONST_OBJ</code></dt>
<dd><p>An RTX code that represents a constant object.  <code>HIGH</code> is also
included in this class.
</p>
</dd>
<dt><code>RTX_COMPARE</code></dt>
<dd><p>An RTX code for a non-symmetric comparison, such as <code>GEU</code> or
<code>LT</code>.
</p>
</dd>
<dt><code>RTX_COMM_COMPARE</code></dt>
<dd><p>An RTX code for a symmetric (commutative) comparison, such as <code>EQ</code>
or <code>ORDERED</code>.
</p>
</dd>
<dt><code>RTX_UNARY</code></dt>
<dd><p>An RTX code for a unary arithmetic operation, such as <code>NEG</code>,
<code>NOT</code>, or <code>ABS</code>.  This category also includes value extension
(sign or zero) and conversions between integer and floating point.
</p>
</dd>
<dt><code>RTX_COMM_ARITH</code></dt>
<dd><p>An RTX code for a commutative binary operation, such as <code>PLUS</code> or
<code>AND</code>.  <code>NE</code> and <code>EQ</code> are comparisons, so they have class
<code>&lt;</code>.
</p>
</dd>
<dt><code>RTX_BIN_ARITH</code></dt>
<dd><p>An RTX code for a non-commutative binary operation, such as <code>MINUS</code>,
<code>DIV</code>, or <code>ASHIFTRT</code>.
</p>
</dd>
<dt><code>RTX_BITFIELD_OPS</code></dt>
<dd><p>An RTX code for a bit-field operation.  Currently only
<code>ZERO_EXTRACT</code> and <code>SIGN_EXTRACT</code>.  These have three inputs
and are lvalues (so they can be used for insertion as well).
See <a href="#Bit_002dFields">Bit-Fields</a>.
</p>
</dd>
<dt><code>RTX_TERNARY</code></dt>
<dd><p>An RTX code for other three input operations.  Currently only
<code>IF_THEN_ELSE</code>,  <code>VEC_MERGE</code>, <code>SIGN_EXTRACT</code>,
<code>ZERO_EXTRACT</code>, and <code>FMA</code>.
</p>
</dd>
<dt><code>RTX_INSN</code></dt>
<dd><p>An RTX code for an entire instruction:  <code>INSN</code>, <code>JUMP_INSN</code>, and
<code>CALL_INSN</code>.  See <a href="#Insns">Insns</a>.
</p>
</dd>
<dt><code>RTX_MATCH</code></dt>
<dd><p>An RTX code for something that matches in insns, such as
<code>MATCH_DUP</code>.  These only occur in machine descriptions.
</p>
</dd>
<dt><code>RTX_AUTOINC</code></dt>
<dd><p>An RTX code for an auto-increment addressing mode, such as
<code>POST_INC</code>.
</p>
</dd>
<dt><code>RTX_EXTRA</code></dt>
<dd><p>All other RTX codes.  This category includes the remaining codes used
only in machine descriptions (<code>DEFINE_*</code>, etc.).  It also includes
all the codes describing side effects (<code>SET</code>, <code>USE</code>,
<code>CLOBBER</code>, etc.) and the non-insns that may appear on an insn
chain, such as <code>NOTE</code>, <code>BARRIER</code>, and <code>CODE_LABEL</code>.
<code>SUBREG</code> is also part of this class.
</p></dd>
</dl>

<a name="index-RTL-format"></a>
<p>For each expression code, <samp>rtl.def</samp> specifies the number of
contained objects and their kinds using a sequence of characters
called the <em>format</em> of the expression code.  For example,
the format of <code>subreg</code> is &lsquo;<samp>ei</samp>&rsquo;.
</p>
<a name="index-RTL-format-characters"></a>
<p>These are the most commonly used format characters:
</p>
<dl compact="compact">
<dt><code>e</code></dt>
<dd><p>An expression (actually a pointer to an expression).
</p>
</dd>
<dt><code>i</code></dt>
<dd><p>An integer.
</p>
</dd>
<dt><code>w</code></dt>
<dd><p>A wide integer.
</p>
</dd>
<dt><code>s</code></dt>
<dd><p>A string.
</p>
</dd>
<dt><code>E</code></dt>
<dd><p>A vector of expressions.
</p></dd>
</dl>

<p>A few other format characters are used occasionally:
</p>
<dl compact="compact">
<dt><code>u</code></dt>
<dd><p>&lsquo;<samp>u</samp>&rsquo; is equivalent to &lsquo;<samp>e</samp>&rsquo; except that it is printed differently
in debugging dumps.  It is used for pointers to insns.
</p>
</dd>
<dt><code>n</code></dt>
<dd><p>&lsquo;<samp>n</samp>&rsquo; is equivalent to &lsquo;<samp>i</samp>&rsquo; except that it is printed differently
in debugging dumps.  It is used for the line number or code number of a
<code>note</code> insn.
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>&lsquo;<samp>S</samp>&rsquo; indicates a string which is optional.  In the RTL objects in
core, &lsquo;<samp>S</samp>&rsquo; is equivalent to &lsquo;<samp>s</samp>&rsquo;, but when the object is read,
from an &lsquo;<samp>md</samp>&rsquo; file, the string value of this operand may be omitted.
An omitted string is taken to be the null string.
</p>
</dd>
<dt><code>V</code></dt>
<dd><p>&lsquo;<samp>V</samp>&rsquo; indicates a vector which is optional.  In the RTL objects in
core, &lsquo;<samp>V</samp>&rsquo; is equivalent to &lsquo;<samp>E</samp>&rsquo;, but when the object is read
from an &lsquo;<samp>md</samp>&rsquo; file, the vector value of this operand may be omitted.
An omitted vector is effectively the same as a vector of no elements.
</p>
</dd>
<dt><code>B</code></dt>
<dd><p>&lsquo;<samp>B</samp>&rsquo; indicates a pointer to basic block structure.
</p>
</dd>
<dt><code>0</code></dt>
<dd><p>&lsquo;<samp>0</samp>&rsquo; means a slot whose contents do not fit any normal category.
&lsquo;<samp>0</samp>&rsquo; slots are not printed at all in dumps, and are often used in
special ways by small parts of the compiler.
</p></dd>
</dl>

<p>There are macros to get the number of operands and the format
of an expression code:
</p>
<dl compact="compact">
<dd><a name="index-GET_005fRTX_005fLENGTH"></a>
</dd>
<dt><code>GET_RTX_LENGTH (<var>code</var>)</code></dt>
<dd><p>Number of operands of an RTX of code <var>code</var>.
</p>
<a name="index-GET_005fRTX_005fFORMAT"></a>
</dd>
<dt><code>GET_RTX_FORMAT (<var>code</var>)</code></dt>
<dd><p>The format of an RTX of code <var>code</var>, as a C string.
</p></dd>
</dl>

<p>Some classes of RTX codes always have the same format.  For example, it
is safe to assume that all comparison operations have format <code>ee</code>.
</p>
<dl compact="compact">
<dt><code>1</code></dt>
<dd><p>All codes of this class have format <code>e</code>.
</p>
</dd>
<dt><code>&lt;</code></dt>
<dt><code>c</code></dt>
<dt><code>2</code></dt>
<dd><p>All codes of these classes have format <code>ee</code>.
</p>
</dd>
<dt><code>b</code></dt>
<dt><code>3</code></dt>
<dd><p>All codes of these classes have format <code>eee</code>.
</p>
</dd>
<dt><code>i</code></dt>
<dd><p>All codes of this class have formats that begin with <code>iuueiee</code>.
See <a href="#Insns">Insns</a>.  Note that not all RTL objects linked onto an insn chain
are of class <code>i</code>.
</p>
</dd>
<dt><code>o</code></dt>
<dt><code>m</code></dt>
<dt><code>x</code></dt>
<dd><p>You can make no assumptions about the format of these codes.
</p></dd>
</dl>

<hr>
<a name="Accessors"></a>
<div class="header">
<p>
Next: <a href="#Special-Accessors" accesskey="n" rel="next">Special Accessors</a>, Previous: <a href="#RTL-Classes" accesskey="p" rel="prev">RTL Classes</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Access-to-Operands"></a>
<h3 class="section">10.3 Access to Operands</h3>
<a name="index-accessors"></a>
<a name="index-access-to-operands"></a>
<a name="index-operand-access"></a>

<a name="index-XEXP"></a>
<a name="index-XINT"></a>
<a name="index-XWINT"></a>
<a name="index-XSTR"></a>
<p>Operands of expressions are accessed using the macros <code>XEXP</code>,
<code>XINT</code>, <code>XWINT</code> and <code>XSTR</code>.  Each of these macros takes
two arguments: an expression-pointer (RTX) and an operand number
(counting from zero).  Thus,
</p>
<div class="smallexample">
<pre class="smallexample">XEXP (<var>x</var>, 2)
</pre></div>

<p>accesses operand 2 of expression <var>x</var>, as an expression.
</p>
<div class="smallexample">
<pre class="smallexample">XINT (<var>x</var>, 2)
</pre></div>

<p>accesses the same operand as an integer.  <code>XSTR</code>, used in the same
fashion, would access it as a string.
</p>
<p>Any operand can be accessed as an integer, as an expression or as a string.
You must choose the correct method of access for the kind of value actually
stored in the operand.  You would do this based on the expression code of
the containing expression.  That is also how you would know how many
operands there are.
</p>
<p>For example, if <var>x</var> is a <code>subreg</code> expression, you know that it has
two operands which can be correctly accessed as <code>XEXP (<var>x</var>, 0)</code>
and <code>XINT (<var>x</var>, 1)</code>.  If you did <code>XINT (<var>x</var>, 0)</code>, you
would get the address of the expression operand but cast as an integer;
that might occasionally be useful, but it would be cleaner to write
<code>(int) XEXP (<var>x</var>, 0)</code>.  <code>XEXP (<var>x</var>, 1)</code> would also
compile without error, and would return the second, integer operand cast as
an expression pointer, which would probably result in a crash when
accessed.  Nothing stops you from writing <code>XEXP (<var>x</var>, 28)</code> either,
but this will access memory past the end of the expression with
unpredictable results.
</p>
<p>Access to operands which are vectors is more complicated.  You can use the
macro <code>XVEC</code> to get the vector-pointer itself, or the macros
<code>XVECEXP</code> and <code>XVECLEN</code> to access the elements and length of a
vector.
</p>
<dl compact="compact">
<dd><a name="index-XVEC"></a>
</dd>
<dt><code>XVEC (<var>exp</var>, <var>idx</var>)</code></dt>
<dd><p>Access the vector-pointer which is operand number <var>idx</var> in <var>exp</var>.
</p>
<a name="index-XVECLEN"></a>
</dd>
<dt><code>XVECLEN (<var>exp</var>, <var>idx</var>)</code></dt>
<dd><p>Access the length (number of elements) in the vector which is
in operand number <var>idx</var> in <var>exp</var>.  This value is an <code>int</code>.
</p>
<a name="index-XVECEXP"></a>
</dd>
<dt><code>XVECEXP (<var>exp</var>, <var>idx</var>, <var>eltnum</var>)</code></dt>
<dd><p>Access element number <var>eltnum</var> in the vector which is
in operand number <var>idx</var> in <var>exp</var>.  This value is an RTX.
</p>
<p>It is up to you to make sure that <var>eltnum</var> is not negative
and is less than <code>XVECLEN (<var>exp</var>, <var>idx</var>)</code>.
</p></dd>
</dl>

<p>All the macros defined in this section expand into lvalues and therefore
can be used to assign the operands, lengths and vector elements as well as
to access them.
</p>
<hr>
<a name="Special-Accessors"></a>
<div class="header">
<p>
Next: <a href="#Flags" accesskey="n" rel="next">Flags</a>, Previous: <a href="#Accessors" accesskey="p" rel="prev">Accessors</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Access-to-Special-Operands"></a>
<h3 class="section">10.4 Access to Special Operands</h3>
<a name="index-access-to-special-operands"></a>

<p>Some RTL nodes have special annotations associated with them.
</p>
<dl compact="compact">
<dt><code>MEM</code></dt>
<dd><dl compact="compact">
<dd><a name="index-MEM_005fALIAS_005fSET"></a>
</dd>
<dt><code>MEM_ALIAS_SET (<var>x</var>)</code></dt>
<dd><p>If 0, <var>x</var> is not in any alias set, and may alias anything.  Otherwise,
<var>x</var> can only alias <code>MEM</code>s in a conflicting alias set.  This value
is set in a language-dependent manner in the front-end, and should not be
altered in the back-end.  In some front-ends, these numbers may correspond
in some way to types, or other language-level entities, but they need not,
and the back-end makes no such assumptions.
These set numbers are tested with <code>alias_sets_conflict_p</code>.
</p>
<a name="index-MEM_005fEXPR"></a>
</dd>
<dt><code>MEM_EXPR (<var>x</var>)</code></dt>
<dd><p>If this register is known to hold the value of some user-level
declaration, this is that tree node.  It may also be a
<code>COMPONENT_REF</code>, in which case this is some field reference,
and <code>TREE_OPERAND (<var>x</var>, 0)</code> contains the declaration,
or another <code>COMPONENT_REF</code>, or null if there is no compile-time
object associated with the reference.
</p>
<a name="index-MEM_005fOFFSET_005fKNOWN_005fP"></a>
</dd>
<dt><code>MEM_OFFSET_KNOWN_P (<var>x</var>)</code></dt>
<dd><p>True if the offset of the memory reference from <code>MEM_EXPR</code> is known.
&lsquo;<samp>MEM_OFFSET (<var>x</var>)</samp>&rsquo; provides the offset if so.
</p>
<a name="index-MEM_005fOFFSET"></a>
</dd>
<dt><code>MEM_OFFSET (<var>x</var>)</code></dt>
<dd><p>The offset from the start of <code>MEM_EXPR</code>.  The value is only valid if
&lsquo;<samp>MEM_OFFSET_KNOWN_P (<var>x</var>)</samp>&rsquo; is true.
</p>
<a name="index-MEM_005fSIZE_005fKNOWN_005fP"></a>
</dd>
<dt><code>MEM_SIZE_KNOWN_P (<var>x</var>)</code></dt>
<dd><p>True if the size of the memory reference is known.
&lsquo;<samp>MEM_SIZE (<var>x</var>)</samp>&rsquo; provides its size if so.
</p>
<a name="index-MEM_005fSIZE"></a>
</dd>
<dt><code>MEM_SIZE (<var>x</var>)</code></dt>
<dd><p>The size in bytes of the memory reference.
This is mostly relevant for <code>BLKmode</code> references as otherwise
the size is implied by the mode.  The value is only valid if
&lsquo;<samp>MEM_SIZE_KNOWN_P (<var>x</var>)</samp>&rsquo; is true.
</p>
<a name="index-MEM_005fALIGN"></a>
</dd>
<dt><code>MEM_ALIGN (<var>x</var>)</code></dt>
<dd><p>The known alignment in bits of the memory reference.
</p>
<a name="index-MEM_005fADDR_005fSPACE"></a>
</dd>
<dt><code>MEM_ADDR_SPACE (<var>x</var>)</code></dt>
<dd><p>The address space of the memory reference.  This will commonly be zero
for the generic address space.
</p></dd>
</dl>

</dd>
<dt><code>REG</code></dt>
<dd><dl compact="compact">
<dd><a name="index-ORIGINAL_005fREGNO"></a>
</dd>
<dt><code>ORIGINAL_REGNO (<var>x</var>)</code></dt>
<dd><p>This field holds the number the register &ldquo;originally&rdquo; had; for a
pseudo register turned into a hard reg this will hold the old pseudo
register number.
</p>
<a name="index-REG_005fEXPR"></a>
</dd>
<dt><code>REG_EXPR (<var>x</var>)</code></dt>
<dd><p>If this register is known to hold the value of some user-level
declaration, this is that tree node.
</p>
<a name="index-REG_005fOFFSET"></a>
</dd>
<dt><code>REG_OFFSET (<var>x</var>)</code></dt>
<dd><p>If this register is known to hold the value of some user-level
declaration, this is the offset into that logical storage.
</p></dd>
</dl>

</dd>
<dt><code>SYMBOL_REF</code></dt>
<dd><dl compact="compact">
<dd><a name="index-SYMBOL_005fREF_005fDECL"></a>
</dd>
<dt><code>SYMBOL_REF_DECL (<var>x</var>)</code></dt>
<dd><p>If the <code>symbol_ref</code> <var>x</var> was created for a <code>VAR_DECL</code> or
a <code>FUNCTION_DECL</code>, that tree is recorded here.  If this value is
null, then <var>x</var> was created by back end code generation routines,
and there is no associated front end symbol table entry.
</p>
<p><code>SYMBOL_REF_DECL</code> may also point to a tree of class <code>'c'</code>,
that is, some sort of constant.  In this case, the <code>symbol_ref</code>
is an entry in the per-file constant pool; again, there is no associated
front end symbol table entry.
</p>
<a name="index-SYMBOL_005fREF_005fCONSTANT"></a>
</dd>
<dt><code>SYMBOL_REF_CONSTANT (<var>x</var>)</code></dt>
<dd><p>If &lsquo;<samp>CONSTANT_POOL_ADDRESS_P (<var>x</var>)</samp>&rsquo; is true, this is the constant
pool entry for <var>x</var>.  It is null otherwise.
</p>
<a name="index-SYMBOL_005fREF_005fDATA"></a>
</dd>
<dt><code>SYMBOL_REF_DATA (<var>x</var>)</code></dt>
<dd><p>A field of opaque type used to store <code>SYMBOL_REF_DECL</code> or
<code>SYMBOL_REF_CONSTANT</code>.
</p>
<a name="index-SYMBOL_005fREF_005fFLAGS"></a>
</dd>
<dt><code>SYMBOL_REF_FLAGS (<var>x</var>)</code></dt>
<dd><p>In a <code>symbol_ref</code>, this is used to communicate various predicates
about the symbol.  Some of these are common enough to be computed by
common code, some are specific to the target.  The common bits are:
</p>
<dl compact="compact">
<dd><a name="index-SYMBOL_005fREF_005fFUNCTION_005fP"></a>
<a name="index-SYMBOL_005fFLAG_005fFUNCTION"></a>
</dd>
<dt><code>SYMBOL_FLAG_FUNCTION</code></dt>
<dd><p>Set if the symbol refers to a function.
</p>
<a name="index-SYMBOL_005fREF_005fLOCAL_005fP"></a>
<a name="index-SYMBOL_005fFLAG_005fLOCAL"></a>
</dd>
<dt><code>SYMBOL_FLAG_LOCAL</code></dt>
<dd><p>Set if the symbol is local to this &ldquo;module&rdquo;.
See <code>TARGET_BINDS_LOCAL_P</code>.
</p>
<a name="index-SYMBOL_005fREF_005fEXTERNAL_005fP"></a>
<a name="index-SYMBOL_005fFLAG_005fEXTERNAL"></a>
</dd>
<dt><code>SYMBOL_FLAG_EXTERNAL</code></dt>
<dd><p>Set if this symbol is not defined in this translation unit.
Note that this is not the inverse of <code>SYMBOL_FLAG_LOCAL</code>.
</p>
<a name="index-SYMBOL_005fREF_005fSMALL_005fP"></a>
<a name="index-SYMBOL_005fFLAG_005fSMALL"></a>
</dd>
<dt><code>SYMBOL_FLAG_SMALL</code></dt>
<dd><p>Set if the symbol is located in the small data section.
See <code>TARGET_IN_SMALL_DATA_P</code>.
</p>
<a name="index-SYMBOL_005fFLAG_005fTLS_005fSHIFT"></a>
<a name="index-SYMBOL_005fREF_005fTLS_005fMODEL"></a>
</dd>
<dt><code>SYMBOL_REF_TLS_MODEL (<var>x</var>)</code></dt>
<dd><p>This is a multi-bit field accessor that returns the <code>tls_model</code>
to be used for a thread-local storage symbol.  It returns zero for
non-thread-local symbols.
</p>
<a name="index-SYMBOL_005fREF_005fHAS_005fBLOCK_005fINFO_005fP"></a>
<a name="index-SYMBOL_005fFLAG_005fHAS_005fBLOCK_005fINFO"></a>
</dd>
<dt><code>SYMBOL_FLAG_HAS_BLOCK_INFO</code></dt>
<dd><p>Set if the symbol has <code>SYMBOL_REF_BLOCK</code> and
<code>SYMBOL_REF_BLOCK_OFFSET</code> fields.
</p>
<a name="index-SYMBOL_005fREF_005fANCHOR_005fP"></a>
<a name="index-SYMBOL_005fFLAG_005fANCHOR"></a>
<a name="index-_002dfsection_002danchors"></a>
</dd>
<dt><code>SYMBOL_FLAG_ANCHOR</code></dt>
<dd><p>Set if the symbol is used as a section anchor.  &ldquo;Section anchors&rdquo;
are symbols that have a known position within an <code>object_block</code>
and that can be used to access nearby members of that block.
They are used to implement <samp>-fsection-anchors</samp>.
</p>
<p>If this flag is set, then <code>SYMBOL_FLAG_HAS_BLOCK_INFO</code> will be too.
</p></dd>
</dl>

<p>Bits beginning with <code>SYMBOL_FLAG_MACH_DEP</code> are available for
the target&rsquo;s use.
</p></dd>
</dl>

<a name="index-SYMBOL_005fREF_005fBLOCK"></a>
</dd>
<dt><code>SYMBOL_REF_BLOCK (<var>x</var>)</code></dt>
<dd><p>If &lsquo;<samp>SYMBOL_REF_HAS_BLOCK_INFO_P (<var>x</var>)</samp>&rsquo;, this is the
&lsquo;<samp>object_block</samp>&rsquo; structure to which the symbol belongs,
or <code>NULL</code> if it has not been assigned a block.
</p>
<a name="index-SYMBOL_005fREF_005fBLOCK_005fOFFSET"></a>
</dd>
<dt><code>SYMBOL_REF_BLOCK_OFFSET (<var>x</var>)</code></dt>
<dd><p>If &lsquo;<samp>SYMBOL_REF_HAS_BLOCK_INFO_P (<var>x</var>)</samp>&rsquo;, this is the offset of <var>x</var>
from the first object in &lsquo;<samp>SYMBOL_REF_BLOCK (<var>x</var>)</samp>&rsquo;.  The value is
negative if <var>x</var> has not yet been assigned to a block, or it has not
been given an offset within that block.
</p></dd>
</dl>

<hr>
<a name="Flags"></a>
<div class="header">
<p>
Next: <a href="#Machine-Modes" accesskey="n" rel="next">Machine Modes</a>, Previous: <a href="#Special-Accessors" accesskey="p" rel="prev">Special Accessors</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Flags-in-an-RTL-Expression"></a>
<h3 class="section">10.5 Flags in an RTL Expression</h3>
<a name="index-flags-in-RTL-expression"></a>

<p>RTL expressions contain several flags (one-bit bit-fields)
that are used in certain types of expression.  Most often they
are accessed with the following macros, which expand into lvalues.
</p>
<dl compact="compact">
<dd><a name="index-CONSTANT_005fPOOL_005fADDRESS_005fP"></a>
<a name="index-symbol_005fref-and-_002fu"></a>
<a name="index-unchanging_002c-in-symbol_005fref"></a>
</dd>
<dt><code>CONSTANT_POOL_ADDRESS_P (<var>x</var>)</code></dt>
<dd><p>Nonzero in a <code>symbol_ref</code> if it refers to part of the current
function&rsquo;s constant pool.  For most targets these addresses are in a
<code>.rodata</code> section entirely separate from the function, but for
some targets the addresses are close to the beginning of the function.
In either case GCC assumes these addresses can be addressed directly,
perhaps with the help of base registers.
Stored in the <code>unchanging</code> field and printed as &lsquo;<samp>/u</samp>&rsquo;.
</p>
<a name="index-RTL_005fCONST_005fCALL_005fP"></a>
<a name="index-call_005finsn-and-_002fu"></a>
<a name="index-unchanging_002c-in-call_005finsn"></a>
</dd>
<dt><code>RTL_CONST_CALL_P (<var>x</var>)</code></dt>
<dd><p>In a <code>call_insn</code> indicates that the insn represents a call to a
const function.  Stored in the <code>unchanging</code> field and printed as
&lsquo;<samp>/u</samp>&rsquo;.
</p>
<a name="index-RTL_005fPURE_005fCALL_005fP"></a>
<a name="index-call_005finsn-and-_002fi"></a>
<a name="index-return_005fval_002c-in-call_005finsn"></a>
</dd>
<dt><code>RTL_PURE_CALL_P (<var>x</var>)</code></dt>
<dd><p>In a <code>call_insn</code> indicates that the insn represents a call to a
pure function.  Stored in the <code>return_val</code> field and printed as
&lsquo;<samp>/i</samp>&rsquo;.
</p>
<a name="index-RTL_005fCONST_005fOR_005fPURE_005fCALL_005fP"></a>
<a name="index-call_005finsn-and-_002fu-or-_002fi"></a>
</dd>
<dt><code>RTL_CONST_OR_PURE_CALL_P (<var>x</var>)</code></dt>
<dd><p>In a <code>call_insn</code>, true if <code>RTL_CONST_CALL_P</code> or
<code>RTL_PURE_CALL_P</code> is true.
</p>
<a name="index-RTL_005fLOOPING_005fCONST_005fOR_005fPURE_005fCALL_005fP"></a>
<a name="index-call_005finsn-and-_002fc"></a>
<a name="index-call_002c-in-call_005finsn"></a>
</dd>
<dt><code>RTL_LOOPING_CONST_OR_PURE_CALL_P (<var>x</var>)</code></dt>
<dd><p>In a <code>call_insn</code> indicates that the insn represents a possibly
infinite looping call to a const or pure function.  Stored in the
<code>call</code> field and printed as &lsquo;<samp>/c</samp>&rsquo;.  Only true if one of
<code>RTL_CONST_CALL_P</code> or <code>RTL_PURE_CALL_P</code> is true.
</p>
<a name="index-INSN_005fANNULLED_005fBRANCH_005fP"></a>
<a name="index-jump_005finsn-and-_002fu"></a>
<a name="index-call_005finsn-and-_002fu-1"></a>
<a name="index-insn-and-_002fu"></a>
<a name="index-unchanging_002c-in-jump_005finsn_002c-call_005finsn-and-insn"></a>
</dd>
<dt><code>INSN_ANNULLED_BRANCH_P (<var>x</var>)</code></dt>
<dd><p>In a <code>jump_insn</code>, <code>call_insn</code>, or <code>insn</code> indicates
that the branch is an annulling one.  See the discussion under
<code>sequence</code> below.  Stored in the <code>unchanging</code> field and
printed as &lsquo;<samp>/u</samp>&rsquo;.
</p>
<a name="index-INSN_005fDELETED_005fP"></a>
<a name="index-insn-and-_002fv"></a>
<a name="index-call_005finsn-and-_002fv"></a>
<a name="index-jump_005finsn-and-_002fv"></a>
<a name="index-code_005flabel-and-_002fv"></a>
<a name="index-barrier-and-_002fv"></a>
<a name="index-note-and-_002fv"></a>
<a name="index-volatil_002c-in-insn_002c-call_005finsn_002c-jump_005finsn_002c-code_005flabel_002c-barrier_002c-and-note"></a>
</dd>
<dt><code>INSN_DELETED_P (<var>x</var>)</code></dt>
<dd><p>In an <code>insn</code>, <code>call_insn</code>, <code>jump_insn</code>, <code>code_label</code>,
<code>barrier</code>, or <code>note</code>,
nonzero if the insn has been deleted.  Stored in the
<code>volatil</code> field and printed as &lsquo;<samp>/v</samp>&rsquo;.
</p>
<a name="index-INSN_005fFROM_005fTARGET_005fP"></a>
<a name="index-insn-and-_002fs"></a>
<a name="index-jump_005finsn-and-_002fs"></a>
<a name="index-call_005finsn-and-_002fs"></a>
<a name="index-in_005fstruct_002c-in-insn-and-jump_005finsn-and-call_005finsn"></a>
</dd>
<dt><code>INSN_FROM_TARGET_P (<var>x</var>)</code></dt>
<dd><p>In an <code>insn</code> or <code>jump_insn</code> or <code>call_insn</code> in a delay
slot of a branch, indicates that the insn
is from the target of the branch.  If the branch insn has
<code>INSN_ANNULLED_BRANCH_P</code> set, this insn will only be executed if
the branch is taken.  For annulled branches with
<code>INSN_FROM_TARGET_P</code> clear, the insn will be executed only if the
branch is not taken.  When <code>INSN_ANNULLED_BRANCH_P</code> is not set,
this insn will always be executed.  Stored in the <code>in_struct</code>
field and printed as &lsquo;<samp>/s</samp>&rsquo;.
</p>
<a name="index-LABEL_005fPRESERVE_005fP"></a>
<a name="index-code_005flabel-and-_002fi"></a>
<a name="index-note-and-_002fi"></a>
<a name="index-in_005fstruct_002c-in-code_005flabel-and-note"></a>
</dd>
<dt><code>LABEL_PRESERVE_P (<var>x</var>)</code></dt>
<dd><p>In a <code>code_label</code> or <code>note</code>, indicates that the label is referenced by
code or data not visible to the RTL of a given function.
Labels referenced by a non-local goto will have this bit set.  Stored
in the <code>in_struct</code> field and printed as &lsquo;<samp>/s</samp>&rsquo;.
</p>
<a name="index-LABEL_005fREF_005fNONLOCAL_005fP"></a>
<a name="index-label_005fref-and-_002fv"></a>
<a name="index-reg_005flabel-and-_002fv"></a>
<a name="index-volatil_002c-in-label_005fref-and-reg_005flabel"></a>
</dd>
<dt><code>LABEL_REF_NONLOCAL_P (<var>x</var>)</code></dt>
<dd><p>In <code>label_ref</code> and <code>reg_label</code> expressions, nonzero if this is
a reference to a non-local label.
Stored in the <code>volatil</code> field and printed as &lsquo;<samp>/v</samp>&rsquo;.
</p>
<a name="index-MEM_005fKEEP_005fALIAS_005fSET_005fP"></a>
<a name="index-mem-and-_002fj"></a>
<a name="index-jump_002c-in-mem"></a>
</dd>
<dt><code>MEM_KEEP_ALIAS_SET_P (<var>x</var>)</code></dt>
<dd><p>In <code>mem</code> expressions, 1 if we should keep the alias set for this
mem unchanged when we access a component.  Set to 1, for example, when we
are already in a non-addressable component of an aggregate.
Stored in the <code>jump</code> field and printed as &lsquo;<samp>/j</samp>&rsquo;.
</p>
<a name="index-MEM_005fVOLATILE_005fP"></a>
<a name="index-mem-and-_002fv"></a>
<a name="index-asm_005finput-and-_002fv"></a>
<a name="index-asm_005foperands-and-_002fv"></a>
<a name="index-volatil_002c-in-mem_002c-asm_005foperands_002c-and-asm_005finput"></a>
</dd>
<dt><code>MEM_VOLATILE_P (<var>x</var>)</code></dt>
<dd><p>In <code>mem</code>, <code>asm_operands</code>, and <code>asm_input</code> expressions,
nonzero for volatile memory references.
Stored in the <code>volatil</code> field and printed as &lsquo;<samp>/v</samp>&rsquo;.
</p>
<a name="index-MEM_005fNOTRAP_005fP"></a>
<a name="index-mem-and-_002fc"></a>
<a name="index-call_002c-in-mem"></a>
</dd>
<dt><code>MEM_NOTRAP_P (<var>x</var>)</code></dt>
<dd><p>In <code>mem</code>, nonzero for memory references that will not trap.
Stored in the <code>call</code> field and printed as &lsquo;<samp>/c</samp>&rsquo;.
</p>
<a name="index-MEM_005fPOINTER"></a>
<a name="index-mem-and-_002ff"></a>
<a name="index-frame_005frelated_002c-in-mem"></a>
</dd>
<dt><code>MEM_POINTER (<var>x</var>)</code></dt>
<dd><p>Nonzero in a <code>mem</code> if the memory reference holds a pointer.
Stored in the <code>frame_related</code> field and printed as &lsquo;<samp>/f</samp>&rsquo;.
</p>
<a name="index-REG_005fFUNCTION_005fVALUE_005fP"></a>
<a name="index-reg-and-_002fi"></a>
<a name="index-return_005fval_002c-in-reg"></a>
</dd>
<dt><code>REG_FUNCTION_VALUE_P (<var>x</var>)</code></dt>
<dd><p>Nonzero in a <code>reg</code> if it is the place in which this function&rsquo;s
value is going to be returned.  (This happens only in a hard
register.)  Stored in the <code>return_val</code> field and printed as
&lsquo;<samp>/i</samp>&rsquo;.
</p>
<a name="index-REG_005fPOINTER"></a>
<a name="index-reg-and-_002ff"></a>
<a name="index-frame_005frelated_002c-in-reg"></a>
</dd>
<dt><code>REG_POINTER (<var>x</var>)</code></dt>
<dd><p>Nonzero in a <code>reg</code> if the register holds a pointer.  Stored in the
<code>frame_related</code> field and printed as &lsquo;<samp>/f</samp>&rsquo;.
</p>
<a name="index-REG_005fUSERVAR_005fP"></a>
<a name="index-reg-and-_002fv"></a>
<a name="index-volatil_002c-in-reg"></a>
</dd>
<dt><code>REG_USERVAR_P (<var>x</var>)</code></dt>
<dd><p>In a <code>reg</code>, nonzero if it corresponds to a variable present in
the user&rsquo;s source code.  Zero for temporaries generated internally by
the compiler.  Stored in the <code>volatil</code> field and printed as
&lsquo;<samp>/v</samp>&rsquo;.
</p>
<p>The same hard register may be used also for collecting the values of
functions called by this one, but <code>REG_FUNCTION_VALUE_P</code> is zero
in this kind of use.
</p>
<a name="index-RTX_005fFRAME_005fRELATED_005fP"></a>
<a name="index-insn-and-_002ff"></a>
<a name="index-call_005finsn-and-_002ff"></a>
<a name="index-jump_005finsn-and-_002ff"></a>
<a name="index-barrier-and-_002ff"></a>
<a name="index-set-and-_002ff"></a>
<a name="index-frame_005frelated_002c-in-insn_002c-call_005finsn_002c-jump_005finsn_002c-barrier_002c-and-set"></a>
</dd>
<dt><code>RTX_FRAME_RELATED_P (<var>x</var>)</code></dt>
<dd><p>Nonzero in an <code>insn</code>, <code>call_insn</code>, <code>jump_insn</code>,
<code>barrier</code>, or <code>set</code> which is part of a function prologue
and sets the stack pointer, sets the frame pointer, or saves a register.
This flag should also be set on an instruction that sets up a temporary
register to use in place of the frame pointer.
Stored in the <code>frame_related</code> field and printed as &lsquo;<samp>/f</samp>&rsquo;.
</p>
<p>In particular, on RISC targets where there are limits on the sizes of
immediate constants, it is sometimes impossible to reach the register
save area directly from the stack pointer.  In that case, a temporary
register is used that is near enough to the register save area, and the
Canonical Frame Address, i.e., DWARF2&rsquo;s logical frame pointer, register
must (temporarily) be changed to be this temporary register.  So, the
instruction that sets this temporary register must be marked as
<code>RTX_FRAME_RELATED_P</code>.
</p>
<p>If the marked instruction is overly complex (defined in terms of what
<code>dwarf2out_frame_debug_expr</code> can handle), you will also have to
create a <code>REG_FRAME_RELATED_EXPR</code> note and attach it to the
instruction.  This note should contain a simple expression of the
computation performed by this instruction, i.e., one that
<code>dwarf2out_frame_debug_expr</code> can handle.
</p>
<p>This flag is required for exception handling support on targets with RTL
prologues.
</p>
<a name="index-MEM_005fREADONLY_005fP"></a>
<a name="index-mem-and-_002fu"></a>
<a name="index-unchanging_002c-in-mem"></a>
</dd>
<dt><code>MEM_READONLY_P (<var>x</var>)</code></dt>
<dd><p>Nonzero in a <code>mem</code>, if the memory is statically allocated and read-only.
</p>
<p>Read-only in this context means never modified during the lifetime of the
program, not necessarily in ROM or in write-disabled pages.  A common
example of the later is a shared library&rsquo;s global offset table.  This
table is initialized by the runtime loader, so the memory is technically
writable, but after control is transferred from the runtime loader to the
application, this memory will never be subsequently modified.
</p>
<p>Stored in the <code>unchanging</code> field and printed as &lsquo;<samp>/u</samp>&rsquo;.
</p>
<a name="index-SCHED_005fGROUP_005fP"></a>
<a name="index-insn-and-_002fs-1"></a>
<a name="index-call_005finsn-and-_002fs-1"></a>
<a name="index-jump_005finsn-and-_002fs-1"></a>
<a name="index-in_005fstruct_002c-in-insn_002c-jump_005finsn-and-call_005finsn"></a>
</dd>
<dt><code>SCHED_GROUP_P (<var>x</var>)</code></dt>
<dd><p>During instruction scheduling, in an <code>insn</code>, <code>call_insn</code> or
<code>jump_insn</code>, indicates that the
previous insn must be scheduled together with this insn.  This is used to
ensure that certain groups of instructions will not be split up by the
instruction scheduling pass, for example, <code>use</code> insns before
a <code>call_insn</code> may not be separated from the <code>call_insn</code>.
Stored in the <code>in_struct</code> field and printed as &lsquo;<samp>/s</samp>&rsquo;.
</p>
<a name="index-SET_005fIS_005fRETURN_005fP"></a>
<a name="index-insn-and-_002fj"></a>
<a name="index-jump_002c-in-insn"></a>
</dd>
<dt><code>SET_IS_RETURN_P (<var>x</var>)</code></dt>
<dd><p>For a <code>set</code>, nonzero if it is for a return.
Stored in the <code>jump</code> field and printed as &lsquo;<samp>/j</samp>&rsquo;.
</p>
<a name="index-SIBLING_005fCALL_005fP"></a>
<a name="index-call_005finsn-and-_002fj"></a>
<a name="index-jump_002c-in-call_005finsn"></a>
</dd>
<dt><code>SIBLING_CALL_P (<var>x</var>)</code></dt>
<dd><p>For a <code>call_insn</code>, nonzero if the insn is a sibling call.
Stored in the <code>jump</code> field and printed as &lsquo;<samp>/j</samp>&rsquo;.
</p>
<a name="index-STRING_005fPOOL_005fADDRESS_005fP"></a>
<a name="index-symbol_005fref-and-_002ff"></a>
<a name="index-frame_005frelated_002c-in-symbol_005fref"></a>
</dd>
<dt><code>STRING_POOL_ADDRESS_P (<var>x</var>)</code></dt>
<dd><p>For a <code>symbol_ref</code> expression, nonzero if it addresses this function&rsquo;s
string constant pool.
Stored in the <code>frame_related</code> field and printed as &lsquo;<samp>/f</samp>&rsquo;.
</p>
<a name="index-SUBREG_005fPROMOTED_005fUNSIGNED_005fP"></a>
<a name="index-subreg-and-_002fu-and-_002fv"></a>
<a name="index-unchanging_002c-in-subreg"></a>
<a name="index-volatil_002c-in-subreg"></a>
</dd>
<dt><code>SUBREG_PROMOTED_UNSIGNED_P (<var>x</var>)</code></dt>
<dd><p>Returns a value greater then zero for a <code>subreg</code> that has
<code>SUBREG_PROMOTED_VAR_P</code> nonzero if the object being referenced is kept
zero-extended, zero if it is kept sign-extended, and less then zero if it is
extended some other way via the <code>ptr_extend</code> instruction.
Stored in the <code>unchanging</code>
field and <code>volatil</code> field, printed as &lsquo;<samp>/u</samp>&rsquo; and &lsquo;<samp>/v</samp>&rsquo;.
This macro may only be used to get the value it may not be used to change
the value.  Use <code>SUBREG_PROMOTED_UNSIGNED_SET</code> to change the value.
</p>
<a name="index-SUBREG_005fPROMOTED_005fUNSIGNED_005fSET"></a>
<a name="index-subreg-and-_002fu"></a>
<a name="index-unchanging_002c-in-subreg-1"></a>
<a name="index-volatil_002c-in-subreg-1"></a>
</dd>
<dt><code>SUBREG_PROMOTED_UNSIGNED_SET (<var>x</var>)</code></dt>
<dd><p>Set the <code>unchanging</code> and <code>volatil</code> fields in a <code>subreg</code>
to reflect zero, sign, or other extension.  If <code>volatil</code> is
zero, then <code>unchanging</code> as nonzero means zero extension and as
zero means sign extension.  If <code>volatil</code> is nonzero then some
other type of extension was done via the <code>ptr_extend</code> instruction.
</p>
<a name="index-SUBREG_005fPROMOTED_005fVAR_005fP"></a>
<a name="index-subreg-and-_002fs"></a>
<a name="index-in_005fstruct_002c-in-subreg"></a>
</dd>
<dt><code>SUBREG_PROMOTED_VAR_P (<var>x</var>)</code></dt>
<dd><p>Nonzero in a <code>subreg</code> if it was made when accessing an object that
was promoted to a wider mode in accord with the <code>PROMOTED_MODE</code> machine
description macro (see <a href="#Storage-Layout">Storage Layout</a>).  In this case, the mode of
the <code>subreg</code> is the declared mode of the object and the mode of
<code>SUBREG_REG</code> is the mode of the register that holds the object.
Promoted variables are always either sign- or zero-extended to the wider
mode on every assignment.  Stored in the <code>in_struct</code> field and
printed as &lsquo;<samp>/s</samp>&rsquo;.
</p>
<a name="index-SYMBOL_005fREF_005fUSED"></a>
<a name="index-used_002c-in-symbol_005fref"></a>
</dd>
<dt><code>SYMBOL_REF_USED (<var>x</var>)</code></dt>
<dd><p>In a <code>symbol_ref</code>, indicates that <var>x</var> has been used.  This is
normally only used to ensure that <var>x</var> is only declared external
once.  Stored in the <code>used</code> field.
</p>
<a name="index-SYMBOL_005fREF_005fWEAK"></a>
<a name="index-symbol_005fref-and-_002fi"></a>
<a name="index-return_005fval_002c-in-symbol_005fref"></a>
</dd>
<dt><code>SYMBOL_REF_WEAK (<var>x</var>)</code></dt>
<dd><p>In a <code>symbol_ref</code>, indicates that <var>x</var> has been declared weak.
Stored in the <code>return_val</code> field and printed as &lsquo;<samp>/i</samp>&rsquo;.
</p>
<a name="index-SYMBOL_005fREF_005fFLAG"></a>
<a name="index-symbol_005fref-and-_002fv"></a>
<a name="index-volatil_002c-in-symbol_005fref"></a>
</dd>
<dt><code>SYMBOL_REF_FLAG (<var>x</var>)</code></dt>
<dd><p>In a <code>symbol_ref</code>, this is used as a flag for machine-specific purposes.
Stored in the <code>volatil</code> field and printed as &lsquo;<samp>/v</samp>&rsquo;.
</p>
<p>Most uses of <code>SYMBOL_REF_FLAG</code> are historic and may be subsumed
by <code>SYMBOL_REF_FLAGS</code>.  Certainly use of <code>SYMBOL_REF_FLAGS</code>
is mandatory if the target requires more than one bit of storage.
</p>
<a name="index-PREFETCH_005fSCHEDULE_005fBARRIER_005fP"></a>
<a name="index-prefetch-and-_002fv"></a>
<a name="index-volatile_002c-in-prefetch"></a>
</dd>
<dt><code>PREFETCH_SCHEDULE_BARRIER_P (<var>x</var>)</code></dt>
<dd><p>In a <code>prefetch</code>, indicates that the prefetch is a scheduling barrier.
No other INSNs will be moved over it.
Stored in the <code>volatil</code> field and printed as &lsquo;<samp>/v</samp>&rsquo;.
</p></dd>
</dl>

<p>These are the fields to which the above macros refer:
</p>
<dl compact="compact">
<dd><a name="index-call"></a>
<a name="index-_002fc-in-RTL-dump"></a>
</dd>
<dt><code>call</code></dt>
<dd><p>In a <code>mem</code>, 1 means that the memory reference will not trap.
</p>
<p>In a <code>call</code>, 1 means that this pure or const call may possibly
infinite loop.
</p>
<p>In an RTL dump, this flag is represented as &lsquo;<samp>/c</samp>&rsquo;.
</p>
<a name="index-frame_005frelated"></a>
<a name="index-_002ff-in-RTL-dump"></a>
</dd>
<dt><code>frame_related</code></dt>
<dd><p>In an <code>insn</code> or <code>set</code> expression, 1 means that it is part of
a function prologue and sets the stack pointer, sets the frame pointer,
saves a register, or sets up a temporary register to use in place of the
frame pointer.
</p>
<p>In <code>reg</code> expressions, 1 means that the register holds a pointer.
</p>
<p>In <code>mem</code> expressions, 1 means that the memory reference holds a pointer.
</p>
<p>In <code>symbol_ref</code> expressions, 1 means that the reference addresses
this function&rsquo;s string constant pool.
</p>
<p>In an RTL dump, this flag is represented as &lsquo;<samp>/f</samp>&rsquo;.
</p>
<a name="index-in_005fstruct"></a>
<a name="index-_002fs-in-RTL-dump"></a>
</dd>
<dt><code>in_struct</code></dt>
<dd><p>In <code>reg</code> expressions, it is 1 if the register has its entire life
contained within the test expression of some loop.
</p>
<p>In <code>subreg</code> expressions, 1 means that the <code>subreg</code> is accessing
an object that has had its mode promoted from a wider mode.
</p>
<p>In <code>label_ref</code> expressions, 1 means that the referenced label is
outside the innermost loop containing the insn in which the <code>label_ref</code>
was found.
</p>
<p>In <code>code_label</code> expressions, it is 1 if the label may never be deleted.
This is used for labels which are the target of non-local gotos.  Such a
label that would have been deleted is replaced with a <code>note</code> of type
<code>NOTE_INSN_DELETED_LABEL</code>.
</p>
<p>In an <code>insn</code> during dead-code elimination, 1 means that the insn is
dead code.
</p>
<p>In an <code>insn</code> or <code>jump_insn</code> during reorg for an insn in the
delay slot of a branch,
1 means that this insn is from the target of the branch.
</p>
<p>In an <code>insn</code> during instruction scheduling, 1 means that this insn
must be scheduled as part of a group together with the previous insn.
</p>
<p>In an RTL dump, this flag is represented as &lsquo;<samp>/s</samp>&rsquo;.
</p>
<a name="index-return_005fval"></a>
<a name="index-_002fi-in-RTL-dump"></a>
</dd>
<dt><code>return_val</code></dt>
<dd><p>In <code>reg</code> expressions, 1 means the register contains
the value to be returned by the current function.  On
machines that pass parameters in registers, the same register number
may be used for parameters as well, but this flag is not set on such
uses.
</p>
<p>In <code>symbol_ref</code> expressions, 1 means the referenced symbol is weak.
</p>
<p>In <code>call</code> expressions, 1 means the call is pure.
</p>
<p>In an RTL dump, this flag is represented as &lsquo;<samp>/i</samp>&rsquo;.
</p>
<a name="index-jump"></a>
<a name="index-_002fj-in-RTL-dump"></a>
</dd>
<dt><code>jump</code></dt>
<dd><p>In a <code>mem</code> expression, 1 means we should keep the alias set for this
mem unchanged when we access a component.
</p>
<p>In a <code>set</code>, 1 means it is for a return.
</p>
<p>In a <code>call_insn</code>, 1 means it is a sibling call.
</p>
<p>In an RTL dump, this flag is represented as &lsquo;<samp>/j</samp>&rsquo;.
</p>
<a name="index-unchanging"></a>
<a name="index-_002fu-in-RTL-dump"></a>
</dd>
<dt><code>unchanging</code></dt>
<dd><p>In <code>reg</code> and <code>mem</code> expressions, 1 means
that the value of the expression never changes.
</p>
<p>In <code>subreg</code> expressions, it is 1 if the <code>subreg</code> references an
unsigned object whose mode has been promoted to a wider mode.
</p>
<p>In an <code>insn</code> or <code>jump_insn</code> in the delay slot of a branch
instruction, 1 means an annulling branch should be used.
</p>
<p>In a <code>symbol_ref</code> expression, 1 means that this symbol addresses
something in the per-function constant pool.
</p>
<p>In a <code>call_insn</code> 1 means that this instruction is a call to a const
function.
</p>
<p>In an RTL dump, this flag is represented as &lsquo;<samp>/u</samp>&rsquo;.
</p>
<a name="index-used"></a>
</dd>
<dt><code>used</code></dt>
<dd><p>This flag is used directly (without an access macro) at the end of RTL
generation for a function, to count the number of times an expression
appears in insns.  Expressions that appear more than once are copied,
according to the rules for shared structure (see <a href="#Sharing">Sharing</a>).
</p>
<p>For a <code>reg</code>, it is used directly (without an access macro) by the
leaf register renumbering code to ensure that each register is only
renumbered once.
</p>
<p>In a <code>symbol_ref</code>, it indicates that an external declaration for
the symbol has already been written.
</p>
<a name="index-volatil"></a>
<a name="index-_002fv-in-RTL-dump"></a>
</dd>
<dt><code>volatil</code></dt>
<dd><a name="index-volatile-memory-references"></a>
<p>In a <code>mem</code>, <code>asm_operands</code>, or <code>asm_input</code>
expression, it is 1 if the memory
reference is volatile.  Volatile memory references may not be deleted,
reordered or combined.
</p>
<p>In a <code>symbol_ref</code> expression, it is used for machine-specific
purposes.
</p>
<p>In a <code>reg</code> expression, it is 1 if the value is a user-level variable.
0 indicates an internal compiler temporary.
</p>
<p>In an <code>insn</code>, 1 means the insn has been deleted.
</p>
<p>In <code>label_ref</code> and <code>reg_label</code> expressions, 1 means a reference
to a non-local label.
</p>
<p>In <code>prefetch</code> expressions, 1 means that the containing insn is a
scheduling barrier.
</p>
<p>In an RTL dump, this flag is represented as &lsquo;<samp>/v</samp>&rsquo;.
</p></dd>
</dl>

<hr>
<a name="Machine-Modes"></a>
<div class="header">
<p>
Next: <a href="#Constants" accesskey="n" rel="next">Constants</a>, Previous: <a href="#Flags" accesskey="p" rel="prev">Flags</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Machine-Modes-1"></a>
<h3 class="section">10.6 Machine Modes</h3>
<a name="index-machine-modes"></a>

<a name="index-enum-machine_005fmode"></a>
<p>A machine mode describes a size of data object and the representation used
for it.  In the C code, machine modes are represented by an enumeration
type, <code>enum machine_mode</code>, defined in <samp>machmode.def</samp>.  Each RTL
expression has room for a machine mode and so do certain kinds of tree
expressions (declarations and types, to be precise).
</p>
<p>In debugging dumps and machine descriptions, the machine mode of an RTL
expression is written after the expression code with a colon to separate
them.  The letters &lsquo;<samp>mode</samp>&rsquo; which appear at the end of each machine mode
name are omitted.  For example, <code>(reg:SI 38)</code> is a <code>reg</code>
expression with machine mode <code>SImode</code>.  If the mode is
<code>VOIDmode</code>, it is not written at all.
</p>
<p>Here is a table of machine modes.  The term &ldquo;byte&rdquo; below refers to an
object of <code>BITS_PER_UNIT</code> bits (see <a href="#Storage-Layout">Storage Layout</a>).
</p>
<dl compact="compact">
<dd><a name="index-BImode"></a>
</dd>
<dt><code>BImode</code></dt>
<dd><p>&ldquo;Bit&rdquo; mode represents a single bit, for predicate registers.
</p>
<a name="index-QImode"></a>
</dd>
<dt><code>QImode</code></dt>
<dd><p>&ldquo;Quarter-Integer&rdquo; mode represents a single byte treated as an integer.
</p>
<a name="index-HImode"></a>
</dd>
<dt><code>HImode</code></dt>
<dd><p>&ldquo;Half-Integer&rdquo; mode represents a two-byte integer.
</p>
<a name="index-PSImode"></a>
</dd>
<dt><code>PSImode</code></dt>
<dd><p>&ldquo;Partial Single Integer&rdquo; mode represents an integer which occupies
four bytes but which doesn&rsquo;t really use all four.  On some machines,
this is the right mode to use for pointers.
</p>
<a name="index-SImode"></a>
</dd>
<dt><code>SImode</code></dt>
<dd><p>&ldquo;Single Integer&rdquo; mode represents a four-byte integer.
</p>
<a name="index-PDImode"></a>
</dd>
<dt><code>PDImode</code></dt>
<dd><p>&ldquo;Partial Double Integer&rdquo; mode represents an integer which occupies
eight bytes but which doesn&rsquo;t really use all eight.  On some machines,
this is the right mode to use for certain pointers.
</p>
<a name="index-DImode"></a>
</dd>
<dt><code>DImode</code></dt>
<dd><p>&ldquo;Double Integer&rdquo; mode represents an eight-byte integer.
</p>
<a name="index-TImode"></a>
</dd>
<dt><code>TImode</code></dt>
<dd><p>&ldquo;Tetra Integer&rdquo; (?) mode represents a sixteen-byte integer.
</p>
<a name="index-OImode"></a>
</dd>
<dt><code>OImode</code></dt>
<dd><p>&ldquo;Octa Integer&rdquo; (?) mode represents a thirty-two-byte integer.
</p>
<a name="index-QFmode"></a>
</dd>
<dt><code>QFmode</code></dt>
<dd><p>&ldquo;Quarter-Floating&rdquo; mode represents a quarter-precision (single byte)
floating point number.
</p>
<a name="index-HFmode"></a>
</dd>
<dt><code>HFmode</code></dt>
<dd><p>&ldquo;Half-Floating&rdquo; mode represents a half-precision (two byte) floating
point number.
</p>
<a name="index-TQFmode"></a>
</dd>
<dt><code>TQFmode</code></dt>
<dd><p>&ldquo;Three-Quarter-Floating&rdquo; (?) mode represents a three-quarter-precision
(three byte) floating point number.
</p>
<a name="index-SFmode"></a>
</dd>
<dt><code>SFmode</code></dt>
<dd><p>&ldquo;Single Floating&rdquo; mode represents a four byte floating point number.
In the common case, of a processor with IEEE arithmetic and 8-bit bytes,
this is a single-precision IEEE floating point number; it can also be
used for double-precision (on processors with 16-bit bytes) and
single-precision VAX and IBM types.
</p>
<a name="index-DFmode"></a>
</dd>
<dt><code>DFmode</code></dt>
<dd><p>&ldquo;Double Floating&rdquo; mode represents an eight byte floating point number.
In the common case, of a processor with IEEE arithmetic and 8-bit bytes,
this is a double-precision IEEE floating point number.
</p>
<a name="index-XFmode"></a>
</dd>
<dt><code>XFmode</code></dt>
<dd><p>&ldquo;Extended Floating&rdquo; mode represents an IEEE extended floating point
number.  This mode only has 80 meaningful bits (ten bytes).  Some
processors require such numbers to be padded to twelve bytes, others
to sixteen; this mode is used for either.
</p>
<a name="index-SDmode"></a>
</dd>
<dt><code>SDmode</code></dt>
<dd><p>&ldquo;Single Decimal Floating&rdquo; mode represents a four byte decimal
floating point number (as distinct from conventional binary floating
point).
</p>
<a name="index-DDmode"></a>
</dd>
<dt><code>DDmode</code></dt>
<dd><p>&ldquo;Double Decimal Floating&rdquo; mode represents an eight byte decimal
floating point number.
</p>
<a name="index-TDmode"></a>
</dd>
<dt><code>TDmode</code></dt>
<dd><p>&ldquo;Tetra Decimal Floating&rdquo; mode represents a sixteen byte decimal
floating point number all 128 of whose bits are meaningful.
</p>
<a name="index-TFmode"></a>
</dd>
<dt><code>TFmode</code></dt>
<dd><p>&ldquo;Tetra Floating&rdquo; mode represents a sixteen byte floating point number
all 128 of whose bits are meaningful.  One common use is the
IEEE quad-precision format.
</p>
<a name="index-QQmode"></a>
</dd>
<dt><code>QQmode</code></dt>
<dd><p>&ldquo;Quarter-Fractional&rdquo; mode represents a single byte treated as a signed
fractional number.  The default format is &ldquo;s.7&rdquo;.
</p>
<a name="index-HQmode"></a>
</dd>
<dt><code>HQmode</code></dt>
<dd><p>&ldquo;Half-Fractional&rdquo; mode represents a two-byte signed fractional number.
The default format is &ldquo;s.15&rdquo;.
</p>
<a name="index-SQmode"></a>
</dd>
<dt><code>SQmode</code></dt>
<dd><p>&ldquo;Single Fractional&rdquo; mode represents a four-byte signed fractional number.
The default format is &ldquo;s.31&rdquo;.
</p>
<a name="index-DQmode"></a>
</dd>
<dt><code>DQmode</code></dt>
<dd><p>&ldquo;Double Fractional&rdquo; mode represents an eight-byte signed fractional number.
The default format is &ldquo;s.63&rdquo;.
</p>
<a name="index-TQmode"></a>
</dd>
<dt><code>TQmode</code></dt>
<dd><p>&ldquo;Tetra Fractional&rdquo; mode represents a sixteen-byte signed fractional number.
The default format is &ldquo;s.127&rdquo;.
</p>
<a name="index-UQQmode"></a>
</dd>
<dt><code>UQQmode</code></dt>
<dd><p>&ldquo;Unsigned Quarter-Fractional&rdquo; mode represents a single byte treated as an
unsigned fractional number.  The default format is &ldquo;.8&rdquo;.
</p>
<a name="index-UHQmode"></a>
</dd>
<dt><code>UHQmode</code></dt>
<dd><p>&ldquo;Unsigned Half-Fractional&rdquo; mode represents a two-byte unsigned fractional
number.  The default format is &ldquo;.16&rdquo;.
</p>
<a name="index-USQmode"></a>
</dd>
<dt><code>USQmode</code></dt>
<dd><p>&ldquo;Unsigned Single Fractional&rdquo; mode represents a four-byte unsigned fractional
number.  The default format is &ldquo;.32&rdquo;.
</p>
<a name="index-UDQmode"></a>
</dd>
<dt><code>UDQmode</code></dt>
<dd><p>&ldquo;Unsigned Double Fractional&rdquo; mode represents an eight-byte unsigned
fractional number.  The default format is &ldquo;.64&rdquo;.
</p>
<a name="index-UTQmode"></a>
</dd>
<dt><code>UTQmode</code></dt>
<dd><p>&ldquo;Unsigned Tetra Fractional&rdquo; mode represents a sixteen-byte unsigned
fractional number.  The default format is &ldquo;.128&rdquo;.
</p>
<a name="index-HAmode"></a>
</dd>
<dt><code>HAmode</code></dt>
<dd><p>&ldquo;Half-Accumulator&rdquo; mode represents a two-byte signed accumulator.
The default format is &ldquo;s8.7&rdquo;.
</p>
<a name="index-SAmode"></a>
</dd>
<dt><code>SAmode</code></dt>
<dd><p>&ldquo;Single Accumulator&rdquo; mode represents a four-byte signed accumulator.
The default format is &ldquo;s16.15&rdquo;.
</p>
<a name="index-DAmode"></a>
</dd>
<dt><code>DAmode</code></dt>
<dd><p>&ldquo;Double Accumulator&rdquo; mode represents an eight-byte signed accumulator.
The default format is &ldquo;s32.31&rdquo;.
</p>
<a name="index-TAmode"></a>
</dd>
<dt><code>TAmode</code></dt>
<dd><p>&ldquo;Tetra Accumulator&rdquo; mode represents a sixteen-byte signed accumulator.
The default format is &ldquo;s64.63&rdquo;.
</p>
<a name="index-UHAmode"></a>
</dd>
<dt><code>UHAmode</code></dt>
<dd><p>&ldquo;Unsigned Half-Accumulator&rdquo; mode represents a two-byte unsigned accumulator.
The default format is &ldquo;8.8&rdquo;.
</p>
<a name="index-USAmode"></a>
</dd>
<dt><code>USAmode</code></dt>
<dd><p>&ldquo;Unsigned Single Accumulator&rdquo; mode represents a four-byte unsigned
accumulator.  The default format is &ldquo;16.16&rdquo;.
</p>
<a name="index-UDAmode"></a>
</dd>
<dt><code>UDAmode</code></dt>
<dd><p>&ldquo;Unsigned Double Accumulator&rdquo; mode represents an eight-byte unsigned
accumulator.  The default format is &ldquo;32.32&rdquo;.
</p>
<a name="index-UTAmode"></a>
</dd>
<dt><code>UTAmode</code></dt>
<dd><p>&ldquo;Unsigned Tetra Accumulator&rdquo; mode represents a sixteen-byte unsigned
accumulator.  The default format is &ldquo;64.64&rdquo;.
</p>
<a name="index-CCmode"></a>
</dd>
<dt><code>CCmode</code></dt>
<dd><p>&ldquo;Condition Code&rdquo; mode represents the value of a condition code, which
is a machine-specific set of bits used to represent the result of a
comparison operation.  Other machine-specific modes may also be used for
the condition code.  These modes are not used on machines that use
<code>cc0</code> (see <a href="#Condition-Code">Condition Code</a>).
</p>
<a name="index-BLKmode"></a>
</dd>
<dt><code>BLKmode</code></dt>
<dd><p>&ldquo;Block&rdquo; mode represents values that are aggregates to which none of
the other modes apply.  In RTL, only memory references can have this mode,
and only if they appear in string-move or vector instructions.  On machines
which have no such instructions, <code>BLKmode</code> will not appear in RTL.
</p>
<a name="index-VOIDmode"></a>
</dd>
<dt><code>VOIDmode</code></dt>
<dd><p>Void mode means the absence of a mode or an unspecified mode.
For example, RTL expressions of code <code>const_int</code> have mode
<code>VOIDmode</code> because they can be taken to have whatever mode the context
requires.  In debugging dumps of RTL, <code>VOIDmode</code> is expressed by
the absence of any mode.
</p>
<a name="index-QCmode"></a>
<a name="index-HCmode"></a>
<a name="index-SCmode"></a>
<a name="index-DCmode"></a>
<a name="index-XCmode"></a>
<a name="index-TCmode"></a>
</dd>
<dt><code>QCmode, HCmode, SCmode, DCmode, XCmode, TCmode</code></dt>
<dd><p>These modes stand for a complex number represented as a pair of floating
point values.  The floating point values are in <code>QFmode</code>,
<code>HFmode</code>, <code>SFmode</code>, <code>DFmode</code>, <code>XFmode</code>, and
<code>TFmode</code>, respectively.
</p>
<a name="index-CQImode"></a>
<a name="index-CHImode"></a>
<a name="index-CSImode"></a>
<a name="index-CDImode"></a>
<a name="index-CTImode"></a>
<a name="index-COImode"></a>
</dd>
<dt><code>CQImode, CHImode, CSImode, CDImode, CTImode, COImode</code></dt>
<dd><p>These modes stand for a complex number represented as a pair of integer
values.  The integer values are in <code>QImode</code>, <code>HImode</code>,
<code>SImode</code>, <code>DImode</code>, <code>TImode</code>, and <code>OImode</code>,
respectively.
</p></dd>
</dl>

<p>The machine description defines <code>Pmode</code> as a C macro which expands
into the machine mode used for addresses.  Normally this is the mode
whose size is <code>BITS_PER_WORD</code>, <code>SImode</code> on 32-bit machines.
</p>
<p>The only modes which a machine description <i>must</i> support are
<code>QImode</code>, and the modes corresponding to <code>BITS_PER_WORD</code>,
<code>FLOAT_TYPE_SIZE</code> and <code>DOUBLE_TYPE_SIZE</code>.
The compiler will attempt to use <code>DImode</code> for 8-byte structures and
unions, but this can be prevented by overriding the definition of
<code>MAX_FIXED_MODE_SIZE</code>.  Alternatively, you can have the compiler
use <code>TImode</code> for 16-byte structures and unions.  Likewise, you can
arrange for the C type <code>short int</code> to avoid using <code>HImode</code>.
</p>
<a name="index-mode-classes"></a>
<p>Very few explicit references to machine modes remain in the compiler and
these few references will soon be removed.  Instead, the machine modes
are divided into mode classes.  These are represented by the enumeration
type <code>enum mode_class</code> defined in <samp>machmode.h</samp>.  The possible
mode classes are:
</p>
<dl compact="compact">
<dd><a name="index-MODE_005fINT"></a>
</dd>
<dt><code>MODE_INT</code></dt>
<dd><p>Integer modes.  By default these are <code>BImode</code>, <code>QImode</code>,
<code>HImode</code>, <code>SImode</code>, <code>DImode</code>, <code>TImode</code>, and
<code>OImode</code>.
</p>
<a name="index-MODE_005fPARTIAL_005fINT"></a>
</dd>
<dt><code>MODE_PARTIAL_INT</code></dt>
<dd><p>The &ldquo;partial integer&rdquo; modes, <code>PQImode</code>, <code>PHImode</code>,
<code>PSImode</code> and <code>PDImode</code>.
</p>
<a name="index-MODE_005fFLOAT"></a>
</dd>
<dt><code>MODE_FLOAT</code></dt>
<dd><p>Floating point modes.  By default these are <code>QFmode</code>,
<code>HFmode</code>, <code>TQFmode</code>, <code>SFmode</code>, <code>DFmode</code>,
<code>XFmode</code> and <code>TFmode</code>.
</p>
<a name="index-MODE_005fDECIMAL_005fFLOAT"></a>
</dd>
<dt><code>MODE_DECIMAL_FLOAT</code></dt>
<dd><p>Decimal floating point modes.  By default these are <code>SDmode</code>,
<code>DDmode</code> and <code>TDmode</code>.
</p>
<a name="index-MODE_005fFRACT"></a>
</dd>
<dt><code>MODE_FRACT</code></dt>
<dd><p>Signed fractional modes.  By default these are <code>QQmode</code>, <code>HQmode</code>,
<code>SQmode</code>, <code>DQmode</code> and <code>TQmode</code>.
</p>
<a name="index-MODE_005fUFRACT"></a>
</dd>
<dt><code>MODE_UFRACT</code></dt>
<dd><p>Unsigned fractional modes.  By default these are <code>UQQmode</code>, <code>UHQmode</code>,
<code>USQmode</code>, <code>UDQmode</code> and <code>UTQmode</code>.
</p>
<a name="index-MODE_005fACCUM"></a>
</dd>
<dt><code>MODE_ACCUM</code></dt>
<dd><p>Signed accumulator modes.  By default these are <code>HAmode</code>,
<code>SAmode</code>, <code>DAmode</code> and <code>TAmode</code>.
</p>
<a name="index-MODE_005fUACCUM"></a>
</dd>
<dt><code>MODE_UACCUM</code></dt>
<dd><p>Unsigned accumulator modes.  By default these are <code>UHAmode</code>,
<code>USAmode</code>, <code>UDAmode</code> and <code>UTAmode</code>.
</p>
<a name="index-MODE_005fCOMPLEX_005fINT"></a>
</dd>
<dt><code>MODE_COMPLEX_INT</code></dt>
<dd><p>Complex integer modes.  (These are not currently implemented).
</p>
<a name="index-MODE_005fCOMPLEX_005fFLOAT"></a>
</dd>
<dt><code>MODE_COMPLEX_FLOAT</code></dt>
<dd><p>Complex floating point modes.  By default these are <code>QCmode</code>,
<code>HCmode</code>, <code>SCmode</code>, <code>DCmode</code>, <code>XCmode</code>, and
<code>TCmode</code>.
</p>
<a name="index-MODE_005fFUNCTION"></a>
</dd>
<dt><code>MODE_FUNCTION</code></dt>
<dd><p>Algol or Pascal function variables including a static chain.
(These are not currently implemented).
</p>
<a name="index-MODE_005fCC"></a>
</dd>
<dt><code>MODE_CC</code></dt>
<dd><p>Modes representing condition code values.  These are <code>CCmode</code> plus
any <code>CC_MODE</code> modes listed in the <samp><var>machine</var>-modes.def</samp>.
See <a href="#Jump-Patterns">Jump Patterns</a>,
also see <a href="#Condition-Code">Condition Code</a>.
</p>
<a name="index-MODE_005fRANDOM"></a>
</dd>
<dt><code>MODE_RANDOM</code></dt>
<dd><p>This is a catchall mode class for modes which don&rsquo;t fit into the above
classes.  Currently <code>VOIDmode</code> and <code>BLKmode</code> are in
<code>MODE_RANDOM</code>.
</p></dd>
</dl>

<p>Here are some C macros that relate to machine modes:
</p>
<dl compact="compact">
<dd><a name="index-GET_005fMODE"></a>
</dd>
<dt><code>GET_MODE (<var>x</var>)</code></dt>
<dd><p>Returns the machine mode of the RTX <var>x</var>.
</p>
<a name="index-PUT_005fMODE"></a>
</dd>
<dt><code>PUT_MODE (<var>x</var>, <var>newmode</var>)</code></dt>
<dd><p>Alters the machine mode of the RTX <var>x</var> to be <var>newmode</var>.
</p>
<a name="index-NUM_005fMACHINE_005fMODES"></a>
</dd>
<dt><code>NUM_MACHINE_MODES</code></dt>
<dd><p>Stands for the number of machine modes available on the target
machine.  This is one greater than the largest numeric value of any
machine mode.
</p>
<a name="index-GET_005fMODE_005fNAME"></a>
</dd>
<dt><code>GET_MODE_NAME (<var>m</var>)</code></dt>
<dd><p>Returns the name of mode <var>m</var> as a string.
</p>
<a name="index-GET_005fMODE_005fCLASS"></a>
</dd>
<dt><code>GET_MODE_CLASS (<var>m</var>)</code></dt>
<dd><p>Returns the mode class of mode <var>m</var>.
</p>
<a name="index-GET_005fMODE_005fWIDER_005fMODE"></a>
</dd>
<dt><code>GET_MODE_WIDER_MODE (<var>m</var>)</code></dt>
<dd><p>Returns the next wider natural mode.  For example, the expression
<code>GET_MODE_WIDER_MODE (QImode)</code> returns <code>HImode</code>.
</p>
<a name="index-GET_005fMODE_005fSIZE"></a>
</dd>
<dt><code>GET_MODE_SIZE (<var>m</var>)</code></dt>
<dd><p>Returns the size in bytes of a datum of mode <var>m</var>.
</p>
<a name="index-GET_005fMODE_005fBITSIZE"></a>
</dd>
<dt><code>GET_MODE_BITSIZE (<var>m</var>)</code></dt>
<dd><p>Returns the size in bits of a datum of mode <var>m</var>.
</p>
<a name="index-GET_005fMODE_005fIBIT"></a>
</dd>
<dt><code>GET_MODE_IBIT (<var>m</var>)</code></dt>
<dd><p>Returns the number of integral bits of a datum of fixed-point mode <var>m</var>.
</p>
<a name="index-GET_005fMODE_005fFBIT"></a>
</dd>
<dt><code>GET_MODE_FBIT (<var>m</var>)</code></dt>
<dd><p>Returns the number of fractional bits of a datum of fixed-point mode <var>m</var>.
</p>
<a name="index-GET_005fMODE_005fMASK"></a>
</dd>
<dt><code>GET_MODE_MASK (<var>m</var>)</code></dt>
<dd><p>Returns a bitmask containing 1 for all bits in a word that fit within
mode <var>m</var>.  This macro can only be used for modes whose bitsize is
less than or equal to <code>HOST_BITS_PER_INT</code>.
</p>
<a name="index-GET_005fMODE_005fALIGNMENT"></a>
</dd>
<dt><code>GET_MODE_ALIGNMENT (<var>m</var>)</code></dt>
<dd><p>Return the required alignment, in bits, for an object of mode <var>m</var>.
</p>
<a name="index-GET_005fMODE_005fUNIT_005fSIZE"></a>
</dd>
<dt><code>GET_MODE_UNIT_SIZE (<var>m</var>)</code></dt>
<dd><p>Returns the size in bytes of the subunits of a datum of mode <var>m</var>.
This is the same as <code>GET_MODE_SIZE</code> except in the case of complex
modes.  For them, the unit size is the size of the real or imaginary
part.
</p>
<a name="index-GET_005fMODE_005fNUNITS"></a>
</dd>
<dt><code>GET_MODE_NUNITS (<var>m</var>)</code></dt>
<dd><p>Returns the number of units contained in a mode, i.e.,
<code>GET_MODE_SIZE</code> divided by <code>GET_MODE_UNIT_SIZE</code>.
</p>
<a name="index-GET_005fCLASS_005fNARROWEST_005fMODE"></a>
</dd>
<dt><code>GET_CLASS_NARROWEST_MODE (<var>c</var>)</code></dt>
<dd><p>Returns the narrowest mode in mode class <var>c</var>.
</p></dd>
</dl>

<a name="index-byte_005fmode"></a>
<a name="index-word_005fmode"></a>
<p>The global variables <code>byte_mode</code> and <code>word_mode</code> contain modes
whose classes are <code>MODE_INT</code> and whose bitsizes are either
<code>BITS_PER_UNIT</code> or <code>BITS_PER_WORD</code>, respectively.  On 32-bit
machines, these are <code>QImode</code> and <code>SImode</code>, respectively.
</p>
<hr>
<a name="Constants"></a>
<div class="header">
<p>
Next: <a href="#Regs-and-Memory" accesskey="n" rel="next">Regs and Memory</a>, Previous: <a href="#Machine-Modes" accesskey="p" rel="prev">Machine Modes</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Constant-Expression-Types"></a>
<h3 class="section">10.7 Constant Expression Types</h3>
<a name="index-RTL-constants"></a>
<a name="index-RTL-constant-expression-types"></a>

<p>The simplest RTL expressions are those that represent constant values.
</p>
<dl compact="compact">
<dd><a name="index-const_005fint"></a>
</dd>
<dt><code>(const_int <var>i</var>)</code></dt>
<dd><p>This type of expression represents the integer value <var>i</var>.  <var>i</var>
is customarily accessed with the macro <code>INTVAL</code> as in
<code>INTVAL (<var>exp</var>)</code>, which is equivalent to <code>XWINT (<var>exp</var>, 0)</code>.
</p>
<p>Constants generated for modes with fewer bits than in
<code>HOST_WIDE_INT</code> must be sign extended to full width (e.g., with
<code>gen_int_mode</code>).  For constants for modes with more bits than in
<code>HOST_WIDE_INT</code> the implied high order bits of that constant are
copies of the top bit.  Note however that values are neither
inherently signed nor inherently unsigned; where necessary, signedness
is determined by the rtl operation instead.
</p>
<a name="index-const0_005frtx"></a>
<a name="index-const1_005frtx"></a>
<a name="index-const2_005frtx"></a>
<a name="index-constm1_005frtx"></a>
<p>There is only one expression object for the integer value zero; it is
the value of the variable <code>const0_rtx</code>.  Likewise, the only
expression for integer value one is found in <code>const1_rtx</code>, the only
expression for integer value two is found in <code>const2_rtx</code>, and the
only expression for integer value negative one is found in
<code>constm1_rtx</code>.  Any attempt to create an expression of code
<code>const_int</code> and value zero, one, two or negative one will return
<code>const0_rtx</code>, <code>const1_rtx</code>, <code>const2_rtx</code> or
<code>constm1_rtx</code> as appropriate.
</p>
<a name="index-const_005ftrue_005frtx"></a>
<p>Similarly, there is only one object for the integer whose value is
<code>STORE_FLAG_VALUE</code>.  It is found in <code>const_true_rtx</code>.  If
<code>STORE_FLAG_VALUE</code> is one, <code>const_true_rtx</code> and
<code>const1_rtx</code> will point to the same object.  If
<code>STORE_FLAG_VALUE</code> is -1, <code>const_true_rtx</code> and
<code>constm1_rtx</code> will point to the same object.
</p>
<a name="index-const_005fdouble"></a>
</dd>
<dt><code>(const_double:<var>m</var> <var>i0</var> <var>i1</var> &hellip;)</code></dt>
<dd><p>Represents either a floating-point constant of mode <var>m</var> or an
integer constant too large to fit into <code>HOST_BITS_PER_WIDE_INT</code>
bits but small enough to fit within twice that number of bits (GCC
does not provide a mechanism to represent even larger constants).  In
the latter case, <var>m</var> will be <code>VOIDmode</code>.  For integral values
constants for modes with more bits than twice the number in
<code>HOST_WIDE_INT</code> the implied high order bits of that constant are
copies of the top bit of <code>CONST_DOUBLE_HIGH</code>.  Note however that
integral values are neither inherently signed nor inherently unsigned;
where necessary, signedness is determined by the rtl operation
instead.
</p>
<a name="index-CONST_005fDOUBLE_005fLOW"></a>
<p>If <var>m</var> is <code>VOIDmode</code>, the bits of the value are stored in
<var>i0</var> and <var>i1</var>.  <var>i0</var> is customarily accessed with the macro
<code>CONST_DOUBLE_LOW</code> and <var>i1</var> with <code>CONST_DOUBLE_HIGH</code>.
</p>
<p>If the constant is floating point (regardless of its precision), then
the number of integers used to store the value depends on the size of
<code>REAL_VALUE_TYPE</code> (see <a href="#Floating-Point">Floating Point</a>).  The integers
represent a floating point number, but not precisely in the target
machine&rsquo;s or host machine&rsquo;s floating point format.  To convert them to
the precise bit pattern used by the target machine, use the macro
<code>REAL_VALUE_TO_TARGET_DOUBLE</code> and friends (see <a href="#Data-Output">Data Output</a>).
</p>
<a name="index-const_005ffixed"></a>
</dd>
<dt><code>(const_fixed:<var>m</var> &hellip;)</code></dt>
<dd><p>Represents a fixed-point constant of mode <var>m</var>.
The operand is a data structure of type <code>struct fixed_value</code> and
is accessed with the macro <code>CONST_FIXED_VALUE</code>.  The high part of
data is accessed with <code>CONST_FIXED_VALUE_HIGH</code>; the low part is
accessed with <code>CONST_FIXED_VALUE_LOW</code>.
</p>
<a name="index-const_005fvector"></a>
</dd>
<dt><code>(const_vector:<var>m</var> [<var>x0</var> <var>x1</var> &hellip;])</code></dt>
<dd><p>Represents a vector constant.  The square brackets stand for the vector
containing the constant elements.  <var>x0</var>, <var>x1</var> and so on are
the <code>const_int</code>, <code>const_double</code> or <code>const_fixed</code> elements.
</p>
<p>The number of units in a <code>const_vector</code> is obtained with the macro
<code>CONST_VECTOR_NUNITS</code> as in <code>CONST_VECTOR_NUNITS (<var>v</var>)</code>.
</p>
<p>Individual elements in a vector constant are accessed with the macro
<code>CONST_VECTOR_ELT</code> as in <code>CONST_VECTOR_ELT (<var>v</var>, <var>n</var>)</code>
where <var>v</var> is the vector constant and <var>n</var> is the element
desired.
</p>
<a name="index-const_005fstring"></a>
</dd>
<dt><code>(const_string <var>str</var>)</code></dt>
<dd><p>Represents a constant string with value <var>str</var>.  Currently this is
used only for insn attributes (see <a href="#Insn-Attributes">Insn Attributes</a>) since constant
strings in C are placed in memory.
</p>
<a name="index-symbol_005fref"></a>
</dd>
<dt><code>(symbol_ref:<var>mode</var> <var>symbol</var>)</code></dt>
<dd><p>Represents the value of an assembler label for data.  <var>symbol</var> is
a string that describes the name of the assembler label.  If it starts
with a &lsquo;<samp>*</samp>&rsquo;, the label is the rest of <var>symbol</var> not including
the &lsquo;<samp>*</samp>&rsquo;.  Otherwise, the label is <var>symbol</var>, usually prefixed
with &lsquo;<samp>_</samp>&rsquo;.
</p>
<p>The <code>symbol_ref</code> contains a mode, which is usually <code>Pmode</code>.
Usually that is the only mode for which a symbol is directly valid.
</p>
<a name="index-label_005fref"></a>
</dd>
<dt><code>(label_ref:<var>mode</var> <var>label</var>)</code></dt>
<dd><p>Represents the value of an assembler label for code.  It contains one
operand, an expression, which must be a <code>code_label</code> or a <code>note</code>
of type <code>NOTE_INSN_DELETED_LABEL</code> that appears in the instruction
sequence to identify the place where the label should go.
</p>
<p>The reason for using a distinct expression type for code label
references is so that jump optimization can distinguish them.
</p>
<p>The <code>label_ref</code> contains a mode, which is usually <code>Pmode</code>.
Usually that is the only mode for which a label is directly valid.
</p>
<a name="index-const"></a>
</dd>
<dt><code>(const:<var>m</var> <var>exp</var>)</code></dt>
<dd><p>Represents a constant that is the result of an assembly-time
arithmetic computation.  The operand, <var>exp</var>, is an expression that
contains only constants (<code>const_int</code>, <code>symbol_ref</code> and
<code>label_ref</code> expressions) combined with <code>plus</code> and
<code>minus</code>.  However, not all combinations are valid, since the
assembler cannot do arbitrary arithmetic on relocatable symbols.
</p>
<p><var>m</var> should be <code>Pmode</code>.
</p>
<a name="index-high"></a>
</dd>
<dt><code>(high:<var>m</var> <var>exp</var>)</code></dt>
<dd><p>Represents the high-order bits of <var>exp</var>, usually a
<code>symbol_ref</code>.  The number of bits is machine-dependent and is
normally the number of bits specified in an instruction that initializes
the high order bits of a register.  It is used with <code>lo_sum</code> to
represent the typical two-instruction sequence used in RISC machines to
reference a global memory location.
</p>
<p><var>m</var> should be <code>Pmode</code>.
</p></dd>
</dl>

<a name="index-CONST0_005fRTX"></a>
<a name="index-CONST1_005fRTX"></a>
<a name="index-CONST2_005fRTX"></a>
<p>The macro <code>CONST0_RTX (<var>mode</var>)</code> refers to an expression with
value 0 in mode <var>mode</var>.  If mode <var>mode</var> is of mode class
<code>MODE_INT</code>, it returns <code>const0_rtx</code>.  If mode <var>mode</var> is of
mode class <code>MODE_FLOAT</code>, it returns a <code>CONST_DOUBLE</code>
expression in mode <var>mode</var>.  Otherwise, it returns a
<code>CONST_VECTOR</code> expression in mode <var>mode</var>.  Similarly, the macro
<code>CONST1_RTX (<var>mode</var>)</code> refers to an expression with value 1 in
mode <var>mode</var> and similarly for <code>CONST2_RTX</code>.  The
<code>CONST1_RTX</code> and <code>CONST2_RTX</code> macros are undefined
for vector modes.
</p>
<hr>
<a name="Regs-and-Memory"></a>
<div class="header">
<p>
Next: <a href="#Arithmetic" accesskey="n" rel="next">Arithmetic</a>, Previous: <a href="#Constants" accesskey="p" rel="prev">Constants</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Registers-and-Memory"></a>
<h3 class="section">10.8 Registers and Memory</h3>
<a name="index-RTL-register-expressions"></a>
<a name="index-RTL-memory-expressions"></a>

<p>Here are the RTL expression types for describing access to machine
registers and to main memory.
</p>
<dl compact="compact">
<dd><a name="index-reg"></a>
<a name="index-hard-registers"></a>
<a name="index-pseudo-registers"></a>
</dd>
<dt><code>(reg:<var>m</var> <var>n</var>)</code></dt>
<dd><p>For small values of the integer <var>n</var> (those that are less than
<code>FIRST_PSEUDO_REGISTER</code>), this stands for a reference to machine
register number <var>n</var>: a <em>hard register</em>.  For larger values of
<var>n</var>, it stands for a temporary value or <em>pseudo register</em>.
The compiler&rsquo;s strategy is to generate code assuming an unlimited
number of such pseudo registers, and later convert them into hard
registers or into memory references.
</p>
<p><var>m</var> is the machine mode of the reference.  It is necessary because
machines can generally refer to each register in more than one mode.
For example, a register may contain a full word but there may be
instructions to refer to it as a half word or as a single byte, as
well as instructions to refer to it as a floating point number of
various precisions.
</p>
<p>Even for a register that the machine can access in only one mode,
the mode must always be specified.
</p>
<p>The symbol <code>FIRST_PSEUDO_REGISTER</code> is defined by the machine
description, since the number of hard registers on the machine is an
invariant characteristic of the machine.  Note, however, that not
all of the machine registers must be general registers.  All the
machine registers that can be used for storage of data are given
hard register numbers, even those that can be used only in certain
instructions or can hold only certain types of data.
</p>
<p>A hard register may be accessed in various modes throughout one
function, but each pseudo register is given a natural mode
and is accessed only in that mode.  When it is necessary to describe
an access to a pseudo register using a nonnatural mode, a <code>subreg</code>
expression is used.
</p>
<p>A <code>reg</code> expression with a machine mode that specifies more than
one word of data may actually stand for several consecutive registers.
If in addition the register number specifies a hardware register, then
it actually represents several consecutive hardware registers starting
with the specified one.
</p>
<p>Each pseudo register number used in a function&rsquo;s RTL code is
represented by a unique <code>reg</code> expression.
</p>
<a name="index-FIRST_005fVIRTUAL_005fREGISTER"></a>
<a name="index-LAST_005fVIRTUAL_005fREGISTER"></a>
<p>Some pseudo register numbers, those within the range of
<code>FIRST_VIRTUAL_REGISTER</code> to <code>LAST_VIRTUAL_REGISTER</code> only
appear during the RTL generation phase and are eliminated before the
optimization phases.  These represent locations in the stack frame that
cannot be determined until RTL generation for the function has been
completed.  The following virtual register numbers are defined:
</p>
<dl compact="compact">
<dd><a name="index-VIRTUAL_005fINCOMING_005fARGS_005fREGNUM"></a>
</dd>
<dt><code>VIRTUAL_INCOMING_ARGS_REGNUM</code></dt>
<dd><p>This points to the first word of the incoming arguments passed on the
stack.  Normally these arguments are placed there by the caller, but the
callee may have pushed some arguments that were previously passed in
registers.
</p>
<a name="index-FIRST_005fPARM_005fOFFSET-and-virtual-registers"></a>
<a name="index-ARG_005fPOINTER_005fREGNUM-and-virtual-registers"></a>
<p>When RTL generation is complete, this virtual register is replaced
by the sum of the register given by <code>ARG_POINTER_REGNUM</code> and the
value of <code>FIRST_PARM_OFFSET</code>.
</p>
<a name="index-VIRTUAL_005fSTACK_005fVARS_005fREGNUM"></a>
<a name="index-FRAME_005fGROWS_005fDOWNWARD-and-virtual-registers"></a>
</dd>
<dt><code>VIRTUAL_STACK_VARS_REGNUM</code></dt>
<dd><p>If <code>FRAME_GROWS_DOWNWARD</code> is defined to a nonzero value, this points
to immediately above the first variable on the stack.  Otherwise, it points
to the first variable on the stack.
</p>
<a name="index-STARTING_005fFRAME_005fOFFSET-and-virtual-registers"></a>
<a name="index-FRAME_005fPOINTER_005fREGNUM-and-virtual-registers"></a>
<p><code>VIRTUAL_STACK_VARS_REGNUM</code> is replaced with the sum of the
register given by <code>FRAME_POINTER_REGNUM</code> and the value
<code>STARTING_FRAME_OFFSET</code>.
</p>
<a name="index-VIRTUAL_005fSTACK_005fDYNAMIC_005fREGNUM"></a>
</dd>
<dt><code>VIRTUAL_STACK_DYNAMIC_REGNUM</code></dt>
<dd><p>This points to the location of dynamically allocated memory on the stack
immediately after the stack pointer has been adjusted by the amount of
memory desired.
</p>
<a name="index-STACK_005fDYNAMIC_005fOFFSET-and-virtual-registers"></a>
<a name="index-STACK_005fPOINTER_005fREGNUM-and-virtual-registers"></a>
<p>This virtual register is replaced by the sum of the register given by
<code>STACK_POINTER_REGNUM</code> and the value <code>STACK_DYNAMIC_OFFSET</code>.
</p>
<a name="index-VIRTUAL_005fOUTGOING_005fARGS_005fREGNUM"></a>
</dd>
<dt><code>VIRTUAL_OUTGOING_ARGS_REGNUM</code></dt>
<dd><p>This points to the location in the stack at which outgoing arguments
should be written when the stack is pre-pushed (arguments pushed using
push insns should always use <code>STACK_POINTER_REGNUM</code>).
</p>
<a name="index-STACK_005fPOINTER_005fOFFSET-and-virtual-registers"></a>
<p>This virtual register is replaced by the sum of the register given by
<code>STACK_POINTER_REGNUM</code> and the value <code>STACK_POINTER_OFFSET</code>.
</p></dd>
</dl>

<a name="index-subreg"></a>
</dd>
<dt><code>(subreg:<var>m1</var> <var>reg:m2</var> <var>bytenum</var>)</code></dt>
<dd>
<p><code>subreg</code> expressions are used to refer to a register in a machine
mode other than its natural one, or to refer to one register of
a multi-part <code>reg</code> that actually refers to several registers.
</p>
<p>Each pseudo register has a natural mode.  If it is necessary to
operate on it in a different mode, the register must be
enclosed in a <code>subreg</code>.
</p>
<p>There are currently three supported types for the first operand of a
<code>subreg</code>:
</p><ul>
<li> pseudo registers
This is the most common case.  Most <code>subreg</code>s have pseudo
<code>reg</code>s as their first operand.

</li><li> mem
<code>subreg</code>s of <code>mem</code> were common in earlier versions of GCC and
are still supported.  During the reload pass these are replaced by plain
<code>mem</code>s.  On machines that do not do instruction scheduling, use of
<code>subreg</code>s of <code>mem</code> are still used, but this is no longer
recommended.  Such <code>subreg</code>s are considered to be
<code>register_operand</code>s rather than <code>memory_operand</code>s before and
during reload.  Because of this, the scheduling passes cannot properly
schedule instructions with <code>subreg</code>s of <code>mem</code>, so for machines
that do scheduling, <code>subreg</code>s of <code>mem</code> should never be used.
To support this, the combine and recog passes have explicit code to
inhibit the creation of <code>subreg</code>s of <code>mem</code> when
<code>INSN_SCHEDULING</code> is defined.

<p>The use of <code>subreg</code>s of <code>mem</code> after the reload pass is an area
that is not well understood and should be avoided.  There is still some
code in the compiler to support this, but this code has possibly rotted.
This use of <code>subreg</code>s is discouraged and will most likely not be
supported in the future.
</p>
</li><li> hard registers
It is seldom necessary to wrap hard registers in <code>subreg</code>s; such
registers would normally reduce to a single <code>reg</code> rtx.  This use of
<code>subreg</code>s is discouraged and may not be supported in the future.

</li></ul>

<p><code>subreg</code>s of <code>subreg</code>s are not supported.  Using
<code>simplify_gen_subreg</code> is the recommended way to avoid this problem.
</p>
<p><code>subreg</code>s come in two distinct flavors, each having its own
usage and rules:
</p>
<dl compact="compact">
<dt>Paradoxical subregs</dt>
<dd><p>When <var>m1</var> is strictly wider than <var>m2</var>, the <code>subreg</code>
expression is called <em>paradoxical</em>.  The canonical test for this
class of <code>subreg</code> is:
</p>
<div class="smallexample">
<pre class="smallexample">GET_MODE_SIZE (<var>m1</var>) &gt; GET_MODE_SIZE (<var>m2</var>)
</pre></div>

<p>Paradoxical <code>subreg</code>s can be used as both lvalues and rvalues.
When used as an lvalue, the low-order bits of the source value
are stored in <var>reg</var> and the high-order bits are discarded.
When used as an rvalue, the low-order bits of the <code>subreg</code> are
taken from <var>reg</var> while the high-order bits may or may not be
defined.
</p>
<p>The high-order bits of rvalues are in the following circumstances:
</p>
<ul>
<li> <code>subreg</code>s of <code>mem</code>
When <var>m2</var> is smaller than a word, the macro <code>LOAD_EXTEND_OP</code>,
can control how the high-order bits are defined.

</li><li> <code>subreg</code> of <code>reg</code>s
The upper bits are defined when <code>SUBREG_PROMOTED_VAR_P</code> is true.
<code>SUBREG_PROMOTED_UNSIGNED_P</code> describes what the upper bits hold.
Such subregs usually represent local variables, register variables
and parameter pseudo variables that have been promoted to a wider mode.

</li></ul>

<p><var>bytenum</var> is always zero for a paradoxical <code>subreg</code>, even on
big-endian targets.
</p>
<p>For example, the paradoxical <code>subreg</code>:
</p>
<div class="smallexample">
<pre class="smallexample">(set (subreg:SI (reg:HI <var>x</var>) 0) <var>y</var>)
</pre></div>

<p>stores the lower 2 bytes of <var>y</var> in <var>x</var> and discards the upper
2 bytes.  A subsequent:
</p>
<div class="smallexample">
<pre class="smallexample">(set <var>z</var> (subreg:SI (reg:HI <var>x</var>) 0))
</pre></div>

<p>would set the lower two bytes of <var>z</var> to <var>y</var> and set the upper
two bytes to an unknown value assuming <code>SUBREG_PROMOTED_VAR_P</code> is
false.
</p>
</dd>
<dt>Normal subregs</dt>
<dd><p>When <var>m1</var> is at least as narrow as <var>m2</var> the <code>subreg</code>
expression is called <em>normal</em>.
</p>
<p>Normal <code>subreg</code>s restrict consideration to certain bits of
<var>reg</var>.  There are two cases.  If <var>m1</var> is smaller than a word,
the <code>subreg</code> refers to the least-significant part (or
<em>lowpart</em>) of one word of <var>reg</var>.  If <var>m1</var> is word-sized or
greater, the <code>subreg</code> refers to one or more complete words.
</p>
<p>When used as an lvalue, <code>subreg</code> is a word-based accessor.
Storing to a <code>subreg</code> modifies all the words of <var>reg</var> that
overlap the <code>subreg</code>, but it leaves the other words of <var>reg</var>
alone.
</p>
<p>When storing to a normal <code>subreg</code> that is smaller than a word,
the other bits of the referenced word are usually left in an undefined
state.  This laxity makes it easier to generate efficient code for
such instructions.  To represent an instruction that preserves all the
bits outside of those in the <code>subreg</code>, use <code>strict_low_part</code>
or <code>zero_extract</code> around the <code>subreg</code>.
</p>
<p><var>bytenum</var> must identify the offset of the first byte of the
<code>subreg</code> from the start of <var>reg</var>, assuming that <var>reg</var> is
laid out in memory order.  The memory order of bytes is defined by
two target macros, <code>WORDS_BIG_ENDIAN</code> and <code>BYTES_BIG_ENDIAN</code>:
</p>
<ul>
<li> <a name="index-WORDS_005fBIG_005fENDIAN_002c-effect-on-subreg"></a>
<code>WORDS_BIG_ENDIAN</code>, if set to 1, says that byte number zero is
part of the most significant word; otherwise, it is part of the least
significant word.

</li><li> <a name="index-BYTES_005fBIG_005fENDIAN_002c-effect-on-subreg"></a>
<code>BYTES_BIG_ENDIAN</code>, if set to 1, says that byte number zero is
the most significant byte within a word; otherwise, it is the least
significant byte within a word.
</li></ul>

<a name="index-FLOAT_005fWORDS_005fBIG_005fENDIAN_002c-_0028lack-of_0029-effect-on-subreg"></a>
<p>On a few targets, <code>FLOAT_WORDS_BIG_ENDIAN</code> disagrees with
<code>WORDS_BIG_ENDIAN</code>.  However, most parts of the compiler treat
floating point values as if they had the same endianness as integer
values.  This works because they handle them solely as a collection of
integer values, with no particular numerical value.  Only real.c and
the runtime libraries care about <code>FLOAT_WORDS_BIG_ENDIAN</code>.
</p>
<p>Thus,
</p>
<div class="smallexample">
<pre class="smallexample">(subreg:HI (reg:SI <var>x</var>) 2)
</pre></div>

<p>on a <code>BYTES_BIG_ENDIAN</code>, &lsquo;<samp>UNITS_PER_WORD == 4</samp>&rsquo; target is the same as
</p>
<div class="smallexample">
<pre class="smallexample">(subreg:HI (reg:SI <var>x</var>) 0)
</pre></div>

<p>on a little-endian, &lsquo;<samp>UNITS_PER_WORD == 4</samp>&rsquo; target.  Both
<code>subreg</code>s access the lower two bytes of register <var>x</var>.
</p>
</dd>
</dl>

<p>A <code>MODE_PARTIAL_INT</code> mode behaves as if it were as wide as the
corresponding <code>MODE_INT</code> mode, except that it has an unknown
number of undefined bits.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">(subreg:PSI (reg:SI 0) 0)
</pre></div>

<p>accesses the whole of &lsquo;<samp>(reg:SI 0)</samp>&rsquo;, but the exact relationship
between the <code>PSImode</code> value and the <code>SImode</code> value is not
defined.  If we assume &lsquo;<samp>UNITS_PER_WORD &lt;= 4</samp>&rsquo;, then the following
two <code>subreg</code>s:
</p>
<div class="smallexample">
<pre class="smallexample">(subreg:PSI (reg:DI 0) 0)
(subreg:PSI (reg:DI 0) 4)
</pre></div>

<p>represent independent 4-byte accesses to the two halves of
&lsquo;<samp>(reg:DI 0)</samp>&rsquo;.  Both <code>subreg</code>s have an unknown number
of undefined bits.
</p>
<p>If &lsquo;<samp>UNITS_PER_WORD &lt;= 2</samp>&rsquo; then these two <code>subreg</code>s:
</p>
<div class="smallexample">
<pre class="smallexample">(subreg:HI (reg:PSI 0) 0)
(subreg:HI (reg:PSI 0) 2)
</pre></div>

<p>represent independent 2-byte accesses that together span the whole
of &lsquo;<samp>(reg:PSI 0)</samp>&rsquo;.  Storing to the first <code>subreg</code> does not
affect the value of the second, and vice versa.  &lsquo;<samp>(reg:PSI 0)</samp>&rsquo;
has an unknown number of undefined bits, so the assignment:
</p>
<div class="smallexample">
<pre class="smallexample">(set (subreg:HI (reg:PSI 0) 0) (reg:HI 4))
</pre></div>

<p>does not guarantee that &lsquo;<samp>(subreg:HI (reg:PSI 0) 0)</samp>&rsquo; has the
value &lsquo;<samp>(reg:HI 4)</samp>&rsquo;.
</p>
<a name="index-CANNOT_005fCHANGE_005fMODE_005fCLASS-and-subreg-semantics"></a>
<p>The rules above apply to both pseudo <var>reg</var>s and hard <var>reg</var>s.
If the semantics are not correct for particular combinations of
<var>m1</var>, <var>m2</var> and hard <var>reg</var>, the target-specific code
must ensure that those combinations are never used.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">CANNOT_CHANGE_MODE_CLASS (<var>m2</var>, <var>m1</var>, <var>class</var>)
</pre></div>

<p>must be true for every class <var>class</var> that includes <var>reg</var>.
</p>
<a name="index-SUBREG_005fREG"></a>
<a name="index-SUBREG_005fBYTE"></a>
<p>The first operand of a <code>subreg</code> expression is customarily accessed
with the <code>SUBREG_REG</code> macro and the second operand is customarily
accessed with the <code>SUBREG_BYTE</code> macro.
</p>
<p>It has been several years since a platform in which
<code>BYTES_BIG_ENDIAN</code> not equal to <code>WORDS_BIG_ENDIAN</code> has
been tested.  Anyone wishing to support such a platform in the future
may be confronted with code rot.
</p>
<a name="index-scratch"></a>
<a name="index-scratch-operands"></a>
</dd>
<dt><code>(scratch:<var>m</var>)</code></dt>
<dd><p>This represents a scratch register that will be required for the
execution of a single instruction and not used subsequently.  It is
converted into a <code>reg</code> by either the local register allocator or
the reload pass.
</p>
<p><code>scratch</code> is usually present inside a <code>clobber</code> operation
(see <a href="#Side-Effects">Side Effects</a>).
</p>
<a name="index-cc0"></a>
<a name="index-condition-code-register"></a>
</dd>
<dt><code>(cc0)</code></dt>
<dd><p>This refers to the machine&rsquo;s condition code register.  It has no
operands and may not have a machine mode.  There are two ways to use it:
</p>
<ul>
<li> To stand for a complete set of condition code flags.  This is best on
most machines, where each comparison sets the entire series of flags.

<p>With this technique, <code>(cc0)</code> may be validly used in only two
contexts: as the destination of an assignment (in test and compare
instructions) and in comparison operators comparing against zero
(<code>const_int</code> with value zero; that is to say, <code>const0_rtx</code>).
</p>
</li><li> To stand for a single flag that is the result of a single condition.
This is useful on machines that have only a single flag bit, and in
which comparison instructions must specify the condition to test.

<p>With this technique, <code>(cc0)</code> may be validly used in only two
contexts: as the destination of an assignment (in test and compare
instructions) where the source is a comparison operator, and as the
first operand of <code>if_then_else</code> (in a conditional branch).
</p></li></ul>

<a name="index-cc0_005frtx"></a>
<p>There is only one expression object of code <code>cc0</code>; it is the
value of the variable <code>cc0_rtx</code>.  Any attempt to create an
expression of code <code>cc0</code> will return <code>cc0_rtx</code>.
</p>
<p>Instructions can set the condition code implicitly.  On many machines,
nearly all instructions set the condition code based on the value that
they compute or store.  It is not necessary to record these actions
explicitly in the RTL because the machine description includes a
prescription for recognizing the instructions that do so (by means of
the macro <code>NOTICE_UPDATE_CC</code>).  See <a href="#Condition-Code">Condition Code</a>.  Only
instructions whose sole purpose is to set the condition code, and
instructions that use the condition code, need mention <code>(cc0)</code>.
</p>
<p>On some machines, the condition code register is given a register number
and a <code>reg</code> is used instead of <code>(cc0)</code>.  This is usually the
preferable approach if only a small subset of instructions modify the
condition code.  Other machines store condition codes in general
registers; in such cases a pseudo register should be used.
</p>
<p>Some machines, such as the SPARC and RS/6000, have two sets of
arithmetic instructions, one that sets and one that does not set the
condition code.  This is best handled by normally generating the
instruction that does not set the condition code, and making a pattern
that both performs the arithmetic and sets the condition code register
(which would not be <code>(cc0)</code> in this case).  For examples, search
for &lsquo;<samp>addcc</samp>&rsquo; and &lsquo;<samp>andcc</samp>&rsquo; in <samp>sparc.md</samp>.
</p>
<a name="index-pc"></a>
</dd>
<dt><code>(pc)</code></dt>
<dd><a name="index-program-counter"></a>
<p>This represents the machine&rsquo;s program counter.  It has no operands and
may not have a machine mode.  <code>(pc)</code> may be validly used only in
certain specific contexts in jump instructions.
</p>
<a name="index-pc_005frtx"></a>
<p>There is only one expression object of code <code>pc</code>; it is the value
of the variable <code>pc_rtx</code>.  Any attempt to create an expression of
code <code>pc</code> will return <code>pc_rtx</code>.
</p>
<p>All instructions that do not jump alter the program counter implicitly
by incrementing it, but there is no need to mention this in the RTL.
</p>
<a name="index-mem"></a>
</dd>
<dt><code>(mem:<var>m</var> <var>addr</var> <var>alias</var>)</code></dt>
<dd><p>This RTX represents a reference to main memory at an address
represented by the expression <var>addr</var>.  <var>m</var> specifies how large
a unit of memory is accessed.  <var>alias</var> specifies an alias set for the
reference.  In general two items are in different alias sets if they cannot
reference the same memory address.
</p>
<p>The construct <code>(mem:BLK (scratch))</code> is considered to alias all
other memories.  Thus it may be used as a memory barrier in epilogue
stack deallocation patterns.
</p>
<a name="index-concat"></a>
</dd>
<dt><code>(concat<var>m</var> <var>rtx</var> <var>rtx</var>)</code></dt>
<dd><p>This RTX represents the concatenation of two other RTXs.  This is used
for complex values.  It should only appear in the RTL attached to
declarations and during RTL generation.  It should not appear in the
ordinary insn chain.
</p>
<a name="index-concatn"></a>
</dd>
<dt><code>(concatn<var>m</var> [<var>rtx</var> &hellip;])</code></dt>
<dd><p>This RTX represents the concatenation of all the <var>rtx</var> to make a
single value.  Like <code>concat</code>, this should only appear in
declarations, and not in the insn chain.
</p></dd>
</dl>

<hr>
<a name="Arithmetic"></a>
<div class="header">
<p>
Next: <a href="#Comparisons" accesskey="n" rel="next">Comparisons</a>, Previous: <a href="#Regs-and-Memory" accesskey="p" rel="prev">Regs and Memory</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-Expressions-for-Arithmetic"></a>
<h3 class="section">10.9 RTL Expressions for Arithmetic</h3>
<a name="index-arithmetic_002c-in-RTL"></a>
<a name="index-math_002c-in-RTL"></a>
<a name="index-RTL-expressions-for-arithmetic"></a>

<p>Unless otherwise specified, all the operands of arithmetic expressions
must be valid for mode <var>m</var>.  An operand is valid for mode <var>m</var>
if it has mode <var>m</var>, or if it is a <code>const_int</code> or
<code>const_double</code> and <var>m</var> is a mode of class <code>MODE_INT</code>.
</p>
<p>For commutative binary operations, constants should be placed in the
second operand.
</p>
<dl compact="compact">
<dd><a name="index-plus"></a>
<a name="index-ss_005fplus"></a>
<a name="index-us_005fplus"></a>
<a name="index-RTL-sum"></a>
<a name="index-RTL-addition"></a>
<a name="index-RTL-addition-with-signed-saturation"></a>
<a name="index-RTL-addition-with-unsigned-saturation"></a>
</dd>
<dt><code>(plus:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(ss_plus:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(us_plus:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd>
<p>These three expressions all represent the sum of the values
represented by <var>x</var> and <var>y</var> carried out in machine mode
<var>m</var>.  They differ in their behavior on overflow of integer modes.
<code>plus</code> wraps round modulo the width of <var>m</var>; <code>ss_plus</code>
saturates at the maximum signed value representable in <var>m</var>;
<code>us_plus</code> saturates at the maximum unsigned value.
</p>

<a name="index-lo_005fsum"></a>
</dd>
<dt><code>(lo_sum:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd>
<p>This expression represents the sum of <var>x</var> and the low-order bits
of <var>y</var>.  It is used with <code>high</code> (see <a href="#Constants">Constants</a>) to
represent the typical two-instruction sequence used in RISC machines
to reference a global memory location.
</p>
<p>The number of low order bits is machine-dependent but is
normally the number of bits in a <code>Pmode</code> item minus the number of
bits set by <code>high</code>.
</p>
<p><var>m</var> should be <code>Pmode</code>.
</p>
<a name="index-minus"></a>
<a name="index-ss_005fminus"></a>
<a name="index-us_005fminus"></a>
<a name="index-RTL-difference"></a>
<a name="index-RTL-subtraction"></a>
<a name="index-RTL-subtraction-with-signed-saturation"></a>
<a name="index-RTL-subtraction-with-unsigned-saturation"></a>
</dd>
<dt><code>(minus:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(ss_minus:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(us_minus:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd>
<p>These three expressions represent the result of subtracting <var>y</var>
from <var>x</var>, carried out in mode <var>M</var>.  Behavior on overflow is
the same as for the three variants of <code>plus</code> (see above).
</p>
<a name="index-compare"></a>
<a name="index-RTL-comparison"></a>
</dd>
<dt><code>(compare:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Represents the result of subtracting <var>y</var> from <var>x</var> for purposes
of comparison.  The result is computed without overflow, as if with
infinite precision.
</p>
<p>Of course, machines can&rsquo;t really subtract with infinite precision.
However, they can pretend to do so when only the sign of the result will
be used, which is the case when the result is stored in the condition
code.  And that is the <em>only</em> way this kind of expression may
validly be used: as a value to be stored in the condition codes, either
<code>(cc0)</code> or a register.  See <a href="#Comparisons">Comparisons</a>.
</p>
<p>The mode <var>m</var> is not related to the modes of <var>x</var> and <var>y</var>, but
instead is the mode of the condition code value.  If <code>(cc0)</code> is
used, it is <code>VOIDmode</code>.  Otherwise it is some mode in class
<code>MODE_CC</code>, often <code>CCmode</code>.  See <a href="#Condition-Code">Condition Code</a>.  If <var>m</var>
is <code>VOIDmode</code> or <code>CCmode</code>, the operation returns sufficient
information (in an unspecified format) so that any comparison operator
can be applied to the result of the <code>COMPARE</code> operation.  For other
modes in class <code>MODE_CC</code>, the operation only returns a subset of
this information.
</p>
<p>Normally, <var>x</var> and <var>y</var> must have the same mode.  Otherwise,
<code>compare</code> is valid only if the mode of <var>x</var> is in class
<code>MODE_INT</code> and <var>y</var> is a <code>const_int</code> or
<code>const_double</code> with mode <code>VOIDmode</code>.  The mode of <var>x</var>
determines what mode the comparison is to be done in; thus it must not
be <code>VOIDmode</code>.
</p>
<p>If one of the operands is a constant, it should be placed in the
second operand and the comparison code adjusted as appropriate.
</p>
<p>A <code>compare</code> specifying two <code>VOIDmode</code> constants is not valid
since there is no way to know in what mode the comparison is to be
performed; the comparison must either be folded during the compilation
or the first operand must be loaded into a register while its mode is
still known.
</p>
<a name="index-neg"></a>
<a name="index-ss_005fneg"></a>
<a name="index-us_005fneg"></a>
<a name="index-negation"></a>
<a name="index-negation-with-signed-saturation"></a>
<a name="index-negation-with-unsigned-saturation"></a>
</dd>
<dt><code>(neg:<var>m</var> <var>x</var>)</code></dt>
<dt><code>(ss_neg:<var>m</var> <var>x</var>)</code></dt>
<dt><code>(us_neg:<var>m</var> <var>x</var>)</code></dt>
<dd><p>These two expressions represent the negation (subtraction from zero) of
the value represented by <var>x</var>, carried out in mode <var>m</var>.  They
differ in the behavior on overflow of integer modes.  In the case of
<code>neg</code>, the negation of the operand may be a number not representable
in mode <var>m</var>, in which case it is truncated to <var>m</var>.  <code>ss_neg</code>
and <code>us_neg</code> ensure that an out-of-bounds result saturates to the
maximum or minimum signed or unsigned value.
</p>
<a name="index-mult"></a>
<a name="index-ss_005fmult"></a>
<a name="index-us_005fmult"></a>
<a name="index-multiplication"></a>
<a name="index-product"></a>
<a name="index-multiplication-with-signed-saturation"></a>
<a name="index-multiplication-with-unsigned-saturation"></a>
</dd>
<dt><code>(mult:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(ss_mult:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(us_mult:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Represents the signed product of the values represented by <var>x</var> and
<var>y</var> carried out in machine mode <var>m</var>.
<code>ss_mult</code> and <code>us_mult</code> ensure that an out-of-bounds result
saturates to the maximum or minimum signed or unsigned value.
</p>
<p>Some machines support a multiplication that generates a product wider
than the operands.  Write the pattern for this as
</p>
<div class="smallexample">
<pre class="smallexample">(mult:<var>m</var> (sign_extend:<var>m</var> <var>x</var>) (sign_extend:<var>m</var> <var>y</var>))
</pre></div>

<p>where <var>m</var> is wider than the modes of <var>x</var> and <var>y</var>, which need
not be the same.
</p>
<p>For unsigned widening multiplication, use the same idiom, but with
<code>zero_extend</code> instead of <code>sign_extend</code>.
</p>
<a name="index-fma"></a>
</dd>
<dt><code>(fma:<var>m</var> <var>x</var> <var>y</var> <var>z</var>)</code></dt>
<dd><p>Represents the <code>fma</code>, <code>fmaf</code>, and <code>fmal</code> builtin
functions that do a combined multiply of <var>x</var> and <var>y</var> and then
adding to<var>z</var> without doing an intermediate rounding step.
</p>
<a name="index-div"></a>
<a name="index-ss_005fdiv"></a>
<a name="index-division"></a>
<a name="index-signed-division"></a>
<a name="index-signed-division-with-signed-saturation"></a>
<a name="index-quotient"></a>
</dd>
<dt><code>(div:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(ss_div:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Represents the quotient in signed division of <var>x</var> by <var>y</var>,
carried out in machine mode <var>m</var>.  If <var>m</var> is a floating point
mode, it represents the exact quotient; otherwise, the integerized
quotient.
<code>ss_div</code> ensures that an out-of-bounds result saturates to the maximum
or minimum signed value.
</p>
<p>Some machines have division instructions in which the operands and
quotient widths are not all the same; you should represent
such instructions using <code>truncate</code> and <code>sign_extend</code> as in,
</p>
<div class="smallexample">
<pre class="smallexample">(truncate:<var>m1</var> (div:<var>m2</var> <var>x</var> (sign_extend:<var>m2</var> <var>y</var>)))
</pre></div>

<a name="index-udiv"></a>
<a name="index-unsigned-division"></a>
<a name="index-unsigned-division-with-unsigned-saturation"></a>
<a name="index-division-1"></a>
</dd>
<dt><code>(udiv:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(us_div:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Like <code>div</code> but represents unsigned division.
<code>us_div</code> ensures that an out-of-bounds result saturates to the maximum
or minimum unsigned value.
</p>
<a name="index-mod"></a>
<a name="index-umod"></a>
<a name="index-remainder"></a>
<a name="index-division-2"></a>
</dd>
<dt><code>(mod:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(umod:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Like <code>div</code> and <code>udiv</code> but represent the remainder instead of
the quotient.
</p>
<a name="index-smin"></a>
<a name="index-smax"></a>
<a name="index-signed-minimum"></a>
<a name="index-signed-maximum"></a>
</dd>
<dt><code>(smin:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(smax:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Represents the smaller (for <code>smin</code>) or larger (for <code>smax</code>) of
<var>x</var> and <var>y</var>, interpreted as signed values in mode <var>m</var>.
When used with floating point, if both operands are zeros, or if either
operand is <code>NaN</code>, then it is unspecified which of the two operands
is returned as the result.
</p>
<a name="index-umin"></a>
<a name="index-umax"></a>
<a name="index-unsigned-minimum-and-maximum"></a>
</dd>
<dt><code>(umin:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(umax:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Like <code>smin</code> and <code>smax</code>, but the values are interpreted as unsigned
integers.
</p>
<a name="index-not"></a>
<a name="index-complement_002c-bitwise"></a>
<a name="index-bitwise-complement"></a>
</dd>
<dt><code>(not:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the bitwise complement of the value represented by <var>x</var>,
carried out in mode <var>m</var>, which must be a fixed-point machine mode.
</p>
<a name="index-and"></a>
<a name="index-logical_002dand_002c-bitwise"></a>
<a name="index-bitwise-logical_002dand"></a>
</dd>
<dt><code>(and:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Represents the bitwise logical-and of the values represented by
<var>x</var> and <var>y</var>, carried out in machine mode <var>m</var>, which must be
a fixed-point machine mode.
</p>
<a name="index-ior"></a>
<a name="index-inclusive_002dor_002c-bitwise"></a>
<a name="index-bitwise-inclusive_002dor"></a>
</dd>
<dt><code>(ior:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Represents the bitwise inclusive-or of the values represented by <var>x</var>
and <var>y</var>, carried out in machine mode <var>m</var>, which must be a
fixed-point mode.
</p>
<a name="index-xor"></a>
<a name="index-exclusive_002dor_002c-bitwise"></a>
<a name="index-bitwise-exclusive_002dor"></a>
</dd>
<dt><code>(xor:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Represents the bitwise exclusive-or of the values represented by <var>x</var>
and <var>y</var>, carried out in machine mode <var>m</var>, which must be a
fixed-point mode.
</p>
<a name="index-ashift"></a>
<a name="index-ss_005fashift"></a>
<a name="index-us_005fashift"></a>
<a name="index-left-shift"></a>
<a name="index-shift"></a>
<a name="index-arithmetic-shift"></a>
<a name="index-arithmetic-shift-with-signed-saturation"></a>
<a name="index-arithmetic-shift-with-unsigned-saturation"></a>
</dd>
<dt><code>(ashift:<var>m</var> <var>x</var> <var>c</var>)</code></dt>
<dt><code>(ss_ashift:<var>m</var> <var>x</var> <var>c</var>)</code></dt>
<dt><code>(us_ashift:<var>m</var> <var>x</var> <var>c</var>)</code></dt>
<dd><p>These three expressions represent the result of arithmetically shifting <var>x</var>
left by <var>c</var> places.  They differ in their behavior on overflow of integer
modes.  An <code>ashift</code> operation is a plain shift with no special behavior
in case of a change in the sign bit; <code>ss_ashift</code> and <code>us_ashift</code>
saturates to the minimum or maximum representable value if any of the bits
shifted out differs from the final sign bit.
</p>
<p><var>x</var> have mode <var>m</var>, a fixed-point machine mode.  <var>c</var>
be a fixed-point mode or be a constant with mode <code>VOIDmode</code>; which
mode is determined by the mode called for in the machine description
entry for the left-shift instruction.  For example, on the VAX, the mode
of <var>c</var> is <code>QImode</code> regardless of <var>m</var>.
</p>
<a name="index-lshiftrt"></a>
<a name="index-right-shift"></a>
<a name="index-ashiftrt"></a>
</dd>
<dt><code>(lshiftrt:<var>m</var> <var>x</var> <var>c</var>)</code></dt>
<dt><code>(ashiftrt:<var>m</var> <var>x</var> <var>c</var>)</code></dt>
<dd><p>Like <code>ashift</code> but for right shift.  Unlike the case for left shift,
these two operations are distinct.
</p>
<a name="index-rotate-1"></a>
<a name="index-rotate"></a>
<a name="index-left-rotate"></a>
<a name="index-rotatert"></a>
<a name="index-right-rotate"></a>
</dd>
<dt><code>(rotate:<var>m</var> <var>x</var> <var>c</var>)</code></dt>
<dt><code>(rotatert:<var>m</var> <var>x</var> <var>c</var>)</code></dt>
<dd><p>Similar but represent left and right rotate.  If <var>c</var> is a constant,
use <code>rotate</code>.
</p>
<a name="index-abs"></a>
<a name="index-ss_005fabs"></a>
<a name="index-absolute-value"></a>
</dd>
<dt><code>(abs:<var>m</var> <var>x</var>)</code></dt>
<dt><code>(ss_abs:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the absolute value of <var>x</var>, computed in mode <var>m</var>.
<code>ss_abs</code> ensures that an out-of-bounds result saturates to the
maximum signed value.
</p>

<a name="index-sqrt"></a>
<a name="index-square-root"></a>
</dd>
<dt><code>(sqrt:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the square root of <var>x</var>, computed in mode <var>m</var>.
Most often <var>m</var> will be a floating point mode.
</p>
<a name="index-ffs"></a>
</dd>
<dt><code>(ffs:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents one plus the index of the least significant 1-bit in
<var>x</var>, represented as an integer of mode <var>m</var>.  (The value is
zero if <var>x</var> is zero.)  The mode of <var>x</var> must be <var>m</var>
or <code>VOIDmode</code>.
</p>
<a name="index-clrsb"></a>
</dd>
<dt><code>(clrsb:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the number of redundant leading sign bits in <var>x</var>,
represented as an integer of mode <var>m</var>, starting at the most
significant bit position.  This is one less than the number of leading
sign bits (either 0 or 1), with no special cases.  The mode of <var>x</var>
must be <var>m</var> or <code>VOIDmode</code>.
</p>
<a name="index-clz"></a>
</dd>
<dt><code>(clz:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the number of leading 0-bits in <var>x</var>, represented as an
integer of mode <var>m</var>, starting at the most significant bit position.
If <var>x</var> is zero, the value is determined by
<code>CLZ_DEFINED_VALUE_AT_ZERO</code> (see <a href="#Misc">Misc</a>).  Note that this is one of
the few expressions that is not invariant under widening.  The mode of
<var>x</var> must be <var>m</var> or <code>VOIDmode</code>.
</p>
<a name="index-ctz"></a>
</dd>
<dt><code>(ctz:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the number of trailing 0-bits in <var>x</var>, represented as an
integer of mode <var>m</var>, starting at the least significant bit position.
If <var>x</var> is zero, the value is determined by
<code>CTZ_DEFINED_VALUE_AT_ZERO</code> (see <a href="#Misc">Misc</a>).  Except for this case,
<code>ctz(x)</code> is equivalent to <code>ffs(<var>x</var>) - 1</code>.  The mode of
<var>x</var> must be <var>m</var> or <code>VOIDmode</code>.
</p>
<a name="index-popcount"></a>
</dd>
<dt><code>(popcount:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the number of 1-bits in <var>x</var>, represented as an integer of
mode <var>m</var>.  The mode of <var>x</var> must be <var>m</var> or <code>VOIDmode</code>.
</p>
<a name="index-parity"></a>
</dd>
<dt><code>(parity:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the number of 1-bits modulo 2 in <var>x</var>, represented as an
integer of mode <var>m</var>.  The mode of <var>x</var> must be <var>m</var> or
<code>VOIDmode</code>.
</p>
<a name="index-bswap"></a>
</dd>
<dt><code>(bswap:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the value <var>x</var> with the order of bytes reversed, carried out
in mode <var>m</var>, which must be a fixed-point machine mode.
The mode of <var>x</var> must be <var>m</var> or <code>VOIDmode</code>.
</p></dd>
</dl>

<hr>
<a name="Comparisons"></a>
<div class="header">
<p>
Next: <a href="#Bit_002dFields" accesskey="n" rel="next">Bit-Fields</a>, Previous: <a href="#Arithmetic" accesskey="p" rel="prev">Arithmetic</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Comparison-Operations"></a>
<h3 class="section">10.10 Comparison Operations</h3>
<a name="index-RTL-comparison-operations"></a>

<p>Comparison operators test a relation on two operands and are considered
to represent a machine-dependent nonzero value described by, but not
necessarily equal to, <code>STORE_FLAG_VALUE</code> (see <a href="#Misc">Misc</a>)
if the relation holds, or zero if it does not, for comparison operators
whose results have a &lsquo;MODE_INT&rsquo; mode,
<code>FLOAT_STORE_FLAG_VALUE</code> (see <a href="#Misc">Misc</a>) if the relation holds, or
zero if it does not, for comparison operators that return floating-point
values, and a vector of either <code>VECTOR_STORE_FLAG_VALUE</code> (see <a href="#Misc">Misc</a>)
if the relation holds, or of zeros if it does not, for comparison operators
that return vector results.
The mode of the comparison operation is independent of the mode
of the data being compared.  If the comparison operation is being tested
(e.g., the first operand of an <code>if_then_else</code>), the mode must be
<code>VOIDmode</code>.
</p>
<a name="index-condition-codes"></a>
<p>There are two ways that comparison operations may be used.  The
comparison operators may be used to compare the condition codes
<code>(cc0)</code> against zero, as in <code>(eq (cc0) (const_int 0))</code>.  Such
a construct actually refers to the result of the preceding instruction
in which the condition codes were set.  The instruction setting the
condition code must be adjacent to the instruction using the condition
code; only <code>note</code> insns may separate them.
</p>
<p>Alternatively, a comparison operation may directly compare two data
objects.  The mode of the comparison is determined by the operands; they
must both be valid for a common machine mode.  A comparison with both
operands constant would be invalid as the machine mode could not be
deduced from it, but such a comparison should never exist in RTL due to
constant folding.
</p>
<p>In the example above, if <code>(cc0)</code> were last set to
<code>(compare <var>x</var> <var>y</var>)</code>, the comparison operation is
identical to <code>(eq <var>x</var> <var>y</var>)</code>.  Usually only one style
of comparisons is supported on a particular machine, but the combine
pass will try to merge the operations to produce the <code>eq</code> shown
in case it exists in the context of the particular insn involved.
</p>
<p>Inequality comparisons come in two flavors, signed and unsigned.  Thus,
there are distinct expression codes <code>gt</code> and <code>gtu</code> for signed and
unsigned greater-than.  These can produce different results for the same
pair of integer values: for example, 1 is signed greater-than -1 but not
unsigned greater-than, because -1 when regarded as unsigned is actually
<code>0xffffffff</code> which is greater than 1.
</p>
<p>The signed comparisons are also used for floating point values.  Floating
point comparisons are distinguished by the machine modes of the operands.
</p>
<dl compact="compact">
<dd><a name="index-eq"></a>
<a name="index-equal"></a>
</dd>
<dt><code>(eq:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p><code>STORE_FLAG_VALUE</code> if the values represented by <var>x</var> and <var>y</var>
are equal, otherwise 0.
</p>
<a name="index-ne"></a>
<a name="index-not-equal"></a>
</dd>
<dt><code>(ne:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p><code>STORE_FLAG_VALUE</code> if the values represented by <var>x</var> and <var>y</var>
are not equal, otherwise 0.
</p>
<a name="index-gt"></a>
<a name="index-greater-than"></a>
</dd>
<dt><code>(gt:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p><code>STORE_FLAG_VALUE</code> if the <var>x</var> is greater than <var>y</var>.  If they
are fixed-point, the comparison is done in a signed sense.
</p>
<a name="index-gtu"></a>
<a name="index-greater-than-1"></a>
<a name="index-unsigned-greater-than"></a>
</dd>
<dt><code>(gtu:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Like <code>gt</code> but does unsigned comparison, on fixed-point numbers only.
</p>
<a name="index-lt"></a>
<a name="index-less-than"></a>
<a name="index-ltu"></a>
<a name="index-unsigned-less-than"></a>
</dd>
<dt><code>(lt:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(ltu:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Like <code>gt</code> and <code>gtu</code> but test for &ldquo;less than&rdquo;.
</p>
<a name="index-ge"></a>
<a name="index-greater-than-2"></a>
<a name="index-geu"></a>
<a name="index-unsigned-greater-than-1"></a>
</dd>
<dt><code>(ge:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(geu:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Like <code>gt</code> and <code>gtu</code> but test for &ldquo;greater than or equal&rdquo;.
</p>
<a name="index-le"></a>
<a name="index-less-than-or-equal"></a>
<a name="index-leu"></a>
<a name="index-unsigned-less-than-1"></a>
</dd>
<dt><code>(le:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dt><code>(leu:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd><p>Like <code>gt</code> and <code>gtu</code> but test for &ldquo;less than or equal&rdquo;.
</p>
<a name="index-if_005fthen_005felse"></a>
</dd>
<dt><code>(if_then_else <var>cond</var> <var>then</var> <var>else</var>)</code></dt>
<dd><p>This is not a comparison operation but is listed here because it is
always used in conjunction with a comparison operation.  To be
precise, <var>cond</var> is a comparison expression.  This expression
represents a choice, according to <var>cond</var>, between the value
represented by <var>then</var> and the one represented by <var>else</var>.
</p>
<p>On most machines, <code>if_then_else</code> expressions are valid only
to express conditional jumps.
</p>
<a name="index-cond"></a>
</dd>
<dt><code>(cond [<var>test1</var> <var>value1</var> <var>test2</var> <var>value2</var> &hellip;] <var>default</var>)</code></dt>
<dd><p>Similar to <code>if_then_else</code>, but more general.  Each of <var>test1</var>,
<var>test2</var>, &hellip; is performed in turn.  The result of this expression is
the <var>value</var> corresponding to the first nonzero test, or <var>default</var> if
none of the tests are nonzero expressions.
</p>
<p>This is currently not valid for instruction patterns and is supported only
for insn attributes.  See <a href="#Insn-Attributes">Insn Attributes</a>.
</p></dd>
</dl>

<hr>
<a name="Bit_002dFields"></a>
<div class="header">
<p>
Next: <a href="#Vector-Operations" accesskey="n" rel="next">Vector Operations</a>, Previous: <a href="#Comparisons" accesskey="p" rel="prev">Comparisons</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Bit_002dFields-1"></a>
<h3 class="section">10.11 Bit-Fields</h3>
<a name="index-bit_002dfields"></a>

<p>Special expression codes exist to represent bit-field instructions.
</p>
<dl compact="compact">
<dd><a name="index-sign_005fextract"></a>
<a name="index-BITS_005fBIG_005fENDIAN_002c-effect-on-sign_005fextract"></a>
</dd>
<dt><code>(sign_extract:<var>m</var> <var>loc</var> <var>size</var> <var>pos</var>)</code></dt>
<dd><p>This represents a reference to a sign-extended bit-field contained or
starting in <var>loc</var> (a memory or register reference).  The bit-field
is <var>size</var> bits wide and starts at bit <var>pos</var>.  The compilation
option <code>BITS_BIG_ENDIAN</code> says which end of the memory unit
<var>pos</var> counts from.
</p>
<p>If <var>loc</var> is in memory, its mode must be a single-byte integer mode.
If <var>loc</var> is in a register, the mode to use is specified by the
operand of the <code>insv</code> or <code>extv</code> pattern
(see <a href="#Standard-Names">Standard Names</a>) and is usually a full-word integer mode,
which is the default if none is specified.
</p>
<p>The mode of <var>pos</var> is machine-specific and is also specified
in the <code>insv</code> or <code>extv</code> pattern.
</p>
<p>The mode <var>m</var> is the same as the mode that would be used for
<var>loc</var> if it were a register.
</p>
<p>A <code>sign_extract</code> can not appear as an lvalue, or part thereof,
in RTL.
</p>
<a name="index-zero_005fextract"></a>
</dd>
<dt><code>(zero_extract:<var>m</var> <var>loc</var> <var>size</var> <var>pos</var>)</code></dt>
<dd><p>Like <code>sign_extract</code> but refers to an unsigned or zero-extended
bit-field.  The same sequence of bits are extracted, but they
are filled to an entire word with zeros instead of by sign-extension.
</p>
<p>Unlike <code>sign_extract</code>, this type of expressions can be lvalues
in RTL; they may appear on the left side of an assignment, indicating
insertion of a value into the specified bit-field.
</p></dd>
</dl>

<hr>
<a name="Vector-Operations"></a>
<div class="header">
<p>
Next: <a href="#Conversions" accesskey="n" rel="next">Conversions</a>, Previous: <a href="#Bit_002dFields" accesskey="p" rel="prev">Bit-Fields</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Vector-Operations-1"></a>
<h3 class="section">10.12 Vector Operations</h3>
<a name="index-vector-operations"></a>

<p>All normal RTL expressions can be used with vector modes; they are
interpreted as operating on each part of the vector independently.
Additionally, there are a few new expressions to describe specific vector
operations.
</p>
<dl compact="compact">
<dd><a name="index-vec_005fmerge"></a>
</dd>
<dt><code>(vec_merge:<var>m</var> <var>vec1</var> <var>vec2</var> <var>items</var>)</code></dt>
<dd><p>This describes a merge operation between two vectors.  The result is a vector
of mode <var>m</var>; its elements are selected from either <var>vec1</var> or
<var>vec2</var>.  Which elements are selected is described by <var>items</var>, which
is a bit mask represented by a <code>const_int</code>; a zero bit indicates the
corresponding element in the result vector is taken from <var>vec2</var> while
a set bit indicates it is taken from <var>vec1</var>.
</p>
<a name="index-vec_005fselect"></a>
</dd>
<dt><code>(vec_select:<var>m</var> <var>vec1</var> <var>selection</var>)</code></dt>
<dd><p>This describes an operation that selects parts of a vector.  <var>vec1</var> is
the source vector, and <var>selection</var> is a <code>parallel</code> that contains a
<code>const_int</code> for each of the subparts of the result vector, giving the
number of the source subpart that should be stored into it.
The result mode <var>m</var> is either the submode for a single element of
<var>vec1</var> (if only one subpart is selected), or another vector mode
with that element submode (if multiple subparts are selected).
</p>
<a name="index-vec_005fconcat"></a>
</dd>
<dt><code>(vec_concat:<var>m</var> <var>x1</var> <var>x2</var>)</code></dt>
<dd><p>Describes a vector concat operation.  The result is a concatenation of the
vectors or scalars <var>x1</var> and <var>x2</var>; its length is the sum of the
lengths of the two inputs.
</p>
<a name="index-vec_005fduplicate"></a>
</dd>
<dt><code>(vec_duplicate:<var>m</var> <var>x</var>)</code></dt>
<dd><p>This operation converts a scalar into a vector or a small vector into a
larger one by duplicating the input values.  The output vector mode must have
the same submodes as the input vector mode or the scalar modes, and the
number of output parts must be an integer multiple of the number of input
parts.
</p>
</dd>
</dl>

<hr>
<a name="Conversions"></a>
<div class="header">
<p>
Next: <a href="#RTL-Declarations" accesskey="n" rel="next">RTL Declarations</a>, Previous: <a href="#Vector-Operations" accesskey="p" rel="prev">Vector Operations</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Conversions-1"></a>
<h3 class="section">10.13 Conversions</h3>
<a name="index-conversions"></a>
<a name="index-machine-mode-conversions"></a>

<p>All conversions between machine modes must be represented by
explicit conversion operations.  For example, an expression
which is the sum of a byte and a full word cannot be written as
<code>(plus:SI (reg:QI 34) (reg:SI 80))</code> because the <code>plus</code>
operation requires two operands of the same machine mode.
Therefore, the byte-sized operand is enclosed in a conversion
operation, as in
</p>
<div class="smallexample">
<pre class="smallexample">(plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
</pre></div>

<p>The conversion operation is not a mere placeholder, because there
may be more than one way of converting from a given starting mode
to the desired final mode.  The conversion operation code says how
to do it.
</p>
<p>For all conversion operations, <var>x</var> must not be <code>VOIDmode</code>
because the mode in which to do the conversion would not be known.
The conversion must either be done at compile-time or <var>x</var>
must be placed into a register.
</p>
<dl compact="compact">
<dd><a name="index-sign_005fextend"></a>
</dd>
<dt><code>(sign_extend:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of sign-extending the value <var>x</var>
to machine mode <var>m</var>.  <var>m</var> must be a fixed-point mode
and <var>x</var> a fixed-point value of a mode narrower than <var>m</var>.
</p>
<a name="index-zero_005fextend"></a>
</dd>
<dt><code>(zero_extend:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of zero-extending the value <var>x</var>
to machine mode <var>m</var>.  <var>m</var> must be a fixed-point mode
and <var>x</var> a fixed-point value of a mode narrower than <var>m</var>.
</p>
<a name="index-float_005fextend"></a>
</dd>
<dt><code>(float_extend:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of extending the value <var>x</var>
to machine mode <var>m</var>.  <var>m</var> must be a floating point mode
and <var>x</var> a floating point value of a mode narrower than <var>m</var>.
</p>
<a name="index-truncate"></a>
</dd>
<dt><code>(truncate:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of truncating the value <var>x</var>
to machine mode <var>m</var>.  <var>m</var> must be a fixed-point mode
and <var>x</var> a fixed-point value of a mode wider than <var>m</var>.
</p>
<a name="index-ss_005ftruncate"></a>
</dd>
<dt><code>(ss_truncate:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of truncating the value <var>x</var>
to machine mode <var>m</var>, using signed saturation in the case of
overflow.  Both <var>m</var> and the mode of <var>x</var> must be fixed-point
modes.
</p>
<a name="index-us_005ftruncate"></a>
</dd>
<dt><code>(us_truncate:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of truncating the value <var>x</var>
to machine mode <var>m</var>, using unsigned saturation in the case of
overflow.  Both <var>m</var> and the mode of <var>x</var> must be fixed-point
modes.
</p>
<a name="index-float_005ftruncate"></a>
</dd>
<dt><code>(float_truncate:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of truncating the value <var>x</var>
to machine mode <var>m</var>.  <var>m</var> must be a floating point mode
and <var>x</var> a floating point value of a mode wider than <var>m</var>.
</p>
<a name="index-float"></a>
</dd>
<dt><code>(float:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of converting fixed point value <var>x</var>,
regarded as signed, to floating point mode <var>m</var>.
</p>
<a name="index-unsigned_005ffloat"></a>
</dd>
<dt><code>(unsigned_float:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of converting fixed point value <var>x</var>,
regarded as unsigned, to floating point mode <var>m</var>.
</p>
<a name="index-fix"></a>
</dd>
<dt><code>(fix:<var>m</var> <var>x</var>)</code></dt>
<dd><p>When <var>m</var> is a floating-point mode, represents the result of
converting floating point value <var>x</var> (valid for mode <var>m</var>) to an
integer, still represented in floating point mode <var>m</var>, by rounding
towards zero.
</p>
<p>When <var>m</var> is a fixed-point mode, represents the result of
converting floating point value <var>x</var> to mode <var>m</var>, regarded as
signed.  How rounding is done is not specified, so this operation may
be used validly in compiling C code only for integer-valued operands.
</p>
<a name="index-unsigned_005ffix"></a>
</dd>
<dt><code>(unsigned_fix:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of converting floating point value <var>x</var> to
fixed point mode <var>m</var>, regarded as unsigned.  How rounding is done
is not specified.
</p>
<a name="index-fract_005fconvert"></a>
</dd>
<dt><code>(fract_convert:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of converting fixed-point value <var>x</var> to
fixed-point mode <var>m</var>, signed integer value <var>x</var> to
fixed-point mode <var>m</var>, floating-point value <var>x</var> to
fixed-point mode <var>m</var>, fixed-point value <var>x</var> to integer mode <var>m</var>
regarded as signed, or fixed-point value <var>x</var> to floating-point mode <var>m</var>.
When overflows or underflows happen, the results are undefined.
</p>
<a name="index-sat_005ffract"></a>
</dd>
<dt><code>(sat_fract:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of converting fixed-point value <var>x</var> to
fixed-point mode <var>m</var>, signed integer value <var>x</var> to
fixed-point mode <var>m</var>, or floating-point value <var>x</var> to
fixed-point mode <var>m</var>.
When overflows or underflows happen, the results are saturated to the
maximum or the minimum.
</p>
<a name="index-unsigned_005ffract_005fconvert"></a>
</dd>
<dt><code>(unsigned_fract_convert:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of converting fixed-point value <var>x</var> to
integer mode <var>m</var> regarded as unsigned, or unsigned integer value <var>x</var> to
fixed-point mode <var>m</var>.
When overflows or underflows happen, the results are undefined.
</p>
<a name="index-unsigned_005fsat_005ffract"></a>
</dd>
<dt><code>(unsigned_sat_fract:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the result of converting unsigned integer value <var>x</var> to
fixed-point mode <var>m</var>.
When overflows or underflows happen, the results are saturated to the
maximum or the minimum.
</p></dd>
</dl>

<hr>
<a name="RTL-Declarations"></a>
<div class="header">
<p>
Next: <a href="#Side-Effects" accesskey="n" rel="next">Side Effects</a>, Previous: <a href="#Conversions" accesskey="p" rel="prev">Conversions</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Declarations-1"></a>
<h3 class="section">10.14 Declarations</h3>
<a name="index-RTL-declarations"></a>
<a name="index-declarations_002c-RTL"></a>

<p>Declaration expression codes do not represent arithmetic operations
but rather state assertions about their operands.
</p>
<dl compact="compact">
<dd><a name="index-strict_005flow_005fpart"></a>
<a name="index-subreg_002c-in-strict_005flow_005fpart"></a>
</dd>
<dt><code>(strict_low_part (subreg:<var>m</var> (reg:<var>n</var> <var>r</var>) 0))</code></dt>
<dd><p>This expression code is used in only one context: as the destination operand of a
<code>set</code> expression.  In addition, the operand of this expression
must be a non-paradoxical <code>subreg</code> expression.
</p>
<p>The presence of <code>strict_low_part</code> says that the part of the
register which is meaningful in mode <var>n</var>, but is not part of
mode <var>m</var>, is not to be altered.  Normally, an assignment to such
a subreg is allowed to have undefined effects on the rest of the
register when <var>m</var> is less than a word.
</p></dd>
</dl>

<hr>
<a name="Side-Effects"></a>
<div class="header">
<p>
Next: <a href="#Incdec" accesskey="n" rel="next">Incdec</a>, Previous: <a href="#RTL-Declarations" accesskey="p" rel="prev">RTL Declarations</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Side-Effect-Expressions"></a>
<h3 class="section">10.15 Side Effect Expressions</h3>
<a name="index-RTL-side-effect-expressions"></a>

<p>The expression codes described so far represent values, not actions.
But machine instructions never produce values; they are meaningful
only for their side effects on the state of the machine.  Special
expression codes are used to represent side effects.
</p>
<p>The body of an instruction is always one of these side effect codes;
the codes described above, which represent values, appear only as
the operands of these.
</p>
<dl compact="compact">
<dd><a name="index-set"></a>
</dd>
<dt><code>(set <var>lval</var> <var>x</var>)</code></dt>
<dd><p>Represents the action of storing the value of <var>x</var> into the place
represented by <var>lval</var>.  <var>lval</var> must be an expression
representing a place that can be stored in: <code>reg</code> (or <code>subreg</code>,
<code>strict_low_part</code> or <code>zero_extract</code>), <code>mem</code>, <code>pc</code>,
<code>parallel</code>, or <code>cc0</code>.
</p>
<p>If <var>lval</var> is a <code>reg</code>, <code>subreg</code> or <code>mem</code>, it has a
machine mode; then <var>x</var> must be valid for that mode.
</p>
<p>If <var>lval</var> is a <code>reg</code> whose machine mode is less than the full
width of the register, then it means that the part of the register
specified by the machine mode is given the specified value and the
rest of the register receives an undefined value.  Likewise, if
<var>lval</var> is a <code>subreg</code> whose machine mode is narrower than
the mode of the register, the rest of the register can be changed in
an undefined way.
</p>
<p>If <var>lval</var> is a <code>strict_low_part</code> of a subreg, then the part
of the register specified by the machine mode of the <code>subreg</code> is
given the value <var>x</var> and the rest of the register is not changed.
</p>
<p>If <var>lval</var> is a <code>zero_extract</code>, then the referenced part of
the bit-field (a memory or register reference) specified by the
<code>zero_extract</code> is given the value <var>x</var> and the rest of the
bit-field is not changed.  Note that <code>sign_extract</code> can not
appear in <var>lval</var>.
</p>
<p>If <var>lval</var> is <code>(cc0)</code>, it has no machine mode, and <var>x</var> may
be either a <code>compare</code> expression or a value that may have any mode.
The latter case represents a &ldquo;test&rdquo; instruction.  The expression
<code>(set (cc0) (reg:<var>m</var> <var>n</var>))</code> is equivalent to
<code>(set (cc0) (compare (reg:<var>m</var> <var>n</var>) (const_int 0)))</code>.
Use the former expression to save space during the compilation.
</p>
<p>If <var>lval</var> is a <code>parallel</code>, it is used to represent the case of
a function returning a structure in multiple registers.  Each element
of the <code>parallel</code> is an <code>expr_list</code> whose first operand is a
<code>reg</code> and whose second operand is a <code>const_int</code> representing the
offset (in bytes) into the structure at which the data in that register
corresponds.  The first element may be null to indicate that the structure
is also passed partly in memory.
</p>
<a name="index-jump-instructions-and-set"></a>
<a name="index-if_005fthen_005felse-usage"></a>
<p>If <var>lval</var> is <code>(pc)</code>, we have a jump instruction, and the
possibilities for <var>x</var> are very limited.  It may be a
<code>label_ref</code> expression (unconditional jump).  It may be an
<code>if_then_else</code> (conditional jump), in which case either the
second or the third operand must be <code>(pc)</code> (for the case which
does not jump) and the other of the two must be a <code>label_ref</code>
(for the case which does jump).  <var>x</var> may also be a <code>mem</code> or
<code>(plus:SI (pc) <var>y</var>)</code>, where <var>y</var> may be a <code>reg</code> or a
<code>mem</code>; these unusual patterns are used to represent jumps through
branch tables.
</p>
<p>If <var>lval</var> is neither <code>(cc0)</code> nor <code>(pc)</code>, the mode of
<var>lval</var> must not be <code>VOIDmode</code> and the mode of <var>x</var> must be
valid for the mode of <var>lval</var>.
</p>
<a name="index-SET_005fDEST"></a>
<a name="index-SET_005fSRC"></a>
<p><var>lval</var> is customarily accessed with the <code>SET_DEST</code> macro and
<var>x</var> with the <code>SET_SRC</code> macro.
</p>
<a name="index-return"></a>
</dd>
<dt><code>(return)</code></dt>
<dd><p>As the sole expression in a pattern, represents a return from the
current function, on machines where this can be done with one
instruction, such as VAXen.  On machines where a multi-instruction
&ldquo;epilogue&rdquo; must be executed in order to return from the function,
returning is done by jumping to a label which precedes the epilogue, and
the <code>return</code> expression code is never used.
</p>
<p>Inside an <code>if_then_else</code> expression, represents the value to be
placed in <code>pc</code> to return to the caller.
</p>
<p>Note that an insn pattern of <code>(return)</code> is logically equivalent to
<code>(set (pc) (return))</code>, but the latter form is never used.
</p>
<a name="index-simple_005freturn"></a>
</dd>
<dt><code>(simple_return)</code></dt>
<dd><p>Like <code>(return)</code>, but truly represents only a function return, while
<code>(return)</code> may represent an insn that also performs other functions
of the function epilogue.  Like <code>(return)</code>, this may also occur in
conditional jumps.
</p>
<a name="index-call-1"></a>
</dd>
<dt><code>(call <var>function</var> <var>nargs</var>)</code></dt>
<dd><p>Represents a function call.  <var>function</var> is a <code>mem</code> expression
whose address is the address of the function to be called.
<var>nargs</var> is an expression which can be used for two purposes: on
some machines it represents the number of bytes of stack argument; on
others, it represents the number of argument registers.
</p>
<p>Each machine has a standard machine mode which <var>function</var> must
have.  The machine description defines macro <code>FUNCTION_MODE</code> to
expand into the requisite mode name.  The purpose of this mode is to
specify what kind of addressing is allowed, on machines where the
allowed kinds of addressing depend on the machine mode being
addressed.
</p>
<a name="index-clobber"></a>
</dd>
<dt><code>(clobber <var>x</var>)</code></dt>
<dd><p>Represents the storing or possible storing of an unpredictable,
undescribed value into <var>x</var>, which must be a <code>reg</code>,
<code>scratch</code>, <code>parallel</code> or <code>mem</code> expression.
</p>
<p>One place this is used is in string instructions that store standard
values into particular hard registers.  It may not be worth the
trouble to describe the values that are stored, but it is essential to
inform the compiler that the registers will be altered, lest it
attempt to keep data in them across the string instruction.
</p>
<p>If <var>x</var> is <code>(mem:BLK (const_int 0))</code> or
<code>(mem:BLK (scratch))</code>, it means that all memory
locations must be presumed clobbered.  If <var>x</var> is a <code>parallel</code>,
it has the same meaning as a <code>parallel</code> in a <code>set</code> expression.
</p>
<p>Note that the machine description classifies certain hard registers as
&ldquo;call-clobbered&rdquo;.  All function call instructions are assumed by
default to clobber these registers, so there is no need to use
<code>clobber</code> expressions to indicate this fact.  Also, each function
call is assumed to have the potential to alter any memory location,
unless the function is declared <code>const</code>.
</p>
<p>If the last group of expressions in a <code>parallel</code> are each a
<code>clobber</code> expression whose arguments are <code>reg</code> or
<code>match_scratch</code> (see <a href="#RTL-Template">RTL Template</a>) expressions, the combiner
phase can add the appropriate <code>clobber</code> expressions to an insn it
has constructed when doing so will cause a pattern to be matched.
</p>
<p>This feature can be used, for example, on a machine that whose multiply
and add instructions don&rsquo;t use an MQ register but which has an
add-accumulate instruction that does clobber the MQ register.  Similarly,
a combined instruction might require a temporary register while the
constituent instructions might not.
</p>
<p>When a <code>clobber</code> expression for a register appears inside a
<code>parallel</code> with other side effects, the register allocator
guarantees that the register is unoccupied both before and after that
insn if it is a hard register clobber.  For pseudo-register clobber,
the register allocator and the reload pass do not assign the same hard
register to the clobber and the input operands if there is an insn
alternative containing the &lsquo;<samp>&amp;</samp>&rsquo; constraint (see <a href="#Modifiers">Modifiers</a>) for
the clobber and the hard register is in register classes of the
clobber in the alternative.  You can clobber either a specific hard
register, a pseudo register, or a <code>scratch</code> expression; in the
latter two cases, GCC will allocate a hard register that is available
there for use as a temporary.
</p>
<p>For instructions that require a temporary register, you should use
<code>scratch</code> instead of a pseudo-register because this will allow the
combiner phase to add the <code>clobber</code> when required.  You do this by
coding (<code>clobber</code> (<code>match_scratch</code> &hellip;)).  If you do
clobber a pseudo register, use one which appears nowhere else&mdash;generate
a new one each time.  Otherwise, you may confuse CSE.
</p>
<p>There is one other known use for clobbering a pseudo register in a
<code>parallel</code>: when one of the input operands of the insn is also
clobbered by the insn.  In this case, using the same pseudo register in
the clobber and elsewhere in the insn produces the expected results.
</p>
<a name="index-use"></a>
</dd>
<dt><code>(use <var>x</var>)</code></dt>
<dd><p>Represents the use of the value of <var>x</var>.  It indicates that the
value in <var>x</var> at this point in the program is needed, even though
it may not be apparent why this is so.  Therefore, the compiler will
not attempt to delete previous instructions whose only effect is to
store a value in <var>x</var>.  <var>x</var> must be a <code>reg</code> expression.
</p>
<p>In some situations, it may be tempting to add a <code>use</code> of a
register in a <code>parallel</code> to describe a situation where the value
of a special register will modify the behavior of the instruction.
A hypothetical example might be a pattern for an addition that can
either wrap around or use saturating addition depending on the value
of a special control register:
</p>
<div class="smallexample">
<pre class="smallexample">(parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3)
                                       (reg:SI 4)] 0))
           (use (reg:SI 1))])
</pre></div>


<p>This will not work, several of the optimizers only look at expressions
locally; it is very likely that if you have multiple insns with
identical inputs to the <code>unspec</code>, they will be optimized away even
if register 1 changes in between.
</p>
<p>This means that <code>use</code> can <em>only</em> be used to describe
that the register is live.  You should think twice before adding
<code>use</code> statements, more often you will want to use <code>unspec</code>
instead.  The <code>use</code> RTX is most commonly useful to describe that
a fixed register is implicitly used in an insn.  It is also safe to use
in patterns where the compiler knows for other reasons that the result
of the whole pattern is variable, such as &lsquo;<samp>movmem<var>m</var></samp>&rsquo; or
&lsquo;<samp>call</samp>&rsquo; patterns.
</p>
<p>During the reload phase, an insn that has a <code>use</code> as pattern
can carry a reg_equal note.  These <code>use</code> insns will be deleted
before the reload phase exits.
</p>
<p>During the delayed branch scheduling phase, <var>x</var> may be an insn.
This indicates that <var>x</var> previously was located at this place in the
code and its data dependencies need to be taken into account.  These
<code>use</code> insns will be deleted before the delayed branch scheduling
phase exits.
</p>
<a name="index-parallel"></a>
</dd>
<dt><code>(parallel [<var>x0</var> <var>x1</var> &hellip;])</code></dt>
<dd><p>Represents several side effects performed in parallel.  The square
brackets stand for a vector; the operand of <code>parallel</code> is a
vector of expressions.  <var>x0</var>, <var>x1</var> and so on are individual
side effect expressions&mdash;expressions of code <code>set</code>, <code>call</code>,
<code>return</code>, <code>simple_return</code>, <code>clobber</code> or <code>use</code>.
</p>
<p>&ldquo;In parallel&rdquo; means that first all the values used in the individual
side-effects are computed, and second all the actual side-effects are
performed.  For example,
</p>
<div class="smallexample">
<pre class="smallexample">(parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
           (set (mem:SI (reg:SI 1)) (reg:SI 1))])
</pre></div>

<p>says unambiguously that the values of hard register 1 and the memory
location addressed by it are interchanged.  In both places where
<code>(reg:SI 1)</code> appears as a memory address it refers to the value
in register 1 <em>before</em> the execution of the insn.
</p>
<p>It follows that it is <em>incorrect</em> to use <code>parallel</code> and
expect the result of one <code>set</code> to be available for the next one.
For example, people sometimes attempt to represent a jump-if-zero
instruction this way:
</p>
<div class="smallexample">
<pre class="smallexample">(parallel [(set (cc0) (reg:SI 34))
           (set (pc) (if_then_else
                        (eq (cc0) (const_int 0))
                        (label_ref &hellip;)
                        (pc)))])
</pre></div>

<p>But this is incorrect, because it says that the jump condition depends
on the condition code value <em>before</em> this instruction, not on the
new value that is set by this instruction.
</p>
<a name="index-peephole-optimization_002c-RTL-representation"></a>
<p>Peephole optimization, which takes place together with final assembly
code output, can produce insns whose patterns consist of a <code>parallel</code>
whose elements are the operands needed to output the resulting
assembler code&mdash;often <code>reg</code>, <code>mem</code> or constant expressions.
This would not be well-formed RTL at any other stage in compilation,
but it is ok then because no further optimization remains to be done.
However, the definition of the macro <code>NOTICE_UPDATE_CC</code>, if
any, must deal with such insns if you define any peephole optimizations.
</p>
<a name="index-cond_005fexec"></a>
</dd>
<dt><code>(cond_exec [<var>cond</var> <var>expr</var>])</code></dt>
<dd><p>Represents a conditionally executed expression.  The <var>expr</var> is
executed only if the <var>cond</var> is nonzero.  The <var>cond</var> expression
must not have side-effects, but the <var>expr</var> may very well have
side-effects.
</p>
<a name="index-sequence"></a>
</dd>
<dt><code>(sequence [<var>insns</var> &hellip;])</code></dt>
<dd><p>Represents a sequence of insns.  Each of the <var>insns</var> that appears
in the vector is suitable for appearing in the chain of insns, so it
must be an <code>insn</code>, <code>jump_insn</code>, <code>call_insn</code>,
<code>code_label</code>, <code>barrier</code> or <code>note</code>.
</p>
<p>A <code>sequence</code> RTX is never placed in an actual insn during RTL
generation.  It represents the sequence of insns that result from a
<code>define_expand</code> <em>before</em> those insns are passed to
<code>emit_insn</code> to insert them in the chain of insns.  When actually
inserted, the individual sub-insns are separated out and the
<code>sequence</code> is forgotten.
</p>
<p>After delay-slot scheduling is completed, an insn and all the insns that
reside in its delay slots are grouped together into a <code>sequence</code>.
The insn requiring the delay slot is the first insn in the vector;
subsequent insns are to be placed in the delay slot.
</p>
<p><code>INSN_ANNULLED_BRANCH_P</code> is set on an insn in a delay slot to
indicate that a branch insn should be used that will conditionally annul
the effect of the insns in the delay slots.  In such a case,
<code>INSN_FROM_TARGET_P</code> indicates that the insn is from the target of
the branch and should be executed only if the branch is taken; otherwise
the insn should be executed only if the branch is not taken.
See <a href="#Delay-Slots">Delay Slots</a>.
</p></dd>
</dl>

<p>These expression codes appear in place of a side effect, as the body of
an insn, though strictly speaking they do not always describe side
effects as such:
</p>
<dl compact="compact">
<dd><a name="index-asm_005finput"></a>
</dd>
<dt><code>(asm_input <var>s</var>)</code></dt>
<dd><p>Represents literal assembler code as described by the string <var>s</var>.
</p>
<a name="index-unspec"></a>
<a name="index-unspec_005fvolatile"></a>
</dd>
<dt><code>(unspec [<var>operands</var> &hellip;] <var>index</var>)</code></dt>
<dt><code>(unspec_volatile [<var>operands</var> &hellip;] <var>index</var>)</code></dt>
<dd><p>Represents a machine-specific operation on <var>operands</var>.  <var>index</var>
selects between multiple machine-specific operations.
<code>unspec_volatile</code> is used for volatile operations and operations
that may trap; <code>unspec</code> is used for other operations.
</p>
<p>These codes may appear inside a <code>pattern</code> of an
insn, inside a <code>parallel</code>, or inside an expression.
</p>
<a name="index-addr_005fvec"></a>
</dd>
<dt><code>(addr_vec:<var>m</var> [<var>lr0</var> <var>lr1</var> &hellip;])</code></dt>
<dd><p>Represents a table of jump addresses.  The vector elements <var>lr0</var>,
etc., are <code>label_ref</code> expressions.  The mode <var>m</var> specifies
how much space is given to each address; normally <var>m</var> would be
<code>Pmode</code>.
</p>
<a name="index-addr_005fdiff_005fvec"></a>
</dd>
<dt><code>(addr_diff_vec:<var>m</var> <var>base</var> [<var>lr0</var> <var>lr1</var> &hellip;] <var>min</var> <var>max</var> <var>flags</var>)</code></dt>
<dd><p>Represents a table of jump addresses expressed as offsets from
<var>base</var>.  The vector elements <var>lr0</var>, etc., are <code>label_ref</code>
expressions and so is <var>base</var>.  The mode <var>m</var> specifies how much
space is given to each address-difference.  <var>min</var> and <var>max</var>
are set up by branch shortening and hold a label with a minimum and a
maximum address, respectively.  <var>flags</var> indicates the relative
position of <var>base</var>, <var>min</var> and <var>max</var> to the containing insn
and of <var>min</var> and <var>max</var> to <var>base</var>.  See rtl.def for details.
</p>
<a name="index-prefetch"></a>
</dd>
<dt><code>(prefetch:<var>m</var> <var>addr</var> <var>rw</var> <var>locality</var>)</code></dt>
<dd><p>Represents prefetch of memory at address <var>addr</var>.
Operand <var>rw</var> is 1 if the prefetch is for data to be written, 0 otherwise;
targets that do not support write prefetches should treat this as a normal
prefetch.
Operand <var>locality</var> specifies the amount of temporal locality; 0 if there
is none or 1, 2, or 3 for increasing levels of temporal locality;
targets that do not support locality hints should ignore this.
</p>
<p>This insn is used to minimize cache-miss latency by moving data into a
cache before it is accessed.  It should use only non-faulting data prefetch
instructions.
</p></dd>
</dl>

<hr>
<a name="Incdec"></a>
<div class="header">
<p>
Next: <a href="#Assembler" accesskey="n" rel="next">Assembler</a>, Previous: <a href="#Side-Effects" accesskey="p" rel="prev">Side Effects</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Embedded-Side_002dEffects-on-Addresses"></a>
<h3 class="section">10.16 Embedded Side-Effects on Addresses</h3>
<a name="index-RTL-preincrement"></a>
<a name="index-RTL-postincrement"></a>
<a name="index-RTL-predecrement"></a>
<a name="index-RTL-postdecrement"></a>

<p>Six special side-effect expression codes appear as memory addresses.
</p>
<dl compact="compact">
<dd><a name="index-pre_005fdec"></a>
</dd>
<dt><code>(pre_dec:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the side effect of decrementing <var>x</var> by a standard
amount and represents also the value that <var>x</var> has after being
decremented.  <var>x</var> must be a <code>reg</code> or <code>mem</code>, but most
machines allow only a <code>reg</code>.  <var>m</var> must be the machine mode
for pointers on the machine in use.  The amount <var>x</var> is decremented
by is the length in bytes of the machine mode of the containing memory
reference of which this expression serves as the address.  Here is an
example of its use:
</p>
<div class="smallexample">
<pre class="smallexample">(mem:DF (pre_dec:SI (reg:SI 39)))
</pre></div>

<p>This says to decrement pseudo register 39 by the length of a <code>DFmode</code>
value and use the result to address a <code>DFmode</code> value.
</p>
<a name="index-pre_005finc"></a>
</dd>
<dt><code>(pre_inc:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Similar, but specifies incrementing <var>x</var> instead of decrementing it.
</p>
<a name="index-post_005fdec"></a>
</dd>
<dt><code>(post_dec:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Represents the same side effect as <code>pre_dec</code> but a different
value.  The value represented here is the value <var>x</var> has <i>before</i>
being decremented.
</p>
<a name="index-post_005finc"></a>
</dd>
<dt><code>(post_inc:<var>m</var> <var>x</var>)</code></dt>
<dd><p>Similar, but specifies incrementing <var>x</var> instead of decrementing it.
</p>
<a name="index-post_005fmodify"></a>
</dd>
<dt><code>(post_modify:<var>m</var> <var>x</var> <var>y</var>)</code></dt>
<dd>
<p>Represents the side effect of setting <var>x</var> to <var>y</var> and
represents <var>x</var> before <var>x</var> is modified.  <var>x</var> must be a
<code>reg</code> or <code>mem</code>, but most machines allow only a <code>reg</code>.
<var>m</var> must be the machine mode for pointers on the machine in use.
</p>
<p>The expression <var>y</var> must be one of three forms:
<code>(plus:<var>m</var> <var>x</var> <var>z</var>)</code>,
<code>(minus:<var>m</var> <var>x</var> <var>z</var>)</code>, or
<code>(plus:<var>m</var> <var>x</var> <var>i</var>)</code>,
where <var>z</var> is an index register and <var>i</var> is a constant.
</p>
<p>Here is an example of its use:
</p>
<div class="smallexample">
<pre class="smallexample">(mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42)
                                          (reg:SI 48))))
</pre></div>

<p>This says to modify pseudo register 42 by adding the contents of pseudo
register 48 to it, after the use of what ever 42 points to.
</p>
<a name="index-pre_005fmodify"></a>
</dd>
<dt><code>(pre_modify:<var>m</var> <var>x</var> <var>expr</var>)</code></dt>
<dd><p>Similar except side effects happen before the use.
</p></dd>
</dl>

<p>These embedded side effect expressions must be used with care.  Instruction
patterns may not use them.  Until the &lsquo;<samp>flow</samp>&rsquo; pass of the compiler,
they may occur only to represent pushes onto the stack.  The &lsquo;<samp>flow</samp>&rsquo;
pass finds cases where registers are incremented or decremented in one
instruction and used as an address shortly before or after; these cases are
then transformed to use pre- or post-increment or -decrement.
</p>
<p>If a register used as the operand of these expressions is used in
another address in an insn, the original value of the register is used.
Uses of the register outside of an address are not permitted within the
same insn as a use in an embedded side effect expression because such
insns behave differently on different machines and hence must be treated
as ambiguous and disallowed.
</p>
<p>An instruction that can be represented with an embedded side effect
could also be represented using <code>parallel</code> containing an additional
<code>set</code> to describe how the address register is altered.  This is not
done because machines that allow these operations at all typically
allow them wherever a memory address is called for.  Describing them as
additional parallel stores would require doubling the number of entries
in the machine description.
</p>
<hr>
<a name="Assembler"></a>
<div class="header">
<p>
Next: <a href="#Debug-Information" accesskey="n" rel="next">Debug Information</a>, Previous: <a href="#Incdec" accesskey="p" rel="prev">Incdec</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Assembler-Instructions-as-Expressions"></a>
<h3 class="section">10.17 Assembler Instructions as Expressions</h3>
<a name="index-assembler-instructions-in-RTL"></a>

<a name="index-asm_005foperands_002c-usage"></a>
<p>The RTX code <code>asm_operands</code> represents a value produced by a
user-specified assembler instruction.  It is used to represent
an <code>asm</code> statement with arguments.  An <code>asm</code> statement with
a single output operand, like this:
</p>
<div class="smallexample">
<pre class="smallexample">asm (&quot;foo %1,%2,%0&quot; : &quot;=a&quot; (outputvar) : &quot;g&quot; (x + y), &quot;di&quot; (*z));
</pre></div>

<p>is represented using a single <code>asm_operands</code> RTX which represents
the value that is stored in <code>outputvar</code>:
</p>
<div class="smallexample">
<pre class="smallexample">(set <var>rtx-for-outputvar</var>
     (asm_operands &quot;foo %1,%2,%0&quot; &quot;a&quot; 0
                   [<var>rtx-for-addition-result</var> <var>rtx-for-*z</var>]
                   [(asm_input:<var>m1</var> &quot;g&quot;)
                    (asm_input:<var>m2</var> &quot;di&quot;)]))
</pre></div>

<p>Here the operands of the <code>asm_operands</code> RTX are the assembler
template string, the output-operand&rsquo;s constraint, the index-number of the
output operand among the output operands specified, a vector of input
operand RTX&rsquo;s, and a vector of input-operand modes and constraints.  The
mode <var>m1</var> is the mode of the sum <code>x+y</code>; <var>m2</var> is that of
<code>*z</code>.
</p>
<p>When an <code>asm</code> statement has multiple output values, its insn has
several such <code>set</code> RTX&rsquo;s inside of a <code>parallel</code>.  Each <code>set</code>
contains an <code>asm_operands</code>; all of these share the same assembler
template and vectors, but each contains the constraint for the respective
output operand.  They are also distinguished by the output-operand index
number, which is 0, 1, &hellip; for successive output operands.
</p>
<hr>
<a name="Debug-Information"></a>
<div class="header">
<p>
Next: <a href="#Insns" accesskey="n" rel="next">Insns</a>, Previous: <a href="#Assembler" accesskey="p" rel="prev">Assembler</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Variable-Location-Debug-Information-in-RTL"></a>
<h3 class="section">10.18 Variable Location Debug Information in RTL</h3>
<a name="index-Variable-Location-Debug-Information-in-RTL"></a>

<p>Variable tracking relies on <code>MEM_EXPR</code> and <code>REG_EXPR</code>
annotations to determine what user variables memory and register
references refer to.
</p>
<p>Variable tracking at assignments uses these notes only when they refer
to variables that live at fixed locations (e.g., addressable
variables, global non-automatic variables).  For variables whose
location may vary, it relies on the following types of notes.
</p>
<dl compact="compact">
<dd><a name="index-var_005flocation"></a>
</dd>
<dt><code>(var_location:<var>mode</var> <var>var</var> <var>exp</var> <var>stat</var>)</code></dt>
<dd><p>Binds variable <code>var</code>, a tree, to value <var>exp</var>, an RTL
expression.  It appears only in <code>NOTE_INSN_VAR_LOCATION</code> and
<code>DEBUG_INSN</code>s, with slightly different meanings.  <var>mode</var>, if
present, represents the mode of <var>exp</var>, which is useful if it is a
modeless expression.  <var>stat</var> is only meaningful in notes,
indicating whether the variable is known to be initialized or
uninitialized.
</p>
<a name="index-debug_005fexpr"></a>
</dd>
<dt><code>(debug_expr:<var>mode</var> <var>decl</var>)</code></dt>
<dd><p>Stands for the value bound to the <code>DEBUG_EXPR_DECL</code> <var>decl</var>,
that points back to it, within value expressions in
<code>VAR_LOCATION</code> nodes.
</p>
</dd>
</dl>

<hr>
<a name="Insns"></a>
<div class="header">
<p>
Next: <a href="#Calls" accesskey="n" rel="next">Calls</a>, Previous: <a href="#Debug-Information" accesskey="p" rel="prev">Debug Information</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Insns-1"></a>
<h3 class="section">10.19 Insns</h3>
<a name="index-insns"></a>

<p>The RTL representation of the code for a function is a doubly-linked
chain of objects called <em>insns</em>.  Insns are expressions with
special codes that are used for no other purpose.  Some insns are
actual instructions; others represent dispatch tables for <code>switch</code>
statements; others represent labels to jump to or various sorts of
declarative information.
</p>
<p>In addition to its own specific data, each insn must have a unique
id-number that distinguishes it from all other insns in the current
function (after delayed branch scheduling, copies of an insn with the
same id-number may be present in multiple places in a function, but
these copies will always be identical and will only appear inside a
<code>sequence</code>), and chain pointers to the preceding and following
insns.  These three fields occupy the same position in every insn,
independent of the expression code of the insn.  They could be accessed
with <code>XEXP</code> and <code>XINT</code>, but instead three special macros are
always used:
</p>
<dl compact="compact">
<dd><a name="index-INSN_005fUID"></a>
</dd>
<dt><code>INSN_UID (<var>i</var>)</code></dt>
<dd><p>Accesses the unique id of insn <var>i</var>.
</p>
<a name="index-PREV_005fINSN"></a>
</dd>
<dt><code>PREV_INSN (<var>i</var>)</code></dt>
<dd><p>Accesses the chain pointer to the insn preceding <var>i</var>.
If <var>i</var> is the first insn, this is a null pointer.
</p>
<a name="index-NEXT_005fINSN"></a>
</dd>
<dt><code>NEXT_INSN (<var>i</var>)</code></dt>
<dd><p>Accesses the chain pointer to the insn following <var>i</var>.
If <var>i</var> is the last insn, this is a null pointer.
</p></dd>
</dl>

<a name="index-get_005finsns"></a>
<a name="index-get_005flast_005finsn"></a>
<p>The first insn in the chain is obtained by calling <code>get_insns</code>; the
last insn is the result of calling <code>get_last_insn</code>.  Within the
chain delimited by these insns, the <code>NEXT_INSN</code> and
<code>PREV_INSN</code> pointers must always correspond: if <var>insn</var> is not
the first insn,
</p>
<div class="smallexample">
<pre class="smallexample">NEXT_INSN (PREV_INSN (<var>insn</var>)) == <var>insn</var>
</pre></div>

<p>is always true and if <var>insn</var> is not the last insn,
</p>
<div class="smallexample">
<pre class="smallexample">PREV_INSN (NEXT_INSN (<var>insn</var>)) == <var>insn</var>
</pre></div>

<p>is always true.
</p>
<p>After delay slot scheduling, some of the insns in the chain might be
<code>sequence</code> expressions, which contain a vector of insns.  The value
of <code>NEXT_INSN</code> in all but the last of these insns is the next insn
in the vector; the value of <code>NEXT_INSN</code> of the last insn in the vector
is the same as the value of <code>NEXT_INSN</code> for the <code>sequence</code> in
which it is contained.  Similar rules apply for <code>PREV_INSN</code>.
</p>
<p>This means that the above invariants are not necessarily true for insns
inside <code>sequence</code> expressions.  Specifically, if <var>insn</var> is the
first insn in a <code>sequence</code>, <code>NEXT_INSN (PREV_INSN (<var>insn</var>))</code>
is the insn containing the <code>sequence</code> expression, as is the value
of <code>PREV_INSN (NEXT_INSN (<var>insn</var>))</code> if <var>insn</var> is the last
insn in the <code>sequence</code> expression.  You can use these expressions
to find the containing <code>sequence</code> expression.
</p>
<p>Every insn has one of the following expression codes:
</p>
<dl compact="compact">
<dd><a name="index-insn"></a>
</dd>
<dt><code>insn</code></dt>
<dd><p>The expression code <code>insn</code> is used for instructions that do not jump
and do not do function calls.  <code>sequence</code> expressions are always
contained in insns with code <code>insn</code> even if one of those insns
should jump or do function calls.
</p>
<p>Insns with code <code>insn</code> have four additional fields beyond the three
mandatory ones listed above.  These four are described in a table below.
</p>
<a name="index-jump_005finsn"></a>
</dd>
<dt><code>jump_insn</code></dt>
<dd><p>The expression code <code>jump_insn</code> is used for instructions that may
jump (or, more generally, may contain <code>label_ref</code> expressions to
which <code>pc</code> can be set in that instruction).  If there is an
instruction to return from the current function, it is recorded as a
<code>jump_insn</code>.
</p>
<a name="index-JUMP_005fLABEL"></a>
<p><code>jump_insn</code> insns have the same extra fields as <code>insn</code> insns,
accessed in the same way and in addition contain a field
<code>JUMP_LABEL</code> which is defined once jump optimization has completed.
</p>
<p>For simple conditional and unconditional jumps, this field contains
the <code>code_label</code> to which this insn will (possibly conditionally)
branch.  In a more complex jump, <code>JUMP_LABEL</code> records one of the
labels that the insn refers to; other jump target labels are recorded
as <code>REG_LABEL_TARGET</code> notes.  The exception is <code>addr_vec</code>
and <code>addr_diff_vec</code>, where <code>JUMP_LABEL</code> is <code>NULL_RTX</code>
and the only way to find the labels is to scan the entire body of the
insn.
</p>
<p>Return insns count as jumps, but since they do not refer to any
labels, their <code>JUMP_LABEL</code> is <code>NULL_RTX</code>.
</p>
<a name="index-call_005finsn"></a>
</dd>
<dt><code>call_insn</code></dt>
<dd><p>The expression code <code>call_insn</code> is used for instructions that may do
function calls.  It is important to distinguish these instructions because
they imply that certain registers and memory locations may be altered
unpredictably.
</p>
<a name="index-CALL_005fINSN_005fFUNCTION_005fUSAGE"></a>
<p><code>call_insn</code> insns have the same extra fields as <code>insn</code> insns,
accessed in the same way and in addition contain a field
<code>CALL_INSN_FUNCTION_USAGE</code>, which contains a list (chain of
<code>expr_list</code> expressions) containing <code>use</code>, <code>clobber</code> and
sometimes <code>set</code> expressions that denote hard registers and
<code>mem</code>s used or clobbered by the called function.
</p>
<p>A <code>mem</code> generally points to a stack slot in which arguments passed
to the libcall by reference (see <a href="#Register-Arguments">TARGET_PASS_BY_REFERENCE</a>) are stored.  If the argument is
caller-copied (see <a href="#Register-Arguments">TARGET_CALLEE_COPIES</a>),
the stack slot will be mentioned in <code>clobber</code> and <code>use</code>
entries; if it&rsquo;s callee-copied, only a <code>use</code> will appear, and the
<code>mem</code> may point to addresses that are not stack slots.
</p>
<p>Registers occurring inside a <code>clobber</code> in this list augment
registers specified in <code>CALL_USED_REGISTERS</code> (see <a href="#Register-Basics">Register Basics</a>).
</p>
<p>If the list contains a <code>set</code> involving two registers, it indicates
that the function returns one of its arguments.  Such a <code>set</code> may
look like a no-op if the same register holds the argument and the return
value.
</p>
<a name="index-code_005flabel"></a>
<a name="index-CODE_005fLABEL_005fNUMBER"></a>
</dd>
<dt><code>code_label</code></dt>
<dd><p>A <code>code_label</code> insn represents a label that a jump insn can jump
to.  It contains two special fields of data in addition to the three
standard ones.  <code>CODE_LABEL_NUMBER</code> is used to hold the <em>label
number</em>, a number that identifies this label uniquely among all the
labels in the compilation (not just in the current function).
Ultimately, the label is represented in the assembler output as an
assembler label, usually of the form &lsquo;<samp>L<var>n</var></samp>&rsquo; where <var>n</var> is
the label number.
</p>
<p>When a <code>code_label</code> appears in an RTL expression, it normally
appears within a <code>label_ref</code> which represents the address of
the label, as a number.
</p>
<p>Besides as a <code>code_label</code>, a label can also be represented as a
<code>note</code> of type <code>NOTE_INSN_DELETED_LABEL</code>.
</p>
<a name="index-LABEL_005fNUSES"></a>
<p>The field <code>LABEL_NUSES</code> is only defined once the jump optimization
phase is completed.  It contains the number of times this label is
referenced in the current function.
</p>
<a name="index-LABEL_005fKIND"></a>
<a name="index-SET_005fLABEL_005fKIND"></a>
<a name="index-LABEL_005fALT_005fENTRY_005fP"></a>
<a name="index-alternate-entry-points"></a>
<p>The field <code>LABEL_KIND</code> differentiates four different types of
labels: <code>LABEL_NORMAL</code>, <code>LABEL_STATIC_ENTRY</code>,
<code>LABEL_GLOBAL_ENTRY</code>, and <code>LABEL_WEAK_ENTRY</code>.  The only labels
that do not have type <code>LABEL_NORMAL</code> are <em>alternate entry
points</em> to the current function.  These may be static (visible only in
the containing translation unit), global (exposed to all translation
units), or weak (global, but can be overridden by another symbol with the
same name).
</p>
<p>Much of the compiler treats all four kinds of label identically.  Some
of it needs to know whether or not a label is an alternate entry point;
for this purpose, the macro <code>LABEL_ALT_ENTRY_P</code> is provided.  It is
equivalent to testing whether &lsquo;<samp>LABEL_KIND (label) == LABEL_NORMAL</samp>&rsquo;.
The only place that cares about the distinction between static, global,
and weak alternate entry points, besides the front-end code that creates
them, is the function <code>output_alternate_entry_point</code>, in
<samp>final.c</samp>.
</p>
<p>To set the kind of a label, use the <code>SET_LABEL_KIND</code> macro.
</p>
<a name="index-barrier"></a>
</dd>
<dt><code>barrier</code></dt>
<dd><p>Barriers are placed in the instruction stream when control cannot flow
past them.  They are placed after unconditional jump instructions to
indicate that the jumps are unconditional and after calls to
<code>volatile</code> functions, which do not return (e.g., <code>exit</code>).
They contain no information beyond the three standard fields.
</p>
<a name="index-note"></a>
<a name="index-NOTE_005fLINE_005fNUMBER"></a>
<a name="index-NOTE_005fSOURCE_005fFILE"></a>
</dd>
<dt><code>note</code></dt>
<dd><p><code>note</code> insns are used to represent additional debugging and
declarative information.  They contain two nonstandard fields, an
integer which is accessed with the macro <code>NOTE_LINE_NUMBER</code> and a
string accessed with <code>NOTE_SOURCE_FILE</code>.
</p>
<p>If <code>NOTE_LINE_NUMBER</code> is positive, the note represents the
position of a source line and <code>NOTE_SOURCE_FILE</code> is the source file name
that the line came from.  These notes control generation of line
number data in the assembler output.
</p>
<p>Otherwise, <code>NOTE_LINE_NUMBER</code> is not really a line number but a
code with one of the following values (and <code>NOTE_SOURCE_FILE</code>
must contain a null pointer):
</p>
<dl compact="compact">
<dd><a name="index-NOTE_005fINSN_005fDELETED"></a>
</dd>
<dt><code>NOTE_INSN_DELETED</code></dt>
<dd><p>Such a note is completely ignorable.  Some passes of the compiler
delete insns by altering them into notes of this kind.
</p>
<a name="index-NOTE_005fINSN_005fDELETED_005fLABEL"></a>
</dd>
<dt><code>NOTE_INSN_DELETED_LABEL</code></dt>
<dd><p>This marks what used to be a <code>code_label</code>, but was not used for other
purposes than taking its address and was transformed to mark that no
code jumps to it.
</p>
<a name="index-NOTE_005fINSN_005fBLOCK_005fBEG"></a>
<a name="index-NOTE_005fINSN_005fBLOCK_005fEND"></a>
</dd>
<dt><code>NOTE_INSN_BLOCK_BEG</code></dt>
<dt><code>NOTE_INSN_BLOCK_END</code></dt>
<dd><p>These types of notes indicate the position of the beginning and end
of a level of scoping of variable names.  They control the output
of debugging information.
</p>
<a name="index-NOTE_005fINSN_005fEH_005fREGION_005fBEG"></a>
<a name="index-NOTE_005fINSN_005fEH_005fREGION_005fEND"></a>
</dd>
<dt><code>NOTE_INSN_EH_REGION_BEG</code></dt>
<dt><code>NOTE_INSN_EH_REGION_END</code></dt>
<dd><p>These types of notes indicate the position of the beginning and end of a
level of scoping for exception handling.  <code>NOTE_BLOCK_NUMBER</code>
identifies which <code>CODE_LABEL</code> or <code>note</code> of type
<code>NOTE_INSN_DELETED_LABEL</code> is associated with the given region.
</p>
<a name="index-NOTE_005fINSN_005fLOOP_005fBEG"></a>
<a name="index-NOTE_005fINSN_005fLOOP_005fEND"></a>
</dd>
<dt><code>NOTE_INSN_LOOP_BEG</code></dt>
<dt><code>NOTE_INSN_LOOP_END</code></dt>
<dd><p>These types of notes indicate the position of the beginning and end
of a <code>while</code> or <code>for</code> loop.  They enable the loop optimizer
to find loops quickly.
</p>
<a name="index-NOTE_005fINSN_005fLOOP_005fCONT"></a>
</dd>
<dt><code>NOTE_INSN_LOOP_CONT</code></dt>
<dd><p>Appears at the place in a loop that <code>continue</code> statements jump to.
</p>
<a name="index-NOTE_005fINSN_005fLOOP_005fVTOP"></a>
</dd>
<dt><code>NOTE_INSN_LOOP_VTOP</code></dt>
<dd><p>This note indicates the place in a loop where the exit test begins for
those loops in which the exit test has been duplicated.  This position
becomes another virtual start of the loop when considering loop
invariants.
</p>
<a name="index-NOTE_005fINSN_005fFUNCTION_005fBEG"></a>
</dd>
<dt><code>NOTE_INSN_FUNCTION_BEG</code></dt>
<dd><p>Appears at the start of the function body, after the function
prologue.
</p>
<a name="index-NOTE_005fINSN_005fVAR_005fLOCATION"></a>
<a name="index-NOTE_005fVAR_005fLOCATION"></a>
</dd>
<dt><code>NOTE_INSN_VAR_LOCATION</code></dt>
<dd><p>This note is used to generate variable location debugging information.
It indicates that the user variable in its <code>VAR_LOCATION</code> operand
is at the location given in the RTL expression, or holds a value that
can be computed by evaluating the RTL expression from that static
point in the program up to the next such note for the same user
variable.
</p>
</dd>
</dl>

<p>These codes are printed symbolically when they appear in debugging dumps.
</p>
<a name="index-debug_005finsn"></a>
<a name="index-INSN_005fVAR_005fLOCATION"></a>
</dd>
<dt><code>debug_insn</code></dt>
<dd><p>The expression code <code>debug_insn</code> is used for pseudo-instructions
that hold debugging information for variable tracking at assignments
(see <samp>-fvar-tracking-assignments</samp> option).  They are the RTL
representation of <code>GIMPLE_DEBUG</code> statements
(<a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a>), with a <code>VAR_LOCATION</code> operand that
binds a user variable tree to an RTL representation of the
<code>value</code> in the corresponding statement.  A <code>DEBUG_EXPR</code> in
it stands for the value bound to the corresponding
<code>DEBUG_EXPR_DECL</code>.
</p>
<p>Throughout optimization passes, binding information is kept in
pseudo-instruction form, so that, unlike notes, it gets the same
treatment and adjustments that regular instructions would.  It is the
variable tracking pass that turns these pseudo-instructions into var
location notes, analyzing control flow, value equivalences and changes
to registers and memory referenced in value expressions, propagating
the values of debug temporaries and determining expressions that can
be used to compute the value of each user variable at as many points
(ranges, actually) in the program as possible.
</p>
<p>Unlike <code>NOTE_INSN_VAR_LOCATION</code>, the value expression in an
<code>INSN_VAR_LOCATION</code> denotes a value at that specific point in the
program, rather than an expression that can be evaluated at any later
point before an overriding <code>VAR_LOCATION</code> is encountered.  E.g.,
if a user variable is bound to a <code>REG</code> and then a subsequent insn
modifies the <code>REG</code>, the note location would keep mapping the user
variable to the register across the insn, whereas the insn location
would keep the variable bound to the value, so that the variable
tracking pass would emit another location note for the variable at the
point in which the register is modified.
</p>
</dd>
</dl>

<a name="index-TImode_002c-in-insn"></a>
<a name="index-HImode_002c-in-insn"></a>
<a name="index-QImode_002c-in-insn"></a>
<p>The machine mode of an insn is normally <code>VOIDmode</code>, but some
phases use the mode for various purposes.
</p>
<p>The common subexpression elimination pass sets the mode of an insn to
<code>QImode</code> when it is the first insn in a block that has already
been processed.
</p>
<p>The second Haifa scheduling pass, for targets that can multiple issue,
sets the mode of an insn to <code>TImode</code> when it is believed that the
instruction begins an issue group.  That is, when the instruction
cannot issue simultaneously with the previous.  This may be relied on
by later passes, in particular machine-dependent reorg.
</p>
<p>Here is a table of the extra fields of <code>insn</code>, <code>jump_insn</code>
and <code>call_insn</code> insns:
</p>
<dl compact="compact">
<dd><a name="index-PATTERN"></a>
</dd>
<dt><code>PATTERN (<var>i</var>)</code></dt>
<dd><p>An expression for the side effect performed by this insn.  This must
be one of the following codes: <code>set</code>, <code>call</code>, <code>use</code>,
<code>clobber</code>, <code>return</code>, <code>simple_return</code>, <code>asm_input</code>,
<code>asm_output</code>, <code>addr_vec</code>, <code>addr_diff_vec</code>,
<code>trap_if</code>, <code>unspec</code>, <code>unspec_volatile</code>,
<code>parallel</code>, <code>cond_exec</code>, or <code>sequence</code>.  If it is a
<code>parallel</code>, each element of the <code>parallel</code> must be one these
codes, except that <code>parallel</code> expressions cannot be nested and
<code>addr_vec</code> and <code>addr_diff_vec</code> are not permitted inside a
<code>parallel</code> expression.
</p>
<a name="index-INSN_005fCODE"></a>
</dd>
<dt><code>INSN_CODE (<var>i</var>)</code></dt>
<dd><p>An integer that says which pattern in the machine description matches
this insn, or -1 if the matching has not yet been attempted.
</p>
<p>Such matching is never attempted and this field remains -1 on an insn
whose pattern consists of a single <code>use</code>, <code>clobber</code>,
<code>asm_input</code>, <code>addr_vec</code> or <code>addr_diff_vec</code> expression.
</p>
<a name="index-asm_005fnoperands"></a>
<p>Matching is also never attempted on insns that result from an <code>asm</code>
statement.  These contain at least one <code>asm_operands</code> expression.
The function <code>asm_noperands</code> returns a non-negative value for
such insns.
</p>
<p>In the debugging output, this field is printed as a number followed by
a symbolic representation that locates the pattern in the <samp>md</samp>
file as some small positive or negative offset from a named pattern.
</p>
<a name="index-LOG_005fLINKS"></a>
</dd>
<dt><code>LOG_LINKS (<var>i</var>)</code></dt>
<dd><p>A list (chain of <code>insn_list</code> expressions) giving information about
dependencies between instructions within a basic block.  Neither a jump
nor a label may come between the related insns.  These are only used by
the schedulers and by combine.  This is a deprecated data structure.
Def-use and use-def chains are now preferred.
</p>
<a name="index-REG_005fNOTES"></a>
</dd>
<dt><code>REG_NOTES (<var>i</var>)</code></dt>
<dd><p>A list (chain of <code>expr_list</code> and <code>insn_list</code> expressions)
giving miscellaneous information about the insn.  It is often
information pertaining to the registers used in this insn.
</p></dd>
</dl>

<p>The <code>LOG_LINKS</code> field of an insn is a chain of <code>insn_list</code>
expressions.  Each of these has two operands: the first is an insn,
and the second is another <code>insn_list</code> expression (the next one in
the chain).  The last <code>insn_list</code> in the chain has a null pointer
as second operand.  The significant thing about the chain is which
insns appear in it (as first operands of <code>insn_list</code>
expressions).  Their order is not significant.
</p>
<p>This list is originally set up by the flow analysis pass; it is a null
pointer until then.  Flow only adds links for those data dependencies
which can be used for instruction combination.  For each insn, the flow
analysis pass adds a link to insns which store into registers values
that are used for the first time in this insn.
</p>
<p>The <code>REG_NOTES</code> field of an insn is a chain similar to the
<code>LOG_LINKS</code> field but it includes <code>expr_list</code> expressions in
addition to <code>insn_list</code> expressions.  There are several kinds of
register notes, which are distinguished by the machine mode, which in a
register note is really understood as being an <code>enum reg_note</code>.
The first operand <var>op</var> of the note is data whose meaning depends on
the kind of note.
</p>
<a name="index-REG_005fNOTE_005fKIND"></a>
<a name="index-PUT_005fREG_005fNOTE_005fKIND"></a>
<p>The macro <code>REG_NOTE_KIND (<var>x</var>)</code> returns the kind of
register note.  Its counterpart, the macro <code>PUT_REG_NOTE_KIND
(<var>x</var>, <var>newkind</var>)</code> sets the register note type of <var>x</var> to be
<var>newkind</var>.
</p>
<p>Register notes are of three classes: They may say something about an
input to an insn, they may say something about an output of an insn, or
they may create a linkage between two insns.  There are also a set
of values that are only used in <code>LOG_LINKS</code>.
</p>
<p>These register notes annotate inputs to an insn:
</p>
<dl compact="compact">
<dd><a name="index-REG_005fDEAD"></a>
</dd>
<dt><code>REG_DEAD</code></dt>
<dd><p>The value in <var>op</var> dies in this insn; that is to say, altering the
value immediately after this insn would not affect the future behavior
of the program.
</p>
<p>It does not follow that the register <var>op</var> has no useful value after
this insn since <var>op</var> is not necessarily modified by this insn.
Rather, no subsequent instruction uses the contents of <var>op</var>.
</p>
<a name="index-REG_005fUNUSED"></a>
</dd>
<dt><code>REG_UNUSED</code></dt>
<dd><p>The register <var>op</var> being set by this insn will not be used in a
subsequent insn.  This differs from a <code>REG_DEAD</code> note, which
indicates that the value in an input will not be used subsequently.
These two notes are independent; both may be present for the same
register.
</p>
<a name="index-REG_005fINC"></a>
</dd>
<dt><code>REG_INC</code></dt>
<dd><p>The register <var>op</var> is incremented (or decremented; at this level
there is no distinction) by an embedded side effect inside this insn.
This means it appears in a <code>post_inc</code>, <code>pre_inc</code>,
<code>post_dec</code> or <code>pre_dec</code> expression.
</p>
<a name="index-REG_005fNONNEG"></a>
</dd>
<dt><code>REG_NONNEG</code></dt>
<dd><p>The register <var>op</var> is known to have a nonnegative value when this
insn is reached.  This is used so that decrement and branch until zero
instructions, such as the m68k dbra, can be matched.
</p>
<p>The <code>REG_NONNEG</code> note is added to insns only if the machine
description has a &lsquo;<samp>decrement_and_branch_until_zero</samp>&rsquo; pattern.
</p>
<a name="index-REG_005fLABEL_005fOPERAND"></a>
</dd>
<dt><code>REG_LABEL_OPERAND</code></dt>
<dd><p>This insn uses <var>op</var>, a <code>code_label</code> or a <code>note</code> of type
<code>NOTE_INSN_DELETED_LABEL</code>, but is not a <code>jump_insn</code>, or it
is a <code>jump_insn</code> that refers to the operand as an ordinary
operand.  The label may still eventually be a jump target, but if so
in an indirect jump in a subsequent insn.  The presence of this note
allows jump optimization to be aware that <var>op</var> is, in fact, being
used, and flow optimization to build an accurate flow graph.
</p>
<a name="index-REG_005fLABEL_005fTARGET"></a>
</dd>
<dt><code>REG_LABEL_TARGET</code></dt>
<dd><p>This insn is a <code>jump_insn</code> but not an <code>addr_vec</code> or
<code>addr_diff_vec</code>.  It uses <var>op</var>, a <code>code_label</code> as a
direct or indirect jump target.  Its purpose is similar to that of
<code>REG_LABEL_OPERAND</code>.  This note is only present if the insn has
multiple targets; the last label in the insn (in the highest numbered
insn-field) goes into the <code>JUMP_LABEL</code> field and does not have a
<code>REG_LABEL_TARGET</code> note.  See <a href="#Insns">JUMP_LABEL</a>.
</p>
<a name="index-REG_005fCROSSING_005fJUMP"></a>
</dd>
<dt><code>REG_CROSSING_JUMP</code></dt>
<dd><p>This insn is a branching instruction (either an unconditional jump or
an indirect jump) which crosses between hot and cold sections, which
could potentially be very far apart in the executable.  The presence
of this note indicates to other optimizations that this branching
instruction should not be &ldquo;collapsed&rdquo; into a simpler branching
construct.  It is used when the optimization to partition basic blocks
into hot and cold sections is turned on.
</p>
<a name="index-REG_005fSETJMP"></a>
</dd>
<dt><code>REG_SETJMP</code></dt>
<dd><p>Appears attached to each <code>CALL_INSN</code> to <code>setjmp</code> or a
related function.
</p></dd>
</dl>

<p>The following notes describe attributes of outputs of an insn:
</p>
<dl compact="compact">
<dd><a name="index-REG_005fEQUIV"></a>
<a name="index-REG_005fEQUAL"></a>
</dd>
<dt><code>REG_EQUIV</code></dt>
<dt><code>REG_EQUAL</code></dt>
<dd><p>This note is only valid on an insn that sets only one register and
indicates that that register will be equal to <var>op</var> at run time; the
scope of this equivalence differs between the two types of notes.  The
value which the insn explicitly copies into the register may look
different from <var>op</var>, but they will be equal at run time.  If the
output of the single <code>set</code> is a <code>strict_low_part</code> expression,
the note refers to the register that is contained in <code>SUBREG_REG</code>
of the <code>subreg</code> expression.
</p>
<p>For <code>REG_EQUIV</code>, the register is equivalent to <var>op</var> throughout
the entire function, and could validly be replaced in all its
occurrences by <var>op</var>.  (&ldquo;Validly&rdquo; here refers to the data flow of
the program; simple replacement may make some insns invalid.)  For
example, when a constant is loaded into a register that is never
assigned any other value, this kind of note is used.
</p>
<p>When a parameter is copied into a pseudo-register at entry to a function,
a note of this kind records that the register is equivalent to the stack
slot where the parameter was passed.  Although in this case the register
may be set by other insns, it is still valid to replace the register
by the stack slot throughout the function.
</p>
<p>A <code>REG_EQUIV</code> note is also used on an instruction which copies a
register parameter into a pseudo-register at entry to a function, if
there is a stack slot where that parameter could be stored.  Although
other insns may set the pseudo-register, it is valid for the compiler to
replace the pseudo-register by stack slot throughout the function,
provided the compiler ensures that the stack slot is properly
initialized by making the replacement in the initial copy instruction as
well.  This is used on machines for which the calling convention
allocates stack space for register parameters.  See
<code>REG_PARM_STACK_SPACE</code> in <a href="#Stack-Arguments">Stack Arguments</a>.
</p>
<p>In the case of <code>REG_EQUAL</code>, the register that is set by this insn
will be equal to <var>op</var> at run time at the end of this insn but not
necessarily elsewhere in the function.  In this case, <var>op</var>
is typically an arithmetic expression.  For example, when a sequence of
insns such as a library call is used to perform an arithmetic operation,
this kind of note is attached to the insn that produces or copies the
final value.
</p>
<p>These two notes are used in different ways by the compiler passes.
<code>REG_EQUAL</code> is used by passes prior to register allocation (such as
common subexpression elimination and loop optimization) to tell them how
to think of that value.  <code>REG_EQUIV</code> notes are used by register
allocation to indicate that there is an available substitute expression
(either a constant or a <code>mem</code> expression for the location of a
parameter on the stack) that may be used in place of a register if
insufficient registers are available.
</p>
<p>Except for stack homes for parameters, which are indicated by a
<code>REG_EQUIV</code> note and are not useful to the early optimization
passes and pseudo registers that are equivalent to a memory location
throughout their entire life, which is not detected until later in
the compilation, all equivalences are initially indicated by an attached
<code>REG_EQUAL</code> note.  In the early stages of register allocation, a
<code>REG_EQUAL</code> note is changed into a <code>REG_EQUIV</code> note if
<var>op</var> is a constant and the insn represents the only set of its
destination register.
</p>
<p>Thus, compiler passes prior to register allocation need only check for
<code>REG_EQUAL</code> notes and passes subsequent to register allocation
need only check for <code>REG_EQUIV</code> notes.
</p></dd>
</dl>

<p>These notes describe linkages between insns.  They occur in pairs: one
insn has one of a pair of notes that points to a second insn, which has
the inverse note pointing back to the first insn.
</p>
<dl compact="compact">
<dd><a name="index-REG_005fCC_005fSETTER"></a>
<a name="index-REG_005fCC_005fUSER"></a>
</dd>
<dt><code>REG_CC_SETTER</code></dt>
<dt><code>REG_CC_USER</code></dt>
<dd><p>On machines that use <code>cc0</code>, the insns which set and use <code>cc0</code>
set and use <code>cc0</code> are adjacent.  However, when branch delay slot
filling is done, this may no longer be true.  In this case a
<code>REG_CC_USER</code> note will be placed on the insn setting <code>cc0</code> to
point to the insn using <code>cc0</code> and a <code>REG_CC_SETTER</code> note will
be placed on the insn using <code>cc0</code> to point to the insn setting
<code>cc0</code>.
</p></dd>
</dl>

<p>These values are only used in the <code>LOG_LINKS</code> field, and indicate
the type of dependency that each link represents.  Links which indicate
a data dependence (a read after write dependence) do not use any code,
they simply have mode <code>VOIDmode</code>, and are printed without any
descriptive text.
</p>
<dl compact="compact">
<dd><a name="index-REG_005fDEP_005fTRUE"></a>
</dd>
<dt><code>REG_DEP_TRUE</code></dt>
<dd><p>This indicates a true dependence (a read after write dependence).
</p>
<a name="index-REG_005fDEP_005fOUTPUT"></a>
</dd>
<dt><code>REG_DEP_OUTPUT</code></dt>
<dd><p>This indicates an output dependence (a write after write dependence).
</p>
<a name="index-REG_005fDEP_005fANTI"></a>
</dd>
<dt><code>REG_DEP_ANTI</code></dt>
<dd><p>This indicates an anti dependence (a write after read dependence).
</p>
</dd>
</dl>

<p>These notes describe information gathered from gcov profile data.  They
are stored in the <code>REG_NOTES</code> field of an insn as an
<code>expr_list</code>.
</p>
<dl compact="compact">
<dd><a name="index-REG_005fBR_005fPROB"></a>
</dd>
<dt><code>REG_BR_PROB</code></dt>
<dd><p>This is used to specify the ratio of branches to non-branches of a
branch insn according to the profile data.  The value is stored as a
value between 0 and REG_BR_PROB_BASE; larger values indicate a higher
probability that the branch will be taken.
</p>
<a name="index-REG_005fBR_005fPRED"></a>
</dd>
<dt><code>REG_BR_PRED</code></dt>
<dd><p>These notes are found in JUMP insns after delayed branch scheduling
has taken place.  They indicate both the direction and the likelihood
of the JUMP.  The format is a bitmask of ATTR_FLAG_* values.
</p>
<a name="index-REG_005fFRAME_005fRELATED_005fEXPR"></a>
</dd>
<dt><code>REG_FRAME_RELATED_EXPR</code></dt>
<dd><p>This is used on an RTX_FRAME_RELATED_P insn wherein the attached expression
is used in place of the actual insn pattern.  This is done in cases where
the pattern is either complex or misleading.
</p></dd>
</dl>

<p>For convenience, the machine mode in an <code>insn_list</code> or
<code>expr_list</code> is printed using these symbolic codes in debugging dumps.
</p>
<a name="index-insn_005flist"></a>
<a name="index-expr_005flist"></a>
<p>The only difference between the expression codes <code>insn_list</code> and
<code>expr_list</code> is that the first operand of an <code>insn_list</code> is
assumed to be an insn and is printed in debugging dumps as the insn&rsquo;s
unique id; the first operand of an <code>expr_list</code> is printed in the
ordinary way as an expression.
</p>
<hr>
<a name="Calls"></a>
<div class="header">
<p>
Next: <a href="#Sharing" accesskey="n" rel="next">Sharing</a>, Previous: <a href="#Insns" accesskey="p" rel="prev">Insns</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-Representation-of-Function_002dCall-Insns"></a>
<h3 class="section">10.20 RTL Representation of Function-Call Insns</h3>
<a name="index-calling-functions-in-RTL"></a>
<a name="index-RTL-function_002dcall-insns"></a>
<a name="index-function_002dcall-insns"></a>

<p>Insns that call subroutines have the RTL expression code <code>call_insn</code>.
These insns must satisfy special rules, and their bodies must use a special
RTL expression code, <code>call</code>.
</p>
<a name="index-call-usage"></a>
<p>A <code>call</code> expression has two operands, as follows:
</p>
<div class="smallexample">
<pre class="smallexample">(call (mem:<var>fm</var> <var>addr</var>) <var>nbytes</var>)
</pre></div>

<p>Here <var>nbytes</var> is an operand that represents the number of bytes of
argument data being passed to the subroutine, <var>fm</var> is a machine mode
(which must equal as the definition of the <code>FUNCTION_MODE</code> macro in
the machine description) and <var>addr</var> represents the address of the
subroutine.
</p>
<p>For a subroutine that returns no value, the <code>call</code> expression as
shown above is the entire body of the insn, except that the insn might
also contain <code>use</code> or <code>clobber</code> expressions.
</p>
<a name="index-BLKmode_002c-and-function-return-values"></a>
<p>For a subroutine that returns a value whose mode is not <code>BLKmode</code>,
the value is returned in a hard register.  If this register&rsquo;s number is
<var>r</var>, then the body of the call insn looks like this:
</p>
<div class="smallexample">
<pre class="smallexample">(set (reg:<var>m</var> <var>r</var>)
     (call (mem:<var>fm</var> <var>addr</var>) <var>nbytes</var>))
</pre></div>

<p>This RTL expression makes it clear (to the optimizer passes) that the
appropriate register receives a useful value in this insn.
</p>
<p>When a subroutine returns a <code>BLKmode</code> value, it is handled by
passing to the subroutine the address of a place to store the value.
So the call insn itself does not &ldquo;return&rdquo; any value, and it has the
same RTL form as a call that returns nothing.
</p>
<p>On some machines, the call instruction itself clobbers some register,
for example to contain the return address.  <code>call_insn</code> insns
on these machines should have a body which is a <code>parallel</code>
that contains both the <code>call</code> expression and <code>clobber</code>
expressions that indicate which registers are destroyed.  Similarly,
if the call instruction requires some register other than the stack
pointer that is not explicitly mentioned in its RTL, a <code>use</code>
subexpression should mention that register.
</p>
<p>Functions that are called are assumed to modify all registers listed in
the configuration macro <code>CALL_USED_REGISTERS</code> (see <a href="#Register-Basics">Register Basics</a>) and, with the exception of <code>const</code> functions and library
calls, to modify all of memory.
</p>
<p>Insns containing just <code>use</code> expressions directly precede the
<code>call_insn</code> insn to indicate which registers contain inputs to the
function.  Similarly, if registers other than those in
<code>CALL_USED_REGISTERS</code> are clobbered by the called function, insns
containing a single <code>clobber</code> follow immediately after the call to
indicate which registers.
</p>
<hr>
<a name="Sharing"></a>
<div class="header">
<p>
Next: <a href="#Reading-RTL" accesskey="n" rel="next">Reading RTL</a>, Previous: <a href="#Calls" accesskey="p" rel="prev">Calls</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Structure-Sharing-Assumptions"></a>
<h3 class="section">10.21 Structure Sharing Assumptions</h3>
<a name="index-sharing-of-RTL-components"></a>
<a name="index-RTL-structure-sharing-assumptions"></a>

<p>The compiler assumes that certain kinds of RTL expressions are unique;
there do not exist two distinct objects representing the same value.
In other cases, it makes an opposite assumption: that no RTL expression
object of a certain kind appears in more than one place in the
containing structure.
</p>
<p>These assumptions refer to a single function; except for the RTL
objects that describe global variables and external functions,
and a few standard objects such as small integer constants,
no RTL objects are common to two functions.
</p>
<ul>
<li> <a name="index-reg_002c-RTL-sharing"></a>
Each pseudo-register has only a single <code>reg</code> object to represent it,
and therefore only a single machine mode.

</li><li> <a name="index-symbolic-label"></a>
<a name="index-symbol_005fref_002c-RTL-sharing"></a>
For any symbolic label, there is only one <code>symbol_ref</code> object
referring to it.

</li><li> <a name="index-const_005fint_002c-RTL-sharing"></a>
All <code>const_int</code> expressions with equal values are shared.

</li><li> <a name="index-pc_002c-RTL-sharing"></a>
There is only one <code>pc</code> expression.

</li><li> <a name="index-cc0_002c-RTL-sharing"></a>
There is only one <code>cc0</code> expression.

</li><li> <a name="index-const_005fdouble_002c-RTL-sharing"></a>
There is only one <code>const_double</code> expression with value 0 for
each floating point mode.  Likewise for values 1 and 2.

</li><li> <a name="index-const_005fvector_002c-RTL-sharing"></a>
There is only one <code>const_vector</code> expression with value 0 for
each vector mode, be it an integer or a double constant vector.

</li><li> <a name="index-label_005fref_002c-RTL-sharing"></a>
<a name="index-scratch_002c-RTL-sharing"></a>
No <code>label_ref</code> or <code>scratch</code> appears in more than one place in
the RTL structure; in other words, it is safe to do a tree-walk of all
the insns in the function and assume that each time a <code>label_ref</code>
or <code>scratch</code> is seen it is distinct from all others that are seen.

</li><li> <a name="index-mem_002c-RTL-sharing"></a>
Only one <code>mem</code> object is normally created for each static
variable or stack slot, so these objects are frequently shared in all
the places they appear.  However, separate but equal objects for these
variables are occasionally made.

</li><li> <a name="index-asm_005foperands_002c-RTL-sharing"></a>
When a single <code>asm</code> statement has multiple output operands, a
distinct <code>asm_operands</code> expression is made for each output operand.
However, these all share the vector which contains the sequence of input
operands.  This sharing is used later on to test whether two
<code>asm_operands</code> expressions come from the same statement, so all
optimizations must carefully preserve the sharing if they copy the
vector at all.

</li><li> No RTL object appears in more than one place in the RTL structure
except as described above.  Many passes of the compiler rely on this
by assuming that they can modify RTL objects in place without unwanted
side-effects on other insns.

</li><li> <a name="index-unshare_005fall_005frtl"></a>
During initial RTL generation, shared structure is freely introduced.
After all the RTL for a function has been generated, all shared
structure is copied by <code>unshare_all_rtl</code> in <samp>emit-rtl.c</samp>,
after which the above rules are guaranteed to be followed.

</li><li> <a name="index-copy_005frtx_005fif_005fshared"></a>
During the combiner pass, shared structure within an insn can exist
temporarily.  However, the shared structure is copied before the
combiner is finished with the insn.  This is done by calling
<code>copy_rtx_if_shared</code>, which is a subroutine of
<code>unshare_all_rtl</code>.
</li></ul>

<hr>
<a name="Reading-RTL"></a>
<div class="header">
<p>
Previous: <a href="#Sharing" accesskey="p" rel="prev">Sharing</a>, Up: <a href="#RTL" accesskey="u" rel="up">RTL</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Reading-RTL-1"></a>
<h3 class="section">10.22 Reading RTL</h3>

<p>To read an RTL object from a file, call <code>read_rtx</code>.  It takes one
argument, a stdio stream, and returns a single RTL object.  This routine
is defined in <samp>read-rtl.c</samp>.  It is not available in the compiler
itself, only the various programs that generate the compiler back end
from the machine description.
</p>
<p>People frequently have the idea of using RTL stored as text in a file as
an interface between a language front end and the bulk of GCC.  This
idea is not feasible.
</p>
<p>GCC was designed to use RTL internally only.  Correct RTL for a given
program is very dependent on the particular target machine.  And the RTL
does not contain all the information about the program.
</p>
<p>The proper way to interface GCC to a new language front end is with
the &ldquo;tree&rdquo; data structure, described in the files <samp>tree.h</samp> and
<samp>tree.def</samp>.  The documentation for this structure (see <a href="#GENERIC">GENERIC</a>)
is incomplete.
</p>

<hr>
<a name="GENERIC"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE" accesskey="n" rel="next">GIMPLE</a>, Previous: <a href="#RTL" accesskey="p" rel="prev">RTL</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GENERIC-1"></a>
<h2 class="chapter">11 GENERIC</h2>
<a name="index-GENERIC-1"></a>

<p>The purpose of GENERIC is simply to provide a
language-independent way of representing an entire function in
trees.  To this end, it was necessary to add a few new tree codes
to the back end, but most everything was already there.  If you
can express it with the codes in <code>gcc/tree.def</code>, it&rsquo;s
GENERIC.
</p>
<p>Early on, there was a great deal of debate about how to think
about statements in a tree IL.  In GENERIC, a statement is
defined as any expression whose value, if any, is ignored.  A
statement will always have <code>TREE_SIDE_EFFECTS</code> set (or it
will be discarded), but a non-statement expression may also have
side effects.  A <code>CALL_EXPR</code>, for instance.
</p>
<p>It would be possible for some local optimizations to work on the
GENERIC form of a function; indeed, the adapted tree inliner
works fine on GENERIC, but the current compiler performs inlining
after lowering to GIMPLE (a restricted form described in the next
section). Indeed, currently the frontends perform this lowering
before handing off to <code>tree_rest_of_compilation</code>, but this
seems inelegant.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Deficiencies" accesskey="1">Deficiencies</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Topics net yet covered in this document.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Tree-overview" accesskey="2">Tree overview</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">All about <code>tree</code>s.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Types" accesskey="3">Types</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Fundamental and aggregate types.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Declarations" accesskey="4">Declarations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Type declarations and variables.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Attributes" accesskey="5">Attributes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Declaration and type attributes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Expression-trees" accesskey="6">Expressions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Operating on data.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Statements" accesskey="7">Statements</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Control flow and related trees.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Functions" accesskey="8">Functions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Function bodies, linkage, and other aspects.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Language_002ddependent-trees" accesskey="9">Language-dependent trees</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Topics and trees specific to language front ends.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#C-and-C_002b_002b-Trees">C and C++ Trees</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Trees specific to C and C++.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Java-Trees">Java Trees</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Trees specific to Java.
</td></tr>
</table>


<hr>
<a name="Deficiencies"></a>
<div class="header">
<p>
Next: <a href="#Tree-overview" accesskey="n" rel="next">Tree overview</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Deficiencies-1"></a>
<h3 class="section">11.1 Deficiencies</h3>

<p>There are many places in which this document is incomplet and incorrekt.
It is, as of yet, only <em>preliminary</em> documentation.
</p>

<hr>
<a name="Tree-overview"></a>
<div class="header">
<p>
Next: <a href="#Types" accesskey="n" rel="next">Types</a>, Previous: <a href="#Deficiencies" accesskey="p" rel="prev">Deficiencies</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Overview-1"></a>
<h3 class="section">11.2 Overview</h3>
<a name="index-tree"></a>
<a name="index-TREE_005fCODE"></a>

<p>The central data structure used by the internal representation is the
<code>tree</code>.  These nodes, while all of the C type <code>tree</code>, are of
many varieties.  A <code>tree</code> is a pointer type, but the object to
which it points may be of a variety of types.  From this point forward,
we will refer to trees in ordinary type, rather than in <code>this
font</code>, except when talking about the actual C type <code>tree</code>.
</p>
<p>You can tell what kind of node a particular tree is by using the
<code>TREE_CODE</code> macro.  Many, many macros take trees as input and
return trees as output.  However, most macros require a certain kind of
tree node as input.  In other words, there is a type-system for trees,
but it is not reflected in the C type-system.
</p>
<p>For safety, it is useful to configure GCC with <samp>--enable-checking</samp>.
Although this results in a significant performance penalty (since all
tree types are checked at run-time), and is therefore inappropriate in a
release version, it is extremely helpful during the development process.
</p>
<p>Many macros behave as predicates.  Many, although not all, of these
predicates end in &lsquo;<samp>_P</samp>&rsquo;.  Do not rely on the result type of these
macros being of any particular type.  You may, however, rely on the fact
that the type can be compared to <code>0</code>, so that statements like
</p><div class="smallexample">
<pre class="smallexample">if (TEST_P (t) &amp;&amp; !TEST_P (y))
  x = 1;
</pre></div>
<p>and
</p><div class="smallexample">
<pre class="smallexample">int i = (TEST_P (t) != 0);
</pre></div>
<p>are legal.  Macros that return <code>int</code> values now may be changed to
return <code>tree</code> values, or other pointers in the future.  Even those
that continue to return <code>int</code> may return multiple nonzero codes
where previously they returned only zero and one.  Therefore, you should
not write code like
</p><div class="smallexample">
<pre class="smallexample">if (TEST_P (t) == 1)
</pre></div>
<p>as this code is not guaranteed to work correctly in the future.
</p>
<p>You should not take the address of values returned by the macros or
functions described here.  In particular, no guarantee is given that the
values are lvalues.
</p>
<p>In general, the names of macros are all in uppercase, while the names of
functions are entirely in lowercase.  There are rare exceptions to this
rule.  You should assume that any macro or function whose name is made
up entirely of uppercase letters may evaluate its arguments more than
once.  You may assume that a macro or function whose name is made up
entirely of lowercase letters will evaluate its arguments only once.
</p>
<p>The <code>error_mark_node</code> is a special tree.  Its tree code is
<code>ERROR_MARK</code>, but since there is only ever one node with that code,
the usual practice is to compare the tree against
<code>error_mark_node</code>.  (This test is just a test for pointer
equality.)  If an error has occurred during front-end processing the
flag <code>errorcount</code> will be set.  If the front end has encountered
code it cannot handle, it will issue a message to the user and set
<code>sorrycount</code>.  When these flags are set, any macro or function
which normally returns a tree of a particular kind may instead return
the <code>error_mark_node</code>.  Thus, if you intend to do any processing of
erroneous code, you must be prepared to deal with the
<code>error_mark_node</code>.
</p>
<p>Occasionally, a particular tree slot (like an operand to an expression,
or a particular field in a declaration) will be referred to as
&ldquo;reserved for the back end&rdquo;.  These slots are used to store RTL when
the tree is converted to RTL for use by the GCC back end.  However, if
that process is not taking place (e.g., if the front end is being hooked
up to an intelligent editor), then those slots may be used by the
back end presently in use.
</p>
<p>If you encounter situations that do not match this documentation, such
as tree nodes of types not mentioned here, or macros documented to
return entities of a particular kind that instead return entities of
some different kind, you have found a bug, either in the front end or in
the documentation.  Please report these bugs as you would any other
bug.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Macros-and-Functions" accesskey="1">Macros and Functions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros and functions that can be used with all trees.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Identifiers" accesskey="2">Identifiers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The names of things.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Containers" accesskey="3">Containers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Lists and vectors.
</td></tr>
</table>


<hr>
<a name="Macros-and-Functions"></a>
<div class="header">
<p>
Next: <a href="#Identifiers" accesskey="n" rel="next">Identifiers</a>, Up: <a href="#Tree-overview" accesskey="u" rel="up">Tree overview</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Trees"></a>
<h4 class="subsection">11.2.1 Trees</h4>
<a name="index-tree-1"></a>
<a name="index-TREE_005fCHAIN"></a>
<a name="index-TREE_005fTYPE"></a>

<p>All GENERIC trees have two fields in common.  First, <code>TREE_CHAIN</code>
is a pointer that can be used as a singly-linked list to other trees.
The other is <code>TREE_TYPE</code>.  Many trees store the type of an
expression or declaration in this field.
</p>
<p>These are some other functions for handling trees:
</p>
<dl compact="compact">
<dt><code>tree_size</code>
<a name="index-tree_005fsize"></a>
</dt>
<dd><p>Return the number of bytes a tree takes.
</p>
</dd>
<dt><code>build0</code>
<a name="index-build0"></a>
</dt>
<dt><code>build1</code>
<a name="index-build1"></a>
</dt>
<dt><code>build2</code>
<a name="index-build2"></a>
</dt>
<dt><code>build3</code>
<a name="index-build3"></a>
</dt>
<dt><code>build4</code>
<a name="index-build4"></a>
</dt>
<dt><code>build5</code>
<a name="index-build5"></a>
</dt>
<dt><code>build6</code>
<a name="index-build6"></a>
</dt>
<dd>
<p>These functions build a tree and supply values to put in each
parameter.  The basic signature is &lsquo;<samp>code,&nbsp;type,&nbsp;[operands]<!-- /@w --></samp>&rsquo;.
<code>code</code> is the <code>TREE_CODE</code>, and <code>type</code> is a tree
representing the <code>TREE_TYPE</code>.  These are followed by the
operands, each of which is also a tree.
</p>
</dd>
</dl>



<hr>
<a name="Identifiers"></a>
<div class="header">
<p>
Next: <a href="#Containers" accesskey="n" rel="next">Containers</a>, Previous: <a href="#Macros-and-Functions" accesskey="p" rel="prev">Macros and Functions</a>, Up: <a href="#Tree-overview" accesskey="u" rel="up">Tree overview</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Identifiers-1"></a>
<h4 class="subsection">11.2.2 Identifiers</h4>
<a name="index-identifier"></a>
<a name="index-name"></a>
<a name="index-IDENTIFIER_005fNODE"></a>

<p>An <code>IDENTIFIER_NODE</code> represents a slightly more general concept
that the standard C or C++ concept of identifier.  In particular, an
<code>IDENTIFIER_NODE</code> may contain a &lsquo;<samp>$</samp>&rsquo;, or other extraordinary
characters.
</p>
<p>There are never two distinct <code>IDENTIFIER_NODE</code>s representing the
same identifier.  Therefore, you may use pointer equality to compare
<code>IDENTIFIER_NODE</code>s, rather than using a routine like
<code>strcmp</code>.  Use <code>get_identifier</code> to obtain the unique
<code>IDENTIFIER_NODE</code> for a supplied string.
</p>
<p>You can use the following macros to access identifiers:
</p><dl compact="compact">
<dt><code>IDENTIFIER_POINTER</code>
<a name="index-IDENTIFIER_005fPOINTER"></a>
</dt>
<dd><p>The string represented by the identifier, represented as a
<code>char*</code>.  This string is always <code>NUL</code>-terminated, and contains
no embedded <code>NUL</code> characters.
</p>
</dd>
<dt><code>IDENTIFIER_LENGTH</code>
<a name="index-IDENTIFIER_005fLENGTH"></a>
</dt>
<dd><p>The length of the string returned by <code>IDENTIFIER_POINTER</code>, not
including the trailing <code>NUL</code>.  This value of
<code>IDENTIFIER_LENGTH (x)</code> is always the same as <code>strlen
(IDENTIFIER_POINTER (x))</code>.
</p>
</dd>
<dt><code>IDENTIFIER_OPNAME_P</code>
<a name="index-IDENTIFIER_005fOPNAME_005fP"></a>
</dt>
<dd><p>This predicate holds if the identifier represents the name of an
overloaded operator.  In this case, you should not depend on the
contents of either the <code>IDENTIFIER_POINTER</code> or the
<code>IDENTIFIER_LENGTH</code>.
</p>
</dd>
<dt><code>IDENTIFIER_TYPENAME_P</code>
<a name="index-IDENTIFIER_005fTYPENAME_005fP"></a>
</dt>
<dd><p>This predicate holds if the identifier represents the name of a
user-defined conversion operator.  In this case, the <code>TREE_TYPE</code> of
the <code>IDENTIFIER_NODE</code> holds the type to which the conversion
operator converts.
</p>
</dd>
</dl>


<hr>
<a name="Containers"></a>
<div class="header">
<p>
Previous: <a href="#Identifiers" accesskey="p" rel="prev">Identifiers</a>, Up: <a href="#Tree-overview" accesskey="u" rel="up">Tree overview</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Containers-1"></a>
<h4 class="subsection">11.2.3 Containers</h4>
<a name="index-container"></a>
<a name="index-list"></a>
<a name="index-vector"></a>
<a name="index-TREE_005fLIST"></a>
<a name="index-TREE_005fVEC"></a>
<a name="index-TREE_005fPURPOSE"></a>
<a name="index-TREE_005fVALUE"></a>
<a name="index-TREE_005fVEC_005fLENGTH"></a>
<a name="index-TREE_005fVEC_005fELT"></a>

<p>Two common container data structures can be represented directly with
tree nodes.  A <code>TREE_LIST</code> is a singly linked list containing two
trees per node.  These are the <code>TREE_PURPOSE</code> and <code>TREE_VALUE</code>
of each node.  (Often, the <code>TREE_PURPOSE</code> contains some kind of
tag, or additional information, while the <code>TREE_VALUE</code> contains the
majority of the payload.  In other cases, the <code>TREE_PURPOSE</code> is
simply <code>NULL_TREE</code>, while in still others both the
<code>TREE_PURPOSE</code> and <code>TREE_VALUE</code> are of equal stature.)  Given
one <code>TREE_LIST</code> node, the next node is found by following the
<code>TREE_CHAIN</code>.  If the <code>TREE_CHAIN</code> is <code>NULL_TREE</code>, then
you have reached the end of the list.
</p>
<p>A <code>TREE_VEC</code> is a simple vector.  The <code>TREE_VEC_LENGTH</code> is an
integer (not a tree) giving the number of nodes in the vector.  The
nodes themselves are accessed using the <code>TREE_VEC_ELT</code> macro, which
takes two arguments.  The first is the <code>TREE_VEC</code> in question; the
second is an integer indicating which element in the vector is desired.
The elements are indexed from zero.
</p>

<hr>
<a name="Types"></a>
<div class="header">
<p>
Next: <a href="#Declarations" accesskey="n" rel="next">Declarations</a>, Previous: <a href="#Tree-overview" accesskey="p" rel="prev">Tree overview</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Types-1"></a>
<h3 class="section">11.3 Types</h3>
<a name="index-type"></a>
<a name="index-pointer"></a>
<a name="index-reference"></a>
<a name="index-fundamental-type"></a>
<a name="index-array"></a>
<a name="index-VOID_005fTYPE"></a>
<a name="index-INTEGER_005fTYPE"></a>
<a name="index-TYPE_005fMIN_005fVALUE"></a>
<a name="index-TYPE_005fMAX_005fVALUE"></a>
<a name="index-REAL_005fTYPE"></a>
<a name="index-FIXED_005fPOINT_005fTYPE"></a>
<a name="index-COMPLEX_005fTYPE"></a>
<a name="index-ENUMERAL_005fTYPE"></a>
<a name="index-BOOLEAN_005fTYPE"></a>
<a name="index-POINTER_005fTYPE"></a>
<a name="index-REFERENCE_005fTYPE"></a>
<a name="index-FUNCTION_005fTYPE"></a>
<a name="index-METHOD_005fTYPE"></a>
<a name="index-ARRAY_005fTYPE"></a>
<a name="index-RECORD_005fTYPE"></a>
<a name="index-UNION_005fTYPE"></a>
<a name="index-UNKNOWN_005fTYPE"></a>
<a name="index-OFFSET_005fTYPE"></a>
<a name="index-TYPE_005fUNQUALIFIED"></a>
<a name="index-TYPE_005fQUAL_005fCONST"></a>
<a name="index-TYPE_005fQUAL_005fVOLATILE"></a>
<a name="index-TYPE_005fQUAL_005fRESTRICT"></a>
<a name="index-TYPE_005fMAIN_005fVARIANT"></a>
<a name="index-qualified-type"></a>
<a name="index-TYPE_005fSIZE"></a>
<a name="index-TYPE_005fALIGN"></a>
<a name="index-TYPE_005fPRECISION"></a>
<a name="index-TYPE_005fARG_005fTYPES"></a>
<a name="index-TYPE_005fMETHOD_005fBASETYPE"></a>
<a name="index-TYPE_005fOFFSET_005fBASETYPE"></a>
<a name="index-TREE_005fTYPE-1"></a>
<a name="index-TYPE_005fCONTEXT"></a>
<a name="index-TYPE_005fNAME"></a>
<a name="index-TYPENAME_005fTYPE_005fFULLNAME"></a>
<a name="index-TYPE_005fFIELDS"></a>
<a name="index-TYPE_005fCANONICAL"></a>
<a name="index-TYPE_005fSTRUCTURAL_005fEQUALITY_005fP"></a>
<a name="index-SET_005fTYPE_005fSTRUCTURAL_005fEQUALITY"></a>

<p>All types have corresponding tree nodes.  However, you should not assume
that there is exactly one tree node corresponding to each type.  There
are often multiple nodes corresponding to the same type.
</p>
<p>For the most part, different kinds of types have different tree codes.
(For example, pointer types use a <code>POINTER_TYPE</code> code while arrays
use an <code>ARRAY_TYPE</code> code.)  However, pointers to member functions
use the <code>RECORD_TYPE</code> code.  Therefore, when writing a
<code>switch</code> statement that depends on the code associated with a
particular type, you should take care to handle pointers to member
functions under the <code>RECORD_TYPE</code> case label.
</p>
<p>The following functions and macros deal with cv-qualification of types:
</p><dl compact="compact">
<dt><code>TYPE_MAIN_VARIANT</code>
<a name="index-TYPE_005fMAIN_005fVARIANT-1"></a>
</dt>
<dd><p>This macro returns the unqualified version of a type.  It may be applied
to an unqualified type, but it is not always the identity function in
that case.
</p></dd>
</dl>

<p>A few other macros and functions are usable with all types:
</p><dl compact="compact">
<dt><code>TYPE_SIZE</code>
<a name="index-TYPE_005fSIZE-1"></a>
</dt>
<dd><p>The number of bits required to represent the type, represented as an
<code>INTEGER_CST</code>.  For an incomplete type, <code>TYPE_SIZE</code> will be
<code>NULL_TREE</code>.
</p>
</dd>
<dt><code>TYPE_ALIGN</code>
<a name="index-TYPE_005fALIGN-1"></a>
</dt>
<dd><p>The alignment of the type, in bits, represented as an <code>int</code>.
</p>
</dd>
<dt><code>TYPE_NAME</code>
<a name="index-TYPE_005fNAME-1"></a>
</dt>
<dd><p>This macro returns a declaration (in the form of a <code>TYPE_DECL</code>) for
the type.  (Note this macro does <em>not</em> return an
<code>IDENTIFIER_NODE</code>, as you might expect, given its name!)  You can
look at the <code>DECL_NAME</code> of the <code>TYPE_DECL</code> to obtain the
actual name of the type.  The <code>TYPE_NAME</code> will be <code>NULL_TREE</code>
for a type that is not a built-in type, the result of a typedef, or a
named class type.
</p>
</dd>
<dt><code>TYPE_CANONICAL</code>
<a name="index-TYPE_005fCANONICAL-1"></a>
</dt>
<dd><p>This macro returns the &ldquo;canonical&rdquo; type for the given type
node. Canonical types are used to improve performance in the C++ and
Objective-C++ front ends by allowing efficient comparison between two
type nodes in <code>same_type_p</code>: if the <code>TYPE_CANONICAL</code> values
of the types are equal, the types are equivalent; otherwise, the types
are not equivalent. The notion of equivalence for canonical types is
the same as the notion of type equivalence in the language itself. For
instance,
</p>
<p>When <code>TYPE_CANONICAL</code> is <code>NULL_TREE</code>, there is no canonical
type for the given type node. In this case, comparison between this
type and any other type requires the compiler to perform a deep,
&ldquo;structural&rdquo; comparison to see if the two type nodes have the same
form and properties.
</p>
<p>The canonical type for a node is always the most fundamental type in
the equivalence class of types. For instance, <code>int</code> is its own
canonical type. A typedef <code>I</code> of <code>int</code> will have <code>int</code>
as its canonical type. Similarly, <code>I*</code>&nbsp;and a typedef <code>IP</code>&nbsp;(defined to <code>I*</code>) will has <code>int*</code> as their canonical
type. When building a new type node, be sure to set
<code>TYPE_CANONICAL</code> to the appropriate canonical type. If the new
type is a compound type (built from other types), and any of those
other types require structural equality, use
<code>SET_TYPE_STRUCTURAL_EQUALITY</code> to ensure that the new type also
requires structural equality. Finally, if for some reason you cannot
guarantee that <code>TYPE_CANONICAL</code> will point to the canonical type,
use <code>SET_TYPE_STRUCTURAL_EQUALITY</code> to make sure that the new
type&ndash;and any type constructed based on it&ndash;requires structural
equality. If you suspect that the canonical type system is
miscomparing types, pass <code>--param verify-canonical-types=1</code> to
the compiler or configure with <code>--enable-checking</code> to force the
compiler to verify its canonical-type comparisons against the
structural comparisons; the compiler will then print any warnings if
the canonical types miscompare.
</p>
</dd>
<dt><code>TYPE_STRUCTURAL_EQUALITY_P</code>
<a name="index-TYPE_005fSTRUCTURAL_005fEQUALITY_005fP-1"></a>
</dt>
<dd><p>This predicate holds when the node requires structural equality
checks, e.g., when <code>TYPE_CANONICAL</code> is <code>NULL_TREE</code>.
</p>
</dd>
<dt><code>SET_TYPE_STRUCTURAL_EQUALITY</code>
<a name="index-SET_005fTYPE_005fSTRUCTURAL_005fEQUALITY-1"></a>
</dt>
<dd><p>This macro states that the type node it is given requires structural
equality checks, e.g., it sets <code>TYPE_CANONICAL</code> to
<code>NULL_TREE</code>.
</p>
</dd>
<dt><code>same_type_p</code>
<a name="index-same_005ftype_005fp"></a>
</dt>
<dd><p>This predicate takes two types as input, and holds if they are the same
type.  For example, if one type is a <code>typedef</code> for the other, or
both are <code>typedef</code>s for the same type.  This predicate also holds if
the two trees given as input are simply copies of one another; i.e.,
there is no difference between them at the source level, but, for
whatever reason, a duplicate has been made in the representation.  You
should never use <code>==</code> (pointer equality) to compare types; always
use <code>same_type_p</code> instead.
</p></dd>
</dl>

<p>Detailed below are the various kinds of types, and the macros that can
be used to access them.  Although other kinds of types are used
elsewhere in G++, the types described here are the only ones that you
will encounter while examining the intermediate representation.
</p>
<dl compact="compact">
<dt><code>VOID_TYPE</code></dt>
<dd><p>Used to represent the <code>void</code> type.
</p>
</dd>
<dt><code>INTEGER_TYPE</code></dt>
<dd><p>Used to represent the various integral types, including <code>char</code>,
<code>short</code>, <code>int</code>, <code>long</code>, and <code>long long</code>.  This code
is not used for enumeration types, nor for the <code>bool</code> type.
The <code>TYPE_PRECISION</code> is the number of bits used in
the representation, represented as an <code>unsigned int</code>.  (Note that
in the general case this is not the same value as <code>TYPE_SIZE</code>;
suppose that there were a 24-bit integer type, but that alignment
requirements for the ABI required 32-bit alignment.  Then,
<code>TYPE_SIZE</code> would be an <code>INTEGER_CST</code> for 32, while
<code>TYPE_PRECISION</code> would be 24.)  The integer type is unsigned if
<code>TYPE_UNSIGNED</code> holds; otherwise, it is signed.
</p>
<p>The <code>TYPE_MIN_VALUE</code> is an <code>INTEGER_CST</code> for the smallest
integer that may be represented by this type.  Similarly, the
<code>TYPE_MAX_VALUE</code> is an <code>INTEGER_CST</code> for the largest integer
that may be represented by this type.
</p>
</dd>
<dt><code>REAL_TYPE</code></dt>
<dd><p>Used to represent the <code>float</code>, <code>double</code>, and <code>long
double</code> types.  The number of bits in the floating-point representation
is given by <code>TYPE_PRECISION</code>, as in the <code>INTEGER_TYPE</code> case.
</p>
</dd>
<dt><code>FIXED_POINT_TYPE</code></dt>
<dd><p>Used to represent the <code>short _Fract</code>, <code>_Fract</code>, <code>long
_Fract</code>, <code>long long _Fract</code>, <code>short _Accum</code>, <code>_Accum</code>,
<code>long _Accum</code>, and <code>long long _Accum</code> types.  The number of bits
in the fixed-point representation is given by <code>TYPE_PRECISION</code>,
as in the <code>INTEGER_TYPE</code> case.  There may be padding bits, fractional
bits and integral bits.  The number of fractional bits is given by
<code>TYPE_FBIT</code>, and the number of integral bits is given by <code>TYPE_IBIT</code>.
The fixed-point type is unsigned if <code>TYPE_UNSIGNED</code> holds; otherwise,
it is signed.
The fixed-point type is saturating if <code>TYPE_SATURATING</code> holds; otherwise,
it is not saturating.
</p>
</dd>
<dt><code>COMPLEX_TYPE</code></dt>
<dd><p>Used to represent GCC built-in <code>__complex__</code> data types.  The
<code>TREE_TYPE</code> is the type of the real and imaginary parts.
</p>
</dd>
<dt><code>ENUMERAL_TYPE</code></dt>
<dd><p>Used to represent an enumeration type.  The <code>TYPE_PRECISION</code> gives
(as an <code>int</code>), the number of bits used to represent the type.  If
there are no negative enumeration constants, <code>TYPE_UNSIGNED</code> will
hold.  The minimum and maximum enumeration constants may be obtained
with <code>TYPE_MIN_VALUE</code> and <code>TYPE_MAX_VALUE</code>, respectively; each
of these macros returns an <code>INTEGER_CST</code>.
</p>
<p>The actual enumeration constants themselves may be obtained by looking
at the <code>TYPE_VALUES</code>.  This macro will return a <code>TREE_LIST</code>,
containing the constants.  The <code>TREE_PURPOSE</code> of each node will be
an <code>IDENTIFIER_NODE</code> giving the name of the constant; the
<code>TREE_VALUE</code> will be an <code>INTEGER_CST</code> giving the value
assigned to that constant.  These constants will appear in the order in
which they were declared.  The <code>TREE_TYPE</code> of each of these
constants will be the type of enumeration type itself.
</p>
</dd>
<dt><code>BOOLEAN_TYPE</code></dt>
<dd><p>Used to represent the <code>bool</code> type.
</p>
</dd>
<dt><code>POINTER_TYPE</code></dt>
<dd><p>Used to represent pointer types, and pointer to data member types.  The
<code>TREE_TYPE</code> gives the type to which this type points.
</p>
</dd>
<dt><code>REFERENCE_TYPE</code></dt>
<dd><p>Used to represent reference types.  The <code>TREE_TYPE</code> gives the type
to which this type refers.
</p>
</dd>
<dt><code>FUNCTION_TYPE</code></dt>
<dd><p>Used to represent the type of non-member functions and of static member
functions.  The <code>TREE_TYPE</code> gives the return type of the function.
The <code>TYPE_ARG_TYPES</code> are a <code>TREE_LIST</code> of the argument types.
The <code>TREE_VALUE</code> of each node in this list is the type of the
corresponding argument; the <code>TREE_PURPOSE</code> is an expression for the
default argument value, if any.  If the last node in the list is
<code>void_list_node</code> (a <code>TREE_LIST</code> node whose <code>TREE_VALUE</code>
is the <code>void_type_node</code>), then functions of this type do not take
variable arguments.  Otherwise, they do take a variable number of
arguments.
</p>
<p>Note that in C (but not in C++) a function declared like <code>void f()</code>
is an unprototyped function taking a variable number of arguments; the
<code>TYPE_ARG_TYPES</code> of such a function will be <code>NULL</code>.
</p>
</dd>
<dt><code>METHOD_TYPE</code></dt>
<dd><p>Used to represent the type of a non-static member function.  Like a
<code>FUNCTION_TYPE</code>, the return type is given by the <code>TREE_TYPE</code>.
The type of <code>*this</code>, i.e., the class of which functions of this
type are a member, is given by the <code>TYPE_METHOD_BASETYPE</code>.  The
<code>TYPE_ARG_TYPES</code> is the parameter list, as for a
<code>FUNCTION_TYPE</code>, and includes the <code>this</code> argument.
</p>
</dd>
<dt><code>ARRAY_TYPE</code></dt>
<dd><p>Used to represent array types.  The <code>TREE_TYPE</code> gives the type of
the elements in the array.  If the array-bound is present in the type,
the <code>TYPE_DOMAIN</code> is an <code>INTEGER_TYPE</code> whose
<code>TYPE_MIN_VALUE</code> and <code>TYPE_MAX_VALUE</code> will be the lower and
upper bounds of the array, respectively.  The <code>TYPE_MIN_VALUE</code> will
always be an <code>INTEGER_CST</code> for zero, while the
<code>TYPE_MAX_VALUE</code> will be one less than the number of elements in
the array, i.e., the highest value which may be used to index an element
in the array.
</p>
</dd>
<dt><code>RECORD_TYPE</code></dt>
<dd><p>Used to represent <code>struct</code> and <code>class</code> types, as well as
pointers to member functions and similar constructs in other languages.
<code>TYPE_FIELDS</code> contains the items contained in this type, each of
which can be a <code>FIELD_DECL</code>, <code>VAR_DECL</code>, <code>CONST_DECL</code>, or
<code>TYPE_DECL</code>.  You may not make any assumptions about the ordering
of the fields in the type or whether one or more of them overlap.
</p>
</dd>
<dt><code>UNION_TYPE</code></dt>
<dd><p>Used to represent <code>union</code> types.  Similar to <code>RECORD_TYPE</code>
except that all <code>FIELD_DECL</code> nodes in <code>TYPE_FIELD</code> start at
bit position zero.
</p>
</dd>
<dt><code>QUAL_UNION_TYPE</code></dt>
<dd><p>Used to represent part of a variant record in Ada.  Similar to
<code>UNION_TYPE</code> except that each <code>FIELD_DECL</code> has a
<code>DECL_QUALIFIER</code> field, which contains a boolean expression that
indicates whether the field is present in the object.  The type will only
have one field, so each field&rsquo;s <code>DECL_QUALIFIER</code> is only evaluated
if none of the expressions in the previous fields in <code>TYPE_FIELDS</code>
are nonzero.  Normally these expressions will reference a field in the
outer object using a <code>PLACEHOLDER_EXPR</code>.
</p>
</dd>
<dt><code>LANG_TYPE</code></dt>
<dd><p>This node is used to represent a language-specific type.  The front
end must handle it.
</p>
</dd>
<dt><code>OFFSET_TYPE</code></dt>
<dd><p>This node is used to represent a pointer-to-data member.  For a data
member <code>X::m</code> the <code>TYPE_OFFSET_BASETYPE</code> is <code>X</code> and the
<code>TREE_TYPE</code> is the type of <code>m</code>.
</p>
</dd>
</dl>

<p>There are variables whose values represent some of the basic types.
These include:
</p><dl compact="compact">
<dt><code>void_type_node</code></dt>
<dd><p>A node for <code>void</code>.
</p>
</dd>
<dt><code>integer_type_node</code></dt>
<dd><p>A node for <code>int</code>.
</p>
</dd>
<dt><code>unsigned_type_node.</code></dt>
<dd><p>A node for <code>unsigned int</code>.
</p>
</dd>
<dt><code>char_type_node.</code></dt>
<dd><p>A node for <code>char</code>.
</p></dd>
</dl>
<p>It may sometimes be useful to compare one of these variables with a type
in hand, using <code>same_type_p</code>.
</p>

<hr>
<a name="Declarations"></a>
<div class="header">
<p>
Next: <a href="#Attributes" accesskey="n" rel="next">Attributes</a>, Previous: <a href="#Types" accesskey="p" rel="prev">Types</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Declarations-2"></a>
<h3 class="section">11.4 Declarations</h3>
<a name="index-declaration"></a>
<a name="index-variable"></a>
<a name="index-type-declaration"></a>
<a name="index-LABEL_005fDECL"></a>
<a name="index-CONST_005fDECL"></a>
<a name="index-TYPE_005fDECL"></a>
<a name="index-VAR_005fDECL"></a>
<a name="index-PARM_005fDECL"></a>
<a name="index-DEBUG_005fEXPR_005fDECL"></a>
<a name="index-FIELD_005fDECL"></a>
<a name="index-NAMESPACE_005fDECL"></a>
<a name="index-RESULT_005fDECL"></a>
<a name="index-TEMPLATE_005fDECL"></a>
<a name="index-THUNK_005fDECL"></a>
<a name="index-THUNK_005fDELTA"></a>
<a name="index-DECL_005fINITIAL"></a>
<a name="index-DECL_005fSIZE"></a>
<a name="index-DECL_005fALIGN"></a>
<a name="index-DECL_005fEXTERNAL"></a>

<p>This section covers the various kinds of declarations that appear in the
internal representation, except for declarations of functions
(represented by <code>FUNCTION_DECL</code> nodes), which are described in
<a href="#Functions">Functions</a>.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Working-with-declarations" accesskey="1">Working with declarations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros and functions that work on
declarations.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Internal-structure" accesskey="2">Internal structure</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How declaration nodes are represented.
</td></tr>
</table>

<hr>
<a name="Working-with-declarations"></a>
<div class="header">
<p>
Next: <a href="#Internal-structure" accesskey="n" rel="next">Internal structure</a>, Up: <a href="#Declarations" accesskey="u" rel="up">Declarations</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Working-with-declarations-1"></a>
<h4 class="subsection">11.4.1 Working with declarations</h4>

<p>Some macros can be used with any kind of declaration.  These include:
</p><dl compact="compact">
<dt><code>DECL_NAME</code>
<a name="index-DECL_005fNAME"></a>
</dt>
<dd><p>This macro returns an <code>IDENTIFIER_NODE</code> giving the name of the
entity.
</p>
</dd>
<dt><code>TREE_TYPE</code>
<a name="index-TREE_005fTYPE-2"></a>
</dt>
<dd><p>This macro returns the type of the entity declared.
</p>
</dd>
<dt><code>EXPR_FILENAME</code>
<a name="index-EXPR_005fFILENAME"></a>
</dt>
<dd><p>This macro returns the name of the file in which the entity was
declared, as a <code>char*</code>.  For an entity declared implicitly by the
compiler (like <code>__builtin_memcpy</code>), this will be the string
<code>&quot;&lt;internal&gt;&quot;</code>.
</p>
</dd>
<dt><code>EXPR_LINENO</code>
<a name="index-EXPR_005fLINENO"></a>
</dt>
<dd><p>This macro returns the line number at which the entity was declared, as
an <code>int</code>.
</p>
</dd>
<dt><code>DECL_ARTIFICIAL</code>
<a name="index-DECL_005fARTIFICIAL"></a>
</dt>
<dd><p>This predicate holds if the declaration was implicitly generated by the
compiler.  For example, this predicate will hold of an implicitly
declared member function, or of the <code>TYPE_DECL</code> implicitly
generated for a class type.  Recall that in C++ code like:
</p><div class="smallexample">
<pre class="smallexample">struct S {};
</pre></div>
<p>is roughly equivalent to C code like:
</p><div class="smallexample">
<pre class="smallexample">struct S {};
typedef struct S S;
</pre></div>
<p>The implicitly generated <code>typedef</code> declaration is represented by a
<code>TYPE_DECL</code> for which <code>DECL_ARTIFICIAL</code> holds.
</p>
</dd>
</dl>

<p>The various kinds of declarations include:
</p><dl compact="compact">
<dt><code>LABEL_DECL</code></dt>
<dd><p>These nodes are used to represent labels in function bodies.  For more
information, see <a href="#Functions">Functions</a>.  These nodes only appear in block
scopes.
</p>
</dd>
<dt><code>CONST_DECL</code></dt>
<dd><p>These nodes are used to represent enumeration constants.  The value of
the constant is given by <code>DECL_INITIAL</code> which will be an
<code>INTEGER_CST</code> with the same type as the <code>TREE_TYPE</code> of the
<code>CONST_DECL</code>, i.e., an <code>ENUMERAL_TYPE</code>.
</p>
</dd>
<dt><code>RESULT_DECL</code></dt>
<dd><p>These nodes represent the value returned by a function.  When a value is
assigned to a <code>RESULT_DECL</code>, that indicates that the value should
be returned, via bitwise copy, by the function.  You can use
<code>DECL_SIZE</code> and <code>DECL_ALIGN</code> on a <code>RESULT_DECL</code>, just as
with a <code>VAR_DECL</code>.
</p>
</dd>
<dt><code>TYPE_DECL</code></dt>
<dd><p>These nodes represent <code>typedef</code> declarations.  The <code>TREE_TYPE</code>
is the type declared to have the name given by <code>DECL_NAME</code>.  In
some cases, there is no associated name.
</p>
</dd>
<dt><code>VAR_DECL</code></dt>
<dd><p>These nodes represent variables with namespace or block scope, as well
as static data members.  The <code>DECL_SIZE</code> and <code>DECL_ALIGN</code> are
analogous to <code>TYPE_SIZE</code> and <code>TYPE_ALIGN</code>.  For a declaration,
you should always use the <code>DECL_SIZE</code> and <code>DECL_ALIGN</code> rather
than the <code>TYPE_SIZE</code> and <code>TYPE_ALIGN</code> given by the
<code>TREE_TYPE</code>, since special attributes may have been applied to the
variable to give it a particular size and alignment.  You may use the
predicates <code>DECL_THIS_STATIC</code> or <code>DECL_THIS_EXTERN</code> to test
whether the storage class specifiers <code>static</code> or <code>extern</code> were
used to declare a variable.
</p>
<p>If this variable is initialized (but does not require a constructor),
the <code>DECL_INITIAL</code> will be an expression for the initializer.  The
initializer should be evaluated, and a bitwise copy into the variable
performed.  If the <code>DECL_INITIAL</code> is the <code>error_mark_node</code>,
there is an initializer, but it is given by an explicit statement later
in the code; no bitwise copy is required.
</p>
<p>GCC provides an extension that allows either automatic variables, or
global variables, to be placed in particular registers.  This extension
is being used for a particular <code>VAR_DECL</code> if <code>DECL_REGISTER</code>
holds for the <code>VAR_DECL</code>, and if <code>DECL_ASSEMBLER_NAME</code> is not
equal to <code>DECL_NAME</code>.  In that case, <code>DECL_ASSEMBLER_NAME</code> is
the name of the register into which the variable will be placed.
</p>
</dd>
<dt><code>PARM_DECL</code></dt>
<dd><p>Used to represent a parameter to a function.  Treat these nodes
similarly to <code>VAR_DECL</code> nodes.  These nodes only appear in the
<code>DECL_ARGUMENTS</code> for a <code>FUNCTION_DECL</code>.
</p>
<p>The <code>DECL_ARG_TYPE</code> for a <code>PARM_DECL</code> is the type that will
actually be used when a value is passed to this function.  It may be a
wider type than the <code>TREE_TYPE</code> of the parameter; for example, the
ordinary type might be <code>short</code> while the <code>DECL_ARG_TYPE</code> is
<code>int</code>.
</p>
</dd>
<dt><code>DEBUG_EXPR_DECL</code></dt>
<dd><p>Used to represent an anonymous debug-information temporary created to
hold an expression as it is optimized away, so that its value can be
referenced in debug bind statements.
</p>
</dd>
<dt><code>FIELD_DECL</code></dt>
<dd><p>These nodes represent non-static data members.  The <code>DECL_SIZE</code> and
<code>DECL_ALIGN</code> behave as for <code>VAR_DECL</code> nodes.
The position of the field within the parent record is specified by a
combination of three attributes.  <code>DECL_FIELD_OFFSET</code> is the position,
counting in bytes, of the <code>DECL_OFFSET_ALIGN</code>-bit sized word containing
the bit of the field closest to the beginning of the structure.
<code>DECL_FIELD_BIT_OFFSET</code> is the bit offset of the first bit of the field
within this word; this may be nonzero even for fields that are not bit-fields,
since <code>DECL_OFFSET_ALIGN</code> may be greater than the natural alignment
of the field&rsquo;s type.
</p>
<p>If <code>DECL_C_BIT_FIELD</code> holds, this field is a bit-field.  In a bit-field,
<code>DECL_BIT_FIELD_TYPE</code> also contains the type that was originally
specified for it, while DECL_TYPE may be a modified type with lesser precision,
according to the size of the bit field.
</p>
</dd>
<dt><code>NAMESPACE_DECL</code></dt>
<dd><p>Namespaces provide a name hierarchy for other declarations.  They
appear in the <code>DECL_CONTEXT</code> of other <code>_DECL</code> nodes.
</p>
</dd>
</dl>

<hr>
<a name="Internal-structure"></a>
<div class="header">
<p>
Previous: <a href="#Working-with-declarations" accesskey="p" rel="prev">Working with declarations</a>, Up: <a href="#Declarations" accesskey="u" rel="up">Declarations</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Internal-structure-1"></a>
<h4 class="subsection">11.4.2 Internal structure</h4>

<p><code>DECL</code> nodes are represented internally as a hierarchy of
structures.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Current-structure-hierarchy" accesskey="1">Current structure hierarchy</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The current DECL node structure
hierarchy.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Adding-new-DECL-node-types" accesskey="2">Adding new DECL node types</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to add a new DECL node to a
frontend.
</td></tr>
</table>

<hr>
<a name="Current-structure-hierarchy"></a>
<div class="header">
<p>
Next: <a href="#Adding-new-DECL-node-types" accesskey="n" rel="next">Adding new DECL node types</a>, Up: <a href="#Internal-structure" accesskey="u" rel="up">Internal structure</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Current-structure-hierarchy-1"></a>
<h4 class="subsubsection">11.4.2.1 Current structure hierarchy</h4>

<dl compact="compact">
<dt><code>struct tree_decl_minimal</code></dt>
<dd><p>This is the minimal structure to inherit from in order for common
<code>DECL</code> macros to work.  The fields it contains are a unique ID,
source location, context, and name.
</p>
</dd>
<dt><code>struct tree_decl_common</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_minimal</code>.  It
contains fields that most <code>DECL</code> nodes need, such as a field to
store alignment, machine mode, size, and attributes.
</p>
</dd>
<dt><code>struct tree_field_decl</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_common</code>.  It is
used to represent <code>FIELD_DECL</code>.
</p>
</dd>
<dt><code>struct tree_label_decl</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_common</code>.  It is
used to represent <code>LABEL_DECL</code>.
</p>
</dd>
<dt><code>struct tree_translation_unit_decl</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_common</code>.  It is
used to represent <code>TRANSLATION_UNIT_DECL</code>.
</p>
</dd>
<dt><code>struct tree_decl_with_rtl</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_common</code>.  It
contains a field to store the low-level RTL associated with a
<code>DECL</code> node.
</p>
</dd>
<dt><code>struct tree_result_decl</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_with_rtl</code>.  It is
used to represent <code>RESULT_DECL</code>.
</p>
</dd>
<dt><code>struct tree_const_decl</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_with_rtl</code>.  It is
used to represent <code>CONST_DECL</code>.
</p>
</dd>
<dt><code>struct tree_parm_decl</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_with_rtl</code>.  It is
used to represent <code>PARM_DECL</code>.
</p>
</dd>
<dt><code>struct tree_decl_with_vis</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_with_rtl</code>.  It
contains fields necessary to store visibility information, as well as
a section name and assembler name.
</p>
</dd>
<dt><code>struct tree_var_decl</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_with_vis</code>.  It is
used to represent <code>VAR_DECL</code>.
</p>
</dd>
<dt><code>struct tree_function_decl</code></dt>
<dd><p>This structure inherits from <code>struct tree_decl_with_vis</code>.  It is
used to represent <code>FUNCTION_DECL</code>.
</p>
</dd>
</dl>
<hr>
<a name="Adding-new-DECL-node-types"></a>
<div class="header">
<p>
Previous: <a href="#Current-structure-hierarchy" accesskey="p" rel="prev">Current structure hierarchy</a>, Up: <a href="#Internal-structure" accesskey="u" rel="up">Internal structure</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Adding-new-DECL-node-types-1"></a>
<h4 class="subsubsection">11.4.2.2 Adding new DECL node types</h4>

<p>Adding a new <code>DECL</code> tree consists of the following steps
</p>
<dl compact="compact">
<dt>Add a new tree code for the <code>DECL</code> node</dt>
<dd><p>For language specific <code>DECL</code> nodes, there is a <samp>.def</samp> file
in each frontend directory where the tree code should be added.
For <code>DECL</code> nodes that are part of the middle-end, the code should
be added to <samp>tree.def</samp>.
</p>
</dd>
<dt>Create a new structure type for the <code>DECL</code> node</dt>
<dd><p>These structures should inherit from one of the existing structures in
the language hierarchy by using that structure as the first member.
</p>
<div class="smallexample">
<pre class="smallexample">struct tree_foo_decl
{
   struct tree_decl_with_vis common;
}
</pre></div>

<p>Would create a structure name <code>tree_foo_decl</code> that inherits from
<code>struct tree_decl_with_vis</code>.
</p>
<p>For language specific <code>DECL</code> nodes, this new structure type
should go in the appropriate <samp>.h</samp> file.
For <code>DECL</code> nodes that are part of the middle-end, the structure
type should go in <samp>tree.h</samp>.
</p>
</dd>
<dt>Add a member to the tree structure enumerator for the node</dt>
<dd><p>For garbage collection and dynamic checking purposes, each <code>DECL</code>
node structure type is required to have a unique enumerator value
specified with it.
For language specific <code>DECL</code> nodes, this new enumerator value
should go in the appropriate <samp>.def</samp> file.
For <code>DECL</code> nodes that are part of the middle-end, the enumerator
values are specified in <samp>treestruct.def</samp>.
</p>
</dd>
<dt>Update <code>union tree_node</code></dt>
<dd><p>In order to make your new structure type usable, it must be added to
<code>union tree_node</code>.
For language specific <code>DECL</code> nodes, a new entry should be added
to the appropriate <samp>.h</samp> file of the form
</p><div class="smallexample">
<pre class="smallexample">  struct tree_foo_decl GTY ((tag (&quot;TS_VAR_DECL&quot;))) foo_decl;
</pre></div>
<p>For <code>DECL</code> nodes that are part of the middle-end, the additional
member goes directly into <code>union tree_node</code> in <samp>tree.h</samp>.
</p>
</dd>
<dt>Update dynamic checking info</dt>
<dd><p>In order to be able to check whether accessing a named portion of
<code>union tree_node</code> is legal, and whether a certain <code>DECL</code> node
contains one of the enumerated <code>DECL</code> node structures in the
hierarchy, a simple lookup table is used.
This lookup table needs to be kept up to date with the tree structure
hierarchy, or else checking and containment macros will fail
inappropriately.
</p>
<p>For language specific <code>DECL</code> nodes, their is an <code>init_ts</code>
function in an appropriate <samp>.c</samp> file, which initializes the lookup
table.
Code setting up the table for new <code>DECL</code> nodes should be added
there.
For each <code>DECL</code> tree code and enumerator value representing a
member of the inheritance  hierarchy, the table should contain 1 if
that tree code inherits (directly or indirectly) from that member.
Thus, a <code>FOO_DECL</code> node derived from <code>struct decl_with_rtl</code>,
and enumerator value <code>TS_FOO_DECL</code>, would be set up as follows
</p><div class="smallexample">
<pre class="smallexample">tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1;
tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1;
tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1;
tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1;
</pre></div>

<p>For <code>DECL</code> nodes that are part of the middle-end, the setup code
goes into <samp>tree.c</samp>.
</p>
</dd>
<dt>Add macros to access any new fields and flags</dt>
<dd>
<p>Each added field or flag should have a macro that is used to access
it, that performs appropriate checking to ensure only the right type of
<code>DECL</code> nodes access the field.
</p>
<p>These macros generally take the following form
</p><div class="smallexample">
<pre class="smallexample">#define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)-&gt;foo_decl.fieldname
</pre></div>
<p>However, if the structure is simply a base class for further
structures, something like the following should be used
</p><div class="smallexample">
<pre class="smallexample">#define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT)
#define BASE_STRUCT_FIELDNAME(NODE) \
   (BASE_STRUCT_CHECK(NODE)-&gt;base_struct.fieldname
</pre></div>

</dd>
</dl>


<hr>
<a name="Attributes"></a>
<div class="header">
<p>
Next: <a href="#Expression-trees" accesskey="n" rel="next">Expression trees</a>, Previous: <a href="#Declarations" accesskey="p" rel="prev">Declarations</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Attributes-in-trees"></a>
<h3 class="section">11.5 Attributes in trees</h3>
<a name="index-attributes"></a>

<p>Attributes, as specified using the <code>__attribute__</code> keyword, are
represented internally as a <code>TREE_LIST</code>.  The <code>TREE_PURPOSE</code>
is the name of the attribute, as an <code>IDENTIFIER_NODE</code>.  The
<code>TREE_VALUE</code> is a <code>TREE_LIST</code> of the arguments of the
attribute, if any, or <code>NULL_TREE</code> if there are no arguments; the
arguments are stored as the <code>TREE_VALUE</code> of successive entries in
the list, and may be identifiers or expressions.  The <code>TREE_CHAIN</code>
of the attribute is the next attribute in a list of attributes applying
to the same declaration or type, or <code>NULL_TREE</code> if there are no
further attributes in the list.
</p>
<p>Attributes may be attached to declarations and to types; these
attributes may be accessed with the following macros.  All attributes
are stored in this way, and many also cause other changes to the
declaration or type or to other internal compiler data structures.
</p>
<dl>
<dt><a name="index-DECL_005fATTRIBUTES"></a>Tree Macro: <em>tree</em> <strong>DECL_ATTRIBUTES</strong> <em>(tree <var>decl</var>)</em></dt>
<dd><p>This macro returns the attributes on the declaration <var>decl</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TYPE_005fATTRIBUTES"></a>Tree Macro: <em>tree</em> <strong>TYPE_ATTRIBUTES</strong> <em>(tree <var>type</var>)</em></dt>
<dd><p>This macro returns the attributes on the type <var>type</var>.
</p></dd></dl>



<hr>
<a name="Expression-trees"></a>
<div class="header">
<p>
Next: <a href="#Statements" accesskey="n" rel="next">Statements</a>, Previous: <a href="#Attributes" accesskey="p" rel="prev">Attributes</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Expressions-1"></a>
<h3 class="section">11.6 Expressions</h3>
<a name="index-expression"></a>
<a name="index-TREE_005fTYPE-3"></a>
<a name="index-TREE_005fOPERAND"></a>

<p>The internal representation for expressions is for the most part quite
straightforward.  However, there are a few facts that one must bear in
mind.  In particular, the expression &ldquo;tree&rdquo; is actually a directed
acyclic graph.  (For example there may be many references to the integer
constant zero throughout the source program; many of these will be
represented by the same expression node.)  You should not rely on
certain kinds of node being shared, nor should you rely on certain kinds of
nodes being unshared.
</p>
<p>The following macros can be used with all expression nodes:
</p>
<dl compact="compact">
<dt><code>TREE_TYPE</code>
<a name="index-TREE_005fTYPE-4"></a>
</dt>
<dd><p>Returns the type of the expression.  This value may not be precisely the
same type that would be given the expression in the original program.
</p></dd>
</dl>

<p>In what follows, some nodes that one might expect to always have type
<code>bool</code> are documented to have either integral or boolean type.  At
some point in the future, the C front end may also make use of this same
intermediate representation, and at this point these nodes will
certainly have integral type.  The previous sentence is not meant to
imply that the C++ front end does not or will not give these nodes
integral type.
</p>
<p>Below, we list the various kinds of expression nodes.  Except where
noted otherwise, the operands to an expression are accessed using the
<code>TREE_OPERAND</code> macro.  For example, to access the first operand to
a binary plus expression <code>expr</code>, use:
</p>
<div class="smallexample">
<pre class="smallexample">TREE_OPERAND (expr, 0)
</pre></div>

<p>As this example indicates, the operands are zero-indexed.
</p>

<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Constant-expressions" accesskey="1">Constants</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Storage-References" accesskey="2">Storage References</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Unary-and-Binary-Expressions" accesskey="3">Unary and Binary Expressions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Vectors" accesskey="4">Vectors</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>

<hr>
<a name="Constant-expressions"></a>
<div class="header">
<p>
Next: <a href="#Storage-References" accesskey="n" rel="next">Storage References</a>, Up: <a href="#Expression-trees" accesskey="u" rel="up">Expression trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Constant-expressions-1"></a>
<h4 class="subsection">11.6.1 Constant expressions</h4>
<a name="index-INTEGER_005fCST"></a>
<a name="index-TREE_005fINT_005fCST_005fHIGH"></a>
<a name="index-TREE_005fINT_005fCST_005fLOW"></a>
<a name="index-tree_005fint_005fcst_005flt"></a>
<a name="index-tree_005fint_005fcst_005fequal"></a>
<a name="index-REAL_005fCST"></a>
<a name="index-FIXED_005fCST"></a>
<a name="index-COMPLEX_005fCST"></a>
<a name="index-VECTOR_005fCST"></a>
<a name="index-STRING_005fCST"></a>
<a name="index-TREE_005fSTRING_005fLENGTH"></a>
<a name="index-TREE_005fSTRING_005fPOINTER"></a>

<p>The table below begins with constants, moves on to unary expressions,
then proceeds to binary expressions, and concludes with various other
kinds of expressions:
</p>
<dl compact="compact">
<dt><code>INTEGER_CST</code></dt>
<dd><p>These nodes represent integer constants.  Note that the type of these
constants is obtained with <code>TREE_TYPE</code>; they are not always of type
<code>int</code>.  In particular, <code>char</code> constants are represented with
<code>INTEGER_CST</code> nodes.  The value of the integer constant <code>e</code> is
given by
</p><div class="smallexample">
<pre class="smallexample">((TREE_INT_CST_HIGH (e) &lt;&lt; HOST_BITS_PER_WIDE_INT)
+ TREE_INST_CST_LOW (e))
</pre></div>
<p>HOST_BITS_PER_WIDE_INT is at least thirty-two on all platforms.  Both
<code>TREE_INT_CST_HIGH</code> and <code>TREE_INT_CST_LOW</code> return a
<code>HOST_WIDE_INT</code>.  The value of an <code>INTEGER_CST</code> is interpreted
as a signed or unsigned quantity depending on the type of the constant.
In general, the expression given above will overflow, so it should not
be used to calculate the value of the constant.
</p>
<p>The variable <code>integer_zero_node</code> is an integer constant with value
zero.  Similarly, <code>integer_one_node</code> is an integer constant with
value one.  The <code>size_zero_node</code> and <code>size_one_node</code> variables
are analogous, but have type <code>size_t</code> rather than <code>int</code>.
</p>
<p>The function <code>tree_int_cst_lt</code> is a predicate which holds if its
first argument is less than its second.  Both constants are assumed to
have the same signedness (i.e., either both should be signed or both
should be unsigned.)  The full width of the constant is used when doing
the comparison; the usual rules about promotions and conversions are
ignored.  Similarly, <code>tree_int_cst_equal</code> holds if the two
constants are equal.  The <code>tree_int_cst_sgn</code> function returns the
sign of a constant.  The value is <code>1</code>, <code>0</code>, or <code>-1</code>
according on whether the constant is greater than, equal to, or less
than zero.  Again, the signedness of the constant&rsquo;s type is taken into
account; an unsigned constant is never less than zero, no matter what
its bit-pattern.
</p>
</dd>
<dt><code>REAL_CST</code></dt>
<dd>
<p>FIXME: Talk about how to obtain representations of this constant, do
comparisons, and so forth.
</p>
</dd>
<dt><code>FIXED_CST</code></dt>
<dd>
<p>These nodes represent fixed-point constants.  The type of these constants
is obtained with <code>TREE_TYPE</code>.  <code>TREE_FIXED_CST_PTR</code> points to
a <code>struct fixed_value</code>;  <code>TREE_FIXED_CST</code> returns the structure
itself.  <code>struct fixed_value</code> contains <code>data</code> with the size of two
<code>HOST_BITS_PER_WIDE_INT</code> and <code>mode</code> as the associated fixed-point
machine mode for <code>data</code>.
</p>
</dd>
<dt><code>COMPLEX_CST</code></dt>
<dd><p>These nodes are used to represent complex number constants, that is a
<code>__complex__</code> whose parts are constant nodes.  The
<code>TREE_REALPART</code> and <code>TREE_IMAGPART</code> return the real and the
imaginary parts respectively.
</p>
</dd>
<dt><code>VECTOR_CST</code></dt>
<dd><p>These nodes are used to represent vector constants, whose parts are
constant nodes.  Each individual constant node is either an integer or a
double constant node.  The first operand is a <code>TREE_LIST</code> of the
constant nodes and is accessed through <code>TREE_VECTOR_CST_ELTS</code>.
</p>
</dd>
<dt><code>STRING_CST</code></dt>
<dd><p>These nodes represent string-constants.  The <code>TREE_STRING_LENGTH</code>
returns the length of the string, as an <code>int</code>.  The
<code>TREE_STRING_POINTER</code> is a <code>char*</code> containing the string
itself.  The string may not be <code>NUL</code>-terminated, and it may contain
embedded <code>NUL</code> characters.  Therefore, the
<code>TREE_STRING_LENGTH</code> includes the trailing <code>NUL</code> if it is
present.
</p>
<p>For wide string constants, the <code>TREE_STRING_LENGTH</code> is the number
of bytes in the string, and the <code>TREE_STRING_POINTER</code>
points to an array of the bytes of the string, as represented on the
target system (that is, as integers in the target endianness).  Wide and
non-wide string constants are distinguished only by the <code>TREE_TYPE</code>
of the <code>STRING_CST</code>.
</p>
<p>FIXME: The formats of string constants are not well-defined when the
target system bytes are not the same width as host system bytes.
</p>
</dd>
</dl>

<hr>
<a name="Storage-References"></a>
<div class="header">
<p>
Next: <a href="#Unary-and-Binary-Expressions" accesskey="n" rel="next">Unary and Binary Expressions</a>, Previous: <a href="#Constant-expressions" accesskey="p" rel="prev">Constant expressions</a>, Up: <a href="#Expression-trees" accesskey="u" rel="up">Expression trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="References-to-storage"></a>
<h4 class="subsection">11.6.2 References to storage</h4>
<a name="index-ADDR_005fEXPR"></a>
<a name="index-INDIRECT_005fREF"></a>
<a name="index-MEM_005fREF"></a>
<a name="index-ARRAY_005fREF"></a>
<a name="index-ARRAY_005fRANGE_005fREF"></a>
<a name="index-TARGET_005fMEM_005fREF"></a>
<a name="index-COMPONENT_005fREF"></a>

<dl compact="compact">
<dt><code>ARRAY_REF</code></dt>
<dd><p>These nodes represent array accesses.  The first operand is the array;
the second is the index.  To calculate the address of the memory
accessed, you must scale the index by the size of the type of the array
elements.  The type of these expressions must be the type of a component of
the array.  The third and fourth operands are used after gimplification
to represent the lower bound and component size but should not be used
directly; call <code>array_ref_low_bound</code> and <code>array_ref_element_size</code>
instead.
</p>
</dd>
<dt><code>ARRAY_RANGE_REF</code></dt>
<dd><p>These nodes represent access to a range (or &ldquo;slice&rdquo;) of an array.  The
operands are the same as that for <code>ARRAY_REF</code> and have the same
meanings.  The type of these expressions must be an array whose component
type is the same as that of the first operand.  The range of that array
type determines the amount of data these expressions access.
</p>
</dd>
<dt><code>TARGET_MEM_REF</code></dt>
<dd><p>These nodes represent memory accesses whose address directly map to
an addressing mode of the target architecture.  The first argument
is <code>TMR_SYMBOL</code> and must be a <code>VAR_DECL</code> of an object with
a fixed address.  The second argument is <code>TMR_BASE</code> and the
third one is <code>TMR_INDEX</code>.  The fourth argument is
<code>TMR_STEP</code> and must be an <code>INTEGER_CST</code>.  The fifth
argument is <code>TMR_OFFSET</code> and must be an <code>INTEGER_CST</code>.
Any of the arguments may be NULL if the appropriate component
does not appear in the address.  Address of the <code>TARGET_MEM_REF</code>
is determined in the following way.
</p>
<div class="smallexample">
<pre class="smallexample">&amp;TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
</pre></div>

<p>The sixth argument is the reference to the original memory access, which
is preserved for the purposes of the RTL alias analysis.  The seventh
argument is a tag representing the results of tree level alias analysis.
</p>
</dd>
<dt><code>ADDR_EXPR</code></dt>
<dd><p>These nodes are used to represent the address of an object.  (These
expressions will always have pointer or reference type.)  The operand may
be another expression, or it may be a declaration.
</p>
<p>As an extension, GCC allows users to take the address of a label.  In
this case, the operand of the <code>ADDR_EXPR</code> will be a
<code>LABEL_DECL</code>.  The type of such an expression is <code>void*</code>.
</p>
<p>If the object addressed is not an lvalue, a temporary is created, and
the address of the temporary is used.
</p>
</dd>
<dt><code>INDIRECT_REF</code></dt>
<dd><p>These nodes are used to represent the object pointed to by a pointer.
The operand is the pointer being dereferenced; it will always have
pointer or reference type.
</p>
</dd>
<dt><code>MEM_REF</code></dt>
<dd><p>These nodes are used to represent the object pointed to by a pointer
offset by a constant.
The first operand is the pointer being dereferenced; it will always have
pointer or reference type.  The second operand is a pointer constant.
Its type is specifying the type to be used for type-based alias analysis.
</p>
</dd>
<dt><code>COMPONENT_REF</code></dt>
<dd><p>These nodes represent non-static data member accesses.  The first
operand is the object (rather than a pointer to it); the second operand
is the <code>FIELD_DECL</code> for the data member.  The third operand represents
the byte offset of the field, but should not be used directly; call
<code>component_ref_field_offset</code> instead.
</p>

</dd>
</dl>

<hr>
<a name="Unary-and-Binary-Expressions"></a>
<div class="header">
<p>
Next: <a href="#Vectors" accesskey="n" rel="next">Vectors</a>, Previous: <a href="#Storage-References" accesskey="p" rel="prev">Storage References</a>, Up: <a href="#Expression-trees" accesskey="u" rel="up">Expression trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Unary-and-Binary-Expressions-1"></a>
<h4 class="subsection">11.6.3 Unary and Binary Expressions</h4>
<a name="index-NEGATE_005fEXPR"></a>
<a name="index-ABS_005fEXPR"></a>
<a name="index-BIT_005fNOT_005fEXPR"></a>
<a name="index-TRUTH_005fNOT_005fEXPR"></a>
<a name="index-PREDECREMENT_005fEXPR"></a>
<a name="index-PREINCREMENT_005fEXPR"></a>
<a name="index-POSTDECREMENT_005fEXPR"></a>
<a name="index-POSTINCREMENT_005fEXPR"></a>
<a name="index-FIX_005fTRUNC_005fEXPR"></a>
<a name="index-FLOAT_005fEXPR"></a>
<a name="index-COMPLEX_005fEXPR"></a>
<a name="index-CONJ_005fEXPR"></a>
<a name="index-REALPART_005fEXPR"></a>
<a name="index-IMAGPART_005fEXPR"></a>
<a name="index-NON_005fLVALUE_005fEXPR"></a>
<a name="index-NOP_005fEXPR"></a>
<a name="index-CONVERT_005fEXPR"></a>
<a name="index-FIXED_005fCONVERT_005fEXPR"></a>
<a name="index-THROW_005fEXPR"></a>
<a name="index-LSHIFT_005fEXPR"></a>
<a name="index-RSHIFT_005fEXPR"></a>
<a name="index-BIT_005fIOR_005fEXPR"></a>
<a name="index-BIT_005fXOR_005fEXPR"></a>
<a name="index-BIT_005fAND_005fEXPR"></a>
<a name="index-TRUTH_005fANDIF_005fEXPR"></a>
<a name="index-TRUTH_005fORIF_005fEXPR"></a>
<a name="index-TRUTH_005fAND_005fEXPR"></a>
<a name="index-TRUTH_005fOR_005fEXPR"></a>
<a name="index-TRUTH_005fXOR_005fEXPR"></a>
<a name="index-POINTER_005fPLUS_005fEXPR"></a>
<a name="index-PLUS_005fEXPR"></a>
<a name="index-MINUS_005fEXPR"></a>
<a name="index-MULT_005fEXPR"></a>
<a name="index-MULT_005fHIGHPART_005fEXPR"></a>
<a name="index-RDIV_005fEXPR"></a>
<a name="index-TRUNC_005fDIV_005fEXPR"></a>
<a name="index-FLOOR_005fDIV_005fEXPR"></a>
<a name="index-CEIL_005fDIV_005fEXPR"></a>
<a name="index-ROUND_005fDIV_005fEXPR"></a>
<a name="index-TRUNC_005fMOD_005fEXPR"></a>
<a name="index-FLOOR_005fMOD_005fEXPR"></a>
<a name="index-CEIL_005fMOD_005fEXPR"></a>
<a name="index-ROUND_005fMOD_005fEXPR"></a>
<a name="index-EXACT_005fDIV_005fEXPR"></a>
<a name="index-LT_005fEXPR"></a>
<a name="index-LE_005fEXPR"></a>
<a name="index-GT_005fEXPR"></a>
<a name="index-GE_005fEXPR"></a>
<a name="index-EQ_005fEXPR"></a>
<a name="index-NE_005fEXPR"></a>
<a name="index-ORDERED_005fEXPR"></a>
<a name="index-UNORDERED_005fEXPR"></a>
<a name="index-UNLT_005fEXPR"></a>
<a name="index-UNLE_005fEXPR"></a>
<a name="index-UNGT_005fEXPR"></a>
<a name="index-UNGE_005fEXPR"></a>
<a name="index-UNEQ_005fEXPR"></a>
<a name="index-LTGT_005fEXPR"></a>
<a name="index-MODIFY_005fEXPR"></a>
<a name="index-INIT_005fEXPR"></a>
<a name="index-COMPOUND_005fEXPR"></a>
<a name="index-COND_005fEXPR"></a>
<a name="index-CALL_005fEXPR"></a>
<a name="index-STMT_005fEXPR"></a>
<a name="index-BIND_005fEXPR"></a>
<a name="index-LOOP_005fEXPR"></a>
<a name="index-EXIT_005fEXPR"></a>
<a name="index-CLEANUP_005fPOINT_005fEXPR"></a>
<a name="index-CONSTRUCTOR"></a>
<a name="index-COMPOUND_005fLITERAL_005fEXPR"></a>
<a name="index-SAVE_005fEXPR"></a>
<a name="index-TARGET_005fEXPR"></a>
<a name="index-VA_005fARG_005fEXPR"></a>

<dl compact="compact">
<dt><code>NEGATE_EXPR</code></dt>
<dd><p>These nodes represent unary negation of the single operand, for both
integer and floating-point types.  The type of negation can be
determined by looking at the type of the expression.
</p>
<p>The behavior of this operation on signed arithmetic overflow is
controlled by the <code>flag_wrapv</code> and <code>flag_trapv</code> variables.
</p>
</dd>
<dt><code>ABS_EXPR</code></dt>
<dd><p>These nodes represent the absolute value of the single operand, for
both integer and floating-point types.  This is typically used to
implement the <code>abs</code>, <code>labs</code> and <code>llabs</code> builtins for
integer types, and the <code>fabs</code>, <code>fabsf</code> and <code>fabsl</code>
builtins for floating point types.  The type of abs operation can
be determined by looking at the type of the expression.
</p>
<p>This node is not used for complex types.  To represent the modulus
or complex abs of a complex value, use the <code>BUILT_IN_CABS</code>,
<code>BUILT_IN_CABSF</code> or <code>BUILT_IN_CABSL</code> builtins, as used
to implement the C99 <code>cabs</code>, <code>cabsf</code> and <code>cabsl</code>
built-in functions.
</p>
</dd>
<dt><code>BIT_NOT_EXPR</code></dt>
<dd><p>These nodes represent bitwise complement, and will always have integral
type.  The only operand is the value to be complemented.
</p>
</dd>
<dt><code>TRUTH_NOT_EXPR</code></dt>
<dd><p>These nodes represent logical negation, and will always have integral
(or boolean) type.  The operand is the value being negated.  The type
of the operand and that of the result are always of <code>BOOLEAN_TYPE</code>
or <code>INTEGER_TYPE</code>.
</p>
</dd>
<dt><code>PREDECREMENT_EXPR</code></dt>
<dt><code>PREINCREMENT_EXPR</code></dt>
<dt><code>POSTDECREMENT_EXPR</code></dt>
<dt><code>POSTINCREMENT_EXPR</code></dt>
<dd><p>These nodes represent increment and decrement expressions.  The value of
the single operand is computed, and the operand incremented or
decremented.  In the case of <code>PREDECREMENT_EXPR</code> and
<code>PREINCREMENT_EXPR</code>, the value of the expression is the value
resulting after the increment or decrement; in the case of
<code>POSTDECREMENT_EXPR</code> and <code>POSTINCREMENT_EXPR</code> is the value
before the increment or decrement occurs.  The type of the operand, like
that of the result, will be either integral, boolean, or floating-point.
</p>
</dd>
<dt><code>FIX_TRUNC_EXPR</code></dt>
<dd><p>These nodes represent conversion of a floating-point value to an
integer.  The single operand will have a floating-point type, while
the complete expression will have an integral (or boolean) type.  The
operand is rounded towards zero.
</p>
</dd>
<dt><code>FLOAT_EXPR</code></dt>
<dd><p>These nodes represent conversion of an integral (or boolean) value to a
floating-point value.  The single operand will have integral type, while
the complete expression will have a floating-point type.
</p>
<p>FIXME: How is the operand supposed to be rounded?  Is this dependent on
<samp>-mieee</samp>?
</p>
</dd>
<dt><code>COMPLEX_EXPR</code></dt>
<dd><p>These nodes are used to represent complex numbers constructed from two
expressions of the same (integer or real) type.  The first operand is the
real part and the second operand is the imaginary part.
</p>
</dd>
<dt><code>CONJ_EXPR</code></dt>
<dd><p>These nodes represent the conjugate of their operand.
</p>
</dd>
<dt><code>REALPART_EXPR</code></dt>
<dt><code>IMAGPART_EXPR</code></dt>
<dd><p>These nodes represent respectively the real and the imaginary parts
of complex numbers (their sole argument).
</p>
</dd>
<dt><code>NON_LVALUE_EXPR</code></dt>
<dd><p>These nodes indicate that their one and only operand is not an lvalue.
A back end can treat these identically to the single operand.
</p>
</dd>
<dt><code>NOP_EXPR</code></dt>
<dd><p>These nodes are used to represent conversions that do not require any
code-generation.  For example, conversion of a <code>char*</code> to an
<code>int*</code> does not require any code be generated; such a conversion is
represented by a <code>NOP_EXPR</code>.  The single operand is the expression
to be converted.  The conversion from a pointer to a reference is also
represented with a <code>NOP_EXPR</code>.
</p>
</dd>
<dt><code>CONVERT_EXPR</code></dt>
<dd><p>These nodes are similar to <code>NOP_EXPR</code>s, but are used in those
situations where code may need to be generated.  For example, if an
<code>int*</code> is converted to an <code>int</code> code may need to be generated
on some platforms.  These nodes are never used for C++-specific
conversions, like conversions between pointers to different classes in
an inheritance hierarchy.  Any adjustments that need to be made in such
cases are always indicated explicitly.  Similarly, a user-defined
conversion is never represented by a <code>CONVERT_EXPR</code>; instead, the
function calls are made explicit.
</p>
</dd>
<dt><code>FIXED_CONVERT_EXPR</code></dt>
<dd><p>These nodes are used to represent conversions that involve fixed-point
values.  For example, from a fixed-point value to another fixed-point value,
from an integer to a fixed-point value, from a fixed-point value to an
integer, from a floating-point value to a fixed-point value, or from
a fixed-point value to a floating-point value.
</p>
</dd>
<dt><code>LSHIFT_EXPR</code></dt>
<dt><code>RSHIFT_EXPR</code></dt>
<dd><p>These nodes represent left and right shifts, respectively.  The first
operand is the value to shift; it will always be of integral type.  The
second operand is an expression for the number of bits by which to
shift.  Right shift should be treated as arithmetic, i.e., the
high-order bits should be zero-filled when the expression has unsigned
type and filled with the sign bit when the expression has signed type.
Note that the result is undefined if the second operand is larger
than or equal to the first operand&rsquo;s type size. Unlike most nodes, these
can have a vector as first operand and a scalar as second operand.
</p>

</dd>
<dt><code>BIT_IOR_EXPR</code></dt>
<dt><code>BIT_XOR_EXPR</code></dt>
<dt><code>BIT_AND_EXPR</code></dt>
<dd><p>These nodes represent bitwise inclusive or, bitwise exclusive or, and
bitwise and, respectively.  Both operands will always have integral
type.
</p>
</dd>
<dt><code>TRUTH_ANDIF_EXPR</code></dt>
<dt><code>TRUTH_ORIF_EXPR</code></dt>
<dd><p>These nodes represent logical &ldquo;and&rdquo; and logical &ldquo;or&rdquo;, respectively.
These operators are not strict; i.e., the second operand is evaluated
only if the value of the expression is not determined by evaluation of
the first operand.  The type of the operands and that of the result are
always of <code>BOOLEAN_TYPE</code> or <code>INTEGER_TYPE</code>.
</p>
</dd>
<dt><code>TRUTH_AND_EXPR</code></dt>
<dt><code>TRUTH_OR_EXPR</code></dt>
<dt><code>TRUTH_XOR_EXPR</code></dt>
<dd><p>These nodes represent logical and, logical or, and logical exclusive or.
They are strict; both arguments are always evaluated.  There are no
corresponding operators in C or C++, but the front end will sometimes
generate these expressions anyhow, if it can tell that strictness does
not matter.  The type of the operands and that of the result are
always of <code>BOOLEAN_TYPE</code> or <code>INTEGER_TYPE</code>.
</p>
</dd>
<dt><code>POINTER_PLUS_EXPR</code></dt>
<dd><p>This node represents pointer arithmetic.  The first operand is always
a pointer/reference type.  The second operand is always an unsigned
integer type compatible with sizetype.  This is the only binary
arithmetic operand that can operate on pointer types.
</p>
</dd>
<dt><code>PLUS_EXPR</code></dt>
<dt><code>MINUS_EXPR</code></dt>
<dt><code>MULT_EXPR</code></dt>
<dd><p>These nodes represent various binary arithmetic operations.
Respectively, these operations are addition, subtraction (of the second
operand from the first) and multiplication.  Their operands may have
either integral or floating type, but there will never be case in which
one operand is of floating type and the other is of integral type.
</p>
<p>The behavior of these operations on signed arithmetic overflow is
controlled by the <code>flag_wrapv</code> and <code>flag_trapv</code> variables.
</p>
</dd>
<dt><code>MULT_HIGHPART_EXPR</code></dt>
<dd><p>This node represents the &ldquo;high-part&rdquo; of a widening multiplication.
For an integral type with <var>b</var> bits of precision, the result is
the most significant <var>b</var> bits of the full <em>2<var>b</var></em> product.
</p>
</dd>
<dt><code>RDIV_EXPR</code></dt>
<dd><p>This node represents a floating point division operation.
</p>
</dd>
<dt><code>TRUNC_DIV_EXPR</code></dt>
<dt><code>FLOOR_DIV_EXPR</code></dt>
<dt><code>CEIL_DIV_EXPR</code></dt>
<dt><code>ROUND_DIV_EXPR</code></dt>
<dd><p>These nodes represent integer division operations that return an integer
result.  <code>TRUNC_DIV_EXPR</code> rounds towards zero, <code>FLOOR_DIV_EXPR</code>
rounds towards negative infinity, <code>CEIL_DIV_EXPR</code> rounds towards
positive infinity and <code>ROUND_DIV_EXPR</code> rounds to the closest integer.
Integer division in C and C++ is truncating, i.e. <code>TRUNC_DIV_EXPR</code>.
</p>
<p>The behavior of these operations on signed arithmetic overflow, when
dividing the minimum signed integer by minus one, is controlled by the
<code>flag_wrapv</code> and <code>flag_trapv</code> variables.
</p>
</dd>
<dt><code>TRUNC_MOD_EXPR</code></dt>
<dt><code>FLOOR_MOD_EXPR</code></dt>
<dt><code>CEIL_MOD_EXPR</code></dt>
<dt><code>ROUND_MOD_EXPR</code></dt>
<dd><p>These nodes represent the integer remainder or modulus operation.
The integer modulus of two operands <code>a</code> and <code>b</code> is
defined as <code>a - (a/b)*b</code> where the division calculated using
the corresponding division operator.  Hence for <code>TRUNC_MOD_EXPR</code>
this definition assumes division using truncation towards zero, i.e.
<code>TRUNC_DIV_EXPR</code>.  Integer remainder in C and C++ uses truncating
division, i.e. <code>TRUNC_MOD_EXPR</code>.
</p>
</dd>
<dt><code>EXACT_DIV_EXPR</code></dt>
<dd><p>The <code>EXACT_DIV_EXPR</code> code is used to represent integer divisions where
the numerator is known to be an exact multiple of the denominator.  This
allows the backend to choose between the faster of <code>TRUNC_DIV_EXPR</code>,
<code>CEIL_DIV_EXPR</code> and <code>FLOOR_DIV_EXPR</code> for the current target.
</p>
</dd>
<dt><code>LT_EXPR</code></dt>
<dt><code>LE_EXPR</code></dt>
<dt><code>GT_EXPR</code></dt>
<dt><code>GE_EXPR</code></dt>
<dt><code>EQ_EXPR</code></dt>
<dt><code>NE_EXPR</code></dt>
<dd><p>These nodes represent the less than, less than or equal to, greater
than, greater than or equal to, equal, and not equal comparison
operators.  The first and second operands will either be both of integral
type, both of floating type or both of vector type.  The result type of
these expressions will always be of integral, boolean or signed integral
vector type.  These operations return the result type&rsquo;s zero value for
false, the result type&rsquo;s one value for true, and a vector whose elements
are zero (false) or minus one (true) for vectors.
</p>
<p>For floating point comparisons, if we honor IEEE NaNs and either operand
is NaN, then <code>NE_EXPR</code> always returns true and the remaining operators
always return false.  On some targets, comparisons against an IEEE NaN,
other than equality and inequality, may generate a floating point exception.
</p>
</dd>
<dt><code>ORDERED_EXPR</code></dt>
<dt><code>UNORDERED_EXPR</code></dt>
<dd><p>These nodes represent non-trapping ordered and unordered comparison
operators.  These operations take two floating point operands and
determine whether they are ordered or unordered relative to each other.
If either operand is an IEEE NaN, their comparison is defined to be
unordered, otherwise the comparison is defined to be ordered.  The
result type of these expressions will always be of integral or boolean
type.  These operations return the result type&rsquo;s zero value for false,
and the result type&rsquo;s one value for true.
</p>
</dd>
<dt><code>UNLT_EXPR</code></dt>
<dt><code>UNLE_EXPR</code></dt>
<dt><code>UNGT_EXPR</code></dt>
<dt><code>UNGE_EXPR</code></dt>
<dt><code>UNEQ_EXPR</code></dt>
<dt><code>LTGT_EXPR</code></dt>
<dd><p>These nodes represent the unordered comparison operators.
These operations take two floating point operands and determine whether
the operands are unordered or are less than, less than or equal to,
greater than, greater than or equal to, or equal respectively.  For
example, <code>UNLT_EXPR</code> returns true if either operand is an IEEE
NaN or the first operand is less than the second.  With the possible
exception of <code>LTGT_EXPR</code>, all of these operations are guaranteed
not to generate a floating point exception.  The result
type of these expressions will always be of integral or boolean type.
These operations return the result type&rsquo;s zero value for false,
and the result type&rsquo;s one value for true.
</p>
</dd>
<dt><code>MODIFY_EXPR</code></dt>
<dd><p>These nodes represent assignment.  The left-hand side is the first
operand; the right-hand side is the second operand.  The left-hand side
will be a <code>VAR_DECL</code>, <code>INDIRECT_REF</code>, <code>COMPONENT_REF</code>, or
other lvalue.
</p>
<p>These nodes are used to represent not only assignment with &lsquo;<samp>=</samp>&rsquo; but
also compound assignments (like &lsquo;<samp>+=</samp>&rsquo;), by reduction to &lsquo;<samp>=</samp>&rsquo;
assignment.  In other words, the representation for &lsquo;<samp>i += 3</samp>&rsquo; looks
just like that for &lsquo;<samp>i = i + 3</samp>&rsquo;.
</p>
</dd>
<dt><code>INIT_EXPR</code></dt>
<dd><p>These nodes are just like <code>MODIFY_EXPR</code>, but are used only when a
variable is initialized, rather than assigned to subsequently.  This
means that we can assume that the target of the initialization is not
used in computing its own value; any reference to the lhs in computing
the rhs is undefined.
</p>
</dd>
<dt><code>COMPOUND_EXPR</code></dt>
<dd><p>These nodes represent comma-expressions.  The first operand is an
expression whose value is computed and thrown away prior to the
evaluation of the second operand.  The value of the entire expression is
the value of the second operand.
</p>
</dd>
<dt><code>COND_EXPR</code></dt>
<dd><p>These nodes represent <code>?:</code> expressions.  The first operand
is of boolean or integral type.  If it evaluates to a nonzero value,
the second operand should be evaluated, and returned as the value of the
expression.  Otherwise, the third operand is evaluated, and returned as
the value of the expression.
</p>
<p>The second operand must have the same type as the entire expression,
unless it unconditionally throws an exception or calls a noreturn
function, in which case it should have void type.  The same constraints
apply to the third operand.  This allows array bounds checks to be
represented conveniently as <code>(i &gt;= 0 &amp;&amp; i &lt; 10) ? i : abort()</code>.
</p>
<p>As a GNU extension, the C language front-ends allow the second
operand of the <code>?:</code> operator may be omitted in the source.
For example, <code>x ? : 3</code> is equivalent to <code>x ? x : 3</code>,
assuming that <code>x</code> is an expression without side-effects.
In the tree representation, however, the second operand is always
present, possibly protected by <code>SAVE_EXPR</code> if the first
argument does cause side-effects.
</p>
</dd>
<dt><code>CALL_EXPR</code></dt>
<dd><p>These nodes are used to represent calls to functions, including
non-static member functions.  <code>CALL_EXPR</code>s are implemented as
expression nodes with a variable number of operands.  Rather than using
<code>TREE_OPERAND</code> to extract them, it is preferable to use the
specialized accessor macros and functions that operate specifically on
<code>CALL_EXPR</code> nodes.
</p>
<p><code>CALL_EXPR_FN</code> returns a pointer to the
function to call; it is always an expression whose type is a
<code>POINTER_TYPE</code>.
</p>
<p>The number of arguments to the call is returned by <code>call_expr_nargs</code>,
while the arguments themselves can be accessed with the <code>CALL_EXPR_ARG</code>
macro.  The arguments are zero-indexed and numbered left-to-right.
You can iterate over the arguments using <code>FOR_EACH_CALL_EXPR_ARG</code>, as in:
</p>
<div class="smallexample">
<pre class="smallexample">tree call, arg;
call_expr_arg_iterator iter;
FOR_EACH_CALL_EXPR_ARG (arg, iter, call)
  /* arg is bound to successive arguments of call.  */
  &hellip;;
</pre></div>

<p>For non-static
member functions, there will be an operand corresponding to the
<code>this</code> pointer.  There will always be expressions corresponding to
all of the arguments, even if the function is declared with default
arguments and some arguments are not explicitly provided at the call
sites.
</p>
<p><code>CALL_EXPR</code>s also have a <code>CALL_EXPR_STATIC_CHAIN</code> operand that
is used to implement nested functions.  This operand is otherwise null.
</p>
</dd>
<dt><code>CLEANUP_POINT_EXPR</code></dt>
<dd><p>These nodes represent full-expressions.  The single operand is an
expression to evaluate.  Any destructor calls engendered by the creation
of temporaries during the evaluation of that expression should be
performed immediately after the expression is evaluated.
</p>
</dd>
<dt><code>CONSTRUCTOR</code></dt>
<dd><p>These nodes represent the brace-enclosed initializers for a structure or
array.  The first operand is reserved for use by the back end.  The
second operand is a <code>TREE_LIST</code>.  If the <code>TREE_TYPE</code> of the
<code>CONSTRUCTOR</code> is a <code>RECORD_TYPE</code> or <code>UNION_TYPE</code>, then
the <code>TREE_PURPOSE</code> of each node in the <code>TREE_LIST</code> will be a
<code>FIELD_DECL</code> and the <code>TREE_VALUE</code> of each node will be the
expression used to initialize that field.
</p>
<p>If the <code>TREE_TYPE</code> of the <code>CONSTRUCTOR</code> is an
<code>ARRAY_TYPE</code>, then the <code>TREE_PURPOSE</code> of each element in the
<code>TREE_LIST</code> will be an <code>INTEGER_CST</code> or a <code>RANGE_EXPR</code> of
two <code>INTEGER_CST</code>s.  A single <code>INTEGER_CST</code> indicates which
element of the array (indexed from zero) is being assigned to.  A
<code>RANGE_EXPR</code> indicates an inclusive range of elements to
initialize.  In both cases the <code>TREE_VALUE</code> is the corresponding
initializer.  It is re-evaluated for each element of a
<code>RANGE_EXPR</code>.  If the <code>TREE_PURPOSE</code> is <code>NULL_TREE</code>, then
the initializer is for the next available array element.
</p>
<p>In the front end, you should not depend on the fields appearing in any
particular order.  However, in the middle end, fields must appear in
declaration order.  You should not assume that all fields will be
represented.  Unrepresented fields will be set to zero.
</p>
</dd>
<dt><code>COMPOUND_LITERAL_EXPR</code></dt>
<dd><a name="index-COMPOUND_005fLITERAL_005fEXPR_005fDECL_005fEXPR"></a>
<a name="index-COMPOUND_005fLITERAL_005fEXPR_005fDECL"></a>
<p>These nodes represent ISO C99 compound literals.  The
<code>COMPOUND_LITERAL_EXPR_DECL_EXPR</code> is a <code>DECL_EXPR</code>
containing an anonymous <code>VAR_DECL</code> for
the unnamed object represented by the compound literal; the
<code>DECL_INITIAL</code> of that <code>VAR_DECL</code> is a <code>CONSTRUCTOR</code>
representing the brace-enclosed list of initializers in the compound
literal.  That anonymous <code>VAR_DECL</code> can also be accessed directly
by the <code>COMPOUND_LITERAL_EXPR_DECL</code> macro.
</p>
</dd>
<dt><code>SAVE_EXPR</code></dt>
<dd>
<p>A <code>SAVE_EXPR</code> represents an expression (possibly involving
side-effects) that is used more than once.  The side-effects should
occur only the first time the expression is evaluated.  Subsequent uses
should just reuse the computed value.  The first operand to the
<code>SAVE_EXPR</code> is the expression to evaluate.  The side-effects should
be executed where the <code>SAVE_EXPR</code> is first encountered in a
depth-first preorder traversal of the expression tree.
</p>
</dd>
<dt><code>TARGET_EXPR</code></dt>
<dd><p>A <code>TARGET_EXPR</code> represents a temporary object.  The first operand
is a <code>VAR_DECL</code> for the temporary variable.  The second operand is
the initializer for the temporary.  The initializer is evaluated and,
if non-void, copied (bitwise) into the temporary.  If the initializer
is void, that means that it will perform the initialization itself.
</p>
<p>Often, a <code>TARGET_EXPR</code> occurs on the right-hand side of an
assignment, or as the second operand to a comma-expression which is
itself the right-hand side of an assignment, etc.  In this case, we say
that the <code>TARGET_EXPR</code> is &ldquo;normal&rdquo;; otherwise, we say it is
&ldquo;orphaned&rdquo;.  For a normal <code>TARGET_EXPR</code> the temporary variable
should be treated as an alias for the left-hand side of the assignment,
rather than as a new temporary variable.
</p>
<p>The third operand to the <code>TARGET_EXPR</code>, if present, is a
cleanup-expression (i.e., destructor call) for the temporary.  If this
expression is orphaned, then this expression must be executed when the
statement containing this expression is complete.  These cleanups must
always be executed in the order opposite to that in which they were
encountered.  Note that if a temporary is created on one branch of a
conditional operator (i.e., in the second or third operand to a
<code>COND_EXPR</code>), the cleanup must be run only if that branch is
actually executed.
</p>
</dd>
<dt><code>VA_ARG_EXPR</code></dt>
<dd><p>This node is used to implement support for the C/C++ variable argument-list
mechanism.  It represents expressions like <code>va_arg (ap, type)</code>.
Its <code>TREE_TYPE</code> yields the tree representation for <code>type</code> and
its sole argument yields the representation for <code>ap</code>.
</p>
</dd>
</dl>

<hr>
<a name="Vectors"></a>
<div class="header">
<p>
Previous: <a href="#Unary-and-Binary-Expressions" accesskey="p" rel="prev">Unary and Binary Expressions</a>, Up: <a href="#Expression-trees" accesskey="u" rel="up">Expression trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Vectors-1"></a>
<h4 class="subsection">11.6.4 Vectors</h4>
<a name="index-VEC_005fLSHIFT_005fEXPR"></a>
<a name="index-VEC_005fRSHIFT_005fEXPR"></a>
<a name="index-VEC_005fWIDEN_005fMULT_005fHI_005fEXPR"></a>
<a name="index-VEC_005fWIDEN_005fMULT_005fLO_005fEXPR"></a>
<a name="index-VEC_005fUNPACK_005fHI_005fEXPR"></a>
<a name="index-VEC_005fUNPACK_005fLO_005fEXPR"></a>
<a name="index-VEC_005fUNPACK_005fFLOAT_005fHI_005fEXPR"></a>
<a name="index-VEC_005fUNPACK_005fFLOAT_005fLO_005fEXPR"></a>
<a name="index-VEC_005fPACK_005fTRUNC_005fEXPR"></a>
<a name="index-VEC_005fPACK_005fSAT_005fEXPR"></a>
<a name="index-VEC_005fPACK_005fFIX_005fTRUNC_005fEXPR"></a>

<dl compact="compact">
<dt><code>VEC_LSHIFT_EXPR</code></dt>
<dt><code>VEC_RSHIFT_EXPR</code></dt>
<dd><p>These nodes represent whole vector left and right shifts, respectively.
The first operand is the vector to shift; it will always be of vector type.
The second operand is an expression for the number of bits by which to
shift.  Note that the result is undefined if the second operand is larger
than or equal to the first operand&rsquo;s type size.
</p>
</dd>
<dt><code>VEC_WIDEN_MULT_HI_EXPR</code></dt>
<dt><code>VEC_WIDEN_MULT_LO_EXPR</code></dt>
<dd><p>These nodes represent widening vector multiplication of the high and low
parts of the two input vectors, respectively.  Their operands are vectors
that contain the same number of elements (<code>N</code>) of the same integral type.
The result is a vector that contains half as many elements, of an integral type
whose size is twice as wide.  In the case of <code>VEC_WIDEN_MULT_HI_EXPR</code> the
high <code>N/2</code> elements of the two vector are multiplied to produce the
vector of <code>N/2</code> products. In the case of <code>VEC_WIDEN_MULT_LO_EXPR</code> the
low <code>N/2</code> elements of the two vector are multiplied to produce the
vector of <code>N/2</code> products.
</p>
</dd>
<dt><code>VEC_UNPACK_HI_EXPR</code></dt>
<dt><code>VEC_UNPACK_LO_EXPR</code></dt>
<dd><p>These nodes represent unpacking of the high and low parts of the input vector,
respectively.  The single operand is a vector that contains <code>N</code> elements
of the same integral or floating point type.  The result is a vector
that contains half as many elements, of an integral or floating point type
whose size is twice as wide.  In the case of <code>VEC_UNPACK_HI_EXPR</code> the
high <code>N/2</code> elements of the vector are extracted and widened (promoted).
In the case of <code>VEC_UNPACK_LO_EXPR</code> the low <code>N/2</code> elements of the
vector are extracted and widened (promoted).
</p>
</dd>
<dt><code>VEC_UNPACK_FLOAT_HI_EXPR</code></dt>
<dt><code>VEC_UNPACK_FLOAT_LO_EXPR</code></dt>
<dd><p>These nodes represent unpacking of the high and low parts of the input vector,
where the values are converted from fixed point to floating point.  The
single operand is a vector that contains <code>N</code> elements of the same
integral type.  The result is a vector that contains half as many elements
of a floating point type whose size is twice as wide.  In the case of
<code>VEC_UNPACK_HI_EXPR</code> the high <code>N/2</code> elements of the vector are
extracted, converted and widened.  In the case of <code>VEC_UNPACK_LO_EXPR</code>
the low <code>N/2</code> elements of the vector are extracted, converted and widened.
</p>
</dd>
<dt><code>VEC_PACK_TRUNC_EXPR</code></dt>
<dd><p>This node represents packing of truncated elements of the two input vectors
into the output vector.  Input operands are vectors that contain the same
number of elements of the same integral or floating point type.  The result
is a vector that contains twice as many elements of an integral or floating
point type whose size is half as wide. The elements of the two vectors are
demoted and merged (concatenated) to form the output vector.
</p>
</dd>
<dt><code>VEC_PACK_SAT_EXPR</code></dt>
<dd><p>This node represents packing of elements of the two input vectors into the
output vector using saturation.  Input operands are vectors that contain
the same number of elements of the same integral type.  The result is a
vector that contains twice as many elements of an integral type whose size
is half as wide.  The elements of the two vectors are demoted and merged
(concatenated) to form the output vector.
</p>
</dd>
<dt><code>VEC_PACK_FIX_TRUNC_EXPR</code></dt>
<dd><p>This node represents packing of elements of the two input vectors into the
output vector, where the values are converted from floating point
to fixed point.  Input operands are vectors that contain the same number
of elements of a floating point type.  The result is a vector that contains
twice as many elements of an integral type whose size is half as wide.  The
elements of the two vectors are merged (concatenated) to form the output
vector.
</p>
</dd>
<dt><code>VEC_COND_EXPR</code></dt>
<dd><p>These nodes represent <code>?:</code> expressions.  The three operands must be
vectors of the same size and number of elements.  The second and third
operands must have the same type as the entire expression.  The first
operand is of signed integral vector type.  If an element of the first
operand evaluates to a zero value, the corresponding element of the
result is taken from the third operand. If it evaluates to a minus one
value, it is taken from the second operand. It should never evaluate to
any other value currently, but optimizations should not rely on that
property. In contrast with a <code>COND_EXPR</code>, all operands are always
evaluated.
</p></dd>
</dl>



<hr>
<a name="Statements"></a>
<div class="header">
<p>
Next: <a href="#Functions" accesskey="n" rel="next">Functions</a>, Previous: <a href="#Expression-trees" accesskey="p" rel="prev">Expression trees</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Statements-1"></a>
<h3 class="section">11.7 Statements</h3>
<a name="index-Statements"></a>

<p>Most statements in GIMPLE are assignment statements, represented by
<code>GIMPLE_ASSIGN</code>.  No other C expressions can appear at statement level;
a reference to a volatile object is converted into a
<code>GIMPLE_ASSIGN</code>.
</p>
<p>There are also several varieties of complex statements.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Basic-Statements" accesskey="1">Basic Statements</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Blocks" accesskey="2">Blocks</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Statement-Sequences" accesskey="3">Statement Sequences</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Empty-Statements" accesskey="4">Empty Statements</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Jumps" accesskey="5">Jumps</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Cleanups" accesskey="6">Cleanups</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#OpenMP" accesskey="7">OpenMP</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>

<hr>
<a name="Basic-Statements"></a>
<div class="header">
<p>
Next: <a href="#Blocks" accesskey="n" rel="next">Blocks</a>, Up: <a href="#Statements" accesskey="u" rel="up">Statements</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Basic-Statements-1"></a>
<h4 class="subsection">11.7.1 Basic Statements</h4>
<a name="index-Basic-Statements"></a>

<dl compact="compact">
<dt><code>ASM_EXPR</code></dt>
<dd>
<p>Used to represent an inline assembly statement.  For an inline assembly
statement like:
</p><div class="smallexample">
<pre class="smallexample">asm (&quot;mov x, y&quot;);
</pre></div>
<p>The <code>ASM_STRING</code> macro will return a <code>STRING_CST</code> node for
<code>&quot;mov x, y&quot;</code>.  If the original statement made use of the
extended-assembly syntax, then <code>ASM_OUTPUTS</code>,
<code>ASM_INPUTS</code>, and <code>ASM_CLOBBERS</code> will be the outputs, inputs,
and clobbers for the statement, represented as <code>STRING_CST</code> nodes.
The extended-assembly syntax looks like:
</p><div class="smallexample">
<pre class="smallexample">asm (&quot;fsinx %1,%0&quot; : &quot;=f&quot; (result) : &quot;f&quot; (angle));
</pre></div>
<p>The first string is the <code>ASM_STRING</code>, containing the instruction
template.  The next two strings are the output and inputs, respectively;
this statement has no clobbers.  As this example indicates, &ldquo;plain&rdquo;
assembly statements are merely a special case of extended assembly
statements; they have no cv-qualifiers, outputs, inputs, or clobbers.
All of the strings will be <code>NUL</code>-terminated, and will contain no
embedded <code>NUL</code>-characters.
</p>
<p>If the assembly statement is declared <code>volatile</code>, or if the
statement was not an extended assembly statement, and is therefore
implicitly volatile, then the predicate <code>ASM_VOLATILE_P</code> will hold
of the <code>ASM_EXPR</code>.
</p>
</dd>
<dt><code>DECL_EXPR</code></dt>
<dd>
<p>Used to represent a local declaration.  The <code>DECL_EXPR_DECL</code> macro
can be used to obtain the entity declared.  This declaration may be a
<code>LABEL_DECL</code>, indicating that the label declared is a local label.
(As an extension, GCC allows the declaration of labels with scope.)  In
C, this declaration may be a <code>FUNCTION_DECL</code>, indicating the
use of the GCC nested function extension.  For more information,
see <a href="#Functions">Functions</a>.
</p>
</dd>
<dt><code>LABEL_EXPR</code></dt>
<dd>
<p>Used to represent a label.  The <code>LABEL_DECL</code> declared by this
statement can be obtained with the <code>LABEL_EXPR_LABEL</code> macro.  The
<code>IDENTIFIER_NODE</code> giving the name of the label can be obtained from
the <code>LABEL_DECL</code> with <code>DECL_NAME</code>.
</p>
</dd>
<dt><code>GOTO_EXPR</code></dt>
<dd>
<p>Used to represent a <code>goto</code> statement.  The <code>GOTO_DESTINATION</code> will
usually be a <code>LABEL_DECL</code>.  However, if the &ldquo;computed goto&rdquo; extension
has been used, the <code>GOTO_DESTINATION</code> will be an arbitrary expression
indicating the destination.  This expression will always have pointer type.
</p>
</dd>
<dt><code>RETURN_EXPR</code></dt>
<dd>
<p>Used to represent a <code>return</code> statement.  Operand 0 represents the
value to return.  It should either be the <code>RESULT_DECL</code> for the
containing function, or a <code>MODIFY_EXPR</code> or <code>INIT_EXPR</code>
setting the function&rsquo;s <code>RESULT_DECL</code>.  It will be
<code>NULL_TREE</code> if the statement was just
</p><div class="smallexample">
<pre class="smallexample">return;
</pre></div>

</dd>
<dt><code>LOOP_EXPR</code></dt>
<dd><p>These nodes represent &ldquo;infinite&rdquo; loops.  The <code>LOOP_EXPR_BODY</code>
represents the body of the loop.  It should be executed forever, unless
an <code>EXIT_EXPR</code> is encountered.
</p>
</dd>
<dt><code>EXIT_EXPR</code></dt>
<dd><p>These nodes represent conditional exits from the nearest enclosing
<code>LOOP_EXPR</code>.  The single operand is the condition; if it is
nonzero, then the loop should be exited.  An <code>EXIT_EXPR</code> will only
appear within a <code>LOOP_EXPR</code>.
</p>
</dd>
<dt><code>SWITCH_STMT</code></dt>
<dd>
<p>Used to represent a <code>switch</code> statement.  The <code>SWITCH_STMT_COND</code>
is the expression on which the switch is occurring.  See the documentation
for an <code>IF_STMT</code> for more information on the representation used
for the condition.  The <code>SWITCH_STMT_BODY</code> is the body of the switch
statement.   The <code>SWITCH_STMT_TYPE</code> is the original type of switch
expression as given in the source, before any compiler conversions.
</p>
</dd>
<dt><code>CASE_LABEL_EXPR</code></dt>
<dd>
<p>Use to represent a <code>case</code> label, range of <code>case</code> labels, or a
<code>default</code> label.  If <code>CASE_LOW</code> is <code>NULL_TREE</code>, then this is a
<code>default</code> label.  Otherwise, if <code>CASE_HIGH</code> is <code>NULL_TREE</code>, then
this is an ordinary <code>case</code> label.  In this case, <code>CASE_LOW</code> is
an expression giving the value of the label.  Both <code>CASE_LOW</code> and
<code>CASE_HIGH</code> are <code>INTEGER_CST</code> nodes.  These values will have
the same type as the condition expression in the switch statement.
</p>
<p>Otherwise, if both <code>CASE_LOW</code> and <code>CASE_HIGH</code> are defined, the
statement is a range of case labels.  Such statements originate with the
extension that allows users to write things of the form:
</p><div class="smallexample">
<pre class="smallexample">case 2 ... 5:
</pre></div>
<p>The first value will be <code>CASE_LOW</code>, while the second will be
<code>CASE_HIGH</code>.
</p>
</dd>
</dl>


<hr>
<a name="Blocks"></a>
<div class="header">
<p>
Next: <a href="#Statement-Sequences" accesskey="n" rel="next">Statement Sequences</a>, Previous: <a href="#Basic-Statements" accesskey="p" rel="prev">Basic Statements</a>, Up: <a href="#Statements" accesskey="u" rel="up">Statements</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Blocks-1"></a>
<h4 class="subsection">11.7.2 Blocks</h4>
<a name="index-Blocks"></a>

<p>Block scopes and the variables they declare in GENERIC are
expressed using the <code>BIND_EXPR</code> code, which in previous
versions of GCC was primarily used for the C statement-expression
extension.
</p>
<p>Variables in a block are collected into <code>BIND_EXPR_VARS</code> in
declaration order through their <code>TREE_CHAIN</code> field.  Any runtime
initialization is moved out of <code>DECL_INITIAL</code> and into a
statement in the controlled block.  When gimplifying from C or C++,
this initialization replaces the <code>DECL_STMT</code>.  These variables
will never require cleanups.  The scope of these variables is just the
body
</p>
<p>Variable-length arrays (VLAs) complicate this process, as their
size often refers to variables initialized earlier in the block.
To handle this, we currently split the block at that point, and
move the VLA into a new, inner <code>BIND_EXPR</code>.  This strategy
may change in the future.
</p>
<p>A C++ program will usually contain more <code>BIND_EXPR</code>s than
there are syntactic blocks in the source code, since several C++
constructs have implicit scopes associated with them.  On the
other hand, although the C++ front end uses pseudo-scopes to
handle cleanups for objects with destructors, these don&rsquo;t
translate into the GIMPLE form; multiple declarations at the same
level use the same <code>BIND_EXPR</code>.
</p>
<hr>
<a name="Statement-Sequences"></a>
<div class="header">
<p>
Next: <a href="#Empty-Statements" accesskey="n" rel="next">Empty Statements</a>, Previous: <a href="#Blocks" accesskey="p" rel="prev">Blocks</a>, Up: <a href="#Statements" accesskey="u" rel="up">Statements</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Statement-Sequences-1"></a>
<h4 class="subsection">11.7.3 Statement Sequences</h4>
<a name="index-Statement-Sequences"></a>

<p>Multiple statements at the same nesting level are collected into
a <code>STATEMENT_LIST</code>.  Statement lists are modified and
traversed using the interface in &lsquo;<samp>tree-iterator.h</samp>&rsquo;.
</p>
<hr>
<a name="Empty-Statements"></a>
<div class="header">
<p>
Next: <a href="#Jumps" accesskey="n" rel="next">Jumps</a>, Previous: <a href="#Statement-Sequences" accesskey="p" rel="prev">Statement Sequences</a>, Up: <a href="#Statements" accesskey="u" rel="up">Statements</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Empty-Statements-1"></a>
<h4 class="subsection">11.7.4 Empty Statements</h4>
<a name="index-Empty-Statements"></a>

<p>Whenever possible, statements with no effect are discarded.  But
if they are nested within another construct which cannot be
discarded for some reason, they are instead replaced with an
empty statement, generated by <code>build_empty_stmt</code>.
Initially, all empty statements were shared, after the pattern of
the Java front end, but this caused a lot of trouble in practice.
</p>
<p>An empty statement is represented as <code>(void)0</code>.
</p>
<hr>
<a name="Jumps"></a>
<div class="header">
<p>
Next: <a href="#Cleanups" accesskey="n" rel="next">Cleanups</a>, Previous: <a href="#Empty-Statements" accesskey="p" rel="prev">Empty Statements</a>, Up: <a href="#Statements" accesskey="u" rel="up">Statements</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Jumps-1"></a>
<h4 class="subsection">11.7.5 Jumps</h4>
<a name="index-Jumps"></a>

<p>Other jumps are expressed by either <code>GOTO_EXPR</code> or
<code>RETURN_EXPR</code>.
</p>
<p>The operand of a <code>GOTO_EXPR</code> must be either a label or a
variable containing the address to jump to.
</p>
<p>The operand of a <code>RETURN_EXPR</code> is either <code>NULL_TREE</code>,
<code>RESULT_DECL</code>, or a <code>MODIFY_EXPR</code> which sets the return
value.  It would be nice to move the <code>MODIFY_EXPR</code> into a
separate statement, but the special return semantics in
<code>expand_return</code> make that difficult.  It may still happen in
the future, perhaps by moving most of that logic into
<code>expand_assignment</code>.
</p>
<hr>
<a name="Cleanups"></a>
<div class="header">
<p>
Next: <a href="#OpenMP" accesskey="n" rel="next">OpenMP</a>, Previous: <a href="#Jumps" accesskey="p" rel="prev">Jumps</a>, Up: <a href="#Statements" accesskey="u" rel="up">Statements</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Cleanups-1"></a>
<h4 class="subsection">11.7.6 Cleanups</h4>
<a name="index-Cleanups"></a>

<p>Destructors for local C++ objects and similar dynamic cleanups are
represented in GIMPLE by a <code>TRY_FINALLY_EXPR</code>.
<code>TRY_FINALLY_EXPR</code> has two operands, both of which are a sequence
of statements to execute.  The first sequence is executed.  When it
completes the second sequence is executed.
</p>
<p>The first sequence may complete in the following ways:
</p>
<ol>
<li> Execute the last statement in the sequence and fall off the
end.

</li><li> Execute a goto statement (<code>GOTO_EXPR</code>) to an ordinary
label outside the sequence.

</li><li> Execute a return statement (<code>RETURN_EXPR</code>).

</li><li> Throw an exception.  This is currently not explicitly represented in
GIMPLE.

</li></ol>

<p>The second sequence is not executed if the first sequence completes by
calling <code>setjmp</code> or <code>exit</code> or any other function that does
not return.  The second sequence is also not executed if the first
sequence completes via a non-local goto or a computed goto (in general
the compiler does not know whether such a goto statement exits the
first sequence or not, so we assume that it doesn&rsquo;t).
</p>
<p>After the second sequence is executed, if it completes normally by
falling off the end, execution continues wherever the first sequence
would have continued, by falling off the end, or doing a goto, etc.
</p>
<p><code>TRY_FINALLY_EXPR</code> complicates the flow graph, since the cleanup
needs to appear on every edge out of the controlled block; this
reduces the freedom to move code across these edges.  Therefore, the
EH lowering pass which runs before most of the optimization passes
eliminates these expressions by explicitly adding the cleanup to each
edge.  Rethrowing the exception is represented using <code>RESX_EXPR</code>.
</p>
<hr>
<a name="OpenMP"></a>
<div class="header">
<p>
Previous: <a href="#Cleanups" accesskey="p" rel="prev">Cleanups</a>, Up: <a href="#Statements" accesskey="u" rel="up">Statements</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="OpenMP-1"></a>
<h4 class="subsection">11.7.7 OpenMP</h4>
<a name="index-OMP_005fPARALLEL"></a>
<a name="index-OMP_005fFOR"></a>
<a name="index-OMP_005fSECTIONS"></a>
<a name="index-OMP_005fSINGLE"></a>
<a name="index-OMP_005fSECTION"></a>
<a name="index-OMP_005fMASTER"></a>
<a name="index-OMP_005fORDERED"></a>
<a name="index-OMP_005fCRITICAL"></a>
<a name="index-OMP_005fRETURN"></a>
<a name="index-OMP_005fCONTINUE"></a>
<a name="index-OMP_005fATOMIC"></a>
<a name="index-OMP_005fCLAUSE"></a>

<p>All the statements starting with <code>OMP_</code> represent directives and
clauses used by the OpenMP API <a href="http://www.openmp.org/">http://www.openmp.org/</a><!-- /@w -->.
</p>
<dl compact="compact">
<dt><code>OMP_PARALLEL</code></dt>
<dd>
<p>Represents <code>#pragma omp parallel [clause1 &hellip; clauseN]</code>. It
has four operands:
</p>
<p>Operand <code>OMP_PARALLEL_BODY</code> is valid while in GENERIC and
High GIMPLE forms.  It contains the body of code to be executed
by all the threads.  During GIMPLE lowering, this operand becomes
<code>NULL</code> and the body is emitted linearly after
<code>OMP_PARALLEL</code>.
</p>
<p>Operand <code>OMP_PARALLEL_CLAUSES</code> is the list of clauses
associated with the directive.
</p>
<p>Operand <code>OMP_PARALLEL_FN</code> is created by
<code>pass_lower_omp</code>, it contains the <code>FUNCTION_DECL</code>
for the function that will contain the body of the parallel
region.
</p>
<p>Operand <code>OMP_PARALLEL_DATA_ARG</code> is also created by
<code>pass_lower_omp</code>. If there are shared variables to be
communicated to the children threads, this operand will contain
the <code>VAR_DECL</code> that contains all the shared values and
variables.
</p>
</dd>
<dt><code>OMP_FOR</code></dt>
<dd>
<p>Represents <code>#pragma omp for [clause1 &hellip; clauseN]</code>.  It
has 5 operands:
</p>
<p>Operand <code>OMP_FOR_BODY</code> contains the loop body.
</p>
<p>Operand <code>OMP_FOR_CLAUSES</code> is the list of clauses
associated with the directive.
</p>
<p>Operand <code>OMP_FOR_INIT</code> is the loop initialization code of
the form <code>VAR = N1</code>.
</p>
<p>Operand <code>OMP_FOR_COND</code> is the loop conditional expression
of the form <code>VAR {&lt;,&gt;,&lt;=,&gt;=} N2</code>.
</p>
<p>Operand <code>OMP_FOR_INCR</code> is the loop index increment of the
form <code>VAR {+=,-=} INCR</code>.
</p>
<p>Operand <code>OMP_FOR_PRE_BODY</code> contains side-effect code from
operands <code>OMP_FOR_INIT</code>, <code>OMP_FOR_COND</code> and
<code>OMP_FOR_INC</code>.  These side-effects are part of the
<code>OMP_FOR</code> block but must be evaluated before the start of
loop body.
</p>
<p>The loop index variable <code>VAR</code> must be a signed integer variable,
which is implicitly private to each thread.  Bounds
<code>N1</code> and <code>N2</code> and the increment expression
<code>INCR</code> are required to be loop invariant integer
expressions that are evaluated without any synchronization. The
evaluation order, frequency of evaluation and side-effects are
unspecified by the standard.
</p>
</dd>
<dt><code>OMP_SECTIONS</code></dt>
<dd>
<p>Represents <code>#pragma omp sections [clause1 &hellip; clauseN]</code>.
</p>
<p>Operand <code>OMP_SECTIONS_BODY</code> contains the sections body,
which in turn contains a set of <code>OMP_SECTION</code> nodes for
each of the concurrent sections delimited by <code>#pragma omp
section</code>.
</p>
<p>Operand <code>OMP_SECTIONS_CLAUSES</code> is the list of clauses
associated with the directive.
</p>
</dd>
<dt><code>OMP_SECTION</code></dt>
<dd>
<p>Section delimiter for <code>OMP_SECTIONS</code>.
</p>
</dd>
<dt><code>OMP_SINGLE</code></dt>
<dd>
<p>Represents <code>#pragma omp single</code>.
</p>
<p>Operand <code>OMP_SINGLE_BODY</code> contains the body of code to be
executed by a single thread.
</p>
<p>Operand <code>OMP_SINGLE_CLAUSES</code> is the list of clauses
associated with the directive.
</p>
</dd>
<dt><code>OMP_MASTER</code></dt>
<dd>
<p>Represents <code>#pragma omp master</code>.
</p>
<p>Operand <code>OMP_MASTER_BODY</code> contains the body of code to be
executed by the master thread.
</p>
</dd>
<dt><code>OMP_ORDERED</code></dt>
<dd>
<p>Represents <code>#pragma omp ordered</code>.
</p>
<p>Operand <code>OMP_ORDERED_BODY</code> contains the body of code to be
executed in the sequential order dictated by the loop index
variable.
</p>
</dd>
<dt><code>OMP_CRITICAL</code></dt>
<dd>
<p>Represents <code>#pragma omp critical [name]</code>.
</p>
<p>Operand <code>OMP_CRITICAL_BODY</code> is the critical section.
</p>
<p>Operand <code>OMP_CRITICAL_NAME</code> is an optional identifier to
label the critical section.
</p>
</dd>
<dt><code>OMP_RETURN</code></dt>
<dd>
<p>This does not represent any OpenMP directive, it is an artificial
marker to indicate the end of the body of an OpenMP. It is used
by the flow graph (<code>tree-cfg.c</code>) and OpenMP region
building code (<code>omp-low.c</code>).
</p>
</dd>
<dt><code>OMP_CONTINUE</code></dt>
<dd>
<p>Similarly, this instruction does not represent an OpenMP
directive, it is used by <code>OMP_FOR</code> and
<code>OMP_SECTIONS</code> to mark the place where the code needs to
loop to the next iteration (in the case of <code>OMP_FOR</code>) or
the next section (in the case of <code>OMP_SECTIONS</code>).
</p>
<p>In some cases, <code>OMP_CONTINUE</code> is placed right before
<code>OMP_RETURN</code>.  But if there are cleanups that need to
occur right after the looping body, it will be emitted between
<code>OMP_CONTINUE</code> and <code>OMP_RETURN</code>.
</p>
</dd>
<dt><code>OMP_ATOMIC</code></dt>
<dd>
<p>Represents <code>#pragma omp atomic</code>.
</p>
<p>Operand 0 is the address at which the atomic operation is to be
performed.
</p>
<p>Operand 1 is the expression to evaluate.  The gimplifier tries
three alternative code generation strategies.  Whenever possible,
an atomic update built-in is used.  If that fails, a
compare-and-swap loop is attempted.  If that also fails, a
regular critical section around the expression is used.
</p>
</dd>
<dt><code>OMP_CLAUSE</code></dt>
<dd>
<p>Represents clauses associated with one of the <code>OMP_</code> directives.
Clauses are represented by separate sub-codes defined in
<samp>tree.h</samp>.  Clauses codes can be one of:
<code>OMP_CLAUSE_PRIVATE</code>, <code>OMP_CLAUSE_SHARED</code>,
<code>OMP_CLAUSE_FIRSTPRIVATE</code>,
<code>OMP_CLAUSE_LASTPRIVATE</code>, <code>OMP_CLAUSE_COPYIN</code>,
<code>OMP_CLAUSE_COPYPRIVATE</code>, <code>OMP_CLAUSE_IF</code>,
<code>OMP_CLAUSE_NUM_THREADS</code>, <code>OMP_CLAUSE_SCHEDULE</code>,
<code>OMP_CLAUSE_NOWAIT</code>, <code>OMP_CLAUSE_ORDERED</code>,
<code>OMP_CLAUSE_DEFAULT</code>, <code>OMP_CLAUSE_REDUCTION</code>,
<code>OMP_CLAUSE_COLLAPSE</code>, <code>OMP_CLAUSE_UNTIED</code>,
<code>OMP_CLAUSE_FINAL</code>, and <code>OMP_CLAUSE_MERGEABLE</code>.  Each code
represents the corresponding OpenMP clause.
</p>
<p>Clauses associated with the same directive are chained together
via <code>OMP_CLAUSE_CHAIN</code>. Those clauses that accept a list
of variables are restricted to exactly one, accessed with
<code>OMP_CLAUSE_VAR</code>.  Therefore, multiple variables under the
same clause <code>C</code> need to be represented as multiple <code>C</code> clauses
chained together.  This facilitates adding new clauses during
compilation.
</p>
</dd>
</dl>


<hr>
<a name="Functions"></a>
<div class="header">
<p>
Next: <a href="#Language_002ddependent-trees" accesskey="n" rel="next">Language-dependent trees</a>, Previous: <a href="#Statements" accesskey="p" rel="prev">Statements</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Functions-1"></a>
<h3 class="section">11.8 Functions</h3>
<a name="index-function"></a>
<a name="index-FUNCTION_005fDECL"></a>

<p>A function is represented by a <code>FUNCTION_DECL</code> node.  It stores
the basic pieces of the function such as body, parameters, and return
type as well as information on the surrounding context, visibility,
and linkage.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Function-Basics" accesskey="1">Function Basics</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Function names, body, and parameters.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Function-Properties" accesskey="2">Function Properties</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Context, linkage, etc.
</td></tr>
</table>


<hr>
<a name="Function-Basics"></a>
<div class="header">
<p>
Next: <a href="#Function-Properties" accesskey="n" rel="next">Function Properties</a>, Up: <a href="#Functions" accesskey="u" rel="up">Functions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Function-Basics-1"></a>
<h4 class="subsection">11.8.1 Function Basics</h4>
<a name="index-DECL_005fNAME-1"></a>
<a name="index-DECL_005fASSEMBLER_005fNAME"></a>
<a name="index-TREE_005fPUBLIC"></a>
<a name="index-DECL_005fARTIFICIAL-1"></a>
<a name="index-DECL_005fFUNCTION_005fSPECIFIC_005fTARGET"></a>
<a name="index-DECL_005fFUNCTION_005fSPECIFIC_005fOPTIMIZATION"></a>

<p>A function has four core parts: the name, the parameters, the result,
and the body.  The following macros and functions access these parts
of a <code>FUNCTION_DECL</code> as well as other basic features:
</p><dl compact="compact">
<dt><code>DECL_NAME</code>
<a name="index-DECL_005fNAME-2"></a>
</dt>
<dd><p>This macro returns the unqualified name of the function, as an
<code>IDENTIFIER_NODE</code>.  For an instantiation of a function template,
the <code>DECL_NAME</code> is the unqualified name of the template, not
something like <code>f&lt;int&gt;</code>.  The value of <code>DECL_NAME</code> is
undefined when used on a constructor, destructor, overloaded operator,
or type-conversion operator, or any function that is implicitly
generated by the compiler.  See below for macros that can be used to
distinguish these cases.
</p>
</dd>
<dt><code>DECL_ASSEMBLER_NAME</code>
<a name="index-DECL_005fASSEMBLER_005fNAME-1"></a>
</dt>
<dd><p>This macro returns the mangled name of the function, also an
<code>IDENTIFIER_NODE</code>.  This name does not contain leading underscores
on systems that prefix all identifiers with underscores.  The mangled
name is computed in the same way on all platforms; if special processing
is required to deal with the object file format used on a particular
platform, it is the responsibility of the back end to perform those
modifications.  (Of course, the back end should not modify
<code>DECL_ASSEMBLER_NAME</code> itself.)
</p>
<p>Using <code>DECL_ASSEMBLER_NAME</code> will cause additional memory to be
allocated (for the mangled name of the entity) so it should be used
only when emitting assembly code.  It should not be used within the
optimizers to determine whether or not two declarations are the same,
even though some of the existing optimizers do use it in that way.
These uses will be removed over time.
</p>
</dd>
<dt><code>DECL_ARGUMENTS</code>
<a name="index-DECL_005fARGUMENTS"></a>
</dt>
<dd><p>This macro returns the <code>PARM_DECL</code> for the first argument to the
function.  Subsequent <code>PARM_DECL</code> nodes can be obtained by
following the <code>TREE_CHAIN</code> links.
</p>
</dd>
<dt><code>DECL_RESULT</code>
<a name="index-DECL_005fRESULT"></a>
</dt>
<dd><p>This macro returns the <code>RESULT_DECL</code> for the function.
</p>
</dd>
<dt><code>DECL_SAVED_TREE</code>
<a name="index-DECL_005fSAVED_005fTREE"></a>
</dt>
<dd><p>This macro returns the complete body of the function.
</p>
</dd>
<dt><code>TREE_TYPE</code>
<a name="index-TREE_005fTYPE-5"></a>
</dt>
<dd><p>This macro returns the <code>FUNCTION_TYPE</code> or <code>METHOD_TYPE</code> for
the function.
</p>
</dd>
<dt><code>DECL_INITIAL</code>
<a name="index-DECL_005fINITIAL-1"></a>
</dt>
<dd><p>A function that has a definition in the current translation unit will
have a non-<code>NULL</code> <code>DECL_INITIAL</code>.  However, back ends should not make
use of the particular value given by <code>DECL_INITIAL</code>.
</p>
<p>It should contain a tree of <code>BLOCK</code> nodes that mirrors the scopes
that variables are bound in the function.  Each block contains a list
of decls declared in a basic block, a pointer to a chain of blocks at
the next lower scope level, then a pointer to the next block at the
same level and a backpointer to the parent <code>BLOCK</code> or
<code>FUNCTION_DECL</code>.  So given a function as follows:
</p>
<div class="smallexample">
<pre class="smallexample">void foo()
{
  int a;
  {
    int b;
  }
  int c;
}
</pre></div>

<p>you would get the following:
</p>
<div class="smallexample">
<pre class="smallexample">tree foo = FUNCTION_DECL;
tree decl_a = VAR_DECL;
tree decl_b = VAR_DECL;
tree decl_c = VAR_DECL;
tree block_a = BLOCK;
tree block_b = BLOCK;
tree block_c = BLOCK;
BLOCK_VARS(block_a) = decl_a;
BLOCK_SUBBLOCKS(block_a) = block_b;
BLOCK_CHAIN(block_a) = block_c;
BLOCK_SUPERCONTEXT(block_a) = foo;
BLOCK_VARS(block_b) = decl_b;
BLOCK_SUPERCONTEXT(block_b) = block_a;
BLOCK_VARS(block_c) = decl_c;
BLOCK_SUPERCONTEXT(block_c) = foo;
DECL_INITIAL(foo) = block_a;
</pre></div>

</dd>
</dl>


<hr>
<a name="Function-Properties"></a>
<div class="header">
<p>
Previous: <a href="#Function-Basics" accesskey="p" rel="prev">Function Basics</a>, Up: <a href="#Functions" accesskey="u" rel="up">Functions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Function-Properties-1"></a>
<h4 class="subsection">11.8.2 Function Properties</h4>
<a name="index-function-properties"></a>
<a name="index-statements"></a>

<p>To determine the scope of a function, you can use the
<code>DECL_CONTEXT</code> macro.  This macro will return the class
(either a <code>RECORD_TYPE</code> or a <code>UNION_TYPE</code>) or namespace (a
<code>NAMESPACE_DECL</code>) of which the function is a member.  For a virtual
function, this macro returns the class in which the function was
actually defined, not the base class in which the virtual declaration
occurred.
</p>
<p>In C, the <code>DECL_CONTEXT</code> for a function maybe another function.
This representation indicates that the GNU nested function extension
is in use.  For details on the semantics of nested functions, see the
GCC Manual.  The nested function can refer to local variables in its
containing function.  Such references are not explicitly marked in the
tree structure; back ends must look at the <code>DECL_CONTEXT</code> for the
referenced <code>VAR_DECL</code>.  If the <code>DECL_CONTEXT</code> for the
referenced <code>VAR_DECL</code> is not the same as the function currently
being processed, and neither <code>DECL_EXTERNAL</code> nor
<code>TREE_STATIC</code> hold, then the reference is to a local variable in
a containing function, and the back end must take appropriate action.
</p>
<dl compact="compact">
<dt><code>DECL_EXTERNAL</code>
<a name="index-DECL_005fEXTERNAL-1"></a>
</dt>
<dd><p>This predicate holds if the function is undefined.
</p>
</dd>
<dt><code>TREE_PUBLIC</code>
<a name="index-TREE_005fPUBLIC-1"></a>
</dt>
<dd><p>This predicate holds if the function has external linkage.
</p>
</dd>
<dt><code>TREE_STATIC</code>
<a name="index-TREE_005fSTATIC"></a>
</dt>
<dd><p>This predicate holds if the function has been defined.
</p>
</dd>
<dt><code>TREE_THIS_VOLATILE</code>
<a name="index-TREE_005fTHIS_005fVOLATILE"></a>
</dt>
<dd><p>This predicate holds if the function does not return normally.
</p>
</dd>
<dt><code>TREE_READONLY</code>
<a name="index-TREE_005fREADONLY"></a>
</dt>
<dd><p>This predicate holds if the function can only read its arguments.
</p>
</dd>
<dt><code>DECL_PURE_P</code>
<a name="index-DECL_005fPURE_005fP"></a>
</dt>
<dd><p>This predicate holds if the function can only read its arguments, but
may also read global memory.
</p>
</dd>
<dt><code>DECL_VIRTUAL_P</code>
<a name="index-DECL_005fVIRTUAL_005fP"></a>
</dt>
<dd><p>This predicate holds if the function is virtual.
</p>
</dd>
<dt><code>DECL_ARTIFICIAL</code>
<a name="index-DECL_005fARTIFICIAL-2"></a>
</dt>
<dd><p>This macro holds if the function was implicitly generated by the
compiler, rather than explicitly declared.  In addition to implicitly
generated class member functions, this macro holds for the special
functions created to implement static initialization and destruction, to
compute run-time type information, and so forth.
</p>
</dd>
<dt><code>DECL_FUNCTION_SPECIFIC_TARGET</code>
<a name="index-DECL_005fFUNCTION_005fSPECIFIC_005fTARGET-1"></a>
</dt>
<dd><p>This macro returns a tree node that holds the target options that are
to be used to compile this particular function or <code>NULL_TREE</code> if
the function is to be compiled with the target options specified on
the command line.
</p>
</dd>
<dt><code>DECL_FUNCTION_SPECIFIC_OPTIMIZATION</code>
<a name="index-DECL_005fFUNCTION_005fSPECIFIC_005fOPTIMIZATION-1"></a>
</dt>
<dd><p>This macro returns a tree node that holds the optimization options
that are to be used to compile this particular function or
<code>NULL_TREE</code> if the function is to be compiled with the
optimization options specified on the command line.
</p>
</dd>
</dl>


<hr>
<a name="Language_002ddependent-trees"></a>
<div class="header">
<p>
Next: <a href="#C-and-C_002b_002b-Trees" accesskey="n" rel="next">C and C++ Trees</a>, Previous: <a href="#Functions" accesskey="p" rel="prev">Functions</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Language_002ddependent-trees-1"></a>
<h3 class="section">11.9 Language-dependent trees</h3>
<a name="index-language_002ddependent-trees"></a>

<p>Front ends may wish to keep some state associated with various GENERIC
trees while parsing.  To support this, trees provide a set of flags
that may be used by the front end.  They are accessed using
<code>TREE_LANG_FLAG_n</code> where &lsquo;<samp>n</samp>&rsquo; is currently 0 through 6.
</p>
<p>If necessary, a front end can use some language-dependent tree
codes in its GENERIC representation, so long as it provides a
hook for converting them to GIMPLE and doesn&rsquo;t expect them to
work with any (hypothetical) optimizers that run before the
conversion to GIMPLE. The intermediate representation used while
parsing C and C++ looks very little like GENERIC, but the C and
C++ gimplifier hooks are perfectly happy to take it as input and
spit out GIMPLE.
</p>


<hr>
<a name="C-and-C_002b_002b-Trees"></a>
<div class="header">
<p>
Next: <a href="#Java-Trees" accesskey="n" rel="next">Java Trees</a>, Previous: <a href="#Language_002ddependent-trees" accesskey="p" rel="prev">Language-dependent trees</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="C-and-C_002b_002b-Trees-1"></a>
<h3 class="section">11.10 C and C++ Trees</h3>

<p>This section documents the internal representation used by GCC to
represent C and C++ source programs.  When presented with a C or C++
source program, GCC parses the program, performs semantic analysis
(including the generation of error messages), and then produces the
internal representation described here.  This representation contains a
complete representation for the entire translation unit provided as
input to the front end.  This representation is then typically processed
by a code-generator in order to produce machine code, but could also be
used in the creation of source browsers, intelligent editors, automatic
documentation generators, interpreters, and any other programs needing
the ability to process C or C++ code.
</p>
<p>This section explains the internal representation.  In particular, it
documents the internal representation for C and C++ source
constructs, and the macros, functions, and variables that can be used to
access these constructs.  The C++ representation is largely a superset
of the representation used in the C front end.  There is only one
construct used in C that does not appear in the C++ front end and that
is the GNU &ldquo;nested function&rdquo; extension.  Many of the macros documented
here do not apply in C because the corresponding language constructs do
not appear in C.
</p>
<p>The C and C++ front ends generate a mix of GENERIC trees and ones
specific to C and C++.  These language-specific trees are higher-level
constructs than the ones in GENERIC to make the parser&rsquo;s job easier.
This section describes those trees that aren&rsquo;t part of GENERIC as well
as aspects of GENERIC trees that are treated in a language-specific
manner.
</p>
<p>If you are developing a &ldquo;back end&rdquo;, be it is a code-generator or some
other tool, that uses this representation, you may occasionally find
that you need to ask questions not easily answered by the functions and
macros available here.  If that situation occurs, it is quite likely
that GCC already supports the functionality you desire, but that the
interface is simply not documented here.  In that case, you should ask
the GCC maintainers (via mail to <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>) about
documenting the functionality you require.  Similarly, if you find
yourself writing functions that do not deal directly with your back end,
but instead might be useful to other people using the GCC front end, you
should submit your patches for inclusion in GCC.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Types-for-C_002b_002b" accesskey="1">Types for C++</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Fundamental and aggregate types.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Namespaces" accesskey="2">Namespaces</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Namespaces.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Classes" accesskey="3">Classes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Classes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Functions-for-C_002b_002b" accesskey="4">Functions for C++</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Overloading and accessors for C++.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Statements-for-C_002b_002b" accesskey="5">Statements for C++</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Statements specific to C and C++.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#C_002b_002b-Expressions" accesskey="6">C++ Expressions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">From <code>typeid</code> to <code>throw</code>.
</td></tr>
</table>

<hr>
<a name="Types-for-C_002b_002b"></a>
<div class="header">
<p>
Next: <a href="#Namespaces" accesskey="n" rel="next">Namespaces</a>, Up: <a href="#C-and-C_002b_002b-Trees" accesskey="u" rel="up">C and C++ Trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Types-for-C_002b_002b-1"></a>
<h4 class="subsection">11.10.1 Types for C++</h4>
<a name="index-UNKNOWN_005fTYPE-1"></a>
<a name="index-TYPENAME_005fTYPE"></a>
<a name="index-TYPEOF_005fTYPE"></a>
<a name="index-cp_005ftype_005fquals"></a>
<a name="index-TYPE_005fUNQUALIFIED-1"></a>
<a name="index-TYPE_005fQUAL_005fCONST-1"></a>
<a name="index-TYPE_005fQUAL_005fVOLATILE-1"></a>
<a name="index-TYPE_005fQUAL_005fRESTRICT-1"></a>
<a name="index-TYPE_005fMAIN_005fVARIANT-2"></a>
<a name="index-qualified-type-1"></a>
<a name="index-TYPE_005fSIZE-2"></a>
<a name="index-TYPE_005fALIGN-2"></a>
<a name="index-TYPE_005fPRECISION-1"></a>
<a name="index-TYPE_005fARG_005fTYPES-1"></a>
<a name="index-TYPE_005fMETHOD_005fBASETYPE-1"></a>
<a name="index-TYPE_005fPTRDATAMEM_005fP"></a>
<a name="index-TYPE_005fOFFSET_005fBASETYPE-1"></a>
<a name="index-TREE_005fTYPE-6"></a>
<a name="index-TYPE_005fCONTEXT-1"></a>
<a name="index-TYPE_005fNAME-2"></a>
<a name="index-TYPENAME_005fTYPE_005fFULLNAME-1"></a>
<a name="index-TYPE_005fFIELDS-1"></a>
<a name="index-TYPE_005fPTROBV_005fP"></a>

<p>In C++, an array type is not qualified; rather the type of the array
elements is qualified.  This situation is reflected in the intermediate
representation.  The macros described here will always examine the
qualification of the underlying element type when applied to an array
type.  (If the element type is itself an array, then the recursion
continues until a non-array type is found, and the qualification of this
type is examined.)  So, for example, <code>CP_TYPE_CONST_P</code> will hold of
the type <code>const int ()[7]</code>, denoting an array of seven <code>int</code>s.
</p>
<p>The following functions and macros deal with cv-qualification of types:
</p><dl compact="compact">
<dt><code>cp_type_quals</code>
<a name="index-cp_005ftype_005fquals-1"></a>
</dt>
<dd><p>This function returns the set of type qualifiers applied to this type.
This value is <code>TYPE_UNQUALIFIED</code> if no qualifiers have been
applied.  The <code>TYPE_QUAL_CONST</code> bit is set if the type is
<code>const</code>-qualified.  The <code>TYPE_QUAL_VOLATILE</code> bit is set if the
type is <code>volatile</code>-qualified.  The <code>TYPE_QUAL_RESTRICT</code> bit is
set if the type is <code>restrict</code>-qualified.
</p>
</dd>
<dt><code>CP_TYPE_CONST_P</code>
<a name="index-CP_005fTYPE_005fCONST_005fP"></a>
</dt>
<dd><p>This macro holds if the type is <code>const</code>-qualified.
</p>
</dd>
<dt><code>CP_TYPE_VOLATILE_P</code>
<a name="index-CP_005fTYPE_005fVOLATILE_005fP"></a>
</dt>
<dd><p>This macro holds if the type is <code>volatile</code>-qualified.
</p>
</dd>
<dt><code>CP_TYPE_RESTRICT_P</code>
<a name="index-CP_005fTYPE_005fRESTRICT_005fP"></a>
</dt>
<dd><p>This macro holds if the type is <code>restrict</code>-qualified.
</p>
</dd>
<dt><code>CP_TYPE_CONST_NON_VOLATILE_P</code>
<a name="index-CP_005fTYPE_005fCONST_005fNON_005fVOLATILE_005fP"></a>
</dt>
<dd><p>This predicate holds for a type that is <code>const</code>-qualified, but
<em>not</em> <code>volatile</code>-qualified; other cv-qualifiers are ignored as
well: only the <code>const</code>-ness is tested.
</p>
</dd>
</dl>

<p>A few other macros and functions are usable with all types:
</p><dl compact="compact">
<dt><code>TYPE_SIZE</code>
<a name="index-TYPE_005fSIZE-3"></a>
</dt>
<dd><p>The number of bits required to represent the type, represented as an
<code>INTEGER_CST</code>.  For an incomplete type, <code>TYPE_SIZE</code> will be
<code>NULL_TREE</code>.
</p>
</dd>
<dt><code>TYPE_ALIGN</code>
<a name="index-TYPE_005fALIGN-3"></a>
</dt>
<dd><p>The alignment of the type, in bits, represented as an <code>int</code>.
</p>
</dd>
<dt><code>TYPE_NAME</code>
<a name="index-TYPE_005fNAME-3"></a>
</dt>
<dd><p>This macro returns a declaration (in the form of a <code>TYPE_DECL</code>) for
the type.  (Note this macro does <em>not</em> return an
<code>IDENTIFIER_NODE</code>, as you might expect, given its name!)  You can
look at the <code>DECL_NAME</code> of the <code>TYPE_DECL</code> to obtain the
actual name of the type.  The <code>TYPE_NAME</code> will be <code>NULL_TREE</code>
for a type that is not a built-in type, the result of a typedef, or a
named class type.
</p>
</dd>
<dt><code>CP_INTEGRAL_TYPE</code>
<a name="index-CP_005fINTEGRAL_005fTYPE"></a>
</dt>
<dd><p>This predicate holds if the type is an integral type.  Notice that in
C++, enumerations are <em>not</em> integral types.
</p>
</dd>
<dt><code>ARITHMETIC_TYPE_P</code>
<a name="index-ARITHMETIC_005fTYPE_005fP"></a>
</dt>
<dd><p>This predicate holds if the type is an integral type (in the C++ sense)
or a floating point type.
</p>
</dd>
<dt><code>CLASS_TYPE_P</code>
<a name="index-CLASS_005fTYPE_005fP"></a>
</dt>
<dd><p>This predicate holds for a class-type.
</p>
</dd>
<dt><code>TYPE_BUILT_IN</code>
<a name="index-TYPE_005fBUILT_005fIN"></a>
</dt>
<dd><p>This predicate holds for a built-in type.
</p>
</dd>
<dt><code>TYPE_PTRDATAMEM_P</code>
<a name="index-TYPE_005fPTRDATAMEM_005fP-1"></a>
</dt>
<dd><p>This predicate holds if the type is a pointer to data member.
</p>
</dd>
<dt><code>TYPE_PTR_P</code>
<a name="index-TYPE_005fPTR_005fP"></a>
</dt>
<dd><p>This predicate holds if the type is a pointer type, and the pointee is
not a data member.
</p>
</dd>
<dt><code>TYPE_PTRFN_P</code>
<a name="index-TYPE_005fPTRFN_005fP"></a>
</dt>
<dd><p>This predicate holds for a pointer to function type.
</p>
</dd>
<dt><code>TYPE_PTROB_P</code>
<a name="index-TYPE_005fPTROB_005fP"></a>
</dt>
<dd><p>This predicate holds for a pointer to object type.  Note however that it
does not hold for the generic pointer to object type <code>void *</code>.  You
may use <code>TYPE_PTROBV_P</code> to test for a pointer to object type as
well as <code>void *</code>.
</p>
</dd>
</dl>

<p>The table below describes types specific to C and C++ as well as
language-dependent info about GENERIC types.
</p>
<dl compact="compact">
<dt><code>POINTER_TYPE</code></dt>
<dd><p>Used to represent pointer types, and pointer to data member types.  If
<code>TREE_TYPE</code>
is a pointer to data member type, then <code>TYPE_PTRDATAMEM_P</code> will hold.
For a pointer to data member type of the form &lsquo;<samp>T X::*</samp>&rsquo;,
<code>TYPE_PTRMEM_CLASS_TYPE</code> will be the type <code>X</code>, while
<code>TYPE_PTRMEM_POINTED_TO_TYPE</code> will be the type <code>T</code>.
</p>
</dd>
<dt><code>RECORD_TYPE</code></dt>
<dd><p>Used to represent <code>struct</code> and <code>class</code> types in C and C++.  If
<code>TYPE_PTRMEMFUNC_P</code> holds, then this type is a pointer-to-member
type.  In that case, the <code>TYPE_PTRMEMFUNC_FN_TYPE</code> is a
<code>POINTER_TYPE</code> pointing to a <code>METHOD_TYPE</code>.  The
<code>METHOD_TYPE</code> is the type of a function pointed to by the
pointer-to-member function.  If <code>TYPE_PTRMEMFUNC_P</code> does not hold,
this type is a class type.  For more information, see <a href="#Classes">Classes</a>.
</p>
</dd>
<dt><code>UNKNOWN_TYPE</code></dt>
<dd><p>This node is used to represent a type the knowledge of which is
insufficient for a sound processing.
</p>
</dd>
<dt><code>TYPENAME_TYPE</code></dt>
<dd><p>Used to represent a construct of the form <code>typename T::A</code>.  The
<code>TYPE_CONTEXT</code> is <code>T</code>; the <code>TYPE_NAME</code> is an
<code>IDENTIFIER_NODE</code> for <code>A</code>.  If the type is specified via a
template-id, then <code>TYPENAME_TYPE_FULLNAME</code> yields a
<code>TEMPLATE_ID_EXPR</code>.  The <code>TREE_TYPE</code> is non-<code>NULL</code> if the
node is implicitly generated in support for the implicit typename
extension; in which case the <code>TREE_TYPE</code> is a type node for the
base-class.
</p>
</dd>
<dt><code>TYPEOF_TYPE</code></dt>
<dd><p>Used to represent the <code>__typeof__</code> extension.  The
<code>TYPE_FIELDS</code> is the expression the type of which is being
represented.
</p>
</dd>
</dl>



<hr>
<a name="Namespaces"></a>
<div class="header">
<p>
Next: <a href="#Classes" accesskey="n" rel="next">Classes</a>, Previous: <a href="#Types-for-C_002b_002b" accesskey="p" rel="prev">Types for C++</a>, Up: <a href="#C-and-C_002b_002b-Trees" accesskey="u" rel="up">C and C++ Trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Namespaces-1"></a>
<h4 class="subsection">11.10.2 Namespaces</h4>
<a name="index-namespace_002c-scope"></a>
<a name="index-NAMESPACE_005fDECL-1"></a>

<p>The root of the entire intermediate representation is the variable
<code>global_namespace</code>.  This is the namespace specified with <code>::</code>
in C++ source code.  All other namespaces, types, variables, functions,
and so forth can be found starting with this namespace.
</p>
<p>However, except for the fact that it is distinguished as the root of the
representation, the global namespace is no different from any other
namespace.  Thus, in what follows, we describe namespaces generally,
rather than the global namespace in particular.
</p>
<p>A namespace is represented by a <code>NAMESPACE_DECL</code> node.
</p>
<p>The following macros and functions can be used on a <code>NAMESPACE_DECL</code>:
</p>
<dl compact="compact">
<dt><code>DECL_NAME</code>
<a name="index-DECL_005fNAME-3"></a>
</dt>
<dd><p>This macro is used to obtain the <code>IDENTIFIER_NODE</code> corresponding to
the unqualified name of the name of the namespace (see <a href="#Identifiers">Identifiers</a>).
The name of the global namespace is &lsquo;<samp>::</samp>&rsquo;, even though in C++ the
global namespace is unnamed.  However, you should use comparison with
<code>global_namespace</code>, rather than <code>DECL_NAME</code> to determine
whether or not a namespace is the global one.  An unnamed namespace
will have a <code>DECL_NAME</code> equal to <code>anonymous_namespace_name</code>.
Within a single translation unit, all unnamed namespaces will have the
same name.
</p>
</dd>
<dt><code>DECL_CONTEXT</code>
<a name="index-DECL_005fCONTEXT"></a>
</dt>
<dd><p>This macro returns the enclosing namespace.  The <code>DECL_CONTEXT</code> for
the <code>global_namespace</code> is <code>NULL_TREE</code>.
</p>
</dd>
<dt><code>DECL_NAMESPACE_ALIAS</code>
<a name="index-DECL_005fNAMESPACE_005fALIAS"></a>
</dt>
<dd><p>If this declaration is for a namespace alias, then
<code>DECL_NAMESPACE_ALIAS</code> is the namespace for which this one is an
alias.
</p>
<p>Do not attempt to use <code>cp_namespace_decls</code> for a namespace which is
an alias.  Instead, follow <code>DECL_NAMESPACE_ALIAS</code> links until you
reach an ordinary, non-alias, namespace, and call
<code>cp_namespace_decls</code> there.
</p>
</dd>
<dt><code>DECL_NAMESPACE_STD_P</code>
<a name="index-DECL_005fNAMESPACE_005fSTD_005fP"></a>
</dt>
<dd><p>This predicate holds if the namespace is the special <code>::std</code>
namespace.
</p>
</dd>
<dt><code>cp_namespace_decls</code>
<a name="index-cp_005fnamespace_005fdecls"></a>
</dt>
<dd><p>This function will return the declarations contained in the namespace,
including types, overloaded functions, other namespaces, and so forth.
If there are no declarations, this function will return
<code>NULL_TREE</code>.  The declarations are connected through their
<code>TREE_CHAIN</code> fields.
</p>
<p>Although most entries on this list will be declarations,
<code>TREE_LIST</code> nodes may also appear.  In this case, the
<code>TREE_VALUE</code> will be an <code>OVERLOAD</code>.  The value of the
<code>TREE_PURPOSE</code> is unspecified; back ends should ignore this value.
As with the other kinds of declarations returned by
<code>cp_namespace_decls</code>, the <code>TREE_CHAIN</code> will point to the next
declaration in this list.
</p>
<p>For more information on the kinds of declarations that can occur on this
list, See <a href="#Declarations">Declarations</a>.  Some declarations will not appear on this
list.  In particular, no <code>FIELD_DECL</code>, <code>LABEL_DECL</code>, or
<code>PARM_DECL</code> nodes will appear here.
</p>
<p>This function cannot be used with namespaces that have
<code>DECL_NAMESPACE_ALIAS</code> set.
</p>
</dd>
</dl>


<hr>
<a name="Classes"></a>
<div class="header">
<p>
Next: <a href="#Functions-for-C_002b_002b" accesskey="n" rel="next">Functions for C++</a>, Previous: <a href="#Namespaces" accesskey="p" rel="prev">Namespaces</a>, Up: <a href="#C-and-C_002b_002b-Trees" accesskey="u" rel="up">C and C++ Trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Classes-1"></a>
<h4 class="subsection">11.10.3 Classes</h4>
<a name="index-class_002c-scope"></a>
<a name="index-RECORD_005fTYPE-1"></a>
<a name="index-UNION_005fTYPE-1"></a>
<a name="index-CLASSTYPE_005fDECLARED_005fCLASS"></a>
<a name="index-TYPE_005fBINFO"></a>
<a name="index-BINFO_005fTYPE"></a>
<a name="index-TYPE_005fFIELDS-2"></a>
<a name="index-TYPE_005fVFIELD"></a>
<a name="index-TYPE_005fMETHODS"></a>

<p>Besides namespaces, the other high-level scoping construct in C++ is the
class.  (Throughout this manual the term <em>class</em> is used to mean the
types referred to in the ANSI/ISO C++ Standard as classes; these include
types defined with the <code>class</code>, <code>struct</code>, and <code>union</code>
keywords.)
</p>
<p>A class type is represented by either a <code>RECORD_TYPE</code> or a
<code>UNION_TYPE</code>.  A class declared with the <code>union</code> tag is
represented by a <code>UNION_TYPE</code>, while classes declared with either
the <code>struct</code> or the <code>class</code> tag are represented by
<code>RECORD_TYPE</code>s.  You can use the <code>CLASSTYPE_DECLARED_CLASS</code>
macro to discern whether or not a particular type is a <code>class</code> as
opposed to a <code>struct</code>.  This macro will be true only for classes
declared with the <code>class</code> tag.
</p>
<p>Almost all non-function members are available on the <code>TYPE_FIELDS</code>
list.  Given one member, the next can be found by following the
<code>TREE_CHAIN</code>.  You should not depend in any way on the order in
which fields appear on this list.  All nodes on this list will be
&lsquo;<samp>DECL</samp>&rsquo; nodes.  A <code>FIELD_DECL</code> is used to represent a non-static
data member, a <code>VAR_DECL</code> is used to represent a static data
member, and a <code>TYPE_DECL</code> is used to represent a type.  Note that
the <code>CONST_DECL</code> for an enumeration constant will appear on this
list, if the enumeration type was declared in the class.  (Of course,
the <code>TYPE_DECL</code> for the enumeration type will appear here as well.)
There are no entries for base classes on this list.  In particular,
there is no <code>FIELD_DECL</code> for the &ldquo;base-class portion&rdquo; of an
object.
</p>
<p>The <code>TYPE_VFIELD</code> is a compiler-generated field used to point to
virtual function tables.  It may or may not appear on the
<code>TYPE_FIELDS</code> list.  However, back ends should handle the
<code>TYPE_VFIELD</code> just like all the entries on the <code>TYPE_FIELDS</code>
list.
</p>
<p>The function members are available on the <code>TYPE_METHODS</code> list.
Again, subsequent members are found by following the <code>TREE_CHAIN</code>
field.  If a function is overloaded, each of the overloaded functions
appears; no <code>OVERLOAD</code> nodes appear on the <code>TYPE_METHODS</code>
list.  Implicitly declared functions (including default constructors,
copy constructors, assignment operators, and destructors) will appear on
this list as well.
</p>
<p>Every class has an associated <em>binfo</em>, which can be obtained with
<code>TYPE_BINFO</code>.  Binfos are used to represent base-classes.  The
binfo given by <code>TYPE_BINFO</code> is the degenerate case, whereby every
class is considered to be its own base-class.  The base binfos for a
particular binfo are held in a vector, whose length is obtained with
<code>BINFO_N_BASE_BINFOS</code>.  The base binfos themselves are obtained
with <code>BINFO_BASE_BINFO</code> and <code>BINFO_BASE_ITERATE</code>.  To add a
new binfo, use <code>BINFO_BASE_APPEND</code>.  The vector of base binfos can
be obtained with <code>BINFO_BASE_BINFOS</code>, but normally you do not need
to use that.  The class type associated with a binfo is given by
<code>BINFO_TYPE</code>.  It is not always the case that <code>BINFO_TYPE
(TYPE_BINFO (x))</code>, because of typedefs and qualified types.  Neither is
it the case that <code>TYPE_BINFO (BINFO_TYPE (y))</code> is the same binfo as
<code>y</code>.  The reason is that if <code>y</code> is a binfo representing a
base-class <code>B</code> of a derived class <code>D</code>, then <code>BINFO_TYPE
(y)</code> will be <code>B</code>, and <code>TYPE_BINFO (BINFO_TYPE (y))</code> will be
<code>B</code> as its own base-class, rather than as a base-class of <code>D</code>.
</p>
<p>The access to a base type can be found with <code>BINFO_BASE_ACCESS</code>.
This will produce <code>access_public_node</code>, <code>access_private_node</code>
or <code>access_protected_node</code>.  If bases are always public,
<code>BINFO_BASE_ACCESSES</code> may be <code>NULL</code>.
</p>
<p><code>BINFO_VIRTUAL_P</code> is used to specify whether the binfo is inherited
virtually or not.  The other flags, <code>BINFO_MARKED_P</code> and
<code>BINFO_FLAG_1</code> to <code>BINFO_FLAG_6</code> can be used for language
specific use.
</p>
<p>The following macros can be used on a tree node representing a class-type.
</p>
<dl compact="compact">
<dt><code>LOCAL_CLASS_P</code>
<a name="index-LOCAL_005fCLASS_005fP"></a>
</dt>
<dd><p>This predicate holds if the class is local class <em>i.e.</em> declared
inside a function body.
</p>
</dd>
<dt><code>TYPE_POLYMORPHIC_P</code>
<a name="index-TYPE_005fPOLYMORPHIC_005fP"></a>
</dt>
<dd><p>This predicate holds if the class has at least one virtual function
(declared or inherited).
</p>
</dd>
<dt><code>TYPE_HAS_DEFAULT_CONSTRUCTOR</code>
<a name="index-TYPE_005fHAS_005fDEFAULT_005fCONSTRUCTOR"></a>
</dt>
<dd><p>This predicate holds whenever its argument represents a class-type with
default constructor.
</p>
</dd>
<dt><code>CLASSTYPE_HAS_MUTABLE</code>
<a name="index-CLASSTYPE_005fHAS_005fMUTABLE"></a>
</dt>
<dt><code>TYPE_HAS_MUTABLE_P</code>
<a name="index-TYPE_005fHAS_005fMUTABLE_005fP"></a>
</dt>
<dd><p>These predicates hold for a class-type having a mutable data member.
</p>
</dd>
<dt><code>CLASSTYPE_NON_POD_P</code>
<a name="index-CLASSTYPE_005fNON_005fPOD_005fP"></a>
</dt>
<dd><p>This predicate holds only for class-types that are not PODs.
</p>
</dd>
<dt><code>TYPE_HAS_NEW_OPERATOR</code>
<a name="index-TYPE_005fHAS_005fNEW_005fOPERATOR"></a>
</dt>
<dd><p>This predicate holds for a class-type that defines
<code>operator new</code>.
</p>
</dd>
<dt><code>TYPE_HAS_ARRAY_NEW_OPERATOR</code>
<a name="index-TYPE_005fHAS_005fARRAY_005fNEW_005fOPERATOR"></a>
</dt>
<dd><p>This predicate holds for a class-type for which
<code>operator new[]</code> is defined.
</p>
</dd>
<dt><code>TYPE_OVERLOADS_CALL_EXPR</code>
<a name="index-TYPE_005fOVERLOADS_005fCALL_005fEXPR"></a>
</dt>
<dd><p>This predicate holds for class-type for which the function call
<code>operator()</code> is overloaded.
</p>
</dd>
<dt><code>TYPE_OVERLOADS_ARRAY_REF</code>
<a name="index-TYPE_005fOVERLOADS_005fARRAY_005fREF"></a>
</dt>
<dd><p>This predicate holds for a class-type that overloads
<code>operator[]</code>
</p>
</dd>
<dt><code>TYPE_OVERLOADS_ARROW</code>
<a name="index-TYPE_005fOVERLOADS_005fARROW"></a>
</dt>
<dd><p>This predicate holds for a class-type for which <code>operator-&gt;</code> is
overloaded.
</p>
</dd>
</dl>

<hr>
<a name="Functions-for-C_002b_002b"></a>
<div class="header">
<p>
Next: <a href="#Statements-for-C_002b_002b" accesskey="n" rel="next">Statements for C++</a>, Previous: <a href="#Classes" accesskey="p" rel="prev">Classes</a>, Up: <a href="#C-and-C_002b_002b-Trees" accesskey="u" rel="up">C and C++ Trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Functions-for-C_002b_002b-1"></a>
<h4 class="subsection">11.10.4 Functions for C++</h4>
<a name="index-function-1"></a>
<a name="index-FUNCTION_005fDECL-1"></a>
<a name="index-OVERLOAD"></a>
<a name="index-OVL_005fCURRENT"></a>
<a name="index-OVL_005fNEXT"></a>

<p>A function is represented by a <code>FUNCTION_DECL</code> node.  A set of
overloaded functions is sometimes represented by an <code>OVERLOAD</code> node.
</p>
<p>An <code>OVERLOAD</code> node is not a declaration, so none of the
&lsquo;<samp>DECL_</samp>&rsquo; macros should be used on an <code>OVERLOAD</code>.  An
<code>OVERLOAD</code> node is similar to a <code>TREE_LIST</code>.  Use
<code>OVL_CURRENT</code> to get the function associated with an
<code>OVERLOAD</code> node; use <code>OVL_NEXT</code> to get the next
<code>OVERLOAD</code> node in the list of overloaded functions.  The macros
<code>OVL_CURRENT</code> and <code>OVL_NEXT</code> are actually polymorphic; you can
use them to work with <code>FUNCTION_DECL</code> nodes as well as with
overloads.  In the case of a <code>FUNCTION_DECL</code>, <code>OVL_CURRENT</code>
will always return the function itself, and <code>OVL_NEXT</code> will always
be <code>NULL_TREE</code>.
</p>
<p>To determine the scope of a function, you can use the
<code>DECL_CONTEXT</code> macro.  This macro will return the class
(either a <code>RECORD_TYPE</code> or a <code>UNION_TYPE</code>) or namespace (a
<code>NAMESPACE_DECL</code>) of which the function is a member.  For a virtual
function, this macro returns the class in which the function was
actually defined, not the base class in which the virtual declaration
occurred.
</p>
<p>If a friend function is defined in a class scope, the
<code>DECL_FRIEND_CONTEXT</code> macro can be used to determine the class in
which it was defined.  For example, in
</p><div class="smallexample">
<pre class="smallexample">class C { friend void f() {} };
</pre></div>
<p>the <code>DECL_CONTEXT</code> for <code>f</code> will be the
<code>global_namespace</code>, but the <code>DECL_FRIEND_CONTEXT</code> will be the
<code>RECORD_TYPE</code> for <code>C</code>.
</p>

<p>The following macros and functions can be used on a <code>FUNCTION_DECL</code>:
</p><dl compact="compact">
<dt><code>DECL_MAIN_P</code>
<a name="index-DECL_005fMAIN_005fP"></a>
</dt>
<dd><p>This predicate holds for a function that is the program entry point
<code>::code</code>.
</p>
</dd>
<dt><code>DECL_LOCAL_FUNCTION_P</code>
<a name="index-DECL_005fLOCAL_005fFUNCTION_005fP"></a>
</dt>
<dd><p>This predicate holds if the function was declared at block scope, even
though it has a global scope.
</p>
</dd>
<dt><code>DECL_ANTICIPATED</code>
<a name="index-DECL_005fANTICIPATED"></a>
</dt>
<dd><p>This predicate holds if the function is a built-in function but its
prototype is not yet explicitly declared.
</p>
</dd>
<dt><code>DECL_EXTERN_C_FUNCTION_P</code>
<a name="index-DECL_005fEXTERN_005fC_005fFUNCTION_005fP"></a>
</dt>
<dd><p>This predicate holds if the function is declared as an
&lsquo;<code>extern &quot;C&quot;</code>&rsquo; function.
</p>
</dd>
<dt><code>DECL_LINKONCE_P</code>
<a name="index-DECL_005fLINKONCE_005fP"></a>
</dt>
<dd><p>This macro holds if multiple copies of this function may be emitted in
various translation units.  It is the responsibility of the linker to
merge the various copies.  Template instantiations are the most common
example of functions for which <code>DECL_LINKONCE_P</code> holds; G++
instantiates needed templates in all translation units which require them,
and then relies on the linker to remove duplicate instantiations.
</p>
<p>FIXME: This macro is not yet implemented.
</p>
</dd>
<dt><code>DECL_FUNCTION_MEMBER_P</code>
<a name="index-DECL_005fFUNCTION_005fMEMBER_005fP"></a>
</dt>
<dd><p>This macro holds if the function is a member of a class, rather than a
member of a namespace.
</p>
</dd>
<dt><code>DECL_STATIC_FUNCTION_P</code>
<a name="index-DECL_005fSTATIC_005fFUNCTION_005fP"></a>
</dt>
<dd><p>This predicate holds if the function a static member function.
</p>
</dd>
<dt><code>DECL_NONSTATIC_MEMBER_FUNCTION_P</code>
<a name="index-DECL_005fNONSTATIC_005fMEMBER_005fFUNCTION_005fP"></a>
</dt>
<dd><p>This macro holds for a non-static member function.
</p>
</dd>
<dt><code>DECL_CONST_MEMFUNC_P</code>
<a name="index-DECL_005fCONST_005fMEMFUNC_005fP"></a>
</dt>
<dd><p>This predicate holds for a <code>const</code>-member function.
</p>
</dd>
<dt><code>DECL_VOLATILE_MEMFUNC_P</code>
<a name="index-DECL_005fVOLATILE_005fMEMFUNC_005fP"></a>
</dt>
<dd><p>This predicate holds for a <code>volatile</code>-member function.
</p>
</dd>
<dt><code>DECL_CONSTRUCTOR_P</code>
<a name="index-DECL_005fCONSTRUCTOR_005fP"></a>
</dt>
<dd><p>This macro holds if the function is a constructor.
</p>
</dd>
<dt><code>DECL_NONCONVERTING_P</code>
<a name="index-DECL_005fNONCONVERTING_005fP"></a>
</dt>
<dd><p>This predicate holds if the constructor is a non-converting constructor.
</p>
</dd>
<dt><code>DECL_COMPLETE_CONSTRUCTOR_P</code>
<a name="index-DECL_005fCOMPLETE_005fCONSTRUCTOR_005fP"></a>
</dt>
<dd><p>This predicate holds for a function which is a constructor for an object
of a complete type.
</p>
</dd>
<dt><code>DECL_BASE_CONSTRUCTOR_P</code>
<a name="index-DECL_005fBASE_005fCONSTRUCTOR_005fP"></a>
</dt>
<dd><p>This predicate holds for a function which is a constructor for a base
class sub-object.
</p>
</dd>
<dt><code>DECL_COPY_CONSTRUCTOR_P</code>
<a name="index-DECL_005fCOPY_005fCONSTRUCTOR_005fP"></a>
</dt>
<dd><p>This predicate holds for a function which is a copy-constructor.
</p>
</dd>
<dt><code>DECL_DESTRUCTOR_P</code>
<a name="index-DECL_005fDESTRUCTOR_005fP"></a>
</dt>
<dd><p>This macro holds if the function is a destructor.
</p>
</dd>
<dt><code>DECL_COMPLETE_DESTRUCTOR_P</code>
<a name="index-DECL_005fCOMPLETE_005fDESTRUCTOR_005fP"></a>
</dt>
<dd><p>This predicate holds if the function is the destructor for an object a
complete type.
</p>
</dd>
<dt><code>DECL_OVERLOADED_OPERATOR_P</code>
<a name="index-DECL_005fOVERLOADED_005fOPERATOR_005fP"></a>
</dt>
<dd><p>This macro holds if the function is an overloaded operator.
</p>
</dd>
<dt><code>DECL_CONV_FN_P</code>
<a name="index-DECL_005fCONV_005fFN_005fP"></a>
</dt>
<dd><p>This macro holds if the function is a type-conversion operator.
</p>
</dd>
<dt><code>DECL_GLOBAL_CTOR_P</code>
<a name="index-DECL_005fGLOBAL_005fCTOR_005fP"></a>
</dt>
<dd><p>This predicate holds if the function is a file-scope initialization
function.
</p>
</dd>
<dt><code>DECL_GLOBAL_DTOR_P</code>
<a name="index-DECL_005fGLOBAL_005fDTOR_005fP"></a>
</dt>
<dd><p>This predicate holds if the function is a file-scope finalization
function.
</p>
</dd>
<dt><code>DECL_THUNK_P</code>
<a name="index-DECL_005fTHUNK_005fP"></a>
</dt>
<dd><p>This predicate holds if the function is a thunk.
</p>
<p>These functions represent stub code that adjusts the <code>this</code> pointer
and then jumps to another function.  When the jumped-to function
returns, control is transferred directly to the caller, without
returning to the thunk.  The first parameter to the thunk is always the
<code>this</code> pointer; the thunk should add <code>THUNK_DELTA</code> to this
value.  (The <code>THUNK_DELTA</code> is an <code>int</code>, not an
<code>INTEGER_CST</code>.)
</p>
<p>Then, if <code>THUNK_VCALL_OFFSET</code> (an <code>INTEGER_CST</code>) is nonzero
the adjusted <code>this</code> pointer must be adjusted again.  The complete
calculation is given by the following pseudo-code:
</p>
<div class="smallexample">
<pre class="smallexample">this += THUNK_DELTA
if (THUNK_VCALL_OFFSET)
  this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET]
</pre></div>

<p>Finally, the thunk should jump to the location given
by <code>DECL_INITIAL</code>; this will always be an expression for the
address of a function.
</p>
</dd>
<dt><code>DECL_NON_THUNK_FUNCTION_P</code>
<a name="index-DECL_005fNON_005fTHUNK_005fFUNCTION_005fP"></a>
</dt>
<dd><p>This predicate holds if the function is <em>not</em> a thunk function.
</p>
</dd>
<dt><code>GLOBAL_INIT_PRIORITY</code>
<a name="index-GLOBAL_005fINIT_005fPRIORITY"></a>
</dt>
<dd><p>If either <code>DECL_GLOBAL_CTOR_P</code> or <code>DECL_GLOBAL_DTOR_P</code> holds,
then this gives the initialization priority for the function.  The
linker will arrange that all functions for which
<code>DECL_GLOBAL_CTOR_P</code> holds are run in increasing order of priority
before <code>main</code> is called.  When the program exits, all functions for
which <code>DECL_GLOBAL_DTOR_P</code> holds are run in the reverse order.
</p>
</dd>
<dt><code>TYPE_RAISES_EXCEPTIONS</code>
<a name="index-TYPE_005fRAISES_005fEXCEPTIONS"></a>
</dt>
<dd><p>This macro returns the list of exceptions that a (member-)function can
raise.  The returned list, if non <code>NULL</code>, is comprised of nodes
whose <code>TREE_VALUE</code> represents a type.
</p>
</dd>
<dt><code>TYPE_NOTHROW_P</code>
<a name="index-TYPE_005fNOTHROW_005fP"></a>
</dt>
<dd><p>This predicate holds when the exception-specification of its arguments
is of the form &lsquo;<code>()</code>&rsquo;.
</p>
</dd>
<dt><code>DECL_ARRAY_DELETE_OPERATOR_P</code>
<a name="index-DECL_005fARRAY_005fDELETE_005fOPERATOR_005fP"></a>
</dt>
<dd><p>This predicate holds if the function an overloaded
<code>operator delete[]</code>.
</p>
</dd>
</dl>


<hr>
<a name="Statements-for-C_002b_002b"></a>
<div class="header">
<p>
Next: <a href="#C_002b_002b-Expressions" accesskey="n" rel="next">C++ Expressions</a>, Previous: <a href="#Functions-for-C_002b_002b" accesskey="p" rel="prev">Functions for C++</a>, Up: <a href="#C-and-C_002b_002b-Trees" accesskey="u" rel="up">C and C++ Trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Statements-for-C_002b_002b-1"></a>
<h4 class="subsection">11.10.5 Statements for C++</h4>
<a name="index-statements-1"></a>
<a name="index-BREAK_005fSTMT"></a>
<a name="index-CLEANUP_005fSTMT"></a>
<a name="index-CLEANUP_005fDECL"></a>
<a name="index-CLEANUP_005fEXPR"></a>
<a name="index-CONTINUE_005fSTMT"></a>
<a name="index-DECL_005fSTMT"></a>
<a name="index-DECL_005fSTMT_005fDECL"></a>
<a name="index-DO_005fSTMT"></a>
<a name="index-DO_005fBODY"></a>
<a name="index-DO_005fCOND"></a>
<a name="index-EMPTY_005fCLASS_005fEXPR"></a>
<a name="index-EXPR_005fSTMT"></a>
<a name="index-EXPR_005fSTMT_005fEXPR"></a>
<a name="index-FOR_005fSTMT"></a>
<a name="index-FOR_005fINIT_005fSTMT"></a>
<a name="index-FOR_005fCOND"></a>
<a name="index-FOR_005fEXPR"></a>
<a name="index-FOR_005fBODY"></a>
<a name="index-HANDLER"></a>
<a name="index-IF_005fSTMT"></a>
<a name="index-IF_005fCOND"></a>
<a name="index-THEN_005fCLAUSE"></a>
<a name="index-ELSE_005fCLAUSE"></a>
<a name="index-RETURN_005fSTMT"></a>
<a name="index-RETURN_005fEXPR"></a>
<a name="index-SUBOBJECT"></a>
<a name="index-SUBOBJECT_005fCLEANUP"></a>
<a name="index-SWITCH_005fSTMT"></a>
<a name="index-SWITCH_005fCOND"></a>
<a name="index-SWITCH_005fBODY"></a>
<a name="index-TRY_005fBLOCK"></a>
<a name="index-TRY_005fSTMTS"></a>
<a name="index-TRY_005fHANDLERS"></a>
<a name="index-HANDLER_005fPARMS"></a>
<a name="index-HANDLER_005fBODY"></a>
<a name="index-USING_005fSTMT"></a>
<a name="index-WHILE_005fSTMT"></a>
<a name="index-WHILE_005fBODY"></a>
<a name="index-WHILE_005fCOND"></a>

<p>A function that has a definition in the current translation unit will
have a non-<code>NULL</code> <code>DECL_INITIAL</code>.  However, back ends should not make
use of the particular value given by <code>DECL_INITIAL</code>.
</p>
<p>The <code>DECL_SAVED_TREE</code> macro will give the complete body of the
function.
</p>
<a name="Statements-2"></a>
<h4 class="subsubsection">11.10.5.1 Statements</h4>

<p>There are tree nodes corresponding to all of the source-level
statement constructs, used within the C and C++ frontends.  These are
enumerated here, together with a list of the various macros that can
be used to obtain information about them.  There are a few macros that
can be used with all statements:
</p>
<dl compact="compact">
<dt><code>STMT_IS_FULL_EXPR_P</code>
<a name="index-STMT_005fIS_005fFULL_005fEXPR_005fP"></a>
</dt>
<dd><p>In C++, statements normally constitute &ldquo;full expressions&rdquo;; temporaries
created during a statement are destroyed when the statement is complete.
However, G++ sometimes represents expressions by statements; these
statements will not have <code>STMT_IS_FULL_EXPR_P</code> set.  Temporaries
created during such statements should be destroyed when the innermost
enclosing statement with <code>STMT_IS_FULL_EXPR_P</code> set is exited.
</p>
</dd>
</dl>

<p>Here is the list of the various statement nodes, and the macros used to
access them.  This documentation describes the use of these nodes in
non-template functions (including instantiations of template functions).
In template functions, the same nodes are used, but sometimes in
slightly different ways.
</p>
<p>Many of the statements have substatements.  For example, a <code>while</code>
loop will have a body, which is itself a statement.  If the substatement
is <code>NULL_TREE</code>, it is considered equivalent to a statement
consisting of a single <code>;</code>, i.e., an expression statement in which
the expression has been omitted.  A substatement may in fact be a list
of statements, connected via their <code>TREE_CHAIN</code>s.  So, you should
always process the statement tree by looping over substatements, like
this:
</p><div class="smallexample">
<pre class="smallexample">void process_stmt (stmt)
     tree stmt;
{
  while (stmt)
    {
      switch (TREE_CODE (stmt))
        {
        case IF_STMT:
          process_stmt (THEN_CLAUSE (stmt));
          /* <span class="roman">More processing here.</span>  */
          break;

        &hellip;
        }

      stmt = TREE_CHAIN (stmt);
    }
}
</pre></div>
<p>In other words, while the <code>then</code> clause of an <code>if</code> statement
in C++ can be only one statement (although that one statement may be a
compound statement), the intermediate representation will sometimes use
several statements chained together.
</p>
<dl compact="compact">
<dt><code>BREAK_STMT</code></dt>
<dd>
<p>Used to represent a <code>break</code> statement.  There are no additional
fields.
</p>
</dd>
<dt><code>CLEANUP_STMT</code></dt>
<dd>
<p>Used to represent an action that should take place upon exit from the
enclosing scope.  Typically, these actions are calls to destructors for
local objects, but back ends cannot rely on this fact.  If these nodes
are in fact representing such destructors, <code>CLEANUP_DECL</code> will be
the <code>VAR_DECL</code> destroyed.  Otherwise, <code>CLEANUP_DECL</code> will be
<code>NULL_TREE</code>.  In any case, the <code>CLEANUP_EXPR</code> is the
expression to execute.  The cleanups executed on exit from a scope
should be run in the reverse order of the order in which the associated
<code>CLEANUP_STMT</code>s were encountered.
</p>
</dd>
<dt><code>CONTINUE_STMT</code></dt>
<dd>
<p>Used to represent a <code>continue</code> statement.  There are no additional
fields.
</p>
</dd>
<dt><code>CTOR_STMT</code></dt>
<dd>
<p>Used to mark the beginning (if <code>CTOR_BEGIN_P</code> holds) or end (if
<code>CTOR_END_P</code> holds of the main body of a constructor.  See also
<code>SUBOBJECT</code> for more information on how to use these nodes.
</p>
</dd>
<dt><code>DO_STMT</code></dt>
<dd>
<p>Used to represent a <code>do</code> loop.  The body of the loop is given by
<code>DO_BODY</code> while the termination condition for the loop is given by
<code>DO_COND</code>.  The condition for a <code>do</code>-statement is always an
expression.
</p>
</dd>
<dt><code>EMPTY_CLASS_EXPR</code></dt>
<dd>
<p>Used to represent a temporary object of a class with no data whose
address is never taken.  (All such objects are interchangeable.)  The
<code>TREE_TYPE</code> represents the type of the object.
</p>
</dd>
<dt><code>EXPR_STMT</code></dt>
<dd>
<p>Used to represent an expression statement.  Use <code>EXPR_STMT_EXPR</code> to
obtain the expression.
</p>
</dd>
<dt><code>FOR_STMT</code></dt>
<dd>
<p>Used to represent a <code>for</code> statement.  The <code>FOR_INIT_STMT</code> is
the initialization statement for the loop.  The <code>FOR_COND</code> is the
termination condition.  The <code>FOR_EXPR</code> is the expression executed
right before the <code>FOR_COND</code> on each loop iteration; often, this
expression increments a counter.  The body of the loop is given by
<code>FOR_BODY</code>.  Note that <code>FOR_INIT_STMT</code> and <code>FOR_BODY</code>
return statements, while <code>FOR_COND</code> and <code>FOR_EXPR</code> return
expressions.
</p>
</dd>
<dt><code>HANDLER</code></dt>
<dd>
<p>Used to represent a C++ <code>catch</code> block.  The <code>HANDLER_TYPE</code>
is the type of exception that will be caught by this handler; it is
equal (by pointer equality) to <code>NULL</code> if this handler is for all
types.  <code>HANDLER_PARMS</code> is the <code>DECL_STMT</code> for the catch
parameter, and <code>HANDLER_BODY</code> is the code for the block itself.
</p>
</dd>
<dt><code>IF_STMT</code></dt>
<dd>
<p>Used to represent an <code>if</code> statement.  The <code>IF_COND</code> is the
expression.
</p>
<p>If the condition is a <code>TREE_LIST</code>, then the <code>TREE_PURPOSE</code> is
a statement (usually a <code>DECL_STMT</code>).  Each time the condition is
evaluated, the statement should be executed.  Then, the
<code>TREE_VALUE</code> should be used as the conditional expression itself.
This representation is used to handle C++ code like this:
</p>
<p>C++ distinguishes between this and <code>COND_EXPR</code> for handling templates.
</p>
<div class="smallexample">
<pre class="smallexample">if (int i = 7) &hellip;
</pre></div>

<p>where there is a new local variable (or variables) declared within the
condition.
</p>
<p>The <code>THEN_CLAUSE</code> represents the statement given by the <code>then</code>
condition, while the <code>ELSE_CLAUSE</code> represents the statement given
by the <code>else</code> condition.
</p>
</dd>
<dt><code>SUBOBJECT</code></dt>
<dd>
<p>In a constructor, these nodes are used to mark the point at which a
subobject of <code>this</code> is fully constructed.  If, after this point, an
exception is thrown before a <code>CTOR_STMT</code> with <code>CTOR_END_P</code> set
is encountered, the <code>SUBOBJECT_CLEANUP</code> must be executed.  The
cleanups must be executed in the reverse order in which they appear.
</p>
</dd>
<dt><code>SWITCH_STMT</code></dt>
<dd>
<p>Used to represent a <code>switch</code> statement.  The <code>SWITCH_STMT_COND</code>
is the expression on which the switch is occurring.  See the documentation
for an <code>IF_STMT</code> for more information on the representation used
for the condition.  The <code>SWITCH_STMT_BODY</code> is the body of the switch
statement.   The <code>SWITCH_STMT_TYPE</code> is the original type of switch
expression as given in the source, before any compiler conversions.
</p>
</dd>
<dt><code>TRY_BLOCK</code></dt>
<dd><p>Used to represent a <code>try</code> block.  The body of the try block is
given by <code>TRY_STMTS</code>.  Each of the catch blocks is a <code>HANDLER</code>
node.  The first handler is given by <code>TRY_HANDLERS</code>.  Subsequent
handlers are obtained by following the <code>TREE_CHAIN</code> link from one
handler to the next.  The body of the handler is given by
<code>HANDLER_BODY</code>.
</p>
<p>If <code>CLEANUP_P</code> holds of the <code>TRY_BLOCK</code>, then the
<code>TRY_HANDLERS</code> will not be a <code>HANDLER</code> node.  Instead, it will
be an expression that should be executed if an exception is thrown in
the try block.  It must rethrow the exception after executing that code.
And, if an exception is thrown while the expression is executing,
<code>terminate</code> must be called.
</p>
</dd>
<dt><code>USING_STMT</code></dt>
<dd><p>Used to represent a <code>using</code> directive.  The namespace is given by
<code>USING_STMT_NAMESPACE</code>, which will be a NAMESPACE_DECL.  This node
is needed inside template functions, to implement using directives
during instantiation.
</p>
</dd>
<dt><code>WHILE_STMT</code></dt>
<dd>
<p>Used to represent a <code>while</code> loop.  The <code>WHILE_COND</code> is the
termination condition for the loop.  See the documentation for an
<code>IF_STMT</code> for more information on the representation used for the
condition.
</p>
<p>The <code>WHILE_BODY</code> is the body of the loop.
</p>
</dd>
</dl>

<hr>
<a name="C_002b_002b-Expressions"></a>
<div class="header">
<p>
Previous: <a href="#Statements-for-C_002b_002b" accesskey="p" rel="prev">Statements for C++</a>, Up: <a href="#C-and-C_002b_002b-Trees" accesskey="u" rel="up">C and C++ Trees</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="C_002b_002b-Expressions-1"></a>
<h4 class="subsection">11.10.6 C++ Expressions</h4>

<p>This section describes expressions specific to the C and C++ front
ends.
</p>
<dl compact="compact">
<dt><code>TYPEID_EXPR</code></dt>
<dd>
<p>Used to represent a <code>typeid</code> expression.
</p>
</dd>
<dt><code>NEW_EXPR</code></dt>
<dt><code>VEC_NEW_EXPR</code></dt>
<dd>
<p>Used to represent a call to <code>new</code> and <code>new[]</code> respectively.
</p>
</dd>
<dt><code>DELETE_EXPR</code></dt>
<dt><code>VEC_DELETE_EXPR</code></dt>
<dd>
<p>Used to represent a call to <code>delete</code> and <code>delete[]</code> respectively.
</p>
</dd>
<dt><code>MEMBER_REF</code></dt>
<dd>
<p>Represents a reference to a member of a class.
</p>
</dd>
<dt><code>THROW_EXPR</code></dt>
<dd>
<p>Represents an instance of <code>throw</code> in the program.  Operand 0,
which is the expression to throw, may be <code>NULL_TREE</code>.
</p>

</dd>
<dt><code>AGGR_INIT_EXPR</code></dt>
<dd><p>An <code>AGGR_INIT_EXPR</code> represents the initialization as the return
value of a function call, or as the result of a constructor.  An
<code>AGGR_INIT_EXPR</code> will only appear as a full-expression, or as the
second operand of a <code>TARGET_EXPR</code>.  <code>AGGR_INIT_EXPR</code>s have
a representation similar to that of <code>CALL_EXPR</code>s.  You can use
the <code>AGGR_INIT_EXPR_FN</code> and <code>AGGR_INIT_EXPR_ARG</code> macros to access
the function to call and the arguments to pass.
</p>
<p>If <code>AGGR_INIT_VIA_CTOR_P</code> holds of the <code>AGGR_INIT_EXPR</code>, then
the initialization is via a constructor call.  The address of the
<code>AGGR_INIT_EXPR_SLOT</code> operand, which is always a <code>VAR_DECL</code>,
is taken, and this value replaces the first argument in the argument
list.
</p>
<p>In either case, the expression is void.
</p>

</dd>
</dl>


<hr>
<a name="Java-Trees"></a>
<div class="header">
<p>
Previous: <a href="#C-and-C_002b_002b-Trees" accesskey="p" rel="prev">C and C++ Trees</a>, Up: <a href="#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Java-Trees-1"></a>
<h3 class="section">11.11 Java Trees</h3>

<hr>
<a name="GIMPLE"></a>
<div class="header">
<p>
Next: <a href="#Tree-SSA" accesskey="n" rel="next">Tree SSA</a>, Previous: <a href="#GENERIC" accesskey="p" rel="prev">GENERIC</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE-1"></a>
<h2 class="chapter">12 GIMPLE</h2>
<a name="index-GIMPLE-2"></a>

<p>GIMPLE is a three-address representation derived from GENERIC by
breaking down GENERIC expressions into tuples of no more than 3
operands (with some exceptions like function calls).  GIMPLE was
heavily influenced by the SIMPLE IL used by the McCAT compiler
project at McGill University, though we have made some different
choices.  For one thing, SIMPLE doesn&rsquo;t support <code>goto</code>.
</p>
<p>Temporaries are introduced to hold intermediate values needed to
compute complex expressions. Additionally, all the control
structures used in GENERIC are lowered into conditional jumps,
lexical scopes are removed and exception regions are converted
into an on the side exception region tree.
</p>
<p>The compiler pass which converts GENERIC into GIMPLE is referred to as
the &lsquo;<samp>gimplifier</samp>&rsquo;.  The gimplifier works recursively, generating
GIMPLE tuples out of the original GENERIC expressions.
</p>
<p>One of the early implementation strategies used for the GIMPLE
representation was to use the same internal data structures used
by front ends to represent parse trees. This simplified
implementation because we could leverage existing functionality
and interfaces. However, GIMPLE is a much more restrictive
representation than abstract syntax trees (AST), therefore it
does not require the full structural complexity provided by the
main tree data structure.
</p>
<p>The GENERIC representation of a function is stored in the
<code>DECL_SAVED_TREE</code> field of the associated <code>FUNCTION_DECL</code>
tree node.  It is converted to GIMPLE by a call to
<code>gimplify_function_tree</code>.
</p>
<p>If a front end wants to include language-specific tree codes in the tree
representation which it provides to the back end, it must provide a
definition of <code>LANG_HOOKS_GIMPLIFY_EXPR</code> which knows how to
convert the front end trees to GIMPLE.  Usually such a hook will involve
much of the same code for expanding front end trees to RTL.  This function
can return fully lowered GIMPLE, or it can return GENERIC trees and let the
main gimplifier lower them the rest of the way; this is often simpler.
GIMPLE that is not fully lowered is known as &ldquo;High GIMPLE&rdquo; and
consists of the IL before the pass <code>pass_lower_cf</code>.  High GIMPLE
contains some container statements like lexical scopes
(represented by <code>GIMPLE_BIND</code>) and nested expressions (e.g.,
<code>GIMPLE_TRY</code>), while &ldquo;Low GIMPLE&rdquo; exposes all of the
implicit jumps for control and exception expressions directly in
the IL and EH region trees.
</p>
<p>The C and C++ front ends currently convert directly from front end
trees to GIMPLE, and hand that off to the back end rather than first
converting to GENERIC.  Their gimplifier hooks know about all the
<code>_STMT</code> nodes and how to convert them to GENERIC forms.  There
was some work done on a genericization pass which would run first, but
the existence of <code>STMT_EXPR</code> meant that in order to convert all
of the C statements into GENERIC equivalents would involve walking the
entire tree anyway, so it was simpler to lower all the way.  This
might change in the future if someone writes an optimization pass
which would work better with higher-level trees, but currently the
optimizers all expect GIMPLE.
</p>
<p>You can request to dump a C-like representation of the GIMPLE form
with the flag <samp>-fdump-tree-gimple</samp>.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Tuple-representation" accesskey="1">Tuple representation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE-instruction-set" accesskey="2">GIMPLE instruction set</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE-Exception-Handling" accesskey="3">GIMPLE Exception Handling</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Temporaries" accesskey="4">Temporaries</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Operands" accesskey="5">Operands</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Manipulating-GIMPLE-statements" accesskey="6">Manipulating GIMPLE statements</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Tuple-specific-accessors" accesskey="7">Tuple specific accessors</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE-sequences" accesskey="8">GIMPLE sequences</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Sequence-iterators" accesskey="9">Sequence iterators</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Adding-a-new-GIMPLE-statement-code">Adding a new GIMPLE statement code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Statement-and-operand-traversals">Statement and operand traversals</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>

<hr>
<a name="Tuple-representation"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE-instruction-set" accesskey="n" rel="next">GIMPLE instruction set</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Tuple-representation-1"></a>
<h3 class="section">12.1 Tuple representation</h3>
<a name="index-tuples"></a>

<p>GIMPLE instructions are tuples of variable size divided in two
groups: a header describing the instruction and its locations,
and a variable length body with all the operands. Tuples are
organized into a hierarchy with 3 main classes of tuples.
</p>
<a name="gimple_005fstatement_005fbase-_0028gsbase_0029"></a>
<h4 class="subsection">12.1.1 <code>gimple_statement_base</code> (gsbase)</h4>
<a name="index-gimple_005fstatement_005fbase"></a>

<p>This is the root of the hierarchy, it holds basic information
needed by most GIMPLE statements. There are some fields that
may not be relevant to every GIMPLE statement, but those were
moved into the base structure to take advantage of holes left by
other fields (thus making the structure more compact).  The
structure takes 4 words (32 bytes) on 64 bit hosts:
</p>
<table>
<tr><td>Field</td><td>Size (bits)</td></tr>
<tr><td><code>code</code></td><td>8</td></tr>
<tr><td><code>subcode</code></td><td>16</td></tr>
<tr><td><code>no_warning</code></td><td>1</td></tr>
<tr><td><code>visited</code></td><td>1</td></tr>
<tr><td><code>nontemporal_move</code></td><td>1</td></tr>
<tr><td><code>plf</code></td><td>2</td></tr>
<tr><td><code>modified</code></td><td>1</td></tr>
<tr><td><code>has_volatile_ops</code></td><td>1</td></tr>
<tr><td><code>references_memory_p</code></td><td>1</td></tr>
<tr><td><code>uid</code></td><td>32</td></tr>
<tr><td><code>location</code></td><td>32</td></tr>
<tr><td><code>num_ops</code></td><td>32</td></tr>
<tr><td><code>bb</code></td><td>64</td></tr>
<tr><td><code>block</code></td><td>63</td></tr>
<tr><td>Total size</td><td>32 bytes</td></tr>
</table>

<ul>
<li> <code>code</code>
Main identifier for a GIMPLE instruction.

</li><li> <code>subcode</code>
Used to distinguish different variants of the same basic
instruction or provide flags applicable to a given code. The
<code>subcode</code> flags field has different uses depending on the code of
the instruction, but mostly it distinguishes instructions of the
same family. The most prominent use of this field is in
assignments, where subcode indicates the operation done on the
RHS of the assignment. For example, a = b + c is encoded as
<code>GIMPLE_ASSIGN &lt;PLUS_EXPR, a, b, c&gt;</code>.

</li><li> <code>no_warning</code>
Bitflag to indicate whether a warning has already been issued on
this statement.

</li><li> <code>visited</code>
General purpose &ldquo;visited&rdquo; marker. Set and cleared by each pass
when needed.

</li><li> <code>nontemporal_move</code>
Bitflag used in assignments that represent non-temporal moves.
Although this bitflag is only used in assignments, it was moved
into the base to take advantage of the bit holes left by the
previous fields.

</li><li> <code>plf</code>
Pass Local Flags. This 2-bit mask can be used as general purpose
markers by any pass. Passes are responsible for clearing and
setting these two flags accordingly.

</li><li> <code>modified</code>
Bitflag to indicate whether the statement has been modified.
Used mainly by the operand scanner to determine when to re-scan a
statement for operands.

</li><li> <code>has_volatile_ops</code>
Bitflag to indicate whether this statement contains operands that
have been marked volatile.

</li><li> <code>references_memory_p</code>
Bitflag to indicate whether this statement contains memory
references (i.e., its operands are either global variables, or
pointer dereferences or anything that must reside in memory).

</li><li> <code>uid</code>
This is an unsigned integer used by passes that want to assign
IDs to every statement. These IDs must be assigned and used by
each pass.

</li><li> <code>location</code>
This is a <code>location_t</code> identifier to specify source code
location for this statement. It is inherited from the front
end.

</li><li> <code>num_ops</code>
Number of operands that this statement has. This specifies the
size of the operand vector embedded in the tuple. Only used in
some tuples, but it is declared in the base tuple to take
advantage of the 32-bit hole left by the previous fields.

</li><li> <code>bb</code>
Basic block holding the instruction.

</li><li> <code>block</code>
Lexical block holding this statement.  Also used for debug
information generation.
</li></ul>

<a name="gimple_005fstatement_005fwith_005fops"></a>
<h4 class="subsection">12.1.2 <code>gimple_statement_with_ops</code></h4>
<a name="index-gimple_005fstatement_005fwith_005fops"></a>

<p>This tuple is actually split in two:
<code>gimple_statement_with_ops_base</code> and
<code>gimple_statement_with_ops</code>. This is needed to accommodate the
way the operand vector is allocated. The operand vector is
defined to be an array of 1 element. So, to allocate a dynamic
number of operands, the memory allocator (<code>gimple_alloc</code>) simply
allocates enough memory to hold the structure itself plus <code>N
- 1</code> operands which run &ldquo;off the end&rdquo; of the structure. For
example, to allocate space for a tuple with 3 operands,
<code>gimple_alloc</code> reserves <code>sizeof (struct
gimple_statement_with_ops) + 2 * sizeof (tree)</code> bytes.
</p>
<p>On the other hand, several fields in this tuple need to be shared
with the <code>gimple_statement_with_memory_ops</code> tuple. So, these
common fields are placed in <code>gimple_statement_with_ops_base</code> which
is then inherited from the other two tuples.
</p>

<table>
<tr><td><code>gsbase</code></td><td>256</td></tr>
<tr><td><code>def_ops</code></td><td>64</td></tr>
<tr><td><code>use_ops</code></td><td>64</td></tr>
<tr><td><code>op</code></td><td><code>num_ops</code> * 64</td></tr>
<tr><td>Total size</td><td>48 + 8 * <code>num_ops</code> bytes</td></tr>
</table>

<ul>
<li> <code>gsbase</code>
Inherited from <code>struct gimple_statement_base</code>.

</li><li> <code>def_ops</code>
Array of pointers into the operand array indicating all the slots that
contain a variable written-to by the statement. This array is
also used for immediate use chaining. Note that it would be
possible to not rely on this array, but the changes required to
implement this are pretty invasive.

</li><li> <code>use_ops</code>
Similar to <code>def_ops</code> but for variables read by the statement.

</li><li> <code>op</code>
Array of trees with <code>num_ops</code> slots.
</li></ul>

<a name="gimple_005fstatement_005fwith_005fmemory_005fops"></a>
<h4 class="subsection">12.1.3 <code>gimple_statement_with_memory_ops</code></h4>

<p>This tuple is essentially identical to <code>gimple_statement_with_ops</code>,
except that it contains 4 additional fields to hold vectors
related memory stores and loads.  Similar to the previous case,
the structure is split in two to accommodate for the operand
vector (<code>gimple_statement_with_memory_ops_base</code> and
<code>gimple_statement_with_memory_ops</code>).
</p>

<table>
<tr><td>Field</td><td>Size (bits)</td></tr>
<tr><td><code>gsbase</code></td><td>256</td></tr>
<tr><td><code>def_ops</code></td><td>64</td></tr>
<tr><td><code>use_ops</code></td><td>64</td></tr>
<tr><td><code>vdef_ops</code></td><td>64</td></tr>
<tr><td><code>vuse_ops</code></td><td>64</td></tr>
<tr><td><code>stores</code></td><td>64</td></tr>
<tr><td><code>loads</code></td><td>64</td></tr>
<tr><td><code>op</code></td><td><code>num_ops</code> * 64</td></tr>
<tr><td>Total size</td><td>80 + 8 * <code>num_ops</code> bytes</td></tr>
</table>

<ul>
<li> <code>vdef_ops</code>
Similar to <code>def_ops</code> but for <code>VDEF</code> operators. There is
one entry per memory symbol written by this statement. This is
used to maintain the memory SSA use-def and def-def chains.

</li><li> <code>vuse_ops</code>
Similar to <code>use_ops</code> but for <code>VUSE</code> operators. There is
one entry per memory symbol loaded by this statement. This is
used to maintain the memory SSA use-def chains.

</li><li> <code>stores</code>
Bitset with all the UIDs for the symbols written-to by the
statement.  This is different than <code>vdef_ops</code> in that all the
affected symbols are mentioned in this set.  If memory
partitioning is enabled, the <code>vdef_ops</code> vector will refer to memory
partitions. Furthermore, no SSA information is stored in this
set.

</li><li> <code>loads</code>
Similar to <code>stores</code>, but for memory loads. (Note that there
is some amount of redundancy here, it should be possible to
reduce memory utilization further by removing these sets).
</li></ul>

<p>All the other tuples are defined in terms of these three basic
ones. Each tuple will add some fields. The main gimple type
is defined to be the union of all these structures (<code>GTY</code> markers
elided for clarity):
</p>
<div class="smallexample">
<pre class="smallexample">union gimple_statement_d
{
  struct gimple_statement_base gsbase;
  struct gimple_statement_with_ops gsops;
  struct gimple_statement_with_memory_ops gsmem;
  struct gimple_statement_omp omp;
  struct gimple_statement_bind gimple_bind;
  struct gimple_statement_catch gimple_catch;
  struct gimple_statement_eh_filter gimple_eh_filter;
  struct gimple_statement_phi gimple_phi;
  struct gimple_statement_resx gimple_resx;
  struct gimple_statement_try gimple_try;
  struct gimple_statement_wce gimple_wce;
  struct gimple_statement_asm gimple_asm;
  struct gimple_statement_omp_critical gimple_omp_critical;
  struct gimple_statement_omp_for gimple_omp_for;
  struct gimple_statement_omp_parallel gimple_omp_parallel;
  struct gimple_statement_omp_task gimple_omp_task;
  struct gimple_statement_omp_sections gimple_omp_sections;
  struct gimple_statement_omp_single gimple_omp_single;
  struct gimple_statement_omp_continue gimple_omp_continue;
  struct gimple_statement_omp_atomic_load gimple_omp_atomic_load;
  struct gimple_statement_omp_atomic_store gimple_omp_atomic_store;
};
</pre></div>


<hr>
<a name="GIMPLE-instruction-set"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE-Exception-Handling" accesskey="n" rel="next">GIMPLE Exception Handling</a>, Previous: <a href="#Tuple-representation" accesskey="p" rel="prev">Tuple representation</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE-instruction-set-1"></a>
<h3 class="section">12.2 GIMPLE instruction set</h3>
<a name="index-GIMPLE-instruction-set"></a>

<p>The following table briefly describes the GIMPLE instruction set.
</p>
<table>
<tr><td>Instruction</td><td>High GIMPLE</td><td>Low GIMPLE</td></tr>
<tr><td><code>GIMPLE_ASM</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_ASSIGN</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_BIND</code></td><td>x</td><td></td></tr>
<tr><td><code>GIMPLE_CALL</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_CATCH</code></td><td>x</td><td></td></tr>
<tr><td><code>GIMPLE_COND</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_DEBUG</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_EH_FILTER</code></td><td>x</td><td></td></tr>
<tr><td><code>GIMPLE_GOTO</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_LABEL</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_NOP</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_ATOMIC_LOAD</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_ATOMIC_STORE</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_CONTINUE</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_CRITICAL</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_FOR</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_MASTER</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_ORDERED</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_PARALLEL</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_RETURN</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_SECTION</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_SECTIONS</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_SECTIONS_SWITCH</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_OMP_SINGLE</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_PHI</code></td><td></td><td>x</td></tr>
<tr><td><code>GIMPLE_RESX</code></td><td></td><td>x</td></tr>
<tr><td><code>GIMPLE_RETURN</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_SWITCH</code></td><td>x</td><td>x</td></tr>
<tr><td><code>GIMPLE_TRY</code></td><td>x</td><td></td></tr>
</table>

<hr>
<a name="GIMPLE-Exception-Handling"></a>
<div class="header">
<p>
Next: <a href="#Temporaries" accesskey="n" rel="next">Temporaries</a>, Previous: <a href="#GIMPLE-instruction-set" accesskey="p" rel="prev">GIMPLE instruction set</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Exception-Handling-1"></a>
<h3 class="section">12.3 Exception Handling</h3>
<a name="index-GIMPLE-Exception-Handling"></a>

<p>Other exception handling constructs are represented using
<code>GIMPLE_TRY_CATCH</code>.  <code>GIMPLE_TRY_CATCH</code> has two operands.  The
first operand is a sequence of statements to execute.  If executing
these statements does not throw an exception, then the second operand
is ignored.  Otherwise, if an exception is thrown, then the second
operand of the <code>GIMPLE_TRY_CATCH</code> is checked.  The second
operand may have the following forms:
</p>
<ol>
<li> A sequence of statements to execute.  When an exception occurs,
these statements are executed, and then the exception is rethrown.

</li><li> A sequence of <code>GIMPLE_CATCH</code> statements.  Each
<code>GIMPLE_CATCH</code> has a list of applicable exception types and
handler code.  If the thrown exception matches one of the caught
types, the associated handler code is executed.  If the handler
code falls off the bottom, execution continues after the original
<code>GIMPLE_TRY_CATCH</code>.

</li><li> A <code>GIMPLE_EH_FILTER</code> statement.  This has a list of
permitted exception types, and code to handle a match failure.  If the
thrown exception does not match one of the allowed types, the
associated match failure code is executed.  If the thrown exception
does match, it continues unwinding the stack looking for the next
handler.

</li></ol>

<p>Currently throwing an exception is not directly represented in
GIMPLE, since it is implemented by calling a function.  At some
point in the future we will want to add some way to express that
the call will throw an exception of a known type.
</p>
<p>Just before running the optimizers, the compiler lowers the
high-level EH constructs above into a set of &lsquo;<samp>goto</samp>&rsquo;s, magic
labels, and EH regions.  Continuing to unwind at the end of a
cleanup is represented with a <code>GIMPLE_RESX</code>.
</p>

<hr>
<a name="Temporaries"></a>
<div class="header">
<p>
Next: <a href="#Operands" accesskey="n" rel="next">Operands</a>, Previous: <a href="#GIMPLE-Exception-Handling" accesskey="p" rel="prev">GIMPLE Exception Handling</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Temporaries-1"></a>
<h3 class="section">12.4 Temporaries</h3>
<a name="index-Temporaries"></a>

<p>When gimplification encounters a subexpression that is too
complex, it creates a new temporary variable to hold the value of
the subexpression, and adds a new statement to initialize it
before the current statement. These special temporaries are known
as &lsquo;<samp>expression temporaries</samp>&rsquo;, and are allocated using
<code>get_formal_tmp_var</code>.  The compiler tries to always evaluate
identical expressions into the same temporary, to simplify
elimination of redundant calculations.
</p>
<p>We can only use expression temporaries when we know that it will
not be reevaluated before its value is used, and that it will not
be otherwise modified<a name="DOCF3" href="#FOOT3"><sup>3</sup></a>. Other temporaries can be allocated
using <code>get_initialized_tmp_var</code> or <code>create_tmp_var</code>.
</p>
<p>Currently, an expression like <code>a = b + 5</code> is not reduced any
further.  We tried converting it to something like
</p><div class="smallexample">
<pre class="smallexample">T1 = b + 5;
a = T1;
</pre></div>
<p>but this bloated the representation for minimal benefit.  However, a
variable which must live in memory cannot appear in an expression; its
value is explicitly loaded into a temporary first.  Similarly, storing
the value of an expression to a memory variable goes through a
temporary.
</p>
<hr>
<a name="Operands"></a>
<div class="header">
<p>
Next: <a href="#Manipulating-GIMPLE-statements" accesskey="n" rel="next">Manipulating GIMPLE statements</a>, Previous: <a href="#Temporaries" accesskey="p" rel="prev">Temporaries</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Operands-1"></a>
<h3 class="section">12.5 Operands</h3>
<a name="index-Operands"></a>

<p>In general, expressions in GIMPLE consist of an operation and the
appropriate number of simple operands; these operands must either be a
GIMPLE rvalue (<code>is_gimple_val</code>), i.e. a constant or a register
variable.  More complex operands are factored out into temporaries, so
that
</p><div class="smallexample">
<pre class="smallexample">a = b + c + d
</pre></div>
<p>becomes
</p><div class="smallexample">
<pre class="smallexample">T1 = b + c;
a = T1 + d;
</pre></div>

<p>The same rule holds for arguments to a <code>GIMPLE_CALL</code>.
</p>
<p>The target of an assignment is usually a variable, but can also be a
<code>MEM_REF</code> or a compound lvalue as described below.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Compound-Expressions" accesskey="1">Compound Expressions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Compound-Lvalues" accesskey="2">Compound Lvalues</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Conditional-Expressions" accesskey="3">Conditional Expressions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Logical-Operators" accesskey="4">Logical Operators</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>

<hr>
<a name="Compound-Expressions"></a>
<div class="header">
<p>
Next: <a href="#Compound-Lvalues" accesskey="n" rel="next">Compound Lvalues</a>, Up: <a href="#Operands" accesskey="u" rel="up">Operands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Compound-Expressions-1"></a>
<h4 class="subsection">12.5.1 Compound Expressions</h4>
<a name="index-Compound-Expressions"></a>

<p>The left-hand side of a C comma expression is simply moved into a separate
statement.
</p>
<hr>
<a name="Compound-Lvalues"></a>
<div class="header">
<p>
Next: <a href="#Conditional-Expressions" accesskey="n" rel="next">Conditional Expressions</a>, Previous: <a href="#Compound-Expressions" accesskey="p" rel="prev">Compound Expressions</a>, Up: <a href="#Operands" accesskey="u" rel="up">Operands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Compound-Lvalues-1"></a>
<h4 class="subsection">12.5.2 Compound Lvalues</h4>
<a name="index-Compound-Lvalues"></a>

<p>Currently compound lvalues involving array and structure field references
are not broken down; an expression like <code>a.b[2] = 42</code> is not reduced
any further (though complex array subscripts are).  This restriction is a
workaround for limitations in later optimizers; if we were to convert this
to
</p>
<div class="smallexample">
<pre class="smallexample">T1 = &amp;a.b;
T1[2] = 42;
</pre></div>

<p>alias analysis would not remember that the reference to <code>T1[2]</code> came
by way of <code>a.b</code>, so it would think that the assignment could alias
another member of <code>a</code>; this broke <code>struct-alias-1.c</code>.  Future
optimizer improvements may make this limitation unnecessary.
</p>
<hr>
<a name="Conditional-Expressions"></a>
<div class="header">
<p>
Next: <a href="#Logical-Operators" accesskey="n" rel="next">Logical Operators</a>, Previous: <a href="#Compound-Lvalues" accesskey="p" rel="prev">Compound Lvalues</a>, Up: <a href="#Operands" accesskey="u" rel="up">Operands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Conditional-Expressions-1"></a>
<h4 class="subsection">12.5.3 Conditional Expressions</h4>
<a name="index-Conditional-Expressions"></a>

<p>A C <code>?:</code> expression is converted into an <code>if</code> statement with
each branch assigning to the same temporary.  So,
</p>
<div class="smallexample">
<pre class="smallexample">a = b ? c : d;
</pre></div>
<p>becomes
</p><div class="smallexample">
<pre class="smallexample">if (b == 1)
  T1 = c;
else
  T1 = d;
a = T1;
</pre></div>

<p>The GIMPLE level if-conversion pass re-introduces <code>?:</code>
expression, if appropriate. It is used to vectorize loops with
conditions using vector conditional operations.
</p>
<p>Note that in GIMPLE, <code>if</code> statements are represented using
<code>GIMPLE_COND</code>, as described below.
</p>
<hr>
<a name="Logical-Operators"></a>
<div class="header">
<p>
Previous: <a href="#Conditional-Expressions" accesskey="p" rel="prev">Conditional Expressions</a>, Up: <a href="#Operands" accesskey="u" rel="up">Operands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Logical-Operators-1"></a>
<h4 class="subsection">12.5.4 Logical Operators</h4>
<a name="index-Logical-Operators"></a>

<p>Except when they appear in the condition operand of a
<code>GIMPLE_COND</code>, logical &lsquo;and&rsquo; and &lsquo;or&rsquo; operators are simplified
as follows: <code>a = b &amp;&amp; c</code> becomes
</p>
<div class="smallexample">
<pre class="smallexample">T1 = (bool)b;
if (T1 == true)
  T1 = (bool)c;
a = T1;
</pre></div>

<p>Note that <code>T1</code> in this example cannot be an expression temporary,
because it has two different assignments.
</p>
<a name="Manipulating-operands"></a>
<h4 class="subsection">12.5.5 Manipulating operands</h4>

<p>All gimple operands are of type <code>tree</code>.  But only certain
types of trees are allowed to be used as operand tuples.  Basic
validation is controlled by the function
<code>get_gimple_rhs_class</code>, which given a tree code, returns an
<code>enum</code> with the following values of type <code>enum
gimple_rhs_class</code>
</p>
<ul>
<li> <code>GIMPLE_INVALID_RHS</code>
The tree cannot be used as a GIMPLE operand.

</li><li> <code>GIMPLE_TERNARY_RHS</code>
The tree is a valid GIMPLE ternary operation.

</li><li> <code>GIMPLE_BINARY_RHS</code>
The tree is a valid GIMPLE binary operation.

</li><li> <code>GIMPLE_UNARY_RHS</code>
The tree is a valid GIMPLE unary operation.

</li><li> <code>GIMPLE_SINGLE_RHS</code>
The tree is a single object, that cannot be split into simpler
operands (for instance, <code>SSA_NAME</code>, <code>VAR_DECL</code>, <code>COMPONENT_REF</code>, etc).

<p>This operand class also acts as an escape hatch for tree nodes
that may be flattened out into the operand vector, but would need
more than two slots on the RHS.  For instance, a <code>COND_EXPR</code>
expression of the form <code>(a op b) ? x : y</code> could be flattened
out on the operand vector using 4 slots, but it would also
require additional processing to distinguish <code>c = a op b</code>
from <code>c = a op b ? x : y</code>.  Something similar occurs with
<code>ASSERT_EXPR</code>.   In time, these special case tree
expressions should be flattened into the operand vector.
</p></li></ul>

<p>For tree nodes in the categories <code>GIMPLE_TERNARY_RHS</code>,
<code>GIMPLE_BINARY_RHS</code> and <code>GIMPLE_UNARY_RHS</code>, they cannot be
stored inside tuples directly.  They first need to be flattened and
separated into individual components.  For instance, given the GENERIC
expression
</p>
<div class="smallexample">
<pre class="smallexample">a = b + c
</pre></div>

<p>its tree representation is:
</p>
<div class="smallexample">
<pre class="smallexample">MODIFY_EXPR &lt;VAR_DECL  &lt;a&gt;, PLUS_EXPR &lt;VAR_DECL &lt;b&gt;, VAR_DECL &lt;c&gt;&gt;&gt;
</pre></div>

<p>In this case, the GIMPLE form for this statement is logically
identical to its GENERIC form but in GIMPLE, the <code>PLUS_EXPR</code>
on the RHS of the assignment is not represented as a tree,
instead the two operands are taken out of the <code>PLUS_EXPR</code> sub-tree
and flattened into the GIMPLE tuple as follows:
</p>
<div class="smallexample">
<pre class="smallexample">GIMPLE_ASSIGN &lt;PLUS_EXPR, VAR_DECL &lt;a&gt;, VAR_DECL &lt;b&gt;, VAR_DECL &lt;c&gt;&gt;
</pre></div>

<a name="Operand-vector-allocation"></a>
<h4 class="subsection">12.5.6 Operand vector allocation</h4>

<p>The operand vector is stored at the bottom of the three tuple
structures that accept operands. This means, that depending on
the code of a given statement, its operand vector will be at
different offsets from the base of the structure.  To access
tuple operands use the following accessors
</p>
<dl>
<dt><a name="index-gimple_005fnum_005fops"></a>GIMPLE function: <em>unsigned</em> <strong>gimple_num_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Returns the number of operands in statement G.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fop"></a>GIMPLE function: <em>tree</em> <strong>gimple_op</strong> <em>(gimple g, unsigned i)</em></dt>
<dd><p>Returns operand <code>I</code> from statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fops"></a>GIMPLE function: <em>tree *</em> <strong>gimple_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Returns a pointer into the operand vector for statement <code>G</code>.  This
is computed using an internal table called <code>gimple_ops_offset_</code>[].
This table is indexed by the gimple code of <code>G</code>.
</p>
<p>When the compiler is built, this table is filled-in using the
sizes of the structures used by each statement code defined in
gimple.def.  Since the operand vector is at the bottom of the
structure, for a gimple code <code>C</code> the offset is computed as sizeof
(struct-of <code>C</code>) - sizeof (tree).
</p>
<p>This mechanism adds one memory indirection to every access when
using <code>gimple_op</code>(), if this becomes a bottleneck, a pass can
choose to memoize the result from <code>gimple_ops</code>() and use that to
access the operands.
</p></dd></dl>

<a name="Operand-validation"></a>
<h4 class="subsection">12.5.7 Operand validation</h4>

<p>When adding a new operand to a gimple statement, the operand will
be validated according to what each tuple accepts in its operand
vector.  These predicates are called by the
<code>gimple_<var>name</var>_set_...()</code>.  Each tuple will use one of the
following predicates (Note, this list is not exhaustive):
</p>
<dl>
<dt><a name="index-is_005fgimple_005fval"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_val</strong> <em>(tree t)</em></dt>
<dd><p>Returns true if t is a &quot;GIMPLE value&quot;, which are all the
non-addressable stack variables (variables for which
<code>is_gimple_reg</code> returns true) and constants (expressions for which
<code>is_gimple_min_invariant</code> returns true).
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005faddressable"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_addressable</strong> <em>(tree t)</em></dt>
<dd><p>Returns true if t is a symbol or memory reference whose address
can be taken.
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fasm_005fval"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_asm_val</strong> <em>(tree t)</em></dt>
<dd><p>Similar to <code>is_gimple_val</code> but it also accepts hard registers.
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fcall_005faddr"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_call_addr</strong> <em>(tree t)</em></dt>
<dd><p>Return true if t is a valid expression to use as the function
called by a <code>GIMPLE_CALL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fmem_005fref_005faddr"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_mem_ref_addr</strong> <em>(tree t)</em></dt>
<dd><p>Return true if t is a valid expression to use as first operand
of a <code>MEM_REF</code> expression.
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fconstant"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_constant</strong> <em>(tree t)</em></dt>
<dd><p>Return true if t is a valid gimple constant.
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fmin_005finvariant"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_min_invariant</strong> <em>(tree t)</em></dt>
<dd><p>Return true if t is a valid minimal invariant.  This is different
from constants, in that the specific value of t may not be known
at compile time, but it is known that it doesn&rsquo;t change (e.g.,
the address of a function local variable).
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fip_005finvariant"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_ip_invariant</strong> <em>(tree t)</em></dt>
<dd><p>Return true if t is an interprocedural invariant.  This means that t
is a valid invariant in all functions (e.g. it can be an address of a
global variable but not of a local one).
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fip_005finvariant_005faddress"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_ip_invariant_address</strong> <em>(tree t)</em></dt>
<dd><p>Return true if t is an <code>ADDR_EXPR</code> that does not change once the
program is running (and which is valid in all functions).
</p></dd></dl>


<a name="Statement-validation"></a>
<h4 class="subsection">12.5.8 Statement validation</h4>

<dl>
<dt><a name="index-is_005fgimple_005fassign"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_assign</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if the code of g is <code>GIMPLE_ASSIGN</code>.
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fcall"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_call</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if the code of g is <code>GIMPLE_CALL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fdebug"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_debug</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if the code of g is <code>GIMPLE_DEBUG</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005fcast_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_assign_cast_p</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if g is a <code>GIMPLE_ASSIGN</code> that performs a type cast
operation.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_debug_bind_p</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if g is a <code>GIMPLE_DEBUG</code> that binds the value of an
expression to a variable.
</p></dd></dl>

<hr>
<a name="Manipulating-GIMPLE-statements"></a>
<div class="header">
<p>
Next: <a href="#Tuple-specific-accessors" accesskey="n" rel="next">Tuple specific accessors</a>, Previous: <a href="#Operands" accesskey="p" rel="prev">Operands</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Manipulating-GIMPLE-statements-1"></a>
<h3 class="section">12.6 Manipulating GIMPLE statements</h3>
<a name="index-Manipulating-GIMPLE-statements"></a>

<p>This section documents all the functions available to handle each
of the GIMPLE instructions.
</p>
<a name="Common-accessors"></a>
<h4 class="subsection">12.6.1 Common accessors</h4>
<p>The following are common accessors for gimple statements.
</p>
<dl>
<dt><a name="index-gimple_005fcode"></a>GIMPLE function: <em>enum gimple_code</em> <strong>gimple_code</strong> <em>(gimple g)</em></dt>
<dd><p>Return the code for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbb"></a>GIMPLE function: <em>basic_block</em> <strong>gimple_bb</strong> <em>(gimple g)</em></dt>
<dd><p>Return the basic block to which statement <code>G</code> belongs to.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fblock"></a>GIMPLE function: <em>tree</em> <strong>gimple_block</strong> <em>(gimple g)</em></dt>
<dd><p>Return the lexical scope block holding statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fexpr_005ftype"></a>GIMPLE function: <em>tree</em> <strong>gimple_expr_type</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return the type of the main expression computed by <code>STMT</code>. Return
<code>void_type_node</code> if <code>STMT</code> computes nothing. This will only return
something meaningful for <code>GIMPLE_ASSIGN</code>, <code>GIMPLE_COND</code> and
<code>GIMPLE_CALL</code>.  For all other tuple codes, it will return
<code>void_type_node</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fexpr_005fcode"></a>GIMPLE function: <em>enum tree_code</em> <strong>gimple_expr_code</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return the tree code for the expression computed by <code>STMT</code>.  This
is only meaningful for <code>GIMPLE_CALL</code>, <code>GIMPLE_ASSIGN</code> and
<code>GIMPLE_COND</code>.  If <code>STMT</code> is <code>GIMPLE_CALL</code>, it will return <code>CALL_EXPR</code>.
For <code>GIMPLE_COND</code>, it returns the code of the comparison predicate.
For <code>GIMPLE_ASSIGN</code> it returns the code of the operation performed
by the <code>RHS</code> of the assignment.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005fblock"></a>GIMPLE function: <em>void</em> <strong>gimple_set_block</strong> <em>(gimple g, tree block)</em></dt>
<dd><p>Set the lexical scope block of <code>G</code> to <code>BLOCK</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005flocus"></a>GIMPLE function: <em>location_t</em> <strong>gimple_locus</strong> <em>(gimple g)</em></dt>
<dd><p>Return locus information for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005flocus"></a>GIMPLE function: <em>void</em> <strong>gimple_set_locus</strong> <em>(gimple g, location_t locus)</em></dt>
<dd><p>Set locus information for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005flocus_005fempty_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_locus_empty_p</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if <code>G</code> does not have locus information.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fno_005fwarning_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_no_warning_p</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return true if no warnings should be emitted for statement <code>STMT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005fvisited"></a>GIMPLE function: <em>void</em> <strong>gimple_set_visited</strong> <em>(gimple stmt, bool visited_p)</em></dt>
<dd><p>Set the visited status on statement <code>STMT</code> to <code>VISITED_P</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fvisited_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_visited_p</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return the visited status on statement <code>STMT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005fplf"></a>GIMPLE function: <em>void</em> <strong>gimple_set_plf</strong> <em>(gimple stmt, enum plf_mask plf, bool val_p)</em></dt>
<dd><p>Set pass local flag <code>PLF</code> on statement <code>STMT</code> to <code>VAL_P</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fplf"></a>GIMPLE function: <em>unsigned int</em> <strong>gimple_plf</strong> <em>(gimple stmt, enum plf_mask plf)</em></dt>
<dd><p>Return the value of pass local flag <code>PLF</code> on statement <code>STMT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fhas_005fops"></a>GIMPLE function: <em>bool</em> <strong>gimple_has_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if statement <code>G</code> has register or memory operands.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fhas_005fmem_005fops"></a>GIMPLE function: <em>bool</em> <strong>gimple_has_mem_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if statement <code>G</code> has memory operands.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fnum_005fops-1"></a>GIMPLE function: <em>unsigned</em> <strong>gimple_num_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Return the number of operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fops-1"></a>GIMPLE function: <em>tree *</em> <strong>gimple_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Return the array of operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fop-1"></a>GIMPLE function: <em>tree</em> <strong>gimple_op</strong> <em>(gimple g, unsigned i)</em></dt>
<dd><p>Return operand <code>I</code> for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fop_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_op_ptr</strong> <em>(gimple g, unsigned i)</em></dt>
<dd><p>Return a pointer to operand <code>I</code> for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005fop"></a>GIMPLE function: <em>void</em> <strong>gimple_set_op</strong> <em>(gimple g, unsigned i, tree op)</em></dt>
<dd><p>Set operand <code>I</code> of statement <code>G</code> to <code>OP</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005faddresses_005ftaken"></a>GIMPLE function: <em>bitmap</em> <strong>gimple_addresses_taken</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return the set of symbols that have had their address taken by
<code>STMT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fdef_005fops"></a>GIMPLE function: <em>struct def_optype_d *</em> <strong>gimple_def_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Return the set of <code>DEF</code> operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005fdef_005fops"></a>GIMPLE function: <em>void</em> <strong>gimple_set_def_ops</strong> <em>(gimple g, struct def_optype_d *def)</em></dt>
<dd><p>Set <code>DEF</code> to be the set of <code>DEF</code> operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fuse_005fops"></a>GIMPLE function: <em>struct use_optype_d *</em> <strong>gimple_use_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Return the set of <code>USE</code> operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005fuse_005fops"></a>GIMPLE function: <em>void</em> <strong>gimple_set_use_ops</strong> <em>(gimple g, struct use_optype_d *use)</em></dt>
<dd><p>Set <code>USE</code> to be the set of <code>USE</code> operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fvuse_005fops"></a>GIMPLE function: <em>struct voptype_d *</em> <strong>gimple_vuse_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Return the set of <code>VUSE</code> operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005fvuse_005fops"></a>GIMPLE function: <em>void</em> <strong>gimple_set_vuse_ops</strong> <em>(gimple g, struct voptype_d *ops)</em></dt>
<dd><p>Set <code>OPS</code> to be the set of <code>VUSE</code> operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fvdef_005fops"></a>GIMPLE function: <em>struct voptype_d *</em> <strong>gimple_vdef_ops</strong> <em>(gimple g)</em></dt>
<dd><p>Return the set of <code>VDEF</code> operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005fvdef_005fops"></a>GIMPLE function: <em>void</em> <strong>gimple_set_vdef_ops</strong> <em>(gimple g, struct voptype_d *ops)</em></dt>
<dd><p>Set <code>OPS</code> to be the set of <code>VDEF</code> operands for statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005floaded_005fsyms"></a>GIMPLE function: <em>bitmap</em> <strong>gimple_loaded_syms</strong> <em>(gimple g)</em></dt>
<dd><p>Return the set of symbols loaded by statement <code>G</code>.  Each element of
the set is the <code>DECL_UID</code> of the corresponding symbol.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fstored_005fsyms"></a>GIMPLE function: <em>bitmap</em> <strong>gimple_stored_syms</strong> <em>(gimple g)</em></dt>
<dd><p>Return the set of symbols stored by statement <code>G</code>.  Each element of
the set is the <code>DECL_UID</code> of the corresponding symbol.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fmodified_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_modified_p</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if statement <code>G</code> has operands and the modified field
has been set.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fhas_005fvolatile_005fops"></a>GIMPLE function: <em>bool</em> <strong>gimple_has_volatile_ops</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return true if statement <code>STMT</code> contains volatile operands.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fset_005fhas_005fvolatile_005fops"></a>GIMPLE function: <em>void</em> <strong>gimple_set_has_volatile_ops</strong> <em>(gimple stmt, bool volatilep)</em></dt>
<dd><p>Return true if statement <code>STMT</code> contains volatile operands.
</p></dd></dl>

<dl>
<dt><a name="index-update_005fstmt"></a>GIMPLE function: <em>void</em> <strong>update_stmt</strong> <em>(gimple s)</em></dt>
<dd><p>Mark statement <code>S</code> as modified, and update it.
</p></dd></dl>

<dl>
<dt><a name="index-update_005fstmt_005fif_005fmodified"></a>GIMPLE function: <em>void</em> <strong>update_stmt_if_modified</strong> <em>(gimple s)</em></dt>
<dd><p>Update statement <code>S</code> if it has been marked modified.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcopy"></a>GIMPLE function: <em>gimple</em> <strong>gimple_copy</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return a deep copy of statement <code>STMT</code>.
</p></dd></dl>

<hr>
<a name="Tuple-specific-accessors"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE-sequences" accesskey="n" rel="next">GIMPLE sequences</a>, Previous: <a href="#Manipulating-GIMPLE-statements" accesskey="p" rel="prev">Manipulating GIMPLE statements</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Tuple-specific-accessors-1"></a>
<h3 class="section">12.7 Tuple specific accessors</h3>
<a name="index-Tuple-specific-accessors"></a>

<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fASM" accesskey="1"><code>GIMPLE_ASM</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fASSIGN" accesskey="2"><code>GIMPLE_ASSIGN</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fBIND" accesskey="3"><code>GIMPLE_BIND</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fCALL" accesskey="4"><code>GIMPLE_CALL</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fCATCH" accesskey="5"><code>GIMPLE_CATCH</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fCOND" accesskey="6"><code>GIMPLE_COND</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fDEBUG" accesskey="7"><code>GIMPLE_DEBUG</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fEH_005fFILTER" accesskey="8"><code>GIMPLE_EH_FILTER</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fLABEL" accesskey="9"><code>GIMPLE_LABEL</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fNOP"><code>GIMPLE_NOP</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fATOMIC_005fSTORE"><code>GIMPLE_OMP_ATOMIC_STORE</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fCRITICAL"><code>GIMPLE_OMP_CRITICAL</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fMASTER"><code>GIMPLE_OMP_MASTER</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fORDERED"><code>GIMPLE_OMP_ORDERED</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fRETURN"><code>GIMPLE_OMP_RETURN</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fSECTION"><code>GIMPLE_OMP_SECTION</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fOMP_005fSINGLE"><code>GIMPLE_OMP_SINGLE</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fRESX"><code>GIMPLE_RESX</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fRETURN"><code>GIMPLE_RETURN</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GIMPLE_005fWITH_005fCLEANUP_005fEXPR"><code>GIMPLE_WITH_CLEANUP_EXPR</code></a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>


<hr>
<a name="GIMPLE_005fASM"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fASSIGN" accesskey="n" rel="next"><code>GIMPLE_ASSIGN</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fASM-1"></a>
<h4 class="subsection">12.7.1 <code>GIMPLE_ASM</code></h4>
<a name="index-GIMPLE_005fASM"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fasm"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_asm</strong> <em>(const char *string, ninputs, noutputs, nclobbers, ...)</em></dt>
<dd><p>Build a <code>GIMPLE_ASM</code> statement.  This statement is used for
building in-line assembly constructs.  <code>STRING</code> is the assembly
code.  <code>NINPUT</code> is the number of register inputs.  <code>NOUTPUT</code> is the
number of register outputs.  <code>NCLOBBERS</code> is the number of clobbered
registers.  The rest of the arguments trees for each input,
output, and clobbered registers.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbuild_005fasm_005fvec"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_asm_vec</strong> <em>(const char *, VEC(tree,gc) *, VEC(tree,gc) *, VEC(tree,gc) *)</em></dt>
<dd><p>Identical to gimple_build_asm, but the arguments are passed in
VECs.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fninputs"></a>GIMPLE function: <em>unsigned</em> <strong>gimple_asm_ninputs</strong> <em>(gimple g)</em></dt>
<dd><p>Return the number of input operands for <code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fnoutputs"></a>GIMPLE function: <em>unsigned</em> <strong>gimple_asm_noutputs</strong> <em>(gimple g)</em></dt>
<dd><p>Return the number of output operands for <code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fnclobbers"></a>GIMPLE function: <em>unsigned</em> <strong>gimple_asm_nclobbers</strong> <em>(gimple g)</em></dt>
<dd><p>Return the number of clobber operands for <code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005finput_005fop"></a>GIMPLE function: <em>tree</em> <strong>gimple_asm_input_op</strong> <em>(gimple g, unsigned index)</em></dt>
<dd><p>Return input operand <code>INDEX</code> of <code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fset_005finput_005fop"></a>GIMPLE function: <em>void</em> <strong>gimple_asm_set_input_op</strong> <em>(gimple g, unsigned index, tree in_op)</em></dt>
<dd><p>Set <code>IN_OP</code> to be input operand <code>INDEX</code> in <code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005foutput_005fop"></a>GIMPLE function: <em>tree</em> <strong>gimple_asm_output_op</strong> <em>(gimple g, unsigned index)</em></dt>
<dd><p>Return output operand <code>INDEX</code> of <code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fset_005foutput_005fop"></a>GIMPLE function: <em>void</em> <strong>gimple_asm_set_output_op</strong> <em>(gimple g, unsigned index, tree out_op)</em></dt>
<dd><p>Set <code>OUT_OP</code> to be output operand <code>INDEX</code> in <code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fclobber_005fop"></a>GIMPLE function: <em>tree</em> <strong>gimple_asm_clobber_op</strong> <em>(gimple g, unsigned index)</em></dt>
<dd><p>Return clobber operand <code>INDEX</code> of <code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fset_005fclobber_005fop"></a>GIMPLE function: <em>void</em> <strong>gimple_asm_set_clobber_op</strong> <em>(gimple g, unsigned index, tree clobber_op)</em></dt>
<dd><p>Set <code>CLOBBER_OP</code> to be clobber operand <code>INDEX</code> in <code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fstring"></a>GIMPLE function: <em>const char *</em> <strong>gimple_asm_string</strong> <em>(gimple g)</em></dt>
<dd><p>Return the string representing the assembly instruction in
<code>GIMPLE_ASM</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fvolatile_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_asm_volatile_p</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if <code>G</code> is an asm statement marked volatile.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fset_005fvolatile"></a>GIMPLE function: <em>void</em> <strong>gimple_asm_set_volatile</strong> <em>(gimple g)</em></dt>
<dd><p>Mark asm statement <code>G</code> as volatile.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fasm_005fclear_005fvolatile"></a>GIMPLE function: <em>void</em> <strong>gimple_asm_clear_volatile</strong> <em>(gimple g)</em></dt>
<dd><p>Remove volatile marker from asm statement <code>G</code>.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fASSIGN"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fBIND" accesskey="n" rel="next"><code>GIMPLE_BIND</code></a>, Previous: <a href="#GIMPLE_005fASM" accesskey="p" rel="prev"><code>GIMPLE_ASM</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fASSIGN-1"></a>
<h4 class="subsection">12.7.2 <code>GIMPLE_ASSIGN</code></h4>
<a name="index-GIMPLE_005fASSIGN"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fassign"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_assign</strong> <em>(tree lhs, tree rhs)</em></dt>
<dd><p>Build a <code>GIMPLE_ASSIGN</code> statement.  The left-hand side is an lvalue
passed in lhs.  The right-hand side can be either a unary or
binary tree expression.  The expression tree rhs will be
flattened and its operands assigned to the corresponding operand
slots in the new statement.  This function is useful when you
already have a tree expression that you want to convert into a
tuple.  However, try to avoid building expression trees for the
sole purpose of calling this function.  If you already have the
operands in separate trees, it is better to use
<code>gimple_build_assign_with_ops</code>.
</p></dd></dl>


<dl>
<dt><a name="index-gimplify_005fassign"></a>GIMPLE function: <em>gimple</em> <strong>gimplify_assign</strong> <em>(tree dst, tree src, gimple_seq *seq_p)</em></dt>
<dd><p>Build a new <code>GIMPLE_ASSIGN</code> tuple and append it to the end of
<code>*SEQ_P</code>.
</p></dd></dl>

<p><code>DST</code>/<code>SRC</code> are the destination and source respectively.  You can
pass ungimplified trees in <code>DST</code> or <code>SRC</code>, in which
case they will be converted to a gimple operand if necessary.
</p>
<p>This function returns the newly created <code>GIMPLE_ASSIGN</code> tuple.
</p>
<dl>
<dt><a name="index-gimple_005fbuild_005fassign_005fwith_005fops"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_assign_with_ops</strong> <em>(enum tree_code subcode, tree lhs, tree op1, tree op2)</em></dt>
<dd><p>This function is similar to <code>gimple_build_assign</code>, but is used to
build a <code>GIMPLE_ASSIGN</code> statement when the operands of the
right-hand side of the assignment are already split into
different operands.
</p>
<p>The left-hand side is an lvalue passed in lhs.  Subcode is the
<code>tree_code</code> for the right-hand side of the assignment.  Op1 and op2
are the operands.  If op2 is null, subcode must be a <code>tree_code</code>
for a unary expression.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005frhs_005fcode"></a>GIMPLE function: <em>enum tree_code</em> <strong>gimple_assign_rhs_code</strong> <em>(gimple g)</em></dt>
<dd><p>Return the code of the expression computed on the <code>RHS</code> of
assignment statement <code>G</code>.
</p></dd></dl>


<dl>
<dt><a name="index-gimple_005fassign_005frhs_005fclass"></a>GIMPLE function: <em>enum gimple_rhs_class</em> <strong>gimple_assign_rhs_class</strong> <em>(gimple g)</em></dt>
<dd><p>Return the gimple rhs class of the code for the expression
computed on the rhs of assignment statement <code>G</code>.  This will never
return <code>GIMPLE_INVALID_RHS</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005flhs"></a>GIMPLE function: <em>tree</em> <strong>gimple_assign_lhs</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>LHS</code> of assignment statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005flhs_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_assign_lhs_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the <code>LHS</code> of assignment statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005frhs1"></a>GIMPLE function: <em>tree</em> <strong>gimple_assign_rhs1</strong> <em>(gimple g)</em></dt>
<dd><p>Return the first operand on the <code>RHS</code> of assignment statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005frhs1_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_assign_rhs1_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return the address of the first operand on the <code>RHS</code> of assignment
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005frhs2"></a>GIMPLE function: <em>tree</em> <strong>gimple_assign_rhs2</strong> <em>(gimple g)</em></dt>
<dd><p>Return the second operand on the <code>RHS</code> of assignment statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005frhs2_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_assign_rhs2_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return the address of the second operand on the <code>RHS</code> of assignment
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005frhs3"></a>GIMPLE function: <em>tree</em> <strong>gimple_assign_rhs3</strong> <em>(gimple g)</em></dt>
<dd><p>Return the third operand on the <code>RHS</code> of assignment statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005frhs3_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_assign_rhs3_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return the address of the third operand on the <code>RHS</code> of assignment
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005fset_005flhs"></a>GIMPLE function: <em>void</em> <strong>gimple_assign_set_lhs</strong> <em>(gimple g, tree lhs)</em></dt>
<dd><p>Set <code>LHS</code> to be the <code>LHS</code> operand of assignment statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005fset_005frhs1"></a>GIMPLE function: <em>void</em> <strong>gimple_assign_set_rhs1</strong> <em>(gimple g, tree rhs)</em></dt>
<dd><p>Set <code>RHS</code> to be the first operand on the <code>RHS</code> of assignment
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005fset_005frhs2"></a>GIMPLE function: <em>void</em> <strong>gimple_assign_set_rhs2</strong> <em>(gimple g, tree rhs)</em></dt>
<dd><p>Set <code>RHS</code> to be the second operand on the <code>RHS</code> of assignment
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005fset_005frhs3"></a>GIMPLE function: <em>void</em> <strong>gimple_assign_set_rhs3</strong> <em>(gimple g, tree rhs)</em></dt>
<dd><p>Set <code>RHS</code> to be the third operand on the <code>RHS</code> of assignment
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fassign_005fcast_005fp-1"></a>GIMPLE function: <em>bool</em> <strong>gimple_assign_cast_p</strong> <em>(gimple s)</em></dt>
<dd><p>Return true if <code>S</code> is a type-cast assignment.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fBIND"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fCALL" accesskey="n" rel="next"><code>GIMPLE_CALL</code></a>, Previous: <a href="#GIMPLE_005fASSIGN" accesskey="p" rel="prev"><code>GIMPLE_ASSIGN</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fBIND-1"></a>
<h4 class="subsection">12.7.3 <code>GIMPLE_BIND</code></h4>
<a name="index-GIMPLE_005fBIND"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fbind"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_bind</strong> <em>(tree vars, gimple_seq body)</em></dt>
<dd><p>Build a <code>GIMPLE_BIND</code> statement with a list of variables in <code>VARS</code>
and a body of statements in sequence <code>BODY</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbind_005fvars"></a>GIMPLE function: <em>tree</em> <strong>gimple_bind_vars</strong> <em>(gimple g)</em></dt>
<dd><p>Return the variables declared in the <code>GIMPLE_BIND</code> statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbind_005fset_005fvars"></a>GIMPLE function: <em>void</em> <strong>gimple_bind_set_vars</strong> <em>(gimple g, tree vars)</em></dt>
<dd><p>Set <code>VARS</code> to be the set of variables declared in the <code>GIMPLE_BIND</code>
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbind_005fappend_005fvars"></a>GIMPLE function: <em>void</em> <strong>gimple_bind_append_vars</strong> <em>(gimple g, tree vars)</em></dt>
<dd><p>Append <code>VARS</code> to the set of variables declared in the <code>GIMPLE_BIND</code>
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbind_005fbody"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_bind_body</strong> <em>(gimple g)</em></dt>
<dd><p>Return the GIMPLE sequence contained in the <code>GIMPLE_BIND</code> statement
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbind_005fset_005fbody"></a>GIMPLE function: <em>void</em> <strong>gimple_bind_set_body</strong> <em>(gimple g, gimple_seq seq)</em></dt>
<dd><p>Set <code>SEQ</code> to be sequence contained in the <code>GIMPLE_BIND</code> statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbind_005fadd_005fstmt"></a>GIMPLE function: <em>void</em> <strong>gimple_bind_add_stmt</strong> <em>(gimple gs, gimple stmt)</em></dt>
<dd><p>Append a statement to the end of a <code>GIMPLE_BIND</code>&rsquo;s body.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbind_005fadd_005fseq"></a>GIMPLE function: <em>void</em> <strong>gimple_bind_add_seq</strong> <em>(gimple gs, gimple_seq seq)</em></dt>
<dd><p>Append a sequence of statements to the end of a <code>GIMPLE_BIND</code>&rsquo;s
body.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbind_005fblock"></a>GIMPLE function: <em>tree</em> <strong>gimple_bind_block</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>TREE_BLOCK</code> node associated with <code>GIMPLE_BIND</code> statement
<code>G</code>. This is analogous to the <code>BIND_EXPR_BLOCK</code> field in trees.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbind_005fset_005fblock"></a>GIMPLE function: <em>void</em> <strong>gimple_bind_set_block</strong> <em>(gimple g, tree block)</em></dt>
<dd><p>Set <code>BLOCK</code> to be the <code>TREE_BLOCK</code> node associated with <code>GIMPLE_BIND</code>
statement <code>G</code>.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fCALL"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fCATCH" accesskey="n" rel="next"><code>GIMPLE_CATCH</code></a>, Previous: <a href="#GIMPLE_005fBIND" accesskey="p" rel="prev"><code>GIMPLE_BIND</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fCALL-1"></a>
<h4 class="subsection">12.7.4 <code>GIMPLE_CALL</code></h4>
<a name="index-GIMPLE_005fCALL"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fcall"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_call</strong> <em>(tree fn, unsigned nargs, ...)</em></dt>
<dd><p>Build a <code>GIMPLE_CALL</code> statement to function <code>FN</code>.  The argument <code>FN</code>
must be either a <code>FUNCTION_DECL</code> or a gimple call address as
determined by <code>is_gimple_call_addr</code>.  <code>NARGS</code> are the number of
arguments.  The rest of the arguments follow the argument <code>NARGS</code>,
and must be trees that are valid as rvalues in gimple (i.e., each
operand is validated with <code>is_gimple_operand</code>).
</p></dd></dl>


<dl>
<dt><a name="index-gimple_005fbuild_005fcall_005ffrom_005ftree"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_call_from_tree</strong> <em>(tree call_expr)</em></dt>
<dd><p>Build a <code>GIMPLE_CALL</code> from a <code>CALL_EXPR</code> node.  The arguments and the
function are taken from the expression directly.  This routine
assumes that <code>call_expr</code> is already in GIMPLE form.  That is, its
operands are GIMPLE values and the function call needs no further
simplification.  All the call flags in <code>call_expr</code> are copied over
to the new <code>GIMPLE_CALL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fbuild_005fcall_005fvec"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_call_vec</strong> <em>(tree fn, <code>VEC</code>(tree, heap) *args)</em></dt>
<dd><p>Identical to <code>gimple_build_call</code> but the arguments are stored in a
<code>VEC</code>().
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005flhs"></a>GIMPLE function: <em>tree</em> <strong>gimple_call_lhs</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>LHS</code> of call statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005flhs_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_call_lhs_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the <code>LHS</code> of call statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fset_005flhs"></a>GIMPLE function: <em>void</em> <strong>gimple_call_set_lhs</strong> <em>(gimple g, tree lhs)</em></dt>
<dd><p>Set <code>LHS</code> to be the <code>LHS</code> operand of call statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005ffn"></a>GIMPLE function: <em>tree</em> <strong>gimple_call_fn</strong> <em>(gimple g)</em></dt>
<dd><p>Return the tree node representing the function called by call
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fset_005ffn"></a>GIMPLE function: <em>void</em> <strong>gimple_call_set_fn</strong> <em>(gimple g, tree fn)</em></dt>
<dd><p>Set <code>FN</code> to be the function called by call statement <code>G</code>.  This has
to be a gimple value specifying the address of the called
function.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005ffndecl"></a>GIMPLE function: <em>tree</em> <strong>gimple_call_fndecl</strong> <em>(gimple g)</em></dt>
<dd><p>If a given <code>GIMPLE_CALL</code>&rsquo;s callee is a <code>FUNCTION_DECL</code>, return it.
Otherwise return <code>NULL</code>.  This function is analogous to
<code>get_callee_fndecl</code> in <code>GENERIC</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fset_005ffndecl"></a>GIMPLE function: <em>tree</em> <strong>gimple_call_set_fndecl</strong> <em>(gimple g, tree fndecl)</em></dt>
<dd><p>Set the called function to <code>FNDECL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005freturn_005ftype"></a>GIMPLE function: <em>tree</em> <strong>gimple_call_return_type</strong> <em>(gimple g)</em></dt>
<dd><p>Return the type returned by call statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fchain"></a>GIMPLE function: <em>tree</em> <strong>gimple_call_chain</strong> <em>(gimple g)</em></dt>
<dd><p>Return the static chain for call statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fset_005fchain"></a>GIMPLE function: <em>void</em> <strong>gimple_call_set_chain</strong> <em>(gimple g, tree chain)</em></dt>
<dd><p>Set <code>CHAIN</code> to be the static chain for call statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fnum_005fargs"></a>GIMPLE function: <em>unsigned</em> <strong>gimple_call_num_args</strong> <em>(gimple g)</em></dt>
<dd><p>Return the number of arguments used by call statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005farg"></a>GIMPLE function: <em>tree</em> <strong>gimple_call_arg</strong> <em>(gimple g, unsigned index)</em></dt>
<dd><p>Return the argument at position <code>INDEX</code> for call statement <code>G</code>.  The
first argument is 0.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005farg_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_call_arg_ptr</strong> <em>(gimple g, unsigned index)</em></dt>
<dd><p>Return a pointer to the argument at position <code>INDEX</code> for call
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fset_005farg"></a>GIMPLE function: <em>void</em> <strong>gimple_call_set_arg</strong> <em>(gimple g, unsigned index, tree arg)</em></dt>
<dd><p>Set <code>ARG</code> to be the argument at position <code>INDEX</code> for call statement
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fset_005ftail"></a>GIMPLE function: <em>void</em> <strong>gimple_call_set_tail</strong> <em>(gimple s)</em></dt>
<dd><p>Mark call statement <code>S</code> as being a tail call (i.e., a call just
before the exit of a function). These calls are candidate for
tail call optimization.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005ftail_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_call_tail_p</strong> <em>(gimple s)</em></dt>
<dd><p>Return true if <code>GIMPLE_CALL</code> <code>S</code> is marked as a tail call.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fmark_005funinlinable"></a>GIMPLE function: <em>void</em> <strong>gimple_call_mark_uninlinable</strong> <em>(gimple s)</em></dt>
<dd><p>Mark <code>GIMPLE_CALL</code> <code>S</code> as being uninlinable.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fcannot_005finline_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_call_cannot_inline_p</strong> <em>(gimple s)</em></dt>
<dd><p>Return true if <code>GIMPLE_CALL</code> <code>S</code> cannot be inlined.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fnoreturn_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_call_noreturn_p</strong> <em>(gimple s)</em></dt>
<dd><p>Return true if <code>S</code> is a noreturn call.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcall_005fcopy_005fskip_005fargs"></a>GIMPLE function: <em>gimple</em> <strong>gimple_call_copy_skip_args</strong> <em>(gimple stmt, bitmap args_to_skip)</em></dt>
<dd><p>Build a <code>GIMPLE_CALL</code> identical to <code>STMT</code> but skipping the arguments
in the positions marked by the set <code>ARGS_TO_SKIP</code>.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fCATCH"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fCOND" accesskey="n" rel="next"><code>GIMPLE_COND</code></a>, Previous: <a href="#GIMPLE_005fCALL" accesskey="p" rel="prev"><code>GIMPLE_CALL</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fCATCH-1"></a>
<h4 class="subsection">12.7.5 <code>GIMPLE_CATCH</code></h4>
<a name="index-GIMPLE_005fCATCH"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fcatch"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_catch</strong> <em>(tree types, gimple_seq handler)</em></dt>
<dd><p>Build a <code>GIMPLE_CATCH</code> statement.  <code>TYPES</code> are the tree types this
catch handles.  <code>HANDLER</code> is a sequence of statements with the code
for the handler.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcatch_005ftypes"></a>GIMPLE function: <em>tree</em> <strong>gimple_catch_types</strong> <em>(gimple g)</em></dt>
<dd><p>Return the types handled by <code>GIMPLE_CATCH</code> statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcatch_005ftypes_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_catch_types_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the types handled by <code>GIMPLE_CATCH</code> statement
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcatch_005fhandler"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_catch_handler</strong> <em>(gimple g)</em></dt>
<dd><p>Return the GIMPLE sequence representing the body of the handler
of <code>GIMPLE_CATCH</code> statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcatch_005fset_005ftypes"></a>GIMPLE function: <em>void</em> <strong>gimple_catch_set_types</strong> <em>(gimple g, tree t)</em></dt>
<dd><p>Set <code>T</code> to be the set of types handled by <code>GIMPLE_CATCH</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcatch_005fset_005fhandler"></a>GIMPLE function: <em>void</em> <strong>gimple_catch_set_handler</strong> <em>(gimple g, gimple_seq handler)</em></dt>
<dd><p>Set <code>HANDLER</code> to be the body of <code>GIMPLE_CATCH</code> <code>G</code>.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fCOND"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fDEBUG" accesskey="n" rel="next"><code>GIMPLE_DEBUG</code></a>, Previous: <a href="#GIMPLE_005fCATCH" accesskey="p" rel="prev"><code>GIMPLE_CATCH</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fCOND-1"></a>
<h4 class="subsection">12.7.6 <code>GIMPLE_COND</code></h4>
<a name="index-GIMPLE_005fCOND"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fcond"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_cond</strong> <em>(enum tree_code pred_code, tree lhs, tree rhs, tree t_label, tree f_label)</em></dt>
<dd><p>Build a <code>GIMPLE_COND</code> statement.  <code>A</code> <code>GIMPLE_COND</code> statement compares
<code>LHS</code> and <code>RHS</code> and if the condition in <code>PRED_CODE</code> is true, jump to
the label in <code>t_label</code>, otherwise jump to the label in <code>f_label</code>.
<code>PRED_CODE</code> are relational operator tree codes like <code>EQ_EXPR</code>,
<code>LT_EXPR</code>, <code>LE_EXPR</code>, <code>NE_EXPR</code>, etc.
</p></dd></dl>


<dl>
<dt><a name="index-gimple_005fbuild_005fcond_005ffrom_005ftree"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_cond_from_tree</strong> <em>(tree cond, tree t_label, tree f_label)</em></dt>
<dd><p>Build a <code>GIMPLE_COND</code> statement from the conditional expression
tree <code>COND</code>.  <code>T_LABEL</code> and <code>F_LABEL</code> are as in <code>gimple_build_cond</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005fcode"></a>GIMPLE function: <em>enum tree_code</em> <strong>gimple_cond_code</strong> <em>(gimple g)</em></dt>
<dd><p>Return the code of the predicate computed by conditional
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005fset_005fcode"></a>GIMPLE function: <em>void</em> <strong>gimple_cond_set_code</strong> <em>(gimple g, enum tree_code code)</em></dt>
<dd><p>Set <code>CODE</code> to be the predicate code for the conditional statement
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005flhs"></a>GIMPLE function: <em>tree</em> <strong>gimple_cond_lhs</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>LHS</code> of the predicate computed by conditional statement
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005fset_005flhs"></a>GIMPLE function: <em>void</em> <strong>gimple_cond_set_lhs</strong> <em>(gimple g, tree lhs)</em></dt>
<dd><p>Set <code>LHS</code> to be the <code>LHS</code> operand of the predicate computed by
conditional statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005frhs"></a>GIMPLE function: <em>tree</em> <strong>gimple_cond_rhs</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>RHS</code> operand of the predicate computed by conditional
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005fset_005frhs"></a>GIMPLE function: <em>void</em> <strong>gimple_cond_set_rhs</strong> <em>(gimple g, tree rhs)</em></dt>
<dd><p>Set <code>RHS</code> to be the <code>RHS</code> operand of the predicate computed by
conditional statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005ftrue_005flabel"></a>GIMPLE function: <em>tree</em> <strong>gimple_cond_true_label</strong> <em>(gimple g)</em></dt>
<dd><p>Return the label used by conditional statement <code>G</code> when its
predicate evaluates to true.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005fset_005ftrue_005flabel"></a>GIMPLE function: <em>void</em> <strong>gimple_cond_set_true_label</strong> <em>(gimple g, tree label)</em></dt>
<dd><p>Set <code>LABEL</code> to be the label used by conditional statement <code>G</code> when
its predicate evaluates to true.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005fset_005ffalse_005flabel"></a>GIMPLE function: <em>void</em> <strong>gimple_cond_set_false_label</strong> <em>(gimple g, tree label)</em></dt>
<dd><p>Set <code>LABEL</code> to be the label used by conditional statement <code>G</code> when
its predicate evaluates to false.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005ffalse_005flabel"></a>GIMPLE function: <em>tree</em> <strong>gimple_cond_false_label</strong> <em>(gimple g)</em></dt>
<dd><p>Return the label used by conditional statement <code>G</code> when its
predicate evaluates to false.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005fmake_005ffalse"></a>GIMPLE function: <em>void</em> <strong>gimple_cond_make_false</strong> <em>(gimple g)</em></dt>
<dd><p>Set the conditional <code>COND_STMT</code> to be of the form &rsquo;if (1 == 0)&rsquo;.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fcond_005fmake_005ftrue"></a>GIMPLE function: <em>void</em> <strong>gimple_cond_make_true</strong> <em>(gimple g)</em></dt>
<dd><p>Set the conditional <code>COND_STMT</code> to be of the form &rsquo;if (1 == 1)&rsquo;.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fDEBUG"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fEH_005fFILTER" accesskey="n" rel="next"><code>GIMPLE_EH_FILTER</code></a>, Previous: <a href="#GIMPLE_005fCOND" accesskey="p" rel="prev"><code>GIMPLE_COND</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fDEBUG-1"></a>
<h4 class="subsection">12.7.7 <code>GIMPLE_DEBUG</code></h4>
<a name="index-GIMPLE_005fDEBUG"></a>
<a name="index-GIMPLE_005fDEBUG_005fBIND"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fdebug_005fbind"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_debug_bind</strong> <em>(tree var, tree value, gimple stmt)</em></dt>
<dd><p>Build a <code>GIMPLE_DEBUG</code> statement with <code>GIMPLE_DEBUG_BIND</code> of
<code>subcode</code>.  The effect of this statement is to tell debug
information generation machinery that the value of user variable
<code>var</code> is given by <code>value</code> at that point, and to remain with
that value until <code>var</code> runs out of scope, a
dynamically-subsequent debug bind statement overrides the binding, or
conflicting values reach a control flow merge point.  Even if
components of the <code>value</code> expression change afterwards, the
variable is supposed to retain the same value, though not necessarily
the same location.
</p>
<p>It is expected that <code>var</code> be most often a tree for automatic user
variables (<code>VAR_DECL</code> or <code>PARM_DECL</code>) that satisfy the
requirements for gimple registers, but it may also be a tree for a
scalarized component of a user variable (<code>ARRAY_REF</code>,
<code>COMPONENT_REF</code>), or a debug temporary (<code>DEBUG_EXPR_DECL</code>).
</p>
<p>As for <code>value</code>, it can be an arbitrary tree expression, but it is
recommended that it be in a suitable form for a gimple assignment
<code>RHS</code>.  It is not expected that user variables that could appear
as <code>var</code> ever appear in <code>value</code>, because in the latter we&rsquo;d
have their <code>SSA_NAME</code>s instead, but even if they were not in SSA
form, user variables appearing in <code>value</code> are to be regarded as
part of the executable code space, whereas those in <code>var</code> are to
be regarded as part of the source code space.  There is no way to
refer to the value bound to a user variable within a <code>value</code>
expression.
</p>
<p>If <code>value</code> is <code>GIMPLE_DEBUG_BIND_NOVALUE</code>, debug information
generation machinery is informed that the variable <code>var</code> is
unbound, i.e., that its value is indeterminate, which sometimes means
it is really unavailable, and other times that the compiler could not
keep track of it.
</p>
<p>Block and location information for the newly-created stmt are
taken from <code>stmt</code>, if given.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fget_005fvar"></a>GIMPLE function: <em>tree</em> <strong>gimple_debug_bind_get_var</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return the user variable <var>var</var> that is bound at <code>stmt</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fget_005fvalue"></a>GIMPLE function: <em>tree</em> <strong>gimple_debug_bind_get_value</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return the value expression that is bound to a user variable at
<code>stmt</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fget_005fvalue_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_debug_bind_get_value_ptr</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return a pointer to the value expression that is bound to a user
variable at <code>stmt</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fset_005fvar"></a>GIMPLE function: <em>void</em> <strong>gimple_debug_bind_set_var</strong> <em>(gimple stmt, tree var)</em></dt>
<dd><p>Modify the user variable bound at <code>stmt</code> to <var>var</var>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fset_005fvalue"></a>GIMPLE function: <em>void</em> <strong>gimple_debug_bind_set_value</strong> <em>(gimple stmt, tree var)</em></dt>
<dd><p>Modify the value bound to the user variable bound at <code>stmt</code> to
<var>value</var>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005freset_005fvalue"></a>GIMPLE function: <em>void</em> <strong>gimple_debug_bind_reset_value</strong> <em>(gimple stmt)</em></dt>
<dd><p>Modify the value bound to the user variable bound at <code>stmt</code> so
that the variable becomes unbound.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fdebug_005fbind_005fhas_005fvalue_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_debug_bind_has_value_p</strong> <em>(gimple stmt)</em></dt>
<dd><p>Return <code>TRUE</code> if <code>stmt</code> binds a user variable to a value,
and <code>FALSE</code> if it unbinds the variable.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fEH_005fFILTER"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fLABEL" accesskey="n" rel="next"><code>GIMPLE_LABEL</code></a>, Previous: <a href="#GIMPLE_005fDEBUG" accesskey="p" rel="prev"><code>GIMPLE_DEBUG</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fEH_005fFILTER-1"></a>
<h4 class="subsection">12.7.8 <code>GIMPLE_EH_FILTER</code></h4>
<a name="index-GIMPLE_005fEH_005fFILTER"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005feh_005ffilter"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_eh_filter</strong> <em>(tree types, gimple_seq failure)</em></dt>
<dd><p>Build a <code>GIMPLE_EH_FILTER</code> statement.  <code>TYPES</code> are the filter&rsquo;s
types.  <code>FAILURE</code> is a sequence with the filter&rsquo;s failure action.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005feh_005ffilter_005ftypes"></a>GIMPLE function: <em>tree</em> <strong>gimple_eh_filter_types</strong> <em>(gimple g)</em></dt>
<dd><p>Return the types handled by <code>GIMPLE_EH_FILTER</code> statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005feh_005ffilter_005ftypes_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_eh_filter_types_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the types handled by <code>GIMPLE_EH_FILTER</code>
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005feh_005ffilter_005ffailure"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_eh_filter_failure</strong> <em>(gimple g)</em></dt>
<dd><p>Return the sequence of statement to execute when <code>GIMPLE_EH_FILTER</code>
statement fails.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005feh_005ffilter_005fset_005ftypes"></a>GIMPLE function: <em>void</em> <strong>gimple_eh_filter_set_types</strong> <em>(gimple g, tree types)</em></dt>
<dd><p>Set <code>TYPES</code> to be the set of types handled by <code>GIMPLE_EH_FILTER</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005feh_005ffilter_005fset_005ffailure"></a>GIMPLE function: <em>void</em> <strong>gimple_eh_filter_set_failure</strong> <em>(gimple g, gimple_seq failure)</em></dt>
<dd><p>Set <code>FAILURE</code> to be the sequence of statements to execute on
failure for <code>GIMPLE_EH_FILTER</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005feh_005ffilter_005fmust_005fnot_005fthrow"></a>GIMPLE function: <em>bool</em> <strong>gimple_eh_filter_must_not_throw</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>EH_FILTER_MUST_NOT_THROW</code> flag.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005feh_005ffilter_005fset_005fmust_005fnot_005fthrow"></a>GIMPLE function: <em>void</em> <strong>gimple_eh_filter_set_must_not_throw</strong> <em>(gimple g, bool mntp)</em></dt>
<dd><p>Set the <code>EH_FILTER_MUST_NOT_THROW</code> flag.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fLABEL"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fNOP" accesskey="n" rel="next"><code>GIMPLE_NOP</code></a>, Previous: <a href="#GIMPLE_005fEH_005fFILTER" accesskey="p" rel="prev"><code>GIMPLE_EH_FILTER</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fLABEL-1"></a>
<h4 class="subsection">12.7.9 <code>GIMPLE_LABEL</code></h4>
<a name="index-GIMPLE_005fLABEL"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005flabel"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_label</strong> <em>(tree label)</em></dt>
<dd><p>Build a <code>GIMPLE_LABEL</code> statement with corresponding to the tree
label, <code>LABEL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005flabel_005flabel"></a>GIMPLE function: <em>tree</em> <strong>gimple_label_label</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>LABEL_DECL</code> node used by <code>GIMPLE_LABEL</code> statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005flabel_005fset_005flabel"></a>GIMPLE function: <em>void</em> <strong>gimple_label_set_label</strong> <em>(gimple g, tree label)</em></dt>
<dd><p>Set <code>LABEL</code> to be the <code>LABEL_DECL</code> node used by <code>GIMPLE_LABEL</code>
statement <code>G</code>.
</p></dd></dl>


<dl>
<dt><a name="index-gimple_005fbuild_005fgoto"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_goto</strong> <em>(tree dest)</em></dt>
<dd><p>Build a <code>GIMPLE_GOTO</code> statement to label <code>DEST</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fgoto_005fdest"></a>GIMPLE function: <em>tree</em> <strong>gimple_goto_dest</strong> <em>(gimple g)</em></dt>
<dd><p>Return the destination of the unconditional jump <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fgoto_005fset_005fdest"></a>GIMPLE function: <em>void</em> <strong>gimple_goto_set_dest</strong> <em>(gimple g, tree dest)</em></dt>
<dd><p>Set <code>DEST</code> to be the destination of the unconditional jump <code>G</code>.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fNOP"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD" accesskey="n" rel="next"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a>, Previous: <a href="#GIMPLE_005fLABEL" accesskey="p" rel="prev"><code>GIMPLE_LABEL</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fNOP-1"></a>
<h4 class="subsection">12.7.10 <code>GIMPLE_NOP</code></h4>
<a name="index-GIMPLE_005fNOP"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fnop"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_nop</strong> <em>(void)</em></dt>
<dd><p>Build a <code>GIMPLE_NOP</code> statement.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fnop_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_nop_p</strong> <em>(gimple g)</em></dt>
<dd><p>Returns <code>TRUE</code> if statement <code>G</code> is a <code>GIMPLE_NOP</code>.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fOMP_005fATOMIC_005fLOAD"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fATOMIC_005fSTORE" accesskey="n" rel="next"><code>GIMPLE_OMP_ATOMIC_STORE</code></a>, Previous: <a href="#GIMPLE_005fNOP" accesskey="p" rel="prev"><code>GIMPLE_NOP</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fATOMIC_005fLOAD-1"></a>
<h4 class="subsection">12.7.11 <code>GIMPLE_OMP_ATOMIC_LOAD</code></h4>
<a name="index-GIMPLE_005fOMP_005fATOMIC_005fLOAD"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fatomic_005fload"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_atomic_load</strong> <em>(tree lhs, tree rhs)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_ATOMIC_LOAD</code> statement.  <code>LHS</code> is the left-hand
side of the assignment.  <code>RHS</code> is the right-hand side of the
assignment.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fatomic_005fload_005fset_005flhs"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_atomic_load_set_lhs</strong> <em>(gimple g, tree lhs)</em></dt>
<dd><p>Set the <code>LHS</code> of an atomic load.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fatomic_005fload_005flhs"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_atomic_load_lhs</strong> <em>(gimple g)</em></dt>
<dd><p>Get the <code>LHS</code> of an atomic load.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fatomic_005fload_005fset_005frhs"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_atomic_load_set_rhs</strong> <em>(gimple g, tree rhs)</em></dt>
<dd><p>Set the <code>RHS</code> of an atomic set.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fatomic_005fload_005frhs"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_atomic_load_rhs</strong> <em>(gimple g)</em></dt>
<dd><p>Get the <code>RHS</code> of an atomic set.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fOMP_005fATOMIC_005fSTORE"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fCONTINUE" accesskey="n" rel="next"><code>GIMPLE_OMP_CONTINUE</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD" accesskey="p" rel="prev"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fATOMIC_005fSTORE-1"></a>
<h4 class="subsection">12.7.12 <code>GIMPLE_OMP_ATOMIC_STORE</code></h4>
<a name="index-GIMPLE_005fOMP_005fATOMIC_005fSTORE"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fatomic_005fstore"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_atomic_store</strong> <em>(tree val)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_ATOMIC_STORE</code> statement. <code>VAL</code> is the value to be
stored.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fatomic_005fstore_005fset_005fval"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_atomic_store_set_val</strong> <em>(gimple g, tree val)</em></dt>
<dd><p>Set the value being stored in an atomic store.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fatomic_005fstore_005fval"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_atomic_store_val</strong> <em>(gimple g)</em></dt>
<dd><p>Return the value being stored in an atomic store.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fOMP_005fCONTINUE"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fCRITICAL" accesskey="n" rel="next"><code>GIMPLE_OMP_CRITICAL</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fATOMIC_005fSTORE" accesskey="p" rel="prev"><code>GIMPLE_OMP_ATOMIC_STORE</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fCONTINUE-1"></a>
<h4 class="subsection">12.7.13 <code>GIMPLE_OMP_CONTINUE</code></h4>
<a name="index-GIMPLE_005fOMP_005fCONTINUE"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fcontinue"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_continue</strong> <em>(tree control_def, tree control_use)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_CONTINUE</code> statement.  <code>CONTROL_DEF</code> is the
definition of the control variable.  <code>CONTROL_USE</code> is the use of
the control variable.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fcontinue_005fcontrol_005fdef"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_continue_control_def</strong> <em>(gimple s)</em></dt>
<dd><p>Return the definition of the control variable on a
<code>GIMPLE_OMP_CONTINUE</code> in <code>S</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fcontinue_005fcontrol_005fdef_005fptr"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_continue_control_def_ptr</strong> <em>(gimple s)</em></dt>
<dd><p>Same as above, but return the pointer.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fcontinue_005fset_005fcontrol_005fdef"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_continue_set_control_def</strong> <em>(gimple s)</em></dt>
<dd><p>Set the control variable definition for a <code>GIMPLE_OMP_CONTINUE</code>
statement in <code>S</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fcontinue_005fcontrol_005fuse"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_continue_control_use</strong> <em>(gimple s)</em></dt>
<dd><p>Return the use of the control variable on a <code>GIMPLE_OMP_CONTINUE</code>
in <code>S</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fcontinue_005fcontrol_005fuse_005fptr"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_continue_control_use_ptr</strong> <em>(gimple s)</em></dt>
<dd><p>Same as above, but return the pointer.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fcontinue_005fset_005fcontrol_005fuse"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_continue_set_control_use</strong> <em>(gimple s)</em></dt>
<dd><p>Set the control variable use for a <code>GIMPLE_OMP_CONTINUE</code> statement
in <code>S</code>.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fOMP_005fCRITICAL"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fFOR" accesskey="n" rel="next"><code>GIMPLE_OMP_FOR</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fCONTINUE" accesskey="p" rel="prev"><code>GIMPLE_OMP_CONTINUE</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fCRITICAL-1"></a>
<h4 class="subsection">12.7.14 <code>GIMPLE_OMP_CRITICAL</code></h4>
<a name="index-GIMPLE_005fOMP_005fCRITICAL"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fcritical"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_critical</strong> <em>(gimple_seq body, tree name)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_CRITICAL</code> statement. <code>BODY</code> is the sequence of
statements for which only one thread can execute.  <code>NAME</code> is an
optional identifier for this critical block.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fcritical_005fname"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_critical_name</strong> <em>(gimple g)</em></dt>
<dd><p>Return the name associated with <code>OMP_CRITICAL</code> statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fcritical_005fname_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_critical_name_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the name associated with <code>OMP</code> critical
statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fcritical_005fset_005fname"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_critical_set_name</strong> <em>(gimple g, tree name)</em></dt>
<dd><p>Set <code>NAME</code> to be the name associated with <code>OMP</code> critical statement <code>G</code>.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fOMP_005fFOR"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fMASTER" accesskey="n" rel="next"><code>GIMPLE_OMP_MASTER</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fCRITICAL" accesskey="p" rel="prev"><code>GIMPLE_OMP_CRITICAL</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fFOR-1"></a>
<h4 class="subsection">12.7.15 <code>GIMPLE_OMP_FOR</code></h4>
<a name="index-GIMPLE_005fOMP_005fFOR"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005ffor"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_for</strong> <em>(gimple_seq body, tree clauses, tree index, tree initial, tree final, tree incr, gimple_seq pre_body, enum tree_code omp_for_cond)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_FOR</code> statement. <code>BODY</code> is sequence of statements
inside the for loop.  <code>CLAUSES</code>, are any of the <code>OMP</code> loop
construct&rsquo;s clauses: private, firstprivate,  lastprivate,
reductions, ordered, schedule, and nowait.  <code>PRE_BODY</code> is the
sequence of statements that are loop invariant.  <code>INDEX</code> is the
index variable.  <code>INITIAL</code> is the initial value of <code>INDEX</code>.  <code>FINAL</code> is
final value of <code>INDEX</code>.  OMP_FOR_COND is the predicate used to
compare <code>INDEX</code> and <code>FINAL</code>.  <code>INCR</code> is the increment expression.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fclauses"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_for_clauses</strong> <em>(gimple g)</em></dt>
<dd><p>Return the clauses associated with <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fclauses_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_for_clauses_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fset_005fclauses"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_for_set_clauses</strong> <em>(gimple g, tree clauses)</em></dt>
<dd><p>Set <code>CLAUSES</code> to be the list of clauses associated with <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005findex"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_for_index</strong> <em>(gimple g)</em></dt>
<dd><p>Return the index variable for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005findex_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_for_index_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the index variable for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fset_005findex"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_for_set_index</strong> <em>(gimple g, tree index)</em></dt>
<dd><p>Set <code>INDEX</code> to be the index variable for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005finitial"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_for_initial</strong> <em>(gimple g)</em></dt>
<dd><p>Return the initial value for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005finitial_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_for_initial_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the initial value for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fset_005finitial"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_for_set_initial</strong> <em>(gimple g, tree initial)</em></dt>
<dd><p>Set <code>INITIAL</code> to be the initial value for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005ffinal"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_for_final</strong> <em>(gimple g)</em></dt>
<dd><p>Return the final value for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005ffinal_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_for_final_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>turn a pointer to the final value for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fset_005ffinal"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_for_set_final</strong> <em>(gimple g, tree final)</em></dt>
<dd><p>Set <code>FINAL</code> to be the final value for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fincr"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_for_incr</strong> <em>(gimple g)</em></dt>
<dd><p>Return the increment value for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fincr_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_for_incr_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the increment value for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fset_005fincr"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_for_set_incr</strong> <em>(gimple g, tree incr)</em></dt>
<dd><p>Set <code>INCR</code> to be the increment value for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fpre_005fbody"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_omp_for_pre_body</strong> <em>(gimple g)</em></dt>
<dd><p>Return the sequence of statements to execute before the <code>OMP_FOR</code>
statement <code>G</code> starts.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fset_005fpre_005fbody"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_for_set_pre_body</strong> <em>(gimple g, gimple_seq pre_body)</em></dt>
<dd><p>Set <code>PRE_BODY</code> to be the sequence of statements to execute before
the <code>OMP_FOR</code> statement <code>G</code> starts.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fset_005fcond"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_for_set_cond</strong> <em>(gimple g, enum tree_code cond)</em></dt>
<dd><p>Set <code>COND</code> to be the condition code for <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005ffor_005fcond"></a>GIMPLE function: <em>enum tree_code</em> <strong>gimple_omp_for_cond</strong> <em>(gimple g)</em></dt>
<dd><p>Return the condition code associated with <code>OMP_FOR</code> <code>G</code>.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fOMP_005fMASTER"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fORDERED" accesskey="n" rel="next"><code>GIMPLE_OMP_ORDERED</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fFOR" accesskey="p" rel="prev"><code>GIMPLE_OMP_FOR</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fMASTER-1"></a>
<h4 class="subsection">12.7.16 <code>GIMPLE_OMP_MASTER</code></h4>
<a name="index-GIMPLE_005fOMP_005fMASTER"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fmaster"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_master</strong> <em>(gimple_seq body)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_MASTER</code> statement. <code>BODY</code> is the sequence of
statements to be executed by just the master.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fOMP_005fORDERED"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fPARALLEL" accesskey="n" rel="next"><code>GIMPLE_OMP_PARALLEL</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fMASTER" accesskey="p" rel="prev"><code>GIMPLE_OMP_MASTER</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fORDERED-1"></a>
<h4 class="subsection">12.7.17 <code>GIMPLE_OMP_ORDERED</code></h4>
<a name="index-GIMPLE_005fOMP_005fORDERED"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fordered"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_ordered</strong> <em>(gimple_seq body)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_ORDERED</code> statement.
</p></dd></dl>

<p><code>BODY</code> is the sequence of statements inside a loop that will
executed in sequence.
</p>

<hr>
<a name="GIMPLE_005fOMP_005fPARALLEL"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fRETURN" accesskey="n" rel="next"><code>GIMPLE_OMP_RETURN</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fORDERED" accesskey="p" rel="prev"><code>GIMPLE_OMP_ORDERED</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fPARALLEL-1"></a>
<h4 class="subsection">12.7.18 <code>GIMPLE_OMP_PARALLEL</code></h4>
<a name="index-GIMPLE_005fOMP_005fPARALLEL"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fparallel"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_parallel</strong> <em>(gimple_seq body, tree clauses, tree child_fn, tree data_arg)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_PARALLEL</code> statement.
</p></dd></dl>

<p><code>BODY</code> is sequence of statements which are executed in parallel.
<code>CLAUSES</code>, are the <code>OMP</code> parallel construct&rsquo;s clauses.  <code>CHILD_FN</code> is
the function created for the parallel threads to execute.
<code>DATA_ARG</code> are the shared data argument(s).
</p>
<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fcombined_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_omp_parallel_combined_p</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if <code>OMP</code> parallel statement <code>G</code> has the
<code>GF_OMP_PARALLEL_COMBINED</code> flag set.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fset_005fcombined_005fp"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_parallel_set_combined_p</strong> <em>(gimple g)</em></dt>
<dd><p>Set the <code>GF_OMP_PARALLEL_COMBINED</code> field in <code>OMP</code> parallel statement
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fbody"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_omp_body</strong> <em>(gimple g)</em></dt>
<dd><p>Return the body for the <code>OMP</code> statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fset_005fbody"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_set_body</strong> <em>(gimple g, gimple_seq body)</em></dt>
<dd><p>Set <code>BODY</code> to be the body for the <code>OMP</code> statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fclauses"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_parallel_clauses</strong> <em>(gimple g)</em></dt>
<dd><p>Return the clauses associated with <code>OMP_PARALLEL</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fclauses_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_parallel_clauses_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the clauses associated with <code>OMP_PARALLEL</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fset_005fclauses"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_parallel_set_clauses</strong> <em>(gimple g, tree clauses)</em></dt>
<dd><p>Set <code>CLAUSES</code> to be the list of clauses associated with
<code>OMP_PARALLEL</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fchild_005ffn"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_parallel_child_fn</strong> <em>(gimple g)</em></dt>
<dd><p>Return the child function used to hold the body of <code>OMP_PARALLEL</code>
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fchild_005ffn_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_parallel_child_fn_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the child function used to hold the body of
<code>OMP_PARALLEL</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fset_005fchild_005ffn"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_parallel_set_child_fn</strong> <em>(gimple g, tree child_fn)</em></dt>
<dd><p>Set <code>CHILD_FN</code> to be the child function for <code>OMP_PARALLEL</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fdata_005farg"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_parallel_data_arg</strong> <em>(gimple g)</em></dt>
<dd><p>Return the artificial argument used to send variables and values
from the parent to the children threads in <code>OMP_PARALLEL</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fdata_005farg_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_parallel_data_arg_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the data argument for <code>OMP_PARALLEL</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fparallel_005fset_005fdata_005farg"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_parallel_set_data_arg</strong> <em>(gimple g, tree data_arg)</em></dt>
<dd><p>Set <code>DATA_ARG</code> to be the data argument for <code>OMP_PARALLEL</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-is_005fgimple_005fomp"></a>GIMPLE function: <em>bool</em> <strong>is_gimple_omp</strong> <em>(gimple stmt)</em></dt>
<dd><p>Returns true when the gimple statement <code>STMT</code> is any of the OpenMP
types.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fOMP_005fRETURN"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fSECTION" accesskey="n" rel="next"><code>GIMPLE_OMP_SECTION</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fPARALLEL" accesskey="p" rel="prev"><code>GIMPLE_OMP_PARALLEL</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fRETURN-1"></a>
<h4 class="subsection">12.7.19 <code>GIMPLE_OMP_RETURN</code></h4>
<a name="index-GIMPLE_005fOMP_005fRETURN"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005freturn"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_return</strong> <em>(bool wait_p)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_RETURN</code> statement. <code>WAIT_P</code> is true if this is a
non-waiting return.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005freturn_005fset_005fnowait"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_return_set_nowait</strong> <em>(gimple s)</em></dt>
<dd><p>Set the nowait flag on <code>GIMPLE_OMP_RETURN</code> statement <code>S</code>.
</p></dd></dl>


<dl>
<dt><a name="index-gimple_005fomp_005freturn_005fnowait_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_omp_return_nowait_p</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if <code>OMP</code> return statement <code>G</code> has the
<code>GF_OMP_RETURN_NOWAIT</code> flag set.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fOMP_005fSECTION"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fSECTIONS" accesskey="n" rel="next"><code>GIMPLE_OMP_SECTIONS</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fRETURN" accesskey="p" rel="prev"><code>GIMPLE_OMP_RETURN</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fSECTION-1"></a>
<h4 class="subsection">12.7.20 <code>GIMPLE_OMP_SECTION</code></h4>
<a name="index-GIMPLE_005fOMP_005fSECTION"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fsection"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_section</strong> <em>(gimple_seq body)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_SECTION</code> statement for a sections statement.
</p></dd></dl>

<p><code>BODY</code> is the sequence of statements in the section.
</p>
<dl>
<dt><a name="index-gimple_005fomp_005fsection_005flast_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_omp_section_last_p</strong> <em>(gimple g)</em></dt>
<dd><p>Return true if <code>OMP</code> section statement <code>G</code> has the
<code>GF_OMP_SECTION_LAST</code> flag set.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsection_005fset_005flast"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_section_set_last</strong> <em>(gimple g)</em></dt>
<dd><p>Set the <code>GF_OMP_SECTION_LAST</code> flag on <code>G</code>.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fOMP_005fSECTIONS"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fOMP_005fSINGLE" accesskey="n" rel="next"><code>GIMPLE_OMP_SINGLE</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fSECTION" accesskey="p" rel="prev"><code>GIMPLE_OMP_SECTION</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fSECTIONS-1"></a>
<h4 class="subsection">12.7.21 <code>GIMPLE_OMP_SECTIONS</code></h4>
<a name="index-GIMPLE_005fOMP_005fSECTIONS"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fsections"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_sections</strong> <em>(gimple_seq body, tree clauses)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_SECTIONS</code> statement. <code>BODY</code> is a sequence of
section statements.  <code>CLAUSES</code> are any of the <code>OMP</code> sections
construct&rsquo;s clauses: private, firstprivate, lastprivate,
reduction, and nowait.
</p></dd></dl>


<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fsections_005fswitch"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_sections_switch</strong> <em>(void)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_SECTIONS_SWITCH</code> statement.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsections_005fcontrol"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_sections_control</strong> <em>(gimple g)</em></dt>
<dd><p>Return the control variable associated with the
<code>GIMPLE_OMP_SECTIONS</code> in <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsections_005fcontrol_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_sections_control_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the clauses associated with the
<code>GIMPLE_OMP_SECTIONS</code> in <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsections_005fset_005fcontrol"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_sections_set_control</strong> <em>(gimple g, tree control)</em></dt>
<dd><p>Set <code>CONTROL</code> to be the set of clauses associated with the
<code>GIMPLE_OMP_SECTIONS</code> in <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsections_005fclauses"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_sections_clauses</strong> <em>(gimple g)</em></dt>
<dd><p>Return the clauses associated with <code>OMP_SECTIONS</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsections_005fclauses_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_sections_clauses_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the clauses associated with <code>OMP_SECTIONS</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsections_005fset_005fclauses"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_sections_set_clauses</strong> <em>(gimple g, tree clauses)</em></dt>
<dd><p>Set <code>CLAUSES</code> to be the set of clauses associated with <code>OMP_SECTIONS</code>
<code>G</code>.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fOMP_005fSINGLE"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fPHI" accesskey="n" rel="next"><code>GIMPLE_PHI</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fSECTIONS" accesskey="p" rel="prev"><code>GIMPLE_OMP_SECTIONS</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fOMP_005fSINGLE-1"></a>
<h4 class="subsection">12.7.22 <code>GIMPLE_OMP_SINGLE</code></h4>
<a name="index-GIMPLE_005fOMP_005fSINGLE"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fomp_005fsingle"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_omp_single</strong> <em>(gimple_seq body, tree clauses)</em></dt>
<dd><p>Build a <code>GIMPLE_OMP_SINGLE</code> statement. <code>BODY</code> is the sequence of
statements that will be executed once.  <code>CLAUSES</code> are any of the
<code>OMP</code> single construct&rsquo;s clauses: private, firstprivate,
copyprivate, nowait.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsingle_005fclauses"></a>GIMPLE function: <em>tree</em> <strong>gimple_omp_single_clauses</strong> <em>(gimple g)</em></dt>
<dd><p>Return the clauses associated with <code>OMP_SINGLE</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsingle_005fclauses_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_omp_single_clauses_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the clauses associated with <code>OMP_SINGLE</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fomp_005fsingle_005fset_005fclauses"></a>GIMPLE function: <em>void</em> <strong>gimple_omp_single_set_clauses</strong> <em>(gimple g, tree clauses)</em></dt>
<dd><p>Set <code>CLAUSES</code> to be the clauses associated with <code>OMP_SINGLE</code> <code>G</code>.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fPHI"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fRESX" accesskey="n" rel="next"><code>GIMPLE_RESX</code></a>, Previous: <a href="#GIMPLE_005fOMP_005fSINGLE" accesskey="p" rel="prev"><code>GIMPLE_OMP_SINGLE</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fPHI-1"></a>
<h4 class="subsection">12.7.23 <code>GIMPLE_PHI</code></h4>
<a name="index-GIMPLE_005fPHI"></a>

<dl>
<dt><a name="index-gimple_005fphi_005fcapacity"></a>GIMPLE function: <em>unsigned</em> <strong>gimple_phi_capacity</strong> <em>(gimple g)</em></dt>
<dd><p>Return the maximum number of arguments supported by <code>GIMPLE_PHI</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fphi_005fnum_005fargs"></a>GIMPLE function: <em>unsigned</em> <strong>gimple_phi_num_args</strong> <em>(gimple g)</em></dt>
<dd><p>Return the number of arguments in <code>GIMPLE_PHI</code> <code>G</code>. This must always
be exactly the number of incoming edges for the basic block
holding <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fphi_005fresult"></a>GIMPLE function: <em>tree</em> <strong>gimple_phi_result</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>SSA</code> name created by <code>GIMPLE_PHI</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fphi_005fresult_005fptr"></a>GIMPLE function: <em>tree *</em> <strong>gimple_phi_result_ptr</strong> <em>(gimple g)</em></dt>
<dd><p>Return a pointer to the <code>SSA</code> name created by <code>GIMPLE_PHI</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fphi_005fset_005fresult"></a>GIMPLE function: <em>void</em> <strong>gimple_phi_set_result</strong> <em>(gimple g, tree result)</em></dt>
<dd><p>Set <code>RESULT</code> to be the <code>SSA</code> name created by <code>GIMPLE_PHI</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fphi_005farg"></a>GIMPLE function: <em>struct phi_arg_d *</em> <strong>gimple_phi_arg</strong> <em>(gimple g, index)</em></dt>
<dd><p>Return the <code>PHI</code> argument corresponding to incoming edge <code>INDEX</code> for
<code>GIMPLE_PHI</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fphi_005fset_005farg"></a>GIMPLE function: <em>void</em> <strong>gimple_phi_set_arg</strong> <em>(gimple g, index, struct phi_arg_d * phiarg)</em></dt>
<dd><p>Set <code>PHIARG</code> to be the argument corresponding to incoming edge
<code>INDEX</code> for <code>GIMPLE_PHI</code> <code>G</code>.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fRESX"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fRETURN" accesskey="n" rel="next"><code>GIMPLE_RETURN</code></a>, Previous: <a href="#GIMPLE_005fPHI" accesskey="p" rel="prev"><code>GIMPLE_PHI</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fRESX-1"></a>
<h4 class="subsection">12.7.24 <code>GIMPLE_RESX</code></h4>
<a name="index-GIMPLE_005fRESX"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fresx"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_resx</strong> <em>(int region)</em></dt>
<dd><p>Build a <code>GIMPLE_RESX</code> statement which is a statement.  This
statement is a placeholder for _Unwind_Resume before we know if a
function call or a branch is needed.  <code>REGION</code> is the exception
region from which control is flowing.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fresx_005fregion"></a>GIMPLE function: <em>int</em> <strong>gimple_resx_region</strong> <em>(gimple g)</em></dt>
<dd><p>Return the region number for <code>GIMPLE_RESX</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fresx_005fset_005fregion"></a>GIMPLE function: <em>void</em> <strong>gimple_resx_set_region</strong> <em>(gimple g, int region)</em></dt>
<dd><p>Set <code>REGION</code> to be the region number for <code>GIMPLE_RESX</code> <code>G</code>.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fRETURN"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fSWITCH" accesskey="n" rel="next"><code>GIMPLE_SWITCH</code></a>, Previous: <a href="#GIMPLE_005fRESX" accesskey="p" rel="prev"><code>GIMPLE_RESX</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fRETURN-1"></a>
<h4 class="subsection">12.7.25 <code>GIMPLE_RETURN</code></h4>
<a name="index-GIMPLE_005fRETURN"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005freturn"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_return</strong> <em>(tree retval)</em></dt>
<dd><p>Build a <code>GIMPLE_RETURN</code> statement whose return value is retval.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005freturn_005fretval"></a>GIMPLE function: <em>tree</em> <strong>gimple_return_retval</strong> <em>(gimple g)</em></dt>
<dd><p>Return the return value for <code>GIMPLE_RETURN</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005freturn_005fset_005fretval"></a>GIMPLE function: <em>void</em> <strong>gimple_return_set_retval</strong> <em>(gimple g, tree retval)</em></dt>
<dd><p>Set <code>RETVAL</code> to be the return value for <code>GIMPLE_RETURN</code> <code>G</code>.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fSWITCH"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fTRY" accesskey="n" rel="next"><code>GIMPLE_TRY</code></a>, Previous: <a href="#GIMPLE_005fRETURN" accesskey="p" rel="prev"><code>GIMPLE_RETURN</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fSWITCH-1"></a>
<h4 class="subsection">12.7.26 <code>GIMPLE_SWITCH</code></h4>
<a name="index-GIMPLE_005fSWITCH"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fswitch"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_switch</strong> <em>(tree index, tree default_label, <code>VEC</code>(tree,heap) *args)</em></dt>
<dd><p>Build a <code>GIMPLE_SWITCH</code> statement.  <code>INDEX</code> is the index variable
to switch on, and <code>DEFAULT_LABEL</code> represents the default label.
<code>ARGS</code> is a vector of <code>CASE_LABEL_EXPR</code> trees that contain the
non-default case labels.  Each label is a tree of code <code>CASE_LABEL_EXPR</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fswitch_005fnum_005flabels"></a>GIMPLE function: <em>unsigned</em> <strong>gimple_switch_num_labels</strong> <em>(gimple g)</em></dt>
<dd><p>Return the number of labels associated with the switch statement
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fswitch_005fset_005fnum_005flabels"></a>GIMPLE function: <em>void</em> <strong>gimple_switch_set_num_labels</strong> <em>(gimple g, unsigned nlabels)</em></dt>
<dd><p>Set <code>NLABELS</code> to be the number of labels for the switch statement
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fswitch_005findex"></a>GIMPLE function: <em>tree</em> <strong>gimple_switch_index</strong> <em>(gimple g)</em></dt>
<dd><p>Return the index variable used by the switch statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fswitch_005fset_005findex"></a>GIMPLE function: <em>void</em> <strong>gimple_switch_set_index</strong> <em>(gimple g, tree index)</em></dt>
<dd><p>Set <code>INDEX</code> to be the index variable for switch statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fswitch_005flabel"></a>GIMPLE function: <em>tree</em> <strong>gimple_switch_label</strong> <em>(gimple g, unsigned index)</em></dt>
<dd><p>Return the label numbered <code>INDEX</code>. The default label is 0, followed
by any labels in a switch statement.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fswitch_005fset_005flabel"></a>GIMPLE function: <em>void</em> <strong>gimple_switch_set_label</strong> <em>(gimple g, unsigned index, tree label)</em></dt>
<dd><p>Set the label number <code>INDEX</code> to <code>LABEL</code>. 0 is always the default
label.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fswitch_005fdefault_005flabel"></a>GIMPLE function: <em>tree</em> <strong>gimple_switch_default_label</strong> <em>(gimple g)</em></dt>
<dd><p>Return the default label for a switch statement.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fswitch_005fset_005fdefault_005flabel"></a>GIMPLE function: <em>void</em> <strong>gimple_switch_set_default_label</strong> <em>(gimple g, tree label)</em></dt>
<dd><p>Set the default label for a switch statement.
</p></dd></dl>


<hr>
<a name="GIMPLE_005fTRY"></a>
<div class="header">
<p>
Next: <a href="#GIMPLE_005fWITH_005fCLEANUP_005fEXPR" accesskey="n" rel="next"><code>GIMPLE_WITH_CLEANUP_EXPR</code></a>, Previous: <a href="#GIMPLE_005fSWITCH" accesskey="p" rel="prev"><code>GIMPLE_SWITCH</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fTRY-1"></a>
<h4 class="subsection">12.7.27 <code>GIMPLE_TRY</code></h4>
<a name="index-GIMPLE_005fTRY"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005ftry"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_try</strong> <em>(gimple_seq eval, gimple_seq cleanup, unsigned int kind)</em></dt>
<dd><p>Build a <code>GIMPLE_TRY</code> statement.  <code>EVAL</code> is a sequence with the
expression to evaluate.  <code>CLEANUP</code> is a sequence of statements to
run at clean-up time.  <code>KIND</code> is the enumeration value
<code>GIMPLE_TRY_CATCH</code> if this statement denotes a try/catch construct
or <code>GIMPLE_TRY_FINALLY</code> if this statement denotes a try/finally
construct.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005ftry_005fkind"></a>GIMPLE function: <em>enum gimple_try_flags</em> <strong>gimple_try_kind</strong> <em>(gimple g)</em></dt>
<dd><p>Return the kind of try block represented by <code>GIMPLE_TRY</code> <code>G</code>. This is
either <code>GIMPLE_TRY_CATCH</code> or <code>GIMPLE_TRY_FINALLY</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005ftry_005fcatch_005fis_005fcleanup"></a>GIMPLE function: <em>bool</em> <strong>gimple_try_catch_is_cleanup</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>GIMPLE_TRY_CATCH_IS_CLEANUP</code> flag.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005ftry_005feval"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_try_eval</strong> <em>(gimple g)</em></dt>
<dd><p>Return the sequence of statements used as the body for <code>GIMPLE_TRY</code>
<code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005ftry_005fcleanup"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_try_cleanup</strong> <em>(gimple g)</em></dt>
<dd><p>Return the sequence of statements used as the cleanup body for
<code>GIMPLE_TRY</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005ftry_005fset_005fcatch_005fis_005fcleanup"></a>GIMPLE function: <em>void</em> <strong>gimple_try_set_catch_is_cleanup</strong> <em>(gimple g, bool catch_is_cleanup)</em></dt>
<dd><p>Set the <code>GIMPLE_TRY_CATCH_IS_CLEANUP</code> flag.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005ftry_005fset_005feval"></a>GIMPLE function: <em>void</em> <strong>gimple_try_set_eval</strong> <em>(gimple g, gimple_seq eval)</em></dt>
<dd><p>Set <code>EVAL</code> to be the sequence of statements to use as the body for
<code>GIMPLE_TRY</code> <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005ftry_005fset_005fcleanup"></a>GIMPLE function: <em>void</em> <strong>gimple_try_set_cleanup</strong> <em>(gimple g, gimple_seq cleanup)</em></dt>
<dd><p>Set <code>CLEANUP</code> to be the sequence of statements to use as the
cleanup body for <code>GIMPLE_TRY</code> <code>G</code>.
</p></dd></dl>

<hr>
<a name="GIMPLE_005fWITH_005fCLEANUP_005fEXPR"></a>
<div class="header">
<p>
Previous: <a href="#GIMPLE_005fTRY" accesskey="p" rel="prev"><code>GIMPLE_TRY</code></a>, Up: <a href="#Tuple-specific-accessors" accesskey="u" rel="up">Tuple specific accessors</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE_005fWITH_005fCLEANUP_005fEXPR-1"></a>
<h4 class="subsection">12.7.28 <code>GIMPLE_WITH_CLEANUP_EXPR</code></h4>
<a name="index-GIMPLE_005fWITH_005fCLEANUP_005fEXPR"></a>

<dl>
<dt><a name="index-gimple_005fbuild_005fwce"></a>GIMPLE function: <em>gimple</em> <strong>gimple_build_wce</strong> <em>(gimple_seq cleanup)</em></dt>
<dd><p>Build a <code>GIMPLE_WITH_CLEANUP_EXPR</code> statement.  <code>CLEANUP</code> is the
clean-up expression.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fwce_005fcleanup"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_wce_cleanup</strong> <em>(gimple g)</em></dt>
<dd><p>Return the cleanup sequence for cleanup statement <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fwce_005fset_005fcleanup"></a>GIMPLE function: <em>void</em> <strong>gimple_wce_set_cleanup</strong> <em>(gimple g, gimple_seq cleanup)</em></dt>
<dd><p>Set <code>CLEANUP</code> to be the cleanup sequence for <code>G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fwce_005fcleanup_005feh_005fonly"></a>GIMPLE function: <em>bool</em> <strong>gimple_wce_cleanup_eh_only</strong> <em>(gimple g)</em></dt>
<dd><p>Return the <code>CLEANUP_EH_ONLY</code> flag for a <code>WCE</code> tuple.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fwce_005fset_005fcleanup_005feh_005fonly"></a>GIMPLE function: <em>void</em> <strong>gimple_wce_set_cleanup_eh_only</strong> <em>(gimple g, bool eh_only_p)</em></dt>
<dd><p>Set the <code>CLEANUP_EH_ONLY</code> flag for a <code>WCE</code> tuple.
</p></dd></dl>


<hr>
<a name="GIMPLE-sequences"></a>
<div class="header">
<p>
Next: <a href="#Sequence-iterators" accesskey="n" rel="next">Sequence iterators</a>, Previous: <a href="#Tuple-specific-accessors" accesskey="p" rel="prev">Tuple specific accessors</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GIMPLE-sequences-1"></a>
<h3 class="section">12.8 GIMPLE sequences</h3>
<a name="index-GIMPLE-sequences"></a>

<p>GIMPLE sequences are the tuple equivalent of <code>STATEMENT_LIST</code>&rsquo;s
used in <code>GENERIC</code>.  They are used to chain statements together, and
when used in conjunction with sequence iterators, provide a
framework for iterating through statements.
</p>
<p>GIMPLE sequences are of type struct <code>gimple_sequence</code>, but are more
commonly passed by reference to functions dealing with sequences.
The type for a sequence pointer is <code>gimple_seq</code> which is the same
as struct <code>gimple_sequence</code> *.  When declaring a local sequence,
you can define a local variable of type struct <code>gimple_sequence</code>.
When declaring a sequence allocated on the garbage collected
heap, use the function <code>gimple_seq_alloc</code> documented below.
</p>
<p>There are convenience functions for iterating through sequences
in the section entitled Sequence Iterators.
</p>
<p>Below is a list of functions to manipulate and query sequences.
</p>
<dl>
<dt><a name="index-gimple_005fseq_005fadd_005fstmt"></a>GIMPLE function: <em>void</em> <strong>gimple_seq_add_stmt</strong> <em>(gimple_seq *seq, gimple g)</em></dt>
<dd><p>Link a gimple statement to the end of the sequence *<code>SEQ</code> if <code>G</code> is
not <code>NULL</code>.  If *<code>SEQ</code> is <code>NULL</code>, allocate a sequence before linking.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005fadd_005fseq"></a>GIMPLE function: <em>void</em> <strong>gimple_seq_add_seq</strong> <em>(gimple_seq *dest, gimple_seq src)</em></dt>
<dd><p>Append sequence <code>SRC</code> to the end of sequence *<code>DEST</code> if <code>SRC</code> is not
<code>NULL</code>.  If *<code>DEST</code> is <code>NULL</code>, allocate a new sequence before
appending.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005fdeep_005fcopy"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_seq_deep_copy</strong> <em>(gimple_seq src)</em></dt>
<dd><p>Perform a deep copy of sequence <code>SRC</code> and return the result.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005freverse"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_seq_reverse</strong> <em>(gimple_seq seq)</em></dt>
<dd><p>Reverse the order of the statements in the sequence <code>SEQ</code>.  Return
<code>SEQ</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005ffirst"></a>GIMPLE function: <em>gimple</em> <strong>gimple_seq_first</strong> <em>(gimple_seq s)</em></dt>
<dd><p>Return the first statement in sequence <code>S</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005flast"></a>GIMPLE function: <em>gimple</em> <strong>gimple_seq_last</strong> <em>(gimple_seq s)</em></dt>
<dd><p>Return the last statement in sequence <code>S</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005fset_005flast"></a>GIMPLE function: <em>void</em> <strong>gimple_seq_set_last</strong> <em>(gimple_seq s, gimple last)</em></dt>
<dd><p>Set the last statement in sequence <code>S</code> to the statement in <code>LAST</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005fset_005ffirst"></a>GIMPLE function: <em>void</em> <strong>gimple_seq_set_first</strong> <em>(gimple_seq s, gimple first)</em></dt>
<dd><p>Set the first statement in sequence <code>S</code> to the statement in <code>FIRST</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005finit"></a>GIMPLE function: <em>void</em> <strong>gimple_seq_init</strong> <em>(gimple_seq s)</em></dt>
<dd><p>Initialize sequence <code>S</code> to an empty sequence.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005falloc"></a>GIMPLE function: <em>gimple_seq</em> <strong>gimple_seq_alloc</strong> <em>(void)</em></dt>
<dd><p>Allocate a new sequence in the garbage collected store and return
it.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005fcopy"></a>GIMPLE function: <em>void</em> <strong>gimple_seq_copy</strong> <em>(gimple_seq dest, gimple_seq src)</em></dt>
<dd><p>Copy the sequence <code>SRC</code> into the sequence <code>DEST</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005fempty_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_seq_empty_p</strong> <em>(gimple_seq s)</em></dt>
<dd><p>Return true if the sequence <code>S</code> is empty.
</p></dd></dl>

<dl>
<dt><a name="index-bb_005fseq"></a>GIMPLE function: <em>gimple_seq</em> <strong>bb_seq</strong> <em>(basic_block bb)</em></dt>
<dd><p>Returns the sequence of statements in <code>BB</code>.
</p></dd></dl>

<dl>
<dt><a name="index-set_005fbb_005fseq"></a>GIMPLE function: <em>void</em> <strong>set_bb_seq</strong> <em>(basic_block bb, gimple_seq seq)</em></dt>
<dd><p>Sets the sequence of statements in <code>BB</code> to <code>SEQ</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gimple_005fseq_005fsingleton_005fp"></a>GIMPLE function: <em>bool</em> <strong>gimple_seq_singleton_p</strong> <em>(gimple_seq seq)</em></dt>
<dd><p>Determine whether <code>SEQ</code> contains exactly one statement.
</p></dd></dl>

<hr>
<a name="Sequence-iterators"></a>
<div class="header">
<p>
Next: <a href="#Adding-a-new-GIMPLE-statement-code" accesskey="n" rel="next">Adding a new GIMPLE statement code</a>, Previous: <a href="#GIMPLE-sequences" accesskey="p" rel="prev">GIMPLE sequences</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Sequence-iterators-1"></a>
<h3 class="section">12.9 Sequence iterators</h3>
<a name="index-Sequence-iterators"></a>

<p>Sequence iterators are convenience constructs for iterating
through statements in a sequence.  Given a sequence <code>SEQ</code>, here is
a typical use of gimple sequence iterators:
</p>
<div class="smallexample">
<pre class="smallexample">gimple_stmt_iterator gsi;

for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&amp;gsi))
  {
    gimple g = gsi_stmt (gsi);
    /* Do something with gimple statement <code>G</code>.  */
  }
</pre></div>

<p>Backward iterations are possible:
</p>
<div class="smallexample">
<pre class="smallexample">        for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&amp;gsi))
</pre></div>

<p>Forward and backward iterations on basic blocks are possible with
<code>gsi_start_bb</code> and <code>gsi_last_bb</code>.
</p>
<p>In the documentation below we sometimes refer to enum
<code>gsi_iterator_update</code>.  The valid options for this enumeration are:
</p>
<ul>
<li> <code>GSI_NEW_STMT</code>
Only valid when a single statement is added.  Move the iterator to it.

</li><li> <code>GSI_SAME_STMT</code>
Leave the iterator at the same statement.

</li><li> <code>GSI_CONTINUE_LINKING</code>
Move iterator to whatever position is suitable for linking other
statements in the same direction.
</li></ul>

<p>Below is a list of the functions used to manipulate and use
statement iterators.
</p>
<dl>
<dt><a name="index-gsi_005fstart"></a>GIMPLE function: <em>gimple_stmt_iterator</em> <strong>gsi_start</strong> <em>(gimple_seq seq)</em></dt>
<dd><p>Return a new iterator pointing to the sequence <code>SEQ</code>&rsquo;s first
statement.  If <code>SEQ</code> is empty, the iterator&rsquo;s basic block is <code>NULL</code>.
Use <code>gsi_start_bb</code> instead when the iterator needs to always have
the correct basic block set.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fstart_005fbb"></a>GIMPLE function: <em>gimple_stmt_iterator</em> <strong>gsi_start_bb</strong> <em>(basic_block bb)</em></dt>
<dd><p>Return a new iterator pointing to the first statement in basic
block <code>BB</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005flast"></a>GIMPLE function: <em>gimple_stmt_iterator</em> <strong>gsi_last</strong> <em>(gimple_seq seq)</em></dt>
<dd><p>Return a new iterator initially pointing to the last statement of
sequence <code>SEQ</code>.  If <code>SEQ</code> is empty, the iterator&rsquo;s basic block is
<code>NULL</code>.  Use <code>gsi_last_bb</code> instead when the iterator needs to always
have the correct basic block set.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005flast_005fbb"></a>GIMPLE function: <em>gimple_stmt_iterator</em> <strong>gsi_last_bb</strong> <em>(basic_block bb)</em></dt>
<dd><p>Return a new iterator pointing to the last statement in basic
block <code>BB</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fend_005fp"></a>GIMPLE function: <em>bool</em> <strong>gsi_end_p</strong> <em>(gimple_stmt_iterator i)</em></dt>
<dd><p>Return <code>TRUE</code> if at the end of <code>I</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fone_005fbefore_005fend_005fp"></a>GIMPLE function: <em>bool</em> <strong>gsi_one_before_end_p</strong> <em>(gimple_stmt_iterator i)</em></dt>
<dd><p>Return <code>TRUE</code> if we&rsquo;re one statement before the end of <code>I</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fnext"></a>GIMPLE function: <em>void</em> <strong>gsi_next</strong> <em>(gimple_stmt_iterator *i)</em></dt>
<dd><p>Advance the iterator to the next gimple statement.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fprev"></a>GIMPLE function: <em>void</em> <strong>gsi_prev</strong> <em>(gimple_stmt_iterator *i)</em></dt>
<dd><p>Advance the iterator to the previous gimple statement.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fstmt"></a>GIMPLE function: <em>gimple</em> <strong>gsi_stmt</strong> <em>(gimple_stmt_iterator i)</em></dt>
<dd><p>Return the current stmt.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fafter_005flabels"></a>GIMPLE function: <em>gimple_stmt_iterator</em> <strong>gsi_after_labels</strong> <em>(basic_block bb)</em></dt>
<dd><p>Return a block statement iterator that points to the first
non-label statement in block <code>BB</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fstmt_005fptr"></a>GIMPLE function: <em>gimple *</em> <strong>gsi_stmt_ptr</strong> <em>(gimple_stmt_iterator *i)</em></dt>
<dd><p>Return a pointer to the current stmt.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fbb"></a>GIMPLE function: <em>basic_block</em> <strong>gsi_bb</strong> <em>(gimple_stmt_iterator i)</em></dt>
<dd><p>Return the basic block associated with this iterator.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fseq"></a>GIMPLE function: <em>gimple_seq</em> <strong>gsi_seq</strong> <em>(gimple_stmt_iterator i)</em></dt>
<dd><p>Return the sequence associated with this iterator.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fremove"></a>GIMPLE function: <em>void</em> <strong>gsi_remove</strong> <em>(gimple_stmt_iterator *i, bool remove_eh_info)</em></dt>
<dd><p>Remove the current stmt from the sequence.  The iterator is
updated to point to the next statement.  When <code>REMOVE_EH_INFO</code> is
true we remove the statement pointed to by iterator <code>I</code> from the <code>EH</code>
tables.  Otherwise we do not modify the <code>EH</code> tables.  Generally,
<code>REMOVE_EH_INFO</code> should be true when the statement is going to be
removed from the <code>IL</code> and not reinserted elsewhere.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005flink_005fseq_005fbefore"></a>GIMPLE function: <em>void</em> <strong>gsi_link_seq_before</strong> <em>(gimple_stmt_iterator *i, gimple_seq seq, enum gsi_iterator_update mode)</em></dt>
<dd><p>Links the sequence of statements <code>SEQ</code> before the statement pointed
by iterator <code>I</code>.  <code>MODE</code> indicates what to do with the iterator
after insertion (see <code>enum gsi_iterator_update</code> above).
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005flink_005fbefore"></a>GIMPLE function: <em>void</em> <strong>gsi_link_before</strong> <em>(gimple_stmt_iterator *i, gimple g, enum gsi_iterator_update mode)</em></dt>
<dd><p>Links statement <code>G</code> before the statement pointed-to by iterator <code>I</code>.
Updates iterator <code>I</code> according to <code>MODE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005flink_005fseq_005fafter"></a>GIMPLE function: <em>void</em> <strong>gsi_link_seq_after</strong> <em>(gimple_stmt_iterator *i, gimple_seq seq, enum gsi_iterator_update mode)</em></dt>
<dd><p>Links sequence <code>SEQ</code> after the statement pointed-to by iterator <code>I</code>.
<code>MODE</code> is as in <code>gsi_insert_after</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005flink_005fafter"></a>GIMPLE function: <em>void</em> <strong>gsi_link_after</strong> <em>(gimple_stmt_iterator *i, gimple g, enum gsi_iterator_update mode)</em></dt>
<dd><p>Links statement <code>G</code> after the statement pointed-to by iterator <code>I</code>.
<code>MODE</code> is as in <code>gsi_insert_after</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fsplit_005fseq_005fafter"></a>GIMPLE function: <em>gimple_seq</em> <strong>gsi_split_seq_after</strong> <em>(gimple_stmt_iterator i)</em></dt>
<dd><p>Move all statements in the sequence after <code>I</code> to a new sequence.
Return this new sequence.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fsplit_005fseq_005fbefore"></a>GIMPLE function: <em>gimple_seq</em> <strong>gsi_split_seq_before</strong> <em>(gimple_stmt_iterator *i)</em></dt>
<dd><p>Move all statements in the sequence before <code>I</code> to a new sequence.
Return this new sequence.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005freplace"></a>GIMPLE function: <em>void</em> <strong>gsi_replace</strong> <em>(gimple_stmt_iterator *i, gimple stmt, bool update_eh_info)</em></dt>
<dd><p>Replace the statement pointed-to by <code>I</code> to <code>STMT</code>.  If <code>UPDATE_EH_INFO</code>
is true, the exception handling information of the original
statement is moved to the new statement.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005finsert_005fbefore"></a>GIMPLE function: <em>void</em> <strong>gsi_insert_before</strong> <em>(gimple_stmt_iterator *i, gimple stmt, enum gsi_iterator_update mode)</em></dt>
<dd><p>Insert statement <code>STMT</code> before the statement pointed-to by iterator
<code>I</code>, update <code>STMT</code>&rsquo;s basic block and scan it for new operands.  <code>MODE</code>
specifies how to update iterator <code>I</code> after insertion (see enum
<code>gsi_iterator_update</code>).
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005finsert_005fseq_005fbefore"></a>GIMPLE function: <em>void</em> <strong>gsi_insert_seq_before</strong> <em>(gimple_stmt_iterator *i, gimple_seq seq, enum gsi_iterator_update mode)</em></dt>
<dd><p>Like <code>gsi_insert_before</code>, but for all the statements in <code>SEQ</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005finsert_005fafter"></a>GIMPLE function: <em>void</em> <strong>gsi_insert_after</strong> <em>(gimple_stmt_iterator *i, gimple stmt, enum gsi_iterator_update mode)</em></dt>
<dd><p>Insert statement <code>STMT</code> after the statement pointed-to by iterator
<code>I</code>, update <code>STMT</code>&rsquo;s basic block and scan it for new operands.  <code>MODE</code>
specifies how to update iterator <code>I</code> after insertion (see enum
<code>gsi_iterator_update</code>).
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005finsert_005fseq_005fafter"></a>GIMPLE function: <em>void</em> <strong>gsi_insert_seq_after</strong> <em>(gimple_stmt_iterator *i, gimple_seq seq, enum gsi_iterator_update mode)</em></dt>
<dd><p>Like <code>gsi_insert_after</code>, but for all the statements in <code>SEQ</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005ffor_005fstmt"></a>GIMPLE function: <em>gimple_stmt_iterator</em> <strong>gsi_for_stmt</strong> <em>(gimple stmt)</em></dt>
<dd><p>Finds iterator for <code>STMT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fmove_005fafter"></a>GIMPLE function: <em>void</em> <strong>gsi_move_after</strong> <em>(gimple_stmt_iterator *from, gimple_stmt_iterator *to)</em></dt>
<dd><p>Move the statement at <code>FROM</code> so it comes right after the statement
at <code>TO</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fmove_005fbefore"></a>GIMPLE function: <em>void</em> <strong>gsi_move_before</strong> <em>(gimple_stmt_iterator *from, gimple_stmt_iterator *to)</em></dt>
<dd><p>Move the statement at <code>FROM</code> so it comes right before the statement
at <code>TO</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fmove_005fto_005fbb_005fend"></a>GIMPLE function: <em>void</em> <strong>gsi_move_to_bb_end</strong> <em>(gimple_stmt_iterator *from, basic_block bb)</em></dt>
<dd><p>Move the statement at <code>FROM</code> to the end of basic block <code>BB</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005finsert_005fon_005fedge"></a>GIMPLE function: <em>void</em> <strong>gsi_insert_on_edge</strong> <em>(edge e, gimple stmt)</em></dt>
<dd><p>Add <code>STMT</code> to the pending list of edge <code>E</code>.  No actual insertion is
made until a call to <code>gsi_commit_edge_inserts</code>() is made.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005finsert_005fseq_005fon_005fedge"></a>GIMPLE function: <em>void</em> <strong>gsi_insert_seq_on_edge</strong> <em>(edge e, gimple_seq seq)</em></dt>
<dd><p>Add the sequence of statements in <code>SEQ</code> to the pending list of edge
<code>E</code>.  No actual insertion is made until a call to
<code>gsi_commit_edge_inserts</code>() is made.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005finsert_005fon_005fedge_005fimmediate"></a>GIMPLE function: <em>basic_block</em> <strong>gsi_insert_on_edge_immediate</strong> <em>(edge e, gimple stmt)</em></dt>
<dd><p>Similar to <code>gsi_insert_on_edge</code>+<code>gsi_commit_edge_inserts</code>.  If a new
block has to be created, it is returned.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fcommit_005fone_005fedge_005finsert"></a>GIMPLE function: <em>void</em> <strong>gsi_commit_one_edge_insert</strong> <em>(edge e, basic_block *new_bb)</em></dt>
<dd><p>Commit insertions pending at edge <code>E</code>.  If a new block is created,
set <code>NEW_BB</code> to this block, otherwise set it to <code>NULL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-gsi_005fcommit_005fedge_005finserts"></a>GIMPLE function: <em>void</em> <strong>gsi_commit_edge_inserts</strong> <em>(void)</em></dt>
<dd><p>This routine will commit all pending edge insertions, creating
any new basic blocks which are necessary.
</p></dd></dl>


<hr>
<a name="Adding-a-new-GIMPLE-statement-code"></a>
<div class="header">
<p>
Next: <a href="#Statement-and-operand-traversals" accesskey="n" rel="next">Statement and operand traversals</a>, Previous: <a href="#Sequence-iterators" accesskey="p" rel="prev">Sequence iterators</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Adding-a-new-GIMPLE-statement-code-1"></a>
<h3 class="section">12.10 Adding a new GIMPLE statement code</h3>
<a name="index-Adding-a-new-GIMPLE-statement-code"></a>

<p>The first step in adding a new GIMPLE statement code, is
modifying the file <code>gimple.def</code>, which contains all the GIMPLE
codes.  Then you must add a corresponding structure, and an entry
in <code>union gimple_statement_d</code>, both of which are located in
<code>gimple.h</code>.  This in turn, will require you to add a corresponding
<code>GTY</code> tag in <code>gsstruct.def</code>, and code to handle this tag in
<code>gss_for_code</code> which is located in <code>gimple.c</code>.
</p>
<p>In order for the garbage collector to know the size of the
structure you created in <code>gimple.h</code>, you need to add a case to
handle your new GIMPLE statement in <code>gimple_size</code> which is located
in <code>gimple.c</code>.
</p>
<p>You will probably want to create a function to build the new
gimple statement in <code>gimple.c</code>.  The function should be called
<code>gimple_build_<var>new-tuple-name</var></code>, and should return the new tuple
of type gimple.
</p>
<p>If your new statement requires accessors for any members or
operands it may have, put simple inline accessors in
<code>gimple.h</code> and any non-trivial accessors in <code>gimple.c</code> with a
corresponding prototype in <code>gimple.h</code>.
</p>

<hr>
<a name="Statement-and-operand-traversals"></a>
<div class="header">
<p>
Previous: <a href="#Adding-a-new-GIMPLE-statement-code" accesskey="p" rel="prev">Adding a new GIMPLE statement code</a>, Up: <a href="#GIMPLE" accesskey="u" rel="up">GIMPLE</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Statement-and-operand-traversals-1"></a>
<h3 class="section">12.11 Statement and operand traversals</h3>
<a name="index-Statement-and-operand-traversals"></a>

<p>There are two functions available for walking statements and
sequences: <code>walk_gimple_stmt</code> and <code>walk_gimple_seq</code>,
accordingly, and a third function for walking the operands in a
statement: <code>walk_gimple_op</code>.
</p>
<dl>
<dt><a name="index-walk_005fgimple_005fstmt"></a>GIMPLE function: <em>tree</em> <strong>walk_gimple_stmt</strong> <em>(gimple_stmt_iterator *gsi,   walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info *wi)</em></dt>
<dd><p>This function is used to walk the current statement in <code>GSI</code>,
optionally using traversal state stored in <code>WI</code>.  If <code>WI</code> is <code>NULL</code>, no
state is kept during the traversal.
</p>
<p>The callback <code>CALLBACK_STMT</code> is called.  If <code>CALLBACK_STMT</code> returns
true, it means that the callback function has handled all the
operands of the statement and it is not necessary to walk its
operands.
</p>
<p>If <code>CALLBACK_STMT</code> is <code>NULL</code> or it returns false, <code>CALLBACK_OP</code> is
called on each operand of the statement via <code>walk_gimple_op</code>.  If
<code>walk_gimple_op</code> returns non-<code>NULL</code> for any operand, the remaining
operands are not scanned.
</p>
<p>The return value is that returned by the last call to
<code>walk_gimple_op</code>, or <code>NULL_TREE</code> if no <code>CALLBACK_OP</code> is specified.
</p></dd></dl>


<dl>
<dt><a name="index-walk_005fgimple_005fop"></a>GIMPLE function: <em>tree</em> <strong>walk_gimple_op</strong> <em>(gimple stmt,   walk_tree_fn callback_op, struct walk_stmt_info *wi)</em></dt>
<dd><p>Use this function to walk the operands of statement <code>STMT</code>.  Every
operand is walked via <code>walk_tree</code> with optional state information
in <code>WI</code>.
</p>
<p><code>CALLBACK_OP</code> is called on each operand of <code>STMT</code> via <code>walk_tree</code>.
Additional parameters to <code>walk_tree</code> must be stored in <code>WI</code>.  For
each operand <code>OP</code>, <code>walk_tree</code> is called as:
</p>
<div class="smallexample">
<pre class="smallexample">walk_tree (&amp;<code>OP</code>, <code>CALLBACK_OP</code>, <code>WI</code>, <code>PSET</code>)
</pre></div>

<p>If <code>CALLBACK_OP</code> returns non-<code>NULL</code> for an operand, the remaining
operands are not scanned.  The return value is that returned by
the last call to <code>walk_tree</code>, or <code>NULL_TREE</code> if no <code>CALLBACK_OP</code> is
specified.
</p></dd></dl>


<dl>
<dt><a name="index-walk_005fgimple_005fseq"></a>GIMPLE function: <em>tree</em> <strong>walk_gimple_seq</strong> <em>(gimple_seq seq,   walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info *wi)</em></dt>
<dd><p>This function walks all the statements in the sequence <code>SEQ</code>
calling <code>walk_gimple_stmt</code> on each one.  <code>WI</code> is as in
<code>walk_gimple_stmt</code>.  If <code>walk_gimple_stmt</code> returns non-<code>NULL</code>, the walk
is stopped and the value returned.  Otherwise, all the statements
are walked and <code>NULL_TREE</code> returned.
</p></dd></dl>


<hr>
<a name="Tree-SSA"></a>
<div class="header">
<p>
Next: <a href="#Loop-Analysis-and-Representation" accesskey="n" rel="next">Loop Analysis and Representation</a>, Previous: <a href="#GIMPLE" accesskey="p" rel="prev">GIMPLE</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Analysis-and-Optimization-of-GIMPLE-tuples"></a>
<h2 class="chapter">13 Analysis and Optimization of GIMPLE tuples</h2>
<a name="index-Tree-SSA"></a>
<a name="index-Optimization-infrastructure-for-GIMPLE"></a>

<p>GCC uses three main intermediate languages to represent the program
during compilation: GENERIC, GIMPLE and RTL.  GENERIC is a
language-independent representation generated by each front end.  It
is used to serve as an interface between the parser and optimizer.
GENERIC is a common representation that is able to represent programs
written in all the languages supported by GCC.
</p>
<p>GIMPLE and RTL are used to optimize the program.  GIMPLE is used for
target and language independent optimizations (e.g., inlining,
constant propagation, tail call elimination, redundancy elimination,
etc).  Much like GENERIC, GIMPLE is a language independent, tree based
representation.  However, it differs from GENERIC in that the GIMPLE
grammar is more restrictive: expressions contain no more than 3
operands (except function calls), it has no control flow structures
and expressions with side-effects are only allowed on the right hand
side of assignments.  See the chapter describing GENERIC and GIMPLE
for more details.
</p>
<p>This chapter describes the data structures and functions used in the
GIMPLE optimizers (also known as &ldquo;tree optimizers&rdquo; or &ldquo;middle
end&rdquo;).  In particular, it focuses on all the macros, data structures,
functions and programming constructs needed to implement optimization
passes for GIMPLE.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Annotations" accesskey="1">Annotations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Attributes for variables.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#SSA-Operands" accesskey="2">SSA Operands</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">SSA names referenced by GIMPLE statements.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#SSA" accesskey="3">SSA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Static Single Assignment representation.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Alias-analysis" accesskey="4">Alias analysis</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Representing aliased loads and stores.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Memory-model" accesskey="5">Memory model</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Memory model used by the middle-end.
</td></tr>
</table>

<hr>
<a name="Annotations"></a>
<div class="header">
<p>
Next: <a href="#SSA-Operands" accesskey="n" rel="next">SSA Operands</a>, Up: <a href="#Tree-SSA" accesskey="u" rel="up">Tree SSA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Annotations-1"></a>
<h3 class="section">13.1 Annotations</h3>
<a name="index-annotations"></a>

<p>The optimizers need to associate attributes with variables during the
optimization process.  For instance, we need to know whether a
variable has aliases.  All these attributes are stored in data
structures called annotations which are then linked to the field
<code>ann</code> in <code>struct tree_common</code>.
</p>
<p>Presently, we define annotations for variables (<code>var_ann_t</code>).
Annotations are defined and documented in <samp>tree-flow.h</samp>.
</p>

<hr>
<a name="SSA-Operands"></a>
<div class="header">
<p>
Next: <a href="#SSA" accesskey="n" rel="next">SSA</a>, Previous: <a href="#Annotations" accesskey="p" rel="prev">Annotations</a>, Up: <a href="#Tree-SSA" accesskey="u" rel="up">Tree SSA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="SSA-Operands-1"></a>
<h3 class="section">13.2 SSA Operands</h3>
<a name="index-operands"></a>
<a name="index-virtual-operands"></a>
<a name="index-real-operands"></a>
<a name="index-update_005fstmt-1"></a>

<p>Almost every GIMPLE statement will contain a reference to a variable
or memory location.  Since statements come in different shapes and
sizes, their operands are going to be located at various spots inside
the statement&rsquo;s tree.  To facilitate access to the statement&rsquo;s
operands, they are organized into lists associated inside each
statement&rsquo;s annotation.  Each element in an operand list is a pointer
to a <code>VAR_DECL</code>, <code>PARM_DECL</code> or <code>SSA_NAME</code> tree node.
This provides a very convenient way of examining and replacing
operands.
</p>
<p>Data flow analysis and optimization is done on all tree nodes
representing variables.  Any node for which <code>SSA_VAR_P</code> returns
nonzero is considered when scanning statement operands.  However, not
all <code>SSA_VAR_P</code> variables are processed in the same way.  For the
purposes of optimization, we need to distinguish between references to
local scalar variables and references to globals, statics, structures,
arrays, aliased variables, etc.  The reason is simple, the compiler
can gather complete data flow information for a local scalar.  On the
other hand, a global variable may be modified by a function call, it
may not be possible to keep track of all the elements of an array or
the fields of a structure, etc.
</p>
<p>The operand scanner gathers two kinds of operands: <em>real</em> and
<em>virtual</em>.  An operand for which <code>is_gimple_reg</code> returns true
is considered real, otherwise it is a virtual operand.  We also
distinguish between uses and definitions.  An operand is used if its
value is loaded by the statement (e.g., the operand at the RHS of an
assignment).  If the statement assigns a new value to the operand, the
operand is considered a definition (e.g., the operand at the LHS of
an assignment).
</p>
<p>Virtual and real operands also have very different data flow
properties.  Real operands are unambiguous references to the
full object that they represent.  For instance, given
</p>
<div class="smallexample">
<pre class="smallexample">{
  int a, b;
  a = b
}
</pre></div>

<p>Since <code>a</code> and <code>b</code> are non-aliased locals, the statement
<code>a = b</code> will have one real definition and one real use because
variable <code>a</code> is completely modified with the contents of
variable <code>b</code>.  Real definition are also known as <em>killing
definitions</em>.  Similarly, the use of <code>b</code> reads all its bits.
</p>
<p>In contrast, virtual operands are used with variables that can have
a partial or ambiguous reference.  This includes structures, arrays,
globals, and aliased variables.  In these cases, we have two types of
definitions.  For globals, structures, and arrays, we can determine from
a statement whether a variable of these types has a killing definition.
If the variable does, then the statement is marked as having a
<em>must definition</em> of that variable.  However, if a statement is only
defining a part of the variable (i.e. a field in a structure), or if we
know that a statement might define the variable but we cannot say for sure,
then we mark that statement as having a <em>may definition</em>.  For
instance, given
</p>
<div class="smallexample">
<pre class="smallexample">{
  int a, b, *p;

  if (&hellip;)
    p = &amp;a;
  else
    p = &amp;b;
  *p = 5;
  return *p;
}
</pre></div>

<p>The assignment <code>*p = 5</code> may be a definition of <code>a</code> or
<code>b</code>.  If we cannot determine statically where <code>p</code> is
pointing to at the time of the store operation, we create virtual
definitions to mark that statement as a potential definition site for
<code>a</code> and <code>b</code>.  Memory loads are similarly marked with virtual
use operands.  Virtual operands are shown in tree dumps right before
the statement that contains them.  To request a tree dump with virtual
operands, use the <samp>-vops</samp> option to <samp>-fdump-tree</samp>:
</p>
<div class="smallexample">
<pre class="smallexample">{
  int a, b, *p;

  if (&hellip;)
    p = &amp;a;
  else
    p = &amp;b;
  # a = VDEF &lt;a&gt;
  # b = VDEF &lt;b&gt;
  *p = 5;

  # VUSE &lt;a&gt;
  # VUSE &lt;b&gt;
  return *p;
}
</pre></div>

<p>Notice that <code>VDEF</code> operands have two copies of the referenced
variable.  This indicates that this is not a killing definition of
that variable.  In this case we refer to it as a <em>may definition</em>
or <em>aliased store</em>.  The presence of the second copy of the
variable in the <code>VDEF</code> operand will become important when the
function is converted into SSA form.  This will be used to link all
the non-killing definitions to prevent optimizations from making
incorrect assumptions about them.
</p>
<p>Operands are updated as soon as the statement is finished via a call
to <code>update_stmt</code>.  If statement elements are changed via
<code>SET_USE</code> or <code>SET_DEF</code>, then no further action is required
(i.e., those macros take care of updating the statement).  If changes
are made by manipulating the statement&rsquo;s tree directly, then a call
must be made to <code>update_stmt</code> when complete.  Calling one of the
<code>bsi_insert</code> routines or <code>bsi_replace</code> performs an implicit
call to <code>update_stmt</code>.
</p>
<a name="Operand-Iterators-And-Access-Routines"></a>
<h4 class="subsection">13.2.1 Operand Iterators And Access Routines</h4>
<a name="index-Operand-Iterators"></a>
<a name="index-Operand-Access-Routines"></a>

<p>Operands are collected by <samp>tree-ssa-operands.c</samp>.  They are stored
inside each statement&rsquo;s annotation and can be accessed through either the
operand iterators or an access routine.
</p>
<p>The following access routines are available for examining operands:
</p>
<ol>
<li> <code>SINGLE_SSA_{USE,DEF,TREE}_OPERAND</code>: These accessors will return
NULL unless there is exactly one operand matching the specified flags.  If
there is exactly one operand, the operand is returned as either a <code>tree</code>,
<code>def_operand_p</code>, or <code>use_operand_p</code>.

<div class="smallexample">
<pre class="smallexample">tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags);
use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES);
def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS);
</pre></div>

</li><li> <code>ZERO_SSA_OPERANDS</code>: This macro returns true if there are no
operands matching the specified flags.

<div class="smallexample">
<pre class="smallexample">if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS))
  return;
</pre></div>

</li><li> <code>NUM_SSA_OPERANDS</code>: This macro Returns the number of operands
matching &rsquo;flags&rsquo;.  This actually executes a loop to perform the count, so
only use this if it is really needed.

<div class="smallexample">
<pre class="smallexample">int count = NUM_SSA_OPERANDS (stmt, flags)
</pre></div>
</li></ol>


<p>If you wish to iterate over some or all operands, use the
<code>FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND</code> iterator.  For example, to print
all the operands for a statement:
</p>
<div class="smallexample">
<pre class="smallexample">void
print_ops (tree stmt)
{
  ssa_op_iter;
  tree var;

  FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS)
    print_generic_expr (stderr, var, TDF_SLIM);
}
</pre></div>


<p>How to choose the appropriate iterator:
</p>
<ol>
<li> Determine whether you are need to see the operand pointers, or just the
trees, and choose the appropriate macro:

<div class="smallexample">
<pre class="smallexample">Need            Macro:
----            -------
use_operand_p   FOR_EACH_SSA_USE_OPERAND
def_operand_p   FOR_EACH_SSA_DEF_OPERAND
tree            FOR_EACH_SSA_TREE_OPERAND
</pre></div>

</li><li> You need to declare a variable of the type you are interested
in, and an ssa_op_iter structure which serves as the loop controlling
variable.

</li><li> Determine which operands you wish to use, and specify the flags of
those you are interested in.  They are documented in
<samp>tree-ssa-operands.h</samp>:

<div class="smallexample">
<pre class="smallexample">#define SSA_OP_USE              0x01    /* <span class="roman">Real USE operands.</span>  */
#define SSA_OP_DEF              0x02    /* <span class="roman">Real DEF operands.</span>  */
#define SSA_OP_VUSE             0x04    /* <span class="roman">VUSE operands.</span>  */
#define SSA_OP_VMAYUSE          0x08    /* <span class="roman">USE portion of VDEFS.</span>  */
#define SSA_OP_VDEF             0x10    /* <span class="roman">DEF portion of VDEFS.</span>  */

/* <span class="roman">These are commonly grouped operand flags.</span>  */
#define SSA_OP_VIRTUAL_USES     (SSA_OP_VUSE | SSA_OP_VMAYUSE)
#define SSA_OP_VIRTUAL_DEFS     (SSA_OP_VDEF)
#define SSA_OP_ALL_USES         (SSA_OP_VIRTUAL_USES | SSA_OP_USE)
#define SSA_OP_ALL_DEFS         (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
#define SSA_OP_ALL_OPERANDS     (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
</pre></div>
</li></ol>

<p>So if you want to look at the use pointers for all the <code>USE</code> and
<code>VUSE</code> operands, you would do something like:
</p>
<div class="smallexample">
<pre class="smallexample">  use_operand_p use_p;
  ssa_op_iter iter;

  FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE))
    {
      process_use_ptr (use_p);
    }
</pre></div>

<p>The <code>TREE</code> macro is basically the same as the <code>USE</code> and
<code>DEF</code> macros, only with the use or def dereferenced via
<code>USE_FROM_PTR (use_p)</code> and <code>DEF_FROM_PTR (def_p)</code>.  Since we
aren&rsquo;t using operand pointers, use and defs flags can be mixed.
</p>
<div class="smallexample">
<pre class="smallexample">  tree var;
  ssa_op_iter iter;

  FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE)
    {
       print_generic_expr (stderr, var, TDF_SLIM);
    }
</pre></div>

<p><code>VDEF</code>s are broken into two flags, one for the
<code>DEF</code> portion (<code>SSA_OP_VDEF</code>) and one for the USE portion
(<code>SSA_OP_VMAYUSE</code>).  If all you want to look at are the
<code>VDEF</code>s together, there is a fourth iterator macro for this,
which returns both a def_operand_p and a use_operand_p for each
<code>VDEF</code> in the statement.  Note that you don&rsquo;t need any flags for
this one.
</p>
<div class="smallexample">
<pre class="smallexample">  use_operand_p use_p;
  def_operand_p def_p;
  ssa_op_iter iter;

  FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
    {
      my_code;
    }
</pre></div>

<p>There are many examples in the code as well, as well as the
documentation in <samp>tree-ssa-operands.h</samp>.
</p>
<p>There are also a couple of variants on the stmt iterators regarding PHI
nodes.
</p>
<p><code>FOR_EACH_PHI_ARG</code> Works exactly like
<code>FOR_EACH_SSA_USE_OPERAND</code>, except it works over <code>PHI</code> arguments
instead of statement operands.
</p>
<div class="smallexample">
<pre class="smallexample">/* Look at every virtual PHI use.  */
FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES)
{
   my_code;
}

/* Look at every real PHI use.  */
FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES)
  my_code;

/* Look at every PHI use.  */
FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES)
  my_code;
</pre></div>

<p><code>FOR_EACH_PHI_OR_STMT_{USE,DEF}</code> works exactly like
<code>FOR_EACH_SSA_{USE,DEF}_OPERAND</code>, except it will function on
either a statement or a <code>PHI</code> node.  These should be used when it is
appropriate but they are not quite as efficient as the individual
<code>FOR_EACH_PHI</code> and <code>FOR_EACH_SSA</code> routines.
</p>
<div class="smallexample">
<pre class="smallexample">FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags)
  {
     my_code;
  }

FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags)
  {
     my_code;
  }
</pre></div>

<a name="Immediate-Uses"></a>
<h4 class="subsection">13.2.2 Immediate Uses</h4>
<a name="index-Immediate-Uses"></a>

<p>Immediate use information is now always available.  Using the immediate use
iterators, you may examine every use of any <code>SSA_NAME</code>. For instance,
to change each use of <code>ssa_var</code> to <code>ssa_var2</code> and call fold_stmt on
each stmt after that is done:
</p>
<div class="smallexample">
<pre class="smallexample">  use_operand_p imm_use_p;
  imm_use_iterator iterator;
  tree ssa_var, stmt;


  FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
    {
      FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
        SET_USE (imm_use_p, ssa_var_2);
      fold_stmt (stmt);
    }
</pre></div>

<p>There are 2 iterators which can be used. <code>FOR_EACH_IMM_USE_FAST</code> is
used when the immediate uses are not changed, i.e., you are looking at the
uses, but not setting them.
</p>
<p>If they do get changed, then care must be taken that things are not changed
under the iterators, so use the <code>FOR_EACH_IMM_USE_STMT</code> and
<code>FOR_EACH_IMM_USE_ON_STMT</code> iterators.  They attempt to preserve the
sanity of the use list by moving all the uses for a statement into
a controlled position, and then iterating over those uses.  Then the
optimization can manipulate the stmt when all the uses have been
processed.  This is a little slower than the FAST version since it adds a
placeholder element and must sort through the list a bit for each statement.
This placeholder element must be also be removed if the loop is
terminated early.  The macro <code>BREAK_FROM_IMM_USE_SAFE</code> is provided
to do this :
</p>
<div class="smallexample">
<pre class="smallexample">  FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var)
    {
      if (stmt == last_stmt)
        BREAK_FROM_SAFE_IMM_USE (iter);

      FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator)
        SET_USE (imm_use_p, ssa_var_2);
      fold_stmt (stmt);
    }
</pre></div>

<p>There are checks in <code>verify_ssa</code> which verify that the immediate use list
is up to date, as well as checking that an optimization didn&rsquo;t break from the
loop without using this macro.  It is safe to simply &rsquo;break&rsquo;; from a
<code>FOR_EACH_IMM_USE_FAST</code> traverse.
</p>
<p>Some useful functions and macros:
</p><ol>
<li> <code>has_zero_uses (ssa_var)</code> : Returns true if there are no uses of
<code>ssa_var</code>.
</li><li> <code>has_single_use (ssa_var)</code> : Returns true if there is only a
single use of <code>ssa_var</code>.
</li><li> <code>single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)</code> :
Returns true if there is only a single use of <code>ssa_var</code>, and also returns
the use pointer and statement it occurs in, in the second and third parameters.
</li><li> <code>num_imm_uses (ssa_var)</code> : Returns the number of immediate uses of
<code>ssa_var</code>. It is better not to use this if possible since it simply
utilizes a loop to count the uses.
</li><li> <code>PHI_ARG_INDEX_FROM_USE (use_p)</code> : Given a use within a <code>PHI</code>
node, return the index number for the use.  An assert is triggered if the use
isn&rsquo;t located in a <code>PHI</code> node.
</li><li> <code>USE_STMT (use_p)</code> : Return the statement a use occurs in.
</li></ol>

<p>Note that uses are not put into an immediate use list until their statement is
actually inserted into the instruction stream via a <code>bsi_*</code> routine.
</p>
<p>It is also still possible to utilize lazy updating of statements, but this
should be used only when absolutely required.  Both alias analysis and the
dominator optimizations currently do this.
</p>
<p>When lazy updating is being used, the immediate use information is out of date
and cannot be used reliably.  Lazy updating is achieved by simply marking
statements modified via calls to <code>mark_stmt_modified</code> instead of
<code>update_stmt</code>.  When lazy updating is no longer required, all the
modified statements must have <code>update_stmt</code> called in order to bring them
up to date.  This must be done before the optimization is finished, or
<code>verify_ssa</code> will trigger an abort.
</p>
<p>This is done with a simple loop over the instruction stream:
</p><div class="smallexample">
<pre class="smallexample">  block_stmt_iterator bsi;
  basic_block bb;
  FOR_EACH_BB (bb)
    {
      for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&amp;bsi))
        update_stmt_if_modified (bsi_stmt (bsi));
    }
</pre></div>

<hr>
<a name="SSA"></a>
<div class="header">
<p>
Next: <a href="#Alias-analysis" accesskey="n" rel="next">Alias analysis</a>, Previous: <a href="#SSA-Operands" accesskey="p" rel="prev">SSA Operands</a>, Up: <a href="#Tree-SSA" accesskey="u" rel="up">Tree SSA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Static-Single-Assignment"></a>
<h3 class="section">13.3 Static Single Assignment</h3>
<a name="index-SSA"></a>
<a name="index-static-single-assignment"></a>

<p>Most of the tree optimizers rely on the data flow information provided
by the Static Single Assignment (SSA) form.  We implement the SSA form
as described in <cite>R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and
K. Zadeck.  Efficiently Computing Static Single Assignment Form and the
Control Dependence Graph.  ACM Transactions on Programming Languages
and Systems, 13(4):451-490, October 1991</cite>.
</p>
<p>The SSA form is based on the premise that program variables are
assigned in exactly one location in the program.  Multiple assignments
to the same variable create new versions of that variable.  Naturally,
actual programs are seldom in SSA form initially because variables
tend to be assigned multiple times.  The compiler modifies the program
representation so that every time a variable is assigned in the code,
a new version of the variable is created.  Different versions of the
same variable are distinguished by subscripting the variable name with
its version number.  Variables used in the right-hand side of
expressions are renamed so that their version number matches that of
the most recent assignment.
</p>
<p>We represent variable versions using <code>SSA_NAME</code> nodes.  The
renaming process in <samp>tree-ssa.c</samp> wraps every real and
virtual operand with an <code>SSA_NAME</code> node which contains
the version number and the statement that created the
<code>SSA_NAME</code>.  Only definitions and virtual definitions may
create new <code>SSA_NAME</code> nodes.
</p>
<a name="index-PHI-nodes"></a>
<p>Sometimes, flow of control makes it impossible to determine the
most recent version of a variable.  In these cases, the compiler
inserts an artificial definition for that variable called
<em>PHI function</em> or <em>PHI node</em>.  This new definition merges
all the incoming versions of the variable to create a new name
for it.  For instance,
</p>
<div class="smallexample">
<pre class="smallexample">if (&hellip;)
  a_1 = 5;
else if (&hellip;)
  a_2 = 2;
else
  a_3 = 13;

# a_4 = PHI &lt;a_1, a_2, a_3&gt;
return a_4;
</pre></div>

<p>Since it is not possible to determine which of the three branches
will be taken at runtime, we don&rsquo;t know which of <code>a_1</code>,
<code>a_2</code> or <code>a_3</code> to use at the return statement.  So, the
SSA renamer creates a new version <code>a_4</code> which is assigned
the result of &ldquo;merging&rdquo; <code>a_1</code>, <code>a_2</code> and <code>a_3</code>.
Hence, PHI nodes mean &ldquo;one of these operands.  I don&rsquo;t know
which&rdquo;.
</p>
<p>The following macros can be used to examine PHI nodes
</p>
<dl>
<dt><a name="index-PHI_005fRESULT"></a>Macro: <strong>PHI_RESULT</strong> <em>(<var>phi</var>)</em></dt>
<dd><p>Returns the <code>SSA_NAME</code> created by PHI node <var>phi</var> (i.e.,
<var>phi</var>&rsquo;s LHS).
</p></dd></dl>

<dl>
<dt><a name="index-PHI_005fNUM_005fARGS"></a>Macro: <strong>PHI_NUM_ARGS</strong> <em>(<var>phi</var>)</em></dt>
<dd><p>Returns the number of arguments in <var>phi</var>.  This number is exactly
the number of incoming edges to the basic block holding <var>phi</var>.
</p></dd></dl>

<dl>
<dt><a name="index-PHI_005fARG_005fELT"></a>Macro: <strong>PHI_ARG_ELT</strong> <em>(<var>phi</var>, <var>i</var>)</em></dt>
<dd><p>Returns a tuple representing the <var>i</var>th argument of <var>phi</var>.
Each element of this tuple contains an <code>SSA_NAME</code> <var>var</var> and
the incoming edge through which <var>var</var> flows.
</p></dd></dl>

<dl>
<dt><a name="index-PHI_005fARG_005fEDGE"></a>Macro: <strong>PHI_ARG_EDGE</strong> <em>(<var>phi</var>, <var>i</var>)</em></dt>
<dd><p>Returns the incoming edge for the <var>i</var>th argument of <var>phi</var>.
</p></dd></dl>

<dl>
<dt><a name="index-PHI_005fARG_005fDEF"></a>Macro: <strong>PHI_ARG_DEF</strong> <em>(<var>phi</var>, <var>i</var>)</em></dt>
<dd><p>Returns the <code>SSA_NAME</code> for the <var>i</var>th argument of <var>phi</var>.
</p></dd></dl>


<a name="Preserving-the-SSA-form"></a>
<h4 class="subsection">13.3.1 Preserving the SSA form</h4>
<a name="index-update_005fssa"></a>
<a name="index-preserving-SSA-form"></a>
<p>Some optimization passes make changes to the function that
invalidate the SSA property.  This can happen when a pass has
added new symbols or changed the program so that variables that
were previously aliased aren&rsquo;t anymore.  Whenever something like this
happens, the affected symbols must be renamed into SSA form again.
Transformations that emit new code or replicate existing statements
will also need to update the SSA form.
</p>
<p>Since GCC implements two different SSA forms for register and virtual
variables, keeping the SSA form up to date depends on whether you are
updating register or virtual names.  In both cases, the general idea
behind incremental SSA updates is similar: when new SSA names are
created, they typically are meant to replace other existing names in
the program.
</p>
<p>For instance, given the following code:
</p>
<div class="smallexample">
<pre class="smallexample">     1  L0:
     2  x_1 = PHI (0, x_5)
     3  if (x_1 &lt; 10)
     4    if (x_1 &gt; 7)
     5      y_2 = 0
     6    else
     7      y_3 = x_1 + x_7
     8    endif
     9    x_5 = x_1 + 1
     10   goto L0;
     11 endif
</pre></div>

<p>Suppose that we insert new names <code>x_10</code> and <code>x_11</code> (lines
<code>4</code> and <code>8</code>).
</p>
<div class="smallexample">
<pre class="smallexample">     1  L0:
     2  x_1 = PHI (0, x_5)
     3  if (x_1 &lt; 10)
     4    x_10 = &hellip;
     5    if (x_1 &gt; 7)
     6      y_2 = 0
     7    else
     8      x_11 = &hellip;
     9      y_3 = x_1 + x_7
     10   endif
     11   x_5 = x_1 + 1
     12   goto L0;
     13 endif
</pre></div>

<p>We want to replace all the uses of <code>x_1</code> with the new definitions
of <code>x_10</code> and <code>x_11</code>.  Note that the only uses that should
be replaced are those at lines <code>5</code>, <code>9</code> and <code>11</code>.
Also, the use of <code>x_7</code> at line <code>9</code> should <em>not</em> be
replaced (this is why we cannot just mark symbol <code>x</code> for
renaming).
</p>
<p>Additionally, we may need to insert a PHI node at line <code>11</code>
because that is a merge point for <code>x_10</code> and <code>x_11</code>.  So the
use of <code>x_1</code> at line <code>11</code> will be replaced with the new PHI
node.  The insertion of PHI nodes is optional.  They are not strictly
necessary to preserve the SSA form, and depending on what the caller
inserted, they may not even be useful for the optimizers.
</p>
<p>Updating the SSA form is a two step process.  First, the pass has to
identify which names need to be updated and/or which symbols need to
be renamed into SSA form for the first time.  When new names are
introduced to replace existing names in the program, the mapping
between the old and the new names are registered by calling
<code>register_new_name_mapping</code> (note that if your pass creates new
code by duplicating basic blocks, the call to <code>tree_duplicate_bb</code>
will set up the necessary mappings automatically).
</p>
<p>After the replacement mappings have been registered and new symbols
marked for renaming, a call to <code>update_ssa</code> makes the registered
changes.  This can be done with an explicit call or by creating
<code>TODO</code> flags in the <code>tree_opt_pass</code> structure for your pass.
There are several <code>TODO</code> flags that control the behavior of
<code>update_ssa</code>:
</p>
<ul>
<li> <code>TODO_update_ssa</code>.  Update the SSA form inserting PHI nodes
for newly exposed symbols and virtual names marked for updating.
When updating real names, only insert PHI nodes for a real name
<code>O_j</code> in blocks reached by all the new and old definitions for
<code>O_j</code>.  If the iterated dominance frontier for <code>O_j</code>
is not pruned, we may end up inserting PHI nodes in blocks that
have one or more edges with no incoming definition for
<code>O_j</code>.  This would lead to uninitialized warnings for
<code>O_j</code>&rsquo;s symbol.

</li><li> <code>TODO_update_ssa_no_phi</code>.  Update the SSA form without
inserting any new PHI nodes at all.  This is used by passes that
have either inserted all the PHI nodes themselves or passes that
need only to patch use-def and def-def chains for virtuals
(e.g., DCE).


</li><li> <code>TODO_update_ssa_full_phi</code>.  Insert PHI nodes everywhere
they are needed.  No pruning of the IDF is done.  This is used
by passes that need the PHI nodes for <code>O_j</code> even if it
means that some arguments will come from the default definition
of <code>O_j</code>&rsquo;s symbol (e.g., <code>pass_linear_transform</code>).

<p>WARNING: If you need to use this flag, chances are that your
pass may be doing something wrong.  Inserting PHI nodes for an
old name where not all edges carry a new replacement may lead to
silent codegen errors or spurious uninitialized warnings.
</p>
</li><li> <code>TODO_update_ssa_only_virtuals</code>.  Passes that update the
SSA form on their own may want to delegate the updating of
virtual names to the generic updater.  Since FUD chains are
easier to maintain, this simplifies the work they need to do.
NOTE: If this flag is used, any OLD-&gt;NEW mappings for real names
are explicitly destroyed and only the symbols marked for
renaming are processed.
</li></ul>

<a name="Preserving-the-virtual-SSA-form"></a>
<h4 class="subsection">13.3.2 Preserving the virtual SSA form</h4>
<a name="index-preserving-virtual-SSA-form"></a>

<p>The virtual SSA form is harder to preserve than the non-virtual SSA form
mainly because the set of virtual operands for a statement may change at
what some would consider unexpected times.  In general, statement
modifications should be bracketed between calls to
<code>push_stmt_changes</code> and <code>pop_stmt_changes</code>.  For example,
</p>
<div class="smallexample">
<pre class="smallexample">    munge_stmt (tree stmt)
    {
       push_stmt_changes (&amp;stmt);
       &hellip; rewrite STMT &hellip;
       pop_stmt_changes (&amp;stmt);
    }
</pre></div>

<p>The call to <code>push_stmt_changes</code> saves the current state of the
statement operands and the call to <code>pop_stmt_changes</code> compares
the saved state with the current one and does the appropriate symbol
marking for the SSA renamer.
</p>
<p>It is possible to modify several statements at a time, provided that
<code>push_stmt_changes</code> and <code>pop_stmt_changes</code> are called in
LIFO order, as when processing a stack of statements.
</p>
<p>Additionally, if the pass discovers that it did not need to make
changes to the statement after calling <code>push_stmt_changes</code>, it
can simply discard the topmost change buffer by calling
<code>discard_stmt_changes</code>.  This will avoid the expensive operand
re-scan operation and the buffer comparison that determines if symbols
need to be marked for renaming.
</p>
<a name="Examining-SSA_005fNAME-nodes"></a>
<h4 class="subsection">13.3.3 Examining <code>SSA_NAME</code> nodes</h4>
<a name="index-examining-SSA_005fNAMEs"></a>

<p>The following macros can be used to examine <code>SSA_NAME</code> nodes
</p>
<dl>
<dt><a name="index-SSA_005fNAME_005fDEF_005fSTMT"></a>Macro: <strong>SSA_NAME_DEF_STMT</strong> <em>(<var>var</var>)</em></dt>
<dd><p>Returns the statement <var>s</var> that creates the <code>SSA_NAME</code>
<var>var</var>.  If <var>s</var> is an empty statement (i.e., <code>IS_EMPTY_STMT
(<var>s</var>)</code> returns <code>true</code>), it means that the first reference to
this variable is a USE or a VUSE.
</p></dd></dl>

<dl>
<dt><a name="index-SSA_005fNAME_005fVERSION"></a>Macro: <strong>SSA_NAME_VERSION</strong> <em>(<var>var</var>)</em></dt>
<dd><p>Returns the version number of the <code>SSA_NAME</code> object <var>var</var>.
</p></dd></dl>


<a name="Walking-use_002ddef-chains"></a>
<h4 class="subsection">13.3.4 Walking use-def chains</h4>

<dl>
<dt><a name="index-walk_005fuse_005fdef_005fchains"></a>Tree SSA function: <em>void</em> <strong>walk_use_def_chains</strong> <em>(<var>var</var>, <var>fn</var>, <var>data</var>)</em></dt>
<dd>
<p>Walks use-def chains starting at the <code>SSA_NAME</code> node <var>var</var>.
Calls function <var>fn</var> at each reaching definition found.  Function
<var>FN</var> takes three arguments: <var>var</var>, its defining statement
(<var>def_stmt</var>) and a generic pointer to whatever state information
that <var>fn</var> may want to maintain (<var>data</var>).  Function <var>fn</var> is
able to stop the walk by returning <code>true</code>, otherwise in order to
continue the walk, <var>fn</var> should return <code>false</code>.
</p>
<p>Note, that if <var>def_stmt</var> is a <code>PHI</code> node, the semantics are
slightly different.  For each argument <var>arg</var> of the PHI node, this
function will:
</p>
<ol>
<li> Walk the use-def chains for <var>arg</var>.
</li><li> Call <code>FN (<var>arg</var>, <var>phi</var>, <var>data</var>)</code>.
</li></ol>

<p>Note how the first argument to <var>fn</var> is no longer the original
variable <var>var</var>, but the PHI argument currently being examined.
If <var>fn</var> wants to get at <var>var</var>, it should call
<code>PHI_RESULT</code> (<var>phi</var>).
</p></dd></dl>

<a name="Walking-the-dominator-tree"></a>
<h4 class="subsection">13.3.5 Walking the dominator tree</h4>

<dl>
<dt><a name="index-walk_005fdominator_005ftree"></a>Tree SSA function: <em>void</em> <strong>walk_dominator_tree</strong> <em>(<var>walk_data</var>, <var>bb</var>)</em></dt>
<dd>
<p>This function walks the dominator tree for the current CFG calling a
set of callback functions defined in <var>struct dom_walk_data</var> in
<samp>domwalk.h</samp>.  The call back functions you need to define give you
hooks to execute custom code at various points during traversal:
</p>
<ol>
<li> Once to initialize any local data needed while processing
<var>bb</var> and its children.  This local data is pushed into an
internal stack which is automatically pushed and popped as the
walker traverses the dominator tree.

</li><li> Once before traversing all the statements in the <var>bb</var>.

</li><li> Once for every statement inside <var>bb</var>.

</li><li> Once after traversing all the statements and before recursing
into <var>bb</var>&rsquo;s dominator children.

</li><li> It then recurses into all the dominator children of <var>bb</var>.

</li><li> After recursing into all the dominator children of <var>bb</var> it
can, optionally, traverse every statement in <var>bb</var> again
(i.e., repeating steps 2 and 3).

</li><li> Once after walking the statements in <var>bb</var> and <var>bb</var>&rsquo;s
dominator children.  At this stage, the block local data stack
is popped.
</li></ol>
</dd></dl>

<hr>
<a name="Alias-analysis"></a>
<div class="header">
<p>
Next: <a href="#Memory-model" accesskey="n" rel="next">Memory model</a>, Previous: <a href="#SSA" accesskey="p" rel="prev">SSA</a>, Up: <a href="#Tree-SSA" accesskey="u" rel="up">Tree SSA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Alias-analysis-1"></a>
<h3 class="section">13.4 Alias analysis</h3>
<a name="index-alias"></a>
<a name="index-flow_002dsensitive-alias-analysis"></a>
<a name="index-flow_002dinsensitive-alias-analysis"></a>

<p>Alias analysis in GIMPLE SSA form consists of two pieces.  First
the virtual SSA web ties conflicting memory accesses and provides
a SSA use-def chain and SSA immediate-use chains for walking
possibly dependent memory accesses.  Second an alias-oracle can
be queried to disambiguate explicit and implicit memory references.
</p>
<ol>
<li> Memory SSA form.

<p>All statements that may use memory have exactly one accompanied use of
a virtual SSA name that represents the state of memory at the
given point in the IL.
</p>
<p>All statements that may define memory have exactly one accompanied
definition of a virtual SSA name using the previous state of memory
and defining the new state of memory after the given point in the IL.
</p>
<div class="smallexample">
<pre class="smallexample">int i;
int foo (void)
{
  # .MEM_3 = VDEF &lt;.MEM_2(D)&gt;
  i = 1;
  # VUSE &lt;.MEM_3&gt;
  return i;
}
</pre></div>

<p>The virtual SSA names in this case are <code>.MEM_2(D)</code> and
<code>.MEM_3</code>.  The store to the global variable <code>i</code>
defines <code>.MEM_3</code> invalidating <code>.MEM_2(D)</code>.  The
load from <code>i</code> uses that new state <code>.MEM_3</code>.
</p>
<p>The virtual SSA web serves as constraints to SSA optimizers
preventing illegitimate code-motion and optimization.  It
also provides a way to walk related memory statements.
</p>
</li><li> Points-to and escape analysis.

<p>Points-to analysis builds a set of constraints from the GIMPLE
SSA IL representing all pointer operations and facts we do
or do not know about pointers.  Solving this set of constraints
yields a conservatively correct solution for each pointer
variable in the program (though we are only interested in
SSA name pointers) as to what it may possibly point to.
</p>
<p>This points-to solution for a given SSA name pointer is stored
in the <code>pt_solution</code> sub-structure of the
<code>SSA_NAME_PTR_INFO</code> record.  The following accessor
functions are available:
</p>
<ul>
<li> <code>pt_solution_includes</code>
</li><li> <code>pt_solutions_intersect</code>
</li></ul>

<p>Points-to analysis also computes the solution for two special
set of pointers, <code>ESCAPED</code> and <code>CALLUSED</code>.  Those
represent all memory that has escaped the scope of analysis
or that is used by pure or nested const calls.
</p>
</li><li> Type-based alias analysis

<p>Type-based alias analysis is frontend dependent though generic
support is provided by the middle-end in <code>alias.c</code>.  TBAA
code is used by both tree optimizers and RTL optimizers.
</p>
<p>Every language that wishes to perform language-specific alias analysis
should define a function that computes, given a <code>tree</code>
node, an alias set for the node.  Nodes in different alias sets are not
allowed to alias.  For an example, see the C front-end function
<code>c_get_alias_set</code>.
</p>
</li><li> Tree alias-oracle

<p>The tree alias-oracle provides means to disambiguate two memory
references and memory references against statements.  The following
queries are available:
</p>
<ul>
<li> <code>refs_may_alias_p</code>
</li><li> <code>ref_maybe_used_by_stmt_p</code>
</li><li> <code>stmt_may_clobber_ref_p</code>
</li></ul>

<p>In addition to those two kind of statement walkers are available
walking statements related to a reference ref.
<code>walk_non_aliased_vuses</code> walks over dominating memory defining
statements and calls back if the statement does not clobber ref
providing the non-aliased VUSE.  The walk stops at
the first clobbering statement or if asked to.
<code>walk_aliased_vdefs</code> walks over dominating memory defining
statements and calls back on each statement clobbering ref
providing its aliasing VDEF.  The walk stops if asked to.
</p>
</li></ol>


<hr>
<a name="Memory-model"></a>
<div class="header">
<p>
Previous: <a href="#Alias-analysis" accesskey="p" rel="prev">Alias analysis</a>, Up: <a href="#Tree-SSA" accesskey="u" rel="up">Tree SSA</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Memory-model-1"></a>
<h3 class="section">13.5 Memory model</h3>
<a name="index-memory-model"></a>

<p>The memory model used by the middle-end models that of the C/C++
languages.  The middle-end has the notion of an effective type
of a memory region which is used for type-based alias analysis.
</p>
<p>The following is a refinement of ISO C99 6.5/6, clarifying the block copy case
to follow common sense and extending the concept of a dynamic effective
type to objects with a declared type as required for C++.
</p>
<div class="smallexample">
<pre class="smallexample">The effective type of an object for an access to its stored value is
the declared type of the object or the effective type determined by
a previous store to it.  If a value is stored into an object through
an lvalue having a type that is not a character type, then the
type of the lvalue becomes the effective type of the object for that
access and for subsequent accesses that do not modify the stored value.
If a value is copied into an object using <code>memcpy</code> or <code>memmove</code>,
or is copied as an array of character type, then the effective type
of the modified object for that access and for subsequent accesses that
do not modify the value is undetermined.  For all other accesses to an
object, the effective type of the object is simply the type of the
lvalue used for the access.
</pre></div>



<hr>
<a name="Loop-Analysis-and-Representation"></a>
<div class="header">
<p>
Next: <a href="#Control-Flow" accesskey="n" rel="next">Control Flow</a>, Previous: <a href="#Tree-SSA" accesskey="p" rel="prev">Tree SSA</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Analysis-and-Representation-of-Loops"></a>
<h2 class="chapter">14 Analysis and Representation of Loops</h2>

<p>GCC provides extensive infrastructure for work with natural loops, i.e.,
strongly connected components of CFG with only one entry block.  This
chapter describes representation of loops in GCC, both on GIMPLE and in
RTL, as well as the interfaces to loop-related analyses (induction
variable analysis and number of iterations analysis).
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Loop-representation" accesskey="1">Loop representation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Representation and analysis of loops.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Loop-querying" accesskey="2">Loop querying</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Getting information about loops.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Loop-manipulation" accesskey="3">Loop manipulation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Loop manipulation functions.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#LCSSA" accesskey="4">LCSSA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Loop-closed SSA form.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Scalar-evolutions" accesskey="5">Scalar evolutions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Induction variables on GIMPLE.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#loop_002div" accesskey="6">loop-iv</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Induction variables on RTL.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Number-of-iterations" accesskey="7">Number of iterations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Number of iterations analysis.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Dependency-analysis" accesskey="8">Dependency analysis</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Data dependency analysis.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Lambda" accesskey="9">Lambda</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Linear loop transformations framework.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Omega">Omega</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A solver for linear programming problems.
</td></tr>
</table>

<hr>
<a name="Loop-representation"></a>
<div class="header">
<p>
Next: <a href="#Loop-querying" accesskey="n" rel="next">Loop querying</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Loop-representation-1"></a>
<h3 class="section">14.1 Loop representation</h3>
<a name="index-Loop-representation"></a>
<a name="index-Loop-analysis"></a>

<p>This chapter describes the representation of loops in GCC, and functions
that can be used to build, modify and analyze this representation.  Most
of the interfaces and data structures are declared in <samp>cfgloop.h</samp>.
At the moment, loop structures are analyzed and this information is
updated only by the optimization passes that deal with loops, but some
efforts are being made to make it available throughout most of the
optimization passes.
</p>
<p>In general, a natural loop has one entry block (header) and possibly
several back edges (latches) leading to the header from the inside of
the loop.  Loops with several latches may appear if several loops share
a single header, or if there is a branching in the middle of the loop.
The representation of loops in GCC however allows only loops with a
single latch.  During loop analysis, headers of such loops are split and
forwarder blocks are created in order to disambiguate their structures.
Heuristic based on profile information and structure of the induction
variables in the loops is used to determine whether the latches
correspond to sub-loops or to control flow in a single loop.  This means
that the analysis sometimes changes the CFG, and if you run it in the
middle of an optimization pass, you must be able to deal with the new
blocks.  You may avoid CFG changes by passing
<code>LOOPS_MAY_HAVE_MULTIPLE_LATCHES</code> flag to the loop discovery,
note however that most other loop manipulation functions will not work
correctly for loops with multiple latch edges (the functions that only
query membership of blocks to loops and subloop relationships, or
enumerate and test loop exits, can be expected to work).
</p>
<p>Body of the loop is the set of blocks that are dominated by its header,
and reachable from its latch against the direction of edges in CFG.  The
loops are organized in a containment hierarchy (tree) such that all the
loops immediately contained inside loop L are the children of L in the
tree.  This tree is represented by the <code>struct loops</code> structure.
The root of this tree is a fake loop that contains all blocks in the
function.  Each of the loops is represented in a <code>struct loop</code>
structure.  Each loop is assigned an index (<code>num</code> field of the
<code>struct loop</code> structure), and the pointer to the loop is stored in
the corresponding field of the <code>larray</code> vector in the loops
structure.  The indices do not have to be continuous, there may be
empty (<code>NULL</code>) entries in the <code>larray</code> created by deleting
loops.  Also, there is no guarantee on the relative order of a loop
and its subloops in the numbering.  The index of a loop never changes.
</p>
<p>The entries of the <code>larray</code> field should not be accessed directly.
The function <code>get_loop</code> returns the loop description for a loop with
the given index.  <code>number_of_loops</code> function returns number of
loops in the function.  To traverse all loops, use <code>FOR_EACH_LOOP</code>
macro.  The <code>flags</code> argument of the macro is used to determine
the direction of traversal and the set of loops visited.  Each loop is
guaranteed to be visited exactly once, regardless of the changes to the
loop tree, and the loops may be removed during the traversal.  The newly
created loops are never traversed, if they need to be visited, this
must be done separately after their creation.  The <code>FOR_EACH_LOOP</code>
macro allocates temporary variables.  If the <code>FOR_EACH_LOOP</code> loop
were ended using break or goto, they would not be released;
<code>FOR_EACH_LOOP_BREAK</code> macro must be used instead.
</p>
<p>Each basic block contains the reference to the innermost loop it belongs
to (<code>loop_father</code>).  For this reason, it is only possible to have
one <code>struct loops</code> structure initialized at the same time for each
CFG.  The global variable <code>current_loops</code> contains the
<code>struct loops</code> structure.  Many of the loop manipulation functions
assume that dominance information is up-to-date.
</p>
<p>The loops are analyzed through <code>loop_optimizer_init</code> function.  The
argument of this function is a set of flags represented in an integer
bitmask.  These flags specify what other properties of the loop
structures should be calculated/enforced and preserved later:
</p>
<ul>
<li> <code>LOOPS_MAY_HAVE_MULTIPLE_LATCHES</code>: If this flag is set, no
changes to CFG will be performed in the loop analysis, in particular,
loops with multiple latch edges will not be disambiguated.  If a loop
has multiple latches, its latch block is set to NULL.  Most of
the loop manipulation functions will not work for loops in this shape.
No other flags that require CFG changes can be passed to
loop_optimizer_init.
</li><li> <code>LOOPS_HAVE_PREHEADERS</code>: Forwarder blocks are created in such
a way that each loop has only one entry edge, and additionally, the
source block of this entry edge has only one successor.  This creates a
natural place where the code can be moved out of the loop, and ensures
that the entry edge of the loop leads from its immediate super-loop.
</li><li> <code>LOOPS_HAVE_SIMPLE_LATCHES</code>: Forwarder blocks are created to
force the latch block of each loop to have only one successor.  This
ensures that the latch of the loop does not belong to any of its
sub-loops, and makes manipulation with the loops significantly easier.
Most of the loop manipulation functions assume that the loops are in
this shape.  Note that with this flag, the &ldquo;normal&rdquo; loop without any
control flow inside and with one exit consists of two basic blocks.
</li><li> <code>LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS</code>: Basic blocks and
edges in the strongly connected components that are not natural loops
(have more than one entry block) are marked with
<code>BB_IRREDUCIBLE_LOOP</code> and <code>EDGE_IRREDUCIBLE_LOOP</code> flags.  The
flag is not set for blocks and edges that belong to natural loops that
are in such an irreducible region (but it is set for the entry and exit
edges of such a loop, if they lead to/from this region).
</li><li> <code>LOOPS_HAVE_RECORDED_EXITS</code>: The lists of exits are recorded
and updated for each loop.  This makes some functions (e.g.,
<code>get_loop_exit_edges</code>) more efficient.  Some functions (e.g.,
<code>single_exit</code>) can be used only if the lists of exits are
recorded.
</li></ul>

<p>These properties may also be computed/enforced later, using functions
<code>create_preheaders</code>, <code>force_single_succ_latches</code>,
<code>mark_irreducible_loops</code> and <code>record_loop_exits</code>.
</p>
<p>The memory occupied by the loops structures should be freed with
<code>loop_optimizer_finalize</code> function.
</p>
<p>The CFG manipulation functions in general do not update loop structures.
Specialized versions that additionally do so are provided for the most
common tasks.  On GIMPLE, <code>cleanup_tree_cfg_loop</code> function can be
used to cleanup CFG while updating the loops structures if
<code>current_loops</code> is set.
</p>
<hr>
<a name="Loop-querying"></a>
<div class="header">
<p>
Next: <a href="#Loop-manipulation" accesskey="n" rel="next">Loop manipulation</a>, Previous: <a href="#Loop-representation" accesskey="p" rel="prev">Loop representation</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Loop-querying-1"></a>
<h3 class="section">14.2 Loop querying</h3>
<a name="index-Loop-querying"></a>

<p>The functions to query the information about loops are declared in
<samp>cfgloop.h</samp>.  Some of the information can be taken directly from
the structures.  <code>loop_father</code> field of each basic block contains
the innermost loop to that the block belongs.  The most useful fields of
loop structure (that are kept up-to-date at all times) are:
</p>
<ul>
<li> <code>header</code>, <code>latch</code>: Header and latch basic blocks of the
loop.
</li><li> <code>num_nodes</code>: Number of basic blocks in the loop (including
the basic blocks of the sub-loops).
</li><li> <code>depth</code>: The depth of the loop in the loops tree, i.e., the
number of super-loops of the loop.
</li><li> <code>outer</code>, <code>inner</code>, <code>next</code>: The super-loop, the first
sub-loop, and the sibling of the loop in the loops tree.
</li></ul>

<p>There are other fields in the loop structures, many of them used only by
some of the passes, or not updated during CFG changes; in general, they
should not be accessed directly.
</p>
<p>The most important functions to query loop structures are:
</p>
<ul>
<li> <code>flow_loops_dump</code>: Dumps the information about loops to a
file.
</li><li> <code>verify_loop_structure</code>: Checks consistency of the loop
structures.
</li><li> <code>loop_latch_edge</code>: Returns the latch edge of a loop.
</li><li> <code>loop_preheader_edge</code>: If loops have preheaders, returns
the preheader edge of a loop.
</li><li> <code>flow_loop_nested_p</code>: Tests whether loop is a sub-loop of
another loop.
</li><li> <code>flow_bb_inside_loop_p</code>: Tests whether a basic block belongs
to a loop (including its sub-loops).
</li><li> <code>find_common_loop</code>: Finds the common super-loop of two loops.
</li><li> <code>superloop_at_depth</code>: Returns the super-loop of a loop with
the given depth.
</li><li> <code>tree_num_loop_insns</code>, <code>num_loop_insns</code>: Estimates the
number of insns in the loop, on GIMPLE and on RTL.
</li><li> <code>loop_exit_edge_p</code>: Tests whether edge is an exit from a
loop.
</li><li> <code>mark_loop_exit_edges</code>: Marks all exit edges of all loops
with <code>EDGE_LOOP_EXIT</code> flag.
</li><li> <code>get_loop_body</code>, <code>get_loop_body_in_dom_order</code>,
<code>get_loop_body_in_bfs_order</code>: Enumerates the basic blocks in the
loop in depth-first search order in reversed CFG, ordered by dominance
relation, and breath-first search order, respectively.
</li><li> <code>single_exit</code>: Returns the single exit edge of the loop, or
<code>NULL</code> if the loop has more than one exit.  You can only use this
function if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used.
</li><li> <code>get_loop_exit_edges</code>: Enumerates the exit edges of a loop.
</li><li> <code>just_once_each_iteration_p</code>: Returns true if the basic block
is executed exactly once during each iteration of a loop (that is, it
does not belong to a sub-loop, and it dominates the latch of the loop).
</li></ul>

<hr>
<a name="Loop-manipulation"></a>
<div class="header">
<p>
Next: <a href="#LCSSA" accesskey="n" rel="next">LCSSA</a>, Previous: <a href="#Loop-querying" accesskey="p" rel="prev">Loop querying</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Loop-manipulation-1"></a>
<h3 class="section">14.3 Loop manipulation</h3>
<a name="index-Loop-manipulation"></a>

<p>The loops tree can be manipulated using the following functions:
</p>
<ul>
<li> <code>flow_loop_tree_node_add</code>: Adds a node to the tree.
</li><li> <code>flow_loop_tree_node_remove</code>: Removes a node from the tree.
</li><li> <code>add_bb_to_loop</code>: Adds a basic block to a loop.
</li><li> <code>remove_bb_from_loops</code>: Removes a basic block from loops.
</li></ul>

<p>Most low-level CFG functions update loops automatically.  The following
functions handle some more complicated cases of CFG manipulations:
</p>
<ul>
<li> <code>remove_path</code>: Removes an edge and all blocks it dominates.
</li><li> <code>split_loop_exit_edge</code>: Splits exit edge of the loop,
ensuring that PHI node arguments remain in the loop (this ensures that
loop-closed SSA form is preserved).  Only useful on GIMPLE.
</li></ul>

<p>Finally, there are some higher-level loop transformations implemented.
While some of them are written so that they should work on non-innermost
loops, they are mostly untested in that case, and at the moment, they
are only reliable for the innermost loops:
</p>
<ul>
<li> <code>create_iv</code>: Creates a new induction variable.  Only works on
GIMPLE.  <code>standard_iv_increment_position</code> can be used to find a
suitable place for the iv increment.
</li><li> <code>duplicate_loop_to_header_edge</code>,
<code>tree_duplicate_loop_to_header_edge</code>: These functions (on RTL and
on GIMPLE) duplicate the body of the loop prescribed number of times on
one of the edges entering loop header, thus performing either loop
unrolling or loop peeling.  <code>can_duplicate_loop_p</code>
(<code>can_unroll_loop_p</code> on GIMPLE) must be true for the duplicated
loop.
</li><li> <code>loop_version</code>, <code>tree_ssa_loop_version</code>: These function
create a copy of a loop, and a branch before them that selects one of
them depending on the prescribed condition.  This is useful for
optimizations that need to verify some assumptions in runtime (one of
the copies of the loop is usually left unchanged, while the other one is
transformed in some way).
</li><li> <code>tree_unroll_loop</code>: Unrolls the loop, including peeling the
extra iterations to make the number of iterations divisible by unroll
factor, updating the exit condition, and removing the exits that now
cannot be taken.  Works only on GIMPLE.
</li></ul>

<hr>
<a name="LCSSA"></a>
<div class="header">
<p>
Next: <a href="#Scalar-evolutions" accesskey="n" rel="next">Scalar evolutions</a>, Previous: <a href="#Loop-manipulation" accesskey="p" rel="prev">Loop manipulation</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Loop_002dclosed-SSA-form"></a>
<h3 class="section">14.4 Loop-closed SSA form</h3>
<a name="index-LCSSA"></a>
<a name="index-Loop_002dclosed-SSA-form"></a>

<p>Throughout the loop optimizations on tree level, one extra condition is
enforced on the SSA form:  No SSA name is used outside of the loop in
that it is defined.  The SSA form satisfying this condition is called
&ldquo;loop-closed SSA form&rdquo; &ndash; LCSSA.  To enforce LCSSA, PHI nodes must be
created at the exits of the loops for the SSA names that are used
outside of them.  Only the real operands (not virtual SSA names) are
held in LCSSA, in order to save memory.
</p>
<p>There are various benefits of LCSSA:
</p>
<ul>
<li> Many optimizations (value range analysis, final value
replacement) are interested in the values that are defined in the loop
and used outside of it, i.e., exactly those for that we create new PHI
nodes.
</li><li> In induction variable analysis, it is not necessary to specify the
loop in that the analysis should be performed &ndash; the scalar evolution
analysis always returns the results with respect to the loop in that the
SSA name is defined.
</li><li> It makes updating of SSA form during loop transformations simpler.
Without LCSSA, operations like loop unrolling may force creation of PHI
nodes arbitrarily far from the loop, while in LCSSA, the SSA form can be
updated locally.  However, since we only keep real operands in LCSSA, we
cannot use this advantage (we could have local updating of real
operands, but it is not much more efficient than to use generic SSA form
updating for it as well; the amount of changes to SSA is the same).
</li></ul>

<p>However, it also means LCSSA must be updated.  This is usually
straightforward, unless you create a new value in loop and use it
outside, or unless you manipulate loop exit edges (functions are
provided to make these manipulations simple).
<code>rewrite_into_loop_closed_ssa</code> is used to rewrite SSA form to
LCSSA, and <code>verify_loop_closed_ssa</code> to check that the invariant of
LCSSA is preserved.
</p>
<hr>
<a name="Scalar-evolutions"></a>
<div class="header">
<p>
Next: <a href="#loop_002div" accesskey="n" rel="next">loop-iv</a>, Previous: <a href="#LCSSA" accesskey="p" rel="prev">LCSSA</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Scalar-evolutions-1"></a>
<h3 class="section">14.5 Scalar evolutions</h3>
<a name="index-Scalar-evolutions"></a>
<a name="index-IV-analysis-on-GIMPLE"></a>

<p>Scalar evolutions (SCEV) are used to represent results of induction
variable analysis on GIMPLE.  They enable us to represent variables with
complicated behavior in a simple and consistent way (we only use it to
express values of polynomial induction variables, but it is possible to
extend it).  The interfaces to SCEV analysis are declared in
<samp>tree-scalar-evolution.h</samp>.  To use scalar evolutions analysis,
<code>scev_initialize</code> must be used.  To stop using SCEV,
<code>scev_finalize</code> should be used.  SCEV analysis caches results in
order to save time and memory.  This cache however is made invalid by
most of the loop transformations, including removal of code.  If such a
transformation is performed, <code>scev_reset</code> must be called to clean
the caches.
</p>
<p>Given an SSA name, its behavior in loops can be analyzed using the
<code>analyze_scalar_evolution</code> function.  The returned SCEV however
does not have to be fully analyzed and it may contain references to
other SSA names defined in the loop.  To resolve these (potentially
recursive) references, <code>instantiate_parameters</code> or
<code>resolve_mixers</code> functions must be used.
<code>instantiate_parameters</code> is useful when you use the results of SCEV
only for some analysis, and when you work with whole nest of loops at
once.  It will try replacing all SSA names by their SCEV in all loops,
including the super-loops of the current loop, thus providing a complete
information about the behavior of the variable in the loop nest.
<code>resolve_mixers</code> is useful if you work with only one loop at a
time, and if you possibly need to create code based on the value of the
induction variable.  It will only resolve the SSA names defined in the
current loop, leaving the SSA names defined outside unchanged, even if
their evolution in the outer loops is known.
</p>
<p>The SCEV is a normal tree expression, except for the fact that it may
contain several special tree nodes.  One of them is
<code>SCEV_NOT_KNOWN</code>, used for SSA names whose value cannot be
expressed.  The other one is <code>POLYNOMIAL_CHREC</code>.  Polynomial chrec
has three arguments &ndash; base, step and loop (both base and step may
contain further polynomial chrecs).  Type of the expression and of base
and step must be the same.  A variable has evolution
<code>POLYNOMIAL_CHREC(base, step, loop)</code> if it is (in the specified
loop) equivalent to <code>x_1</code> in the following example
</p>
<div class="smallexample">
<pre class="smallexample">while (&hellip;)
  {
    x_1 = phi (base, x_2);
    x_2 = x_1 + step;
  }
</pre></div>

<p>Note that this includes the language restrictions on the operations.
For example, if we compile C code and <code>x</code> has signed type, then the
overflow in addition would cause undefined behavior, and we may assume
that this does not happen.  Hence, the value with this SCEV cannot
overflow (which restricts the number of iterations of such a loop).
</p>
<p>In many cases, one wants to restrict the attention just to affine
induction variables.  In this case, the extra expressive power of SCEV
is not useful, and may complicate the optimizations.  In this case,
<code>simple_iv</code> function may be used to analyze a value &ndash; the result
is a loop-invariant base and step.
</p>
<hr>
<a name="loop_002div"></a>
<div class="header">
<p>
Next: <a href="#Number-of-iterations" accesskey="n" rel="next">Number of iterations</a>, Previous: <a href="#Scalar-evolutions" accesskey="p" rel="prev">Scalar evolutions</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="IV-analysis-on-RTL"></a>
<h3 class="section">14.6 IV analysis on RTL</h3>
<a name="index-IV-analysis-on-RTL"></a>

<p>The induction variable on RTL is simple and only allows analysis of
affine induction variables, and only in one loop at once.  The interface
is declared in <samp>cfgloop.h</samp>.  Before analyzing induction variables
in a loop L, <code>iv_analysis_loop_init</code> function must be called on L.
After the analysis (possibly calling <code>iv_analysis_loop_init</code> for
several loops) is finished, <code>iv_analysis_done</code> should be called.
The following functions can be used to access the results of the
analysis:
</p>
<ul>
<li> <code>iv_analyze</code>: Analyzes a single register used in the given
insn.  If no use of the register in this insn is found, the following
insns are scanned, so that this function can be called on the insn
returned by get_condition.
</li><li> <code>iv_analyze_result</code>: Analyzes result of the assignment in the
given insn.
</li><li> <code>iv_analyze_expr</code>: Analyzes a more complicated expression.
All its operands are analyzed by <code>iv_analyze</code>, and hence they must
be used in the specified insn or one of the following insns.
</li></ul>

<p>The description of the induction variable is provided in <code>struct
rtx_iv</code>.  In order to handle subregs, the representation is a bit
complicated; if the value of the <code>extend</code> field is not
<code>UNKNOWN</code>, the value of the induction variable in the i-th
iteration is
</p>
<div class="smallexample">
<pre class="smallexample">delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),
</pre></div>

<p>with the following exception:  if <code>first_special</code> is true, then the
value in the first iteration (when <code>i</code> is zero) is <code>delta +
mult * base</code>.  However, if <code>extend</code> is equal to <code>UNKNOWN</code>,
then <code>first_special</code> must be false, <code>delta</code> 0, <code>mult</code> 1
and the value in the i-th iteration is
</p>
<div class="smallexample">
<pre class="smallexample">subreg_{mode} (base + i * step)
</pre></div>

<p>The function <code>get_iv_value</code> can be used to perform these
calculations.
</p>
<hr>
<a name="Number-of-iterations"></a>
<div class="header">
<p>
Next: <a href="#Dependency-analysis" accesskey="n" rel="next">Dependency analysis</a>, Previous: <a href="#loop_002div" accesskey="p" rel="prev">loop-iv</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Number-of-iterations-analysis"></a>
<h3 class="section">14.7 Number of iterations analysis</h3>
<a name="index-Number-of-iterations-analysis"></a>

<p>Both on GIMPLE and on RTL, there are functions available to determine
the number of iterations of a loop, with a similar interface.  The
number of iterations of a loop in GCC is defined as the number of
executions of the loop latch.  In many cases, it is not possible to
determine the number of iterations unconditionally &ndash; the determined
number is correct only if some assumptions are satisfied.  The analysis
tries to verify these conditions using the information contained in the
program; if it fails, the conditions are returned together with the
result.  The following information and conditions are provided by the
analysis:
</p>
<ul>
<li> <code>assumptions</code>: If this condition is false, the rest of
the information is invalid.
</li><li> <code>noloop_assumptions</code> on RTL, <code>may_be_zero</code> on GIMPLE: If
this condition is true, the loop exits in the first iteration.
</li><li> <code>infinite</code>: If this condition is true, the loop is infinite.
This condition is only available on RTL.  On GIMPLE, conditions for
finiteness of the loop are included in <code>assumptions</code>.
</li><li> <code>niter_expr</code> on RTL, <code>niter</code> on GIMPLE: The expression
that gives number of iterations.  The number of iterations is defined as
the number of executions of the loop latch.
</li></ul>

<p>Both on GIMPLE and on RTL, it necessary for the induction variable
analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL).
On GIMPLE, the results are stored to <code>struct tree_niter_desc</code>
structure.  Number of iterations before the loop is exited through a
given exit can be determined using <code>number_of_iterations_exit</code>
function.  On RTL, the results are returned in <code>struct niter_desc</code>
structure.  The corresponding function is named
<code>check_simple_exit</code>.  There are also functions that pass through
all the exits of a loop and try to find one with easy to determine
number of iterations &ndash; <code>find_loop_niter</code> on GIMPLE and
<code>find_simple_exit</code> on RTL.  Finally, there are functions that
provide the same information, but additionally cache it, so that
repeated calls to number of iterations are not so costly &ndash;
<code>number_of_latch_executions</code> on GIMPLE and <code>get_simple_loop_desc</code>
on RTL.
</p>
<p>Note that some of these functions may behave slightly differently than
others &ndash; some of them return only the expression for the number of
iterations, and fail if there are some assumptions.  The function
<code>number_of_latch_executions</code> works only for single-exit loops.
The function <code>number_of_cond_exit_executions</code> can be used to
determine number of executions of the exit condition of a single-exit
loop (i.e., the <code>number_of_latch_executions</code> increased by one).
</p>
<hr>
<a name="Dependency-analysis"></a>
<div class="header">
<p>
Next: <a href="#Lambda" accesskey="n" rel="next">Lambda</a>, Previous: <a href="#Number-of-iterations" accesskey="p" rel="prev">Number of iterations</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Data-Dependency-Analysis"></a>
<h3 class="section">14.8 Data Dependency Analysis</h3>
<a name="index-Data-Dependency-Analysis"></a>

<p>The code for the data dependence analysis can be found in
<samp>tree-data-ref.c</samp> and its interface and data structures are
described in <samp>tree-data-ref.h</samp>.  The function that computes the
data dependences for all the array and pointer references for a given
loop is <code>compute_data_dependences_for_loop</code>.  This function is
currently used by the linear loop transform and the vectorization
passes.  Before calling this function, one has to allocate two vectors:
a first vector will contain the set of data references that are
contained in the analyzed loop body, and the second vector will contain
the dependence relations between the data references.  Thus if the
vector of data references is of size <code>n</code>, the vector containing the
dependence relations will contain <code>n*n</code> elements.  However if the
analyzed loop contains side effects, such as calls that potentially can
interfere with the data references in the current analyzed loop, the
analysis stops while scanning the loop body for data references, and
inserts a single <code>chrec_dont_know</code> in the dependence relation
array.
</p>
<p>The data references are discovered in a particular order during the
scanning of the loop body: the loop body is analyzed in execution order,
and the data references of each statement are pushed at the end of the
data reference array.  Two data references syntactically occur in the
program in the same order as in the array of data references.  This
syntactic order is important in some classical data dependence tests,
and mapping this order to the elements of this array avoids costly
queries to the loop body representation.
</p>
<p>Three types of data references are currently handled: ARRAY_REF,
INDIRECT_REF and COMPONENT_REF. The data structure for the data reference
is <code>data_reference</code>, where <code>data_reference_p</code> is a name of a
pointer to the data reference structure. The structure contains the
following elements:
</p>
<ul>
<li> <code>base_object_info</code>: Provides information about the base object
of the data reference and its access functions. These access functions
represent the evolution of the data reference in the loop relative to
its base, in keeping with the classical meaning of the data reference
access function for the support of arrays. For example, for a reference
<code>a.b[i][j]</code>, the base object is <code>a.b</code> and the access functions,
one for each array subscript, are:
<code>{i_init, + i_step}_1, {j_init, +, j_step}_2</code>.

</li><li> <code>first_location_in_loop</code>: Provides information about the first
location accessed by the data reference in the loop and about the access
function used to represent evolution relative to this location. This data
is used to support pointers, and is not used for arrays (for which we
have base objects). Pointer accesses are represented as a one-dimensional
access that starts from the first location accessed in the loop. For
example:

<div class="smallexample">
<pre class="smallexample">      for1 i
         for2 j
          *((int *)p + i + j) = a[i][j];
</pre></div>

<p>The access function of the pointer access is <code>{0, + 4B}_for2</code>
relative to <code>p + i</code>. The access functions of the array are
<code>{i_init, + i_step}_for1</code> and <code>{j_init, +, j_step}_for2</code>
relative to <code>a</code>.
</p>
<p>Usually, the object the pointer refers to is either unknown, or we can&rsquo;t
prove that the access is confined to the boundaries of a certain object.
</p>
<p>Two data references can be compared only if at least one of these two
representations has all its fields filled for both data references.
</p>
<p>The current strategy for data dependence tests is as follows:
If both <code>a</code> and <code>b</code> are represented as arrays, compare
<code>a.base_object</code> and <code>b.base_object</code>;
if they are equal, apply dependence tests (use access functions based on
base_objects).
Else if both <code>a</code> and <code>b</code> are represented as pointers, compare
<code>a.first_location</code> and <code>b.first_location</code>;
if they are equal, apply dependence tests (use access functions based on
first location).
However, if <code>a</code> and <code>b</code> are represented differently, only try
to prove that the bases are definitely different.
</p>
</li><li> Aliasing information.
</li><li> Alignment information.
</li></ul>

<p>The structure describing the relation between two data references is
<code>data_dependence_relation</code> and the shorter name for a pointer to
such a structure is <code>ddr_p</code>.  This structure contains:
</p>
<ul>
<li> a pointer to each data reference,
</li><li> a tree node <code>are_dependent</code> that is set to <code>chrec_known</code>
if the analysis has proved that there is no dependence between these two
data references, <code>chrec_dont_know</code> if the analysis was not able to
determine any useful result and potentially there could exist a
dependence between these data references, and <code>are_dependent</code> is
set to <code>NULL_TREE</code> if there exist a dependence relation between the
data references, and the description of this dependence relation is
given in the <code>subscripts</code>, <code>dir_vects</code>, and <code>dist_vects</code>
arrays,
</li><li> a boolean that determines whether the dependence relation can be
represented by a classical distance vector,
</li><li> an array <code>subscripts</code> that contains a description of each
subscript of the data references.  Given two array accesses a
subscript is the tuple composed of the access functions for a given
dimension.  For example, given <code>A[f1][f2][f3]</code> and
<code>B[g1][g2][g3]</code>, there are three subscripts: <code>(f1, g1), (f2,
g2), (f3, g3)</code>.
</li><li> two arrays <code>dir_vects</code> and <code>dist_vects</code> that contain
classical representations of the data dependences under the form of
direction and distance dependence vectors,
</li><li> an array of loops <code>loop_nest</code> that contains the loops to
which the distance and direction vectors refer to.
</li></ul>

<p>Several functions for pretty printing the information extracted by the
data dependence analysis are available: <code>dump_ddrs</code> prints with a
maximum verbosity the details of a data dependence relations array,
<code>dump_dist_dir_vectors</code> prints only the classical distance and
direction vectors for a data dependence relations array, and
<code>dump_data_references</code> prints the details of the data references
contained in a data reference array.
</p>
<hr>
<a name="Lambda"></a>
<div class="header">
<p>
Next: <a href="#Omega" accesskey="n" rel="next">Omega</a>, Previous: <a href="#Dependency-analysis" accesskey="p" rel="prev">Dependency analysis</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Linear-loop-transformations-framework"></a>
<h3 class="section">14.9 Linear loop transformations framework</h3>
<a name="index-Linear-loop-transformations-framework"></a>

<p>Lambda is a framework that allows transformations of loops using
non-singular matrix based transformations of the iteration space and
loop bounds. This allows compositions of skewing, scaling, interchange,
and reversal transformations.  These transformations are often used to
improve cache behavior or remove inner loop dependencies to allow
parallelization and vectorization to take place.
</p>
<p>To perform these transformations, Lambda requires that the loopnest be
converted into an internal form that can be matrix transformed easily.
To do this conversion, the function
<code>gcc_loopnest_to_lambda_loopnest</code> is provided.  If the loop cannot
be transformed using lambda, this function will return NULL.
</p>
<p>Once a <code>lambda_loopnest</code> is obtained from the conversion function,
it can be transformed by using <code>lambda_loopnest_transform</code>, which
takes a transformation matrix to apply.  Note that it is up to the
caller to verify that the transformation matrix is legal to apply to the
loop (dependence respecting, etc).  Lambda simply applies whatever
matrix it is told to provide.  It can be extended to make legal matrices
out of any non-singular matrix, but this is not currently implemented.
Legality of a matrix for a given loopnest can be verified using
<code>lambda_transform_legal_p</code>.
</p>
<p>Given a transformed loopnest, conversion back into gcc IR is done by
<code>lambda_loopnest_to_gcc_loopnest</code>.  This function will modify the
loops so that they match the transformed loopnest.
</p>

<hr>
<a name="Omega"></a>
<div class="header">
<p>
Previous: <a href="#Lambda" accesskey="p" rel="prev">Lambda</a>, Up: <a href="#Loop-Analysis-and-Representation" accesskey="u" rel="up">Loop Analysis and Representation</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Omega-a-solver-for-linear-programming-problems"></a>
<h3 class="section">14.10 Omega a solver for linear programming problems</h3>
<a name="index-Omega-a-solver-for-linear-programming-problems"></a>

<p>The data dependence analysis contains several solvers triggered
sequentially from the less complex ones to the more sophisticated.
For ensuring the consistency of the results of these solvers, a data
dependence check pass has been implemented based on two different
solvers.  The second method that has been integrated to GCC is based
on the Omega dependence solver, written in the 1990&rsquo;s by William Pugh
and David Wonnacott.  Data dependence tests can be formulated using a
subset of the Presburger arithmetics that can be translated to linear
constraint systems.  These linear constraint systems can then be
solved using the Omega solver.
</p>
<p>The Omega solver is using Fourier-Motzkin&rsquo;s algorithm for variable
elimination: a linear constraint system containing <code>n</code> variables
is reduced to a linear constraint system with <code>n-1</code> variables.
The Omega solver can also be used for solving other problems that can
be expressed under the form of a system of linear equalities and
inequalities.  The Omega solver is known to have an exponential worst
case, also known under the name of &ldquo;omega nightmare&rdquo; in the
literature, but in practice, the omega test is known to be efficient
for the common data dependence tests.
</p>
<p>The interface used by the Omega solver for describing the linear
programming problems is described in <samp>omega.h</samp>, and the solver is
<code>omega_solve_problem</code>.
</p>

<hr>
<a name="Control-Flow"></a>
<div class="header">
<p>
Next: <a href="#Machine-Desc" accesskey="n" rel="next">Machine Desc</a>, Previous: <a href="#Loop-Analysis-and-Representation" accesskey="p" rel="prev">Loop Analysis and Representation</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Control-Flow-Graph"></a>
<h2 class="chapter">15 Control Flow Graph</h2>
<a name="index-CFG_002c-Control-Flow-Graph"></a>
<a name="index-basic_002dblock_002eh"></a>

<p>A control flow graph (CFG) is a data structure built on top of the
intermediate code representation (the RTL or <code>GIMPLE</code> instruction
stream) abstracting the control flow behavior of a function that is
being compiled.  The CFG is a directed graph where the vertices
represent basic blocks and edges represent possible transfer of
control flow from one basic block to another.  The data structures
used to represent the control flow graph are defined in
<samp>basic-block.h</samp>.
</p>
<p>In GCC, the representation of control flow is maintained throughout
the compilation process, from constructing the CFG early in 
<code>pass_build_cfg</code> to <code>pass_free_cfg</code> (see <samp>passes.c</samp>).
The CFG takes various different modes and may undergo extensive
manipulations, but the graph is always valid between its construction
and its release.  This way, transfer of information such as data flow,
a measured profile, or the loop tree, can be propagated through the
passes pipeline, and even from <code>GIMPLE</code> to <code>RTL</code>.
</p>
<p>Often the CFG may be better viewed as integral part of instruction
chain, than structure built on the top of it.  Updating the compiler&rsquo;s
intermediate representation for instructions can not be easily done
without proper maintenance of the CFG simultaneously.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Basic-Blocks" accesskey="1">Basic Blocks</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The definition and representation of basic blocks.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Edges" accesskey="2">Edges</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Types of edges and their representation.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Profile-information" accesskey="3">Profile information</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Representation of frequencies and probabilities.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Maintaining-the-CFG" accesskey="4">Maintaining the CFG</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Keeping the control flow graph and up to date.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Liveness-information" accesskey="5">Liveness information</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Using and maintaining liveness information.
</td></tr>
</table>


<hr>
<a name="Basic-Blocks"></a>
<div class="header">
<p>
Next: <a href="#Edges" accesskey="n" rel="next">Edges</a>, Up: <a href="#Control-Flow" accesskey="u" rel="up">Control Flow</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Basic-Blocks-1"></a>
<h3 class="section">15.1 Basic Blocks</h3>

<a name="index-basic-block"></a>
<a name="index-basic_005fblock"></a>
<p>A basic block is a straight-line sequence of code with only one entry
point and only one exit.  In GCC, basic blocks are represented using
the <code>basic_block</code> data type.
</p>
<a name="index-ENTRY_005fBLOCK_005fPTR_002c-EXIT_005fBLOCK_005fPTR"></a>
<p>Special basic blocks represent possible entry and exit points of a
function.  These blocks are called <code>ENTRY_BLOCK_PTR</code> and
<code>EXIT_BLOCK_PTR</code>.  These blocks do not contain any code.
</p>
<a name="index-BASIC_005fBLOCK"></a>
<p>The <code>BASIC_BLOCK</code> array contains all basic blocks in an
unspecified order.  Each <code>basic_block</code> structure has a field
that holds a unique integer identifier <code>index</code> that is the
index of the block in the <code>BASIC_BLOCK</code> array.
The total number of basic blocks in the function is
<code>n_basic_blocks</code>.  Both the basic block indices and
the total number of basic blocks may vary during the compilation
process, as passes reorder, create, duplicate, and destroy basic
blocks.  The index for any block should never be greater than
<code>last_basic_block</code>.  The indices 0 and 1 are special codes
reserved for <code>ENTRY_BLOCK</code> and <code>EXIT_BLOCK</code>, the
indices of <code>ENTRY_BLOCK_PTR</code> and <code>EXIT_BLOCK_PTR</code>.
</p>
<a name="index-next_005fbb_002c-prev_005fbb_002c-FOR_005fEACH_005fBB_002c-FOR_005fALL_005fBB"></a>
<p>Two pointer members of the <code>basic_block</code> structure are the
pointers <code>next_bb</code> and <code>prev_bb</code>.  These are used to keep
doubly linked chain of basic blocks in the same order as the
underlying instruction stream.  The chain of basic blocks is updated
transparently by the provided API for manipulating the CFG.  The macro
<code>FOR_EACH_BB</code> can be used to visit all the basic blocks in
lexicographical order, except <code>ENTRY_BLOCK</code> and <code>EXIT_BLOCK</code>.
The macro <code>FOR_ALL_BB</code> also visits all basic blocks in
lexicographical order, including <code>ENTRY_BLOCK</code> and <code>EXIT_BLOCK</code>.
</p>
<a name="index-post_005forder_005fcompute_002c-inverted_005fpost_005forder_005fcompute_002c-walk_005fdominator_005ftree"></a>
<p>The functions <code>post_order_compute</code> and <code>inverted_post_order_compute</code>
can be used to compute topological orders of the CFG.  The orders are
stored as vectors of basic block indices.  The <code>BASIC_BLOCK</code> array
can be used to iterate each basic block by index.
Dominator traversals are also possible using
<code>walk_dominator_tree</code>.  Given two basic blocks A and B, block A
dominates block B if A is <em>always</em> executed before B.
</p>
<p>Each <code>basic_block</code> also contains pointers to the first
instruction (the <em>head</em>) and the last instruction (the <em>tail</em>)
or <em>end</em> of the instruction stream contained in a basic block.  In
fact, since the <code>basic_block</code> data type is used to represent
blocks in both major intermediate representations of GCC (<code>GIMPLE</code>
and RTL), there are pointers to the head and end of a basic block for
both representations, stored in intermediate representation specific
data in the <code>il</code> field of <code>struct basic_block_def</code>.
</p>
<a name="index-CODE_005fLABEL"></a>
<a name="index-NOTE_005fINSN_005fBASIC_005fBLOCK"></a>
<p>For RTL, these pointers are <code>BB_HEAD</code> and <code>BB_END</code>.
</p>
<a name="index-insn-notes_002c-notes"></a>
<a name="index-NOTE_005fINSN_005fBASIC_005fBLOCK-1"></a>
<p>In the RTL representation of a function, the instruction stream
contains not only the &ldquo;real&rdquo; instructions, but also <em>notes</em>
or <em>insn notes</em> (to distinguish them from <em>reg notes</em>).
Any function that moves or duplicates the basic blocks needs
to take care of updating of these notes.  Many of these notes expect
that the instruction stream consists of linear regions, so updating
can sometimes be tedious.  All types of insn notes are defined
in <samp>insn-notes.def</samp>.
</p>
<p>In the RTL function representation, the instructions contained in a
basic block always follow a <code>NOTE_INSN_BASIC_BLOCK</code>, but zero
or more <code>CODE_LABEL</code> nodes can precede the block note.
A basic block ends with a control flow instruction or with the last
instruction before the next <code>CODE_LABEL</code> or
<code>NOTE_INSN_BASIC_BLOCK</code>.
By definition, a <code>CODE_LABEL</code> cannot appear in the middle of
the instruction stream of a basic block.
</p>
<a name="index-can_005ffallthru"></a>
<a name="index-table-jump"></a>
<p>In addition to notes, the jump table vectors are also represented as
&ldquo;pseudo-instructions&rdquo; inside the insn stream.  These vectors never
appear in the basic block and should always be placed just after the
table jump instructions referencing them.  After removing the
table-jump it is often difficult to eliminate the code computing the
address and referencing the vector, so cleaning up these vectors is
postponed until after liveness analysis.   Thus the jump table vectors
may appear in the insn stream unreferenced and without any purpose.
Before any edge is made <em>fall-thru</em>, the existence of such
construct in the way needs to be checked by calling
<code>can_fallthru</code> function.
</p>
<a name="index-GIMPLE-statement-iterators"></a>
<p>For the <code>GIMPLE</code> representation, the PHI nodes and statements
contained in a basic block are in a <code>gimple_seq</code> pointed to by
the basic block intermediate language specific pointers.
Abstract containers and iterators are used to access the PHI nodes
and statements in a basic blocks.  These iterators are called
<em>GIMPLE statement iterators</em> (GSIs).  Grep for <code>^gsi</code>
in the various <samp>gimple-*</samp> and <samp>tree-*</samp> files.
The following snippet will pretty-print all PHI nodes the statements
of the current function in the GIMPLE representation.
</p>
<div class="smallexample">
<pre class="smallexample">basic_block bb;

FOR_EACH_BB (bb)
  {
   gimple_stmt_iterator si;

   for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&amp;si))
     {
       gimple phi = gsi_stmt (si);
       print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
     }
   for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&amp;si))
     {
       gimple stmt = gsi_stmt (si);
       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
     }
  }
</pre></div>


<hr>
<a name="Edges"></a>
<div class="header">
<p>
Next: <a href="#Profile-information" accesskey="n" rel="next">Profile information</a>, Previous: <a href="#Basic-Blocks" accesskey="p" rel="prev">Basic Blocks</a>, Up: <a href="#Control-Flow" accesskey="u" rel="up">Control Flow</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Edges-1"></a>
<h3 class="section">15.2 Edges</h3>

<a name="index-edge-in-the-flow-graph"></a>
<a name="index-edge"></a>
<p>Edges represent possible control flow transfers from the end of some
basic block A to the head of another basic block B.  We say that A is
a predecessor of B, and B is a successor of A.  Edges are represented
in GCC with the <code>edge</code> data type.  Each <code>edge</code> acts as a
link between two basic blocks: The <code>src</code> member of an edge
points to the predecessor basic block of the <code>dest</code> basic block.
The members <code>preds</code> and <code>succs</code> of the <code>basic_block</code> data
type point to type-safe vectors of edges to the predecessors and
successors of the block.
</p>
<a name="index-edge-iterators"></a>
<p>When walking the edges in an edge vector, <em>edge iterators</em> should
be used.  Edge iterators are constructed using the
<code>edge_iterator</code> data structure and several methods are available
to operate on them:
</p>
<dl compact="compact">
<dt><code>ei_start</code>
<a name="index-ei_005fstart"></a>
</dt>
<dd><p>This function initializes an <code>edge_iterator</code> that points to the
first edge in a vector of edges.
</p>
</dd>
<dt><code>ei_last</code>
<a name="index-ei_005flast"></a>
</dt>
<dd><p>This function initializes an <code>edge_iterator</code> that points to the
last edge in a vector of edges.
</p>
</dd>
<dt><code>ei_end_p</code>
<a name="index-ei_005fend_005fp"></a>
</dt>
<dd><p>This predicate is <code>true</code> if an <code>edge_iterator</code> represents
the last edge in an edge vector.
</p>
</dd>
<dt><code>ei_one_before_end_p</code>
<a name="index-ei_005fone_005fbefore_005fend_005fp"></a>
</dt>
<dd><p>This predicate is <code>true</code> if an <code>edge_iterator</code> represents
the second last edge in an edge vector.
</p>
</dd>
<dt><code>ei_next</code>
<a name="index-ei_005fnext"></a>
</dt>
<dd><p>This function takes a pointer to an <code>edge_iterator</code> and makes it
point to the next edge in the sequence.
</p>
</dd>
<dt><code>ei_prev</code>
<a name="index-ei_005fprev"></a>
</dt>
<dd><p>This function takes a pointer to an <code>edge_iterator</code> and makes it
point to the previous edge in the sequence.
</p>
</dd>
<dt><code>ei_edge</code>
<a name="index-ei_005fedge"></a>
</dt>
<dd><p>This function returns the <code>edge</code> currently pointed to by an
<code>edge_iterator</code>.
</p>
</dd>
<dt><code>ei_safe_safe</code>
<a name="index-ei_005fsafe_005fsafe"></a>
</dt>
<dd><p>This function returns the <code>edge</code> currently pointed to by an
<code>edge_iterator</code>, but returns <code>NULL</code> if the iterator is
pointing at the end of the sequence.  This function has been provided
for existing code makes the assumption that a <code>NULL</code> edge
indicates the end of the sequence.
</p>
</dd>
</dl>

<p>The convenience macro <code>FOR_EACH_EDGE</code> can be used to visit all of
the edges in a sequence of predecessor or successor edges.  It must
not be used when an element might be removed during the traversal,
otherwise elements will be missed.  Here is an example of how to use
the macro:
</p>
<div class="smallexample">
<pre class="smallexample">edge e;
edge_iterator ei;

FOR_EACH_EDGE (e, ei, bb-&gt;succs)
  {
     if (e-&gt;flags &amp; EDGE_FALLTHRU)
       break;
  }
</pre></div>

<a name="index-fall_002dthru"></a>
<p>There are various reasons why control flow may transfer from one block
to another.  One possibility is that some instruction, for example a
<code>CODE_LABEL</code>, in a linearized instruction stream just always
starts a new basic block.  In this case a <em>fall-thru</em> edge links
the basic block to the first following basic block.  But there are
several other reasons why edges may be created.  The <code>flags</code>
field of the <code>edge</code> data type is used to store information
about the type of edge we are dealing with.  Each edge is of one of
the following types:
</p>
<dl compact="compact">
<dt><em>jump</em></dt>
<dd><p>No type flags are set for edges corresponding to jump instructions.
These edges are used for unconditional or conditional jumps and in
RTL also for table jumps.  They are the easiest to manipulate as they
may be freely redirected when the flow graph is not in SSA form.
</p>
</dd>
<dt><em>fall-thru</em></dt>
<dd><a name="index-EDGE_005fFALLTHRU_002c-force_005fnonfallthru"></a>
<p>Fall-thru edges are present in case where the basic block may continue
execution to the following one without branching.  These edges have
the <code>EDGE_FALLTHRU</code> flag set.  Unlike other types of edges, these
edges must come into the basic block immediately following in the
instruction stream.  The function <code>force_nonfallthru</code> is
available to insert an unconditional jump in the case that redirection
is needed.  Note that this may require creation of a new basic block.
</p>
</dd>
<dt><em>exception handling</em></dt>
<dd><a name="index-exception-handling"></a>
<a name="index-EDGE_005fABNORMAL_002c-EDGE_005fEH"></a>
<p>Exception handling edges represent possible control transfers from a
trapping instruction to an exception handler.  The definition of
&ldquo;trapping&rdquo; varies.  In C++, only function calls can throw, but for
Java and Ada, exceptions like division by zero or segmentation fault are
defined and thus each instruction possibly throwing this kind of
exception needs to be handled as control flow instruction.  Exception
edges have the <code>EDGE_ABNORMAL</code> and <code>EDGE_EH</code> flags set.
</p>
<a name="index-purge_005fdead_005fedges"></a>
<p>When updating the instruction stream it is easy to change possibly
trapping instruction to non-trapping, by simply removing the exception
edge.  The opposite conversion is difficult, but should not happen
anyway.  The edges can be eliminated via <code>purge_dead_edges</code> call.
</p>
<a name="index-REG_005fEH_005fREGION_002c-EDGE_005fABNORMAL_005fCALL"></a>
<p>In the RTL representation, the destination of an exception edge is
specified by <code>REG_EH_REGION</code> note attached to the insn.
In case of a trapping call the <code>EDGE_ABNORMAL_CALL</code> flag is set
too.  In the <code>GIMPLE</code> representation, this extra flag is not set.
</p>
<a name="index-may_005ftrap_005fp_002c-tree_005fcould_005ftrap_005fp"></a>
<p>In the RTL representation, the predicate <code>may_trap_p</code> may be used
to check whether instruction still may trap or not.  For the tree
representation, the <code>tree_could_trap_p</code> predicate is available,
but this predicate only checks for possible memory traps, as in
dereferencing an invalid pointer location.
</p>

</dd>
<dt><em>sibling calls</em></dt>
<dd><a name="index-sibling-call"></a>
<a name="index-EDGE_005fABNORMAL_002c-EDGE_005fSIBCALL"></a>
<p>Sibling calls or tail calls terminate the function in a non-standard
way and thus an edge to the exit must be present.
<code>EDGE_SIBCALL</code> and <code>EDGE_ABNORMAL</code> are set in such case.
These edges only exist in the RTL representation.
</p>
</dd>
<dt><em>computed jumps</em></dt>
<dd><a name="index-computed-jump"></a>
<a name="index-EDGE_005fABNORMAL"></a>
<p>Computed jumps contain edges to all labels in the function referenced
from the code.  All those edges have <code>EDGE_ABNORMAL</code> flag set.
The edges used to represent computed jumps often cause compile time
performance problems, since functions consisting of many taken labels
and many computed jumps may have <em>very</em> dense flow graphs, so
these edges need to be handled with special care.  During the earlier
stages of the compilation process, GCC tries to avoid such dense flow
graphs by factoring computed jumps.  For example, given the following
series of jumps,
</p>
<div class="smallexample">
<pre class="smallexample">  goto *x;
  [ &hellip; ]

  goto *x;
  [ &hellip; ]

  goto *x;
  [ &hellip; ]
</pre></div>

<p>factoring the computed jumps results in the following code sequence
which has a much simpler flow graph:
</p>
<div class="smallexample">
<pre class="smallexample">  goto y;
  [ &hellip; ]

  goto y;
  [ &hellip; ]

  goto y;
  [ &hellip; ]

y:
  goto *x;
</pre></div>

<a name="index-pass_005fduplicate_005fcomputed_005fgotos"></a>
<p>However, the classic problem with this transformation is that it has a
runtime cost in there resulting code: An extra jump.  Therefore, the
computed jumps are un-factored in the later passes of the compiler
(in the pass called <code>pass_duplicate_computed_gotos</code>).
Be aware of that when you work on passes in that area.  There have
been numerous examples already where the compile time for code with
unfactored computed jumps caused some serious headaches.
</p>
</dd>
<dt><em>nonlocal goto handlers</em></dt>
<dd><a name="index-nonlocal-goto-handler"></a>
<a name="index-EDGE_005fABNORMAL_002c-EDGE_005fABNORMAL_005fCALL"></a>
<p>GCC allows nested functions to return into caller using a <code>goto</code>
to a label passed to as an argument to the callee.  The labels passed
to nested functions contain special code to cleanup after function
call.  Such sections of code are referred to as &ldquo;nonlocal goto
receivers&rdquo;.  If a function contains such nonlocal goto receivers, an
edge from the call to the label is created with the
<code>EDGE_ABNORMAL</code> and <code>EDGE_ABNORMAL_CALL</code> flags set.
</p>
</dd>
<dt><em>function entry points</em></dt>
<dd><a name="index-function-entry-point_002c-alternate-function-entry-point"></a>
<a name="index-LABEL_005fALTERNATE_005fNAME"></a>
<p>By definition, execution of function starts at basic block 0, so there
is always an edge from the <code>ENTRY_BLOCK_PTR</code> to basic block 0.
There is no <code>GIMPLE</code> representation for alternate entry points at
this moment.  In RTL, alternate entry points are specified by
<code>CODE_LABEL</code> with <code>LABEL_ALTERNATE_NAME</code> defined.  This
feature is currently used for multiple entry point prologues and is
limited to post-reload passes only.  This can be used by back-ends to
emit alternate prologues for functions called from different contexts.
In future full support for multiple entry functions defined by Fortran
90 needs to be implemented.
</p>
</dd>
<dt><em>function exits</em></dt>
<dd><p>In the pre-reload representation a function terminates after the last
instruction in the insn chain and no explicit return instructions are
used.  This corresponds to the fall-thru edge into exit block.  After
reload, optimal RTL epilogues are used that use explicit (conditional)
return instructions that are represented by edges with no flags set.
</p>
</dd>
</dl>


<hr>
<a name="Profile-information"></a>
<div class="header">
<p>
Next: <a href="#Maintaining-the-CFG" accesskey="n" rel="next">Maintaining the CFG</a>, Previous: <a href="#Edges" accesskey="p" rel="prev">Edges</a>, Up: <a href="#Control-Flow" accesskey="u" rel="up">Control Flow</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Profile-information-1"></a>
<h3 class="section">15.3 Profile information</h3>

<a name="index-profile-representation"></a>
<p>In many cases a compiler must make a choice whether to trade speed in
one part of code for speed in another, or to trade code size for code
speed.  In such cases it is useful to know information about how often
some given block will be executed.  That is the purpose for
maintaining profile within the flow graph.
GCC can handle profile information obtained through <em>profile
feedback</em>, but it can also estimate branch probabilities based on
statics and heuristics.
</p>
<a name="index-profile-feedback"></a>
<p>The feedback based profile is produced by compiling the program with
instrumentation, executing it on a train run and reading the numbers
of executions of basic blocks and edges back to the compiler while
re-compiling the program to produce the final executable.  This method
provides very accurate information about where a program spends most
of its time on the train run.  Whether it matches the average run of
course depends on the choice of train data set, but several studies
have shown that the behavior of a program usually changes just
marginally over different data sets.
</p>
<a name="index-Static-profile-estimation"></a>
<a name="index-branch-prediction"></a>
<a name="index-predict_002edef"></a>
<p>When profile feedback is not available, the compiler may be asked to
attempt to predict the behavior of each branch in the program using a
set of heuristics (see <samp>predict.def</samp> for details) and compute
estimated frequencies of each basic block by propagating the
probabilities over the graph.
</p>
<a name="index-frequency_002c-count_002c-BB_005fFREQ_005fBASE"></a>
<p>Each <code>basic_block</code> contains two integer fields to represent
profile information: <code>frequency</code> and <code>count</code>.  The
<code>frequency</code> is an estimation how often is basic block executed
within a function.  It is represented as an integer scaled in the
range from 0 to <code>BB_FREQ_BASE</code>.  The most frequently executed
basic block in function is initially set to <code>BB_FREQ_BASE</code> and
the rest of frequencies are scaled accordingly.  During optimization,
the frequency of the most frequent basic block can both decrease (for
instance by loop unrolling) or grow (for instance by cross-jumping
optimization), so scaling sometimes has to be performed multiple
times.
</p>
<a name="index-gcov_005ftype"></a>
<p>The <code>count</code> contains hard-counted numbers of execution measured
during training runs and is nonzero only when profile feedback is
available.  This value is represented as the host&rsquo;s widest integer
(typically a 64 bit integer) of the special type <code>gcov_type</code>.
</p>
<p>Most optimization passes can use only the frequency information of a
basic block, but a few passes may want to know hard execution counts.
The frequencies should always match the counts after scaling, however
during updating of the profile information numerical error may
accumulate into quite large errors.
</p>
<a name="index-REG_005fBR_005fPROB_005fBASE_002c-EDGE_005fFREQUENCY"></a>
<p>Each edge also contains a branch probability field: an integer in the
range from 0 to <code>REG_BR_PROB_BASE</code>.  It represents probability of
passing control from the end of the <code>src</code> basic block to the
<code>dest</code> basic block, i.e. the probability that control will flow
along this edge.  The <code>EDGE_FREQUENCY</code> macro is available to
compute how frequently a given edge is taken.  There is a <code>count</code>
field for each edge as well, representing same information as for a
basic block.
</p>
<p>The basic block frequencies are not represented in the instruction
stream, but in the RTL representation the edge frequencies are
represented for conditional jumps (via the <code>REG_BR_PROB</code>
macro) since they are used when instructions are output to the
assembly file and the flow graph is no longer maintained.
</p>
<a name="index-reverse-probability"></a>
<p>The probability that control flow arrives via a given edge to its
destination basic block is called <em>reverse probability</em> and is not
directly represented, but it may be easily computed from frequencies
of basic blocks.
</p>
<a name="index-redirect_005fedge_005fand_005fbranch"></a>
<p>Updating profile information is a delicate task that can unfortunately
not be easily integrated with the CFG manipulation API.  Many of the
functions and hooks to modify the CFG, such as
<code>redirect_edge_and_branch</code>, do not have enough information to
easily update the profile, so updating it is in the majority of cases
left up to the caller.  It is difficult to uncover bugs in the profile
updating code, because they manifest themselves only by producing
worse code, and checking profile consistency is not possible because
of numeric error accumulation.  Hence special attention needs to be
given to this issue in each pass that modifies the CFG.
</p>
<a name="index-REG_005fBR_005fPROB_005fBASE_002c-BB_005fFREQ_005fBASE_002c-count"></a>
<p>It is important to point out that <code>REG_BR_PROB_BASE</code> and
<code>BB_FREQ_BASE</code> are both set low enough to be possible to compute
second power of any frequency or probability in the flow graph, it is
not possible to even square the <code>count</code> field, as modern CPUs are
fast enough to execute $2^32$ operations quickly.
</p>

<hr>
<a name="Maintaining-the-CFG"></a>
<div class="header">
<p>
Next: <a href="#Liveness-information" accesskey="n" rel="next">Liveness information</a>, Previous: <a href="#Profile-information" accesskey="p" rel="prev">Profile information</a>, Up: <a href="#Control-Flow" accesskey="u" rel="up">Control Flow</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Maintaining-the-CFG-1"></a>
<h3 class="section">15.4 Maintaining the CFG</h3>
<a name="index-cfghooks_002eh"></a>

<p>An important task of each compiler pass is to keep both the control
flow graph and all profile information up-to-date.  Reconstruction of
the control flow graph after each pass is not an option, since it may be
very expensive and lost profile information cannot be reconstructed at
all.
</p>
<p>GCC has two major intermediate representations, and both use the
<code>basic_block</code> and <code>edge</code> data types to represent control
flow.  Both representations share as much of the CFG maintenance code
as possible.  For each representation, a set of <em>hooks</em> is defined
so that each representation can provide its own implementation of CFG
manipulation routines when necessary.  These hooks are defined in
<samp>cfghooks.h</samp>.  There are hooks for almost all common CFG
manipulations, including block splitting and merging, edge redirection
and creating and deleting basic blocks.  These hooks should provide
everything you need to maintain and manipulate the CFG in both the RTL
and <code>GIMPLE</code> representation.
</p>
<p>At the moment, the basic block boundaries are maintained transparently
when modifying instructions, so there rarely is a need to move them
manually (such as in case someone wants to output instruction outside
basic block explicitly).
</p>
<a name="index-BLOCK_005fFOR_005fINSN_002c-gimple_005fbb"></a>
<p>In the RTL representation, each instruction has a
<code>BLOCK_FOR_INSN</code> value that represents pointer to the basic block
that contains the instruction.  In the <code>GIMPLE</code> representation, the
function <code>gimple_bb</code> returns a pointer to the basic block
containing the queried statement.
</p>
<a name="index-GIMPLE-statement-iterators-1"></a>
<p>When changes need to be applied to a function in its <code>GIMPLE</code>
representation, <em>GIMPLE statement iterators</em> should be used.  These
iterators provide an integrated abstraction of the flow graph and the
instruction stream.  Block statement iterators are constructed using
the <code>gimple_stmt_iterator</code> data structure and several modifier are
available, including the following:
</p>
<dl compact="compact">
<dt><code>gsi_start</code>
<a name="index-gsi_005fstart-1"></a>
</dt>
<dd><p>This function initializes a <code>gimple_stmt_iterator</code> that points to
the first non-empty statement in a basic block.
</p>
</dd>
<dt><code>gsi_last</code>
<a name="index-gsi_005flast-1"></a>
</dt>
<dd><p>This function initializes a <code>gimple_stmt_iterator</code> that points to
the last statement in a basic block.
</p>
</dd>
<dt><code>gsi_end_p</code>
<a name="index-gsi_005fend_005fp-1"></a>
</dt>
<dd><p>This predicate is <code>true</code> if a <code>gimple_stmt_iterator</code>
represents the end of a basic block.
</p>
</dd>
<dt><code>gsi_next</code>
<a name="index-gsi_005fnext-1"></a>
</dt>
<dd><p>This function takes a <code>gimple_stmt_iterator</code> and makes it point to
its successor.
</p>
</dd>
<dt><code>gsi_prev</code>
<a name="index-gsi_005fprev-1"></a>
</dt>
<dd><p>This function takes a <code>gimple_stmt_iterator</code> and makes it point to
its predecessor.
</p>
</dd>
<dt><code>gsi_insert_after</code>
<a name="index-gsi_005finsert_005fafter-1"></a>
</dt>
<dd><p>This function inserts a statement after the <code>gimple_stmt_iterator</code>
passed in.  The final parameter determines whether the statement
iterator is updated to point to the newly inserted statement, or left
pointing to the original statement.
</p>
</dd>
<dt><code>gsi_insert_before</code>
<a name="index-gsi_005finsert_005fbefore-1"></a>
</dt>
<dd><p>This function inserts a statement before the <code>gimple_stmt_iterator</code>
passed in.  The final parameter determines whether the statement
iterator is updated to point to the newly inserted statement, or left
pointing to the original  statement.
</p>
</dd>
<dt><code>gsi_remove</code>
<a name="index-gsi_005fremove-1"></a>
</dt>
<dd><p>This function removes the <code>gimple_stmt_iterator</code> passed in and
rechains the remaining statements in a basic block, if any.
</p></dd>
</dl>

<a name="index-BB_005fHEAD_002c-BB_005fEND"></a>
<p>In the RTL representation, the macros <code>BB_HEAD</code> and <code>BB_END</code>
may be used to get the head and end <code>rtx</code> of a basic block.  No
abstract iterators are defined for traversing the insn chain, but you
can just use <code>NEXT_INSN</code> and <code>PREV_INSN</code> instead.  See <a href="#Insns">Insns</a>.
</p>
<a name="index-purge_005fdead_005fedges-1"></a>
<p>Usually a code manipulating pass simplifies the instruction stream and
the flow of control, possibly eliminating some edges.  This may for
example happen when a conditional jump is replaced with an
unconditional jump, but also when simplifying possibly trapping
instruction to non-trapping while compiling Java.  Updating of edges
is not transparent and each optimization pass is required to do so
manually.  However only few cases occur in practice.  The pass may
call <code>purge_dead_edges</code> on a given basic block to remove
superfluous edges, if any.
</p>
<a name="index-redirect_005fedge_005fand_005fbranch_002c-redirect_005fjump"></a>
<p>Another common scenario is redirection of branch instructions, but
this is best modeled as redirection of edges in the control flow graph
and thus use of <code>redirect_edge_and_branch</code> is preferred over more
low level functions, such as <code>redirect_jump</code> that operate on RTL
chain only.  The CFG hooks defined in <samp>cfghooks.h</samp> should provide
the complete API required for manipulating and maintaining the CFG.
</p>
<a name="index-split_005fblock"></a>
<p>It is also possible that a pass has to insert control flow instruction
into the middle of a basic block, thus creating an entry point in the
middle of the basic block, which is impossible by definition: The
block must be split to make sure it only has one entry point, i.e. the
head of the basic block.  The CFG hook <code>split_block</code> may be used
when an instruction in the middle of a basic block has to become the
target of a jump or branch instruction.
</p>
<a name="index-insert_005finsn_005fon_005fedge"></a>
<a name="index-commit_005fedge_005finsertions"></a>
<a name="index-gsi_005finsert_005fon_005fedge-1"></a>
<a name="index-gsi_005fcommit_005fedge_005finserts-1"></a>
<a name="index-edge-splitting"></a>
<p>For a global optimizer, a common operation is to split edges in the
flow graph and insert instructions on them.  In the RTL
representation, this can be easily done using the
<code>insert_insn_on_edge</code> function that emits an instruction
&ldquo;on the edge&rdquo;, caching it for a later <code>commit_edge_insertions</code>
call that will take care of moving the inserted instructions off the
edge into the instruction stream contained in a basic block.  This
includes the creation of new basic blocks where needed.  In the
<code>GIMPLE</code> representation, the equivalent functions are
<code>gsi_insert_on_edge</code> which inserts a block statement
iterator on an edge, and <code>gsi_commit_edge_inserts</code> which flushes
the instruction to actual instruction stream.
</p>
<a name="index-verify_005fflow_005finfo"></a>
<a name="index-CFG-verification"></a>
<p>While debugging the optimization pass, the <code>verify_flow_info</code>
function may be useful to find bugs in the control flow graph updating
code.
</p>

<hr>
<a name="Liveness-information"></a>
<div class="header">
<p>
Previous: <a href="#Maintaining-the-CFG" accesskey="p" rel="prev">Maintaining the CFG</a>, Up: <a href="#Control-Flow" accesskey="u" rel="up">Control Flow</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Liveness-information-1"></a>
<h3 class="section">15.5 Liveness information</h3>
<a name="index-Liveness-representation"></a>
<p>Liveness information is useful to determine whether some register is
&ldquo;live&rdquo; at given point of program, i.e. that it contains a value that
may be used at a later point in the program.  This information is
used, for instance, during register allocation, as the pseudo
registers only need to be assigned to a unique hard register or to a
stack slot if they are live.  The hard registers and stack slots may
be freely reused for other values when a register is dead.
</p>
<p>Liveness information is available in the back end starting with
<code>pass_df_initialize</code> and ending with <code>pass_df_finish</code>.  Three
flavors of live analysis are available: With <code>LR</code>, it is possible
to determine at any point <code>P</code> in the function if the register may be
used on some path from <code>P</code> to the end of the function.  With
<code>UR</code>, it is possible to determine if there is a path from the
beginning of the function to <code>P</code> that defines the variable.
<code>LIVE</code> is the intersection of the <code>LR</code> and <code>UR</code> and a
variable is live at <code>P</code> if there is both an assignment that reaches
it from the beginning of the function and a use that can be reached on
some path from <code>P</code> to the end of the function.
</p>
<p>In general <code>LIVE</code> is the most useful of the three.  The macros
<code>DF_[LR,UR,LIVE]_[IN,OUT]</code> can be used to access this information.
The macros take a basic block number and return a bitmap that is indexed
by the register number.  This information is only guaranteed to be up to
date after calls are made to <code>df_analyze</code>.  See the file
<code>df-core.c</code> for details on using the dataflow.
</p>

<a name="index-REG_005fDEAD_002c-REG_005fUNUSED"></a>
<p>The liveness information is stored partly in the RTL instruction stream
and partly in the flow graph.  Local information is stored in the
instruction stream: Each instruction may contain <code>REG_DEAD</code> notes
representing that the value of a given register is no longer needed, or
<code>REG_UNUSED</code> notes representing that the value computed by the
instruction is never used.  The second is useful for instructions
computing multiple values at once.
</p>

<hr>
<a name="Machine-Desc"></a>
<div class="header">
<p>
Next: <a href="#Target-Macros" accesskey="n" rel="next">Target Macros</a>, Previous: <a href="#Control-Flow" accesskey="p" rel="prev">Control Flow</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Machine-Descriptions"></a>
<h2 class="chapter">16 Machine Descriptions</h2>
<a name="index-machine-descriptions"></a>

<p>A machine description has two parts: a file of instruction patterns
(<samp>.md</samp> file) and a C header file of macro definitions.
</p>
<p>The <samp>.md</samp> file for a target machine contains a pattern for each
instruction that the target machine supports (or at least each instruction
that is worth telling the compiler about).  It may also contain comments.
A semicolon causes the rest of the line to be a comment, unless the semicolon
is inside a quoted string.
</p>
<p>See the next chapter for information on the C header file.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Overview" accesskey="1">Overview</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How the machine description is used.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Patterns" accesskey="2">Patterns</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to write instruction patterns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Example" accesskey="3">Example</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">An explained example of a <code>define_insn</code> pattern.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#RTL-Template" accesskey="4">RTL Template</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The RTL template defines what insns match a pattern.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Output-Template" accesskey="5">Output Template</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The output template says how to make assembler code
                        from such an insn.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Output-Statement" accesskey="6">Output Statement</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">For more generality, write C code to output
                        the assembler code.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Predicates" accesskey="7">Predicates</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Controlling what kinds of operands can be used
                        for an insn.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Constraints" accesskey="8">Constraints</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Fine-tuning operand selection.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Standard-Names" accesskey="9">Standard Names</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Names mark patterns to use for code generation.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Pattern-Ordering">Pattern Ordering</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">When the order of patterns makes a difference.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Dependent-Patterns">Dependent Patterns</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Having one pattern may make you need another.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Jump-Patterns">Jump Patterns</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Special considerations for patterns for jump insns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Looping-Patterns">Looping Patterns</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to define patterns for special looping insns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Insn-Canonicalizations">Insn Canonicalizations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Canonicalization of Instructions
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Expander-Definitions">Expander Definitions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Generating a sequence of several RTL insns
                        for a standard operation.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Insn-Splitting">Insn Splitting</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Splitting Instructions into Multiple Instructions.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Including-Patterns">Including Patterns</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Including Patterns in Machine Descriptions.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Peephole-Definitions">Peephole Definitions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining machine-specific peephole optimizations.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Insn-Attributes">Insn Attributes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Specifying the value of attributes for generated insns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Conditional-Execution">Conditional Execution</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Generating <code>define_insn</code> patterns for
                         predication.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Define-Subst">Define Subst</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Generating <code>define_insn</code> and <code>define_expand</code>
			patterns from other patterns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Constant-Definitions">Constant Definitions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining symbolic constants that can be used in the
                        md file.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Iterators">Iterators</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Using iterators to generate patterns from a template.
</td></tr>
</table>

<hr>
<a name="Overview"></a>
<div class="header">
<p>
Next: <a href="#Patterns" accesskey="n" rel="next">Patterns</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Overview-of-How-the-Machine-Description-is-Used"></a>
<h3 class="section">16.1 Overview of How the Machine Description is Used</h3>

<p>There are three main conversions that happen in the compiler:
</p>
<ol>
<li> The front end reads the source code and builds a parse tree.

</li><li> The parse tree is used to generate an RTL insn list based on named
instruction patterns.

</li><li> The insn list is matched against the RTL templates to produce assembler
code.

</li></ol>

<p>For the generate pass, only the names of the insns matter, from either a
named <code>define_insn</code> or a <code>define_expand</code>.  The compiler will
choose the pattern with the right name and apply the operands according
to the documentation later in this chapter, without regard for the RTL
template or operand constraints.  Note that the names the compiler looks
for are hard-coded in the compiler&mdash;it will ignore unnamed patterns and
patterns with names it doesn&rsquo;t know about, but if you don&rsquo;t provide a
named pattern it needs, it will abort.
</p>
<p>If a <code>define_insn</code> is used, the template given is inserted into the
insn list.  If a <code>define_expand</code> is used, one of three things
happens, based on the condition logic.  The condition logic may manually
create new insns for the insn list, say via <code>emit_insn()</code>, and
invoke <code>DONE</code>.  For certain named patterns, it may invoke <code>FAIL</code> to tell the
compiler to use an alternate way of performing that task.  If it invokes
neither <code>DONE</code> nor <code>FAIL</code>, the template given in the pattern
is inserted, as if the <code>define_expand</code> were a <code>define_insn</code>.
</p>
<p>Once the insn list is generated, various optimization passes convert,
replace, and rearrange the insns in the insn list.  This is where the
<code>define_split</code> and <code>define_peephole</code> patterns get used, for
example.
</p>
<p>Finally, the insn list&rsquo;s RTL is matched up with the RTL templates in the
<code>define_insn</code> patterns, and those patterns are used to emit the
final assembly code.  For this purpose, each named <code>define_insn</code>
acts like it&rsquo;s unnamed, since the names are ignored.
</p>
<hr>
<a name="Patterns"></a>
<div class="header">
<p>
Next: <a href="#Example" accesskey="n" rel="next">Example</a>, Previous: <a href="#Overview" accesskey="p" rel="prev">Overview</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Everything-about-Instruction-Patterns"></a>
<h3 class="section">16.2 Everything about Instruction Patterns</h3>
<a name="index-patterns"></a>
<a name="index-instruction-patterns"></a>

<a name="index-define_005finsn"></a>
<p>Each instruction pattern contains an incomplete RTL expression, with pieces
to be filled in later, operand constraints that restrict how the pieces can
be filled in, and an output pattern or C code to generate the assembler
output, all wrapped up in a <code>define_insn</code> expression.
</p>
<p>A <code>define_insn</code> is an RTL expression containing four or five operands:
</p>
<ol>
<li> An optional name.  The presence of a name indicate that this instruction
pattern can perform a certain standard job for the RTL-generation
pass of the compiler.  This pass knows certain names and will use
the instruction patterns with those names, if the names are defined
in the machine description.

<p>The absence of a name is indicated by writing an empty string
where the name should go.  Nameless instruction patterns are never
used for generating RTL code, but they may permit several simpler insns
to be combined later on.
</p>
<p>Names that are not thus known and used in RTL-generation have no
effect; they are equivalent to no name at all.
</p>
<p>For the purpose of debugging the compiler, you may also specify a
name beginning with the &lsquo;<samp>*</samp>&rsquo; character.  Such a name is used only
for identifying the instruction in RTL dumps; it is entirely equivalent
to having a nameless pattern for all other purposes.
</p>
</li><li> The <em>RTL template</em> (see <a href="#RTL-Template">RTL Template</a>) is a vector of incomplete
RTL expressions which show what the instruction should look like.  It is
incomplete because it may contain <code>match_operand</code>,
<code>match_operator</code>, and <code>match_dup</code> expressions that stand for
operands of the instruction.

<p>If the vector has only one element, that element is the template for the
instruction pattern.  If the vector has multiple elements, then the
instruction pattern is a <code>parallel</code> expression containing the
elements described.
</p>
</li><li> <a name="index-pattern-conditions"></a>
<a name="index-conditions_002c-in-patterns"></a>
A condition.  This is a string which contains a C expression that is
the final test to decide whether an insn body matches this pattern.

<a name="index-named-patterns-and-conditions"></a>
<p>For a named pattern, the condition (if present) may not depend on
the data in the insn being matched, but only the target-machine-type
flags.  The compiler needs to test these conditions during
initialization in order to learn exactly which named instructions are
available in a particular run.
</p>
<a name="index-operands-1"></a>
<p>For nameless patterns, the condition is applied only when matching an
individual insn, and only after the insn has matched the pattern&rsquo;s
recognition template.  The insn&rsquo;s operands may be found in the vector
<code>operands</code>.  For an insn where the condition has once matched, it
can&rsquo;t be used to control register allocation, for example by excluding
certain hard registers or hard register combinations.
</p>
</li><li> The <em>output template</em>: a string that says how to output matching
insns as assembler code.  &lsquo;<samp>%</samp>&rsquo; in this string specifies where
to substitute the value of an operand.  See <a href="#Output-Template">Output Template</a>.

<p>When simple substitution isn&rsquo;t general enough, you can specify a piece
of C code to compute the output.  See <a href="#Output-Statement">Output Statement</a>.
</p>
</li><li> Optionally, a vector containing the values of attributes for insns matching
this pattern.  See <a href="#Insn-Attributes">Insn Attributes</a>.
</li></ol>

<hr>
<a name="Example"></a>
<div class="header">
<p>
Next: <a href="#RTL-Template" accesskey="n" rel="next">RTL Template</a>, Previous: <a href="#Patterns" accesskey="p" rel="prev">Patterns</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Example-of-define_005finsn"></a>
<h3 class="section">16.3 Example of <code>define_insn</code></h3>
<a name="index-define_005finsn-example"></a>

<p>Here is an actual example of an instruction pattern, for the 68000/68020.
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;tstsi&quot;
  [(set (cc0)
        (match_operand:SI 0 &quot;general_operand&quot; &quot;rm&quot;))]
  &quot;&quot;
  &quot;*
{
  if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
    return \&quot;tstl %0\&quot;;
  return \&quot;cmpl #0,%0\&quot;;
}&quot;)
</pre></div>

<p>This can also be written using braced strings:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;tstsi&quot;
  [(set (cc0)
        (match_operand:SI 0 &quot;general_operand&quot; &quot;rm&quot;))]
  &quot;&quot;
{
  if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
    return &quot;tstl %0&quot;;
  return &quot;cmpl #0,%0&quot;;
})
</pre></div>

<p>This is an instruction that sets the condition codes based on the value of
a general operand.  It has no condition, so any insn whose RTL description
has the form shown may be handled according to this pattern.  The name
&lsquo;<samp>tstsi</samp>&rsquo; means &ldquo;test a <code>SImode</code> value&rdquo; and tells the RTL generation
pass that, when it is necessary to test such a value, an insn to do so
can be constructed using this pattern.
</p>
<p>The output control string is a piece of C code which chooses which
output template to return based on the kind of operand and the specific
type of CPU for which code is being generated.
</p>
<p>&lsquo;<samp>&quot;rm&quot;</samp>&rsquo; is an operand constraint.  Its meaning is explained below.
</p>
<hr>
<a name="RTL-Template"></a>
<div class="header">
<p>
Next: <a href="#Output-Template" accesskey="n" rel="next">Output Template</a>, Previous: <a href="#Example" accesskey="p" rel="prev">Example</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-Template-1"></a>
<h3 class="section">16.4 RTL Template</h3>
<a name="index-RTL-insn-template"></a>
<a name="index-generating-insns"></a>
<a name="index-insns_002c-generating"></a>
<a name="index-recognizing-insns"></a>
<a name="index-insns_002c-recognizing"></a>

<p>The RTL template is used to define which insns match the particular pattern
and how to find their operands.  For named patterns, the RTL template also
says how to construct an insn from specified operands.
</p>
<p>Construction involves substituting specified operands into a copy of the
template.  Matching involves determining the values that serve as the
operands in the insn being matched.  Both of these activities are
controlled by special expression types that direct matching and
substitution of the operands.
</p>
<dl compact="compact">
<dd><a name="index-match_005foperand"></a>
</dd>
<dt><code>(match_operand:<var>m</var> <var>n</var> <var>predicate</var> <var>constraint</var>)</code></dt>
<dd><p>This expression is a placeholder for operand number <var>n</var> of
the insn.  When constructing an insn, operand number <var>n</var>
will be substituted at this point.  When matching an insn, whatever
appears at this position in the insn will be taken as operand
number <var>n</var>; but it must satisfy <var>predicate</var> or this instruction
pattern will not match at all.
</p>
<p>Operand numbers must be chosen consecutively counting from zero in
each instruction pattern.  There may be only one <code>match_operand</code>
expression in the pattern for each operand number.  Usually operands
are numbered in the order of appearance in <code>match_operand</code>
expressions.  In the case of a <code>define_expand</code>, any operand numbers
used only in <code>match_dup</code> expressions have higher values than all
other operand numbers.
</p>
<p><var>predicate</var> is a string that is the name of a function that
accepts two arguments, an expression and a machine mode.
See <a href="#Predicates">Predicates</a>.  During matching, the function will be called with
the putative operand as the expression and <var>m</var> as the mode
argument (if <var>m</var> is not specified, <code>VOIDmode</code> will be used,
which normally causes <var>predicate</var> to accept any mode).  If it
returns zero, this instruction pattern fails to match.
<var>predicate</var> may be an empty string; then it means no test is to be
done on the operand, so anything which occurs in this position is
valid.
</p>
<p>Most of the time, <var>predicate</var> will reject modes other than <var>m</var>&mdash;but
not always.  For example, the predicate <code>address_operand</code> uses
<var>m</var> as the mode of memory ref that the address should be valid for.
Many predicates accept <code>const_int</code> nodes even though their mode is
<code>VOIDmode</code>.
</p>
<p><var>constraint</var> controls reloading and the choice of the best register
class to use for a value, as explained later (see <a href="#Constraints">Constraints</a>).
If the constraint would be an empty string, it can be omitted.
</p>
<p>People are often unclear on the difference between the constraint and the
predicate.  The predicate helps decide whether a given insn matches the
pattern.  The constraint plays no role in this decision; instead, it
controls various decisions in the case of an insn which does match.
</p>
<a name="index-match_005fscratch"></a>
</dd>
<dt><code>(match_scratch:<var>m</var> <var>n</var> <var>constraint</var>)</code></dt>
<dd><p>This expression is also a placeholder for operand number <var>n</var>
and indicates that operand must be a <code>scratch</code> or <code>reg</code>
expression.
</p>
<p>When matching patterns, this is equivalent to
</p>
<div class="smallexample">
<pre class="smallexample">(match_operand:<var>m</var> <var>n</var> &quot;scratch_operand&quot; <var>pred</var>)
</pre></div>

<p>but, when generating RTL, it produces a (<code>scratch</code>:<var>m</var>)
expression.
</p>
<p>If the last few expressions in a <code>parallel</code> are <code>clobber</code>
expressions whose operands are either a hard register or
<code>match_scratch</code>, the combiner can add or delete them when
necessary.  See <a href="#Side-Effects">Side Effects</a>.
</p>
<a name="index-match_005fdup"></a>
</dd>
<dt><code>(match_dup <var>n</var>)</code></dt>
<dd><p>This expression is also a placeholder for operand number <var>n</var>.
It is used when the operand needs to appear more than once in the
insn.
</p>
<p>In construction, <code>match_dup</code> acts just like <code>match_operand</code>:
the operand is substituted into the insn being constructed.  But in
matching, <code>match_dup</code> behaves differently.  It assumes that operand
number <var>n</var> has already been determined by a <code>match_operand</code>
appearing earlier in the recognition template, and it matches only an
identical-looking expression.
</p>
<p>Note that <code>match_dup</code> should not be used to tell the compiler that
a particular register is being used for two operands (example:
<code>add</code> that adds one register to another; the second register is
both an input operand and the output operand).  Use a matching
constraint (see <a href="#Simple-Constraints">Simple Constraints</a>) for those.  <code>match_dup</code> is for the cases where one
operand is used in two places in the template, such as an instruction
that computes both a quotient and a remainder, where the opcode takes
two input operands but the RTL template has to refer to each of those
twice; once for the quotient pattern and once for the remainder pattern.
</p>
<a name="index-match_005foperator"></a>
</dd>
<dt><code>(match_operator:<var>m</var> <var>n</var> <var>predicate</var> [<var>operands</var>&hellip;])</code></dt>
<dd><p>This pattern is a kind of placeholder for a variable RTL expression
code.
</p>
<p>When constructing an insn, it stands for an RTL expression whose
expression code is taken from that of operand <var>n</var>, and whose
operands are constructed from the patterns <var>operands</var>.
</p>
<p>When matching an expression, it matches an expression if the function
<var>predicate</var> returns nonzero on that expression <em>and</em> the
patterns <var>operands</var> match the operands of the expression.
</p>
<p>Suppose that the function <code>commutative_operator</code> is defined as
follows, to match any expression whose operator is one of the
commutative arithmetic operators of RTL and whose mode is <var>mode</var>:
</p>
<div class="smallexample">
<pre class="smallexample">int
commutative_integer_operator (x, mode)
     rtx x;
     enum machine_mode mode;
{
  enum rtx_code code = GET_CODE (x);
  if (GET_MODE (x) != mode)
    return 0;
  return (GET_RTX_CLASS (code) == RTX_COMM_ARITH
          || code == EQ || code == NE);
}
</pre></div>

<p>Then the following pattern will match any RTL expression consisting
of a commutative operator applied to two general operands:
</p>
<div class="smallexample">
<pre class="smallexample">(match_operator:SI 3 &quot;commutative_operator&quot;
  [(match_operand:SI 1 &quot;general_operand&quot; &quot;g&quot;)
   (match_operand:SI 2 &quot;general_operand&quot; &quot;g&quot;)])
</pre></div>

<p>Here the vector <code>[<var>operands</var>&hellip;]</code> contains two patterns
because the expressions to be matched all contain two operands.
</p>
<p>When this pattern does match, the two operands of the commutative
operator are recorded as operands 1 and 2 of the insn.  (This is done
by the two instances of <code>match_operand</code>.)  Operand 3 of the insn
will be the entire commutative expression: use <code>GET_CODE
(operands[3])</code> to see which commutative operator was used.
</p>
<p>The machine mode <var>m</var> of <code>match_operator</code> works like that of
<code>match_operand</code>: it is passed as the second argument to the
predicate function, and that function is solely responsible for
deciding whether the expression to be matched &ldquo;has&rdquo; that mode.
</p>
<p>When constructing an insn, argument 3 of the gen-function will specify
the operation (i.e. the expression code) for the expression to be
made.  It should be an RTL expression, whose expression code is copied
into a new expression whose operands are arguments 1 and 2 of the
gen-function.  The subexpressions of argument 3 are not used;
only its expression code matters.
</p>
<p>When <code>match_operator</code> is used in a pattern for matching an insn,
it usually best if the operand number of the <code>match_operator</code>
is higher than that of the actual operands of the insn.  This improves
register allocation because the register allocator often looks at
operands 1 and 2 of insns to see if it can do register tying.
</p>
<p>There is no way to specify constraints in <code>match_operator</code>.  The
operand of the insn which corresponds to the <code>match_operator</code>
never has any constraints because it is never reloaded as a whole.
However, if parts of its <var>operands</var> are matched by
<code>match_operand</code> patterns, those parts may have constraints of
their own.
</p>
<a name="index-match_005fop_005fdup"></a>
</dd>
<dt><code>(match_op_dup:<var>m</var> <var>n</var>[<var>operands</var>&hellip;])</code></dt>
<dd><p>Like <code>match_dup</code>, except that it applies to operators instead of
operands.  When constructing an insn, operand number <var>n</var> will be
substituted at this point.  But in matching, <code>match_op_dup</code> behaves
differently.  It assumes that operand number <var>n</var> has already been
determined by a <code>match_operator</code> appearing earlier in the
recognition template, and it matches only an identical-looking
expression.
</p>
<a name="index-match_005fparallel"></a>
</dd>
<dt><code>(match_parallel <var>n</var> <var>predicate</var> [<var>subpat</var>&hellip;])</code></dt>
<dd><p>This pattern is a placeholder for an insn that consists of a
<code>parallel</code> expression with a variable number of elements.  This
expression should only appear at the top level of an insn pattern.
</p>
<p>When constructing an insn, operand number <var>n</var> will be substituted at
this point.  When matching an insn, it matches if the body of the insn
is a <code>parallel</code> expression with at least as many elements as the
vector of <var>subpat</var> expressions in the <code>match_parallel</code>, if each
<var>subpat</var> matches the corresponding element of the <code>parallel</code>,
<em>and</em> the function <var>predicate</var> returns nonzero on the
<code>parallel</code> that is the body of the insn.  It is the responsibility
of the predicate to validate elements of the <code>parallel</code> beyond
those listed in the <code>match_parallel</code>.
</p>
<p>A typical use of <code>match_parallel</code> is to match load and store
multiple expressions, which can contain a variable number of elements
in a <code>parallel</code>.  For example,
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(match_parallel 0 &quot;load_multiple_operation&quot;
     [(set (match_operand:SI 1 &quot;gpc_reg_operand&quot; &quot;=r&quot;)
           (match_operand:SI 2 &quot;memory_operand&quot; &quot;m&quot;))
      (use (reg:SI 179))
      (clobber (reg:SI 179))])]
  &quot;&quot;
  &quot;loadm 0,0,%1,%2&quot;)
</pre></div>

<p>This example comes from <samp>a29k.md</samp>.  The function
<code>load_multiple_operation</code> is defined in <samp>a29k.c</samp> and checks
that subsequent elements in the <code>parallel</code> are the same as the
<code>set</code> in the pattern, except that they are referencing subsequent
registers and memory locations.
</p>
<p>An insn that matches this pattern might look like:
</p>
<div class="smallexample">
<pre class="smallexample">(parallel
 [(set (reg:SI 20) (mem:SI (reg:SI 100)))
  (use (reg:SI 179))
  (clobber (reg:SI 179))
  (set (reg:SI 21)
       (mem:SI (plus:SI (reg:SI 100)
                        (const_int 4))))
  (set (reg:SI 22)
       (mem:SI (plus:SI (reg:SI 100)
                        (const_int 8))))])
</pre></div>

<a name="index-match_005fpar_005fdup"></a>
</dd>
<dt><code>(match_par_dup <var>n</var> [<var>subpat</var>&hellip;])</code></dt>
<dd><p>Like <code>match_op_dup</code>, but for <code>match_parallel</code> instead of
<code>match_operator</code>.
</p>
</dd>
</dl>

<hr>
<a name="Output-Template"></a>
<div class="header">
<p>
Next: <a href="#Output-Statement" accesskey="n" rel="next">Output Statement</a>, Previous: <a href="#RTL-Template" accesskey="p" rel="prev">RTL Template</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Output-Templates-and-Operand-Substitution"></a>
<h3 class="section">16.5 Output Templates and Operand Substitution</h3>
<a name="index-output-templates"></a>
<a name="index-operand-substitution"></a>

<a name="index-_0025-in-template"></a>
<a name="index-percent-sign"></a>
<p>The <em>output template</em> is a string which specifies how to output the
assembler code for an instruction pattern.  Most of the template is a
fixed string which is output literally.  The character &lsquo;<samp>%</samp>&rsquo; is used
to specify where to substitute an operand; it can also be used to
identify places where different variants of the assembler require
different syntax.
</p>
<p>In the simplest case, a &lsquo;<samp>%</samp>&rsquo; followed by a digit <var>n</var> says to output
operand <var>n</var> at that point in the string.
</p>
<p>&lsquo;<samp>%</samp>&rsquo; followed by a letter and a digit says to output an operand in an
alternate fashion.  Four letters have standard, built-in meanings described
below.  The machine description macro <code>PRINT_OPERAND</code> can define
additional letters with nonstandard meanings.
</p>
<p>&lsquo;<samp>%c<var>digit</var></samp>&rsquo; can be used to substitute an operand that is a
constant value without the syntax that normally indicates an immediate
operand.
</p>
<p>&lsquo;<samp>%n<var>digit</var></samp>&rsquo; is like &lsquo;<samp>%c<var>digit</var></samp>&rsquo; except that the value of
the constant is negated before printing.
</p>
<p>&lsquo;<samp>%a<var>digit</var></samp>&rsquo; can be used to substitute an operand as if it were a
memory reference, with the actual operand treated as the address.  This may
be useful when outputting a &ldquo;load address&rdquo; instruction, because often the
assembler syntax for such an instruction requires you to write the operand
as if it were a memory reference.
</p>
<p>&lsquo;<samp>%l<var>digit</var></samp>&rsquo; is used to substitute a <code>label_ref</code> into a jump
instruction.
</p>
<p>&lsquo;<samp>%=</samp>&rsquo; outputs a number which is unique to each instruction in the
entire compilation.  This is useful for making local labels to be
referred to more than once in a single template that generates multiple
assembler instructions.
</p>
<p>&lsquo;<samp>%</samp>&rsquo; followed by a punctuation character specifies a substitution that
does not use an operand.  Only one case is standard: &lsquo;<samp>%%</samp>&rsquo; outputs a
&lsquo;<samp>%</samp>&rsquo; into the assembler code.  Other nonstandard cases can be
defined in the <code>PRINT_OPERAND</code> macro.  You must also define
which punctuation characters are valid with the
<code>PRINT_OPERAND_PUNCT_VALID_P</code> macro.
</p>
<a name="index-_005c"></a>
<a name="index-backslash"></a>
<p>The template may generate multiple assembler instructions.  Write the text
for the instructions, with &lsquo;<samp>\;</samp>&rsquo; between them.
</p>
<a name="index-matching-operands"></a>
<p>When the RTL contains two operands which are required by constraint to match
each other, the output template must refer only to the lower-numbered operand.
Matching operands are not always identical, and the rest of the compiler
arranges to put the proper RTL expression for printing into the lower-numbered
operand.
</p>
<p>One use of nonstandard letters or punctuation following &lsquo;<samp>%</samp>&rsquo; is to
distinguish between different assembler languages for the same machine; for
example, Motorola syntax versus MIT syntax for the 68000.  Motorola syntax
requires periods in most opcode names, while MIT syntax does not.  For
example, the opcode &lsquo;<samp>movel</samp>&rsquo; in MIT syntax is &lsquo;<samp>move.l</samp>&rsquo; in Motorola
syntax.  The same file of patterns is used for both kinds of output syntax,
but the character sequence &lsquo;<samp>%.</samp>&rsquo; is used in each place where Motorola
syntax wants a period.  The <code>PRINT_OPERAND</code> macro for Motorola syntax
defines the sequence to output a period; the macro for MIT syntax defines
it to do nothing.
</p>
<a name="index-_0023-in-template"></a>
<p>As a special case, a template consisting of the single character <code>#</code>
instructs the compiler to first split the insn, and then output the
resulting instructions separately.  This helps eliminate redundancy in the
output templates.   If you have a <code>define_insn</code> that needs to emit
multiple assembler instructions, and there is a matching <code>define_split</code>
already defined, then you can simply use <code>#</code> as the output template
instead of writing an output template that emits the multiple assembler
instructions.
</p>
<p>If the macro <code>ASSEMBLER_DIALECT</code> is defined, you can use construct
of the form &lsquo;<samp>{option0|option1|option2}</samp>&rsquo; in the templates.  These
describe multiple variants of assembler language syntax.
See <a href="#Instruction-Output">Instruction Output</a>.
</p>
<hr>
<a name="Output-Statement"></a>
<div class="header">
<p>
Next: <a href="#Predicates" accesskey="n" rel="next">Predicates</a>, Previous: <a href="#Output-Template" accesskey="p" rel="prev">Output Template</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="C-Statements-for-Assembler-Output"></a>
<h3 class="section">16.6 C Statements for Assembler Output</h3>
<a name="index-output-statements"></a>
<a name="index-C-statements-for-assembler-output"></a>
<a name="index-generating-assembler-output"></a>

<p>Often a single fixed template string cannot produce correct and efficient
assembler code for all the cases that are recognized by a single
instruction pattern.  For example, the opcodes may depend on the kinds of
operands; or some unfortunate combinations of operands may require extra
machine instructions.
</p>
<p>If the output control string starts with a &lsquo;<samp>@</samp>&rsquo;, then it is actually
a series of templates, each on a separate line.  (Blank lines and
leading spaces and tabs are ignored.)  The templates correspond to the
pattern&rsquo;s constraint alternatives (see <a href="#Multi_002dAlternative">Multi-Alternative</a>).  For example,
if a target machine has a two-address add instruction &lsquo;<samp>addr</samp>&rsquo; to add
into a register and another &lsquo;<samp>addm</samp>&rsquo; to add a register to memory, you
might write this pattern:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;addsi3&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=r,m&quot;)
        (plus:SI (match_operand:SI 1 &quot;general_operand&quot; &quot;0,0&quot;)
                 (match_operand:SI 2 &quot;general_operand&quot; &quot;g,r&quot;)))]
  &quot;&quot;
  &quot;@
   addr %2,%0
   addm %2,%0&quot;)
</pre></div>

<a name="index-_002a-in-template"></a>
<a name="index-asterisk-in-template"></a>
<p>If the output control string starts with a &lsquo;<samp>*</samp>&rsquo;, then it is not an
output template but rather a piece of C program that should compute a
template.  It should execute a <code>return</code> statement to return the
template-string you want.  Most such templates use C string literals, which
require doublequote characters to delimit them.  To include these
doublequote characters in the string, prefix each one with &lsquo;<samp>\</samp>&rsquo;.
</p>
<p>If the output control string is written as a brace block instead of a
double-quoted string, it is automatically assumed to be C code.  In that
case, it is not necessary to put in a leading asterisk, or to escape the
doublequotes surrounding C string literals.
</p>
<p>The operands may be found in the array <code>operands</code>, whose C data type
is <code>rtx []</code>.
</p>
<p>It is very common to select different ways of generating assembler code
based on whether an immediate operand is within a certain range.  Be
careful when doing this, because the result of <code>INTVAL</code> is an
integer on the host machine.  If the host machine has more bits in an
<code>int</code> than the target machine has in the mode in which the constant
will be used, then some of the bits you get from <code>INTVAL</code> will be
superfluous.  For proper results, you must carefully disregard the
values of those bits.
</p>
<a name="index-output_005fasm_005finsn"></a>
<p>It is possible to output an assembler instruction and then go on to output
or compute more of them, using the subroutine <code>output_asm_insn</code>.  This
receives two arguments: a template-string and a vector of operands.  The
vector may be <code>operands</code>, or it may be another array of <code>rtx</code>
that you declare locally and initialize yourself.
</p>
<a name="index-which_005falternative"></a>
<p>When an insn pattern has multiple alternatives in its constraints, often
the appearance of the assembler code is determined mostly by which alternative
was matched.  When this is so, the C code can test the variable
<code>which_alternative</code>, which is the ordinal number of the alternative
that was actually satisfied (0 for the first, 1 for the second alternative,
etc.).
</p>
<p>For example, suppose there are two opcodes for storing zero, &lsquo;<samp>clrreg</samp>&rsquo;
for registers and &lsquo;<samp>clrmem</samp>&rsquo; for memory locations.  Here is how
a pattern could use <code>which_alternative</code> to choose between them:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=r,m&quot;)
        (const_int 0))]
  &quot;&quot;
  {
  return (which_alternative == 0
          ? &quot;clrreg %0&quot; : &quot;clrmem %0&quot;);
  })
</pre></div>

<p>The example above, where the assembler code to generate was
<em>solely</em> determined by the alternative, could also have been specified
as follows, having the output control string start with a &lsquo;<samp>@</samp>&rsquo;:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=r,m&quot;)
        (const_int 0))]
  &quot;&quot;
  &quot;@
   clrreg %0
   clrmem %0&quot;)
</pre></div>

<p>If you just need a little bit of C code in one (or a few) alternatives,
you can use &lsquo;<samp>*</samp>&rsquo; inside of a &lsquo;<samp>@</samp>&rsquo; multi-alternative template:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=r,&lt;,m&quot;)
        (const_int 0))]
  &quot;&quot;
  &quot;@
   clrreg %0
   * return stack_mem_p (operands[0]) ? \&quot;push 0\&quot; : \&quot;clrmem %0\&quot;;
   clrmem %0&quot;)
</pre></div>

<hr>
<a name="Predicates"></a>
<div class="header">
<p>
Next: <a href="#Constraints" accesskey="n" rel="next">Constraints</a>, Previous: <a href="#Output-Statement" accesskey="p" rel="prev">Output Statement</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Predicates-1"></a>
<h3 class="section">16.7 Predicates</h3>
<a name="index-predicates"></a>
<a name="index-operand-predicates"></a>
<a name="index-operator-predicates"></a>

<p>A predicate determines whether a <code>match_operand</code> or
<code>match_operator</code> expression matches, and therefore whether the
surrounding instruction pattern will be used for that combination of
operands.  GCC has a number of machine-independent predicates, and you
can define machine-specific predicates as needed.  By convention,
predicates used with <code>match_operand</code> have names that end in
&lsquo;<samp>_operand</samp>&rsquo;, and those used with <code>match_operator</code> have names
that end in &lsquo;<samp>_operator</samp>&rsquo;.
</p>
<p>All predicates are Boolean functions (in the mathematical sense) of
two arguments: the RTL expression that is being considered at that
position in the instruction pattern, and the machine mode that the
<code>match_operand</code> or <code>match_operator</code> specifies.  In this
section, the first argument is called <var>op</var> and the second argument
<var>mode</var>.  Predicates can be called from C as ordinary two-argument
functions; this can be useful in output templates or other
machine-specific code.
</p>
<p>Operand predicates can allow operands that are not actually acceptable
to the hardware, as long as the constraints give reload the ability to
fix them up (see <a href="#Constraints">Constraints</a>).  However, GCC will usually generate
better code if the predicates specify the requirements of the machine
instructions as closely as possible.  Reload cannot fix up operands
that must be constants (&ldquo;immediate operands&rdquo;); you must use a
predicate that allows only constants, or else enforce the requirement
in the extra condition.
</p>
<a name="index-predicates-and-machine-modes"></a>
<a name="index-normal-predicates"></a>
<a name="index-special-predicates"></a>
<p>Most predicates handle their <var>mode</var> argument in a uniform manner.
If <var>mode</var> is <code>VOIDmode</code> (unspecified), then <var>op</var> can have
any mode.  If <var>mode</var> is anything else, then <var>op</var> must have the
same mode, unless <var>op</var> is a <code>CONST_INT</code> or integer
<code>CONST_DOUBLE</code>.  These RTL expressions always have
<code>VOIDmode</code>, so it would be counterproductive to check that their
mode matches.  Instead, predicates that accept <code>CONST_INT</code> and/or
integer <code>CONST_DOUBLE</code> check that the value stored in the
constant will fit in the requested mode.
</p>
<p>Predicates with this behavior are called <em>normal</em>.
<code>genrecog</code> can optimize the instruction recognizer based on
knowledge of how normal predicates treat modes.  It can also diagnose
certain kinds of common errors in the use of normal predicates; for
instance, it is almost always an error to use a normal predicate
without specifying a mode.
</p>
<p>Predicates that do something different with their <var>mode</var> argument
are called <em>special</em>.  The generic predicates
<code>address_operand</code> and <code>pmode_register_operand</code> are special
predicates.  <code>genrecog</code> does not do any optimizations or
diagnosis when special predicates are used.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Machine_002dIndependent-Predicates" accesskey="1">Machine-Independent Predicates</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Predicates available to all back ends.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Defining-Predicates" accesskey="2">Defining Predicates</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to write machine-specific predicate
                                    functions.
</td></tr>
</table>

<hr>
<a name="Machine_002dIndependent-Predicates"></a>
<div class="header">
<p>
Next: <a href="#Defining-Predicates" accesskey="n" rel="next">Defining Predicates</a>, Up: <a href="#Predicates" accesskey="u" rel="up">Predicates</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Machine_002dIndependent-Predicates-1"></a>
<h4 class="subsection">16.7.1 Machine-Independent Predicates</h4>
<a name="index-machine_002dindependent-predicates"></a>
<a name="index-generic-predicates"></a>

<p>These are the generic predicates available to all back ends.  They are
defined in <samp>recog.c</samp>.  The first category of predicates allow
only constant, or <em>immediate</em>, operands.
</p>
<dl>
<dt><a name="index-immediate_005foperand"></a>Function: <strong>immediate_operand</strong></dt>
<dd><p>This predicate allows any sort of constant that fits in <var>mode</var>.
It is an appropriate choice for instructions that take operands that
must be constant.
</p></dd></dl>

<dl>
<dt><a name="index-const_005fint_005foperand"></a>Function: <strong>const_int_operand</strong></dt>
<dd><p>This predicate allows any <code>CONST_INT</code> expression that fits in
<var>mode</var>.  It is an appropriate choice for an immediate operand that
does not allow a symbol or label.
</p></dd></dl>

<dl>
<dt><a name="index-const_005fdouble_005foperand"></a>Function: <strong>const_double_operand</strong></dt>
<dd><p>This predicate accepts any <code>CONST_DOUBLE</code> expression that has
exactly <var>mode</var>.  If <var>mode</var> is <code>VOIDmode</code>, it will also
accept <code>CONST_INT</code>.  It is intended for immediate floating point
constants.
</p></dd></dl>

<p>The second category of predicates allow only some kind of machine
register.
</p>
<dl>
<dt><a name="index-register_005foperand"></a>Function: <strong>register_operand</strong></dt>
<dd><p>This predicate allows any <code>REG</code> or <code>SUBREG</code> expression that
is valid for <var>mode</var>.  It is often suitable for arithmetic
instruction operands on a RISC machine.
</p></dd></dl>

<dl>
<dt><a name="index-pmode_005fregister_005foperand"></a>Function: <strong>pmode_register_operand</strong></dt>
<dd><p>This is a slight variant on <code>register_operand</code> which works around
a limitation in the machine-description reader.
</p>
<div class="smallexample">
<pre class="smallexample">(match_operand <var>n</var> &quot;pmode_register_operand&quot; <var>constraint</var>)
</pre></div>

<p>means exactly what
</p>
<div class="smallexample">
<pre class="smallexample">(match_operand:P <var>n</var> &quot;register_operand&quot; <var>constraint</var>)
</pre></div>

<p>would mean, if the machine-description reader accepted &lsquo;<samp>:P</samp>&rsquo;
mode suffixes.  Unfortunately, it cannot, because <code>Pmode</code> is an
alias for some other mode, and might vary with machine-specific
options.  See <a href="#Misc">Misc</a>.
</p></dd></dl>

<dl>
<dt><a name="index-scratch_005foperand"></a>Function: <strong>scratch_operand</strong></dt>
<dd><p>This predicate allows hard registers and <code>SCRATCH</code> expressions,
but not pseudo-registers.  It is used internally by <code>match_scratch</code>;
it should not be used directly.
</p></dd></dl>

<p>The third category of predicates allow only some kind of memory reference.
</p>
<dl>
<dt><a name="index-memory_005foperand"></a>Function: <strong>memory_operand</strong></dt>
<dd><p>This predicate allows any valid reference to a quantity of mode
<var>mode</var> in memory, as determined by the weak form of
<code>GO_IF_LEGITIMATE_ADDRESS</code> (see <a href="#Addressing-Modes">Addressing Modes</a>).
</p></dd></dl>

<dl>
<dt><a name="index-address_005foperand"></a>Function: <strong>address_operand</strong></dt>
<dd><p>This predicate is a little unusual; it allows any operand that is a
valid expression for the <em>address</em> of a quantity of mode
<var>mode</var>, again determined by the weak form of
<code>GO_IF_LEGITIMATE_ADDRESS</code>.  To first order, if
&lsquo;<samp>(mem:<var>mode</var>&nbsp;(<var>exp</var>))<!-- /@w --></samp>&rsquo; is acceptable to
<code>memory_operand</code>, then <var>exp</var> is acceptable to
<code>address_operand</code>.  Note that <var>exp</var> does not necessarily have
the mode <var>mode</var>.
</p></dd></dl>

<dl>
<dt><a name="index-indirect_005foperand"></a>Function: <strong>indirect_operand</strong></dt>
<dd><p>This is a stricter form of <code>memory_operand</code> which allows only
memory references with a <code>general_operand</code> as the address
expression.  New uses of this predicate are discouraged, because
<code>general_operand</code> is very permissive, so it&rsquo;s hard to tell what
an <code>indirect_operand</code> does or does not allow.  If a target has
different requirements for memory operands for different instructions,
it is better to define target-specific predicates which enforce the
hardware&rsquo;s requirements explicitly.
</p></dd></dl>

<dl>
<dt><a name="index-push_005foperand"></a>Function: <strong>push_operand</strong></dt>
<dd><p>This predicate allows a memory reference suitable for pushing a value
onto the stack.  This will be a <code>MEM</code> which refers to
<code>stack_pointer_rtx</code>, with a side-effect in its address expression
(see <a href="#Incdec">Incdec</a>); which one is determined by the
<code>STACK_PUSH_CODE</code> macro (see <a href="#Frame-Layout">Frame Layout</a>).
</p></dd></dl>

<dl>
<dt><a name="index-pop_005foperand"></a>Function: <strong>pop_operand</strong></dt>
<dd><p>This predicate allows a memory reference suitable for popping a value
off the stack.  Again, this will be a <code>MEM</code> referring to
<code>stack_pointer_rtx</code>, with a side-effect in its address
expression.  However, this time <code>STACK_POP_CODE</code> is expected.
</p></dd></dl>

<p>The fourth category of predicates allow some combination of the above
operands.
</p>
<dl>
<dt><a name="index-nonmemory_005foperand"></a>Function: <strong>nonmemory_operand</strong></dt>
<dd><p>This predicate allows any immediate or register operand valid for <var>mode</var>.
</p></dd></dl>

<dl>
<dt><a name="index-nonimmediate_005foperand"></a>Function: <strong>nonimmediate_operand</strong></dt>
<dd><p>This predicate allows any register or memory operand valid for <var>mode</var>.
</p></dd></dl>

<dl>
<dt><a name="index-general_005foperand"></a>Function: <strong>general_operand</strong></dt>
<dd><p>This predicate allows any immediate, register, or memory operand
valid for <var>mode</var>.
</p></dd></dl>

<p>Finally, there are two generic operator predicates.
</p>
<dl>
<dt><a name="index-comparison_005foperator"></a>Function: <strong>comparison_operator</strong></dt>
<dd><p>This predicate matches any expression which performs an arithmetic
comparison in <var>mode</var>; that is, <code>COMPARISON_P</code> is true for the
expression code.
</p></dd></dl>

<dl>
<dt><a name="index-ordered_005fcomparison_005foperator"></a>Function: <strong>ordered_comparison_operator</strong></dt>
<dd><p>This predicate matches any expression which performs an arithmetic
comparison in <var>mode</var> and whose expression code is valid for integer
modes; that is, the expression code will be one of <code>eq</code>, <code>ne</code>,
<code>lt</code>, <code>ltu</code>, <code>le</code>, <code>leu</code>, <code>gt</code>, <code>gtu</code>,
<code>ge</code>, <code>geu</code>.
</p></dd></dl>

<hr>
<a name="Defining-Predicates"></a>
<div class="header">
<p>
Previous: <a href="#Machine_002dIndependent-Predicates" accesskey="p" rel="prev">Machine-Independent Predicates</a>, Up: <a href="#Predicates" accesskey="u" rel="up">Predicates</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-Machine_002dSpecific-Predicates"></a>
<h4 class="subsection">16.7.2 Defining Machine-Specific Predicates</h4>
<a name="index-defining-predicates"></a>
<a name="index-define_005fpredicate"></a>
<a name="index-define_005fspecial_005fpredicate"></a>

<p>Many machines have requirements for their operands that cannot be
expressed precisely using the generic predicates.  You can define
additional predicates using <code>define_predicate</code> and
<code>define_special_predicate</code> expressions.  These expressions have
three operands:
</p>
<ul>
<li> The name of the predicate, as it will be referred to in
<code>match_operand</code> or <code>match_operator</code> expressions.

</li><li> An RTL expression which evaluates to true if the predicate allows the
operand <var>op</var>, false if it does not.  This expression can only use
the following RTL codes:

<dl compact="compact">
<dt><code>MATCH_OPERAND</code></dt>
<dd><p>When written inside a predicate expression, a <code>MATCH_OPERAND</code>
expression evaluates to true if the predicate it names would allow
<var>op</var>.  The operand number and constraint are ignored.  Due to
limitations in <code>genrecog</code>, you can only refer to generic
predicates and predicates that have already been defined.
</p>
</dd>
<dt><code>MATCH_CODE</code></dt>
<dd><p>This expression evaluates to true if <var>op</var> or a specified
subexpression of <var>op</var> has one of a given list of RTX codes.
</p>
<p>The first operand of this expression is a string constant containing a
comma-separated list of RTX code names (in lower case).  These are the
codes for which the <code>MATCH_CODE</code> will be true.
</p>
<p>The second operand is a string constant which indicates what
subexpression of <var>op</var> to examine.  If it is absent or the empty
string, <var>op</var> itself is examined.  Otherwise, the string constant
must be a sequence of digits and/or lowercase letters.  Each character
indicates a subexpression to extract from the current expression; for
the first character this is <var>op</var>, for the second and subsequent
characters it is the result of the previous character.  A digit
<var>n</var> extracts &lsquo;<samp>XEXP&nbsp;(<var>e</var>,&nbsp;<var>n</var>)<!-- /@w --></samp>&rsquo;; a letter <var>l</var>
extracts &lsquo;<samp>XVECEXP&nbsp;(<var>e</var>,&nbsp;0,&nbsp;<var>n</var>)<!-- /@w --></samp>&rsquo; where <var>n</var> is the
alphabetic ordinal of <var>l</var> (0 for &lsquo;a&rsquo;, 1 for &rsquo;b&rsquo;, and so on).  The
<code>MATCH_CODE</code> then examines the RTX code of the subexpression
extracted by the complete string.  It is not possible to extract
components of an <code>rtvec</code> that is not at position 0 within its RTX
object.
</p>
</dd>
<dt><code>MATCH_TEST</code></dt>
<dd><p>This expression has one operand, a string constant containing a C
expression.  The predicate&rsquo;s arguments, <var>op</var> and <var>mode</var>, are
available with those names in the C expression.  The <code>MATCH_TEST</code>
evaluates to true if the C expression evaluates to a nonzero value.
<code>MATCH_TEST</code> expressions must not have side effects.
</p>
</dd>
<dt><code>AND</code></dt>
<dt><code>IOR</code></dt>
<dt><code>NOT</code></dt>
<dt><code>IF_THEN_ELSE</code></dt>
<dd><p>The basic &lsquo;<samp>MATCH_</samp>&rsquo; expressions can be combined using these
logical operators, which have the semantics of the C operators
&lsquo;<samp>&amp;&amp;</samp>&rsquo;, &lsquo;<samp>||</samp>&rsquo;, &lsquo;<samp>!</samp>&rsquo;, and &lsquo;<samp>?&nbsp;:<!-- /@w --></samp>&rsquo; respectively.  As
in Common Lisp, you may give an <code>AND</code> or <code>IOR</code> expression an
arbitrary number of arguments; this has exactly the same effect as
writing a chain of two-argument <code>AND</code> or <code>IOR</code> expressions.
</p></dd>
</dl>

</li><li> An optional block of C code, which should execute
&lsquo;<samp>return&nbsp;true<!-- /@w --></samp>&rsquo; if the predicate is found to match and
&lsquo;<samp>return&nbsp;false<!-- /@w --></samp>&rsquo; if it does not.  It must not have any side
effects.  The predicate arguments, <var>op</var> and <var>mode</var>, are
available with those names.

<p>If a code block is present in a predicate definition, then the RTL
expression must evaluate to true <em>and</em> the code block must
execute &lsquo;<samp>return&nbsp;true<!-- /@w --></samp>&rsquo; for the predicate to allow the operand.
The RTL expression is evaluated first; do not re-check anything in the
code block that was checked in the RTL expression.
</p></li></ul>

<p>The program <code>genrecog</code> scans <code>define_predicate</code> and
<code>define_special_predicate</code> expressions to determine which RTX
codes are possibly allowed.  You should always make this explicit in
the RTL predicate expression, using <code>MATCH_OPERAND</code> and
<code>MATCH_CODE</code>.
</p>
<p>Here is an example of a simple predicate definition, from the IA64
machine description:
</p>
<div class="smallexample">
<pre class="smallexample">;; <span class="roman">True if <var>op</var> is a <code>SYMBOL_REF</code> which refers to the sdata section.</span>
(define_predicate &quot;small_addr_symbolic_operand&quot;
  (and (match_code &quot;symbol_ref&quot;)
       (match_test &quot;SYMBOL_REF_SMALL_ADDR_P (op)&quot;)))
</pre></div>

<p>And here is another, showing the use of the C block.
</p>
<div class="smallexample">
<pre class="smallexample">;; <span class="roman">True if <var>op</var> is a register operand that is (or could be) a GR reg.</span>
(define_predicate &quot;gr_register_operand&quot;
  (match_operand 0 &quot;register_operand&quot;)
{
  unsigned int regno;
  if (GET_CODE (op) == SUBREG)
    op = SUBREG_REG (op);

  regno = REGNO (op);
  return (regno &gt;= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno));
})
</pre></div>

<p>Predicates written with <code>define_predicate</code> automatically include
a test that <var>mode</var> is <code>VOIDmode</code>, or <var>op</var> has the same
mode as <var>mode</var>, or <var>op</var> is a <code>CONST_INT</code> or
<code>CONST_DOUBLE</code>.  They do <em>not</em> check specifically for
integer <code>CONST_DOUBLE</code>, nor do they test that the value of either
kind of constant fits in the requested mode.  This is because
target-specific predicates that take constants usually have to do more
stringent value checks anyway.  If you need the exact same treatment
of <code>CONST_INT</code> or <code>CONST_DOUBLE</code> that the generic predicates
provide, use a <code>MATCH_OPERAND</code> subexpression to call
<code>const_int_operand</code>, <code>const_double_operand</code>, or
<code>immediate_operand</code>.
</p>
<p>Predicates written with <code>define_special_predicate</code> do not get any
automatic mode checks, and are treated as having special mode handling
by <code>genrecog</code>.
</p>
<p>The program <code>genpreds</code> is responsible for generating code to
test predicates.  It also writes a header file containing function
declarations for all machine-specific predicates.  It is not necessary
to declare these predicates in <samp><var>cpu</var>-protos.h</samp>.
</p>
<hr>
<a name="Constraints"></a>
<div class="header">
<p>
Next: <a href="#Standard-Names" accesskey="n" rel="next">Standard Names</a>, Previous: <a href="#Predicates" accesskey="p" rel="prev">Predicates</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Operand-Constraints"></a>
<h3 class="section">16.8 Operand Constraints</h3>
<a name="index-operand-constraints"></a>
<a name="index-constraints"></a>

<p>Each <code>match_operand</code> in an instruction pattern can specify
constraints for the operands allowed.  The constraints allow you to
fine-tune matching within the set of operands allowed by the
predicate.
</p>
<p>Constraints can say whether
an operand may be in a register, and which kinds of register; whether the
operand can be a memory reference, and which kinds of address; whether the
operand may be an immediate constant, and which possible values it may
have.  Constraints can also require two operands to match.
Side-effects aren&rsquo;t allowed in operands of inline <code>asm</code>, unless
&lsquo;<samp>&lt;</samp>&rsquo; or &lsquo;<samp>&gt;</samp>&rsquo; constraints are used, because there is no guarantee
that the side-effects will happen exactly once in an instruction that can update
the addressing register.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Simple-Constraints" accesskey="1">Simple Constraints</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Basic use of constraints.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Multi_002dAlternative" accesskey="2">Multi-Alternative</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">When an insn has two alternative constraint-patterns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Class-Preferences" accesskey="3">Class Preferences</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Constraints guide which hard register to put things in.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Modifiers" accesskey="4">Modifiers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">More precise control over effects of constraints.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Machine-Constraints" accesskey="5">Machine Constraints</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Existing constraints for some particular machines.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Disable-Insn-Alternatives" accesskey="6">Disable Insn Alternatives</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Disable insn alternatives using the <code>enabled</code> attribute.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Define-Constraints" accesskey="7">Define Constraints</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to define machine-specific constraints.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#C-Constraint-Interface" accesskey="8">C Constraint Interface</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to test constraints from C code.
</td></tr>
</table>


<hr>
<a name="Simple-Constraints"></a>
<div class="header">
<p>
Next: <a href="#Multi_002dAlternative" accesskey="n" rel="next">Multi-Alternative</a>, Up: <a href="#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Simple-Constraints-1"></a>
<h4 class="subsection">16.8.1 Simple Constraints</h4>
<a name="index-simple-constraints"></a>

<p>The simplest kind of constraint is a string full of letters, each of
which describes one kind of operand that is permitted.  Here are
the letters that are allowed:
</p>
<dl compact="compact">
<dt>whitespace</dt>
<dd><p>Whitespace characters are ignored and can be inserted at any position
except the first.  This enables each alternative for different operands to
be visually aligned in the machine description even if they have different
number of constraints and modifiers.
</p>
<a name="index-m-in-constraint"></a>
<a name="index-memory-references-in-constraints"></a>
</dd>
<dt>&lsquo;<samp>m</samp>&rsquo;</dt>
<dd><p>A memory operand is allowed, with any kind of address that the machine
supports in general.
Note that the letter used for the general memory constraint can be
re-defined by a back end using the <code>TARGET_MEM_CONSTRAINT</code> macro.
</p>
<a name="index-offsettable-address"></a>
<a name="index-o-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>o</samp>&rsquo;</dt>
<dd><p>A memory operand is allowed, but only if the address is
<em>offsettable</em>.  This means that adding a small integer (actually,
the width in bytes of the operand, as determined by its machine mode)
may be added to the address and the result is also a valid memory
address.
</p>
<a name="index-autoincrement_002fdecrement-addressing"></a>
<p>For example, an address which is constant is offsettable; so is an
address that is the sum of a register and a constant (as long as a
slightly larger constant is also within the range of address-offsets
supported by the machine); but an autoincrement or autodecrement
address is not offsettable.  More complicated indirect/indexed
addresses may or may not be offsettable depending on the other
addressing modes that the machine supports.
</p>
<p>Note that in an output operand which can be matched by another
operand, the constraint letter &lsquo;<samp>o</samp>&rsquo; is valid only when accompanied
by both &lsquo;<samp>&lt;</samp>&rsquo; (if the target machine has predecrement addressing)
and &lsquo;<samp>&gt;</samp>&rsquo; (if the target machine has preincrement addressing).
</p>
<a name="index-V-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>V</samp>&rsquo;</dt>
<dd><p>A memory operand that is not offsettable.  In other words, anything that
would fit the &lsquo;<samp>m</samp>&rsquo; constraint but not the &lsquo;<samp>o</samp>&rsquo; constraint.
</p>
<a name="index-_003c-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>&lt;</samp>&rsquo;</dt>
<dd><p>A memory operand with autodecrement addressing (either predecrement or
postdecrement) is allowed.  In inline <code>asm</code> this constraint is only
allowed if the operand is used exactly once in an instruction that can
handle the side-effects.  Not using an operand with &lsquo;<samp>&lt;</samp>&rsquo; in constraint
string in the inline <code>asm</code> pattern at all or using it in multiple
instructions isn&rsquo;t valid, because the side-effects wouldn&rsquo;t be performed
or would be performed more than once.  Furthermore, on some targets
the operand with &lsquo;<samp>&lt;</samp>&rsquo; in constraint string must be accompanied by
special instruction suffixes like <code>%U0</code> instruction suffix on PowerPC
or <code>%P0</code> on IA-64.
</p>
<a name="index-_003e-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>&gt;</samp>&rsquo;</dt>
<dd><p>A memory operand with autoincrement addressing (either preincrement or
postincrement) is allowed.  In inline <code>asm</code> the same restrictions
as for &lsquo;<samp>&lt;</samp>&rsquo; apply.
</p>
<a name="index-r-in-constraint"></a>
<a name="index-registers-in-constraints"></a>
</dd>
<dt>&lsquo;<samp>r</samp>&rsquo;</dt>
<dd><p>A register operand is allowed provided that it is in a general
register.
</p>
<a name="index-constants-in-constraints"></a>
<a name="index-i-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>i</samp>&rsquo;</dt>
<dd><p>An immediate integer operand (one with constant value) is allowed.
This includes symbolic constants whose values will be known only at
assembly time or later.
</p>
<a name="index-n-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>n</samp>&rsquo;</dt>
<dd><p>An immediate integer operand with a known numeric value is allowed.
Many systems cannot support assembly-time constants for operands less
than a word wide.  Constraints for these operands should use &lsquo;<samp>n</samp>&rsquo;
rather than &lsquo;<samp>i</samp>&rsquo;.
</p>
<a name="index-I-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>I</samp>&rsquo;, &lsquo;<samp>J</samp>&rsquo;, &lsquo;<samp>K</samp>&rsquo;, &hellip; &lsquo;<samp>P</samp>&rsquo;</dt>
<dd><p>Other letters in the range &lsquo;<samp>I</samp>&rsquo; through &lsquo;<samp>P</samp>&rsquo; may be defined in
a machine-dependent fashion to permit immediate integer operands with
explicit integer values in specified ranges.  For example, on the
68000, &lsquo;<samp>I</samp>&rsquo; is defined to stand for the range of values 1 to 8.
This is the range permitted as a shift count in the shift
instructions.
</p>
<a name="index-E-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>E</samp>&rsquo;</dt>
<dd><p>An immediate floating operand (expression code <code>const_double</code>) is
allowed, but only if the target floating point format is the same as
that of the host machine (on which the compiler is running).
</p>
<a name="index-F-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>F</samp>&rsquo;</dt>
<dd><p>An immediate floating operand (expression code <code>const_double</code> or
<code>const_vector</code>) is allowed.
</p>
<a name="index-G-in-constraint"></a>
<a name="index-H-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>G</samp>&rsquo;, &lsquo;<samp>H</samp>&rsquo;</dt>
<dd><p>&lsquo;<samp>G</samp>&rsquo; and &lsquo;<samp>H</samp>&rsquo; may be defined in a machine-dependent fashion to
permit immediate floating operands in particular ranges of values.
</p>
<a name="index-s-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>s</samp>&rsquo;</dt>
<dd><p>An immediate integer operand whose value is not an explicit integer is
allowed.
</p>
<p>This might appear strange; if an insn allows a constant operand with a
value not known at compile time, it certainly must allow any known
value.  So why use &lsquo;<samp>s</samp>&rsquo; instead of &lsquo;<samp>i</samp>&rsquo;?  Sometimes it allows
better code to be generated.
</p>
<p>For example, on the 68000 in a fullword instruction it is possible to
use an immediate operand; but if the immediate value is between -128
and 127, better code results from loading the value into a register and
using the register.  This is because the load into the register can be
done with a &lsquo;<samp>moveq</samp>&rsquo; instruction.  We arrange for this to happen
by defining the letter &lsquo;<samp>K</samp>&rsquo; to mean &ldquo;any integer outside the
range -128 to 127&rdquo;, and then specifying &lsquo;<samp>Ks</samp>&rsquo; in the operand
constraints.
</p>
<a name="index-g-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>g</samp>&rsquo;</dt>
<dd><p>Any register, memory or immediate integer operand is allowed, except for
registers that are not general registers.
</p>
<a name="index-X-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>X</samp>&rsquo;</dt>
<dd><p>Any operand whatsoever is allowed, even if it does not satisfy
<code>general_operand</code>.  This is normally used in the constraint of
a <code>match_scratch</code> when certain alternatives will not actually
require a scratch register.
</p>
<a name="index-0-in-constraint"></a>
<a name="index-digits-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>0</samp>&rsquo;, &lsquo;<samp>1</samp>&rsquo;, &lsquo;<samp>2</samp>&rsquo;, &hellip; &lsquo;<samp>9</samp>&rsquo;</dt>
<dd><p>An operand that matches the specified operand number is allowed.  If a
digit is used together with letters within the same alternative, the
digit should come last.
</p>
<p>This number is allowed to be more than a single digit.  If multiple
digits are encountered consecutively, they are interpreted as a single
decimal integer.  There is scant chance for ambiguity, since to-date
it has never been desirable that &lsquo;<samp>10</samp>&rsquo; be interpreted as matching
either operand 1 <em>or</em> operand 0.  Should this be desired, one
can use multiple alternatives instead.
</p>
<a name="index-matching-constraint"></a>
<a name="index-constraint_002c-matching"></a>
<p>This is called a <em>matching constraint</em> and what it really means is
that the assembler has only a single operand that fills two roles
considered separate in the RTL insn.  For example, an add insn has two
input operands and one output operand in the RTL, but on most CISC
machines an add instruction really has only two operands, one of them an
input-output operand:
</p>
<div class="smallexample">
<pre class="smallexample">addl #35,r12
</pre></div>

<p>Matching constraints are used in these circumstances.
More precisely, the two operands that match must include one input-only
operand and one output-only operand.  Moreover, the digit must be a
smaller number than the number of the operand that uses it in the
constraint.
</p>
<p>For operands to match in a particular case usually means that they
are identical-looking RTL expressions.  But in a few special cases
specific kinds of dissimilarity are allowed.  For example, <code>*x</code>
as an input operand will match <code>*x++</code> as an output operand.
For proper results in such cases, the output template should always
use the output-operand&rsquo;s number when printing the operand.
</p>
<a name="index-load-address-instruction"></a>
<a name="index-push-address-instruction"></a>
<a name="index-address-constraints"></a>
<a name="index-p-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>p</samp>&rsquo;</dt>
<dd><p>An operand that is a valid memory address is allowed.  This is
for &ldquo;load address&rdquo; and &ldquo;push address&rdquo; instructions.
</p>
<a name="index-address_005foperand-1"></a>
<p>&lsquo;<samp>p</samp>&rsquo; in the constraint must be accompanied by <code>address_operand</code>
as the predicate in the <code>match_operand</code>.  This predicate interprets
the mode specified in the <code>match_operand</code> as the mode of the memory
reference for which the address would be valid.
</p>
<a name="index-other-register-constraints"></a>
<a name="index-extensible-constraints"></a>
</dd>
<dt><var>other-letters</var></dt>
<dd><p>Other letters can be defined in machine-dependent fashion to stand for
particular classes of registers or other arbitrary operand types.
&lsquo;<samp>d</samp>&rsquo;, &lsquo;<samp>a</samp>&rsquo; and &lsquo;<samp>f</samp>&rsquo; are defined on the 68000/68020 to stand
for data, address and floating point registers.
</p></dd>
</dl>

<p>In order to have valid assembler code, each operand must satisfy
its constraint.  But a failure to do so does not prevent the pattern
from applying to an insn.  Instead, it directs the compiler to modify
the code so that the constraint will be satisfied.  Usually this is
done by copying an operand into a register.
</p>
<p>Contrast, therefore, the two instruction patterns that follow:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=r&quot;)
        (plus:SI (match_dup 0)
                 (match_operand:SI 1 &quot;general_operand&quot; &quot;r&quot;)))]
  &quot;&quot;
  &quot;&hellip;&quot;)
</pre></div>

<p>which has two operands, one of which must appear in two places, and
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=r&quot;)
        (plus:SI (match_operand:SI 1 &quot;general_operand&quot; &quot;0&quot;)
                 (match_operand:SI 2 &quot;general_operand&quot; &quot;r&quot;)))]
  &quot;&quot;
  &quot;&hellip;&quot;)
</pre></div>

<p>which has three operands, two of which are required by a constraint to be
identical.  If we are considering an insn of the form
</p>
<div class="smallexample">
<pre class="smallexample">(insn <var>n</var> <var>prev</var> <var>next</var>
  (set (reg:SI 3)
       (plus:SI (reg:SI 6) (reg:SI 109)))
  &hellip;)
</pre></div>

<p>the first pattern would not apply at all, because this insn does not
contain two identical subexpressions in the right place.  The pattern would
say, &ldquo;That does not look like an add instruction; try other patterns&rdquo;.
The second pattern would say, &ldquo;Yes, that&rsquo;s an add instruction, but there
is something wrong with it&rdquo;.  It would direct the reload pass of the
compiler to generate additional insns to make the constraint true.  The
results might look like this:
</p>
<div class="smallexample">
<pre class="smallexample">(insn <var>n2</var> <var>prev</var> <var>n</var>
  (set (reg:SI 3) (reg:SI 6))
  &hellip;)

(insn <var>n</var> <var>n2</var> <var>next</var>
  (set (reg:SI 3)
       (plus:SI (reg:SI 3) (reg:SI 109)))
  &hellip;)
</pre></div>

<p>It is up to you to make sure that each operand, in each pattern, has
constraints that can handle any RTL expression that could be present for
that operand.  (When multiple alternatives are in use, each pattern must,
for each possible combination of operand expressions, have at least one
alternative which can handle that combination of operands.)  The
constraints don&rsquo;t need to <em>allow</em> any possible operand&mdash;when this is
the case, they do not constrain&mdash;but they must at least point the way to
reloading any possible operand so that it will fit.
</p>
<ul>
<li> If the constraint accepts whatever operands the predicate permits,
there is no problem: reloading is never necessary for this operand.

<p>For example, an operand whose constraints permit everything except
registers is safe provided its predicate rejects registers.
</p>
<p>An operand whose predicate accepts only constant values is safe
provided its constraints include the letter &lsquo;<samp>i</samp>&rsquo;.  If any possible
constant value is accepted, then nothing less than &lsquo;<samp>i</samp>&rsquo; will do;
if the predicate is more selective, then the constraints may also be
more selective.
</p>
</li><li> Any operand expression can be reloaded by copying it into a register.
So if an operand&rsquo;s constraints allow some kind of register, it is
certain to be safe.  It need not permit all classes of registers; the
compiler knows how to copy a register into another register of the
proper class in order to make an instruction valid.

</li><li> <a name="index-nonoffsettable-memory-reference"></a>
<a name="index-memory-reference_002c-nonoffsettable"></a>
A nonoffsettable memory reference can be reloaded by copying the
address into a register.  So if the constraint uses the letter
&lsquo;<samp>o</samp>&rsquo;, all memory references are taken care of.

</li><li> A constant operand can be reloaded by allocating space in memory to
hold it as preinitialized data.  Then the memory reference can be used
in place of the constant.  So if the constraint uses the letters
&lsquo;<samp>o</samp>&rsquo; or &lsquo;<samp>m</samp>&rsquo;, constant operands are not a problem.

</li><li> If the constraint permits a constant and a pseudo register used in an insn
was not allocated to a hard register and is equivalent to a constant,
the register will be replaced with the constant.  If the predicate does
not permit a constant and the insn is re-recognized for some reason, the
compiler will crash.  Thus the predicate must always recognize any
objects allowed by the constraint.
</li></ul>

<p>If the operand&rsquo;s predicate can recognize registers, but the constraint does
not permit them, it can make the compiler crash.  When this operand happens
to be a register, the reload pass will be stymied, because it does not know
how to copy a register temporarily into memory.
</p>
<p>If the predicate accepts a unary operator, the constraint applies to the
operand.  For example, the MIPS processor at ISA level 3 supports an
instruction which adds two registers in <code>SImode</code> to produce a
<code>DImode</code> result, but only if the registers are correctly sign
extended.  This predicate for the input operands accepts a
<code>sign_extend</code> of an <code>SImode</code> register.  Write the constraint
to indicate the type of register that is required for the operand of the
<code>sign_extend</code>.
</p>
<hr>
<a name="Multi_002dAlternative"></a>
<div class="header">
<p>
Next: <a href="#Class-Preferences" accesskey="n" rel="next">Class Preferences</a>, Previous: <a href="#Simple-Constraints" accesskey="p" rel="prev">Simple Constraints</a>, Up: <a href="#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Multiple-Alternative-Constraints"></a>
<h4 class="subsection">16.8.2 Multiple Alternative Constraints</h4>
<a name="index-multiple-alternative-constraints"></a>

<p>Sometimes a single instruction has multiple alternative sets of possible
operands.  For example, on the 68000, a logical-or instruction can combine
register or an immediate value into memory, or it can combine any kind of
operand into a register; but it cannot combine one memory location into
another.
</p>
<p>These constraints are represented as multiple alternatives.  An alternative
can be described by a series of letters for each operand.  The overall
constraint for an operand is made from the letters for this operand
from the first alternative, a comma, the letters for this operand from
the second alternative, a comma, and so on until the last alternative.
Here is how it is done for fullword logical-or on the 68000:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;iorsi3&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=m,d&quot;)
        (ior:SI (match_operand:SI 1 &quot;general_operand&quot; &quot;%0,0&quot;)
                (match_operand:SI 2 &quot;general_operand&quot; &quot;dKs,dmKs&quot;)))]
  &hellip;)
</pre></div>

<p>The first alternative has &lsquo;<samp>m</samp>&rsquo; (memory) for operand 0, &lsquo;<samp>0</samp>&rsquo; for
operand 1 (meaning it must match operand 0), and &lsquo;<samp>dKs</samp>&rsquo; for operand
2.  The second alternative has &lsquo;<samp>d</samp>&rsquo; (data register) for operand 0,
&lsquo;<samp>0</samp>&rsquo; for operand 1, and &lsquo;<samp>dmKs</samp>&rsquo; for operand 2.  The &lsquo;<samp>=</samp>&rsquo; and
&lsquo;<samp>%</samp>&rsquo; in the constraints apply to all the alternatives; their
meaning is explained in the next section (see <a href="#Class-Preferences">Class Preferences</a>).
</p>
<p>If all the operands fit any one alternative, the instruction is valid.
Otherwise, for each alternative, the compiler counts how many instructions
must be added to copy the operands so that that alternative applies.
The alternative requiring the least copying is chosen.  If two alternatives
need the same amount of copying, the one that comes first is chosen.
These choices can be altered with the &lsquo;<samp>?</samp>&rsquo; and &lsquo;<samp>!</samp>&rsquo; characters:
</p>
<dl compact="compact">
<dd><a name="index-_003f-in-constraint"></a>
<a name="index-question-mark"></a>
</dd>
<dt><code>?</code></dt>
<dd><p>Disparage slightly the alternative that the &lsquo;<samp>?</samp>&rsquo; appears in,
as a choice when no alternative applies exactly.  The compiler regards
this alternative as one unit more costly for each &lsquo;<samp>?</samp>&rsquo; that appears
in it.
</p>
<a name="index-_0021-in-constraint"></a>
<a name="index-exclamation-point"></a>
</dd>
<dt><code>!</code></dt>
<dd><p>Disparage severely the alternative that the &lsquo;<samp>!</samp>&rsquo; appears in.
This alternative can still be used if it fits without reloading,
but if reloading is needed, some other alternative will be used.
</p></dd>
</dl>

<p>When an insn pattern has multiple alternatives in its constraints, often
the appearance of the assembler code is determined mostly by which
alternative was matched.  When this is so, the C code for writing the
assembler code can use the variable <code>which_alternative</code>, which is
the ordinal number of the alternative that was actually satisfied (0 for
the first, 1 for the second alternative, etc.).  See <a href="#Output-Statement">Output Statement</a>.
</p>
<hr>
<a name="Class-Preferences"></a>
<div class="header">
<p>
Next: <a href="#Modifiers" accesskey="n" rel="next">Modifiers</a>, Previous: <a href="#Multi_002dAlternative" accesskey="p" rel="prev">Multi-Alternative</a>, Up: <a href="#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Register-Class-Preferences"></a>
<h4 class="subsection">16.8.3 Register Class Preferences</h4>
<a name="index-class-preference-constraints"></a>
<a name="index-register-class-preference-constraints"></a>

<a name="index-voting-between-constraint-alternatives"></a>
<p>The operand constraints have another function: they enable the compiler
to decide which kind of hardware register a pseudo register is best
allocated to.  The compiler examines the constraints that apply to the
insns that use the pseudo register, looking for the machine-dependent
letters such as &lsquo;<samp>d</samp>&rsquo; and &lsquo;<samp>a</samp>&rsquo; that specify classes of registers.
The pseudo register is put in whichever class gets the most &ldquo;votes&rdquo;.
The constraint letters &lsquo;<samp>g</samp>&rsquo; and &lsquo;<samp>r</samp>&rsquo; also vote: they vote in
favor of a general register.  The machine description says which registers
are considered general.
</p>
<p>Of course, on some machines all registers are equivalent, and no register
classes are defined.  Then none of this complexity is relevant.
</p>
<hr>
<a name="Modifiers"></a>
<div class="header">
<p>
Next: <a href="#Machine-Constraints" accesskey="n" rel="next">Machine Constraints</a>, Previous: <a href="#Class-Preferences" accesskey="p" rel="prev">Class Preferences</a>, Up: <a href="#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Constraint-Modifier-Characters"></a>
<h4 class="subsection">16.8.4 Constraint Modifier Characters</h4>
<a name="index-modifiers-in-constraints"></a>
<a name="index-constraint-modifier-characters"></a>

<p>Here are constraint modifier characters.
</p>
<dl compact="compact">
<dd><a name="index-_003d-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>=</samp>&rsquo;</dt>
<dd><p>Means that this operand is write-only for this instruction: the previous
value is discarded and replaced by output data.
</p>
<a name="index-_002b-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>+</samp>&rsquo;</dt>
<dd><p>Means that this operand is both read and written by the instruction.
</p>
<p>When the compiler fixes up the operands to satisfy the constraints,
it needs to know which operands are inputs to the instruction and
which are outputs from it.  &lsquo;<samp>=</samp>&rsquo; identifies an output; &lsquo;<samp>+</samp>&rsquo;
identifies an operand that is both input and output; all other operands
are assumed to be input only.
</p>
<p>If you specify &lsquo;<samp>=</samp>&rsquo; or &lsquo;<samp>+</samp>&rsquo; in a constraint, you put it in the
first character of the constraint string.
</p>
<a name="index-_0026-in-constraint"></a>
<a name="index-earlyclobber-operand"></a>
</dd>
<dt>&lsquo;<samp>&amp;</samp>&rsquo;</dt>
<dd><p>Means (in a particular alternative) that this operand is an
<em>earlyclobber</em> operand, which is modified before the instruction is
finished using the input operands.  Therefore, this operand may not lie
in a register that is used as an input operand or as part of any memory
address.
</p>
<p>&lsquo;<samp>&amp;</samp>&rsquo; applies only to the alternative in which it is written.  In
constraints with multiple alternatives, sometimes one alternative
requires &lsquo;<samp>&amp;</samp>&rsquo; while others do not.  See, for example, the
&lsquo;<samp>movdf</samp>&rsquo; insn of the 68000.
</p>
<p>An input operand can be tied to an earlyclobber operand if its only
use as an input occurs before the early result is written.  Adding
alternatives of this form often allows GCC to produce better code
when only some of the inputs can be affected by the earlyclobber.
See, for example, the &lsquo;<samp>mulsi3</samp>&rsquo; insn of the ARM.
</p>
<p>&lsquo;<samp>&amp;</samp>&rsquo; does not obviate the need to write &lsquo;<samp>=</samp>&rsquo;.
</p>
<a name="index-_0025-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>%</samp>&rsquo;</dt>
<dd><p>Declares the instruction to be commutative for this operand and the
following operand.  This means that the compiler may interchange the
two operands if that is the cheapest way to make all operands fit the
constraints.
This is often used in patterns for addition instructions
that really have only two operands: the result must go in one of the
arguments.  Here for example, is how the 68000 halfword-add
instruction is defined:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;addhi3&quot;
  [(set (match_operand:HI 0 &quot;general_operand&quot; &quot;=m,r&quot;)
     (plus:HI (match_operand:HI 1 &quot;general_operand&quot; &quot;%0,0&quot;)
              (match_operand:HI 2 &quot;general_operand&quot; &quot;di,g&quot;)))]
  &hellip;)
</pre></div>
<p>GCC can only handle one commutative pair in an asm; if you use more,
the compiler may fail.  Note that you need not use the modifier if
the two alternatives are strictly identical; this would only waste
time in the reload pass.  The modifier is not operational after
register allocation, so the result of <code>define_peephole2</code>
and <code>define_split</code>s performed after reload cannot rely on
&lsquo;<samp>%</samp>&rsquo; to make the intended insn match.
</p>
<a name="index-_0023-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>#</samp>&rsquo;</dt>
<dd><p>Says that all following characters, up to the next comma, are to be
ignored as a constraint.  They are significant only for choosing
register preferences.
</p>
<a name="index-_002a-in-constraint"></a>
</dd>
<dt>&lsquo;<samp>*</samp>&rsquo;</dt>
<dd><p>Says that the following character should be ignored when choosing
register preferences.  &lsquo;<samp>*</samp>&rsquo; has no effect on the meaning of the
constraint as a constraint, and no effect on reloading.  For LRA
&lsquo;<samp>*</samp>&rsquo; additionally disparages slightly the alternative if the
following character matches the operand.
</p>
<p>Here is an example: the 68000 has an instruction to sign-extend a
halfword in a data register, and can also sign-extend a value by
copying it into an address register.  While either kind of register is
acceptable, the constraints on an address-register destination are
less strict, so it is best if register allocation makes an address
register its goal.  Therefore, &lsquo;<samp>*</samp>&rsquo; is used so that the &lsquo;<samp>d</samp>&rsquo;
constraint letter (for data register) is ignored when computing
register preferences.
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;extendhisi2&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=*d,a&quot;)
        (sign_extend:SI
         (match_operand:HI 1 &quot;general_operand&quot; &quot;0,g&quot;)))]
  &hellip;)
</pre></div>
</dd>
</dl>

<hr>
<a name="Machine-Constraints"></a>
<div class="header">
<p>
Next: <a href="#Disable-Insn-Alternatives" accesskey="n" rel="next">Disable Insn Alternatives</a>, Previous: <a href="#Modifiers" accesskey="p" rel="prev">Modifiers</a>, Up: <a href="#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Constraints-for-Particular-Machines"></a>
<h4 class="subsection">16.8.5 Constraints for Particular Machines</h4>
<a name="index-machine-specific-constraints"></a>
<a name="index-constraints_002c-machine-specific"></a>

<p>Whenever possible, you should use the general-purpose constraint letters
in <code>asm</code> arguments, since they will convey meaning more readily to
people reading your code.  Failing that, use the constraint letters
that usually have very similar meanings across architectures.  The most
commonly used constraints are &lsquo;<samp>m</samp>&rsquo; and &lsquo;<samp>r</samp>&rsquo; (for memory and
general-purpose registers respectively; see <a href="#Simple-Constraints">Simple Constraints</a>), and
&lsquo;<samp>I</samp>&rsquo;, usually the letter indicating the most common
immediate-constant format.
</p>
<p>Each architecture defines additional constraints.  These constraints
are used by the compiler itself for instruction generation, as well as
for <code>asm</code> statements; therefore, some of the constraints are not
particularly useful for <code>asm</code>.  Here is a summary of some of the
machine-dependent constraints available on some particular machines;
it includes both constraints that are useful for <code>asm</code> and
constraints that aren&rsquo;t.  The compiler source file mentioned in the
table heading for each architecture is the definitive reference for
the meanings of that architecture&rsquo;s constraints.
</p>
<dl compact="compact">
<dt><em>AArch64 family&mdash;<samp>config/aarch64/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>k</code></dt>
<dd><p>The stack pointer register (<code>SP</code>)
</p>
</dd>
<dt><code>w</code></dt>
<dd><p>Floating point or SIMD vector register
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Integer constant that is valid as an immediate operand in an <code>ADD</code>
instruction
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Integer constant that is valid as an immediate operand in a <code>SUB</code>
instruction (once negated)
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Integer constant that can be used with a 32-bit logical instruction
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Integer constant that can be used with a 64-bit logical instruction
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Integer constant that is valid as an immediate operand in a 32-bit <code>MOV</code>
pseudo instruction. The <code>MOV</code> may be assembled to one of several different
machine instructions depending on the value
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Integer constant that is valid as an immediate operand in a 64-bit <code>MOV</code>
pseudo instruction
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>An absolute symbolic address or a label reference
</p>
</dd>
<dt><code>Y</code></dt>
<dd><p>Floating point constant zero
</p>
</dd>
<dt><code>Z</code></dt>
<dd><p>Integer constant zero
</p>
</dd>
<dt><code>Usa</code></dt>
<dd><p>An absolute symbolic address
</p>
</dd>
<dt><code>Ush</code></dt>
<dd><p>The high part (bits 12 and upwards) of the pc-relative address of a symbol
within 4GB of the instruction
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>A memory address which uses a single base register with no offset
</p>
</dd>
<dt><code>Ump</code></dt>
<dd><p>A memory address suitable for a load/store pair instruction in SI, DI, SF and
DF modes
</p>
</dd>
</dl>


</dd>
<dt><em>ARM family&mdash;<samp>config/arm/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>w</code></dt>
<dd><p>VFP floating-point register
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>The floating-point constant 0.0
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Integer that is valid as an immediate operand in a data processing
instruction.  That is, an integer in the range 0 to 255 rotated by a
multiple of 2
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Integer in the range -4095 to 4095
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Integer that satisfies constraint &lsquo;<samp>I</samp>&rsquo; when inverted (ones complement)
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Integer that satisfies constraint &lsquo;<samp>I</samp>&rsquo; when negated (twos complement)
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Integer in the range 0 to 32
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>A memory reference where the exact address is in a single register
(&lsquo;&lsquo;<samp>m</samp>&rsquo;&rsquo; is preferable for <code>asm</code> statements)
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>An item in the constant pool
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>A symbol in the text segment of the current file
</p>
</dd>
<dt><code>Uv</code></dt>
<dd><p>A memory reference suitable for VFP load/store insns (reg+constant offset)
</p>
</dd>
<dt><code>Uy</code></dt>
<dd><p>A memory reference suitable for iWMMXt load/store instructions.
</p>
</dd>
<dt><code>Uq</code></dt>
<dd><p>A memory reference suitable for the ARMv4 ldrsb instruction.
</p></dd>
</dl>

</dd>
<dt><em>AVR family&mdash;<samp>config/avr/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>l</code></dt>
<dd><p>Registers from r0 to r15
</p>
</dd>
<dt><code>a</code></dt>
<dd><p>Registers from r16 to r23
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Registers from r16 to r31
</p>
</dd>
<dt><code>w</code></dt>
<dd><p>Registers from r24 to r31.  These registers can be used in &lsquo;<samp>adiw</samp>&rsquo; command
</p>
</dd>
<dt><code>e</code></dt>
<dd><p>Pointer register (r26&ndash;r31)
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>Base pointer register (r28&ndash;r31)
</p>
</dd>
<dt><code>q</code></dt>
<dd><p>Stack pointer register (SPH:SPL)
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>Temporary register r0
</p>
</dd>
<dt><code>x</code></dt>
<dd><p>Register pair X (r27:r26)
</p>
</dd>
<dt><code>y</code></dt>
<dd><p>Register pair Y (r29:r28)
</p>
</dd>
<dt><code>z</code></dt>
<dd><p>Register pair Z (r31:r30)
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Constant greater than -1, less than 64
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Constant greater than -64, less than 1
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Constant integer 2
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Constant integer 0
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Constant that fits in 8 bits
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Constant integer -1
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>Constant integer 8, 16, or 24
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>Constant integer 1
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>A floating point constant 0.0
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>A memory address based on Y or Z pointer with displacement.
</p></dd>
</dl>

</dd>
<dt><em>Epiphany&mdash;<samp>config/epiphany/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>U16</code></dt>
<dd><p>An unsigned 16-bit constant.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>An unsigned 5-bit constant.
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>A signed 11-bit constant.
</p>
</dd>
<dt><code>Cm1</code></dt>
<dd><p>A signed 11-bit constant added to -1.
Can only match when the <samp>-m1reg-<var>reg</var></samp> option is active.
</p>
</dd>
<dt><code>Cl1</code></dt>
<dd><p>Left-shift of -1, i.e., a bit mask with a block of leading ones, the rest
being a block of trailing zeroes.
Can only match when the <samp>-m1reg-<var>reg</var></samp> option is active.
</p>
</dd>
<dt><code>Cr1</code></dt>
<dd><p>Right-shift of -1, i.e., a bit mask with a trailing block of ones, the
rest being zeroes.  Or to put it another way, one less than a power of two.
Can only match when the <samp>-m1reg-<var>reg</var></samp> option is active.
</p>
</dd>
<dt><code>Cal</code></dt>
<dd><p>Constant for arithmetic/logical operations.
This is like <code>i</code>, except that for position independent code,
no symbols / expressions needing relocations are allowed.
</p>
</dd>
<dt><code>Csy</code></dt>
<dd><p>Symbolic constant for call/jump instruction.
</p>
</dd>
<dt><code>Rcs</code></dt>
<dd><p>The register class usable in short insns.  This is a register class
constraint, and can thus drive register allocation.
This constraint won&rsquo;t match unless <samp>-mprefer-short-insn-regs</samp> is
in effect.
</p>
</dd>
<dt><code>Rsc</code></dt>
<dd><p>The the register class of registers that can be used to hold a
sibcall call address.  I.e., a caller-saved register.
</p>
</dd>
<dt><code>Rct</code></dt>
<dd><p>Core control register class.
</p>
</dd>
<dt><code>Rgs</code></dt>
<dd><p>The register group usable in short insns.
This constraint does not use a register class, so that it only
passively matches suitable registers, and doesn&rsquo;t drive register allocation.
</p>
</dd>
<dt><code>Car</code></dt>
<dd><p>Constant suitable for the addsi3_r pattern.  This is a valid offset
For byte, halfword, or word addressing.
</p>
</dd>
<dt><code>Rra</code></dt>
<dd><p>Matches the return address if it can be replaced with the link register.
</p>
</dd>
<dt><code>Rcc</code></dt>
<dd><p>Matches the integer condition code register.
</p>
</dd>
<dt><code>Sra</code></dt>
<dd><p>Matches the return address if it is in a stack slot.
</p>
</dd>
<dt><code>Cfm</code></dt>
<dd><p>Matches control register values to switch fp mode, which are encapsulated in
<code>UNSPEC_FP_MODE</code>.
</p></dd>
</dl>

</dd>
<dt><em>CR16 Architecture&mdash;<samp>config/cr16/cr16.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>b</code></dt>
<dd><p>Registers from r0 to r14 (registers without stack pointer)
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>Register from r0 to r11 (all 16-bit registers)
</p>
</dd>
<dt><code>p</code></dt>
<dd><p>Register from r12 to r15 (all 32-bit registers)
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Signed constant that fits in 4 bits
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Signed constant that fits in 5 bits
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Signed constant that fits in 6 bits
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Unsigned constant that fits in 4 bits
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Signed constant that fits in 32 bits
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Check for 64 bits wide constants for add/sub instructions
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Floating point constant that is legal for store immediate
</p></dd>
</dl>

</dd>
<dt><em>Hewlett-Packard PA-RISC&mdash;<samp>config/pa/pa.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>General register 1
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>Floating point register
</p>
</dd>
<dt><code>q</code></dt>
<dd><p>Shift amount register
</p>
</dd>
<dt><code>x</code></dt>
<dd><p>Floating point register (deprecated)
</p>
</dd>
<dt><code>y</code></dt>
<dd><p>Upper floating point register (32-bit), floating point register (64-bit)
</p>
</dd>
<dt><code>Z</code></dt>
<dd><p>Any register
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Signed 11-bit integer constant
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Signed 14-bit integer constant
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Integer constant that can be deposited with a <code>zdepi</code> instruction
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Signed 5-bit integer constant
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Integer constant 0
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Integer constant that can be loaded with a <code>ldil</code> instruction
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>Integer constant whose value plus one is a power of 2
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>Integer constant that can be used for <code>and</code> operations in <code>depi</code>
and <code>extru</code> instructions
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>Integer constant 31
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>Integer constant 63
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Floating-point constant 0.0
</p>
</dd>
<dt><code>A</code></dt>
<dd><p>A <code>lo_sum</code> data-linkage-table memory operand
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>A memory operand that can be used as the destination operand of an
integer store instruction
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>A scaled or unscaled indexed memory operand
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>A memory operand for floating-point loads and stores
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>A register indirect memory operand
</p></dd>
</dl>

</dd>
<dt><em>picoChip family&mdash;<samp>picochip.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>k</code></dt>
<dd><p>Stack register.
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>Pointer register.  A register which can be used to access memory without
supplying an offset.  Any other register can be used to access memory,
but will need a constant offset.  In the case of the offset being zero,
it is more efficient to use a pointer register, since this reduces code
size.
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>A twin register.  A register which may be paired with an adjacent
register to create a 32-bit register.
</p>
</dd>
<dt><code>a</code></dt>
<dd><p>Any absolute memory address (e.g., symbolic constant, symbolic
constant + offset).
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>4-bit signed integer.
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>4-bit unsigned integer.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>8-bit signed integer.
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Any constant whose absolute value is no greater than 4-bits.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>10-bit signed integer
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>16-bit signed integer.
</p>
</dd>
</dl>

</dd>
<dt><em>PowerPC and IBM RS6000&mdash;<samp>config/rs6000/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>b</code></dt>
<dd><p>Address base register
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Floating point register (containing 64-bit value)
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>Floating point register (containing 32-bit value)
</p>
</dd>
<dt><code>v</code></dt>
<dd><p>Altivec vector register
</p>
</dd>
<dt><code>wa</code></dt>
<dd><p>Any VSX register if the -mvsx option was used or NO_REGS.
</p>
</dd>
<dt><code>wd</code></dt>
<dd><p>VSX vector register to hold vector double data or NO_REGS.
</p>
</dd>
<dt><code>wf</code></dt>
<dd><p>VSX vector register to hold vector float data or NO_REGS.
</p>
</dd>
<dt><code>wg</code></dt>
<dd><p>If <samp>-mmfpgpr</samp> was used, a floating point register or NO_REGS.
</p>
</dd>
<dt><code>wh</code></dt>
<dd><p>Floating point register if direct moves are available, or NO_REGS.
</p>
</dd>
<dt><code>wi</code></dt>
<dd><p>FP or VSX register to hold 64-bit integers for VSX insns or NO_REGS.
</p>
</dd>
<dt><code>wj</code></dt>
<dd><p>FP or VSX register to hold 64-bit integers for direct moves or NO_REGS.
</p>
</dd>
<dt><code>wk</code></dt>
<dd><p>FP or VSX register to hold 64-bit doubles for direct moves or NO_REGS.
</p>
</dd>
<dt><code>wl</code></dt>
<dd><p>Floating point register if the LFIWAX instruction is enabled or NO_REGS.
</p>
</dd>
<dt><code>wm</code></dt>
<dd><p>VSX register if direct move instructions are enabled, or NO_REGS.
</p>
</dd>
<dt><code>wn</code></dt>
<dd><p>No register (NO_REGS).
</p>
</dd>
<dt><code>wr</code></dt>
<dd><p>General purpose register if 64-bit instructions are enabled or NO_REGS.
</p>
</dd>
<dt><code>ws</code></dt>
<dd><p>VSX vector register to hold scalar double values or NO_REGS.
</p>
</dd>
<dt><code>wt</code></dt>
<dd><p>VSX vector register to hold 128 bit integer or NO_REGS.
</p>
</dd>
<dt><code>wu</code></dt>
<dd><p>Altivec register to use for float/32-bit int loads/stores  or NO_REGS.
</p>
</dd>
<dt><code>wv</code></dt>
<dd><p>Altivec register to use for double loads/stores  or NO_REGS.
</p>
</dd>
<dt><code>ww</code></dt>
<dd><p>FP or VSX register to perform float operations under <samp>-mvsx</samp> or NO_REGS.
</p>
</dd>
<dt><code>wx</code></dt>
<dd><p>Floating point register if the STFIWX instruction is enabled or NO_REGS.
</p>
</dd>
<dt><code>wy</code></dt>
<dd><p>FP or VSX register to perform ISA 2.07 float ops or NO_REGS.
</p>
</dd>
<dt><code>wz</code></dt>
<dd><p>Floating point register if the LFIWZX instruction is enabled or NO_REGS.
</p>
</dd>
<dt><code>wQ</code></dt>
<dd><p>A memory address that will work with the <code>lq</code> and <code>stq</code>
instructions.
</p>
</dd>
<dt><code>h</code></dt>
<dd><p>&lsquo;<samp>MQ</samp>&rsquo;, &lsquo;<samp>CTR</samp>&rsquo;, or &lsquo;<samp>LINK</samp>&rsquo; register
</p>
</dd>
<dt><code>q</code></dt>
<dd><p>&lsquo;<samp>MQ</samp>&rsquo; register
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>&lsquo;<samp>CTR</samp>&rsquo; register
</p>
</dd>
<dt><code>l</code></dt>
<dd><p>&lsquo;<samp>LINK</samp>&rsquo; register
</p>
</dd>
<dt><code>x</code></dt>
<dd><p>&lsquo;<samp>CR</samp>&rsquo; register (condition register) number 0
</p>
</dd>
<dt><code>y</code></dt>
<dd><p>&lsquo;<samp>CR</samp>&rsquo; register (condition register)
</p>
</dd>
<dt><code>z</code></dt>
<dd><p>&lsquo;<samp>XER[CA]</samp>&rsquo; carry bit (part of the XER register)
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Signed 16-bit constant
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Unsigned 16-bit constant shifted left 16 bits (use &lsquo;<samp>L</samp>&rsquo; instead for
<code>SImode</code> constants)
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Unsigned 16-bit constant
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Signed 16-bit constant shifted left 16 bits
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Constant larger than 31
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Exact power of 2
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>Zero
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>Constant whose negation is a signed 16-bit constant
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Floating point constant that can be loaded into a register with one
instruction per word
</p>
</dd>
<dt><code>H</code></dt>
<dd><p>Integer/Floating point constant that can be loaded into a register using
three instructions
</p>
</dd>
<dt><code>m</code></dt>
<dd><p>Memory operand.
Normally, <code>m</code> does not allow addresses that update the base register.
If &lsquo;<samp>&lt;</samp>&rsquo; or &lsquo;<samp>&gt;</samp>&rsquo; constraint is also used, they are allowed and
therefore on PowerPC targets in that case it is only safe
to use &lsquo;<samp>m&lt;&gt;</samp>&rsquo; in an <code>asm</code> statement if that <code>asm</code> statement
accesses the operand exactly once.  The <code>asm</code> statement must also
use &lsquo;<samp>%U<var>&lt;opno&gt;</var></samp>&rsquo; as a placeholder for the &ldquo;update&rdquo; flag in the
corresponding load or store instruction.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">asm (&quot;st%U0 %1,%0&quot; : &quot;=m&lt;&gt;&quot; (mem) : &quot;r&quot; (val));
</pre></div>

<p>is correct but:
</p>
<div class="smallexample">
<pre class="smallexample">asm (&quot;st %1,%0&quot; : &quot;=m&lt;&gt;&quot; (mem) : &quot;r&quot; (val));
</pre></div>

<p>is not.
</p>
</dd>
<dt><code>es</code></dt>
<dd><p>A &ldquo;stable&rdquo; memory operand; that is, one which does not include any
automodification of the base register.  This used to be useful when
&lsquo;<samp>m</samp>&rsquo; allowed automodification of the base register, but as those are now only
allowed when &lsquo;<samp>&lt;</samp>&rsquo; or &lsquo;<samp>&gt;</samp>&rsquo; is used, &lsquo;<samp>es</samp>&rsquo; is basically the same
as &lsquo;<samp>m</samp>&rsquo; without &lsquo;<samp>&lt;</samp>&rsquo; and &lsquo;<samp>&gt;</samp>&rsquo;.
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>Memory operand that is an offset from a register (it is usually better
to use &lsquo;<samp>m</samp>&rsquo; or &lsquo;<samp>es</samp>&rsquo; in <code>asm</code> statements)
</p>
</dd>
<dt><code>Z</code></dt>
<dd><p>Memory operand that is an indexed or indirect from a register (it is
usually better to use &lsquo;<samp>m</samp>&rsquo; or &lsquo;<samp>es</samp>&rsquo; in <code>asm</code> statements)
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>AIX TOC entry
</p>
</dd>
<dt><code>a</code></dt>
<dd><p>Address operand that is an indexed or indirect from a register (&lsquo;<samp>p</samp>&rsquo; is
preferable for <code>asm</code> statements)
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>Constant suitable as a 64-bit mask operand
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>Constant suitable as a 32-bit mask operand
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>System V Release 4 small data area reference
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>AND masks that can be performed by two rldic{l, r} instructions
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>Vector constant that does not require memory
</p>
</dd>
<dt><code>j</code></dt>
<dd><p>Vector constant that is all zeros.
</p>
</dd>
</dl>

</dd>
<dt><em>Intel 386&mdash;<samp>config/i386/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>R</code></dt>
<dd><p>Legacy register&mdash;the eight integer registers available on all
i386 processors (<code>a</code>, <code>b</code>, <code>c</code>, <code>d</code>,
<code>si</code>, <code>di</code>, <code>bp</code>, <code>sp</code>).
</p>
</dd>
<dt><code>q</code></dt>
<dd><p>Any register accessible as <code><var>r</var>l</code>.  In 32-bit mode, <code>a</code>,
<code>b</code>, <code>c</code>, and <code>d</code>; in 64-bit mode, any integer register.
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>Any register accessible as <code><var>r</var>h</code>: <code>a</code>, <code>b</code>,
<code>c</code>, and <code>d</code>.
</p>
</dd>
<dt><code>l</code></dt>
<dd><p>Any register that can be used as the index in a base+index memory
access: that is, any general register except the stack pointer.
</p>
</dd>
<dt><code>a</code></dt>
<dd><p>The <code>a</code> register.
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>The <code>b</code> register.
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>The <code>c</code> register.
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>The <code>d</code> register.
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>The <code>si</code> register.
</p>
</dd>
<dt><code>D</code></dt>
<dd><p>The <code>di</code> register.
</p>
</dd>
<dt><code>A</code></dt>
<dd><p>The <code>a</code> and <code>d</code> registers.  This class is used for instructions
that return double word results in the <code>ax:dx</code> register pair.  Single
word values will be allocated either in <code>ax</code> or <code>dx</code>.
For example on i386 the following implements <code>rdtsc</code>:
</p>
<div class="smallexample">
<pre class="smallexample">unsigned long long rdtsc (void)
{
  unsigned long long tick;
  __asm__ __volatile__(&quot;rdtsc&quot;:&quot;=A&quot;(tick));
  return tick;
}
</pre></div>

<p>This is not correct on x86_64 as it would allocate tick in either <code>ax</code>
or <code>dx</code>.  You have to use the following variant instead:
</p>
<div class="smallexample">
<pre class="smallexample">unsigned long long rdtsc (void)
{
  unsigned int tickl, tickh;
  __asm__ __volatile__(&quot;rdtsc&quot;:&quot;=a&quot;(tickl),&quot;=d&quot;(tickh));
  return ((unsigned long long)tickh &lt;&lt; 32)|tickl;
}
</pre></div>


</dd>
<dt><code>f</code></dt>
<dd><p>Any 80387 floating-point (stack) register.
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>Top of 80387 floating-point stack (<code>%st(0)</code>).
</p>
</dd>
<dt><code>u</code></dt>
<dd><p>Second from top of 80387 floating-point stack (<code>%st(1)</code>).
</p>
</dd>
<dt><code>y</code></dt>
<dd><p>Any MMX register.
</p>
</dd>
<dt><code>x</code></dt>
<dd><p>Any SSE register.
</p>
</dd>
<dt><code>Yz</code></dt>
<dd><p>First SSE register (<code>%xmm0</code>).
</p>
</dd>
<dt><code>Y2</code></dt>
<dd><p>Any SSE register, when SSE2 is enabled.
</p>
</dd>
<dt><code>Yi</code></dt>
<dd><p>Any SSE register, when SSE2 and inter-unit moves are enabled.
</p>
</dd>
<dt><code>Ym</code></dt>
<dd><p>Any MMX register, when inter-unit moves are enabled.
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Integer constant in the range 0 &hellip; 31, for 32-bit shifts.
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Integer constant in the range 0 &hellip; 63, for 64-bit shifts.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Signed 8-bit integer constant.
</p>
</dd>
<dt><code>L</code></dt>
<dd><p><code>0xFF</code> or <code>0xFFFF</code>, for andsi as a zero-extending move.
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>0, 1, 2, or 3 (shifts for the <code>lea</code> instruction).
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Unsigned 8-bit integer constant (for <code>in</code> and <code>out</code>
instructions).
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>Integer constant in the range 0 &hellip; 127, for 128-bit shifts.
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Standard 80387 floating point constant.
</p>
</dd>
<dt><code>C</code></dt>
<dd><p>Standard SSE floating point constant.
</p>
</dd>
<dt><code>e</code></dt>
<dd><p>32-bit signed integer constant, or a symbolic reference known
to fit that range (for immediate operands in sign-extending x86-64
instructions).
</p>
</dd>
<dt><code>Z</code></dt>
<dd><p>32-bit unsigned integer constant, or a symbolic reference known
to fit that range (for immediate operands in zero-extending x86-64
instructions).
</p>
</dd>
</dl>

</dd>
<dt><em>Intel IA-64&mdash;<samp>config/ia64/ia64.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>General register <code>r0</code> to <code>r3</code> for <code>addl</code> instruction
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>Branch register
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>Predicate register (&lsquo;<samp>c</samp>&rsquo; as in &ldquo;conditional&rdquo;)
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Application register residing in M-unit
</p>
</dd>
<dt><code>e</code></dt>
<dd><p>Application register residing in I-unit
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>Floating-point register
</p>
</dd>
<dt><code>m</code></dt>
<dd><p>Memory operand.  If used together with &lsquo;<samp>&lt;</samp>&rsquo; or &lsquo;<samp>&gt;</samp>&rsquo;,
the operand can have postincrement and postdecrement which
require printing with &lsquo;<samp>%Pn</samp>&rsquo; on IA-64.
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Floating-point constant 0.0 or 1.0
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>14-bit signed integer constant
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>22-bit signed integer constant
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>8-bit signed integer constant for logical instructions
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>8-bit adjusted signed integer constant for compare pseudo-ops
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>6-bit unsigned integer constant for shift counts
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>9-bit signed integer constant for load and store postincrements
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>The constant zero
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>0 or -1 for <code>dep</code> instruction
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>Non-volatile memory for floating-point loads and stores
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>Integer constant in the range 1 to 4 for <code>shladd</code> instruction
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>Memory operand except postincrement and postdecrement.  This is
now roughly the same as &lsquo;<samp>m</samp>&rsquo; when not used together with &lsquo;<samp>&lt;</samp>&rsquo;
or &lsquo;<samp>&gt;</samp>&rsquo;.
</p></dd>
</dl>

</dd>
<dt><em>FRV&mdash;<samp>config/frv/frv.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>Register in the class <code>ACC_REGS</code> (<code>acc0</code> to <code>acc7</code>).
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>Register in the class <code>EVEN_ACC_REGS</code> (<code>acc0</code> to <code>acc7</code>).
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>Register in the class <code>CC_REGS</code> (<code>fcc0</code> to <code>fcc3</code> and
<code>icc0</code> to <code>icc3</code>).
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Register in the class <code>GPR_REGS</code> (<code>gr0</code> to <code>gr63</code>).
</p>
</dd>
<dt><code>e</code></dt>
<dd><p>Register in the class <code>EVEN_REGS</code> (<code>gr0</code> to <code>gr63</code>).
Odd registers are excluded not in the class but through the use of a machine
mode larger than 4 bytes.
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>Register in the class <code>FPR_REGS</code> (<code>fr0</code> to <code>fr63</code>).
</p>
</dd>
<dt><code>h</code></dt>
<dd><p>Register in the class <code>FEVEN_REGS</code> (<code>fr0</code> to <code>fr63</code>).
Odd registers are excluded not in the class but through the use of a machine
mode larger than 4 bytes.
</p>
</dd>
<dt><code>l</code></dt>
<dd><p>Register in the class <code>LR_REG</code> (the <code>lr</code> register).
</p>
</dd>
<dt><code>q</code></dt>
<dd><p>Register in the class <code>QUAD_REGS</code> (<code>gr2</code> to <code>gr63</code>).
Register numbers not divisible by 4 are excluded not in the class but through
the use of a machine mode larger than 8 bytes.
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>Register in the class <code>ICC_REGS</code> (<code>icc0</code> to <code>icc3</code>).
</p>
</dd>
<dt><code>u</code></dt>
<dd><p>Register in the class <code>FCC_REGS</code> (<code>fcc0</code> to <code>fcc3</code>).
</p>
</dd>
<dt><code>v</code></dt>
<dd><p>Register in the class <code>ICR_REGS</code> (<code>cc4</code> to <code>cc7</code>).
</p>
</dd>
<dt><code>w</code></dt>
<dd><p>Register in the class <code>FCR_REGS</code> (<code>cc0</code> to <code>cc3</code>).
</p>
</dd>
<dt><code>x</code></dt>
<dd><p>Register in the class <code>QUAD_FPR_REGS</code> (<code>fr0</code> to <code>fr63</code>).
Register numbers not divisible by 4 are excluded not in the class but through
the use of a machine mode larger than 8 bytes.
</p>
</dd>
<dt><code>z</code></dt>
<dd><p>Register in the class <code>SPR_REGS</code> (<code>lcr</code> and <code>lr</code>).
</p>
</dd>
<dt><code>A</code></dt>
<dd><p>Register in the class <code>QUAD_ACC_REGS</code> (<code>acc0</code> to <code>acc7</code>).
</p>
</dd>
<dt><code>B</code></dt>
<dd><p>Register in the class <code>ACCG_REGS</code> (<code>accg0</code> to <code>accg7</code>).
</p>
</dd>
<dt><code>C</code></dt>
<dd><p>Register in the class <code>CR_REGS</code> (<code>cc0</code> to <code>cc7</code>).
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Floating point constant zero
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>6-bit signed integer constant
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>10-bit signed integer constant
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>16-bit signed integer constant
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>16-bit unsigned integer constant
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>12-bit signed integer constant that is negative&mdash;i.e. in the
range of -2048 to -1
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>Constant zero
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>12-bit signed integer constant that is greater than zero&mdash;i.e. in the
range of 1 to 2047.
</p>
</dd>
</dl>

</dd>
<dt><em>Blackfin family&mdash;<samp>config/bfin/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>P register
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>D register
</p>
</dd>
<dt><code>z</code></dt>
<dd><p>A call clobbered P register.
</p>
</dd>
<dt><code>q<var>n</var></code></dt>
<dd><p>A single register.  If <var>n</var> is in the range 0 to 7, the corresponding D
register.  If it is <code>A</code>, then the register P0.
</p>
</dd>
<dt><code>D</code></dt>
<dd><p>Even-numbered D register
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>Odd-numbered D register
</p>
</dd>
<dt><code>e</code></dt>
<dd><p>Accumulator register.
</p>
</dd>
<dt><code>A</code></dt>
<dd><p>Even-numbered accumulator register.
</p>
</dd>
<dt><code>B</code></dt>
<dd><p>Odd-numbered accumulator register.
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>I register
</p>
</dd>
<dt><code>v</code></dt>
<dd><p>B register
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>M register
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>Registers used for circular buffering, i.e. I, B, or L registers.
</p>
</dd>
<dt><code>C</code></dt>
<dd><p>The CC register.
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>LT0 or LT1.
</p>
</dd>
<dt><code>k</code></dt>
<dd><p>LC0 or LC1.
</p>
</dd>
<dt><code>u</code></dt>
<dd><p>LB0 or LB1.
</p>
</dd>
<dt><code>x</code></dt>
<dd><p>Any D, P, B, M, I or L register.
</p>
</dd>
<dt><code>y</code></dt>
<dd><p>Additional registers typically used only in prologues and epilogues: RETS,
RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and USP.
</p>
</dd>
<dt><code>w</code></dt>
<dd><p>Any register except accumulators or CC.
</p>
</dd>
<dt><code>Ksh</code></dt>
<dd><p>Signed 16 bit integer (in the range -32768 to 32767)
</p>
</dd>
<dt><code>Kuh</code></dt>
<dd><p>Unsigned 16 bit integer (in the range 0 to 65535)
</p>
</dd>
<dt><code>Ks7</code></dt>
<dd><p>Signed 7 bit integer (in the range -64 to 63)
</p>
</dd>
<dt><code>Ku7</code></dt>
<dd><p>Unsigned 7 bit integer (in the range 0 to 127)
</p>
</dd>
<dt><code>Ku5</code></dt>
<dd><p>Unsigned 5 bit integer (in the range 0 to 31)
</p>
</dd>
<dt><code>Ks4</code></dt>
<dd><p>Signed 4 bit integer (in the range -8 to 7)
</p>
</dd>
<dt><code>Ks3</code></dt>
<dd><p>Signed 3 bit integer (in the range -3 to 4)
</p>
</dd>
<dt><code>Ku3</code></dt>
<dd><p>Unsigned 3 bit integer (in the range 0 to 7)
</p>
</dd>
<dt><code>P<var>n</var></code></dt>
<dd><p>Constant <var>n</var>, where <var>n</var> is a single-digit constant in the range 0 to 4.
</p>
</dd>
<dt><code>PA</code></dt>
<dd><p>An integer equal to one of the MACFLAG_XXX constants that is suitable for
use with either accumulator.
</p>
</dd>
<dt><code>PB</code></dt>
<dd><p>An integer equal to one of the MACFLAG_XXX constants that is suitable for
use only with accumulator A1.
</p>
</dd>
<dt><code>M1</code></dt>
<dd><p>Constant 255.
</p>
</dd>
<dt><code>M2</code></dt>
<dd><p>Constant 65535.
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>An integer constant with exactly a single bit set.
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>An integer constant with all bits set except exactly one.
</p>
</dd>
<dt><code>H</code></dt>
<dt><code>Q</code></dt>
<dd><p>Any SYMBOL_REF.
</p></dd>
</dl>

</dd>
<dt><em>M32C&mdash;<samp>config/m32c/m32c.c</samp></em></dt>
<dd><dl compact="compact">
<dt><code>Rsp</code></dt>
<dt><code>Rfb</code></dt>
<dt><code>Rsb</code></dt>
<dd><p>&lsquo;<samp>$sp</samp>&rsquo;, &lsquo;<samp>$fb</samp>&rsquo;, &lsquo;<samp>$sb</samp>&rsquo;.
</p>
</dd>
<dt><code>Rcr</code></dt>
<dd><p>Any control register, when they&rsquo;re 16 bits wide (nothing if control
registers are 24 bits wide)
</p>
</dd>
<dt><code>Rcl</code></dt>
<dd><p>Any control register, when they&rsquo;re 24 bits wide.
</p>
</dd>
<dt><code>R0w</code></dt>
<dt><code>R1w</code></dt>
<dt><code>R2w</code></dt>
<dt><code>R3w</code></dt>
<dd><p>$r0, $r1, $r2, $r3.
</p>
</dd>
<dt><code>R02</code></dt>
<dd><p>$r0 or $r2, or $r2r0 for 32 bit values.
</p>
</dd>
<dt><code>R13</code></dt>
<dd><p>$r1 or $r3, or $r3r1 for 32 bit values.
</p>
</dd>
<dt><code>Rdi</code></dt>
<dd><p>A register that can hold a 64 bit value.
</p>
</dd>
<dt><code>Rhl</code></dt>
<dd><p>$r0 or $r1 (registers with addressable high/low bytes)
</p>
</dd>
<dt><code>R23</code></dt>
<dd><p>$r2 or $r3
</p>
</dd>
<dt><code>Raa</code></dt>
<dd><p>Address registers
</p>
</dd>
<dt><code>Raw</code></dt>
<dd><p>Address registers when they&rsquo;re 16 bits wide.
</p>
</dd>
<dt><code>Ral</code></dt>
<dd><p>Address registers when they&rsquo;re 24 bits wide.
</p>
</dd>
<dt><code>Rqi</code></dt>
<dd><p>Registers that can hold QI values.
</p>
</dd>
<dt><code>Rad</code></dt>
<dd><p>Registers that can be used with displacements ($a0, $a1, $sb).
</p>
</dd>
<dt><code>Rsi</code></dt>
<dd><p>Registers that can hold 32 bit values.
</p>
</dd>
<dt><code>Rhi</code></dt>
<dd><p>Registers that can hold 16 bit values.
</p>
</dd>
<dt><code>Rhc</code></dt>
<dd><p>Registers chat can hold 16 bit values, including all control
registers.
</p>
</dd>
<dt><code>Rra</code></dt>
<dd><p>$r0 through R1, plus $a0 and $a1.
</p>
</dd>
<dt><code>Rfl</code></dt>
<dd><p>The flags register.
</p>
</dd>
<dt><code>Rmm</code></dt>
<dd><p>The memory-based pseudo-registers $mem0 through $mem15.
</p>
</dd>
<dt><code>Rpi</code></dt>
<dd><p>Registers that can hold pointers (16 bit registers for r8c, m16c; 24
bit registers for m32cm, m32c).
</p>
</dd>
<dt><code>Rpa</code></dt>
<dd><p>Matches multiple registers in a PARALLEL to form a larger register.
Used to match function return values.
</p>
</dd>
<dt><code>Is3</code></dt>
<dd><p>-8 &hellip; 7
</p>
</dd>
<dt><code>IS1</code></dt>
<dd><p>-128 &hellip; 127
</p>
</dd>
<dt><code>IS2</code></dt>
<dd><p>-32768 &hellip; 32767
</p>
</dd>
<dt><code>IU2</code></dt>
<dd><p>0 &hellip; 65535
</p>
</dd>
<dt><code>In4</code></dt>
<dd><p>-8 &hellip; -1 or 1 &hellip; 8
</p>
</dd>
<dt><code>In5</code></dt>
<dd><p>-16 &hellip; -1 or 1 &hellip; 16
</p>
</dd>
<dt><code>In6</code></dt>
<dd><p>-32 &hellip; -1 or 1 &hellip; 32
</p>
</dd>
<dt><code>IM2</code></dt>
<dd><p>-65536 &hellip; -1
</p>
</dd>
<dt><code>Ilb</code></dt>
<dd><p>An 8 bit value with exactly one bit set.
</p>
</dd>
<dt><code>Ilw</code></dt>
<dd><p>A 16 bit value with exactly one bit set.
</p>
</dd>
<dt><code>Sd</code></dt>
<dd><p>The common src/dest memory addressing modes.
</p>
</dd>
<dt><code>Sa</code></dt>
<dd><p>Memory addressed using $a0 or $a1.
</p>
</dd>
<dt><code>Si</code></dt>
<dd><p>Memory addressed with immediate addresses.
</p>
</dd>
<dt><code>Ss</code></dt>
<dd><p>Memory addressed using the stack pointer ($sp).
</p>
</dd>
<dt><code>Sf</code></dt>
<dd><p>Memory addressed using the frame base register ($fb).
</p>
</dd>
<dt><code>Ss</code></dt>
<dd><p>Memory addressed using the small base register ($sb).
</p>
</dd>
<dt><code>S1</code></dt>
<dd><p>$r1h
</p></dd>
</dl>

</dd>
<dt><em>MeP&mdash;<samp>config/mep/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>The $sp register.
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>The $tp register.
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>Any control register.
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Either the $hi or the $lo register.
</p>
</dd>
<dt><code>em</code></dt>
<dd><p>Coprocessor registers that can be directly loaded ($c0-$c15).
</p>
</dd>
<dt><code>ex</code></dt>
<dd><p>Coprocessor registers that can be moved to each other.
</p>
</dd>
<dt><code>er</code></dt>
<dd><p>Coprocessor registers that can be moved to core registers.
</p>
</dd>
<dt><code>h</code></dt>
<dd><p>The $hi register.
</p>
</dd>
<dt><code>j</code></dt>
<dd><p>The $rpc register.
</p>
</dd>
<dt><code>l</code></dt>
<dd><p>The $lo register.
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>Registers which can be used in $tp-relative addressing.
</p>
</dd>
<dt><code>v</code></dt>
<dd><p>The $gp register.
</p>
</dd>
<dt><code>x</code></dt>
<dd><p>The coprocessor registers.
</p>
</dd>
<dt><code>y</code></dt>
<dd><p>The coprocessor control registers.
</p>
</dd>
<dt><code>z</code></dt>
<dd><p>The $0 register.
</p>
</dd>
<dt><code>A</code></dt>
<dd><p>User-defined register set A.
</p>
</dd>
<dt><code>B</code></dt>
<dd><p>User-defined register set B.
</p>
</dd>
<dt><code>C</code></dt>
<dd><p>User-defined register set C.
</p>
</dd>
<dt><code>D</code></dt>
<dd><p>User-defined register set D.
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Offsets for $gp-rel addressing.
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Constants that can be used directly with boolean insns.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Constants that can be moved directly to registers.
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Small constants that can be added to registers.
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Long shift counts.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Small constants that can be compared to registers.
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>Constants that can be loaded into the top half of registers.
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>Signed 8-bit immediates.
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>Symbols encoded for $tp-rel or $gp-rel addressing.
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>Non-constant addresses for loading/saving coprocessor registers.
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>The top half of a symbol&rsquo;s value.
</p>
</dd>
<dt><code>Y</code></dt>
<dd><p>A register indirect address without offset.
</p>
</dd>
<dt><code>Z</code></dt>
<dd><p>Symbolic references to the control bus.
</p>
</dd>
</dl>

</dd>
<dt><em>MicroBlaze&mdash;<samp>config/microblaze/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>d</code></dt>
<dd><p>A general register (<code>r0</code> to <code>r31</code>).
</p>
</dd>
<dt><code>z</code></dt>
<dd><p>A status register (<code>rmsr</code>, <code>$fcc1</code> to <code>$fcc7</code>).
</p>
</dd>
</dl>

</dd>
<dt><em>MIPS&mdash;<samp>config/mips/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>d</code></dt>
<dd><p>An address register.  This is equivalent to <code>r</code> unless
generating MIPS16 code.
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>A floating-point register (if available).
</p>
</dd>
<dt><code>h</code></dt>
<dd><p>Formerly the <code>hi</code> register.  This constraint is no longer supported.
</p>
</dd>
<dt><code>l</code></dt>
<dd><p>The <code>lo</code> register.  Use this register to store values that are
no bigger than a word.
</p>
</dd>
<dt><code>x</code></dt>
<dd><p>The concatenated <code>hi</code> and <code>lo</code> registers.  Use this register
to store doubleword values.
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>A register suitable for use in an indirect jump.  This will always be
<code>$25</code> for <samp>-mabicalls</samp>.
</p>
</dd>
<dt><code>v</code></dt>
<dd><p>Register <code>$3</code>.  Do not use this constraint in new code;
it is retained only for compatibility with glibc.
</p>
</dd>
<dt><code>y</code></dt>
<dd><p>Equivalent to <code>r</code>; retained for backwards compatibility.
</p>
</dd>
<dt><code>z</code></dt>
<dd><p>A floating-point condition code register.
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>A signed 16-bit constant (for arithmetic instructions).
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Integer zero.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>An unsigned 16-bit constant (for logic instructions).
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>A signed 32-bit constant in which the lower 16 bits are zero.
Such constants can be loaded using <code>lui</code>.
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>A constant that cannot be loaded using <code>lui</code>, <code>addiu</code>
or <code>ori</code>.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>A constant in the range -65535 to -1 (inclusive).
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>A signed 15-bit constant.
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>A constant in the range 1 to 65535 (inclusive).
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Floating-point zero.
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>An address that can be used in a non-macro load or store.
</p></dd>
</dl>

</dd>
<dt><em>Motorola 680x0&mdash;<samp>config/m68k/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>Address register
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Data register
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>68881 floating-point register, if available
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Integer in the range 1 to 8
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>16-bit signed number
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Signed number whose magnitude is greater than 0x80
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Integer in the range -8 to -1
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Signed number whose magnitude is greater than 0x100
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>16 (for rotate using swap)
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>Numbers that mov3q can handle
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Floating point constant that is not a 68881 constant
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>Operands that satisfy &rsquo;m&rsquo; when -mpcrel is in effect
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>Operands that satisfy &rsquo;s&rsquo; when -mpcrel is not in effect
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>Address register indirect addressing mode
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>Register offset addressing
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>const_call_operand
</p>
</dd>
<dt><code>Cs</code></dt>
<dd><p>symbol_ref or const
</p>
</dd>
<dt><code>Ci</code></dt>
<dd><p>const_int
</p>
</dd>
<dt><code>C0</code></dt>
<dd><p>const_int 0
</p>
</dd>
<dt><code>Cj</code></dt>
<dd><p>Range of signed numbers that don&rsquo;t fit in 16 bits
</p>
</dd>
<dt><code>Cmvq</code></dt>
<dd><p>Integers valid for mvq
</p>
</dd>
<dt><code>Capsw</code></dt>
<dd><p>Integers valid for a moveq followed by a swap
</p>
</dd>
<dt><code>Cmvz</code></dt>
<dd><p>Integers valid for mvz
</p>
</dd>
<dt><code>Cmvs</code></dt>
<dd><p>Integers valid for mvs
</p>
</dd>
<dt><code>Ap</code></dt>
<dd><p>push_operand
</p>
</dd>
<dt><code>Ac</code></dt>
<dd><p>Non-register operands allowed in clr
</p>
</dd>
</dl>

</dd>
<dt><em>Moxie&mdash;<samp>config/moxie/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>A</code></dt>
<dd><p>An absolute address
</p>
</dd>
<dt><code>B</code></dt>
<dd><p>An offset address
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>A register indirect memory operand
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>A constant in the range of 0 to 255.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>A constant in the range of 0 to -255.
</p>
</dd>
</dl>

</dd>
<dt><em>PDP-11&mdash;<samp>config/pdp11/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>Floating point registers AC0 through AC3.  These can be loaded from/to
memory with a single instruction.
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Odd numbered general registers (R1, R3, R5).  These are used for
16-bit multiply operations.
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>Any of the floating point registers (AC0 through AC5).
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Floating point constant 0.
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>An integer constant that fits in 16 bits.
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>An integer constant whose low order 16 bits are zero.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>An integer constant that does not meet the constraints for codes
&lsquo;<samp>I</samp>&rsquo; or &lsquo;<samp>J</samp>&rsquo;.
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>The integer constant 1.
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>The integer constant -1.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>The integer constant 0.
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>Integer constants -4 through -1 and 1 through 4; shifts by these
amounts are handled as multiple single-bit shifts rather than a single
variable-length shift.
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>A memory reference which requires an additional word (address or
offset) after the opcode.
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>A memory reference that is encoded within the opcode.
</p>
</dd>
</dl>

</dd>
<dt><em>RL78&mdash;<samp>config/rl78/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>Int3</code></dt>
<dd><p>An integer constant in the range 1 &hellip; 7.
</p></dd>
<dt><code>Int8</code></dt>
<dd><p>An integer constant in the range 0 &hellip; 255.
</p></dd>
<dt><code>J</code></dt>
<dd><p>An integer constant in the range -255 &hellip; 0
</p></dd>
<dt><code>K</code></dt>
<dd><p>The integer constant 1.
</p></dd>
<dt><code>L</code></dt>
<dd><p>The integer constant -1.
</p></dd>
<dt><code>M</code></dt>
<dd><p>The integer constant 0.
</p></dd>
<dt><code>N</code></dt>
<dd><p>The integer constant 2.
</p></dd>
<dt><code>O</code></dt>
<dd><p>The integer constant -2.
</p></dd>
<dt><code>P</code></dt>
<dd><p>An integer constant in the range 1 &hellip; 15.
</p></dd>
<dt><code>Qbi</code></dt>
<dd><p>The built-in compare types&ndash;eq, ne, gtu, ltu, geu, and leu.
</p></dd>
<dt><code>Qsc</code></dt>
<dd><p>The synthetic compare types&ndash;gt, lt, ge, and le.
</p></dd>
<dt><code>Wab</code></dt>
<dd><p>A memory reference with an absolute address.
</p></dd>
<dt><code>Wbc</code></dt>
<dd><p>A memory reference using <code>BC</code> as a base register, with an optional offset.
</p></dd>
<dt><code>Wca</code></dt>
<dd><p>A memory reference using <code>AX</code>, <code>BC</code>, <code>DE</code>, or <code>HL</code> for the address, for calls.
</p></dd>
<dt><code>Wcv</code></dt>
<dd><p>A memory reference using any 16-bit register pair for the address, for calls.
</p></dd>
<dt><code>Wd2</code></dt>
<dd><p>A memory reference using <code>DE</code> as a base register, with an optional offset.
</p></dd>
<dt><code>Wde</code></dt>
<dd><p>A memory reference using <code>DE</code> as a base register, without any offset.
</p></dd>
<dt><code>Wfr</code></dt>
<dd><p>Any memory reference to an address in the far address space.
</p></dd>
<dt><code>Wh1</code></dt>
<dd><p>A memory reference using <code>HL</code> as a base register, with an optional one-byte offset.
</p></dd>
<dt><code>Whb</code></dt>
<dd><p>A memory reference using <code>HL</code> as a base register, with <code>B</code> or <code>C</code> as the index register.
</p></dd>
<dt><code>Whl</code></dt>
<dd><p>A memory reference using <code>HL</code> as a base register, without any offset.
</p></dd>
<dt><code>Ws1</code></dt>
<dd><p>A memory reference using <code>SP</code> as a base register, with an optional one-byte offset.
</p></dd>
<dt><code>Y</code></dt>
<dd><p>Any memory reference to an address in the near address space.
</p></dd>
<dt><code>A</code></dt>
<dd><p>The <code>AX</code> register.
</p></dd>
<dt><code>B</code></dt>
<dd><p>The <code>BC</code> register.
</p></dd>
<dt><code>D</code></dt>
<dd><p>The <code>DE</code> register.
</p></dd>
<dt><code>R</code></dt>
<dd><p><code>A</code> through <code>L</code> registers.
</p></dd>
<dt><code>S</code></dt>
<dd><p>The <code>SP</code> register.
</p></dd>
<dt><code>T</code></dt>
<dd><p>The <code>HL</code> register.
</p></dd>
<dt><code>Z08W</code></dt>
<dd><p>The 16-bit <code>R8</code> register.
</p></dd>
<dt><code>Z10W</code></dt>
<dd><p>The 16-bit <code>R10</code> register.
</p></dd>
<dt><code>Zint</code></dt>
<dd><p>The registers reserved for interrupts (<code>R24</code> to <code>R31</code>).
</p></dd>
<dt><code>a</code></dt>
<dd><p>The <code>A</code> register.
</p></dd>
<dt><code>b</code></dt>
<dd><p>The <code>B</code> register.
</p></dd>
<dt><code>c</code></dt>
<dd><p>The <code>C</code> register.
</p></dd>
<dt><code>d</code></dt>
<dd><p>The <code>D</code> register.
</p></dd>
<dt><code>e</code></dt>
<dd><p>The <code>E</code> register.
</p></dd>
<dt><code>h</code></dt>
<dd><p>The <code>H</code> register.
</p></dd>
<dt><code>l</code></dt>
<dd><p>The <code>L</code> register.
</p></dd>
<dt><code>v</code></dt>
<dd><p>The virtual registers.
</p></dd>
<dt><code>w</code></dt>
<dd><p>The <code>PSW</code> register.
</p></dd>
<dt><code>x</code></dt>
<dd><p>The <code>X</code> register.
</p>
</dd>
</dl>

</dd>
<dt><em>RX&mdash;<samp>config/rx/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>Q</code></dt>
<dd><p>An address which does not involve register indirect addressing or
pre/post increment/decrement addressing.
</p>
</dd>
<dt><code>Symbol</code></dt>
<dd><p>A symbol reference.
</p>
</dd>
<dt><code>Int08</code></dt>
<dd><p>A constant in the range -256 to 255, inclusive.
</p>
</dd>
<dt><code>Sint08</code></dt>
<dd><p>A constant in the range -128 to 127, inclusive.
</p>
</dd>
<dt><code>Sint16</code></dt>
<dd><p>A constant in the range -32768 to 32767, inclusive.
</p>
</dd>
<dt><code>Sint24</code></dt>
<dd><p>A constant in the range -8388608 to 8388607, inclusive.
</p>
</dd>
<dt><code>Uint04</code></dt>
<dd><p>A constant in the range 0 to 15, inclusive.
</p>
</dd>
</dl>

</dd>
<dt><em>SPARC&mdash;<samp>config/sparc/sparc.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>f</code></dt>
<dd><p>Floating-point register on the SPARC-V8 architecture and
lower floating-point register on the SPARC-V9 architecture.
</p>
</dd>
<dt><code>e</code></dt>
<dd><p>Floating-point register.  It is equivalent to &lsquo;<samp>f</samp>&rsquo; on the
SPARC-V8 architecture and contains both lower and upper
floating-point registers on the SPARC-V9 architecture.
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>Floating-point condition code register.
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Lower floating-point register.  It is only valid on the SPARC-V9
architecture when the Visual Instruction Set is available.
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>Floating-point register.  It is only valid on the SPARC-V9 architecture
when the Visual Instruction Set is available.
</p>
</dd>
<dt><code>h</code></dt>
<dd><p>64-bit global or out register for the SPARC-V8+ architecture.
</p>
</dd>
<dt><code>C</code></dt>
<dd><p>The constant all-ones, for floating-point.
</p>
</dd>
<dt><code>A</code></dt>
<dd><p>Signed 5-bit constant
</p>
</dd>
<dt><code>D</code></dt>
<dd><p>A vector constant
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Signed 13-bit constant
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Zero
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>32-bit constant with the low 12 bits clear (a constant that can be
loaded with the <code>sethi</code> instruction)
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>A constant in the range supported by <code>movcc</code> instructions (11-bit
signed immediate)
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>A constant in the range supported by <code>movrcc</code> instructions (10-bit
signed immediate)
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Same as &lsquo;<samp>K</samp>&rsquo;, except that it verifies that bits that are not in the
lower 32-bit range are all zero.  Must be used instead of &lsquo;<samp>K</samp>&rsquo; for
modes wider than <code>SImode</code>
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>The constant 4096
</p>
</dd>
<dt><code>G</code></dt>
<dd><p>Floating-point zero
</p>
</dd>
<dt><code>H</code></dt>
<dd><p>Signed 13-bit constant, sign-extended to 32 or 64 bits
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>The constant -1
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>Floating-point constant whose integral representation can
be moved into an integer register using a single sethi
instruction
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>Floating-point constant whose integral representation can
be moved into an integer register using a single mov
instruction
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>Floating-point constant whose integral representation can
be moved into an integer register using a high/lo_sum
instruction sequence
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>Memory address aligned to an 8-byte boundary
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>Even register
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>Memory address for &lsquo;<samp>e</samp>&rsquo; constraint registers
</p>
</dd>
<dt><code>w</code></dt>
<dd><p>Memory address with only a base register
</p>
</dd>
<dt><code>Y</code></dt>
<dd><p>Vector zero
</p>
</dd>
</dl>

</dd>
<dt><em>SPU&mdash;<samp>config/spu/spu.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>An immediate which can be loaded with the il/ila/ilh/ilhu instructions.  const_int is treated as a 64 bit value.
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>An immediate for and/xor/or instructions.  const_int is treated as a 64 bit value.
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>An immediate for the <code>iohl</code> instruction.  const_int is treated as a 64 bit value.
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>An immediate which can be loaded with <code>fsmbi</code>.
</p>
</dd>
<dt><code>A</code></dt>
<dd><p>An immediate which can be loaded with the il/ila/ilh/ilhu instructions.  const_int is treated as a 32 bit value.
</p>
</dd>
<dt><code>B</code></dt>
<dd><p>An immediate for most arithmetic instructions.  const_int is treated as a 32 bit value.
</p>
</dd>
<dt><code>C</code></dt>
<dd><p>An immediate for and/xor/or instructions.  const_int is treated as a 32 bit value.
</p>
</dd>
<dt><code>D</code></dt>
<dd><p>An immediate for the <code>iohl</code> instruction.  const_int is treated as a 32 bit value.
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>A constant in the range [-64, 63] for shift/rotate instructions.
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>An unsigned 7-bit constant for conversion/nop/channel instructions.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>A signed 10-bit constant for most arithmetic instructions.
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>A signed 16 bit immediate for <code>stop</code>.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>An unsigned 16-bit constant for <code>iohl</code> and <code>fsmbi</code>.
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>An unsigned 7-bit constant whose 3 least significant bits are 0.
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>An unsigned 3-bit constant for 16-byte rotates and shifts
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>Call operand, reg, for indirect calls
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>Call operand, symbol, for relative calls.
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>Call operand, const_int, for absolute calls.
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>An immediate which can be loaded with the il/ila/ilh/ilhu instructions.  const_int is sign extended to 128 bit.
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>An immediate for shift and rotate instructions.  const_int is treated as a 32 bit value.
</p>
</dd>
<dt><code>Y</code></dt>
<dd><p>An immediate for and/xor/or instructions.  const_int is sign extended as a 128 bit.
</p>
</dd>
<dt><code>Z</code></dt>
<dd><p>An immediate for the <code>iohl</code> instruction.  const_int is sign extended to 128 bit.
</p>
</dd>
</dl>

</dd>
<dt><em>S/390 and zSeries&mdash;<samp>config/s390/s390.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>Address register (general purpose register except r0)
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>Condition code register
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Data register (arbitrary general purpose register)
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>Floating-point register
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Unsigned 8-bit constant (0&ndash;255)
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Unsigned 12-bit constant (0&ndash;4095)
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Signed 16-bit constant (-32768&ndash;32767)
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Value appropriate as displacement.
</p><dl compact="compact">
<dt><code>(0..4095)</code></dt>
<dd><p>for short displacement
</p></dd>
<dt><code>(-524288..524287)</code></dt>
<dd><p>for long displacement
</p></dd>
</dl>

</dd>
<dt><code>M</code></dt>
<dd><p>Constant integer with a value of 0x7fffffff.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Multiple letter constraint followed by 4 parameter letters.
</p><dl compact="compact">
<dt><code>0..9:</code></dt>
<dd><p>number of the part counting from most to least significant
</p></dd>
<dt><code>H,Q:</code></dt>
<dd><p>mode of the part
</p></dd>
<dt><code>D,S,H:</code></dt>
<dd><p>mode of the containing operand
</p></dd>
<dt><code>0,F:</code></dt>
<dd><p>value of the other parts (F&mdash;all bits set)
</p></dd>
</dl>
<p>The constraint matches if the specified part of a constant
has a value different from its other parts.
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>Memory reference without index register and with short displacement.
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>Memory reference with index register and short displacement.
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>Memory reference without index register but with long displacement.
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>Memory reference with index register and long displacement.
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>Pointer with short displacement.
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>Pointer with long displacement.
</p>
</dd>
<dt><code>Y</code></dt>
<dd><p>Shift count operand.
</p>
</dd>
</dl>

</dd>
<dt><em>Score family&mdash;<samp>config/score/score.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>d</code></dt>
<dd><p>Registers from r0 to r32.
</p>
</dd>
<dt><code>e</code></dt>
<dd><p>Registers from r0 to r16.
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>r8&mdash;r11 or r22&mdash;r27 registers.
</p>
</dd>
<dt><code>h</code></dt>
<dd><p>hi register.
</p>
</dd>
<dt><code>l</code></dt>
<dd><p>lo register.
</p>
</dd>
<dt><code>x</code></dt>
<dd><p>hi + lo register.
</p>
</dd>
<dt><code>q</code></dt>
<dd><p>cnt register.
</p>
</dd>
<dt><code>y</code></dt>
<dd><p>lcb register.
</p>
</dd>
<dt><code>z</code></dt>
<dd><p>scb register.
</p>
</dd>
<dt><code>a</code></dt>
<dd><p>cnt + lcb + scb register.
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>cr0&mdash;cr15 register.
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>cp1 registers.
</p>
</dd>
<dt><code>f</code></dt>
<dd><p>cp2 registers.
</p>
</dd>
<dt><code>i</code></dt>
<dd><p>cp3 registers.
</p>
</dd>
<dt><code>j</code></dt>
<dd><p>cp1 + cp2 + cp3 registers.
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>High 16-bit constant (32-bit constant with 16 LSBs zero).
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Unsigned 5 bit integer (in the range 0 to 31).
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Unsigned 16 bit integer (in the range 0 to 65535).
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Signed 16 bit integer (in the range -32768 to 32767).
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>Unsigned 14 bit integer (in the range 0 to 16383).
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Signed 14 bit integer (in the range -8192 to 8191).
</p>
</dd>
<dt><code>Z</code></dt>
<dd><p>Any SYMBOL_REF.
</p></dd>
</dl>

</dd>
<dt><em>Xstormy16&mdash;<samp>config/stormy16/stormy16.h</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>Register r0.
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>Register r1.
</p>
</dd>
<dt><code>c</code></dt>
<dd><p>Register r2.
</p>
</dd>
<dt><code>d</code></dt>
<dd><p>Register r8.
</p>
</dd>
<dt><code>e</code></dt>
<dd><p>Registers r0 through r7.
</p>
</dd>
<dt><code>t</code></dt>
<dd><p>Registers r0 and r1.
</p>
</dd>
<dt><code>y</code></dt>
<dd><p>The carry register.
</p>
</dd>
<dt><code>z</code></dt>
<dd><p>Registers r8 and r9.
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>A constant between 0 and 3 inclusive.
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>A constant that has exactly one bit set.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>A constant that has exactly one bit clear.
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>A constant between 0 and 255 inclusive.
</p>
</dd>
<dt><code>M</code></dt>
<dd><p>A constant between -255 and 0 inclusive.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>A constant between -3 and 0 inclusive.
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>A constant between 1 and 4 inclusive.
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>A constant between -4 and -1 inclusive.
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>A memory reference that is a stack push.
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>A memory reference that is a stack pop.
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>A memory reference that refers to a constant address of known value.
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>The register indicated by Rx (not implemented yet).
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>A constant that is not between 2 and 15 inclusive.
</p>
</dd>
<dt><code>Z</code></dt>
<dd><p>The constant 0.
</p>
</dd>
</dl>

</dd>
<dt><em>TI C6X family&mdash;<samp>config/c6x/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>Register file A (A0&ndash;A31).
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>Register file B (B0&ndash;B31).
</p>
</dd>
<dt><code>A</code></dt>
<dd><p>Predicate registers in register file A (A0&ndash;A2 on C64X and
higher, A1 and A2 otherwise).
</p>
</dd>
<dt><code>B</code></dt>
<dd><p>Predicate registers in register file B (B0&ndash;B2).
</p>
</dd>
<dt><code>C</code></dt>
<dd><p>A call-used register in register file B (B0&ndash;B9, B16&ndash;B31).
</p>
</dd>
<dt><code>Da</code></dt>
<dd><p>Register file A, excluding predicate registers (A3&ndash;A31,
plus A0 if not C64X or higher).
</p>
</dd>
<dt><code>Db</code></dt>
<dd><p>Register file B, excluding predicate registers (B3&ndash;B31).
</p>
</dd>
<dt><code>Iu4</code></dt>
<dd><p>Integer constant in the range 0 &hellip; 15.
</p>
</dd>
<dt><code>Iu5</code></dt>
<dd><p>Integer constant in the range 0 &hellip; 31.
</p>
</dd>
<dt><code>In5</code></dt>
<dd><p>Integer constant in the range -31 &hellip; 0.
</p>
</dd>
<dt><code>Is5</code></dt>
<dd><p>Integer constant in the range -16 &hellip; 15.
</p>
</dd>
<dt><code>I5x</code></dt>
<dd><p>Integer constant that can be the operand of an ADDA or a SUBA insn.
</p>
</dd>
<dt><code>IuB</code></dt>
<dd><p>Integer constant in the range 0 &hellip; 65535.
</p>
</dd>
<dt><code>IsB</code></dt>
<dd><p>Integer constant in the range -32768 &hellip; 32767.
</p>
</dd>
<dt><code>IsC</code></dt>
<dd><p>Integer constant in the range <em>-2^{20}</em> &hellip; <em>2^{20} - 1</em>.
</p>
</dd>
<dt><code>Jc</code></dt>
<dd><p>Integer constant that is a valid mask for the clr instruction.
</p>
</dd>
<dt><code>Js</code></dt>
<dd><p>Integer constant that is a valid mask for the set instruction.
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>Memory location with A base register.
</p>
</dd>
<dt><code>R</code></dt>
<dd><p>Memory location with B base register.
</p>
</dd>
<dt><code>S0</code></dt>
<dd><p>On C64x+ targets, a GP-relative small data reference.
</p>
</dd>
<dt><code>S1</code></dt>
<dd><p>Any kind of <code>SYMBOL_REF</code>, for use in a call address.
</p>
</dd>
<dt><code>Si</code></dt>
<dd><p>Any kind of immediate operand, unless it matches the S0 constraint.
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>Memory location with B base register, but not using a long offset.
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>A memory operand with an address that can&rsquo;t be used in an unaligned access.
</p>
</dd>
<dt><code>Z</code></dt>
<dd><p>Register B14 (aka DP).
</p>
</dd>
</dl>

</dd>
<dt><em>TILE-Gx&mdash;<samp>config/tilegx/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>R00</code></dt>
<dt><code>R01</code></dt>
<dt><code>R02</code></dt>
<dt><code>R03</code></dt>
<dt><code>R04</code></dt>
<dt><code>R05</code></dt>
<dt><code>R06</code></dt>
<dt><code>R07</code></dt>
<dt><code>R08</code></dt>
<dt><code>R09</code></dt>
<dt><code>R10</code></dt>
<dd><p>Each of these represents a register constraint for an individual
register, from r0 to r10.
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Signed 8-bit integer constant.
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Signed 16-bit integer constant.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Unsigned 16-bit integer constant.
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Integer constant that fits in one signed byte when incremented by one
(-129 &hellip; 126).
</p>
</dd>
<dt><code>m</code></dt>
<dd><p>Memory operand.  If used together with &lsquo;<samp>&lt;</samp>&rsquo; or &lsquo;<samp>&gt;</samp>&rsquo;, the
operand can have postincrement which requires printing with &lsquo;<samp>%In</samp>&rsquo;
and &lsquo;<samp>%in</samp>&rsquo; on TILE-Gx.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">asm (&quot;st_add %I0,%1,%i0&quot; : &quot;=m&lt;&gt;&quot; (*mem) : &quot;r&quot; (val));
</pre></div>

</dd>
<dt><code>M</code></dt>
<dd><p>A bit mask suitable for the BFINS instruction.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Integer constant that is a byte tiled out eight times.
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>The integer zero constant.
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>Integer constant that is a sign-extended byte tiled out as four shorts.
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>Integer constant that fits in one signed byte when incremented
(-129 &hellip; 126), but excluding -1.
</p>
</dd>
<dt><code>S</code></dt>
<dd><p>Integer constant that has all 1 bits consecutive and starting at bit 0.
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>A 16-bit fragment of a got, tls, or pc-relative reference.
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>Memory operand except postincrement.  This is roughly the same as
&lsquo;<samp>m</samp>&rsquo; when not used together with &lsquo;<samp>&lt;</samp>&rsquo; or &lsquo;<samp>&gt;</samp>&rsquo;.
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>An 8-element vector constant with identical elements.
</p>
</dd>
<dt><code>Y</code></dt>
<dd><p>A 4-element vector constant with identical elements.
</p>
</dd>
<dt><code>Z0</code></dt>
<dd><p>The integer constant 0xffffffff.
</p>
</dd>
<dt><code>Z1</code></dt>
<dd><p>The integer constant 0xffffffff00000000.
</p>
</dd>
</dl>

</dd>
<dt><em>TILEPro&mdash;<samp>config/tilepro/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>R00</code></dt>
<dt><code>R01</code></dt>
<dt><code>R02</code></dt>
<dt><code>R03</code></dt>
<dt><code>R04</code></dt>
<dt><code>R05</code></dt>
<dt><code>R06</code></dt>
<dt><code>R07</code></dt>
<dt><code>R08</code></dt>
<dt><code>R09</code></dt>
<dt><code>R10</code></dt>
<dd><p>Each of these represents a register constraint for an individual
register, from r0 to r10.
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Signed 8-bit integer constant.
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Signed 16-bit integer constant.
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Nonzero integer constant with low 16 bits zero.
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Integer constant that fits in one signed byte when incremented by one
(-129 &hellip; 126).
</p>
</dd>
<dt><code>m</code></dt>
<dd><p>Memory operand.  If used together with &lsquo;<samp>&lt;</samp>&rsquo; or &lsquo;<samp>&gt;</samp>&rsquo;, the
operand can have postincrement which requires printing with &lsquo;<samp>%In</samp>&rsquo;
and &lsquo;<samp>%in</samp>&rsquo; on TILEPro.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">asm (&quot;swadd %I0,%1,%i0&quot; : &quot;=m&lt;&gt;&quot; (mem) : &quot;r&quot; (val));
</pre></div>

</dd>
<dt><code>M</code></dt>
<dd><p>A bit mask suitable for the MM instruction.
</p>
</dd>
<dt><code>N</code></dt>
<dd><p>Integer constant that is a byte tiled out four times.
</p>
</dd>
<dt><code>O</code></dt>
<dd><p>The integer zero constant.
</p>
</dd>
<dt><code>P</code></dt>
<dd><p>Integer constant that is a sign-extended byte tiled out as two shorts.
</p>
</dd>
<dt><code>Q</code></dt>
<dd><p>Integer constant that fits in one signed byte when incremented
(-129 &hellip; 126), but excluding -1.
</p>
</dd>
<dt><code>T</code></dt>
<dd><p>A symbolic operand, or a 16-bit fragment of a got, tls, or pc-relative
reference.
</p>
</dd>
<dt><code>U</code></dt>
<dd><p>Memory operand except postincrement.  This is roughly the same as
&lsquo;<samp>m</samp>&rsquo; when not used together with &lsquo;<samp>&lt;</samp>&rsquo; or &lsquo;<samp>&gt;</samp>&rsquo;.
</p>
</dd>
<dt><code>W</code></dt>
<dd><p>A 4-element vector constant with identical elements.
</p>
</dd>
<dt><code>Y</code></dt>
<dd><p>A 2-element vector constant with identical elements.
</p>
</dd>
</dl>

</dd>
<dt><em>Xtensa&mdash;<samp>config/xtensa/constraints.md</samp></em></dt>
<dd><dl compact="compact">
<dt><code>a</code></dt>
<dd><p>General-purpose 32-bit register
</p>
</dd>
<dt><code>b</code></dt>
<dd><p>One-bit boolean register
</p>
</dd>
<dt><code>A</code></dt>
<dd><p>MAC16 40-bit accumulator register
</p>
</dd>
<dt><code>I</code></dt>
<dd><p>Signed 12-bit integer constant, for use in MOVI instructions
</p>
</dd>
<dt><code>J</code></dt>
<dd><p>Signed 8-bit integer constant, for use in ADDI instructions
</p>
</dd>
<dt><code>K</code></dt>
<dd><p>Integer constant valid for BccI instructions
</p>
</dd>
<dt><code>L</code></dt>
<dd><p>Unsigned constant valid for BccUI instructions
</p>
</dd>
</dl>

</dd>
</dl>

<hr>
<a name="Disable-Insn-Alternatives"></a>
<div class="header">
<p>
Next: <a href="#Define-Constraints" accesskey="n" rel="next">Define Constraints</a>, Previous: <a href="#Machine-Constraints" accesskey="p" rel="prev">Machine Constraints</a>, Up: <a href="#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Disable-insn-alternatives-using-the-enabled-attribute"></a>
<h4 class="subsection">16.8.6 Disable insn alternatives using the <code>enabled</code> attribute</h4>
<a name="index-enabled"></a>

<p>The <code>enabled</code> insn attribute may be used to disable certain insn
alternatives for machine-specific reasons.  This is useful when adding
new instructions to an existing pattern which are only available for
certain cpu architecture levels as specified with the <code>-march=</code>
option.
</p>
<p>If an insn alternative is disabled, then it will never be used.  The
compiler treats the constraints for the disabled alternative as
unsatisfiable.
</p>
<p>In order to make use of the <code>enabled</code> attribute a back end has to add
in the machine description files:
</p>
<ol>
<li> A definition of the <code>enabled</code> insn attribute.  The attribute is
defined as usual using the <code>define_attr</code> command.  This
definition should be based on other insn attributes and/or target flags.
The <code>enabled</code> attribute is a numeric attribute and should evaluate to
<code>(const_int 1)</code> for an enabled alternative and to
<code>(const_int 0)</code> otherwise.
</li><li> A definition of another insn attribute used to describe for what
reason an insn alternative might be available or
not.  E.g. <code>cpu_facility</code> as in the example below.
</li><li> An assignment for the second attribute to each insn definition
combining instructions which are not all available under the same
circumstances.  (Note: It obviously only makes sense for definitions
with more than one alternative.  Otherwise the insn pattern should be
disabled or enabled using the insn condition.)
</li></ol>

<p>E.g. the following two patterns could easily be merged using the <code>enabled</code>
attribute:
</p>
<div class="smallexample">
<pre class="smallexample">
(define_insn &quot;*movdi_old&quot;
  [(set (match_operand:DI 0 &quot;register_operand&quot; &quot;=d&quot;)
        (match_operand:DI 1 &quot;register_operand&quot; &quot; d&quot;))]
  &quot;!TARGET_NEW&quot;
  &quot;lgr %0,%1&quot;)

(define_insn &quot;*movdi_new&quot;
  [(set (match_operand:DI 0 &quot;register_operand&quot; &quot;=d,f,d&quot;)
        (match_operand:DI 1 &quot;register_operand&quot; &quot; d,d,f&quot;))]
  &quot;TARGET_NEW&quot;
  &quot;@
   lgr  %0,%1
   ldgr %0,%1
   lgdr %0,%1&quot;)

</pre></div>

<p>to:
</p>
<div class="smallexample">
<pre class="smallexample">
(define_insn &quot;*movdi_combined&quot;
  [(set (match_operand:DI 0 &quot;register_operand&quot; &quot;=d,f,d&quot;)
        (match_operand:DI 1 &quot;register_operand&quot; &quot; d,d,f&quot;))]
  &quot;&quot;
  &quot;@
   lgr  %0,%1
   ldgr %0,%1
   lgdr %0,%1&quot;
  [(set_attr &quot;cpu_facility&quot; &quot;*,new,new&quot;)])

</pre></div>

<p>with the <code>enabled</code> attribute defined like this:
</p>
<div class="smallexample">
<pre class="smallexample">
(define_attr &quot;cpu_facility&quot; &quot;standard,new&quot; (const_string &quot;standard&quot;))

(define_attr &quot;enabled&quot; &quot;&quot;
  (cond [(eq_attr &quot;cpu_facility&quot; &quot;standard&quot;) (const_int 1)
         (and (eq_attr &quot;cpu_facility&quot; &quot;new&quot;)
              (ne (symbol_ref &quot;TARGET_NEW&quot;) (const_int 0)))
         (const_int 1)]
        (const_int 0)))

</pre></div>


<hr>
<a name="Define-Constraints"></a>
<div class="header">
<p>
Next: <a href="#C-Constraint-Interface" accesskey="n" rel="next">C Constraint Interface</a>, Previous: <a href="#Disable-Insn-Alternatives" accesskey="p" rel="prev">Disable Insn Alternatives</a>, Up: <a href="#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-Machine_002dSpecific-Constraints"></a>
<h4 class="subsection">16.8.7 Defining Machine-Specific Constraints</h4>
<a name="index-defining-constraints"></a>
<a name="index-constraints_002c-defining"></a>

<p>Machine-specific constraints fall into two categories: register and
non-register constraints.  Within the latter category, constraints
which allow subsets of all possible memory or address operands should
be specially marked, to give <code>reload</code> more information.
</p>
<p>Machine-specific constraints can be given names of arbitrary length,
but they must be entirely composed of letters, digits, underscores
(&lsquo;<samp>_</samp>&rsquo;), and angle brackets (&lsquo;<samp>&lt; &gt;</samp>&rsquo;).  Like C identifiers, they
must begin with a letter or underscore.
</p>
<p>In order to avoid ambiguity in operand constraint strings, no
constraint can have a name that begins with any other constraint&rsquo;s
name.  For example, if <code>x</code> is defined as a constraint name,
<code>xy</code> may not be, and vice versa.  As a consequence of this rule,
no constraint may begin with one of the generic constraint letters:
&lsquo;<samp>E F V X g i m n o p r s</samp>&rsquo;.
</p>
<p>Register constraints correspond directly to register classes.
See <a href="#Register-Classes">Register Classes</a>.  There is thus not much flexibility in their
definitions.
</p>
<dl>
<dt><a name="index-define_005fregister_005fconstraint"></a>MD Expression: <strong>define_register_constraint</strong> <em>name regclass docstring</em></dt>
<dd><p>All three arguments are string constants.
<var>name</var> is the name of the constraint, as it will appear in
<code>match_operand</code> expressions.  If <var>name</var> is a multi-letter
constraint its length shall be the same for all constraints starting
with the same letter.  <var>regclass</var> can be either the
name of the corresponding register class (see <a href="#Register-Classes">Register Classes</a>),
or a C expression which evaluates to the appropriate register class.
If it is an expression, it must have no side effects, and it cannot
look at the operand.  The usual use of expressions is to map some
register constraints to <code>NO_REGS</code> when the register class
is not available on a given subarchitecture.
</p>
<p><var>docstring</var> is a sentence documenting the meaning of the
constraint.  Docstrings are explained further below.
</p></dd></dl>

<p>Non-register constraints are more like predicates: the constraint
definition gives a Boolean expression which indicates whether the
constraint matches.
</p>
<dl>
<dt><a name="index-define_005fconstraint"></a>MD Expression: <strong>define_constraint</strong> <em>name docstring exp</em></dt>
<dd><p>The <var>name</var> and <var>docstring</var> arguments are the same as for
<code>define_register_constraint</code>, but note that the docstring comes
immediately after the name for these expressions.  <var>exp</var> is an RTL
expression, obeying the same rules as the RTL expressions in predicate
definitions.  See <a href="#Defining-Predicates">Defining Predicates</a>, for details.  If it
evaluates true, the constraint matches; if it evaluates false, it
doesn&rsquo;t. Constraint expressions should indicate which RTL codes they
might match, just like predicate expressions.
</p>
<p><code>match_test</code> C expressions have access to the
following variables:
</p>
<dl compact="compact">
<dt><var>op</var></dt>
<dd><p>The RTL object defining the operand.
</p></dd>
<dt><var>mode</var></dt>
<dd><p>The machine mode of <var>op</var>.
</p></dd>
<dt><var>ival</var></dt>
<dd><p>&lsquo;<samp>INTVAL (<var>op</var>)</samp>&rsquo;, if <var>op</var> is a <code>const_int</code>.
</p></dd>
<dt><var>hval</var></dt>
<dd><p>&lsquo;<samp>CONST_DOUBLE_HIGH (<var>op</var>)</samp>&rsquo;, if <var>op</var> is an integer
<code>const_double</code>.
</p></dd>
<dt><var>lval</var></dt>
<dd><p>&lsquo;<samp>CONST_DOUBLE_LOW (<var>op</var>)</samp>&rsquo;, if <var>op</var> is an integer
<code>const_double</code>.
</p></dd>
<dt><var>rval</var></dt>
<dd><p>&lsquo;<samp>CONST_DOUBLE_REAL_VALUE (<var>op</var>)</samp>&rsquo;, if <var>op</var> is a floating-point
<code>const_double</code>.
</p></dd>
</dl>

<p>The <var>*val</var> variables should only be used once another piece of the
expression has verified that <var>op</var> is the appropriate kind of RTL
object.
</p></dd></dl>

<p>Most non-register constraints should be defined with
<code>define_constraint</code>.  The remaining two definition expressions
are only appropriate for constraints that should be handled specially
by <code>reload</code> if they fail to match.
</p>
<dl>
<dt><a name="index-define_005fmemory_005fconstraint"></a>MD Expression: <strong>define_memory_constraint</strong> <em>name docstring exp</em></dt>
<dd><p>Use this expression for constraints that match a subset of all memory
operands: that is, <code>reload</code> can make them match by converting the
operand to the form &lsquo;<samp>(mem&nbsp;(reg&nbsp;<var>X</var>))<!-- /@w --></samp>&rsquo;, where <var>X</var> is a
base register (from the register class specified by
<code>BASE_REG_CLASS</code>, see <a href="#Register-Classes">Register Classes</a>).
</p>
<p>For example, on the S/390, some instructions do not accept arbitrary
memory references, but only those that do not make use of an index
register.  The constraint letter &lsquo;<samp>Q</samp>&rsquo; is defined to represent a
memory address of this type.  If &lsquo;<samp>Q</samp>&rsquo; is defined with
<code>define_memory_constraint</code>, a &lsquo;<samp>Q</samp>&rsquo; constraint can handle any
memory operand, because <code>reload</code> knows it can simply copy the
memory address into a base register if required.  This is analogous to
the way an &lsquo;<samp>o</samp>&rsquo; constraint can handle any memory operand.
</p>
<p>The syntax and semantics are otherwise identical to
<code>define_constraint</code>.
</p></dd></dl>

<dl>
<dt><a name="index-define_005faddress_005fconstraint"></a>MD Expression: <strong>define_address_constraint</strong> <em>name docstring exp</em></dt>
<dd><p>Use this expression for constraints that match a subset of all address
operands: that is, <code>reload</code> can make the constraint match by
converting the operand to the form &lsquo;<samp>(reg&nbsp;<var>X</var>)<!-- /@w --></samp>&rsquo;, again
with <var>X</var> a base register.
</p>
<p>Constraints defined with <code>define_address_constraint</code> can only be
used with the <code>address_operand</code> predicate, or machine-specific
predicates that work the same way.  They are treated analogously to
the generic &lsquo;<samp>p</samp>&rsquo; constraint.
</p>
<p>The syntax and semantics are otherwise identical to
<code>define_constraint</code>.
</p></dd></dl>

<p>For historical reasons, names beginning with the letters &lsquo;<samp>G H</samp>&rsquo;
are reserved for constraints that match only <code>const_double</code>s, and
names beginning with the letters &lsquo;<samp>I J K L M N O P</samp>&rsquo; are reserved
for constraints that match only <code>const_int</code>s.  This may change in
the future.  For the time being, constraints with these names must be
written in a stylized form, so that <code>genpreds</code> can tell you did
it correctly:
</p>
<div class="smallexample">
<pre class="smallexample">(define_constraint &quot;[<var>GHIJKLMNOP</var>]&hellip;&quot;
  &quot;<var>doc</var>&hellip;&quot;
  (and (match_code &quot;const_int&quot;)  ; <span class="roman"><code>const_double</code> for G/H</span>
       <var>condition</var>&hellip;))            ; <span class="roman">usually a <code>match_test</code></span>
</pre></div>

<p>It is fine to use names beginning with other letters for constraints
that match <code>const_double</code>s or <code>const_int</code>s.
</p>
<p>Each docstring in a constraint definition should be one or more complete
sentences, marked up in Texinfo format.  <em>They are currently unused.</em>
In the future they will be copied into the GCC manual, in <a href="#Machine-Constraints">Machine Constraints</a>, replacing the hand-maintained tables currently found in
that section.  Also, in the future the compiler may use this to give
more helpful diagnostics when poor choice of <code>asm</code> constraints
causes a reload failure.
</p>
<p>If you put the pseudo-Texinfo directive &lsquo;<samp>@internal</samp>&rsquo; at the
beginning of a docstring, then (in the future) it will appear only in
the internals manual&rsquo;s version of the machine-specific constraint tables.
Use this for constraints that should not appear in <code>asm</code> statements.
</p>
<hr>
<a name="C-Constraint-Interface"></a>
<div class="header">
<p>
Previous: <a href="#Define-Constraints" accesskey="p" rel="prev">Define Constraints</a>, Up: <a href="#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Testing-constraints-from-C"></a>
<h4 class="subsection">16.8.8 Testing constraints from C</h4>
<a name="index-testing-constraints"></a>
<a name="index-constraints_002c-testing"></a>

<p>It is occasionally useful to test a constraint from C code rather than
implicitly via the constraint string in a <code>match_operand</code>.  The
generated file <samp>tm_p.h</samp> declares a few interfaces for working
with machine-specific constraints.  None of these interfaces work with
the generic constraints described in <a href="#Simple-Constraints">Simple Constraints</a>.  This
may change in the future.
</p>
<p><strong>Warning:</strong> <samp>tm_p.h</samp> may declare other functions that
operate on constraints, besides the ones documented here.  Do not use
those functions from machine-dependent code.  They exist to implement
the old constraint interface that machine-independent components of
the compiler still expect.  They will change or disappear in the
future.
</p>
<p>Some valid constraint names are not valid C identifiers, so there is a
mangling scheme for referring to them from C.  Constraint names that
do not contain angle brackets or underscores are left unchanged.
Underscores are doubled, each &lsquo;<samp>&lt;</samp>&rsquo; is replaced with &lsquo;<samp>_l</samp>&rsquo;, and
each &lsquo;<samp>&gt;</samp>&rsquo; with &lsquo;<samp>_g</samp>&rsquo;.  Here are some examples:
</p>
<div class="example">
<table>
<tr><td><pre class="example"><strong>Original</strong></pre></td><td><pre class="example"><strong>Mangled</strong></pre></td></tr>
<tr><td><pre class="example"><code>x</code></pre></td><td><pre class="example"><code>x</code></pre></td></tr>
<tr><td><pre class="example"><code>P42x</code></pre></td><td><pre class="example"><code>P42x</code></pre></td></tr>
<tr><td><pre class="example"><code>P4_x</code></pre></td><td><pre class="example"><code>P4__x</code></pre></td></tr>
<tr><td><pre class="example"><code>P4&gt;x</code></pre></td><td><pre class="example"><code>P4_gx</code></pre></td></tr>
<tr><td><pre class="example"><code>P4&gt;&gt;</code></pre></td><td><pre class="example"><code>P4_g_g</code></pre></td></tr>
<tr><td><pre class="example"><code>P4_g&gt;</code></pre></td><td><pre class="example"><code>P4__g_g</code></pre></td></tr>
</table>
</div>

<p>Throughout this section, the variable <var>c</var> is either a constraint
in the abstract sense, or a constant from <code>enum constraint_num</code>;
the variable <var>m</var> is a mangled constraint name (usually as part of
a larger identifier).
</p>
<dl>
<dt><a name="index-constraint_005fnum"></a>Enum: <strong>constraint_num</strong></dt>
<dd><p>For each machine-specific constraint, there is a corresponding
enumeration constant: &lsquo;<samp>CONSTRAINT_</samp>&rsquo; plus the mangled name of the
constraint.  Functions that take an <code>enum constraint_num</code> as an
argument expect one of these constants.
</p>
<p>Machine-independent constraints do not have associated constants.
This may change in the future.
</p></dd></dl>

<dl>
<dt><a name="index-satisfies_005fconstraint_005f"></a>Function: <em>inline bool</em> <strong>satisfies_constraint_</strong> <em><var>m</var> (rtx <var>exp</var>)</em></dt>
<dd><p>For each machine-specific, non-register constraint <var>m</var>, there is
one of these functions; it returns <code>true</code> if <var>exp</var> satisfies the
constraint.  These functions are only visible if <samp>rtl.h</samp> was included
before <samp>tm_p.h</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-constraint_005fsatisfied_005fp"></a>Function: <em>bool</em> <strong>constraint_satisfied_p</strong> <em>(rtx <var>exp</var>, enum constraint_num <var>c</var>)</em></dt>
<dd><p>Like the <code>satisfies_constraint_<var>m</var></code> functions, but the
constraint to test is given as an argument, <var>c</var>.  If <var>c</var>
specifies a register constraint, this function will always return
<code>false</code>.
</p></dd></dl>

<dl>
<dt><a name="index-regclass_005ffor_005fconstraint"></a>Function: <em>enum reg_class</em> <strong>regclass_for_constraint</strong> <em>(enum constraint_num <var>c</var>)</em></dt>
<dd><p>Returns the register class associated with <var>c</var>.  If <var>c</var> is not
a register constraint, or those registers are not available for the
currently selected subtarget, returns <code>NO_REGS</code>.
</p></dd></dl>

<p>Here is an example use of <code>satisfies_constraint_<var>m</var></code>.  In
peephole optimizations (see <a href="#Peephole-Definitions">Peephole Definitions</a>), operand
constraint strings are ignored, so if there are relevant constraints,
they must be tested in the C condition.  In the example, the
optimization is applied if operand 2 does <em>not</em> satisfy the
&lsquo;<samp>K</samp>&rsquo; constraint.  (This is a simplified version of a peephole
definition from the i386 machine description.)
</p>
<div class="smallexample">
<pre class="smallexample">(define_peephole2
  [(match_scratch:SI 3 &quot;r&quot;)
   (set (match_operand:SI 0 &quot;register_operand&quot; &quot;&quot;)
        (mult:SI (match_operand:SI 1 &quot;memory_operand&quot; &quot;&quot;)
                 (match_operand:SI 2 &quot;immediate_operand&quot; &quot;&quot;)))]

  &quot;!satisfies_constraint_K (operands[2])&quot;

  [(set (match_dup 3) (match_dup 1))
   (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))]

  &quot;&quot;)
</pre></div>

<hr>
<a name="Standard-Names"></a>
<div class="header">
<p>
Next: <a href="#Pattern-Ordering" accesskey="n" rel="next">Pattern Ordering</a>, Previous: <a href="#Constraints" accesskey="p" rel="prev">Constraints</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Standard-Pattern-Names-For-Generation"></a>
<h3 class="section">16.9 Standard Pattern Names For Generation</h3>
<a name="index-standard-pattern-names"></a>
<a name="index-pattern-names"></a>
<a name="index-names_002c-pattern"></a>

<p>Here is a table of the instruction names that are meaningful in the RTL
generation pass of the compiler.  Giving one of these names to an
instruction pattern tells the RTL generation pass that it can use the
pattern to accomplish a certain task.
</p>
<dl compact="compact">
<dd><a name="index-movm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>mov<var>m</var></samp>&rsquo;</dt>
<dd><p>Here <var>m</var> stands for a two-letter machine mode name, in lowercase.
This instruction pattern moves data with that machine mode from operand
1 to operand 0.  For example, &lsquo;<samp>movsi</samp>&rsquo; moves full-word data.
</p>
<p>If operand 0 is a <code>subreg</code> with mode <var>m</var> of a register whose
own mode is wider than <var>m</var>, the effect of this instruction is
to store the specified value in the part of the register that corresponds
to mode <var>m</var>.  Bits outside of <var>m</var>, but which are within the
same target word as the <code>subreg</code> are undefined.  Bits which are
outside the target word are left unchanged.
</p>
<p>This class of patterns is special in several ways.  First of all, each
of these names up to and including full word size <em>must</em> be defined,
because there is no other way to copy a datum from one place to another.
If there are patterns accepting operands in larger modes,
&lsquo;<samp>mov<var>m</var></samp>&rsquo; must be defined for integer modes of those sizes.
</p>
<p>Second, these patterns are not used solely in the RTL generation pass.
Even the reload pass can generate move insns to copy values from stack
slots into temporary registers.  When it does so, one of the operands is
a hard register and the other is an operand that can need to be reloaded
into a register.
</p>
<a name="index-force_005freg"></a>
<p>Therefore, when given such a pair of operands, the pattern must generate
RTL which needs no reloading and needs no temporary registers&mdash;no
registers other than the operands.  For example, if you support the
pattern with a <code>define_expand</code>, then in such a case the
<code>define_expand</code> mustn&rsquo;t call <code>force_reg</code> or any other such
function which might generate new pseudo registers.
</p>
<p>This requirement exists even for subword modes on a RISC machine where
fetching those modes from memory normally requires several insns and
some temporary registers.
</p>
<a name="index-change_005faddress"></a>
<p>During reload a memory reference with an invalid address may be passed
as an operand.  Such an address will be replaced with a valid address
later in the reload pass.  In this case, nothing may be done with the
address except to use it as it stands.  If it is copied, it will not be
replaced with a valid address.  No attempt should be made to make such
an address into a valid address and no routine (such as
<code>change_address</code>) that will do so may be called.  Note that
<code>general_operand</code> will fail when applied to such an address.
</p>
<a name="index-reload_005fin_005fprogress"></a>
<p>The global variable <code>reload_in_progress</code> (which must be explicitly
declared if required) can be used to determine whether such special
handling is required.
</p>
<p>The variety of operands that have reloads depends on the rest of the
machine description, but typically on a RISC machine these can only be
pseudo registers that did not get hard registers, while on other
machines explicit memory references will get optional reloads.
</p>
<p>If a scratch register is required to move an object to or from memory,
it can be allocated using <code>gen_reg_rtx</code> prior to life analysis.
</p>
<p>If there are cases which need scratch registers during or after reload,
you must provide an appropriate secondary_reload target hook.
</p>
<a name="index-can_005fcreate_005fpseudo_005fp"></a>
<p>The macro <code>can_create_pseudo_p</code> can be used to determine if it
is unsafe to create new pseudo registers.  If this variable is nonzero, then
it is unsafe to call <code>gen_reg_rtx</code> to allocate a new pseudo.
</p>
<p>The constraints on a &lsquo;<samp>mov<var>m</var></samp>&rsquo; must permit moving any hard
register to any other hard register provided that
<code>HARD_REGNO_MODE_OK</code> permits mode <var>m</var> in both registers and
<code>TARGET_REGISTER_MOVE_COST</code> applied to their classes returns a value
of 2.
</p>
<p>It is obligatory to support floating point &lsquo;<samp>mov<var>m</var></samp>&rsquo;
instructions into and out of any registers that can hold fixed point
values, because unions and structures (which have modes <code>SImode</code> or
<code>DImode</code>) can be in those registers and they may have floating
point members.
</p>
<p>There may also be a need to support fixed point &lsquo;<samp>mov<var>m</var></samp>&rsquo;
instructions in and out of floating point registers.  Unfortunately, I
have forgotten why this was so, and I don&rsquo;t know whether it is still
true.  If <code>HARD_REGNO_MODE_OK</code> rejects fixed point values in
floating point registers, then the constraints of the fixed point
&lsquo;<samp>mov<var>m</var></samp>&rsquo; instructions must be designed to avoid ever trying to
reload into a floating point register.
</p>
<a name="index-reload_005fin-instruction-pattern"></a>
<a name="index-reload_005fout-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>reload_in<var>m</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>reload_out<var>m</var></samp>&rsquo;</dt>
<dd><p>These named patterns have been obsoleted by the target hook
<code>secondary_reload</code>.
</p>
<p>Like &lsquo;<samp>mov<var>m</var></samp>&rsquo;, but used when a scratch register is required to
move between operand 0 and operand 1.  Operand 2 describes the scratch
register.  See the discussion of the <code>SECONDARY_RELOAD_CLASS</code>
macro in see <a href="#Register-Classes">Register Classes</a>.
</p>
<p>There are special restrictions on the form of the <code>match_operand</code>s
used in these patterns.  First, only the predicate for the reload
operand is examined, i.e., <code>reload_in</code> examines operand 1, but not
the predicates for operand 0 or 2.  Second, there may be only one
alternative in the constraints.  Third, only a single register class
letter may be used for the constraint; subsequent constraint letters
are ignored.  As a special exception, an empty constraint string
matches the <code>ALL_REGS</code> register class.  This may relieve ports
of the burden of defining an <code>ALL_REGS</code> constraint letter just
for these patterns.
</p>
<a name="index-movstrictm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>movstrict<var>m</var></samp>&rsquo;</dt>
<dd><p>Like &lsquo;<samp>mov<var>m</var></samp>&rsquo; except that if operand 0 is a <code>subreg</code>
with mode <var>m</var> of a register whose natural mode is wider,
the &lsquo;<samp>movstrict<var>m</var></samp>&rsquo; instruction is guaranteed not to alter
any of the register except the part which belongs to mode <var>m</var>.
</p>
<a name="index-movmisalignm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>movmisalign<var>m</var></samp>&rsquo;</dt>
<dd><p>This variant of a move pattern is designed to load or store a value
from a memory address that is not naturally aligned for its mode.
For a store, the memory will be in operand 0; for a load, the memory
will be in operand 1.  The other operand is guaranteed not to be a
memory, so that it&rsquo;s easy to tell whether this is a load or store.
</p>
<p>This pattern is used by the autovectorizer, and when expanding a
<code>MISALIGNED_INDIRECT_REF</code> expression.
</p>
<a name="index-load_005fmultiple-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>load_multiple</samp>&rsquo;</dt>
<dd><p>Load several consecutive memory locations into consecutive registers.
Operand 0 is the first of the consecutive registers, operand 1
is the first memory location, and operand 2 is a constant: the
number of consecutive registers.
</p>
<p>Define this only if the target machine really has such an instruction;
do not define this if the most efficient way of loading consecutive
registers from memory is to do them one at a time.
</p>
<p>On some machines, there are restrictions as to which consecutive
registers can be stored into memory, such as particular starting or
ending register numbers or only a range of valid counts.  For those
machines, use a <code>define_expand</code> (see <a href="#Expander-Definitions">Expander Definitions</a>)
and make the pattern fail if the restrictions are not met.
</p>
<p>Write the generated insn as a <code>parallel</code> with elements being a
<code>set</code> of one register from the appropriate memory location (you may
also need <code>use</code> or <code>clobber</code> elements).  Use a
<code>match_parallel</code> (see <a href="#RTL-Template">RTL Template</a>) to recognize the insn.  See
<samp>rs6000.md</samp> for examples of the use of this insn pattern.
</p>
<a name="index-store_005fmultiple-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>store_multiple</samp>&rsquo;</dt>
<dd><p>Similar to &lsquo;<samp>load_multiple</samp>&rsquo;, but store several consecutive registers
into consecutive memory locations.  Operand 0 is the first of the
consecutive memory locations, operand 1 is the first register, and
operand 2 is a constant: the number of consecutive registers.
</p>
<a name="index-vec_005fload_005flanesmn-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_load_lanes<var>m</var><var>n</var></samp>&rsquo;</dt>
<dd><p>Perform an interleaved load of several vectors from memory operand 1
into register operand 0.  Both operands have mode <var>m</var>.  The register
operand is viewed as holding consecutive vectors of mode <var>n</var>,
while the memory operand is a flat array that contains the same number
of elements.  The operation is equivalent to:
</p>
<div class="smallexample">
<pre class="smallexample">int c = GET_MODE_SIZE (<var>m</var>) / GET_MODE_SIZE (<var>n</var>);
for (j = 0; j &lt; GET_MODE_NUNITS (<var>n</var>); j++)
  for (i = 0; i &lt; c; i++)
    operand0[i][j] = operand1[j * c + i];
</pre></div>

<p>For example, &lsquo;<samp>vec_load_lanestiv4hi</samp>&rsquo; loads 8 16-bit values
from memory into a register of mode &lsquo;<samp>TI</samp>&rsquo;.  The register
contains two consecutive vectors of mode &lsquo;<samp>V4HI</samp>&rsquo;.
</p>
<p>This pattern can only be used if:
</p><div class="smallexample">
<pre class="smallexample">TARGET_ARRAY_MODE_SUPPORTED_P (<var>n</var>, <var>c</var>)
</pre></div>
<p>is true.  GCC assumes that, if a target supports this kind of
instruction for some mode <var>n</var>, it also supports unaligned
loads for vectors of mode <var>n</var>.
</p>
<a name="index-vec_005fstore_005flanesmn-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_store_lanes<var>m</var><var>n</var></samp>&rsquo;</dt>
<dd><p>Equivalent to &lsquo;<samp>vec_load_lanes<var>m</var><var>n</var></samp>&rsquo;, with the memory
and register operands reversed.  That is, the instruction is
equivalent to:
</p>
<div class="smallexample">
<pre class="smallexample">int c = GET_MODE_SIZE (<var>m</var>) / GET_MODE_SIZE (<var>n</var>);
for (j = 0; j &lt; GET_MODE_NUNITS (<var>n</var>); j++)
  for (i = 0; i &lt; c; i++)
    operand0[j * c + i] = operand1[i][j];
</pre></div>

<p>for a memory operand 0 and register operand 1.
</p>
<a name="index-vec_005fsetm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_set<var>m</var></samp>&rsquo;</dt>
<dd><p>Set given field in the vector value.  Operand 0 is the vector to modify,
operand 1 is new value of field and operand 2 specify the field index.
</p>
<a name="index-vec_005fextractm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_extract<var>m</var></samp>&rsquo;</dt>
<dd><p>Extract given field from the vector value.  Operand 1 is the vector, operand 2
specify field index and operand 0 place to store value into.
</p>
<a name="index-vec_005finitm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_init<var>m</var></samp>&rsquo;</dt>
<dd><p>Initialize the vector to given values.  Operand 0 is the vector to initialize
and operand 1 is parallel containing values for individual fields.
</p>
<a name="index-vcondmn-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vcond<var>m</var><var>n</var></samp>&rsquo;</dt>
<dd><p>Output a conditional vector move.  Operand 0 is the destination to
receive a combination of operand 1 and operand 2, which are of mode <var>m</var>,
dependent on the outcome of the predicate in operand 3 which is a
vector comparison with operands of mode <var>n</var> in operands 4 and 5.  The
modes <var>m</var> and <var>n</var> should have the same size.  Operand 0
will be set to the value <var>op1</var> &amp; <var>msk</var> | <var>op2</var> &amp; ~<var>msk</var>
where <var>msk</var> is computed by element-wise evaluation of the vector
comparison with a truth value of all-ones and a false value of all-zeros.
</p>
<a name="index-vec_005fpermm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_perm<var>m</var></samp>&rsquo;</dt>
<dd><p>Output a (variable) vector permutation.  Operand 0 is the destination
to receive elements from operand 1 and operand 2, which are of mode
<var>m</var>.  Operand 3 is the <em>selector</em>.  It is an integral mode
vector of the same width and number of elements as mode <var>m</var>.
</p>
<p>The input elements are numbered from 0 in operand 1 through
<em>2*<var>N</var>-1</em> in operand 2.  The elements of the selector must
be computed modulo <em>2*<var>N</var></em>.  Note that if
<code>rtx_equal_p(operand1, operand2)</code>, this can be implemented
with just operand 1 and selector elements modulo <var>N</var>.
</p>
<p>In order to make things easy for a number of targets, if there is no
&lsquo;<samp>vec_perm</samp>&rsquo; pattern for mode <var>m</var>, but there is for mode <var>q</var>
where <var>q</var> is a vector of <code>QImode</code> of the same width as <var>m</var>,
the middle-end will lower the mode <var>m</var> <code>VEC_PERM_EXPR</code> to
mode <var>q</var>.
</p>
<a name="index-vec_005fperm_005fconstm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_perm_const<var>m</var></samp>&rsquo;</dt>
<dd><p>Like &lsquo;<samp>vec_perm</samp>&rsquo; except that the permutation is a compile-time
constant.  That is, operand 3, the <em>selector</em>, is a <code>CONST_VECTOR</code>.
</p>
<p>Some targets cannot perform a permutation with a variable selector,
but can efficiently perform a constant permutation.  Further, the
target hook <code>vec_perm_ok</code> is queried to determine if the 
specific constant permutation is available efficiently; the named
pattern is never expanded without <code>vec_perm_ok</code> returning true.
</p>
<p>There is no need for a target to supply both &lsquo;<samp>vec_perm<var>m</var></samp>&rsquo;
and &lsquo;<samp>vec_perm_const<var>m</var></samp>&rsquo; if the former can trivially implement
the operation with, say, the vector constant loaded into a register.
</p>
<a name="index-pushm1-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>push<var>m</var>1</samp>&rsquo;</dt>
<dd><p>Output a push instruction.  Operand 0 is value to push.  Used only when
<code>PUSH_ROUNDING</code> is defined.  For historical reason, this pattern may be
missing and in such case an <code>mov</code> expander is used instead, with a
<code>MEM</code> expression forming the push operation.  The <code>mov</code> expander
method is deprecated.
</p>
<a name="index-addm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>add<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Add operand 2 and operand 1, storing the result in operand 0.  All operands
must have mode <var>m</var>.  This can be used even on two-address machines, by
means of constraints requiring operands 1 and 0 to be the same location.
</p>
<a name="index-ssaddm3-instruction-pattern"></a>
<a name="index-usaddm3-instruction-pattern"></a>
<a name="index-subm3-instruction-pattern"></a>
<a name="index-sssubm3-instruction-pattern"></a>
<a name="index-ussubm3-instruction-pattern"></a>
<a name="index-mulm3-instruction-pattern"></a>
<a name="index-ssmulm3-instruction-pattern"></a>
<a name="index-usmulm3-instruction-pattern"></a>
<a name="index-divm3-instruction-pattern"></a>
<a name="index-ssdivm3-instruction-pattern"></a>
<a name="index-udivm3-instruction-pattern"></a>
<a name="index-usdivm3-instruction-pattern"></a>
<a name="index-modm3-instruction-pattern"></a>
<a name="index-umodm3-instruction-pattern"></a>
<a name="index-uminm3-instruction-pattern"></a>
<a name="index-umaxm3-instruction-pattern"></a>
<a name="index-andm3-instruction-pattern"></a>
<a name="index-iorm3-instruction-pattern"></a>
<a name="index-xorm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ssadd<var>m</var>3</samp>&rsquo;, &lsquo;<samp>usadd<var>m</var>3</samp>&rsquo;</dt>
<dt>&lsquo;<samp>sub<var>m</var>3</samp>&rsquo;, &lsquo;<samp>sssub<var>m</var>3</samp>&rsquo;, &lsquo;<samp>ussub<var>m</var>3</samp>&rsquo;</dt>
<dt>&lsquo;<samp>mul<var>m</var>3</samp>&rsquo;, &lsquo;<samp>ssmul<var>m</var>3</samp>&rsquo;, &lsquo;<samp>usmul<var>m</var>3</samp>&rsquo;</dt>
<dt>&lsquo;<samp>div<var>m</var>3</samp>&rsquo;, &lsquo;<samp>ssdiv<var>m</var>3</samp>&rsquo;</dt>
<dt>&lsquo;<samp>udiv<var>m</var>3</samp>&rsquo;, &lsquo;<samp>usdiv<var>m</var>3</samp>&rsquo;</dt>
<dt>&lsquo;<samp>mod<var>m</var>3</samp>&rsquo;, &lsquo;<samp>umod<var>m</var>3</samp>&rsquo;</dt>
<dt>&lsquo;<samp>umin<var>m</var>3</samp>&rsquo;, &lsquo;<samp>umax<var>m</var>3</samp>&rsquo;</dt>
<dt>&lsquo;<samp>and<var>m</var>3</samp>&rsquo;, &lsquo;<samp>ior<var>m</var>3</samp>&rsquo;, &lsquo;<samp>xor<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Similar, for other arithmetic operations.
</p>
<a name="index-fmam4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fma<var>m</var>4</samp>&rsquo;</dt>
<dd><p>Multiply operand 2 and operand 1, then add operand 3, storing the
result in operand 0 without doing an intermediate rounding step.  All
operands must have mode <var>m</var>.  This pattern is used to implement
the <code>fma</code>, <code>fmaf</code>, and <code>fmal</code> builtin functions from
the ISO C99 standard.
</p>
<a name="index-fmsm4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fms<var>m</var>4</samp>&rsquo;</dt>
<dd><p>Like <code>fma<var>m</var>4</code>, except operand 3 subtracted from the
product instead of added to the product.  This is represented
in the rtl as
</p>
<div class="smallexample">
<pre class="smallexample">(fma:<var>m</var> <var>op1</var> <var>op2</var> (neg:<var>m</var> <var>op3</var>))
</pre></div>

<a name="index-fnmam4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fnma<var>m</var>4</samp>&rsquo;</dt>
<dd><p>Like <code>fma<var>m</var>4</code> except that the intermediate product
is negated before being added to operand 3.  This is represented
in the rtl as
</p>
<div class="smallexample">
<pre class="smallexample">(fma:<var>m</var> (neg:<var>m</var> <var>op1</var>) <var>op2</var> <var>op3</var>)
</pre></div>

<a name="index-fnmsm4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fnms<var>m</var>4</samp>&rsquo;</dt>
<dd><p>Like <code>fms<var>m</var>4</code> except that the intermediate product
is negated before subtracting operand 3.  This is represented
in the rtl as
</p>
<div class="smallexample">
<pre class="smallexample">(fma:<var>m</var> (neg:<var>m</var> <var>op1</var>) <var>op2</var> (neg:<var>m</var> <var>op3</var>))
</pre></div>

<a name="index-minm3-instruction-pattern"></a>
<a name="index-maxm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>smin<var>m</var>3</samp>&rsquo;, &lsquo;<samp>smax<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Signed minimum and maximum operations.  When used with floating point,
if both operands are zeros, or if either operand is <code>NaN</code>, then
it is unspecified which of the two operands is returned as the result.
</p>
<a name="index-reduc_005fsmin_005fm-instruction-pattern"></a>
<a name="index-reduc_005fsmax_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>reduc_smin_<var>m</var></samp>&rsquo;, &lsquo;<samp>reduc_smax_<var>m</var></samp>&rsquo;</dt>
<dd><p>Find the signed minimum/maximum of the elements of a vector. The vector is
operand 1, and the scalar result is stored in the least significant bits of
operand 0 (also a vector). The output and input vector should have the same
modes.
</p>
<a name="index-reduc_005fumin_005fm-instruction-pattern"></a>
<a name="index-reduc_005fumax_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>reduc_umin_<var>m</var></samp>&rsquo;, &lsquo;<samp>reduc_umax_<var>m</var></samp>&rsquo;</dt>
<dd><p>Find the unsigned minimum/maximum of the elements of a vector. The vector is
operand 1, and the scalar result is stored in the least significant bits of
operand 0 (also a vector). The output and input vector should have the same
modes.
</p>
<a name="index-reduc_005fsplus_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>reduc_splus_<var>m</var></samp>&rsquo;</dt>
<dd><p>Compute the sum of the signed elements of a vector. The vector is operand 1,
and the scalar result is stored in the least significant bits of operand 0
(also a vector). The output and input vector should have the same modes.
</p>
<a name="index-reduc_005fuplus_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>reduc_uplus_<var>m</var></samp>&rsquo;</dt>
<dd><p>Compute the sum of the unsigned elements of a vector. The vector is operand 1,
and the scalar result is stored in the least significant bits of operand 0
(also a vector). The output and input vector should have the same modes.
</p>
<a name="index-sdot_005fprodm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sdot_prod<var>m</var></samp>&rsquo;</dt>
<dd><a name="index-udot_005fprodm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>udot_prod<var>m</var></samp>&rsquo;</dt>
<dd><p>Compute the sum of the products of two signed/unsigned elements.
Operand 1 and operand 2 are of the same mode. Their product, which is of a
wider mode, is computed and added to operand 3. Operand 3 is of a mode equal or
wider than the mode of the product. The result is placed in operand 0, which
is of the same mode as operand 3.
</p>
<a name="index-ssum_005fwidenm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ssum_widen<var>m3</var></samp>&rsquo;</dt>
<dd><a name="index-usum_005fwidenm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>usum_widen<var>m3</var></samp>&rsquo;</dt>
<dd><p>Operands 0 and 2 are of the same mode, which is wider than the mode of
operand 1. Add operand 1 to operand 2 and place the widened result in
operand 0. (This is used express accumulation of elements into an accumulator
of a wider mode.)
</p>
<a name="index-vec_005fshl_005fm-instruction-pattern"></a>
<a name="index-vec_005fshr_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_shl_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_shr_<var>m</var></samp>&rsquo;</dt>
<dd><p>Whole vector left/right shift in bits.
Operand 1 is a vector to be shifted.
Operand 2 is an integer shift amount in bits.
Operand 0 is where the resulting shifted vector is stored.
The output and input vectors should have the same modes.
</p>
<a name="index-vec_005fpack_005ftrunc_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_pack_trunc_<var>m</var></samp>&rsquo;</dt>
<dd><p>Narrow (demote) and merge the elements of two vectors. Operands 1 and 2
are vectors of the same mode having N integral or floating point elements
of size S.  Operand 0 is the resulting vector in which 2*N elements of
size N/2 are concatenated after narrowing them down using truncation.
</p>
<a name="index-vec_005fpack_005fssat_005fm-instruction-pattern"></a>
<a name="index-vec_005fpack_005fusat_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_pack_ssat_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_pack_usat_<var>m</var></samp>&rsquo;</dt>
<dd><p>Narrow (demote) and merge the elements of two vectors.  Operands 1 and 2
are vectors of the same mode having N integral elements of size S.
Operand 0 is the resulting vector in which the elements of the two input
vectors are concatenated after narrowing them down using signed/unsigned
saturating arithmetic.
</p>
<a name="index-vec_005fpack_005fsfix_005ftrunc_005fm-instruction-pattern"></a>
<a name="index-vec_005fpack_005fufix_005ftrunc_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_pack_sfix_trunc_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_pack_ufix_trunc_<var>m</var></samp>&rsquo;</dt>
<dd><p>Narrow, convert to signed/unsigned integral type and merge the elements
of two vectors.  Operands 1 and 2 are vectors of the same mode having N
floating point elements of size S.  Operand 0 is the resulting vector
in which 2*N elements of size N/2 are concatenated.
</p>
<a name="index-vec_005funpacks_005fhi_005fm-instruction-pattern"></a>
<a name="index-vec_005funpacks_005flo_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_unpacks_hi_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_unpacks_lo_<var>m</var></samp>&rsquo;</dt>
<dd><p>Extract and widen (promote) the high/low part of a vector of signed
integral or floating point elements.  The input vector (operand 1) has N
elements of size S.  Widen (promote) the high/low elements of the vector
using signed or floating point extension and place the resulting N/2
values of size 2*S in the output vector (operand 0).
</p>
<a name="index-vec_005funpacku_005fhi_005fm-instruction-pattern"></a>
<a name="index-vec_005funpacku_005flo_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_unpacku_hi_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_unpacku_lo_<var>m</var></samp>&rsquo;</dt>
<dd><p>Extract and widen (promote) the high/low part of a vector of unsigned
integral elements.  The input vector (operand 1) has N elements of size S.
Widen (promote) the high/low elements of the vector using zero extension and
place the resulting N/2 values of size 2*S in the output vector (operand 0).
</p>
<a name="index-vec_005funpacks_005ffloat_005fhi_005fm-instruction-pattern"></a>
<a name="index-vec_005funpacks_005ffloat_005flo_005fm-instruction-pattern"></a>
<a name="index-vec_005funpacku_005ffloat_005fhi_005fm-instruction-pattern"></a>
<a name="index-vec_005funpacku_005ffloat_005flo_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_unpacks_float_hi_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_unpacks_float_lo_<var>m</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>vec_unpacku_float_hi_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_unpacku_float_lo_<var>m</var></samp>&rsquo;</dt>
<dd><p>Extract, convert to floating point type and widen the high/low part of a
vector of signed/unsigned integral elements.  The input vector (operand 1)
has N elements of size S.  Convert the high/low elements of the vector using
floating point conversion and place the resulting N/2 values of size 2*S in
the output vector (operand 0).
</p>
<a name="index-vec_005fwiden_005fumult_005fhi_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fumult_005flo_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fsmult_005fhi_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fsmult_005flo_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fumult_005feven_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fumult_005fodd_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fsmult_005feven_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fsmult_005fodd_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_widen_umult_hi_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_widen_umult_lo_<var>m</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>vec_widen_smult_hi_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_widen_smult_lo_<var>m</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>vec_widen_umult_even_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_widen_umult_odd_<var>m</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>vec_widen_smult_even_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_widen_smult_odd_<var>m</var></samp>&rsquo;</dt>
<dd><p>Signed/Unsigned widening multiplication.  The two inputs (operands 1 and 2)
are vectors with N signed/unsigned elements of size S.  Multiply the high/low
or even/odd elements of the two vectors, and put the N/2 products of size 2*S
in the output vector (operand 0).
</p>
<a name="index-vec_005fwiden_005fushiftl_005fhi_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fushiftl_005flo_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fsshiftl_005fhi_005fm-instruction-pattern"></a>
<a name="index-vec_005fwiden_005fsshiftl_005flo_005fm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vec_widen_ushiftl_hi_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_widen_ushiftl_lo_<var>m</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>vec_widen_sshiftl_hi_<var>m</var></samp>&rsquo;, &lsquo;<samp>vec_widen_sshiftl_lo_<var>m</var></samp>&rsquo;</dt>
<dd><p>Signed/Unsigned widening shift left.  The first input (operand 1) is a vector
with N signed/unsigned elements of size S.  Operand 2 is a constant.  Shift
the high/low elements of operand 1, and put the N/2 results of size 2*S in the
output vector (operand 0).
</p>
<a name="index-mulhisi3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>mulhisi3</samp>&rsquo;</dt>
<dd><p>Multiply operands 1 and 2, which have mode <code>HImode</code>, and store
a <code>SImode</code> product in operand 0.
</p>
<a name="index-mulqihi3-instruction-pattern"></a>
<a name="index-mulsidi3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>mulqihi3</samp>&rsquo;, &lsquo;<samp>mulsidi3</samp>&rsquo;</dt>
<dd><p>Similar widening-multiplication instructions of other widths.
</p>
<a name="index-umulqihi3-instruction-pattern"></a>
<a name="index-umulhisi3-instruction-pattern"></a>
<a name="index-umulsidi3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>umulqihi3</samp>&rsquo;, &lsquo;<samp>umulhisi3</samp>&rsquo;, &lsquo;<samp>umulsidi3</samp>&rsquo;</dt>
<dd><p>Similar widening-multiplication instructions that do unsigned
multiplication.
</p>
<a name="index-usmulqihi3-instruction-pattern"></a>
<a name="index-usmulhisi3-instruction-pattern"></a>
<a name="index-usmulsidi3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>usmulqihi3</samp>&rsquo;, &lsquo;<samp>usmulhisi3</samp>&rsquo;, &lsquo;<samp>usmulsidi3</samp>&rsquo;</dt>
<dd><p>Similar widening-multiplication instructions that interpret the first
operand as unsigned and the second operand as signed, then do a signed
multiplication.
</p>
<a name="index-smulm3_005fhighpart-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>smul<var>m</var>3_highpart</samp>&rsquo;</dt>
<dd><p>Perform a signed multiplication of operands 1 and 2, which have mode
<var>m</var>, and store the most significant half of the product in operand 0.
The least significant half of the product is discarded.
</p>
<a name="index-umulm3_005fhighpart-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>umul<var>m</var>3_highpart</samp>&rsquo;</dt>
<dd><p>Similar, but the multiplication is unsigned.
</p>
<a name="index-maddmn4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>madd<var>m</var><var>n</var>4</samp>&rsquo;</dt>
<dd><p>Multiply operands 1 and 2, sign-extend them to mode <var>n</var>, add
operand 3, and store the result in operand 0.  Operands 1 and 2
have mode <var>m</var> and operands 0 and 3 have mode <var>n</var>.
Both modes must be integer or fixed-point modes and <var>n</var> must be twice
the size of <var>m</var>.
</p>
<p>In other words, <code>madd<var>m</var><var>n</var>4</code> is like
<code>mul<var>m</var><var>n</var>3</code> except that it also adds operand 3.
</p>
<p>These instructions are not allowed to <code>FAIL</code>.
</p>
<a name="index-umaddmn4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>umadd<var>m</var><var>n</var>4</samp>&rsquo;</dt>
<dd><p>Like <code>madd<var>m</var><var>n</var>4</code>, but zero-extend the multiplication
operands instead of sign-extending them.
</p>
<a name="index-ssmaddmn4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ssmadd<var>m</var><var>n</var>4</samp>&rsquo;</dt>
<dd><p>Like <code>madd<var>m</var><var>n</var>4</code>, but all involved operations must be
signed-saturating.
</p>
<a name="index-usmaddmn4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>usmadd<var>m</var><var>n</var>4</samp>&rsquo;</dt>
<dd><p>Like <code>umadd<var>m</var><var>n</var>4</code>, but all involved operations must be
unsigned-saturating.
</p>
<a name="index-msubmn4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>msub<var>m</var><var>n</var>4</samp>&rsquo;</dt>
<dd><p>Multiply operands 1 and 2, sign-extend them to mode <var>n</var>, subtract the
result from operand 3, and store the result in operand 0.  Operands 1 and 2
have mode <var>m</var> and operands 0 and 3 have mode <var>n</var>.
Both modes must be integer or fixed-point modes and <var>n</var> must be twice
the size of <var>m</var>.
</p>
<p>In other words, <code>msub<var>m</var><var>n</var>4</code> is like
<code>mul<var>m</var><var>n</var>3</code> except that it also subtracts the result
from operand 3.
</p>
<p>These instructions are not allowed to <code>FAIL</code>.
</p>
<a name="index-umsubmn4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>umsub<var>m</var><var>n</var>4</samp>&rsquo;</dt>
<dd><p>Like <code>msub<var>m</var><var>n</var>4</code>, but zero-extend the multiplication
operands instead of sign-extending them.
</p>
<a name="index-ssmsubmn4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ssmsub<var>m</var><var>n</var>4</samp>&rsquo;</dt>
<dd><p>Like <code>msub<var>m</var><var>n</var>4</code>, but all involved operations must be
signed-saturating.
</p>
<a name="index-usmsubmn4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>usmsub<var>m</var><var>n</var>4</samp>&rsquo;</dt>
<dd><p>Like <code>umsub<var>m</var><var>n</var>4</code>, but all involved operations must be
unsigned-saturating.
</p>
<a name="index-divmodm4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>divmod<var>m</var>4</samp>&rsquo;</dt>
<dd><p>Signed division that produces both a quotient and a remainder.
Operand 1 is divided by operand 2 to produce a quotient stored
in operand 0 and a remainder stored in operand 3.
</p>
<p>For machines with an instruction that produces both a quotient and a
remainder, provide a pattern for &lsquo;<samp>divmod<var>m</var>4</samp>&rsquo; but do not
provide patterns for &lsquo;<samp>div<var>m</var>3</samp>&rsquo; and &lsquo;<samp>mod<var>m</var>3</samp>&rsquo;.  This
allows optimization in the relatively common case when both the quotient
and remainder are computed.
</p>
<p>If an instruction that just produces a quotient or just a remainder
exists and is more efficient than the instruction that produces both,
write the output routine of &lsquo;<samp>divmod<var>m</var>4</samp>&rsquo; to call
<code>find_reg_note</code> and look for a <code>REG_UNUSED</code> note on the
quotient or remainder and generate the appropriate instruction.
</p>
<a name="index-udivmodm4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>udivmod<var>m</var>4</samp>&rsquo;</dt>
<dd><p>Similar, but does unsigned division.
</p>
<a name="shift-patterns"></a><a name="index-ashlm3-instruction-pattern"></a>
<a name="index-ssashlm3-instruction-pattern"></a>
<a name="index-usashlm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ashl<var>m</var>3</samp>&rsquo;, &lsquo;<samp>ssashl<var>m</var>3</samp>&rsquo;, &lsquo;<samp>usashl<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Arithmetic-shift operand 1 left by a number of bits specified by operand
2, and store the result in operand 0.  Here <var>m</var> is the mode of
operand 0 and operand 1; operand 2&rsquo;s mode is specified by the
instruction pattern, and the compiler will convert the operand to that
mode before generating the instruction.  The meaning of out-of-range shift
counts can optionally be specified by <code>TARGET_SHIFT_TRUNCATION_MASK</code>.
See <a href="#TARGET_005fSHIFT_005fTRUNCATION_005fMASK">TARGET_SHIFT_TRUNCATION_MASK</a>.  Operand 2 is always a scalar type.
</p>
<a name="index-ashrm3-instruction-pattern"></a>
<a name="index-lshrm3-instruction-pattern"></a>
<a name="index-rotlm3-instruction-pattern"></a>
<a name="index-rotrm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ashr<var>m</var>3</samp>&rsquo;, &lsquo;<samp>lshr<var>m</var>3</samp>&rsquo;, &lsquo;<samp>rotl<var>m</var>3</samp>&rsquo;, &lsquo;<samp>rotr<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Other shift and rotate instructions, analogous to the
<code>ashl<var>m</var>3</code> instructions.  Operand 2 is always a scalar type.
</p>
<a name="index-vashlm3-instruction-pattern"></a>
<a name="index-vashrm3-instruction-pattern"></a>
<a name="index-vlshrm3-instruction-pattern"></a>
<a name="index-vrotlm3-instruction-pattern"></a>
<a name="index-vrotrm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>vashl<var>m</var>3</samp>&rsquo;, &lsquo;<samp>vashr<var>m</var>3</samp>&rsquo;, &lsquo;<samp>vlshr<var>m</var>3</samp>&rsquo;, &lsquo;<samp>vrotl<var>m</var>3</samp>&rsquo;, &lsquo;<samp>vrotr<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Vector shift and rotate instructions that take vectors as operand 2
instead of a scalar type.
</p>
<a name="index-bswapm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>bswap<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Reverse the order of bytes of operand 1 and store the result in operand 0.
</p>
<a name="index-negm2-instruction-pattern"></a>
<a name="index-ssnegm2-instruction-pattern"></a>
<a name="index-usnegm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>neg<var>m</var>2</samp>&rsquo;, &lsquo;<samp>ssneg<var>m</var>2</samp>&rsquo;, &lsquo;<samp>usneg<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Negate operand 1 and store the result in operand 0.
</p>
<a name="index-absm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>abs<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the absolute value of operand 1 into operand 0.
</p>
<a name="index-sqrtm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sqrt<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the square root of operand 1 into operand 0.
</p>
<p>The <code>sqrt</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>sqrtf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-fmodm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fmod<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Store the remainder of dividing operand 1 by operand 2 into
operand 0, rounded towards zero to an integer.
</p>
<p>The <code>fmod</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>fmodf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-remainderm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>remainder<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Store the remainder of dividing operand 1 by operand 2 into
operand 0, rounded to the nearest integer.
</p>
<p>The <code>remainder</code> built-in function of C always uses the mode
which corresponds to the C data type <code>double</code> and the
<code>remainderf</code> built-in function uses the mode which corresponds
to the C data type <code>float</code>.
</p>
<a name="index-cosm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>cos<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the cosine of operand 1 into operand 0.
</p>
<p>The <code>cos</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>cosf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-sinm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sin<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the sine of operand 1 into operand 0.
</p>
<p>The <code>sin</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>sinf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-sincosm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sincos<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Store the cosine of operand 2 into operand 0 and the sine of
operand 2 into operand 1.
</p>
<p>The <code>sin</code> and <code>cos</code> built-in functions of C always use the
mode which corresponds to the C data type <code>double</code> and the
<code>sinf</code> and <code>cosf</code> built-in function use the mode which
corresponds to the C data type <code>float</code>.
Targets that can calculate the sine and cosine simultaneously can
implement this pattern as opposed to implementing individual
<code>sin<var>m</var>2</code> and <code>cos<var>m</var>2</code> patterns.  The <code>sin</code>
and <code>cos</code> built-in functions will then be expanded to the
<code>sincos<var>m</var>3</code> pattern, with one of the output values
left unused.
</p>
<a name="index-expm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>exp<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the exponential of operand 1 into operand 0.
</p>
<p>The <code>exp</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>expf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-logm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>log<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the natural logarithm of operand 1 into operand 0.
</p>
<p>The <code>log</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>logf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-powm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>pow<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Store the value of operand 1 raised to the exponent operand 2
into operand 0.
</p>
<p>The <code>pow</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>powf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-atan2m3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>atan2<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Store the arc tangent (inverse tangent) of operand 1 divided by
operand 2 into operand 0, using the signs of both arguments to
determine the quadrant of the result.
</p>
<p>The <code>atan2</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>atan2f</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-floorm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>floor<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the largest integral value not greater than argument.
</p>
<p>The <code>floor</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>floorf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-btruncm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>btrunc<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the argument rounded to integer towards zero.
</p>
<p>The <code>trunc</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>truncf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-roundm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>round<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the argument rounded to integer away from zero.
</p>
<p>The <code>round</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>roundf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-ceilm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ceil<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the argument rounded to integer away from zero.
</p>
<p>The <code>ceil</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>ceilf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-nearbyintm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>nearbyint<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the argument rounded according to the default rounding mode
</p>
<p>The <code>nearbyint</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>nearbyintf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-rintm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>rint<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the argument rounded according to the default rounding mode and
raise the inexact exception when the result differs in value from
the argument
</p>
<p>The <code>rint</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>rintf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-lrintmn2"></a>
</dd>
<dt>&lsquo;<samp>lrint<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 (valid for floating point mode <var>m</var>) to fixed
point mode <var>n</var> as a signed number according to the current
rounding mode and store in operand 0 (which has mode <var>n</var>).
</p>
<a name="index-lroundmn2"></a>
</dd>
<dt>&lsquo;<samp>lround<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 (valid for floating point mode <var>m</var>) to fixed
point mode <var>n</var> as a signed number rounding to nearest and away
from zero and store in operand 0 (which has mode <var>n</var>).
</p>
<a name="index-lfloormn2"></a>
</dd>
<dt>&lsquo;<samp>lfloor<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 (valid for floating point mode <var>m</var>) to fixed
point mode <var>n</var> as a signed number rounding down and store in
operand 0 (which has mode <var>n</var>).
</p>
<a name="index-lceilmn2"></a>
</dd>
<dt>&lsquo;<samp>lceil<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 (valid for floating point mode <var>m</var>) to fixed
point mode <var>n</var> as a signed number rounding up and store in
operand 0 (which has mode <var>n</var>).
</p>
<a name="index-copysignm3-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>copysign<var>m</var>3</samp>&rsquo;</dt>
<dd><p>Store a value with the magnitude of operand 1 and the sign of operand
2 into operand 0.
</p>
<p>The <code>copysign</code> built-in function of C always uses the mode which
corresponds to the C data type <code>double</code> and the <code>copysignf</code>
built-in function uses the mode which corresponds to the C data
type <code>float</code>.
</p>
<a name="index-ffsm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ffs<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store into operand 0 one plus the index of the least significant 1-bit
of operand 1.  If operand 1 is zero, store zero.  <var>m</var> is the mode
of operand 0; operand 1&rsquo;s mode is specified by the instruction
pattern, and the compiler will convert the operand to that mode before
generating the instruction.
</p>
<p>The <code>ffs</code> built-in function of C always uses the mode which
corresponds to the C data type <code>int</code>.
</p>
<a name="index-clzm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>clz<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store into operand 0 the number of leading 0-bits in <var>x</var>, starting
at the most significant bit position.  If <var>x</var> is 0, the
<code>CLZ_DEFINED_VALUE_AT_ZERO</code> (see <a href="#Misc">Misc</a>) macro defines if
the result is undefined or has a useful value.
<var>m</var> is the mode of operand 0; operand 1&rsquo;s mode is
specified by the instruction pattern, and the compiler will convert the
operand to that mode before generating the instruction.
</p>
<a name="index-ctzm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ctz<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store into operand 0 the number of trailing 0-bits in <var>x</var>, starting
at the least significant bit position.  If <var>x</var> is 0, the
<code>CTZ_DEFINED_VALUE_AT_ZERO</code> (see <a href="#Misc">Misc</a>) macro defines if
the result is undefined or has a useful value.
<var>m</var> is the mode of operand 0; operand 1&rsquo;s mode is
specified by the instruction pattern, and the compiler will convert the
operand to that mode before generating the instruction.
</p>
<a name="index-popcountm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>popcount<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store into operand 0 the number of 1-bits in <var>x</var>.  <var>m</var> is the
mode of operand 0; operand 1&rsquo;s mode is specified by the instruction
pattern, and the compiler will convert the operand to that mode before
generating the instruction.
</p>
<a name="index-paritym2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>parity<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store into operand 0 the parity of <var>x</var>, i.e. the number of 1-bits
in <var>x</var> modulo 2.  <var>m</var> is the mode of operand 0; operand 1&rsquo;s mode
is specified by the instruction pattern, and the compiler will convert
the operand to that mode before generating the instruction.
</p>
<a name="index-one_005fcmplm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>one_cmpl<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Store the bitwise-complement of operand 1 into operand 0.
</p>
<a name="index-movmemm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>movmem<var>m</var></samp>&rsquo;</dt>
<dd><p>Block move instruction.  The destination and source blocks of memory
are the first two operands, and both are <code>mem:BLK</code>s with an
address in mode <code>Pmode</code>.
</p>
<p>The number of bytes to move is the third operand, in mode <var>m</var>.
Usually, you specify <code>word_mode</code> for <var>m</var>.  However, if you can
generate better code knowing the range of valid lengths is smaller than
those representable in a full word, you should provide a pattern with a
mode corresponding to the range of values you can handle efficiently
(e.g., <code>QImode</code> for values in the range 0&ndash;127; note we avoid numbers
that appear negative) and also a pattern with <code>word_mode</code>.
</p>
<p>The fourth operand is the known shared alignment of the source and
destination, in the form of a <code>const_int</code> rtx.  Thus, if the
compiler knows that both source and destination are word-aligned,
it may provide the value 4 for this operand.
</p>
<p>Optional operands 5 and 6 specify expected alignment and size of block
respectively.  The expected alignment differs from alignment in operand 4
in a way that the blocks are not required to be aligned according to it in
all cases. This expected alignment is also in bytes, just like operand 4.
Expected size, when unknown, is set to <code>(const_int -1)</code>.
</p>
<p>Descriptions of multiple <code>movmem<var>m</var></code> patterns can only be
beneficial if the patterns for smaller modes have fewer restrictions
on their first, second and fourth operands.  Note that the mode <var>m</var>
in <code>movmem<var>m</var></code> does not impose any restriction on the mode of
individually moved data units in the block.
</p>
<p>These patterns need not give special consideration to the possibility
that the source and destination strings might overlap.
</p>
<a name="index-movstr-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>movstr</samp>&rsquo;</dt>
<dd><p>String copy instruction, with <code>stpcpy</code> semantics.  Operand 0 is
an output operand in mode <code>Pmode</code>.  The addresses of the
destination and source strings are operands 1 and 2, and both are
<code>mem:BLK</code>s with addresses in mode <code>Pmode</code>.  The execution of
the expansion of this pattern should store in operand 0 the address in
which the <code>NUL</code> terminator was stored in the destination string.
</p>
<a name="index-setmemm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>setmem<var>m</var></samp>&rsquo;</dt>
<dd><p>Block set instruction.  The destination string is the first operand,
given as a <code>mem:BLK</code> whose address is in mode <code>Pmode</code>.  The
number of bytes to set is the second operand, in mode <var>m</var>.  The value to
initialize the memory with is the third operand. Targets that only support the
clearing of memory should reject any value that is not the constant 0.  See
&lsquo;<samp>movmem<var>m</var></samp>&rsquo; for a discussion of the choice of mode.
</p>
<p>The fourth operand is the known alignment of the destination, in the form
of a <code>const_int</code> rtx.  Thus, if the compiler knows that the
destination is word-aligned, it may provide the value 4 for this
operand.
</p>
<p>Optional operands 5 and 6 specify expected alignment and size of block
respectively.  The expected alignment differs from alignment in operand 4
in a way that the blocks are not required to be aligned according to it in
all cases. This expected alignment is also in bytes, just like operand 4.
Expected size, when unknown, is set to <code>(const_int -1)</code>.
</p>
<p>The use for multiple <code>setmem<var>m</var></code> is as for <code>movmem<var>m</var></code>.
</p>
<a name="index-cmpstrnm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>cmpstrn<var>m</var></samp>&rsquo;</dt>
<dd><p>String compare instruction, with five operands.  Operand 0 is the output;
it has mode <var>m</var>.  The remaining four operands are like the operands
of &lsquo;<samp>movmem<var>m</var></samp>&rsquo;.  The two memory blocks specified are compared
byte by byte in lexicographic order starting at the beginning of each
string.  The instruction is not allowed to prefetch more than one byte
at a time since either string may end in the first byte and reading past
that may access an invalid page or segment and cause a fault.  The
comparison terminates early if the fetched bytes are different or if
they are equal to zero.  The effect of the instruction is to store a
value in operand 0 whose sign indicates the result of the comparison.
</p>
<a name="index-cmpstrm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>cmpstr<var>m</var></samp>&rsquo;</dt>
<dd><p>String compare instruction, without known maximum length.  Operand 0 is the
output; it has mode <var>m</var>.  The second and third operand are the blocks of
memory to be compared; both are <code>mem:BLK</code> with an address in mode
<code>Pmode</code>.
</p>
<p>The fourth operand is the known shared alignment of the source and
destination, in the form of a <code>const_int</code> rtx.  Thus, if the
compiler knows that both source and destination are word-aligned,
it may provide the value 4 for this operand.
</p>
<p>The two memory blocks specified are compared byte by byte in lexicographic
order starting at the beginning of each string.  The instruction is not allowed
to prefetch more than one byte at a time since either string may end in the
first byte and reading past that may access an invalid page or segment and
cause a fault.  The comparison will terminate when the fetched bytes
are different or if they are equal to zero.  The effect of the
instruction is to store a value in operand 0 whose sign indicates the
result of the comparison.
</p>
<a name="index-cmpmemm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>cmpmem<var>m</var></samp>&rsquo;</dt>
<dd><p>Block compare instruction, with five operands like the operands
of &lsquo;<samp>cmpstr<var>m</var></samp>&rsquo;.  The two memory blocks specified are compared
byte by byte in lexicographic order starting at the beginning of each
block.  Unlike &lsquo;<samp>cmpstr<var>m</var></samp>&rsquo; the instruction can prefetch
any bytes in the two memory blocks.  Also unlike &lsquo;<samp>cmpstr<var>m</var></samp>&rsquo;
the comparison will not stop if both bytes are zero.  The effect of
the instruction is to store a value in operand 0 whose sign indicates
the result of the comparison.
</p>
<a name="index-strlenm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>strlen<var>m</var></samp>&rsquo;</dt>
<dd><p>Compute the length of a string, with three operands.
Operand 0 is the result (of mode <var>m</var>), operand 1 is
a <code>mem</code> referring to the first character of the string,
operand 2 is the character to search for (normally zero),
and operand 3 is a constant describing the known alignment
of the beginning of the string.
</p>
<a name="index-floatmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>float<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert signed integer operand 1 (valid for fixed point mode <var>m</var>) to
floating point mode <var>n</var> and store in operand 0 (which has mode
<var>n</var>).
</p>
<a name="index-floatunsmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>floatuns<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert unsigned integer operand 1 (valid for fixed point mode <var>m</var>)
to floating point mode <var>n</var> and store in operand 0 (which has mode
<var>n</var>).
</p>
<a name="index-fixmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fix<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 (valid for floating point mode <var>m</var>) to fixed
point mode <var>n</var> as a signed number and store in operand 0 (which
has mode <var>n</var>).  This instruction&rsquo;s result is defined only when
the value of operand 1 is an integer.
</p>
<p>If the machine description defines this pattern, it also needs to
define the <code>ftrunc</code> pattern.
</p>
<a name="index-fixunsmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fixuns<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 (valid for floating point mode <var>m</var>) to fixed
point mode <var>n</var> as an unsigned number and store in operand 0 (which
has mode <var>n</var>).  This instruction&rsquo;s result is defined only when the
value of operand 1 is an integer.
</p>
<a name="index-ftruncm2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ftrunc<var>m</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 (valid for floating point mode <var>m</var>) to an
integer value, still represented in floating point mode <var>m</var>, and
store it in operand 0 (valid for floating point mode <var>m</var>).
</p>
<a name="index-fix_005ftruncmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fix_trunc<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Like &lsquo;<samp>fix<var>m</var><var>n</var>2</samp>&rsquo; but works for any floating point value
of mode <var>m</var> by converting the value to an integer.
</p>
<a name="index-fixuns_005ftruncmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fixuns_trunc<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Like &lsquo;<samp>fixuns<var>m</var><var>n</var>2</samp>&rsquo; but works for any floating point
value of mode <var>m</var> by converting the value to an integer.
</p>
<a name="index-truncmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>trunc<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Truncate operand 1 (valid for mode <var>m</var>) to mode <var>n</var> and
store in operand 0 (which has mode <var>n</var>).  Both modes must be fixed
point or both floating point.
</p>
<a name="index-extendmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>extend<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Sign-extend operand 1 (valid for mode <var>m</var>) to mode <var>n</var> and
store in operand 0 (which has mode <var>n</var>).  Both modes must be fixed
point or both floating point.
</p>
<a name="index-zero_005fextendmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>zero_extend<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Zero-extend operand 1 (valid for mode <var>m</var>) to mode <var>n</var> and
store in operand 0 (which has mode <var>n</var>).  Both modes must be fixed
point.
</p>
<a name="index-fractmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fract<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 of mode <var>m</var> to mode <var>n</var> and store in
operand 0 (which has mode <var>n</var>).  Mode <var>m</var> and mode <var>n</var>
could be fixed-point to fixed-point, signed integer to fixed-point,
fixed-point to signed integer, floating-point to fixed-point,
or fixed-point to floating-point.
When overflows or underflows happen, the results are undefined.
</p>
<a name="index-satfractmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>satfract<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 of mode <var>m</var> to mode <var>n</var> and store in
operand 0 (which has mode <var>n</var>).  Mode <var>m</var> and mode <var>n</var>
could be fixed-point to fixed-point, signed integer to fixed-point,
or floating-point to fixed-point.
When overflows or underflows happen, the instruction saturates the
results to the maximum or the minimum.
</p>
<a name="index-fractunsmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>fractuns<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert operand 1 of mode <var>m</var> to mode <var>n</var> and store in
operand 0 (which has mode <var>n</var>).  Mode <var>m</var> and mode <var>n</var>
could be unsigned integer to fixed-point, or
fixed-point to unsigned integer.
When overflows or underflows happen, the results are undefined.
</p>
<a name="index-satfractunsmn2-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>satfractuns<var>m</var><var>n</var>2</samp>&rsquo;</dt>
<dd><p>Convert unsigned integer operand 1 of mode <var>m</var> to fixed-point mode
<var>n</var> and store in operand 0 (which has mode <var>n</var>).
When overflows or underflows happen, the instruction saturates the
results to the maximum or the minimum.
</p>
<a name="index-extvm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>extv<var>m</var></samp>&rsquo;</dt>
<dd><p>Extract a bit-field from register operand 1, sign-extend it, and store
it in operand 0.  Operand 2 specifies the width of the field in bits
and operand 3 the starting bit, which counts from the most significant
bit if &lsquo;<samp>BITS_BIG_ENDIAN</samp>&rsquo; is true and from the least significant bit
otherwise.
</p>
<p>Operands 0 and 1 both have mode <var>m</var>.  Operands 2 and 3 have a
target-specific mode.
</p>
<a name="index-extvmisalignm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>extvmisalign<var>m</var></samp>&rsquo;</dt>
<dd><p>Extract a bit-field from memory operand 1, sign extend it, and store
it in operand 0.  Operand 2 specifies the width in bits and operand 3
the starting bit.  The starting bit is always somewhere in the first byte of
operand 1; it counts from the most significant bit if &lsquo;<samp>BITS_BIG_ENDIAN</samp>&rsquo;
is true and from the least significant bit otherwise.
</p>
<p>Operand 0 has mode <var>m</var> while operand 1 has <code>BLK</code> mode.
Operands 2 and 3 have a target-specific mode.
</p>
<p>The instruction must not read beyond the last byte of the bit-field.
</p>
<a name="index-extzvm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>extzv<var>m</var></samp>&rsquo;</dt>
<dd><p>Like &lsquo;<samp>extv<var>m</var></samp>&rsquo; except that the bit-field value is zero-extended.
</p>
<a name="index-extzvmisalignm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>extzvmisalign<var>m</var></samp>&rsquo;</dt>
<dd><p>Like &lsquo;<samp>extvmisalign<var>m</var></samp>&rsquo; except that the bit-field value is
zero-extended.
</p>
<a name="index-insvm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>insv<var>m</var></samp>&rsquo;</dt>
<dd><p>Insert operand 3 into a bit-field of register operand 0.  Operand 1
specifies the width of the field in bits and operand 2 the starting bit,
which counts from the most significant bit if &lsquo;<samp>BITS_BIG_ENDIAN</samp>&rsquo;
is true and from the least significant bit otherwise.
</p>
<p>Operands 0 and 3 both have mode <var>m</var>.  Operands 1 and 2 have a
target-specific mode.
</p>
<a name="index-insvmisalignm-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>insvmisalign<var>m</var></samp>&rsquo;</dt>
<dd><p>Insert operand 3 into a bit-field of memory operand 0.  Operand 1
specifies the width of the field in bits and operand 2 the starting bit.
The starting bit is always somewhere in the first byte of operand 0;
it counts from the most significant bit if &lsquo;<samp>BITS_BIG_ENDIAN</samp>&rsquo;
is true and from the least significant bit otherwise.
</p>
<p>Operand 3 has mode <var>m</var> while operand 0 has <code>BLK</code> mode.
Operands 1 and 2 have a target-specific mode.
</p>
<p>The instruction must not read or write beyond the last byte of the bit-field.
</p>
<a name="index-extv-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>extv</samp>&rsquo;</dt>
<dd><p>Extract a bit-field from operand 1 (a register or memory operand), where
operand 2 specifies the width in bits and operand 3 the starting bit,
and store it in operand 0.  Operand 0 must have mode <code>word_mode</code>.
Operand 1 may have mode <code>byte_mode</code> or <code>word_mode</code>; often
<code>word_mode</code> is allowed only for registers.  Operands 2 and 3 must
be valid for <code>word_mode</code>.
</p>
<p>The RTL generation pass generates this instruction only with constants
for operands 2 and 3 and the constant is never zero for operand 2.
</p>
<p>The bit-field value is sign-extended to a full word integer
before it is stored in operand 0.
</p>
<p>This pattern is deprecated; please use &lsquo;<samp>extv<var>m</var></samp>&rsquo; and
<code>extvmisalign<var>m</var></code> instead.
</p>
<a name="index-extzv-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>extzv</samp>&rsquo;</dt>
<dd><p>Like &lsquo;<samp>extv</samp>&rsquo; except that the bit-field value is zero-extended.
</p>
<p>This pattern is deprecated; please use &lsquo;<samp>extzv<var>m</var></samp>&rsquo; and
<code>extzvmisalign<var>m</var></code> instead.
</p>
<a name="index-insv-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>insv</samp>&rsquo;</dt>
<dd><p>Store operand 3 (which must be valid for <code>word_mode</code>) into a
bit-field in operand 0, where operand 1 specifies the width in bits and
operand 2 the starting bit.  Operand 0 may have mode <code>byte_mode</code> or
<code>word_mode</code>; often <code>word_mode</code> is allowed only for registers.
Operands 1 and 2 must be valid for <code>word_mode</code>.
</p>
<p>The RTL generation pass generates this instruction only with constants
for operands 1 and 2 and the constant is never zero for operand 1.
</p>
<p>This pattern is deprecated; please use &lsquo;<samp>insv<var>m</var></samp>&rsquo; and
<code>insvmisalign<var>m</var></code> instead.
</p>
<a name="index-movmodecc-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>mov<var>mode</var>cc</samp>&rsquo;</dt>
<dd><p>Conditionally move operand 2 or operand 3 into operand 0 according to the
comparison in operand 1.  If the comparison is true, operand 2 is moved
into operand 0, otherwise operand 3 is moved.
</p>
<p>The mode of the operands being compared need not be the same as the operands
being moved.  Some machines, sparc64 for example, have instructions that
conditionally move an integer value based on the floating point condition
codes and vice versa.
</p>
<p>If the machine does not have conditional move instructions, do not
define these patterns.
</p>
<a name="index-addmodecc-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>add<var>mode</var>cc</samp>&rsquo;</dt>
<dd><p>Similar to &lsquo;<samp>mov<var>mode</var>cc</samp>&rsquo; but for conditional addition.  Conditionally
move operand 2 or (operands 2 + operand 3) into operand 0 according to the
comparison in operand 1.  If the comparison is false, operand 2 is moved into
operand 0, otherwise (operand 2 + operand 3) is moved.
</p>
<a name="index-cstoremode4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>cstore<var>mode</var>4</samp>&rsquo;</dt>
<dd><p>Store zero or nonzero in operand 0 according to whether a comparison
is true.  Operand 1 is a comparison operator.  Operand 2 and operand 3
are the first and second operand of the comparison, respectively.
You specify the mode that operand 0 must have when you write the
<code>match_operand</code> expression.  The compiler automatically sees which
mode you have used and supplies an operand of that mode.
</p>
<p>The value stored for a true condition must have 1 as its low bit, or
else must be negative.  Otherwise the instruction is not suitable and
you should omit it from the machine description.  You describe to the
compiler exactly which value is stored by defining the macro
<code>STORE_FLAG_VALUE</code> (see <a href="#Misc">Misc</a>).  If a description cannot be
found that can be used for all the possible comparison operators, you
should pick one and use a <code>define_expand</code> to map all results
onto the one you chose.
</p>
<p>These operations may <code>FAIL</code>, but should do so only in relatively
uncommon cases; if they would <code>FAIL</code> for common cases involving
integer comparisons, it is best to restrict the predicates to not
allow these operands.  Likewise if a given comparison operator will
always fail, independent of the operands (for floating-point modes, the
<code>ordered_comparison_operator</code> predicate is often useful in this case).
</p>
<p>If this pattern is omitted, the compiler will generate a conditional
branch&mdash;for example, it may copy a constant one to the target and branching
around an assignment of zero to the target&mdash;or a libcall.  If the predicate
for operand 1 only rejects some operators, it will also try reordering the
operands and/or inverting the result value (e.g. by an exclusive OR).
These possibilities could be cheaper or equivalent to the instructions
used for the &lsquo;<samp>cstore<var>mode</var>4</samp>&rsquo; pattern followed by those required
to convert a positive result from <code>STORE_FLAG_VALUE</code> to 1; in this
case, you can and should make operand 1&rsquo;s predicate reject some operators
in the &lsquo;<samp>cstore<var>mode</var>4</samp>&rsquo; pattern, or remove the pattern altogether
from the machine description.
</p>
<a name="index-cbranchmode4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>cbranch<var>mode</var>4</samp>&rsquo;</dt>
<dd><p>Conditional branch instruction combined with a compare instruction.
Operand 0 is a comparison operator.  Operand 1 and operand 2 are the
first and second operands of the comparison, respectively.  Operand 3
is a <code>label_ref</code> that refers to the label to jump to.
</p>
<a name="index-jump-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>jump</samp>&rsquo;</dt>
<dd><p>A jump inside a function; an unconditional branch.  Operand 0 is the
<code>label_ref</code> of the label to jump to.  This pattern name is mandatory
on all machines.
</p>
<a name="index-call-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>call</samp>&rsquo;</dt>
<dd><p>Subroutine call instruction returning no value.  Operand 0 is the
function to call; operand 1 is the number of bytes of arguments pushed
as a <code>const_int</code>; operand 2 is the number of registers used as
operands.
</p>
<p>On most machines, operand 2 is not actually stored into the RTL
pattern.  It is supplied for the sake of some RISC machines which need
to put this information into the assembler code; they can put it in
the RTL instead of operand 1.
</p>
<p>Operand 0 should be a <code>mem</code> RTX whose address is the address of the
function.  Note, however, that this address can be a <code>symbol_ref</code>
expression even if it would not be a legitimate memory address on the
target machine.  If it is also not a valid argument for a call
instruction, the pattern for this operation should be a
<code>define_expand</code> (see <a href="#Expander-Definitions">Expander Definitions</a>) that places the
address into a register and uses that register in the call instruction.
</p>
<a name="index-call_005fvalue-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>call_value</samp>&rsquo;</dt>
<dd><p>Subroutine call instruction returning a value.  Operand 0 is the hard
register in which the value is returned.  There are three more
operands, the same as the three operands of the &lsquo;<samp>call</samp>&rsquo;
instruction (but with numbers increased by one).
</p>
<p>Subroutines that return <code>BLKmode</code> objects use the &lsquo;<samp>call</samp>&rsquo;
insn.
</p>
<a name="index-call_005fpop-instruction-pattern"></a>
<a name="index-call_005fvalue_005fpop-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>call_pop</samp>&rsquo;, &lsquo;<samp>call_value_pop</samp>&rsquo;</dt>
<dd><p>Similar to &lsquo;<samp>call</samp>&rsquo; and &lsquo;<samp>call_value</samp>&rsquo;, except used if defined and
if <code>RETURN_POPS_ARGS</code> is nonzero.  They should emit a <code>parallel</code>
that contains both the function call and a <code>set</code> to indicate the
adjustment made to the frame pointer.
</p>
<p>For machines where <code>RETURN_POPS_ARGS</code> can be nonzero, the use of these
patterns increases the number of functions for which the frame pointer
can be eliminated, if desired.
</p>
<a name="index-untyped_005fcall-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>untyped_call</samp>&rsquo;</dt>
<dd><p>Subroutine call instruction returning a value of any type.  Operand 0 is
the function to call; operand 1 is a memory location where the result of
calling the function is to be stored; operand 2 is a <code>parallel</code>
expression where each element is a <code>set</code> expression that indicates
the saving of a function return value into the result block.
</p>
<p>This instruction pattern should be defined to support
<code>__builtin_apply</code> on machines where special instructions are needed
to call a subroutine with arbitrary arguments or to save the value
returned.  This instruction pattern is required on machines that have
multiple registers that can hold a return value
(i.e. <code>FUNCTION_VALUE_REGNO_P</code> is true for more than one register).
</p>
<a name="index-return-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>return</samp>&rsquo;</dt>
<dd><p>Subroutine return instruction.  This instruction pattern name should be
defined only if a single instruction can do all the work of returning
from a function.
</p>
<p>Like the &lsquo;<samp>mov<var>m</var></samp>&rsquo; patterns, this pattern is also used after the
RTL generation phase.  In this case it is to support machines where
multiple instructions are usually needed to return from a function, but
some class of functions only requires one instruction to implement a
return.  Normally, the applicable functions are those which do not need
to save any registers or allocate stack space.
</p>
<p>It is valid for this pattern to expand to an instruction using
<code>simple_return</code> if no epilogue is required.
</p>
<a name="index-simple_005freturn-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>simple_return</samp>&rsquo;</dt>
<dd><p>Subroutine return instruction.  This instruction pattern name should be
defined only if a single instruction can do all the work of returning
from a function on a path where no epilogue is required.  This pattern
is very similar to the <code>return</code> instruction pattern, but it is emitted
only by the shrink-wrapping optimization on paths where the function
prologue has not been executed, and a function return should occur without
any of the effects of the epilogue.  Additional uses may be introduced on
paths where both the prologue and the epilogue have executed.
</p>
<a name="index-reload_005fcompleted"></a>
<a name="index-leaf_005ffunction_005fp"></a>
<p>For such machines, the condition specified in this pattern should only
be true when <code>reload_completed</code> is nonzero and the function&rsquo;s
epilogue would only be a single instruction.  For machines with register
windows, the routine <code>leaf_function_p</code> may be used to determine if
a register window push is required.
</p>
<p>Machines that have conditional return instructions should define patterns
such as
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(set (pc)
        (if_then_else (match_operator
                         0 &quot;comparison_operator&quot;
                         [(cc0) (const_int 0)])
                      (return)
                      (pc)))]
  &quot;<var>condition</var>&quot;
  &quot;&hellip;&quot;)
</pre></div>

<p>where <var>condition</var> would normally be the same condition specified on the
named &lsquo;<samp>return</samp>&rsquo; pattern.
</p>
<a name="index-untyped_005freturn-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>untyped_return</samp>&rsquo;</dt>
<dd><p>Untyped subroutine return instruction.  This instruction pattern should
be defined to support <code>__builtin_return</code> on machines where special
instructions are needed to return a value of any type.
</p>
<p>Operand 0 is a memory location where the result of calling a function
with <code>__builtin_apply</code> is stored; operand 1 is a <code>parallel</code>
expression where each element is a <code>set</code> expression that indicates
the restoring of a function return value from the result block.
</p>
<a name="index-nop-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>nop</samp>&rsquo;</dt>
<dd><p>No-op instruction.  This instruction pattern name should always be defined
to output a no-op in assembler code.  <code>(const_int 0)</code> will do as an
RTL pattern.
</p>
<a name="index-indirect_005fjump-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>indirect_jump</samp>&rsquo;</dt>
<dd><p>An instruction to jump to an address which is operand zero.
This pattern name is mandatory on all machines.
</p>
<a name="index-casesi-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>casesi</samp>&rsquo;</dt>
<dd><p>Instruction to jump through a dispatch table, including bounds checking.
This instruction takes five operands:
</p>
<ol>
<li> The index to dispatch on, which has mode <code>SImode</code>.

</li><li> The lower bound for indices in the table, an integer constant.

</li><li> The total range of indices in the table&mdash;the largest index
minus the smallest one (both inclusive).

</li><li> A label that precedes the table itself.

</li><li> A label to jump to if the index has a value outside the bounds.
</li></ol>

<p>The table is an <code>addr_vec</code> or <code>addr_diff_vec</code> inside of a
<code>jump_insn</code>.  The number of elements in the table is one plus the
difference between the upper bound and the lower bound.
</p>
<a name="index-tablejump-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>tablejump</samp>&rsquo;</dt>
<dd><p>Instruction to jump to a variable address.  This is a low-level
capability which can be used to implement a dispatch table when there
is no &lsquo;<samp>casesi</samp>&rsquo; pattern.
</p>
<p>This pattern requires two operands: the address or offset, and a label
which should immediately precede the jump table.  If the macro
<code>CASE_VECTOR_PC_RELATIVE</code> evaluates to a nonzero value then the first
operand is an offset which counts from the address of the table; otherwise,
it is an absolute address to jump to.  In either case, the first operand has
mode <code>Pmode</code>.
</p>
<p>The &lsquo;<samp>tablejump</samp>&rsquo; insn is always the last insn before the jump
table it uses.  Its assembler code normally has no need to use the
second operand, but you should incorporate it in the RTL pattern so
that the jump optimizer will not delete the table as unreachable code.
</p>

<a name="index-decrement_005fand_005fbranch_005funtil_005fzero-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>decrement_and_branch_until_zero</samp>&rsquo;</dt>
<dd><p>Conditional branch instruction that decrements a register and
jumps if the register is nonzero.  Operand 0 is the register to
decrement and test; operand 1 is the label to jump to if the
register is nonzero.  See <a href="#Looping-Patterns">Looping Patterns</a>.
</p>
<p>This optional instruction pattern is only used by the combiner,
typically for loops reversed by the loop optimizer when strength
reduction is enabled.
</p>
<a name="index-doloop_005fend-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>doloop_end</samp>&rsquo;</dt>
<dd><p>Conditional branch instruction that decrements a register and jumps if
the register is nonzero.  This instruction takes five operands: Operand
0 is the register to decrement and test; operand 1 is the number of loop
iterations as a <code>const_int</code> or <code>const0_rtx</code> if this cannot be
determined until run-time; operand 2 is the actual or estimated maximum
number of iterations as a <code>const_int</code>; operand 3 is the number of
enclosed loops as a <code>const_int</code> (an innermost loop has a value of
1); operand 4 is the label to jump to if the register is nonzero;
operand 5 is const1_rtx if the loop in entered at its top, const0_rtx
otherwise.
See <a href="#Looping-Patterns">Looping Patterns</a>.
</p>
<p>This optional instruction pattern should be defined for machines with
low-overhead looping instructions as the loop optimizer will try to
modify suitable loops to utilize it.  If nested low-overhead looping is
not supported, use a <code>define_expand</code> (see <a href="#Expander-Definitions">Expander Definitions</a>)
and make the pattern fail if operand 3 is not <code>const1_rtx</code>.
Similarly, if the actual or estimated maximum number of iterations is
too large for this instruction, make it fail.
</p>
<a name="index-doloop_005fbegin-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>doloop_begin</samp>&rsquo;</dt>
<dd><p>Companion instruction to <code>doloop_end</code> required for machines that
need to perform some initialization, such as loading special registers
used by a low-overhead looping instruction.  If initialization insns do
not always need to be emitted, use a <code>define_expand</code>
(see <a href="#Expander-Definitions">Expander Definitions</a>) and make it fail.
</p>

<a name="index-canonicalize_005ffuncptr_005ffor_005fcompare-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>canonicalize_funcptr_for_compare</samp>&rsquo;</dt>
<dd><p>Canonicalize the function pointer in operand 1 and store the result
into operand 0.
</p>
<p>Operand 0 is always a <code>reg</code> and has mode <code>Pmode</code>; operand 1
may be a <code>reg</code>, <code>mem</code>, <code>symbol_ref</code>, <code>const_int</code>, etc
and also has mode <code>Pmode</code>.
</p>
<p>Canonicalization of a function pointer usually involves computing
the address of the function which would be called if the function
pointer were used in an indirect call.
</p>
<p>Only define this pattern if function pointers on the target machine
can have different values but still call the same function when
used in an indirect call.
</p>
<a name="index-save_005fstack_005fblock-instruction-pattern"></a>
<a name="index-save_005fstack_005ffunction-instruction-pattern"></a>
<a name="index-save_005fstack_005fnonlocal-instruction-pattern"></a>
<a name="index-restore_005fstack_005fblock-instruction-pattern"></a>
<a name="index-restore_005fstack_005ffunction-instruction-pattern"></a>
<a name="index-restore_005fstack_005fnonlocal-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>save_stack_block</samp>&rsquo;</dt>
<dt>&lsquo;<samp>save_stack_function</samp>&rsquo;</dt>
<dt>&lsquo;<samp>save_stack_nonlocal</samp>&rsquo;</dt>
<dt>&lsquo;<samp>restore_stack_block</samp>&rsquo;</dt>
<dt>&lsquo;<samp>restore_stack_function</samp>&rsquo;</dt>
<dt>&lsquo;<samp>restore_stack_nonlocal</samp>&rsquo;</dt>
<dd><p>Most machines save and restore the stack pointer by copying it to or
from an object of mode <code>Pmode</code>.  Do not define these patterns on
such machines.
</p>
<p>Some machines require special handling for stack pointer saves and
restores.  On those machines, define the patterns corresponding to the
non-standard cases by using a <code>define_expand</code> (see <a href="#Expander-Definitions">Expander Definitions</a>) that produces the required insns.  The three types of
saves and restores are:
</p>
<ol>
<li> &lsquo;<samp>save_stack_block</samp>&rsquo; saves the stack pointer at the start of a block
that allocates a variable-sized object, and &lsquo;<samp>restore_stack_block</samp>&rsquo;
restores the stack pointer when the block is exited.

</li><li> &lsquo;<samp>save_stack_function</samp>&rsquo; and &lsquo;<samp>restore_stack_function</samp>&rsquo; do a
similar job for the outermost block of a function and are used when the
function allocates variable-sized objects or calls <code>alloca</code>.  Only
the epilogue uses the restored stack pointer, allowing a simpler save or
restore sequence on some machines.

</li><li> &lsquo;<samp>save_stack_nonlocal</samp>&rsquo; is used in functions that contain labels
branched to by nested functions.  It saves the stack pointer in such a
way that the inner function can use &lsquo;<samp>restore_stack_nonlocal</samp>&rsquo; to
restore the stack pointer.  The compiler generates code to restore the
frame and argument pointer registers, but some machines require saving
and restoring additional data such as register window information or
stack backchains.  Place insns in these patterns to save and restore any
such required data.
</li></ol>

<p>When saving the stack pointer, operand 0 is the save area and operand 1
is the stack pointer.  The mode used to allocate the save area defaults
to <code>Pmode</code> but you can override that choice by defining the
<code>STACK_SAVEAREA_MODE</code> macro (see <a href="#Storage-Layout">Storage Layout</a>).  You must
specify an integral mode, or <code>VOIDmode</code> if no save area is needed
for a particular type of save (either because no save is needed or
because a machine-specific save area can be used).  Operand 0 is the
stack pointer and operand 1 is the save area for restore operations.  If
&lsquo;<samp>save_stack_block</samp>&rsquo; is defined, operand 0 must not be
<code>VOIDmode</code> since these saves can be arbitrarily nested.
</p>
<p>A save area is a <code>mem</code> that is at a constant offset from
<code>virtual_stack_vars_rtx</code> when the stack pointer is saved for use by
nonlocal gotos and a <code>reg</code> in the other two cases.
</p>
<a name="index-allocate_005fstack-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>allocate_stack</samp>&rsquo;</dt>
<dd><p>Subtract (or add if <code>STACK_GROWS_DOWNWARD</code> is undefined) operand 1 from
the stack pointer to create space for dynamically allocated data.
</p>
<p>Store the resultant pointer to this space into operand 0.  If you
are allocating space from the main stack, do this by emitting a
move insn to copy <code>virtual_stack_dynamic_rtx</code> to operand 0.
If you are allocating the space elsewhere, generate code to copy the
location of the space to operand 0.  In the latter case, you must
ensure this space gets freed when the corresponding space on the main
stack is free.
</p>
<p>Do not define this pattern if all that must be done is the subtraction.
Some machines require other operations such as stack probes or
maintaining the back chain.  Define this pattern to emit those
operations in addition to updating the stack pointer.
</p>
<a name="index-check_005fstack-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>check_stack</samp>&rsquo;</dt>
<dd><p>If stack checking (see <a href="#Stack-Checking">Stack Checking</a>) cannot be done on your system by
probing the stack, define this pattern to perform the needed check and signal
an error if the stack has overflowed.  The single operand is the address in
the stack farthest from the current stack pointer that you need to validate.
Normally, on platforms where this pattern is needed, you would obtain the
stack limit from a global or thread-specific variable or register.
</p>
<a name="index-probe_005fstack_005faddress-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>probe_stack_address</samp>&rsquo;</dt>
<dd><p>If stack checking (see <a href="#Stack-Checking">Stack Checking</a>) can be done on your system by
probing the stack but without the need to actually access it, define this
pattern and signal an error if the stack has overflowed.  The single operand
is the memory address in the stack that needs to be probed.
</p>
<a name="index-probe_005fstack-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>probe_stack</samp>&rsquo;</dt>
<dd><p>If stack checking (see <a href="#Stack-Checking">Stack Checking</a>) can be done on your system by
probing the stack but doing it with a &ldquo;store zero&rdquo; instruction is not valid
or optimal, define this pattern to do the probing differently and signal an
error if the stack has overflowed.  The single operand is the memory reference
in the stack that needs to be probed.
</p>
<a name="index-nonlocal_005fgoto-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>nonlocal_goto</samp>&rsquo;</dt>
<dd><p>Emit code to generate a non-local goto, e.g., a jump from one function
to a label in an outer function.  This pattern has four arguments,
each representing a value to be used in the jump.  The first
argument is to be loaded into the frame pointer, the second is
the address to branch to (code to dispatch to the actual label),
the third is the address of a location where the stack is saved,
and the last is the address of the label, to be placed in the
location for the incoming static chain.
</p>
<p>On most machines you need not define this pattern, since GCC will
already generate the correct code, which is to load the frame pointer
and static chain, restore the stack (using the
&lsquo;<samp>restore_stack_nonlocal</samp>&rsquo; pattern, if defined), and jump indirectly
to the dispatcher.  You need only define this pattern if this code will
not work on your machine.
</p>
<a name="index-nonlocal_005fgoto_005freceiver-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>nonlocal_goto_receiver</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, contains code needed at the target of a
nonlocal goto after the code already generated by GCC.  You will not
normally need to define this pattern.  A typical reason why you might
need this pattern is if some value, such as a pointer to a global table,
must be restored when the frame pointer is restored.  Note that a nonlocal
goto only occurs within a unit-of-translation, so a global table pointer
that is shared by all functions of a given module need not be restored.
There are no arguments.
</p>
<a name="index-exception_005freceiver-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>exception_receiver</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, contains code needed at the site of an
exception handler that isn&rsquo;t needed at the site of a nonlocal goto.  You
will not normally need to define this pattern.  A typical reason why you
might need this pattern is if some value, such as a pointer to a global
table, must be restored after control flow is branched to the handler of
an exception.  There are no arguments.
</p>
<a name="index-builtin_005fsetjmp_005fsetup-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>builtin_setjmp_setup</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, contains additional code needed to initialize
the <code>jmp_buf</code>.  You will not normally need to define this pattern.
A typical reason why you might need this pattern is if some value, such
as a pointer to a global table, must be restored.  Though it is
preferred that the pointer value be recalculated if possible (given the
address of a label for instance).  The single argument is a pointer to
the <code>jmp_buf</code>.  Note that the buffer is five words long and that
the first three are normally used by the generic mechanism.
</p>
<a name="index-builtin_005fsetjmp_005freceiver-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>builtin_setjmp_receiver</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, contains code needed at the site of a
built-in setjmp that isn&rsquo;t needed at the site of a nonlocal goto.  You
will not normally need to define this pattern.  A typical reason why you
might need this pattern is if some value, such as a pointer to a global
table, must be restored.  It takes one argument, which is the label
to which builtin_longjmp transferred control; this pattern may be emitted
at a small offset from that label.
</p>
<a name="index-builtin_005flongjmp-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>builtin_longjmp</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, performs the entire action of the longjmp.
You will not normally need to define this pattern unless you also define
<code>builtin_setjmp_setup</code>.  The single argument is a pointer to the
<code>jmp_buf</code>.
</p>
<a name="index-eh_005freturn-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>eh_return</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, affects the way <code>__builtin_eh_return</code>,
and thence the call frame exception handling library routines, are
built.  It is intended to handle non-trivial actions needed along
the abnormal return path.
</p>
<p>The address of the exception handler to which the function should return
is passed as operand to this pattern.  It will normally need to copied by
the pattern to some special register or memory location.
If the pattern needs to determine the location of the target call
frame in order to do so, it may use <code>EH_RETURN_STACKADJ_RTX</code>,
if defined; it will have already been assigned.
</p>
<p>If this pattern is not defined, the default action will be to simply
copy the return address to <code>EH_RETURN_HANDLER_RTX</code>.  Either
that macro or this pattern needs to be defined if call frame exception
handling is to be used.
</p>
<a name="index-prologue-instruction-pattern"></a>
<a name="prologue-instruction-pattern"></a></dd>
<dt>&lsquo;<samp>prologue</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, emits RTL for entry to a function.  The function
entry is responsible for setting up the stack frame, initializing the frame
pointer register, saving callee saved registers, etc.
</p>
<p>Using a prologue pattern is generally preferred over defining
<code>TARGET_ASM_FUNCTION_PROLOGUE</code> to emit assembly code for the prologue.
</p>
<p>The <code>prologue</code> pattern is particularly useful for targets which perform
instruction scheduling.
</p>
<a name="index-window_005fsave-instruction-pattern"></a>
<a name="window_005fsave-instruction-pattern"></a></dd>
<dt>&lsquo;<samp>window_save</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, emits RTL for a register window save.  It should
be defined if the target machine has register windows but the window events
are decoupled from calls to subroutines.  The canonical example is the SPARC
architecture.
</p>
<a name="index-epilogue-instruction-pattern"></a>
<a name="epilogue-instruction-pattern"></a></dd>
<dt>&lsquo;<samp>epilogue</samp>&rsquo;</dt>
<dd><p>This pattern emits RTL for exit from a function.  The function
exit is responsible for deallocating the stack frame, restoring callee saved
registers and emitting the return instruction.
</p>
<p>Using an epilogue pattern is generally preferred over defining
<code>TARGET_ASM_FUNCTION_EPILOGUE</code> to emit assembly code for the epilogue.
</p>
<p>The <code>epilogue</code> pattern is particularly useful for targets which perform
instruction scheduling or which have delay slots for their return instruction.
</p>
<a name="index-sibcall_005fepilogue-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sibcall_epilogue</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, emits RTL for exit from a function without the final
branch back to the calling function.  This pattern will be emitted before any
sibling call (aka tail call) sites.
</p>
<p>The <code>sibcall_epilogue</code> pattern must not clobber any arguments used for
parameter passing or any stack slots for arguments passed to the current
function.
</p>
<a name="index-trap-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>trap</samp>&rsquo;</dt>
<dd><p>This pattern, if defined, signals an error, typically by causing some
kind of signal to be raised.  Among other places, it is used by the Java
front end to signal &lsquo;invalid array index&rsquo; exceptions.
</p>
<a name="index-ctrapMM4-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>ctrap<var>MM</var>4</samp>&rsquo;</dt>
<dd><p>Conditional trap instruction.  Operand 0 is a piece of RTL which
performs a comparison, and operands 1 and 2 are the arms of the
comparison.  Operand 3 is the trap code, an integer.
</p>
<p>A typical <code>ctrap</code> pattern looks like
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;ctrapsi4&quot;
  [(trap_if (match_operator 0 &quot;trap_operator&quot;
             [(match_operand 1 &quot;register_operand&quot;)
              (match_operand 2 &quot;immediate_operand&quot;)])
            (match_operand 3 &quot;const_int_operand&quot; &quot;i&quot;))]
  &quot;&quot;
  &quot;&hellip;&quot;)
</pre></div>

<a name="index-prefetch-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>prefetch</samp>&rsquo;</dt>
<dd>
<p>This pattern, if defined, emits code for a non-faulting data prefetch
instruction.  Operand 0 is the address of the memory to prefetch.  Operand 1
is a constant 1 if the prefetch is preparing for a write to the memory
address, or a constant 0 otherwise.  Operand 2 is the expected degree of
temporal locality of the data and is a value between 0 and 3, inclusive; 0
means that the data has no temporal locality, so it need not be left in the
cache after the access; 3 means that the data has a high degree of temporal
locality and should be left in all levels of cache possible;  1 and 2 mean,
respectively, a low or moderate degree of temporal locality.
</p>
<p>Targets that do not support write prefetches or locality hints can ignore
the values of operands 1 and 2.
</p>
<a name="index-blockage-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>blockage</samp>&rsquo;</dt>
<dd>
<p>This pattern defines a pseudo insn that prevents the instruction
scheduler and other passes from moving instructions and using register
equivalences across the boundary defined by the blockage insn.
This needs to be an UNSPEC_VOLATILE pattern or a volatile ASM.
</p>
<a name="index-memory_005fbarrier-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>memory_barrier</samp>&rsquo;</dt>
<dd>
<p>If the target memory model is not fully synchronous, then this pattern
should be defined to an instruction that orders both loads and stores
before the instruction with respect to loads and stores after the instruction.
This pattern has no operands.
</p>
<a name="index-sync_005fcompare_005fand_005fswapmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sync_compare_and_swap<var>mode</var></samp>&rsquo;</dt>
<dd>
<p>This pattern, if defined, emits code for an atomic compare-and-swap
operation.  Operand 1 is the memory on which the atomic operation is
performed.  Operand 2 is the &ldquo;old&rdquo; value to be compared against the
current contents of the memory location.  Operand 3 is the &ldquo;new&rdquo; value
to store in the memory if the compare succeeds.  Operand 0 is the result
of the operation; it should contain the contents of the memory
before the operation.  If the compare succeeds, this should obviously be
a copy of operand 2.
</p>
<p>This pattern must show that both operand 0 and operand 1 are modified.
</p>
<p>This pattern must issue any memory barrier instructions such that all
memory operations before the atomic operation occur before the atomic
operation and all memory operations after the atomic operation occur
after the atomic operation.
</p>
<p>For targets where the success or failure of the compare-and-swap
operation is available via the status flags, it is possible to
avoid a separate compare operation and issue the subsequent
branch or store-flag operation immediately after the compare-and-swap.
To this end, GCC will look for a <code>MODE_CC</code> set in the
output of <code>sync_compare_and_swap<var>mode</var></code>; if the machine
description includes such a set, the target should also define special
<code>cbranchcc4</code> and/or <code>cstorecc4</code> instructions.  GCC will then
be able to take the destination of the <code>MODE_CC</code> set and pass it
to the <code>cbranchcc4</code> or <code>cstorecc4</code> pattern as the first
operand of the comparison (the second will be <code>(const_int 0)</code>).
</p>
<p>For targets where the operating system may provide support for this
operation via library calls, the <code>sync_compare_and_swap_optab</code>
may be initialized to a function with the same interface as the
<code>__sync_val_compare_and_swap_<var>n</var></code> built-in.  If the entire
set of <var>__sync</var> builtins are supported via library calls, the
target can initialize all of the optabs at once with
<code>init_sync_libfuncs</code>.
For the purposes of C++11 <code>std::atomic::is_lock_free</code>, it is
assumed that these library calls do <em>not</em> use any kind of
interruptable locking.
</p>
<a name="index-sync_005faddmode-instruction-pattern"></a>
<a name="index-sync_005fsubmode-instruction-pattern"></a>
<a name="index-sync_005fiormode-instruction-pattern"></a>
<a name="index-sync_005fandmode-instruction-pattern"></a>
<a name="index-sync_005fxormode-instruction-pattern"></a>
<a name="index-sync_005fnandmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sync_add<var>mode</var></samp>&rsquo;, &lsquo;<samp>sync_sub<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>sync_ior<var>mode</var></samp>&rsquo;, &lsquo;<samp>sync_and<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>sync_xor<var>mode</var></samp>&rsquo;, &lsquo;<samp>sync_nand<var>mode</var></samp>&rsquo;</dt>
<dd>
<p>These patterns emit code for an atomic operation on memory.
Operand 0 is the memory on which the atomic operation is performed.
Operand 1 is the second operand to the binary operator.
</p>
<p>This pattern must issue any memory barrier instructions such that all
memory operations before the atomic operation occur before the atomic
operation and all memory operations after the atomic operation occur
after the atomic operation.
</p>
<p>If these patterns are not defined, the operation will be constructed
from a compare-and-swap operation, if defined.
</p>
<a name="index-sync_005fold_005faddmode-instruction-pattern"></a>
<a name="index-sync_005fold_005fsubmode-instruction-pattern"></a>
<a name="index-sync_005fold_005fiormode-instruction-pattern"></a>
<a name="index-sync_005fold_005fandmode-instruction-pattern"></a>
<a name="index-sync_005fold_005fxormode-instruction-pattern"></a>
<a name="index-sync_005fold_005fnandmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sync_old_add<var>mode</var></samp>&rsquo;, &lsquo;<samp>sync_old_sub<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>sync_old_ior<var>mode</var></samp>&rsquo;, &lsquo;<samp>sync_old_and<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>sync_old_xor<var>mode</var></samp>&rsquo;, &lsquo;<samp>sync_old_nand<var>mode</var></samp>&rsquo;</dt>
<dd>
<p>These patterns emit code for an atomic operation on memory,
and return the value that the memory contained before the operation.
Operand 0 is the result value, operand 1 is the memory on which the
atomic operation is performed, and operand 2 is the second operand
to the binary operator.
</p>
<p>This pattern must issue any memory barrier instructions such that all
memory operations before the atomic operation occur before the atomic
operation and all memory operations after the atomic operation occur
after the atomic operation.
</p>
<p>If these patterns are not defined, the operation will be constructed
from a compare-and-swap operation, if defined.
</p>
<a name="index-sync_005fnew_005faddmode-instruction-pattern"></a>
<a name="index-sync_005fnew_005fsubmode-instruction-pattern"></a>
<a name="index-sync_005fnew_005fiormode-instruction-pattern"></a>
<a name="index-sync_005fnew_005fandmode-instruction-pattern"></a>
<a name="index-sync_005fnew_005fxormode-instruction-pattern"></a>
<a name="index-sync_005fnew_005fnandmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sync_new_add<var>mode</var></samp>&rsquo;, &lsquo;<samp>sync_new_sub<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>sync_new_ior<var>mode</var></samp>&rsquo;, &lsquo;<samp>sync_new_and<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>sync_new_xor<var>mode</var></samp>&rsquo;, &lsquo;<samp>sync_new_nand<var>mode</var></samp>&rsquo;</dt>
<dd>
<p>These patterns are like their <code>sync_old_<var>op</var></code> counterparts,
except that they return the value that exists in the memory location
after the operation, rather than before the operation.
</p>
<a name="index-sync_005flock_005ftest_005fand_005fsetmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sync_lock_test_and_set<var>mode</var></samp>&rsquo;</dt>
<dd>
<p>This pattern takes two forms, based on the capabilities of the target.
In either case, operand 0 is the result of the operand, operand 1 is
the memory on which the atomic operation is performed, and operand 2
is the value to set in the lock.
</p>
<p>In the ideal case, this operation is an atomic exchange operation, in
which the previous value in memory operand is copied into the result
operand, and the value operand is stored in the memory operand.
</p>
<p>For less capable targets, any value operand that is not the constant 1
should be rejected with <code>FAIL</code>.  In this case the target may use
an atomic test-and-set bit operation.  The result operand should contain
1 if the bit was previously set and 0 if the bit was previously clear.
The true contents of the memory operand are implementation defined.
</p>
<p>This pattern must issue any memory barrier instructions such that the
pattern as a whole acts as an acquire barrier, that is all memory
operations after the pattern do not occur until the lock is acquired.
</p>
<p>If this pattern is not defined, the operation will be constructed from
a compare-and-swap operation, if defined.
</p>
<a name="index-sync_005flock_005freleasemode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>sync_lock_release<var>mode</var></samp>&rsquo;</dt>
<dd>
<p>This pattern, if defined, releases a lock set by
<code>sync_lock_test_and_set<var>mode</var></code>.  Operand 0 is the memory
that contains the lock; operand 1 is the value to store in the lock.
</p>
<p>If the target doesn&rsquo;t implement full semantics for
<code>sync_lock_test_and_set<var>mode</var></code>, any value operand which is not
the constant 0 should be rejected with <code>FAIL</code>, and the true contents
of the memory operand are implementation defined.
</p>
<p>This pattern must issue any memory barrier instructions such that the
pattern as a whole acts as a release barrier, that is the lock is
released only after all previous memory operations have completed.
</p>
<p>If this pattern is not defined, then a <code>memory_barrier</code> pattern
will be emitted, followed by a store of the value to the memory operand.
</p>
<a name="index-atomic_005fcompare_005fand_005fswapmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>atomic_compare_and_swap<var>mode</var></samp>&rsquo;</dt>
<dd><p>This pattern, if defined, emits code for an atomic compare-and-swap
operation with memory model semantics.  Operand 2 is the memory on which
the atomic operation is performed.  Operand 0 is an output operand which
is set to true or false based on whether the operation succeeded.  Operand
1 is an output operand which is set to the contents of the memory before
the operation was attempted.  Operand 3 is the value that is expected to
be in memory.  Operand 4 is the value to put in memory if the expected
value is found there.  Operand 5 is set to 1 if this compare and swap is to
be treated as a weak operation.  Operand 6 is the memory model to be used
if the operation is a success.  Operand 7 is the memory model to be used
if the operation fails.
</p>
<p>If memory referred to in operand 2 contains the value in operand 3, then
operand 4 is stored in memory pointed to by operand 2 and fencing based on
the memory model in operand 6 is issued.  
</p>
<p>If memory referred to in operand 2 does not contain the value in operand 3,
then fencing based on the memory model in operand 7 is issued.
</p>
<p>If a target does not support weak compare-and-swap operations, or the port
elects not to implement weak operations, the argument in operand 5 can be
ignored.  Note a strong implementation must be provided.
</p>
<p>If this pattern is not provided, the <code>__atomic_compare_exchange</code>
built-in functions will utilize the legacy <code>sync_compare_and_swap</code>
pattern with an <code>__ATOMIC_SEQ_CST</code> memory model.
</p>
<a name="index-atomic_005floadmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>atomic_load<var>mode</var></samp>&rsquo;</dt>
<dd><p>This pattern implements an atomic load operation with memory model
semantics.  Operand 1 is the memory address being loaded from.  Operand 0
is the result of the load.  Operand 2 is the memory model to be used for
the load operation.
</p>
<p>If not present, the <code>__atomic_load</code> built-in function will either
resort to a normal load with memory barriers, or a compare-and-swap
operation if a normal load would not be atomic.
</p>
<a name="index-atomic_005fstoremode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>atomic_store<var>mode</var></samp>&rsquo;</dt>
<dd><p>This pattern implements an atomic store operation with memory model
semantics.  Operand 0 is the memory address being stored to.  Operand 1
is the value to be written.  Operand 2 is the memory model to be used for
the operation.
</p>
<p>If not present, the <code>__atomic_store</code> built-in function will attempt to
perform a normal store and surround it with any required memory fences.  If
the store would not be atomic, then an <code>__atomic_exchange</code> is
attempted with the result being ignored.
</p>
<a name="index-atomic_005fexchangemode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>atomic_exchange<var>mode</var></samp>&rsquo;</dt>
<dd><p>This pattern implements an atomic exchange operation with memory model
semantics.  Operand 1 is the memory location the operation is performed on.
Operand 0 is an output operand which is set to the original value contained
in the memory pointed to by operand 1.  Operand 2 is the value to be
stored.  Operand 3 is the memory model to be used.
</p>
<p>If this pattern is not present, the built-in function
<code>__atomic_exchange</code> will attempt to preform the operation with a
compare and swap loop.
</p>
<a name="index-atomic_005faddmode-instruction-pattern"></a>
<a name="index-atomic_005fsubmode-instruction-pattern"></a>
<a name="index-atomic_005formode-instruction-pattern"></a>
<a name="index-atomic_005fandmode-instruction-pattern"></a>
<a name="index-atomic_005fxormode-instruction-pattern"></a>
<a name="index-atomic_005fnandmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>atomic_add<var>mode</var></samp>&rsquo;, &lsquo;<samp>atomic_sub<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>atomic_or<var>mode</var></samp>&rsquo;, &lsquo;<samp>atomic_and<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>atomic_xor<var>mode</var></samp>&rsquo;, &lsquo;<samp>atomic_nand<var>mode</var></samp>&rsquo;</dt>
<dd>
<p>These patterns emit code for an atomic operation on memory with memory
model semantics. Operand 0 is the memory on which the atomic operation is
performed.  Operand 1 is the second operand to the binary operator.
Operand 2 is the memory model to be used by the operation.
</p>
<p>If these patterns are not defined, attempts will be made to use legacy
<code>sync</code> patterns, or equivalent patterns which return a result.  If
none of these are available a compare-and-swap loop will be used.
</p>
<a name="index-atomic_005ffetch_005faddmode-instruction-pattern"></a>
<a name="index-atomic_005ffetch_005fsubmode-instruction-pattern"></a>
<a name="index-atomic_005ffetch_005formode-instruction-pattern"></a>
<a name="index-atomic_005ffetch_005fandmode-instruction-pattern"></a>
<a name="index-atomic_005ffetch_005fxormode-instruction-pattern"></a>
<a name="index-atomic_005ffetch_005fnandmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>atomic_fetch_add<var>mode</var></samp>&rsquo;, &lsquo;<samp>atomic_fetch_sub<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>atomic_fetch_or<var>mode</var></samp>&rsquo;, &lsquo;<samp>atomic_fetch_and<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>atomic_fetch_xor<var>mode</var></samp>&rsquo;, &lsquo;<samp>atomic_fetch_nand<var>mode</var></samp>&rsquo;</dt>
<dd>
<p>These patterns emit code for an atomic operation on memory with memory
model semantics, and return the original value. Operand 0 is an output 
operand which contains the value of the memory location before the 
operation was performed.  Operand 1 is the memory on which the atomic 
operation is performed.  Operand 2 is the second operand to the binary
operator.  Operand 3 is the memory model to be used by the operation.
</p>
<p>If these patterns are not defined, attempts will be made to use legacy
<code>sync</code> patterns.  If none of these are available a compare-and-swap
loop will be used.
</p>
<a name="index-atomic_005fadd_005ffetchmode-instruction-pattern"></a>
<a name="index-atomic_005fsub_005ffetchmode-instruction-pattern"></a>
<a name="index-atomic_005for_005ffetchmode-instruction-pattern"></a>
<a name="index-atomic_005fand_005ffetchmode-instruction-pattern"></a>
<a name="index-atomic_005fxor_005ffetchmode-instruction-pattern"></a>
<a name="index-atomic_005fnand_005ffetchmode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>atomic_add_fetch<var>mode</var></samp>&rsquo;, &lsquo;<samp>atomic_sub_fetch<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>atomic_or_fetch<var>mode</var></samp>&rsquo;, &lsquo;<samp>atomic_and_fetch<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>atomic_xor_fetch<var>mode</var></samp>&rsquo;, &lsquo;<samp>atomic_nand_fetch<var>mode</var></samp>&rsquo;</dt>
<dd>
<p>These patterns emit code for an atomic operation on memory with memory
model semantics and return the result after the operation is performed.
Operand 0 is an output operand which contains the value after the
operation.  Operand 1 is the memory on which the atomic operation is
performed.  Operand 2 is the second operand to the binary operator.
Operand 3 is the memory model to be used by the operation.
</p>
<p>If these patterns are not defined, attempts will be made to use legacy
<code>sync</code> patterns, or equivalent patterns which return the result before
the operation followed by the arithmetic operation required to produce the
result.  If none of these are available a compare-and-swap loop will be
used.
</p>
<a name="index-atomic_005ftest_005fand_005fset-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>atomic_test_and_set</samp>&rsquo;</dt>
<dd>
<p>This pattern emits code for <code>__builtin_atomic_test_and_set</code>.
Operand 0 is an output operand which is set to true if the previous
previous contents of the byte was &quot;set&quot;, and false otherwise.  Operand 1
is the <code>QImode</code> memory to be modified.  Operand 2 is the memory
model to be used.
</p>
<p>The specific value that defines &quot;set&quot; is implementation defined, and
is normally based on what is performed by the native atomic test and set
instruction.
</p>
<a name="index-mem_005fthread_005ffencemode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>mem_thread_fence<var>mode</var></samp>&rsquo;</dt>
<dd><p>This pattern emits code required to implement a thread fence with
memory model semantics.  Operand 0 is the memory model to be used.
</p>
<p>If this pattern is not specified, all memory models except
<code>__ATOMIC_RELAXED</code> will result in issuing a <code>sync_synchronize</code>
barrier pattern.
</p>
<a name="index-mem_005fsignal_005ffencemode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>mem_signal_fence<var>mode</var></samp>&rsquo;</dt>
<dd><p>This pattern emits code required to implement a signal fence with
memory model semantics.  Operand 0 is the memory model to be used.
</p>
<p>This pattern should impact the compiler optimizers the same way that
mem_signal_fence does, but it does not need to issue any barrier
instructions.
</p>
<p>If this pattern is not specified, all memory models except
<code>__ATOMIC_RELAXED</code> will result in issuing a <code>sync_synchronize</code>
barrier pattern.
</p>
<a name="index-get_005fthread_005fpointermode-instruction-pattern"></a>
<a name="index-set_005fthread_005fpointermode-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>get_thread_pointer<var>mode</var></samp>&rsquo;</dt>
<dt>&lsquo;<samp>set_thread_pointer<var>mode</var></samp>&rsquo;</dt>
<dd><p>These patterns emit code that reads/sets the TLS thread pointer. Currently,
these are only needed if the target needs to support the
<code>__builtin_thread_pointer</code> and <code>__builtin_set_thread_pointer</code>
builtins.
</p>
<p>The get/set patterns have a single output/input operand respectively,
with <var>mode</var> intended to be <code>Pmode</code>.
</p>
<a name="index-stack_005fprotect_005fset-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>stack_protect_set</samp>&rsquo;</dt>
<dd>
<p>This pattern, if defined, moves a <code>ptr_mode</code> value from the memory
in operand 1 to the memory in operand 0 without leaving the value in
a register afterward.  This is to avoid leaking the value some place
that an attacker might use to rewrite the stack guard slot after
having clobbered it.
</p>
<p>If this pattern is not defined, then a plain move pattern is generated.
</p>
<a name="index-stack_005fprotect_005ftest-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>stack_protect_test</samp>&rsquo;</dt>
<dd>
<p>This pattern, if defined, compares a <code>ptr_mode</code> value from the
memory in operand 1 with the memory in operand 0 without leaving the
value in a register afterward and branches to operand 2 if the values
were equal.
</p>
<p>If this pattern is not defined, then a plain compare pattern and
conditional branch pattern is used.
</p>
<a name="index-clear_005fcache-instruction-pattern"></a>
</dd>
<dt>&lsquo;<samp>clear_cache</samp>&rsquo;</dt>
<dd>
<p>This pattern, if defined, flushes the instruction cache for a region of
memory.  The region is bounded to by the Pmode pointers in operand 0
inclusive and operand 1 exclusive.
</p>
<p>If this pattern is not defined, a call to the library function
<code>__clear_cache</code> is used.
</p>
</dd>
</dl>

<hr>
<a name="Pattern-Ordering"></a>
<div class="header">
<p>
Next: <a href="#Dependent-Patterns" accesskey="n" rel="next">Dependent Patterns</a>, Previous: <a href="#Standard-Names" accesskey="p" rel="prev">Standard Names</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="When-the-Order-of-Patterns-Matters"></a>
<h3 class="section">16.10 When the Order of Patterns Matters</h3>
<a name="index-Pattern-Ordering"></a>
<a name="index-Ordering-of-Patterns"></a>

<p>Sometimes an insn can match more than one instruction pattern.  Then the
pattern that appears first in the machine description is the one used.
Therefore, more specific patterns (patterns that will match fewer things)
and faster instructions (those that will produce better code when they
do match) should usually go first in the description.
</p>
<p>In some cases the effect of ordering the patterns can be used to hide
a pattern when it is not valid.  For example, the 68000 has an
instruction for converting a fullword to floating point and another
for converting a byte to floating point.  An instruction converting
an integer to floating point could match either one.  We put the
pattern to convert the fullword first to make sure that one will
be used rather than the other.  (Otherwise a large integer might
be generated as a single-byte immediate quantity, which would not work.)
Instead of using this pattern ordering it would be possible to make the
pattern for convert-a-byte smart enough to deal properly with any
constant value.
</p>
<hr>
<a name="Dependent-Patterns"></a>
<div class="header">
<p>
Next: <a href="#Jump-Patterns" accesskey="n" rel="next">Jump Patterns</a>, Previous: <a href="#Pattern-Ordering" accesskey="p" rel="prev">Pattern Ordering</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Interdependence-of-Patterns"></a>
<h3 class="section">16.11 Interdependence of Patterns</h3>
<a name="index-Dependent-Patterns"></a>
<a name="index-Interdependence-of-Patterns"></a>

<p>In some cases machines support instructions identical except for the
machine mode of one or more operands.  For example, there may be
&ldquo;sign-extend halfword&rdquo; and &ldquo;sign-extend byte&rdquo; instructions whose
patterns are
</p>
<div class="smallexample">
<pre class="smallexample">(set (match_operand:SI 0 &hellip;)
     (extend:SI (match_operand:HI 1 &hellip;)))

(set (match_operand:SI 0 &hellip;)
     (extend:SI (match_operand:QI 1 &hellip;)))
</pre></div>

<p>Constant integers do not specify a machine mode, so an instruction to
extend a constant value could match either pattern.  The pattern it
actually will match is the one that appears first in the file.  For correct
results, this must be the one for the widest possible mode (<code>HImode</code>,
here).  If the pattern matches the <code>QImode</code> instruction, the results
will be incorrect if the constant value does not actually fit that mode.
</p>
<p>Such instructions to extend constants are rarely generated because they are
optimized away, but they do occasionally happen in nonoptimized
compilations.
</p>
<p>If a constraint in a pattern allows a constant, the reload pass may
replace a register with a constant permitted by the constraint in some
cases.  Similarly for memory references.  Because of this substitution,
you should not provide separate patterns for increment and decrement
instructions.  Instead, they should be generated from the same pattern
that supports register-register add insns by examining the operands and
generating the appropriate machine instruction.
</p>
<hr>
<a name="Jump-Patterns"></a>
<div class="header">
<p>
Next: <a href="#Looping-Patterns" accesskey="n" rel="next">Looping Patterns</a>, Previous: <a href="#Dependent-Patterns" accesskey="p" rel="prev">Dependent Patterns</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-Jump-Instruction-Patterns"></a>
<h3 class="section">16.12 Defining Jump Instruction Patterns</h3>
<a name="index-jump-instruction-patterns"></a>
<a name="index-defining-jump-instruction-patterns"></a>

<p>GCC does not assume anything about how the machine realizes jumps.
The machine description should define a single pattern, usually
a <code>define_expand</code>, which expands to all the required insns.
</p>
<p>Usually, this would be a comparison insn to set the condition code
and a separate branch insn testing the condition code and branching
or not according to its value.  For many machines, however,
separating compares and branches is limiting, which is why the
more flexible approach with one <code>define_expand</code> is used in GCC.
The machine description becomes clearer for architectures that
have compare-and-branch instructions but no condition code.  It also
works better when different sets of comparison operators are supported
by different kinds of conditional branches (e.g. integer vs. floating-point),
or by conditional branches with respect to conditional stores.
</p>
<p>Two separate insns are always used if the machine description represents
a condition code register using the legacy RTL expression <code>(cc0)</code>,
and on most machines that use a separate condition code register
(see <a href="#Condition-Code">Condition Code</a>).  For machines that use <code>(cc0)</code>, in
fact, the set and use of the condition code must be separate and
adjacent<a name="DOCF4" href="#FOOT4"><sup>4</sup></a>, thus
allowing flags in <code>cc_status</code> to be used (see <a href="#Condition-Code">Condition Code</a>) and
so that the comparison and branch insns could be located from each other
by using the functions <code>prev_cc0_setter</code> and <code>next_cc0_user</code>.
</p>
<p>Even in this case having a single entry point for conditional branches
is advantageous, because it handles equally well the case where a single
comparison instruction records the results of both signed and unsigned
comparison of the given operands (with the branch insns coming in distinct
signed and unsigned flavors) as in the x86 or SPARC, and the case where
there are distinct signed and unsigned compare instructions and only
one set of conditional branch instructions as in the PowerPC.
</p>
<hr>
<a name="Looping-Patterns"></a>
<div class="header">
<p>
Next: <a href="#Insn-Canonicalizations" accesskey="n" rel="next">Insn Canonicalizations</a>, Previous: <a href="#Jump-Patterns" accesskey="p" rel="prev">Jump Patterns</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-Looping-Instruction-Patterns"></a>
<h3 class="section">16.13 Defining Looping Instruction Patterns</h3>
<a name="index-looping-instruction-patterns"></a>
<a name="index-defining-looping-instruction-patterns"></a>

<p>Some machines have special jump instructions that can be utilized to
make loops more efficient.  A common example is the 68000 &lsquo;<samp>dbra</samp>&rsquo;
instruction which performs a decrement of a register and a branch if the
result was greater than zero.  Other machines, in particular digital
signal processors (DSPs), have special block repeat instructions to
provide low-overhead loop support.  For example, the TI TMS320C3x/C4x
DSPs have a block repeat instruction that loads special registers to
mark the top and end of a loop and to count the number of loop
iterations.  This avoids the need for fetching and executing a
&lsquo;<samp>dbra</samp>&rsquo;-like instruction and avoids pipeline stalls associated with
the jump.
</p>
<p>GCC has three special named patterns to support low overhead looping.
They are &lsquo;<samp>decrement_and_branch_until_zero</samp>&rsquo;, &lsquo;<samp>doloop_begin</samp>&rsquo;,
and &lsquo;<samp>doloop_end</samp>&rsquo;.  The first pattern,
&lsquo;<samp>decrement_and_branch_until_zero</samp>&rsquo;, is not emitted during RTL
generation but may be emitted during the instruction combination phase.
This requires the assistance of the loop optimizer, using information
collected during strength reduction, to reverse a loop to count down to
zero.  Some targets also require the loop optimizer to add a
<code>REG_NONNEG</code> note to indicate that the iteration count is always
positive.  This is needed if the target performs a signed loop
termination test.  For example, the 68000 uses a pattern similar to the
following for its <code>dbra</code> instruction:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;decrement_and_branch_until_zero&quot;
  [(set (pc)
        (if_then_else
          (ge (plus:SI (match_operand:SI 0 &quot;general_operand&quot; &quot;+d*am&quot;)
                       (const_int -1))
              (const_int 0))
          (label_ref (match_operand 1 &quot;&quot; &quot;&quot;))
          (pc)))
   (set (match_dup 0)
        (plus:SI (match_dup 0)
                 (const_int -1)))]
  &quot;find_reg_note (insn, REG_NONNEG, 0)&quot;
  &quot;&hellip;&quot;)
</pre></div>

<p>Note that since the insn is both a jump insn and has an output, it must
deal with its own reloads, hence the &lsquo;m&rsquo; constraints.  Also note that
since this insn is generated by the instruction combination phase
combining two sequential insns together into an implicit parallel insn,
the iteration counter needs to be biased by the same amount as the
decrement operation, in this case -1.  Note that the following similar
pattern will not be matched by the combiner.
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;decrement_and_branch_until_zero&quot;
  [(set (pc)
        (if_then_else
          (ge (match_operand:SI 0 &quot;general_operand&quot; &quot;+d*am&quot;)
              (const_int 1))
          (label_ref (match_operand 1 &quot;&quot; &quot;&quot;))
          (pc)))
   (set (match_dup 0)
        (plus:SI (match_dup 0)
                 (const_int -1)))]
  &quot;find_reg_note (insn, REG_NONNEG, 0)&quot;
  &quot;&hellip;&quot;)
</pre></div>

<p>The other two special looping patterns, &lsquo;<samp>doloop_begin</samp>&rsquo; and
&lsquo;<samp>doloop_end</samp>&rsquo;, are emitted by the loop optimizer for certain
well-behaved loops with a finite number of loop iterations using
information collected during strength reduction.
</p>
<p>The &lsquo;<samp>doloop_end</samp>&rsquo; pattern describes the actual looping instruction
(or the implicit looping operation) and the &lsquo;<samp>doloop_begin</samp>&rsquo; pattern
is an optional companion pattern that can be used for initialization
needed for some low-overhead looping instructions.
</p>
<p>Note that some machines require the actual looping instruction to be
emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs).  Emitting
the true RTL for a looping instruction at the top of the loop can cause
problems with flow analysis.  So instead, a dummy <code>doloop</code> insn is
emitted at the end of the loop.  The machine dependent reorg pass checks
for the presence of this <code>doloop</code> insn and then searches back to
the top of the loop, where it inserts the true looping insn (provided
there are no instructions in the loop which would cause problems).  Any
additional labels can be emitted at this point.  In addition, if the
desired special iteration counter register was not allocated, this
machine dependent reorg pass could emit a traditional compare and jump
instruction pair.
</p>
<p>The essential difference between the
&lsquo;<samp>decrement_and_branch_until_zero</samp>&rsquo; and the &lsquo;<samp>doloop_end</samp>&rsquo;
patterns is that the loop optimizer allocates an additional pseudo
register for the latter as an iteration counter.  This pseudo register
cannot be used within the loop (i.e., general induction variables cannot
be derived from it), however, in many cases the loop induction variable
may become redundant and removed by the flow pass.
</p>

<hr>
<a name="Insn-Canonicalizations"></a>
<div class="header">
<p>
Next: <a href="#Expander-Definitions" accesskey="n" rel="next">Expander Definitions</a>, Previous: <a href="#Looping-Patterns" accesskey="p" rel="prev">Looping Patterns</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Canonicalization-of-Instructions"></a>
<h3 class="section">16.14 Canonicalization of Instructions</h3>
<a name="index-canonicalization-of-instructions"></a>
<a name="index-insn-canonicalization"></a>

<p>There are often cases where multiple RTL expressions could represent an
operation performed by a single machine instruction.  This situation is
most commonly encountered with logical, branch, and multiply-accumulate
instructions.  In such cases, the compiler attempts to convert these
multiple RTL expressions into a single canonical form to reduce the
number of insn patterns required.
</p>
<p>In addition to algebraic simplifications, following canonicalizations
are performed:
</p>
<ul>
<li> For commutative and comparison operators, a constant is always made the
second operand.  If a machine only supports a constant as the second
operand, only patterns that match a constant in the second operand need
be supplied.

</li><li> For associative operators, a sequence of operators will always chain
to the left; for instance, only the left operand of an integer <code>plus</code>
can itself be a <code>plus</code>.  <code>and</code>, <code>ior</code>, <code>xor</code>,
<code>plus</code>, <code>mult</code>, <code>smin</code>, <code>smax</code>, <code>umin</code>, and
<code>umax</code> are associative when applied to integers, and sometimes to
floating-point.

</li><li> <a name="index-neg_002c-canonicalization-of"></a>
<a name="index-not_002c-canonicalization-of"></a>
<a name="index-mult_002c-canonicalization-of"></a>
<a name="index-plus_002c-canonicalization-of"></a>
<a name="index-minus_002c-canonicalization-of"></a>
For these operators, if only one operand is a <code>neg</code>, <code>not</code>,
<code>mult</code>, <code>plus</code>, or <code>minus</code> expression, it will be the
first operand.

</li><li> In combinations of <code>neg</code>, <code>mult</code>, <code>plus</code>, and
<code>minus</code>, the <code>neg</code> operations (if any) will be moved inside
the operations as far as possible.  For instance,
<code>(neg (mult A B))</code> is canonicalized as <code>(mult (neg A) B)</code>, but
<code>(plus (mult (neg B) C) A)</code> is canonicalized as
<code>(minus A (mult B C))</code>.

</li><li> <a name="index-compare_002c-canonicalization-of"></a>
For the <code>compare</code> operator, a constant is always the second operand
if the first argument is a condition code register or <code>(cc0)</code>.

</li><li> An operand of <code>neg</code>, <code>not</code>, <code>mult</code>, <code>plus</code>, or
<code>minus</code> is made the first operand under the same conditions as
above.

</li><li> <code>(ltu (plus <var>a</var> <var>b</var>) <var>b</var>)</code> is converted to
<code>(ltu (plus <var>a</var> <var>b</var>) <var>a</var>)</code>. Likewise with <code>geu</code> instead
of <code>ltu</code>.

</li><li> <code>(minus <var>x</var> (const_int <var>n</var>))</code> is converted to
<code>(plus <var>x</var> (const_int <var>-n</var>))</code>.

</li><li> Within address computations (i.e., inside <code>mem</code>), a left shift is
converted into the appropriate multiplication by a power of two.

</li><li> <a name="index-ior_002c-canonicalization-of"></a>
<a name="index-and_002c-canonicalization-of"></a>
<a name="index-De-Morgan_0027s-law"></a>
De Morgan&rsquo;s Law is used to move bitwise negation inside a bitwise
logical-and or logical-or operation.  If this results in only one
operand being a <code>not</code> expression, it will be the first one.

<p>A machine that has an instruction that performs a bitwise logical-and of one
operand with the bitwise negation of the other should specify the pattern
for that instruction as
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(set (match_operand:<var>m</var> 0 &hellip;)
        (and:<var>m</var> (not:<var>m</var> (match_operand:<var>m</var> 1 &hellip;))
                     (match_operand:<var>m</var> 2 &hellip;)))]
  &quot;&hellip;&quot;
  &quot;&hellip;&quot;)
</pre></div>

<p>Similarly, a pattern for a &ldquo;NAND&rdquo; instruction should be written
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(set (match_operand:<var>m</var> 0 &hellip;)
        (ior:<var>m</var> (not:<var>m</var> (match_operand:<var>m</var> 1 &hellip;))
                     (not:<var>m</var> (match_operand:<var>m</var> 2 &hellip;))))]
  &quot;&hellip;&quot;
  &quot;&hellip;&quot;)
</pre></div>

<p>In both cases, it is not necessary to include patterns for the many
logically equivalent RTL expressions.
</p>
</li><li> <a name="index-xor_002c-canonicalization-of"></a>
The only possible RTL expressions involving both bitwise exclusive-or
and bitwise negation are <code>(xor:<var>m</var> <var>x</var> <var>y</var>)</code>
and <code>(not:<var>m</var> (xor:<var>m</var> <var>x</var> <var>y</var>))</code>.

</li><li> The sum of three items, one of which is a constant, will only appear in
the form

<div class="smallexample">
<pre class="smallexample">(plus:<var>m</var> (plus:<var>m</var> <var>x</var> <var>y</var>) <var>constant</var>)
</pre></div>

</li><li> <a name="index-zero_005fextract_002c-canonicalization-of"></a>
<a name="index-sign_005fextract_002c-canonicalization-of"></a>
Equality comparisons of a group of bits (usually a single bit) with zero
will be written using <code>zero_extract</code> rather than the equivalent
<code>and</code> or <code>sign_extract</code> operations.

</li><li> <a name="index-mult_002c-canonicalization-of-1"></a>
<code>(sign_extend:<var>m1</var> (mult:<var>m2</var> (sign_extend:<var>m2</var> <var>x</var>)
(sign_extend:<var>m2</var> <var>y</var>)))</code> is converted to <code>(mult:<var>m1</var>
(sign_extend:<var>m1</var> <var>x</var>) (sign_extend:<var>m1</var> <var>y</var>))</code>, and likewise
for <code>zero_extend</code>.

</li><li> <code>(sign_extend:<var>m1</var> (mult:<var>m2</var> (ashiftrt:<var>m2</var>
<var>x</var> <var>s</var>) (sign_extend:<var>m2</var> <var>y</var>)))</code> is converted
to <code>(mult:<var>m1</var> (sign_extend:<var>m1</var> (ashiftrt:<var>m2</var>
<var>x</var> <var>s</var>)) (sign_extend:<var>m1</var> <var>y</var>))</code>, and likewise for
patterns using <code>zero_extend</code> and <code>lshiftrt</code>.  If the second
operand of <code>mult</code> is also a shift, then that is extended also.
This transformation is only applied when it can be proven that the
original operation had sufficient precision to prevent overflow.

</li></ul>

<p>Further canonicalization rules are defined in the function
<code>commutative_operand_precedence</code> in <samp>gcc/rtlanal.c</samp>.
</p>
<hr>
<a name="Expander-Definitions"></a>
<div class="header">
<p>
Next: <a href="#Insn-Splitting" accesskey="n" rel="next">Insn Splitting</a>, Previous: <a href="#Insn-Canonicalizations" accesskey="p" rel="prev">Insn Canonicalizations</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-RTL-Sequences-for-Code-Generation"></a>
<h3 class="section">16.15 Defining RTL Sequences for Code Generation</h3>
<a name="index-expander-definitions"></a>
<a name="index-code-generation-RTL-sequences"></a>
<a name="index-defining-RTL-sequences-for-code-generation"></a>

<p>On some target machines, some standard pattern names for RTL generation
cannot be handled with single insn, but a sequence of RTL insns can
represent them.  For these target machines, you can write a
<code>define_expand</code> to specify how to generate the sequence of RTL.
</p>
<a name="index-define_005fexpand"></a>
<p>A <code>define_expand</code> is an RTL expression that looks almost like a
<code>define_insn</code>; but, unlike the latter, a <code>define_expand</code> is used
only for RTL generation and it can produce more than one RTL insn.
</p>
<p>A <code>define_expand</code> RTX has four operands:
</p>
<ul>
<li> The name.  Each <code>define_expand</code> must have a name, since the only
use for it is to refer to it by name.

</li><li> The RTL template.  This is a vector of RTL expressions representing
a sequence of separate instructions.  Unlike <code>define_insn</code>, there
is no implicit surrounding <code>PARALLEL</code>.

</li><li> The condition, a string containing a C expression.  This expression is
used to express how the availability of this pattern depends on
subclasses of target machine, selected by command-line options when GCC
is run.  This is just like the condition of a <code>define_insn</code> that
has a standard name.  Therefore, the condition (if present) may not
depend on the data in the insn being matched, but only the
target-machine-type flags.  The compiler needs to test these conditions
during initialization in order to learn exactly which named instructions
are available in a particular run.

</li><li> The preparation statements, a string containing zero or more C
statements which are to be executed before RTL code is generated from
the RTL template.

<p>Usually these statements prepare temporary registers for use as
internal operands in the RTL template, but they can also generate RTL
insns directly by calling routines such as <code>emit_insn</code>, etc.
Any such insns precede the ones that come from the RTL template.
</p>
</li><li> Optionally, a vector containing the values of attributes. See <a href="#Insn-Attributes">Insn Attributes</a>.
</li></ul>

<p>Every RTL insn emitted by a <code>define_expand</code> must match some
<code>define_insn</code> in the machine description.  Otherwise, the compiler
will crash when trying to generate code for the insn or trying to optimize
it.
</p>
<p>The RTL template, in addition to controlling generation of RTL insns,
also describes the operands that need to be specified when this pattern
is used.  In particular, it gives a predicate for each operand.
</p>
<p>A true operand, which needs to be specified in order to generate RTL from
the pattern, should be described with a <code>match_operand</code> in its first
occurrence in the RTL template.  This enters information on the operand&rsquo;s
predicate into the tables that record such things.  GCC uses the
information to preload the operand into a register if that is required for
valid RTL code.  If the operand is referred to more than once, subsequent
references should use <code>match_dup</code>.
</p>
<p>The RTL template may also refer to internal &ldquo;operands&rdquo; which are
temporary registers or labels used only within the sequence made by the
<code>define_expand</code>.  Internal operands are substituted into the RTL
template with <code>match_dup</code>, never with <code>match_operand</code>.  The
values of the internal operands are not passed in as arguments by the
compiler when it requests use of this pattern.  Instead, they are computed
within the pattern, in the preparation statements.  These statements
compute the values and store them into the appropriate elements of
<code>operands</code> so that <code>match_dup</code> can find them.
</p>
<p>There are two special macros defined for use in the preparation statements:
<code>DONE</code> and <code>FAIL</code>.  Use them with a following semicolon,
as a statement.
</p>
<dl compact="compact">
<dd>
<a name="index-DONE"></a>
</dd>
<dt><code>DONE</code></dt>
<dd><p>Use the <code>DONE</code> macro to end RTL generation for the pattern.  The
only RTL insns resulting from the pattern on this occasion will be
those already emitted by explicit calls to <code>emit_insn</code> within the
preparation statements; the RTL template will not be generated.
</p>
<a name="index-FAIL"></a>
</dd>
<dt><code>FAIL</code></dt>
<dd><p>Make the pattern fail on this occasion.  When a pattern fails, it means
that the pattern was not truly available.  The calling routines in the
compiler will try other strategies for code generation using other patterns.
</p>
<p>Failure is currently supported only for binary (addition, multiplication,
shifting, etc.) and bit-field (<code>extv</code>, <code>extzv</code>, and <code>insv</code>)
operations.
</p></dd>
</dl>

<p>If the preparation falls through (invokes neither <code>DONE</code> nor
<code>FAIL</code>), then the <code>define_expand</code> acts like a
<code>define_insn</code> in that the RTL template is used to generate the
insn.
</p>
<p>The RTL template is not used for matching, only for generating the
initial insn list.  If the preparation statement always invokes
<code>DONE</code> or <code>FAIL</code>, the RTL template may be reduced to a simple
list of operands, such as this example:
</p>
<div class="smallexample">
<pre class="smallexample">(define_expand &quot;addsi3&quot;
  [(match_operand:SI 0 &quot;register_operand&quot; &quot;&quot;)
   (match_operand:SI 1 &quot;register_operand&quot; &quot;&quot;)
   (match_operand:SI 2 &quot;register_operand&quot; &quot;&quot;)]
</pre><pre class="smallexample">  &quot;&quot;
  &quot;
{
  handle_add (operands[0], operands[1], operands[2]);
  DONE;
}&quot;)
</pre></div>

<p>Here is an example, the definition of left-shift for the SPUR chip:
</p>
<div class="smallexample">
<pre class="smallexample">(define_expand &quot;ashlsi3&quot;
  [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;&quot;)
        (ashift:SI
</pre><pre class="smallexample">          (match_operand:SI 1 &quot;register_operand&quot; &quot;&quot;)
          (match_operand:SI 2 &quot;nonmemory_operand&quot; &quot;&quot;)))]
  &quot;&quot;
  &quot;
</pre></div>

<div class="smallexample">
<pre class="smallexample">{
  if (GET_CODE (operands[2]) != CONST_INT
      || (unsigned) INTVAL (operands[2]) &gt; 3)
    FAIL;
}&quot;)
</pre></div>

<p>This example uses <code>define_expand</code> so that it can generate an RTL insn
for shifting when the shift-count is in the supported range of 0 to 3 but
fail in other cases where machine insns aren&rsquo;t available.  When it fails,
the compiler tries another strategy using different patterns (such as, a
library call).
</p>
<p>If the compiler were able to handle nontrivial condition-strings in
patterns with names, then it would be possible to use a
<code>define_insn</code> in that case.  Here is another case (zero-extension
on the 68000) which makes more use of the power of <code>define_expand</code>:
</p>
<div class="smallexample">
<pre class="smallexample">(define_expand &quot;zero_extendhisi2&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;&quot;)
        (const_int 0))
   (set (strict_low_part
          (subreg:HI
            (match_dup 0)
            0))
        (match_operand:HI 1 &quot;general_operand&quot; &quot;&quot;))]
  &quot;&quot;
  &quot;operands[1] = make_safe_from (operands[1], operands[0]);&quot;)
</pre></div>

<a name="index-make_005fsafe_005ffrom"></a>
<p>Here two RTL insns are generated, one to clear the entire output operand
and the other to copy the input operand into its low half.  This sequence
is incorrect if the input operand refers to [the old value of] the output
operand, so the preparation statement makes sure this isn&rsquo;t so.  The
function <code>make_safe_from</code> copies the <code>operands[1]</code> into a
temporary register if it refers to <code>operands[0]</code>.  It does this
by emitting another RTL insn.
</p>
<p>Finally, a third example shows the use of an internal operand.
Zero-extension on the SPUR chip is done by <code>and</code>-ing the result
against a halfword mask.  But this mask cannot be represented by a
<code>const_int</code> because the constant value is too large to be legitimate
on this machine.  So it must be copied into a register with
<code>force_reg</code> and then the register used in the <code>and</code>.
</p>
<div class="smallexample">
<pre class="smallexample">(define_expand &quot;zero_extendhisi2&quot;
  [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;&quot;)
        (and:SI (subreg:SI
                  (match_operand:HI 1 &quot;register_operand&quot; &quot;&quot;)
                  0)
                (match_dup 2)))]
  &quot;&quot;
  &quot;operands[2]
     = force_reg (SImode, GEN_INT (65535)); &quot;)
</pre></div>

<p><em>Note:</em> If the <code>define_expand</code> is used to serve a
standard binary or unary arithmetic operation or a bit-field operation,
then the last insn it generates must not be a <code>code_label</code>,
<code>barrier</code> or <code>note</code>.  It must be an <code>insn</code>,
<code>jump_insn</code> or <code>call_insn</code>.  If you don&rsquo;t need a real insn
at the end, emit an insn to copy the result of the operation into
itself.  Such an insn will generate no code, but it can avoid problems
in the compiler.
</p>
<hr>
<a name="Insn-Splitting"></a>
<div class="header">
<p>
Next: <a href="#Including-Patterns" accesskey="n" rel="next">Including Patterns</a>, Previous: <a href="#Expander-Definitions" accesskey="p" rel="prev">Expander Definitions</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-How-to-Split-Instructions"></a>
<h3 class="section">16.16 Defining How to Split Instructions</h3>
<a name="index-insn-splitting"></a>
<a name="index-instruction-splitting"></a>
<a name="index-splitting-instructions"></a>

<p>There are two cases where you should specify how to split a pattern
into multiple insns.  On machines that have instructions requiring
delay slots (see <a href="#Delay-Slots">Delay Slots</a>) or that have instructions whose
output is not available for multiple cycles (see <a href="#Processor-pipeline-description">Processor pipeline description</a>), the compiler phases that optimize these cases need to
be able to move insns into one-instruction delay slots.  However, some
insns may generate more than one machine instruction.  These insns
cannot be placed into a delay slot.
</p>
<p>Often you can rewrite the single insn as a list of individual insns,
each corresponding to one machine instruction.  The disadvantage of
doing so is that it will cause the compilation to be slower and require
more space.  If the resulting insns are too complex, it may also
suppress some optimizations.  The compiler splits the insn if there is a
reason to believe that it might improve instruction or delay slot
scheduling.
</p>
<p>The insn combiner phase also splits putative insns.  If three insns are
merged into one insn with a complex expression that cannot be matched by
some <code>define_insn</code> pattern, the combiner phase attempts to split
the complex pattern into two insns that are recognized.  Usually it can
break the complex pattern into two patterns by splitting out some
subexpression.  However, in some other cases, such as performing an
addition of a large constant in two insns on a RISC machine, the way to
split the addition into two insns is machine-dependent.
</p>
<a name="index-define_005fsplit"></a>
<p>The <code>define_split</code> definition tells the compiler how to split a
complex insn into several simpler insns.  It looks like this:
</p>
<div class="smallexample">
<pre class="smallexample">(define_split
  [<var>insn-pattern</var>]
  &quot;<var>condition</var>&quot;
  [<var>new-insn-pattern-1</var>
   <var>new-insn-pattern-2</var>
   &hellip;]
  &quot;<var>preparation-statements</var>&quot;)
</pre></div>

<p><var>insn-pattern</var> is a pattern that needs to be split and
<var>condition</var> is the final condition to be tested, as in a
<code>define_insn</code>.  When an insn matching <var>insn-pattern</var> and
satisfying <var>condition</var> is found, it is replaced in the insn list
with the insns given by <var>new-insn-pattern-1</var>,
<var>new-insn-pattern-2</var>, etc.
</p>
<p>The <var>preparation-statements</var> are similar to those statements that
are specified for <code>define_expand</code> (see <a href="#Expander-Definitions">Expander Definitions</a>)
and are executed before the new RTL is generated to prepare for the
generated code or emit some insns whose pattern is not fixed.  Unlike
those in <code>define_expand</code>, however, these statements must not
generate any new pseudo-registers.  Once reload has completed, they also
must not allocate any space in the stack frame.
</p>
<p>Patterns are matched against <var>insn-pattern</var> in two different
circumstances.  If an insn needs to be split for delay slot scheduling
or insn scheduling, the insn is already known to be valid, which means
that it must have been matched by some <code>define_insn</code> and, if
<code>reload_completed</code> is nonzero, is known to satisfy the constraints
of that <code>define_insn</code>.  In that case, the new insn patterns must
also be insns that are matched by some <code>define_insn</code> and, if
<code>reload_completed</code> is nonzero, must also satisfy the constraints
of those definitions.
</p>
<p>As an example of this usage of <code>define_split</code>, consider the following
example from <samp>a29k.md</samp>, which splits a <code>sign_extend</code> from
<code>HImode</code> to <code>SImode</code> into a pair of shift insns:
</p>
<div class="smallexample">
<pre class="smallexample">(define_split
  [(set (match_operand:SI 0 &quot;gen_reg_operand&quot; &quot;&quot;)
        (sign_extend:SI (match_operand:HI 1 &quot;gen_reg_operand&quot; &quot;&quot;)))]
  &quot;&quot;
  [(set (match_dup 0)
        (ashift:SI (match_dup 1)
                   (const_int 16)))
   (set (match_dup 0)
        (ashiftrt:SI (match_dup 0)
                     (const_int 16)))]
  &quot;
{ operands[1] = gen_lowpart (SImode, operands[1]); }&quot;)
</pre></div>

<p>When the combiner phase tries to split an insn pattern, it is always the
case that the pattern is <em>not</em> matched by any <code>define_insn</code>.
The combiner pass first tries to split a single <code>set</code> expression
and then the same <code>set</code> expression inside a <code>parallel</code>, but
followed by a <code>clobber</code> of a pseudo-reg to use as a scratch
register.  In these cases, the combiner expects exactly two new insn
patterns to be generated.  It will verify that these patterns match some
<code>define_insn</code> definitions, so you need not do this test in the
<code>define_split</code> (of course, there is no point in writing a
<code>define_split</code> that will never produce insns that match).
</p>
<p>Here is an example of this use of <code>define_split</code>, taken from
<samp>rs6000.md</samp>:
</p>
<div class="smallexample">
<pre class="smallexample">(define_split
  [(set (match_operand:SI 0 &quot;gen_reg_operand&quot; &quot;&quot;)
        (plus:SI (match_operand:SI 1 &quot;gen_reg_operand&quot; &quot;&quot;)
                 (match_operand:SI 2 &quot;non_add_cint_operand&quot; &quot;&quot;)))]
  &quot;&quot;
  [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3)))
   (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))]
&quot;
{
  int low = INTVAL (operands[2]) &amp; 0xffff;
  int high = (unsigned) INTVAL (operands[2]) &gt;&gt; 16;

  if (low &amp; 0x8000)
    high++, low |= 0xffff0000;

  operands[3] = GEN_INT (high &lt;&lt; 16);
  operands[4] = GEN_INT (low);
}&quot;)
</pre></div>

<p>Here the predicate <code>non_add_cint_operand</code> matches any
<code>const_int</code> that is <em>not</em> a valid operand of a single add
insn.  The add with the smaller displacement is written so that it
can be substituted into the address of a subsequent operation.
</p>
<p>An example that uses a scratch register, from the same file, generates
an equality comparison of a register and a large constant:
</p>
<div class="smallexample">
<pre class="smallexample">(define_split
  [(set (match_operand:CC 0 &quot;cc_reg_operand&quot; &quot;&quot;)
        (compare:CC (match_operand:SI 1 &quot;gen_reg_operand&quot; &quot;&quot;)
                    (match_operand:SI 2 &quot;non_short_cint_operand&quot; &quot;&quot;)))
   (clobber (match_operand:SI 3 &quot;gen_reg_operand&quot; &quot;&quot;))]
  &quot;find_single_use (operands[0], insn, 0)
   &amp;&amp; (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ
       || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)&quot;
  [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4)))
   (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))]
  &quot;
{
  /* <span class="roman">Get the constant we are comparing against, C, and see what it
     looks like sign-extended to 16 bits.  Then see what constant
     could be XOR&rsquo;ed with C to get the sign-extended value.</span>  */

  int c = INTVAL (operands[2]);
  int sextc = (c &lt;&lt; 16) &gt;&gt; 16;
  int xorv = c ^ sextc;

  operands[4] = GEN_INT (xorv);
  operands[5] = GEN_INT (sextc);
}&quot;)
</pre></div>

<p>To avoid confusion, don&rsquo;t write a single <code>define_split</code> that
accepts some insns that match some <code>define_insn</code> as well as some
insns that don&rsquo;t.  Instead, write two separate <code>define_split</code>
definitions, one for the insns that are valid and one for the insns that
are not valid.
</p>
<p>The splitter is allowed to split jump instructions into sequence of
jumps or create new jumps in while splitting non-jump instructions.  As
the central flowgraph and branch prediction information needs to be updated,
several restriction apply.
</p>
<p>Splitting of jump instruction into sequence that over by another jump
instruction is always valid, as compiler expect identical behavior of new
jump.  When new sequence contains multiple jump instructions or new labels,
more assistance is needed.  Splitter is required to create only unconditional
jumps, or simple conditional jump instructions.  Additionally it must attach a
<code>REG_BR_PROB</code> note to each conditional jump.  A global variable
<code>split_branch_probability</code> holds the probability of the original branch in case
it was a simple conditional jump, -1 otherwise.  To simplify
recomputing of edge frequencies, the new sequence is required to have only
forward jumps to the newly created labels.
</p>
<a name="index-define_005finsn_005fand_005fsplit"></a>
<p>For the common case where the pattern of a define_split exactly matches the
pattern of a define_insn, use <code>define_insn_and_split</code>.  It looks like
this:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn_and_split
  [<var>insn-pattern</var>]
  &quot;<var>condition</var>&quot;
  &quot;<var>output-template</var>&quot;
  &quot;<var>split-condition</var>&quot;
  [<var>new-insn-pattern-1</var>
   <var>new-insn-pattern-2</var>
   &hellip;]
  &quot;<var>preparation-statements</var>&quot;
  [<var>insn-attributes</var>])

</pre></div>

<p><var>insn-pattern</var>, <var>condition</var>, <var>output-template</var>, and
<var>insn-attributes</var> are used as in <code>define_insn</code>.  The
<var>new-insn-pattern</var> vector and the <var>preparation-statements</var> are used as
in a <code>define_split</code>.  The <var>split-condition</var> is also used as in
<code>define_split</code>, with the additional behavior that if the condition starts
with &lsquo;<samp>&amp;&amp;</samp>&rsquo;, the condition used for the split will be the constructed as a
logical &ldquo;and&rdquo; of the split condition with the insn condition.  For example,
from i386.md:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn_and_split &quot;zero_extendhisi2_and&quot;
  [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;=r&quot;)
     (zero_extend:SI (match_operand:HI 1 &quot;register_operand&quot; &quot;0&quot;)))
   (clobber (reg:CC 17))]
  &quot;TARGET_ZERO_EXTEND_WITH_AND &amp;&amp; !optimize_size&quot;
  &quot;#&quot;
  &quot;&amp;&amp; reload_completed&quot;
  [(parallel [(set (match_dup 0)
                   (and:SI (match_dup 0) (const_int 65535)))
              (clobber (reg:CC 17))])]
  &quot;&quot;
  [(set_attr &quot;type&quot; &quot;alu1&quot;)])

</pre></div>

<p>In this case, the actual split condition will be
&lsquo;<samp>TARGET_ZERO_EXTEND_WITH_AND &amp;&amp; !optimize_size &amp;&amp; reload_completed</samp>&rsquo;.
</p>
<p>The <code>define_insn_and_split</code> construction provides exactly the same
functionality as two separate <code>define_insn</code> and <code>define_split</code>
patterns.  It exists for compactness, and as a maintenance tool to prevent
having to ensure the two patterns&rsquo; templates match.
</p>
<hr>
<a name="Including-Patterns"></a>
<div class="header">
<p>
Next: <a href="#Peephole-Definitions" accesskey="n" rel="next">Peephole Definitions</a>, Previous: <a href="#Insn-Splitting" accesskey="p" rel="prev">Insn Splitting</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Including-Patterns-in-Machine-Descriptions_002e"></a>
<h3 class="section">16.17 Including Patterns in Machine Descriptions.</h3>
<a name="index-insn-includes"></a>

<a name="index-include"></a>
<p>The <code>include</code> pattern tells the compiler tools where to
look for patterns that are in files other than in the file
<samp>.md</samp>.  This is used only at build time and there is no preprocessing allowed.
</p>
<p>It looks like:
</p>
<div class="smallexample">
<pre class="smallexample">
(include
  <var>pathname</var>)
</pre></div>

<p>For example:
</p>
<div class="smallexample">
<pre class="smallexample">
(include &quot;filestuff&quot;)

</pre></div>

<p>Where <var>pathname</var> is a string that specifies the location of the file,
specifies the include file to be in <samp>gcc/config/target/filestuff</samp>.  The
directory <samp>gcc/config/target</samp> is regarded as the default directory.
</p>

<p>Machine descriptions may be split up into smaller more manageable subsections
and placed into subdirectories.
</p>
<p>By specifying:
</p>
<div class="smallexample">
<pre class="smallexample">
(include &quot;BOGUS/filestuff&quot;)

</pre></div>

<p>the include file is specified to be in <samp>gcc/config/<var>target</var>/BOGUS/filestuff</samp>.
</p>
<p>Specifying an absolute path for the include file such as;
</p><div class="smallexample">
<pre class="smallexample">
(include &quot;/u2/BOGUS/filestuff&quot;)

</pre></div>
<p>is permitted but is not encouraged.
</p>
<a name="RTL-Generation-Tool-Options-for-Directory-Search"></a>
<h4 class="subsection">16.17.1 RTL Generation Tool Options for Directory Search</h4>
<a name="index-directory-options-_002emd"></a>
<a name="index-options_002c-directory-search"></a>
<a name="index-search-options"></a>

<p>The <samp>-I<var>dir</var></samp> option specifies directories to search for machine descriptions.
For example:
</p>
<div class="smallexample">
<pre class="smallexample">
genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md

</pre></div>


<p>Add the directory <var>dir</var> to the head of the list of directories to be
searched for header files.  This can be used to override a system machine definition
file, substituting your own version, since these directories are
searched before the default machine description file directories.  If you use more than
one <samp>-I</samp> option, the directories are scanned in left-to-right
order; the standard default directory come after.
</p>

<hr>
<a name="Peephole-Definitions"></a>
<div class="header">
<p>
Next: <a href="#Insn-Attributes" accesskey="n" rel="next">Insn Attributes</a>, Previous: <a href="#Including-Patterns" accesskey="p" rel="prev">Including Patterns</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Machine_002dSpecific-Peephole-Optimizers"></a>
<h3 class="section">16.18 Machine-Specific Peephole Optimizers</h3>
<a name="index-peephole-optimizer-definitions"></a>
<a name="index-defining-peephole-optimizers"></a>

<p>In addition to instruction patterns the <samp>md</samp> file may contain
definitions of machine-specific peephole optimizations.
</p>
<p>The combiner does not notice certain peephole optimizations when the data
flow in the program does not suggest that it should try them.  For example,
sometimes two consecutive insns related in purpose can be combined even
though the second one does not appear to use a register computed in the
first one.  A machine-specific peephole optimizer can detect such
opportunities.
</p>
<p>There are two forms of peephole definitions that may be used.  The
original <code>define_peephole</code> is run at assembly output time to
match insns and substitute assembly text.  Use of <code>define_peephole</code>
is deprecated.
</p>
<p>A newer <code>define_peephole2</code> matches insns and substitutes new
insns.  The <code>peephole2</code> pass is run after register allocation
but before scheduling, which may result in much better code for
targets that do scheduling.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#define_005fpeephole" accesskey="1">define_peephole</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">RTL to Text Peephole Optimizers
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#define_005fpeephole2" accesskey="2">define_peephole2</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">RTL to RTL Peephole Optimizers
</td></tr>
</table>

<hr>
<a name="define_005fpeephole"></a>
<div class="header">
<p>
Next: <a href="#define_005fpeephole2" accesskey="n" rel="next">define_peephole2</a>, Up: <a href="#Peephole-Definitions" accesskey="u" rel="up">Peephole Definitions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-to-Text-Peephole-Optimizers"></a>
<h4 class="subsection">16.18.1 RTL to Text Peephole Optimizers</h4>
<a name="index-define_005fpeephole"></a>

<p>A definition looks like this:
</p>
<div class="smallexample">
<pre class="smallexample">(define_peephole
  [<var>insn-pattern-1</var>
   <var>insn-pattern-2</var>
   &hellip;]
  &quot;<var>condition</var>&quot;
  &quot;<var>template</var>&quot;
  &quot;<var>optional-insn-attributes</var>&quot;)
</pre></div>

<p>The last string operand may be omitted if you are not using any
machine-specific information in this machine description.  If present,
it must obey the same rules as in a <code>define_insn</code>.
</p>
<p>In this skeleton, <var>insn-pattern-1</var> and so on are patterns to match
consecutive insns.  The optimization applies to a sequence of insns when
<var>insn-pattern-1</var> matches the first one, <var>insn-pattern-2</var> matches
the next, and so on.
</p>
<p>Each of the insns matched by a peephole must also match a
<code>define_insn</code>.  Peepholes are checked only at the last stage just
before code generation, and only optionally.  Therefore, any insn which
would match a peephole but no <code>define_insn</code> will cause a crash in code
generation in an unoptimized compilation, or at various optimization
stages.
</p>
<p>The operands of the insns are matched with <code>match_operands</code>,
<code>match_operator</code>, and <code>match_dup</code>, as usual.  What is not
usual is that the operand numbers apply to all the insn patterns in the
definition.  So, you can check for identical operands in two insns by
using <code>match_operand</code> in one insn and <code>match_dup</code> in the
other.
</p>
<p>The operand constraints used in <code>match_operand</code> patterns do not have
any direct effect on the applicability of the peephole, but they will
be validated afterward, so make sure your constraints are general enough
to apply whenever the peephole matches.  If the peephole matches
but the constraints are not satisfied, the compiler will crash.
</p>
<p>It is safe to omit constraints in all the operands of the peephole; or
you can write constraints which serve as a double-check on the criteria
previously tested.
</p>
<p>Once a sequence of insns matches the patterns, the <var>condition</var> is
checked.  This is a C expression which makes the final decision whether to
perform the optimization (we do so if the expression is nonzero).  If
<var>condition</var> is omitted (in other words, the string is empty) then the
optimization is applied to every sequence of insns that matches the
patterns.
</p>
<p>The defined peephole optimizations are applied after register allocation
is complete.  Therefore, the peephole definition can check which
operands have ended up in which kinds of registers, just by looking at
the operands.
</p>
<a name="index-prev_005factive_005finsn"></a>
<p>The way to refer to the operands in <var>condition</var> is to write
<code>operands[<var>i</var>]</code> for operand number <var>i</var> (as matched by
<code>(match_operand <var>i</var> &hellip;)</code>).  Use the variable <code>insn</code>
to refer to the last of the insns being matched; use
<code>prev_active_insn</code> to find the preceding insns.
</p>
<a name="index-dead_005for_005fset_005fp"></a>
<p>When optimizing computations with intermediate results, you can use
<var>condition</var> to match only when the intermediate results are not used
elsewhere.  Use the C expression <code>dead_or_set_p (<var>insn</var>,
<var>op</var>)</code>, where <var>insn</var> is the insn in which you expect the value
to be used for the last time (from the value of <code>insn</code>, together
with use of <code>prev_nonnote_insn</code>), and <var>op</var> is the intermediate
value (from <code>operands[<var>i</var>]</code>).
</p>
<p>Applying the optimization means replacing the sequence of insns with one
new insn.  The <var>template</var> controls ultimate output of assembler code
for this combined insn.  It works exactly like the template of a
<code>define_insn</code>.  Operand numbers in this template are the same ones
used in matching the original sequence of insns.
</p>
<p>The result of a defined peephole optimizer does not need to match any of
the insn patterns in the machine description; it does not even have an
opportunity to match them.  The peephole optimizer definition itself serves
as the insn pattern to control how the insn is output.
</p>
<p>Defined peephole optimizers are run as assembler code is being output,
so the insns they produce are never combined or rearranged in any way.
</p>
<p>Here is an example, taken from the 68000 machine description:
</p>
<div class="smallexample">
<pre class="smallexample">(define_peephole
  [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
   (set (match_operand:DF 0 &quot;register_operand&quot; &quot;=f&quot;)
        (match_operand:DF 1 &quot;register_operand&quot; &quot;ad&quot;))]
  &quot;FP_REG_P (operands[0]) &amp;&amp; ! FP_REG_P (operands[1])&quot;
{
  rtx xoperands[2];
  xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
#ifdef MOTOROLA
  output_asm_insn (&quot;move.l %1,(sp)&quot;, xoperands);
  output_asm_insn (&quot;move.l %1,-(sp)&quot;, operands);
  return &quot;fmove.d (sp)+,%0&quot;;
#else
  output_asm_insn (&quot;movel %1,sp@&quot;, xoperands);
  output_asm_insn (&quot;movel %1,sp@-&quot;, operands);
  return &quot;fmoved sp@+,%0&quot;;
#endif
})
</pre></div>

<p>The effect of this optimization is to change
</p>
<div class="smallexample">
<pre class="smallexample">jbsr _foobar
addql #4,sp
movel d1,sp@-
movel d0,sp@-
fmoved sp@+,fp0
</pre></div>

<p>into
</p>
<div class="smallexample">
<pre class="smallexample">jbsr _foobar
movel d1,sp@
movel d0,sp@-
fmoved sp@+,fp0
</pre></div>


<p><var>insn-pattern-1</var> and so on look <em>almost</em> like the second
operand of <code>define_insn</code>.  There is one important difference: the
second operand of <code>define_insn</code> consists of one or more RTX&rsquo;s
enclosed in square brackets.  Usually, there is only one: then the same
action can be written as an element of a <code>define_peephole</code>.  But
when there are multiple actions in a <code>define_insn</code>, they are
implicitly enclosed in a <code>parallel</code>.  Then you must explicitly
write the <code>parallel</code>, and the square brackets within it, in the
<code>define_peephole</code>.  Thus, if an insn pattern looks like this,
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;divmodsi4&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=d&quot;)
        (div:SI (match_operand:SI 1 &quot;general_operand&quot; &quot;0&quot;)
                (match_operand:SI 2 &quot;general_operand&quot; &quot;dmsK&quot;)))
   (set (match_operand:SI 3 &quot;general_operand&quot; &quot;=d&quot;)
        (mod:SI (match_dup 1) (match_dup 2)))]
  &quot;TARGET_68020&quot;
  &quot;divsl%.l %2,%3:%0&quot;)
</pre></div>

<p>then the way to mention this insn in a peephole is as follows:
</p>
<div class="smallexample">
<pre class="smallexample">(define_peephole
  [&hellip;
   (parallel
    [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=d&quot;)
          (div:SI (match_operand:SI 1 &quot;general_operand&quot; &quot;0&quot;)
                  (match_operand:SI 2 &quot;general_operand&quot; &quot;dmsK&quot;)))
     (set (match_operand:SI 3 &quot;general_operand&quot; &quot;=d&quot;)
          (mod:SI (match_dup 1) (match_dup 2)))])
   &hellip;]
  &hellip;)
</pre></div>

<hr>
<a name="define_005fpeephole2"></a>
<div class="header">
<p>
Previous: <a href="#define_005fpeephole" accesskey="p" rel="prev">define_peephole</a>, Up: <a href="#Peephole-Definitions" accesskey="u" rel="up">Peephole Definitions</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-to-RTL-Peephole-Optimizers"></a>
<h4 class="subsection">16.18.2 RTL to RTL Peephole Optimizers</h4>
<a name="index-define_005fpeephole2"></a>

<p>The <code>define_peephole2</code> definition tells the compiler how to
substitute one sequence of instructions for another sequence,
what additional scratch registers may be needed and what their
lifetimes must be.
</p>
<div class="smallexample">
<pre class="smallexample">(define_peephole2
  [<var>insn-pattern-1</var>
   <var>insn-pattern-2</var>
   &hellip;]
  &quot;<var>condition</var>&quot;
  [<var>new-insn-pattern-1</var>
   <var>new-insn-pattern-2</var>
   &hellip;]
  &quot;<var>preparation-statements</var>&quot;)
</pre></div>

<p>The definition is almost identical to <code>define_split</code>
(see <a href="#Insn-Splitting">Insn Splitting</a>) except that the pattern to match is not a
single instruction, but a sequence of instructions.
</p>
<p>It is possible to request additional scratch registers for use in the
output template.  If appropriate registers are not free, the pattern
will simply not match.
</p>
<a name="index-match_005fscratch-1"></a>
<a name="index-match_005fdup-1"></a>
<p>Scratch registers are requested with a <code>match_scratch</code> pattern at
the top level of the input pattern.  The allocated register (initially) will
be dead at the point requested within the original sequence.  If the scratch
is used at more than a single point, a <code>match_dup</code> pattern at the
top level of the input pattern marks the last position in the input sequence
at which the register must be available.
</p>
<p>Here is an example from the IA-32 machine description:
</p>
<div class="smallexample">
<pre class="smallexample">(define_peephole2
  [(match_scratch:SI 2 &quot;r&quot;)
   (parallel [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;&quot;)
                   (match_operator:SI 3 &quot;arith_or_logical_operator&quot;
                     [(match_dup 0)
                      (match_operand:SI 1 &quot;memory_operand&quot; &quot;&quot;)]))
              (clobber (reg:CC 17))])]
  &quot;! optimize_size &amp;&amp; ! TARGET_READ_MODIFY&quot;
  [(set (match_dup 2) (match_dup 1))
   (parallel [(set (match_dup 0)
                   (match_op_dup 3 [(match_dup 0) (match_dup 2)]))
              (clobber (reg:CC 17))])]
  &quot;&quot;)
</pre></div>

<p>This pattern tries to split a load from its use in the hopes that we&rsquo;ll be
able to schedule around the memory load latency.  It allocates a single
<code>SImode</code> register of class <code>GENERAL_REGS</code> (<code>&quot;r&quot;</code>) that needs
to be live only at the point just before the arithmetic.
</p>
<p>A real example requiring extended scratch lifetimes is harder to come by,
so here&rsquo;s a silly made-up example:
</p>
<div class="smallexample">
<pre class="smallexample">(define_peephole2
  [(match_scratch:SI 4 &quot;r&quot;)
   (set (match_operand:SI 0 &quot;&quot; &quot;&quot;) (match_operand:SI 1 &quot;&quot; &quot;&quot;))
   (set (match_operand:SI 2 &quot;&quot; &quot;&quot;) (match_dup 1))
   (match_dup 4)
   (set (match_operand:SI 3 &quot;&quot; &quot;&quot;) (match_dup 1))]
  &quot;/* <span class="roman">determine 1 does not overlap 0 and 2</span> */&quot;
  [(set (match_dup 4) (match_dup 1))
   (set (match_dup 0) (match_dup 4))
   (set (match_dup 2) (match_dup 4))]
   (set (match_dup 3) (match_dup 4))]
  &quot;&quot;)
</pre></div>

<p>If we had not added the <code>(match_dup 4)</code> in the middle of the input
sequence, it might have been the case that the register we chose at the
beginning of the sequence is killed by the first or second <code>set</code>.
</p>
<hr>
<a name="Insn-Attributes"></a>
<div class="header">
<p>
Next: <a href="#Conditional-Execution" accesskey="n" rel="next">Conditional Execution</a>, Previous: <a href="#Peephole-Definitions" accesskey="p" rel="prev">Peephole Definitions</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Instruction-Attributes"></a>
<h3 class="section">16.19 Instruction Attributes</h3>
<a name="index-insn-attributes"></a>
<a name="index-instruction-attributes"></a>

<p>In addition to describing the instruction supported by the target machine,
the <samp>md</samp> file also defines a group of <em>attributes</em> and a set of
values for each.  Every generated insn is assigned a value for each attribute.
One possible attribute would be the effect that the insn has on the machine&rsquo;s
condition code.  This attribute can then be used by <code>NOTICE_UPDATE_CC</code>
to track the condition codes.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Defining-Attributes" accesskey="1">Defining Attributes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Specifying attributes and their values.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Expressions" accesskey="2">Expressions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Valid expressions for attribute values.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Tagging-Insns" accesskey="3">Tagging Insns</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Assigning attribute values to insns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Attr-Example" accesskey="4">Attr Example</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">An example of assigning attributes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Insn-Lengths" accesskey="5">Insn Lengths</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Computing the length of insns.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Constant-Attributes" accesskey="6">Constant Attributes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining attributes that are constant.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Delay-Slots" accesskey="7">Delay Slots</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining delay slots required for a machine.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Processor-pipeline-description" accesskey="8">Processor pipeline description</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Specifying information for insn scheduling.
</td></tr>
</table>

<hr>
<a name="Defining-Attributes"></a>
<div class="header">
<p>
Next: <a href="#Expressions" accesskey="n" rel="next">Expressions</a>, Up: <a href="#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-Attributes-and-their-Values"></a>
<h4 class="subsection">16.19.1 Defining Attributes and their Values</h4>
<a name="index-defining-attributes-and-their-values"></a>
<a name="index-attributes_002c-defining"></a>

<a name="index-define_005fattr"></a>
<p>The <code>define_attr</code> expression is used to define each attribute required
by the target machine.  It looks like:
</p>
<div class="smallexample">
<pre class="smallexample">(define_attr <var>name</var> <var>list-of-values</var> <var>default</var>)
</pre></div>

<p><var>name</var> is a string specifying the name of the attribute being defined.
Some attributes are used in a special way by the rest of the compiler. The
<code>enabled</code> attribute can be used to conditionally enable or disable
insn alternatives (see <a href="#Disable-Insn-Alternatives">Disable Insn Alternatives</a>). The <code>predicable</code>
attribute, together with a suitable <code>define_cond_exec</code>
(see <a href="#Conditional-Execution">Conditional Execution</a>), can be used to automatically generate
conditional variants of instruction patterns. The compiler internally uses
the names <code>ce_enabled</code> and <code>nonce_enabled</code>, so they should not be
used elsewhere as alternative names.
</p>
<p><var>list-of-values</var> is either a string that specifies a comma-separated
list of values that can be assigned to the attribute, or a null string to
indicate that the attribute takes numeric values.
</p>
<p><var>default</var> is an attribute expression that gives the value of this
attribute for insns that match patterns whose definition does not include
an explicit value for this attribute.  See <a href="#Attr-Example">Attr Example</a>, for more
information on the handling of defaults.  See <a href="#Constant-Attributes">Constant Attributes</a>,
for information on attributes that do not depend on any particular insn.
</p>
<a name="index-insn_002dattr_002eh"></a>
<p>For each defined attribute, a number of definitions are written to the
<samp>insn-attr.h</samp> file.  For cases where an explicit set of values is
specified for an attribute, the following are defined:
</p>
<ul>
<li> A &lsquo;<samp>#define</samp>&rsquo; is written for the symbol &lsquo;<samp>HAVE_ATTR_<var>name</var></samp>&rsquo;.

</li><li> An enumerated class is defined for &lsquo;<samp>attr_<var>name</var></samp>&rsquo; with
elements of the form &lsquo;<samp><var>upper-name</var>_<var>upper-value</var></samp>&rsquo; where
the attribute name and value are first converted to uppercase.

</li><li> A function &lsquo;<samp>get_attr_<var>name</var></samp>&rsquo; is defined that is passed an insn and
returns the attribute value for that insn.
</li></ul>

<p>For example, if the following is present in the <samp>md</samp> file:
</p>
<div class="smallexample">
<pre class="smallexample">(define_attr &quot;type&quot; &quot;branch,fp,load,store,arith&quot; &hellip;)
</pre></div>

<p>the following lines will be written to the file <samp>insn-attr.h</samp>.
</p>
<div class="smallexample">
<pre class="smallexample">#define HAVE_ATTR_type 1
enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
                 TYPE_STORE, TYPE_ARITH};
extern enum attr_type get_attr_type ();
</pre></div>

<p>If the attribute takes numeric values, no <code>enum</code> type will be
defined and the function to obtain the attribute&rsquo;s value will return
<code>int</code>.
</p>
<p>There are attributes which are tied to a specific meaning.  These
attributes are not free to use for other purposes:
</p>
<dl compact="compact">
<dt><code>length</code></dt>
<dd><p>The <code>length</code> attribute is used to calculate the length of emitted
code chunks.  This is especially important when verifying branch
distances. See <a href="#Insn-Lengths">Insn Lengths</a>.
</p>
</dd>
<dt><code>enabled</code></dt>
<dd><p>The <code>enabled</code> attribute can be defined to prevent certain
alternatives of an insn definition from being used during code
generation. See <a href="#Disable-Insn-Alternatives">Disable Insn Alternatives</a>.
</p></dd>
</dl>

<p>For each of these special attributes, the corresponding
&lsquo;<samp>HAVE_ATTR_<var>name</var></samp>&rsquo; &lsquo;<samp>#define</samp>&rsquo; is also written when the
attribute is not defined; in that case, it is defined as &lsquo;<samp>0</samp>&rsquo;.
</p>
<a name="index-define_005fenum_005fattr"></a>
<a name="define_005fenum_005fattr"></a><p>Another way of defining an attribute is to use:
</p>
<div class="smallexample">
<pre class="smallexample">(define_enum_attr &quot;<var>attr</var>&quot; &quot;<var>enum</var>&quot; <var>default</var>)
</pre></div>

<p>This works in just the same way as <code>define_attr</code>, except that
the list of values is taken from a separate enumeration called
<var>enum</var> (see <a href="#define_005fenum">define_enum</a>).  This form allows you to use
the same list of values for several attributes without having to
repeat the list each time.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">(define_enum &quot;processor&quot; [
  model_a
  model_b
  &hellip;
])
(define_enum_attr &quot;arch&quot; &quot;processor&quot;
  (const (symbol_ref &quot;target_arch&quot;)))
(define_enum_attr &quot;tune&quot; &quot;processor&quot;
  (const (symbol_ref &quot;target_tune&quot;)))
</pre></div>

<p>defines the same attributes as:
</p>
<div class="smallexample">
<pre class="smallexample">(define_attr &quot;arch&quot; &quot;model_a,model_b,&hellip;&quot;
  (const (symbol_ref &quot;target_arch&quot;)))
(define_attr &quot;tune&quot; &quot;model_a,model_b,&hellip;&quot;
  (const (symbol_ref &quot;target_tune&quot;)))
</pre></div>

<p>but without duplicating the processor list.  The second example defines two
separate C enums (<code>attr_arch</code> and <code>attr_tune</code>) whereas the first
defines a single C enum (<code>processor</code>).
</p><hr>
<a name="Expressions"></a>
<div class="header">
<p>
Next: <a href="#Tagging-Insns" accesskey="n" rel="next">Tagging Insns</a>, Previous: <a href="#Defining-Attributes" accesskey="p" rel="prev">Defining Attributes</a>, Up: <a href="#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Attribute-Expressions"></a>
<h4 class="subsection">16.19.2 Attribute Expressions</h4>
<a name="index-attribute-expressions"></a>

<p>RTL expressions used to define attributes use the codes described above
plus a few specific to attribute definitions, to be discussed below.
Attribute value expressions must have one of the following forms:
</p>
<dl compact="compact">
<dd><a name="index-const_005fint-and-attributes"></a>
</dd>
<dt><code>(const_int <var>i</var>)</code></dt>
<dd><p>The integer <var>i</var> specifies the value of a numeric attribute.  <var>i</var>
must be non-negative.
</p>
<p>The value of a numeric attribute can be specified either with a
<code>const_int</code>, or as an integer represented as a string in
<code>const_string</code>, <code>eq_attr</code> (see below), <code>attr</code>,
<code>symbol_ref</code>, simple arithmetic expressions, and <code>set_attr</code>
overrides on specific instructions (see <a href="#Tagging-Insns">Tagging Insns</a>).
</p>
<a name="index-const_005fstring-and-attributes"></a>
</dd>
<dt><code>(const_string <var>value</var>)</code></dt>
<dd><p>The string <var>value</var> specifies a constant attribute value.
If <var>value</var> is specified as &lsquo;<samp>&quot;*&quot;</samp>&rsquo;, it means that the default value of
the attribute is to be used for the insn containing this expression.
&lsquo;<samp>&quot;*&quot;</samp>&rsquo; obviously cannot be used in the <var>default</var> expression
of a <code>define_attr</code>.
</p>
<p>If the attribute whose value is being specified is numeric, <var>value</var>
must be a string containing a non-negative integer (normally
<code>const_int</code> would be used in this case).  Otherwise, it must
contain one of the valid values for the attribute.
</p>
<a name="index-if_005fthen_005felse-and-attributes"></a>
</dd>
<dt><code>(if_then_else <var>test</var> <var>true-value</var> <var>false-value</var>)</code></dt>
<dd><p><var>test</var> specifies an attribute test, whose format is defined below.
The value of this expression is <var>true-value</var> if <var>test</var> is true,
otherwise it is <var>false-value</var>.
</p>
<a name="index-cond-and-attributes"></a>
</dd>
<dt><code>(cond [<var>test1</var> <var>value1</var> &hellip;] <var>default</var>)</code></dt>
<dd><p>The first operand of this expression is a vector containing an even
number of expressions and consisting of pairs of <var>test</var> and <var>value</var>
expressions.  The value of the <code>cond</code> expression is that of the
<var>value</var> corresponding to the first true <var>test</var> expression.  If
none of the <var>test</var> expressions are true, the value of the <code>cond</code>
expression is that of the <var>default</var> expression.
</p></dd>
</dl>

<p><var>test</var> expressions can have one of the following forms:
</p>
<dl compact="compact">
<dd><a name="index-const_005fint-and-attribute-tests"></a>
</dd>
<dt><code>(const_int <var>i</var>)</code></dt>
<dd><p>This test is true if <var>i</var> is nonzero and false otherwise.
</p>
<a name="index-not-and-attributes"></a>
<a name="index-ior-and-attributes"></a>
<a name="index-and-and-attributes"></a>
</dd>
<dt><code>(not <var>test</var>)</code></dt>
<dt><code>(ior <var>test1</var> <var>test2</var>)</code></dt>
<dt><code>(and <var>test1</var> <var>test2</var>)</code></dt>
<dd><p>These tests are true if the indicated logical function is true.
</p>
<a name="index-match_005foperand-and-attributes"></a>
</dd>
<dt><code>(match_operand:<var>m</var> <var>n</var> <var>pred</var> <var>constraints</var>)</code></dt>
<dd><p>This test is true if operand <var>n</var> of the insn whose attribute value
is being determined has mode <var>m</var> (this part of the test is ignored
if <var>m</var> is <code>VOIDmode</code>) and the function specified by the string
<var>pred</var> returns a nonzero value when passed operand <var>n</var> and mode
<var>m</var> (this part of the test is ignored if <var>pred</var> is the null
string).
</p>
<p>The <var>constraints</var> operand is ignored and should be the null string.
</p>
<a name="index-match_005ftest-and-attributes"></a>
</dd>
<dt><code>(match_test <var>c-expr</var>)</code></dt>
<dd><p>The test is true if C expression <var>c-expr</var> is true.  In non-constant
attributes, <var>c-expr</var> has access to the following variables:
</p>
<dl compact="compact">
<dt><var>insn</var></dt>
<dd><p>The rtl instruction under test.
</p></dd>
<dt><var>which_alternative</var></dt>
<dd><p>The <code>define_insn</code> alternative that <var>insn</var> matches.
See <a href="#Output-Statement">Output Statement</a>.
</p></dd>
<dt><var>operands</var></dt>
<dd><p>An array of <var>insn</var>&rsquo;s rtl operands.
</p></dd>
</dl>

<p><var>c-expr</var> behaves like the condition in a C <code>if</code> statement,
so there is no need to explicitly convert the expression into a boolean
0 or 1 value.  For example, the following two tests are equivalent:
</p>
<div class="smallexample">
<pre class="smallexample">(match_test &quot;x &amp; 2&quot;)
(match_test &quot;(x &amp; 2) != 0&quot;)
</pre></div>

<a name="index-le-and-attributes"></a>
<a name="index-leu-and-attributes"></a>
<a name="index-lt-and-attributes"></a>
<a name="index-gt-and-attributes"></a>
<a name="index-gtu-and-attributes"></a>
<a name="index-ge-and-attributes"></a>
<a name="index-geu-and-attributes"></a>
<a name="index-ne-and-attributes"></a>
<a name="index-eq-and-attributes"></a>
<a name="index-plus-and-attributes"></a>
<a name="index-minus-and-attributes"></a>
<a name="index-mult-and-attributes"></a>
<a name="index-div-and-attributes"></a>
<a name="index-mod-and-attributes"></a>
<a name="index-abs-and-attributes"></a>
<a name="index-neg-and-attributes"></a>
<a name="index-ashift-and-attributes"></a>
<a name="index-lshiftrt-and-attributes"></a>
<a name="index-ashiftrt-and-attributes"></a>
</dd>
<dt><code>(le <var>arith1</var> <var>arith2</var>)</code></dt>
<dt><code>(leu <var>arith1</var> <var>arith2</var>)</code></dt>
<dt><code>(lt <var>arith1</var> <var>arith2</var>)</code></dt>
<dt><code>(ltu <var>arith1</var> <var>arith2</var>)</code></dt>
<dt><code>(gt <var>arith1</var> <var>arith2</var>)</code></dt>
<dt><code>(gtu <var>arith1</var> <var>arith2</var>)</code></dt>
<dt><code>(ge <var>arith1</var> <var>arith2</var>)</code></dt>
<dt><code>(geu <var>arith1</var> <var>arith2</var>)</code></dt>
<dt><code>(ne <var>arith1</var> <var>arith2</var>)</code></dt>
<dt><code>(eq <var>arith1</var> <var>arith2</var>)</code></dt>
<dd><p>These tests are true if the indicated comparison of the two arithmetic
expressions is true.  Arithmetic expressions are formed with
<code>plus</code>, <code>minus</code>, <code>mult</code>, <code>div</code>, <code>mod</code>,
<code>abs</code>, <code>neg</code>, <code>and</code>, <code>ior</code>, <code>xor</code>, <code>not</code>,
<code>ashift</code>, <code>lshiftrt</code>, and <code>ashiftrt</code> expressions.
</p>
<a name="index-get_005fattr"></a>
<p><code>const_int</code> and <code>symbol_ref</code> are always valid terms (see <a href="#Insn-Lengths">Insn Lengths</a>,for additional forms).  <code>symbol_ref</code> is a string
denoting a C expression that yields an <code>int</code> when evaluated by the
&lsquo;<samp>get_attr_&hellip;</samp>&rsquo; routine.  It should normally be a global
variable.
</p>
<a name="index-eq_005fattr"></a>
</dd>
<dt><code>(eq_attr <var>name</var> <var>value</var>)</code></dt>
<dd><p><var>name</var> is a string specifying the name of an attribute.
</p>
<p><var>value</var> is a string that is either a valid value for attribute
<var>name</var>, a comma-separated list of values, or &lsquo;<samp>!</samp>&rsquo; followed by a
value or list.  If <var>value</var> does not begin with a &lsquo;<samp>!</samp>&rsquo;, this
test is true if the value of the <var>name</var> attribute of the current
insn is in the list specified by <var>value</var>.  If <var>value</var> begins
with a &lsquo;<samp>!</samp>&rsquo;, this test is true if the attribute&rsquo;s value is
<em>not</em> in the specified list.
</p>
<p>For example,
</p>
<div class="smallexample">
<pre class="smallexample">(eq_attr &quot;type&quot; &quot;load,store&quot;)
</pre></div>

<p>is equivalent to
</p>
<div class="smallexample">
<pre class="smallexample">(ior (eq_attr &quot;type&quot; &quot;load&quot;) (eq_attr &quot;type&quot; &quot;store&quot;))
</pre></div>

<p>If <var>name</var> specifies an attribute of &lsquo;<samp>alternative</samp>&rsquo;, it refers to the
value of the compiler variable <code>which_alternative</code>
(see <a href="#Output-Statement">Output Statement</a>) and the values must be small integers.  For
example,
</p>
<div class="smallexample">
<pre class="smallexample">(eq_attr &quot;alternative&quot; &quot;2,3&quot;)
</pre></div>

<p>is equivalent to
</p>
<div class="smallexample">
<pre class="smallexample">(ior (eq (symbol_ref &quot;which_alternative&quot;) (const_int 2))
     (eq (symbol_ref &quot;which_alternative&quot;) (const_int 3)))
</pre></div>

<p>Note that, for most attributes, an <code>eq_attr</code> test is simplified in cases
where the value of the attribute being tested is known for all insns matching
a particular pattern.  This is by far the most common case.
</p>
<a name="index-attr_005fflag"></a>
</dd>
<dt><code>(attr_flag <var>name</var>)</code></dt>
<dd><p>The value of an <code>attr_flag</code> expression is true if the flag
specified by <var>name</var> is true for the <code>insn</code> currently being
scheduled.
</p>
<p><var>name</var> is a string specifying one of a fixed set of flags to test.
Test the flags <code>forward</code> and <code>backward</code> to determine the
direction of a conditional branch.
</p>
<p>This example describes a conditional branch delay slot which
can be nullified for forward branches that are taken (annul-true) or
for backward branches which are not taken (annul-false).
</p>
<div class="smallexample">
<pre class="smallexample">(define_delay (eq_attr &quot;type&quot; &quot;cbranch&quot;)
  [(eq_attr &quot;in_branch_delay&quot; &quot;true&quot;)
   (and (eq_attr &quot;in_branch_delay&quot; &quot;true&quot;)
        (attr_flag &quot;forward&quot;))
   (and (eq_attr &quot;in_branch_delay&quot; &quot;true&quot;)
        (attr_flag &quot;backward&quot;))])
</pre></div>

<p>The <code>forward</code> and <code>backward</code> flags are false if the current
<code>insn</code> being scheduled is not a conditional branch.
</p>
<p><code>attr_flag</code> is only used during delay slot scheduling and has no
meaning to other passes of the compiler.
</p>
<a name="index-attr"></a>
</dd>
<dt><code>(attr <var>name</var>)</code></dt>
<dd><p>The value of another attribute is returned.  This is most useful
for numeric attributes, as <code>eq_attr</code> and <code>attr_flag</code>
produce more efficient code for non-numeric attributes.
</p></dd>
</dl>

<hr>
<a name="Tagging-Insns"></a>
<div class="header">
<p>
Next: <a href="#Attr-Example" accesskey="n" rel="next">Attr Example</a>, Previous: <a href="#Expressions" accesskey="p" rel="prev">Expressions</a>, Up: <a href="#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Assigning-Attribute-Values-to-Insns"></a>
<h4 class="subsection">16.19.3 Assigning Attribute Values to Insns</h4>
<a name="index-tagging-insns"></a>
<a name="index-assigning-attribute-values-to-insns"></a>

<p>The value assigned to an attribute of an insn is primarily determined by
which pattern is matched by that insn (or which <code>define_peephole</code>
generated it).  Every <code>define_insn</code> and <code>define_peephole</code> can
have an optional last argument to specify the values of attributes for
matching insns.  The value of any attribute not specified in a particular
insn is set to the default value for that attribute, as specified in its
<code>define_attr</code>.  Extensive use of default values for attributes
permits the specification of the values for only one or two attributes
in the definition of most insn patterns, as seen in the example in the
next section.
</p>
<p>The optional last argument of <code>define_insn</code> and
<code>define_peephole</code> is a vector of expressions, each of which defines
the value for a single attribute.  The most general way of assigning an
attribute&rsquo;s value is to use a <code>set</code> expression whose first operand is an
<code>attr</code> expression giving the name of the attribute being set.  The
second operand of the <code>set</code> is an attribute expression
(see <a href="#Expressions">Expressions</a>) giving the value of the attribute.
</p>
<p>When the attribute value depends on the &lsquo;<samp>alternative</samp>&rsquo; attribute
(i.e., which is the applicable alternative in the constraint of the
insn), the <code>set_attr_alternative</code> expression can be used.  It
allows the specification of a vector of attribute expressions, one for
each alternative.
</p>
<a name="index-set_005fattr"></a>
<p>When the generality of arbitrary attribute expressions is not required,
the simpler <code>set_attr</code> expression can be used, which allows
specifying a string giving either a single attribute value or a list
of attribute values, one for each alternative.
</p>
<p>The form of each of the above specifications is shown below.  In each case,
<var>name</var> is a string specifying the attribute to be set.
</p>
<dl compact="compact">
<dt><code>(set_attr <var>name</var> <var>value-string</var>)</code></dt>
<dd><p><var>value-string</var> is either a string giving the desired attribute value,
or a string containing a comma-separated list giving the values for
succeeding alternatives.  The number of elements must match the number
of alternatives in the constraint of the insn pattern.
</p>
<p>Note that it may be useful to specify &lsquo;<samp>*</samp>&rsquo; for some alternative, in
which case the attribute will assume its default value for insns matching
that alternative.
</p>
<a name="index-set_005fattr_005falternative"></a>
</dd>
<dt><code>(set_attr_alternative <var>name</var> [<var>value1</var> <var>value2</var> &hellip;])</code></dt>
<dd><p>Depending on the alternative of the insn, the value will be one of the
specified values.  This is a shorthand for using a <code>cond</code> with
tests on the &lsquo;<samp>alternative</samp>&rsquo; attribute.
</p>
<a name="index-attr-1"></a>
</dd>
<dt><code>(set (attr <var>name</var>) <var>value</var>)</code></dt>
<dd><p>The first operand of this <code>set</code> must be the special RTL expression
<code>attr</code>, whose sole operand is a string giving the name of the
attribute being set.  <var>value</var> is the value of the attribute.
</p></dd>
</dl>

<p>The following shows three different ways of representing the same
attribute value specification:
</p>
<div class="smallexample">
<pre class="smallexample">(set_attr &quot;type&quot; &quot;load,store,arith&quot;)

(set_attr_alternative &quot;type&quot;
                      [(const_string &quot;load&quot;) (const_string &quot;store&quot;)
                       (const_string &quot;arith&quot;)])

(set (attr &quot;type&quot;)
     (cond [(eq_attr &quot;alternative&quot; &quot;1&quot;) (const_string &quot;load&quot;)
            (eq_attr &quot;alternative&quot; &quot;2&quot;) (const_string &quot;store&quot;)]
           (const_string &quot;arith&quot;)))
</pre></div>

<a name="index-define_005fasm_005fattributes"></a>
<p>The <code>define_asm_attributes</code> expression provides a mechanism to
specify the attributes assigned to insns produced from an <code>asm</code>
statement.  It has the form:
</p>
<div class="smallexample">
<pre class="smallexample">(define_asm_attributes [<var>attr-sets</var>])
</pre></div>

<p>where <var>attr-sets</var> is specified the same as for both the
<code>define_insn</code> and the <code>define_peephole</code> expressions.
</p>
<p>These values will typically be the &ldquo;worst case&rdquo; attribute values.  For
example, they might indicate that the condition code will be clobbered.
</p>
<p>A specification for a <code>length</code> attribute is handled specially.  The
way to compute the length of an <code>asm</code> insn is to multiply the
length specified in the expression <code>define_asm_attributes</code> by the
number of machine instructions specified in the <code>asm</code> statement,
determined by counting the number of semicolons and newlines in the
string.  Therefore, the value of the <code>length</code> attribute specified
in a <code>define_asm_attributes</code> should be the maximum possible length
of a single machine instruction.
</p>
<hr>
<a name="Attr-Example"></a>
<div class="header">
<p>
Next: <a href="#Insn-Lengths" accesskey="n" rel="next">Insn Lengths</a>, Previous: <a href="#Tagging-Insns" accesskey="p" rel="prev">Tagging Insns</a>, Up: <a href="#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Example-of-Attribute-Specifications"></a>
<h4 class="subsection">16.19.4 Example of Attribute Specifications</h4>
<a name="index-attribute-specifications-example"></a>
<a name="index-attribute-specifications"></a>

<p>The judicious use of defaulting is important in the efficient use of
insn attributes.  Typically, insns are divided into <em>types</em> and an
attribute, customarily called <code>type</code>, is used to represent this
value.  This attribute is normally used only to define the default value
for other attributes.  An example will clarify this usage.
</p>
<p>Assume we have a RISC machine with a condition code and in which only
full-word operations are performed in registers.  Let us assume that we
can divide all insns into loads, stores, (integer) arithmetic
operations, floating point operations, and branches.
</p>
<p>Here we will concern ourselves with determining the effect of an insn on
the condition code and will limit ourselves to the following possible
effects:  The condition code can be set unpredictably (clobbered), not
be changed, be set to agree with the results of the operation, or only
changed if the item previously set into the condition code has been
modified.
</p>
<p>Here is part of a sample <samp>md</samp> file for such a machine:
</p>
<div class="smallexample">
<pre class="smallexample">(define_attr &quot;type&quot; &quot;load,store,arith,fp,branch&quot; (const_string &quot;arith&quot;))

(define_attr &quot;cc&quot; &quot;clobber,unchanged,set,change0&quot;
             (cond [(eq_attr &quot;type&quot; &quot;load&quot;)
                        (const_string &quot;change0&quot;)
                    (eq_attr &quot;type&quot; &quot;store,branch&quot;)
                        (const_string &quot;unchanged&quot;)
                    (eq_attr &quot;type&quot; &quot;arith&quot;)
                        (if_then_else (match_operand:SI 0 &quot;&quot; &quot;&quot;)
                                      (const_string &quot;set&quot;)
                                      (const_string &quot;clobber&quot;))]
                   (const_string &quot;clobber&quot;)))

(define_insn &quot;&quot;
  [(set (match_operand:SI 0 &quot;general_operand&quot; &quot;=r,r,m&quot;)
        (match_operand:SI 1 &quot;general_operand&quot; &quot;r,m,r&quot;))]
  &quot;&quot;
  &quot;@
   move %0,%1
   load %0,%1
   store %0,%1&quot;
  [(set_attr &quot;type&quot; &quot;arith,load,store&quot;)])
</pre></div>

<p>Note that we assume in the above example that arithmetic operations
performed on quantities smaller than a machine word clobber the condition
code since they will set the condition code to a value corresponding to the
full-word result.
</p>
<hr>
<a name="Insn-Lengths"></a>
<div class="header">
<p>
Next: <a href="#Constant-Attributes" accesskey="n" rel="next">Constant Attributes</a>, Previous: <a href="#Attr-Example" accesskey="p" rel="prev">Attr Example</a>, Up: <a href="#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Computing-the-Length-of-an-Insn"></a>
<h4 class="subsection">16.19.5 Computing the Length of an Insn</h4>
<a name="index-insn-lengths_002c-computing"></a>
<a name="index-computing-the-length-of-an-insn"></a>

<p>For many machines, multiple types of branch instructions are provided, each
for different length branch displacements.  In most cases, the assembler
will choose the correct instruction to use.  However, when the assembler
cannot do so, GCC can when a special attribute, the <code>length</code>
attribute, is defined.  This attribute must be defined to have numeric
values by specifying a null string in its <code>define_attr</code>.
</p>
<p>In the case of the <code>length</code> attribute, two additional forms of
arithmetic terms are allowed in test expressions:
</p>
<dl compact="compact">
<dd><a name="index-match_005fdup-and-attributes"></a>
</dd>
<dt><code>(match_dup <var>n</var>)</code></dt>
<dd><p>This refers to the address of operand <var>n</var> of the current insn, which
must be a <code>label_ref</code>.
</p>
<a name="index-pc-and-attributes"></a>
</dd>
<dt><code>(pc)</code></dt>
<dd><p>For non-branch instructions and backward branch instructions, this refers
to the address of the current insn.  But for forward branch instructions,
this refers to the address of the next insn, because the length of the
current insn is to be computed.
</p></dd>
</dl>

<a name="index-addr_005fvec_002c-length-of"></a>
<a name="index-addr_005fdiff_005fvec_002c-length-of"></a>
<p>For normal insns, the length will be determined by value of the
<code>length</code> attribute.  In the case of <code>addr_vec</code> and
<code>addr_diff_vec</code> insn patterns, the length is computed as
the number of vectors multiplied by the size of each vector.
</p>
<p>Lengths are measured in addressable storage units (bytes).
</p>
<p>The following macros can be used to refine the length computation:
</p>
<dl compact="compact">
<dd><a name="index-ADJUST_005fINSN_005fLENGTH"></a>
</dd>
<dt><code>ADJUST_INSN_LENGTH (<var>insn</var>, <var>length</var>)</code></dt>
<dd><p>If defined, modifies the length assigned to instruction <var>insn</var> as a
function of the context in which it is used.  <var>length</var> is an lvalue
that contains the initially computed length of the insn and should be
updated with the correct length of the insn.
</p>
<p>This macro will normally not be required.  A case in which it is
required is the ROMP.  On this machine, the size of an <code>addr_vec</code>
insn must be increased by two to compensate for the fact that alignment
may be required.
</p></dd>
</dl>

<a name="index-get_005fattr_005flength"></a>
<p>The routine that returns <code>get_attr_length</code> (the value of the
<code>length</code> attribute) can be used by the output routine to
determine the form of the branch instruction to be written, as the
example below illustrates.
</p>
<p>As an example of the specification of variable-length branches, consider
the IBM 360.  If we adopt the convention that a register will be set to
the starting address of a function, we can jump to labels within 4k of
the start using a four-byte instruction.  Otherwise, we need a six-byte
sequence to load the address from memory and then branch to it.
</p>
<p>On such a machine, a pattern for a branch instruction might be specified
as follows:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;jump&quot;
  [(set (pc)
        (label_ref (match_operand 0 &quot;&quot; &quot;&quot;)))]
  &quot;&quot;
{
   return (get_attr_length (insn) == 4
           ? &quot;b %l0&quot; : &quot;l r15,=a(%l0); br r15&quot;);
}
  [(set (attr &quot;length&quot;)
        (if_then_else (lt (match_dup 0) (const_int 4096))
                      (const_int 4)
                      (const_int 6)))])
</pre></div>

<hr>
<a name="Constant-Attributes"></a>
<div class="header">
<p>
Next: <a href="#Delay-Slots" accesskey="n" rel="next">Delay Slots</a>, Previous: <a href="#Insn-Lengths" accesskey="p" rel="prev">Insn Lengths</a>, Up: <a href="#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Constant-Attributes-1"></a>
<h4 class="subsection">16.19.6 Constant Attributes</h4>
<a name="index-constant-attributes"></a>

<p>A special form of <code>define_attr</code>, where the expression for the
default value is a <code>const</code> expression, indicates an attribute that
is constant for a given run of the compiler.  Constant attributes may be
used to specify which variety of processor is used.  For example,
</p>
<div class="smallexample">
<pre class="smallexample">(define_attr &quot;cpu&quot; &quot;m88100,m88110,m88000&quot;
 (const
  (cond [(symbol_ref &quot;TARGET_88100&quot;) (const_string &quot;m88100&quot;)
         (symbol_ref &quot;TARGET_88110&quot;) (const_string &quot;m88110&quot;)]
        (const_string &quot;m88000&quot;))))

(define_attr &quot;memory&quot; &quot;fast,slow&quot;
 (const
  (if_then_else (symbol_ref &quot;TARGET_FAST_MEM&quot;)
                (const_string &quot;fast&quot;)
                (const_string &quot;slow&quot;))))
</pre></div>

<p>The routine generated for constant attributes has no parameters as it
does not depend on any particular insn.  RTL expressions used to define
the value of a constant attribute may use the <code>symbol_ref</code> form,
but may not use either the <code>match_operand</code> form or <code>eq_attr</code>
forms involving insn attributes.
</p>
<hr>
<a name="Delay-Slots"></a>
<div class="header">
<p>
Next: <a href="#Processor-pipeline-description" accesskey="n" rel="next">Processor pipeline description</a>, Previous: <a href="#Constant-Attributes" accesskey="p" rel="prev">Constant Attributes</a>, Up: <a href="#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Delay-Slot-Scheduling"></a>
<h4 class="subsection">16.19.7 Delay Slot Scheduling</h4>
<a name="index-delay-slots_002c-defining"></a>

<p>The insn attribute mechanism can be used to specify the requirements for
delay slots, if any, on a target machine.  An instruction is said to
require a <em>delay slot</em> if some instructions that are physically
after the instruction are executed as if they were located before it.
Classic examples are branch and call instructions, which often execute
the following instruction before the branch or call is performed.
</p>
<p>On some machines, conditional branch instructions can optionally
<em>annul</em> instructions in the delay slot.  This means that the
instruction will not be executed for certain branch outcomes.  Both
instructions that annul if the branch is true and instructions that
annul if the branch is false are supported.
</p>
<p>Delay slot scheduling differs from instruction scheduling in that
determining whether an instruction needs a delay slot is dependent only
on the type of instruction being generated, not on data flow between the
instructions.  See the next section for a discussion of data-dependent
instruction scheduling.
</p>
<a name="index-define_005fdelay"></a>
<p>The requirement of an insn needing one or more delay slots is indicated
via the <code>define_delay</code> expression.  It has the following form:
</p>
<div class="smallexample">
<pre class="smallexample">(define_delay <var>test</var>
              [<var>delay-1</var> <var>annul-true-1</var> <var>annul-false-1</var>
               <var>delay-2</var> <var>annul-true-2</var> <var>annul-false-2</var>
               &hellip;])
</pre></div>

<p><var>test</var> is an attribute test that indicates whether this
<code>define_delay</code> applies to a particular insn.  If so, the number of
required delay slots is determined by the length of the vector specified
as the second argument.  An insn placed in delay slot <var>n</var> must
satisfy attribute test <var>delay-n</var>.  <var>annul-true-n</var> is an
attribute test that specifies which insns may be annulled if the branch
is true.  Similarly, <var>annul-false-n</var> specifies which insns in the
delay slot may be annulled if the branch is false.  If annulling is not
supported for that delay slot, <code>(nil)</code> should be coded.
</p>
<p>For example, in the common case where branch and call insns require
a single delay slot, which may contain any insn other than a branch or
call, the following would be placed in the <samp>md</samp> file:
</p>
<div class="smallexample">
<pre class="smallexample">(define_delay (eq_attr &quot;type&quot; &quot;branch,call&quot;)
              [(eq_attr &quot;type&quot; &quot;!branch,call&quot;) (nil) (nil)])
</pre></div>

<p>Multiple <code>define_delay</code> expressions may be specified.  In this
case, each such expression specifies different delay slot requirements
and there must be no insn for which tests in two <code>define_delay</code>
expressions are both true.
</p>
<p>For example, if we have a machine that requires one delay slot for branches
but two for calls,  no delay slot can contain a branch or call insn,
and any valid insn in the delay slot for the branch can be annulled if the
branch is true, we might represent this as follows:
</p>
<div class="smallexample">
<pre class="smallexample">(define_delay (eq_attr &quot;type&quot; &quot;branch&quot;)
   [(eq_attr &quot;type&quot; &quot;!branch,call&quot;)
    (eq_attr &quot;type&quot; &quot;!branch,call&quot;)
    (nil)])

(define_delay (eq_attr &quot;type&quot; &quot;call&quot;)
              [(eq_attr &quot;type&quot; &quot;!branch,call&quot;) (nil) (nil)
               (eq_attr &quot;type&quot; &quot;!branch,call&quot;) (nil) (nil)])
</pre></div>

<hr>
<a name="Processor-pipeline-description"></a>
<div class="header">
<p>
Previous: <a href="#Delay-Slots" accesskey="p" rel="prev">Delay Slots</a>, Up: <a href="#Insn-Attributes" accesskey="u" rel="up">Insn Attributes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Specifying-processor-pipeline-description"></a>
<h4 class="subsection">16.19.8 Specifying processor pipeline description</h4>
<a name="index-processor-pipeline-description"></a>
<a name="index-processor-functional-units"></a>
<a name="index-instruction-latency-time"></a>
<a name="index-interlock-delays"></a>
<a name="index-data-dependence-delays"></a>
<a name="index-reservation-delays"></a>
<a name="index-pipeline-hazard-recognizer"></a>
<a name="index-automaton-based-pipeline-description"></a>
<a name="index-regular-expressions"></a>
<a name="index-deterministic-finite-state-automaton"></a>
<a name="index-automaton-based-scheduler"></a>
<a name="index-RISC"></a>
<a name="index-VLIW"></a>

<p>To achieve better performance, most modern processors
(super-pipelined, superscalar <acronym>RISC</acronym>, and <acronym>VLIW</acronym>
processors) have many <em>functional units</em> on which several
instructions can be executed simultaneously.  An instruction starts
execution if its issue conditions are satisfied.  If not, the
instruction is stalled until its conditions are satisfied.  Such
<em>interlock (pipeline) delay</em> causes interruption of the fetching
of successor instructions (or demands nop instructions, e.g. for some
MIPS processors).
</p>
<p>There are two major kinds of interlock delays in modern processors.
The first one is a data dependence delay determining <em>instruction
latency time</em>.  The instruction execution is not started until all
source data have been evaluated by prior instructions (there are more
complex cases when the instruction execution starts even when the data
are not available but will be ready in given time after the
instruction execution start).  Taking the data dependence delays into
account is simple.  The data dependence (true, output, and
anti-dependence) delay between two instructions is given by a
constant.  In most cases this approach is adequate.  The second kind
of interlock delays is a reservation delay.  The reservation delay
means that two instructions under execution will be in need of shared
processors resources, i.e. buses, internal registers, and/or
functional units, which are reserved for some time.  Taking this kind
of delay into account is complex especially for modern <acronym>RISC</acronym>
processors.
</p>
<p>The task of exploiting more processor parallelism is solved by an
instruction scheduler.  For a better solution to this problem, the
instruction scheduler has to have an adequate description of the
processor parallelism (or <em>pipeline description</em>).  GCC
machine descriptions describe processor parallelism and functional
unit reservations for groups of instructions with the aid of
<em>regular expressions</em>.
</p>
<p>The GCC instruction scheduler uses a <em>pipeline hazard recognizer</em> to
figure out the possibility of the instruction issue by the processor
on a given simulated processor cycle.  The pipeline hazard recognizer is
automatically generated from the processor pipeline description.  The
pipeline hazard recognizer generated from the machine description
is based on a deterministic finite state automaton (<acronym>DFA</acronym>):
the instruction issue is possible if there is a transition from one
automaton state to another one.  This algorithm is very fast, and
furthermore, its speed is not dependent on processor
complexity<a name="DOCF5" href="#FOOT5"><sup>5</sup></a>.
</p>
<a name="index-automaton-based-pipeline-description-1"></a>
<p>The rest of this section describes the directives that constitute
an automaton-based processor pipeline description.  The order of
these constructions within the machine description file is not
important.
</p>
<a name="index-define_005fautomaton"></a>
<a name="index-pipeline-hazard-recognizer-1"></a>
<p>The following optional construction describes names of automata
generated and used for the pipeline hazards recognition.  Sometimes
the generated finite state automaton used by the pipeline hazard
recognizer is large.  If we use more than one automaton and bind functional
units to the automata, the total size of the automata is usually
less than the size of the single automaton.  If there is no one such
construction, only one finite state automaton is generated.
</p>
<div class="smallexample">
<pre class="smallexample">(define_automaton <var>automata-names</var>)
</pre></div>

<p><var>automata-names</var> is a string giving names of the automata.  The
names are separated by commas.  All the automata should have unique names.
The automaton name is used in the constructions <code>define_cpu_unit</code> and
<code>define_query_cpu_unit</code>.
</p>
<a name="index-define_005fcpu_005funit"></a>
<a name="index-processor-functional-units-1"></a>
<p>Each processor functional unit used in the description of instruction
reservations should be described by the following construction.
</p>
<div class="smallexample">
<pre class="smallexample">(define_cpu_unit <var>unit-names</var> [<var>automaton-name</var>])
</pre></div>

<p><var>unit-names</var> is a string giving the names of the functional units
separated by commas.  Don&rsquo;t use name &lsquo;<samp>nothing</samp>&rsquo;, it is reserved
for other goals.
</p>
<p><var>automaton-name</var> is a string giving the name of the automaton with
which the unit is bound.  The automaton should be described in
construction <code>define_automaton</code>.  You should give
<em>automaton-name</em>, if there is a defined automaton.
</p>
<p>The assignment of units to automata are constrained by the uses of the
units in insn reservations.  The most important constraint is: if a
unit reservation is present on a particular cycle of an alternative
for an insn reservation, then some unit from the same automaton must
be present on the same cycle for the other alternatives of the insn
reservation.  The rest of the constraints are mentioned in the
description of the subsequent constructions.
</p>
<a name="index-define_005fquery_005fcpu_005funit"></a>
<a name="index-querying-function-unit-reservations"></a>
<p>The following construction describes CPU functional units analogously
to <code>define_cpu_unit</code>.  The reservation of such units can be
queried for an automaton state.  The instruction scheduler never
queries reservation of functional units for given automaton state.  So
as a rule, you don&rsquo;t need this construction.  This construction could
be used for future code generation goals (e.g. to generate
<acronym>VLIW</acronym> insn templates).
</p>
<div class="smallexample">
<pre class="smallexample">(define_query_cpu_unit <var>unit-names</var> [<var>automaton-name</var>])
</pre></div>

<p><var>unit-names</var> is a string giving names of the functional units
separated by commas.
</p>
<p><var>automaton-name</var> is a string giving the name of the automaton with
which the unit is bound.
</p>
<a name="index-define_005finsn_005freservation"></a>
<a name="index-instruction-latency-time-1"></a>
<a name="index-regular-expressions-1"></a>
<a name="index-data-bypass"></a>
<p>The following construction is the major one to describe pipeline
characteristics of an instruction.
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn_reservation <var>insn-name</var> <var>default_latency</var>
                         <var>condition</var> <var>regexp</var>)
</pre></div>

<p><var>default_latency</var> is a number giving latency time of the
instruction.  There is an important difference between the old
description and the automaton based pipeline description.  The latency
time is used for all dependencies when we use the old description.  In
the automaton based pipeline description, the given latency time is only
used for true dependencies.  The cost of anti-dependencies is always
zero and the cost of output dependencies is the difference between
latency times of the producing and consuming insns (if the difference
is negative, the cost is considered to be zero).  You can always
change the default costs for any description by using the target hook
<code>TARGET_SCHED_ADJUST_COST</code> (see <a href="#Scheduling">Scheduling</a>).
</p>
<p><var>insn-name</var> is a string giving the internal name of the insn.  The
internal names are used in constructions <code>define_bypass</code> and in
the automaton description file generated for debugging.  The internal
name has nothing in common with the names in <code>define_insn</code>.  It is a
good practice to use insn classes described in the processor manual.
</p>
<p><var>condition</var> defines what RTL insns are described by this
construction.  You should remember that you will be in trouble if
<var>condition</var> for two or more different
<code>define_insn_reservation</code> constructions is TRUE for an insn.  In
this case what reservation will be used for the insn is not defined.
Such cases are not checked during generation of the pipeline hazards
recognizer because in general recognizing that two conditions may have
the same value is quite difficult (especially if the conditions
contain <code>symbol_ref</code>).  It is also not checked during the
pipeline hazard recognizer work because it would slow down the
recognizer considerably.
</p>
<p><var>regexp</var> is a string describing the reservation of the cpu&rsquo;s functional
units by the instruction.  The reservations are described by a regular
expression according to the following syntax:
</p>
<div class="smallexample">
<pre class="smallexample">       regexp = regexp &quot;,&quot; oneof
              | oneof

       oneof = oneof &quot;|&quot; allof
             | allof

       allof = allof &quot;+&quot; repeat
             | repeat

       repeat = element &quot;*&quot; number
              | element

       element = cpu_function_unit_name
               | reservation_name
               | result_name
               | &quot;nothing&quot;
               | &quot;(&quot; regexp &quot;)&quot;
</pre></div>

<ul>
<li> &lsquo;<samp>,</samp>&rsquo; is used for describing the start of the next cycle in
the reservation.

</li><li> &lsquo;<samp>|</samp>&rsquo; is used for describing a reservation described by the first
regular expression <strong>or</strong> a reservation described by the second
regular expression <strong>or</strong> etc.

</li><li> &lsquo;<samp>+</samp>&rsquo; is used for describing a reservation described by the first
regular expression <strong>and</strong> a reservation described by the
second regular expression <strong>and</strong> etc.

</li><li> &lsquo;<samp>*</samp>&rsquo; is used for convenience and simply means a sequence in which
the regular expression are repeated <var>number</var> times with cycle
advancing (see &lsquo;<samp>,</samp>&rsquo;).

</li><li> &lsquo;<samp>cpu_function_unit_name</samp>&rsquo; denotes reservation of the named
functional unit.

</li><li> &lsquo;<samp>reservation_name</samp>&rsquo; &mdash; see description of construction
&lsquo;<samp>define_reservation</samp>&rsquo;.

</li><li> &lsquo;<samp>nothing</samp>&rsquo; denotes no unit reservations.
</li></ul>

<a name="index-define_005freservation"></a>
<p>Sometimes unit reservations for different insns contain common parts.
In such case, you can simplify the pipeline description by describing
the common part by the following construction
</p>
<div class="smallexample">
<pre class="smallexample">(define_reservation <var>reservation-name</var> <var>regexp</var>)
</pre></div>

<p><var>reservation-name</var> is a string giving name of <var>regexp</var>.
Functional unit names and reservation names are in the same name
space.  So the reservation names should be different from the
functional unit names and can not be the reserved name &lsquo;<samp>nothing</samp>&rsquo;.
</p>
<a name="index-define_005fbypass"></a>
<a name="index-instruction-latency-time-2"></a>
<a name="index-data-bypass-1"></a>
<p>The following construction is used to describe exceptions in the
latency time for given instruction pair.  This is so called bypasses.
</p>
<div class="smallexample">
<pre class="smallexample">(define_bypass <var>number</var> <var>out_insn_names</var> <var>in_insn_names</var>
               [<var>guard</var>])
</pre></div>

<p><var>number</var> defines when the result generated by the instructions
given in string <var>out_insn_names</var> will be ready for the
instructions given in string <var>in_insn_names</var>.  Each of these
strings is a comma-separated list of filename-style globs and
they refer to the names of <code>define_insn_reservation</code>s.
For example:
</p><div class="smallexample">
<pre class="smallexample">(define_bypass 1 &quot;cpu1_load_*, cpu1_store_*&quot; &quot;cpu1_load_*&quot;)
</pre></div>
<p>defines a bypass between instructions that start with
&lsquo;<samp>cpu1_load_</samp>&rsquo; or &lsquo;<samp>cpu1_store_</samp>&rsquo; and those that start with
&lsquo;<samp>cpu1_load_</samp>&rsquo;.
</p>
<p><var>guard</var> is an optional string giving the name of a C function which
defines an additional guard for the bypass.  The function will get the
two insns as parameters.  If the function returns zero the bypass will
be ignored for this case.  The additional guard is necessary to
recognize complicated bypasses, e.g. when the consumer is only an address
of insn &lsquo;<samp>store</samp>&rsquo; (not a stored value).
</p>
<p>If there are more one bypass with the same output and input insns, the
chosen bypass is the first bypass with a guard in description whose
guard function returns nonzero.  If there is no such bypass, then
bypass without the guard function is chosen.
</p>
<a name="index-exclusion_005fset"></a>
<a name="index-presence_005fset"></a>
<a name="index-final_005fpresence_005fset"></a>
<a name="index-absence_005fset"></a>
<a name="index-final_005fabsence_005fset"></a>
<a name="index-VLIW-1"></a>
<a name="index-RISC-1"></a>
<p>The following five constructions are usually used to describe
<acronym>VLIW</acronym> processors, or more precisely, to describe a placement
of small instructions into <acronym>VLIW</acronym> instruction slots.  They
can be used for <acronym>RISC</acronym> processors, too.
</p>
<div class="smallexample">
<pre class="smallexample">(exclusion_set <var>unit-names</var> <var>unit-names</var>)
(presence_set <var>unit-names</var> <var>patterns</var>)
(final_presence_set <var>unit-names</var> <var>patterns</var>)
(absence_set <var>unit-names</var> <var>patterns</var>)
(final_absence_set <var>unit-names</var> <var>patterns</var>)
</pre></div>

<p><var>unit-names</var> is a string giving names of functional units
separated by commas.
</p>
<p><var>patterns</var> is a string giving patterns of functional units
separated by comma.  Currently pattern is one unit or units
separated by white-spaces.
</p>
<p>The first construction (&lsquo;<samp>exclusion_set</samp>&rsquo;) means that each
functional unit in the first string can not be reserved simultaneously
with a unit whose name is in the second string and vice versa.  For
example, the construction is useful for describing processors
(e.g. some SPARC processors) with a fully pipelined floating point
functional unit which can execute simultaneously only single floating
point insns or only double floating point insns.
</p>
<p>The second construction (&lsquo;<samp>presence_set</samp>&rsquo;) means that each
functional unit in the first string can not be reserved unless at
least one of pattern of units whose names are in the second string is
reserved.  This is an asymmetric relation.  For example, it is useful
for description that <acronym>VLIW</acronym> &lsquo;<samp>slot1</samp>&rsquo; is reserved after
&lsquo;<samp>slot0</samp>&rsquo; reservation.  We could describe it by the following
construction
</p>
<div class="smallexample">
<pre class="smallexample">(presence_set &quot;slot1&quot; &quot;slot0&quot;)
</pre></div>

<p>Or &lsquo;<samp>slot1</samp>&rsquo; is reserved only after &lsquo;<samp>slot0</samp>&rsquo; and unit &lsquo;<samp>b0</samp>&rsquo;
reservation.  In this case we could write
</p>
<div class="smallexample">
<pre class="smallexample">(presence_set &quot;slot1&quot; &quot;slot0 b0&quot;)
</pre></div>

<p>The third construction (&lsquo;<samp>final_presence_set</samp>&rsquo;) is analogous to
&lsquo;<samp>presence_set</samp>&rsquo;.  The difference between them is when checking is
done.  When an instruction is issued in given automaton state
reflecting all current and planned unit reservations, the automaton
state is changed.  The first state is a source state, the second one
is a result state.  Checking for &lsquo;<samp>presence_set</samp>&rsquo; is done on the
source state reservation, checking for &lsquo;<samp>final_presence_set</samp>&rsquo; is
done on the result reservation.  This construction is useful to
describe a reservation which is actually two subsequent reservations.
For example, if we use
</p>
<div class="smallexample">
<pre class="smallexample">(presence_set &quot;slot1&quot; &quot;slot0&quot;)
</pre></div>

<p>the following insn will be never issued (because &lsquo;<samp>slot1</samp>&rsquo; requires
&lsquo;<samp>slot0</samp>&rsquo; which is absent in the source state).
</p>
<div class="smallexample">
<pre class="smallexample">(define_reservation &quot;insn_and_nop&quot; &quot;slot0 + slot1&quot;)
</pre></div>

<p>but it can be issued if we use analogous &lsquo;<samp>final_presence_set</samp>&rsquo;.
</p>
<p>The forth construction (&lsquo;<samp>absence_set</samp>&rsquo;) means that each functional
unit in the first string can be reserved only if each pattern of units
whose names are in the second string is not reserved.  This is an
asymmetric relation (actually &lsquo;<samp>exclusion_set</samp>&rsquo; is analogous to
this one but it is symmetric).  For example it might be useful in a
<acronym>VLIW</acronym> description to say that &lsquo;<samp>slot0</samp>&rsquo; cannot be reserved
after either &lsquo;<samp>slot1</samp>&rsquo; or &lsquo;<samp>slot2</samp>&rsquo; have been reserved.  This
can be described as:
</p>
<div class="smallexample">
<pre class="smallexample">(absence_set &quot;slot0&quot; &quot;slot1, slot2&quot;)
</pre></div>

<p>Or &lsquo;<samp>slot2</samp>&rsquo; can not be reserved if &lsquo;<samp>slot0</samp>&rsquo; and unit &lsquo;<samp>b0</samp>&rsquo;
are reserved or &lsquo;<samp>slot1</samp>&rsquo; and unit &lsquo;<samp>b1</samp>&rsquo; are reserved.  In
this case we could write
</p>
<div class="smallexample">
<pre class="smallexample">(absence_set &quot;slot2&quot; &quot;slot0 b0, slot1 b1&quot;)
</pre></div>

<p>All functional units mentioned in a set should belong to the same
automaton.
</p>
<p>The last construction (&lsquo;<samp>final_absence_set</samp>&rsquo;) is analogous to
&lsquo;<samp>absence_set</samp>&rsquo; but checking is done on the result (state)
reservation.  See comments for &lsquo;<samp>final_presence_set</samp>&rsquo;.
</p>
<a name="index-automata_005foption"></a>
<a name="index-deterministic-finite-state-automaton-1"></a>
<a name="index-nondeterministic-finite-state-automaton"></a>
<a name="index-finite-state-automaton-minimization"></a>
<p>You can control the generator of the pipeline hazard recognizer with
the following construction.
</p>
<div class="smallexample">
<pre class="smallexample">(automata_option <var>options</var>)
</pre></div>

<p><var>options</var> is a string giving options which affect the generated
code.  Currently there are the following options:
</p>
<ul>
<li> <em>no-minimization</em> makes no minimization of the automaton.  This is
only worth to do when we are debugging the description and need to
look more accurately at reservations of states.

</li><li> <em>time</em> means printing time statistics about the generation of
automata.

</li><li> <em>stats</em> means printing statistics about the generated automata
such as the number of DFA states, NDFA states and arcs.

</li><li> <em>v</em> means a generation of the file describing the result automata.
The file has suffix &lsquo;<samp>.dfa</samp>&rsquo; and can be used for the description
verification and debugging.

</li><li> <em>w</em> means a generation of warning instead of error for
non-critical errors.

</li><li> <em>no-comb-vect</em> prevents the automaton generator from generating
two data structures and comparing them for space efficiency.  Using
a comb vector to represent transitions may be better, but it can be
very expensive to construct.  This option is useful if the build
process spends an unacceptably long time in genautomata.

</li><li> <em>ndfa</em> makes nondeterministic finite state automata.  This affects
the treatment of operator &lsquo;<samp>|</samp>&rsquo; in the regular expressions.  The
usual treatment of the operator is to try the first alternative and,
if the reservation is not possible, the second alternative.  The
nondeterministic treatment means trying all alternatives, some of them
may be rejected by reservations in the subsequent insns.

</li><li> <em>collapse-ndfa</em> modifies the behaviour of the generator when
producing an automaton.  An additional state transition to collapse a
nondeterministic <acronym>NDFA</acronym> state to a deterministic <acronym>DFA</acronym>
state is generated.  It can be triggered by passing <code>const0_rtx</code> to
state_transition.  In such an automaton, cycle advance transitions are
available only for these collapsed states.  This option is useful for
ports that want to use the <code>ndfa</code> option, but also want to use
<code>define_query_cpu_unit</code> to assign units to insns issued in a cycle.

</li><li> <em>progress</em> means output of a progress bar showing how many states
were generated so far for automaton being processed.  This is useful
during debugging a <acronym>DFA</acronym> description.  If you see too many
generated states, you could interrupt the generator of the pipeline
hazard recognizer and try to figure out a reason for generation of the
huge automaton.
</li></ul>

<p>As an example, consider a superscalar <acronym>RISC</acronym> machine which can
issue three insns (two integer insns and one floating point insn) on
the cycle but can finish only two insns.  To describe this, we define
the following functional units.
</p>
<div class="smallexample">
<pre class="smallexample">(define_cpu_unit &quot;i0_pipeline, i1_pipeline, f_pipeline&quot;)
(define_cpu_unit &quot;port0, port1&quot;)
</pre></div>

<p>All simple integer insns can be executed in any integer pipeline and
their result is ready in two cycles.  The simple integer insns are
issued into the first pipeline unless it is reserved, otherwise they
are issued into the second pipeline.  Integer division and
multiplication insns can be executed only in the second integer
pipeline and their results are ready correspondingly in 8 and 4
cycles.  The integer division is not pipelined, i.e. the subsequent
integer division insn can not be issued until the current division
insn finished.  Floating point insns are fully pipelined and their
results are ready in 3 cycles.  Where the result of a floating point
insn is used by an integer insn, an additional delay of one cycle is
incurred.  To describe all of this we could specify
</p>
<div class="smallexample">
<pre class="smallexample">(define_cpu_unit &quot;div&quot;)

(define_insn_reservation &quot;simple&quot; 2 (eq_attr &quot;type&quot; &quot;int&quot;)
                         &quot;(i0_pipeline | i1_pipeline), (port0 | port1)&quot;)

(define_insn_reservation &quot;mult&quot; 4 (eq_attr &quot;type&quot; &quot;mult&quot;)
                         &quot;i1_pipeline, nothing*2, (port0 | port1)&quot;)

(define_insn_reservation &quot;div&quot; 8 (eq_attr &quot;type&quot; &quot;div&quot;)
                         &quot;i1_pipeline, div*7, div + (port0 | port1)&quot;)

(define_insn_reservation &quot;float&quot; 3 (eq_attr &quot;type&quot; &quot;float&quot;)
                         &quot;f_pipeline, nothing, (port0 | port1))

(define_bypass 4 &quot;float&quot; &quot;simple,mult,div&quot;)
</pre></div>

<p>To simplify the description we could describe the following reservation
</p>
<div class="smallexample">
<pre class="smallexample">(define_reservation &quot;finish&quot; &quot;port0|port1&quot;)
</pre></div>

<p>and use it in all <code>define_insn_reservation</code> as in the following
construction
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn_reservation &quot;simple&quot; 2 (eq_attr &quot;type&quot; &quot;int&quot;)
                         &quot;(i0_pipeline | i1_pipeline), finish&quot;)
</pre></div>


<hr>
<a name="Conditional-Execution"></a>
<div class="header">
<p>
Next: <a href="#Define-Subst" accesskey="n" rel="next">Define Subst</a>, Previous: <a href="#Insn-Attributes" accesskey="p" rel="prev">Insn Attributes</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Conditional-Execution-1"></a>
<h3 class="section">16.20 Conditional Execution</h3>
<a name="index-conditional-execution"></a>
<a name="index-predication"></a>

<p>A number of architectures provide for some form of conditional
execution, or predication.  The hallmark of this feature is the
ability to nullify most of the instructions in the instruction set.
When the instruction set is large and not entirely symmetric, it
can be quite tedious to describe these forms directly in the
<samp>.md</samp> file.  An alternative is the <code>define_cond_exec</code> template.
</p>
<a name="index-define_005fcond_005fexec"></a>
<div class="smallexample">
<pre class="smallexample">(define_cond_exec
  [<var>predicate-pattern</var>]
  &quot;<var>condition</var>&quot;
  &quot;<var>output-template</var>&quot;)
</pre></div>

<p><var>predicate-pattern</var> is the condition that must be true for the
insn to be executed at runtime and should match a relational operator.
One can use <code>match_operator</code> to match several relational operators
at once.  Any <code>match_operand</code> operands must have no more than one
alternative.
</p>
<p><var>condition</var> is a C expression that must be true for the generated
pattern to match.
</p>
<a name="index-current_005finsn_005fpredicate"></a>
<p><var>output-template</var> is a string similar to the <code>define_insn</code>
output template (see <a href="#Output-Template">Output Template</a>), except that the &lsquo;<samp>*</samp>&rsquo;
and &lsquo;<samp>@</samp>&rsquo; special cases do not apply.  This is only useful if the
assembly text for the predicate is a simple prefix to the main insn.
In order to handle the general case, there is a global variable
<code>current_insn_predicate</code> that will contain the entire predicate
if the current insn is predicated, and will otherwise be <code>NULL</code>.
</p>
<p>When <code>define_cond_exec</code> is used, an implicit reference to
the <code>predicable</code> instruction attribute is made.
See <a href="#Insn-Attributes">Insn Attributes</a>.  This attribute must be a boolean (i.e. have
exactly two elements in its <var>list-of-values</var>), with the possible
values being <code>no</code> and <code>yes</code>.  The default and all uses in
the insns must be a simple constant, not a complex expressions.  It
may, however, depend on the alternative, by using a comma-separated
list of values.  If that is the case, the port should also define an
<code>enabled</code> attribute (see <a href="#Disable-Insn-Alternatives">Disable Insn Alternatives</a>), which
should also allow only <code>no</code> and <code>yes</code> as its values.
</p>
<p>For each <code>define_insn</code> for which the <code>predicable</code>
attribute is true, a new <code>define_insn</code> pattern will be
generated that matches a predicated version of the instruction.
For example,
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;addsi&quot;
  [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;r&quot;)
        (plus:SI (match_operand:SI 1 &quot;register_operand&quot; &quot;r&quot;)
                 (match_operand:SI 2 &quot;register_operand&quot; &quot;r&quot;)))]
  &quot;<var>test1</var>&quot;
  &quot;add %2,%1,%0&quot;)

(define_cond_exec
  [(ne (match_operand:CC 0 &quot;register_operand&quot; &quot;c&quot;)
       (const_int 0))]
  &quot;<var>test2</var>&quot;
  &quot;(%0)&quot;)
</pre></div>

<p>generates a new pattern
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(cond_exec
     (ne (match_operand:CC 3 &quot;register_operand&quot; &quot;c&quot;) (const_int 0))
     (set (match_operand:SI 0 &quot;register_operand&quot; &quot;r&quot;)
          (plus:SI (match_operand:SI 1 &quot;register_operand&quot; &quot;r&quot;)
                   (match_operand:SI 2 &quot;register_operand&quot; &quot;r&quot;))))]
  &quot;(<var>test2</var>) &amp;&amp; (<var>test1</var>)&quot;
  &quot;(%3) add %2,%1,%0&quot;)
</pre></div>

<hr>
<a name="Define-Subst"></a>
<div class="header">
<p>
Next: <a href="#Constant-Definitions" accesskey="n" rel="next">Constant Definitions</a>, Previous: <a href="#Conditional-Execution" accesskey="p" rel="prev">Conditional Execution</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="RTL-Templates-Transformations"></a>
<h3 class="section">16.21 RTL Templates Transformations</h3>
<a name="index-define_005fsubst"></a>

<p>For some hardware architectures there are common cases when the RTL
templates for the instructions can be derived from the other RTL
templates using simple transformations.  E.g., <samp>i386.md</samp> contains
an RTL template for the ordinary <code>sub</code> instruction&mdash;
<code>*subsi_1</code>, and for the <code>sub</code> instruction with subsequent
zero-extension&mdash;<code>*subsi_1_zext</code>.  Such cases can be easily
implemented by a single meta-template capable of generating a modified
case based on the initial one:
</p>
<a name="index-define_005fsubst-4"></a>
<div class="smallexample">
<pre class="smallexample">(define_subst &quot;<var>name</var>&quot;
  [<var>input-template</var>]
  &quot;<var>condition</var>&quot;
  [<var>output-template</var>])
</pre></div>
<p><var>input-template</var> is a pattern describing the source RTL template,
which will be transformed.
</p>
<p><var>condition</var> is a C expression that is conjunct with the condition
from the input-template to generate a condition to be used in the
output-template.
</p>
<p><var>output-template</var> is a pattern that will be used in the resulting
template.
</p>
<p><code>define_subst</code> mechanism is tightly coupled with the notion of the
subst attribute (see <a href="#Subst-Iterators">Subst Iterators</a>).  The use of
<code>define_subst</code> is triggered by a reference to a subst attribute in
the transforming RTL template.  This reference initiates duplication of
the source RTL template and substitution of the attributes with their
values.  The source RTL template is left unchanged, while the copy is
transformed by <code>define_subst</code>.  This transformation can fail in the
case when the source RTL template is not matched against the
input-template of the <code>define_subst</code>.  In such case the copy is
deleted.
</p>
<p><code>define_subst</code> can be used only in <code>define_insn</code> and
<code>define_expand</code>, it cannot be used in other expressions (e.g. in
<code>define_insn_and_split</code>).
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Define-Subst-Example" accesskey="1">Define Subst Example</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Example of <code>define_subst</code> work.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Define-Subst-Pattern-Matching" accesskey="2">Define Subst Pattern Matching</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Process of template comparison.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Define-Subst-Output-Template" accesskey="3">Define Subst Output Template</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Generation of output template.
</td></tr>
</table>

<hr>
<a name="Define-Subst-Example"></a>
<div class="header">
<p>
Next: <a href="#Define-Subst-Pattern-Matching" accesskey="n" rel="next">Define Subst Pattern Matching</a>, Up: <a href="#Define-Subst" accesskey="u" rel="up">Define Subst</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="define_005fsubst-Example"></a>
<h4 class="subsection">16.21.1 <code>define_subst</code> Example</h4>
<a name="index-define_005fsubst-1"></a>

<p>To illustrate how <code>define_subst</code> works, let us examine a simple
template transformation.
</p>
<p>Suppose there are two kinds of instructions: one that touches flags and
the other that does not.  The instructions of the second type could be
generated with the following <code>define_subst</code>:
</p>
<div class="smallexample">
<pre class="smallexample">(define_subst &quot;add_clobber_subst&quot;
  [(set (match_operand:SI 0 &quot;&quot; &quot;&quot;)
        (match_operand:SI 1 &quot;&quot; &quot;&quot;))]
  &quot;&quot;
  [(set (match_dup 0)
        (match_dup 1))
   (clobber (reg:CC FLAGS_REG))]
</pre></div>

<p>This <code>define_subst</code> can be applied to any RTL pattern containing
<code>set</code> of mode SI and generates a copy with clobber when it is
applied.
</p>
<p>Assume there is an RTL template for a <code>max</code> instruction to be used
in <code>define_subst</code> mentioned above:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;maxsi&quot;
  [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;=r&quot;)
        (max:SI
          (match_operand:SI 1 &quot;register_operand&quot; &quot;r&quot;)
          (match_operand:SI 2 &quot;register_operand&quot; &quot;r&quot;)))]
  &quot;&quot;
  &quot;max\t{%2, %1, %0|%0, %1, %2}&quot;
 [&hellip;])
</pre></div>

<p>To mark the RTL template for <code>define_subst</code> application,
subst-attributes are used.  They should be declared in advance:
</p>
<div class="smallexample">
<pre class="smallexample">(define_subst_attr &quot;add_clobber_name&quot; &quot;add_clobber_subst&quot; &quot;_noclobber&quot; &quot;_clobber&quot;)
</pre></div>

<p>Here &lsquo;<samp>add_clobber_name</samp>&rsquo; is the attribute name,
&lsquo;<samp>add_clobber_subst</samp>&rsquo; is the name of the corresponding
<code>define_subst</code>, the third argument (&lsquo;<samp>_noclobber</samp>&rsquo;) is the
attribute value that would be substituted into the unchanged version of
the source RTL template, and the last argument (&lsquo;<samp>_clobber</samp>&rsquo;) is the
value that would be substituted into the second, transformed,
version of the RTL template.
</p>
<p>Once the subst-attribute has been defined, it should be used in RTL
templates which need to be processed by the <code>define_subst</code>.  So,
the original RTL template should be changed:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;maxsi&lt;add_clobber_name&gt;&quot;
  [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;=r&quot;)
        (max:SI
          (match_operand:SI 1 &quot;register_operand&quot; &quot;r&quot;)
          (match_operand:SI 2 &quot;register_operand&quot; &quot;r&quot;)))]
  &quot;&quot;
  &quot;max\t{%2, %1, %0|%0, %1, %2}&quot;
 [&hellip;])
</pre></div>

<p>The result of the <code>define_subst</code> usage would look like the following:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;maxsi_noclobber&quot;
  [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;=r&quot;)
        (max:SI
          (match_operand:SI 1 &quot;register_operand&quot; &quot;r&quot;)
          (match_operand:SI 2 &quot;register_operand&quot; &quot;r&quot;)))]
  &quot;&quot;
  &quot;max\t{%2, %1, %0|%0, %1, %2}&quot;
 [&hellip;])
(define_insn &quot;maxsi_clobber&quot;
  [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;=r&quot;)
        (max:SI
          (match_operand:SI 1 &quot;register_operand&quot; &quot;r&quot;)
          (match_operand:SI 2 &quot;register_operand&quot; &quot;r&quot;)))
   (clobber (reg:CC FLAGS_REG))]
  &quot;&quot;
  &quot;max\t{%2, %1, %0|%0, %1, %2}&quot;
 [&hellip;])
</pre></div>

<hr>
<a name="Define-Subst-Pattern-Matching"></a>
<div class="header">
<p>
Next: <a href="#Define-Subst-Output-Template" accesskey="n" rel="next">Define Subst Output Template</a>, Previous: <a href="#Define-Subst-Example" accesskey="p" rel="prev">Define Subst Example</a>, Up: <a href="#Define-Subst" accesskey="u" rel="up">Define Subst</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Pattern-Matching-in-define_005fsubst"></a>
<h4 class="subsection">16.21.2 Pattern Matching in <code>define_subst</code></h4>
<a name="index-define_005fsubst-2"></a>

<p>All expressions, allowed in <code>define_insn</code> or <code>define_expand</code>,
are allowed in the input-template of <code>define_subst</code>, except
<code>match_par_dup</code>, <code>match_scratch</code>, <code>match_parallel</code>. The
meanings of expressions in the input-template were changed:
</p>
<p><code>match_operand</code> matches any expression (possibly, a subtree in
RTL-template), if modes of the <code>match_operand</code> and this expression
are the same, or mode of the <code>match_operand</code> is <code>VOIDmode</code>, or
this expression is <code>match_dup</code>, <code>match_op_dup</code>.  If the
expression is <code>match_operand</code> too, and predicate of
<code>match_operand</code> from the input pattern is not empty, then the
predicates are compared.  That can be used for more accurate filtering
of accepted RTL-templates.
</p>
<p><code>match_operator</code> matches common operators (like <code>plus</code>,
<code>minus</code>), <code>unspec</code>, <code>unspec_volatile</code> operators and
<code>match_operator</code>s from the original pattern if the modes match and
<code>match_operator</code> from the input pattern has the same number of
operands as the operator from the original pattern.
</p>
<hr>
<a name="Define-Subst-Output-Template"></a>
<div class="header">
<p>
Previous: <a href="#Define-Subst-Pattern-Matching" accesskey="p" rel="prev">Define Subst Pattern Matching</a>, Up: <a href="#Define-Subst" accesskey="u" rel="up">Define Subst</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Generation-of-output-template-in-define_005fsubst"></a>
<h4 class="subsection">16.21.3 Generation of output template in <code>define_subst</code></h4>
<a name="index-define_005fsubst-3"></a>

<p>If all necessary checks for <code>define_subst</code> application pass, a new
RTL-pattern, based on the output-template, is created to replace the old
template.  Like in input-patterns, meanings of some RTL expressions are
changed when they are used in output-patterns of a <code>define_subst</code>.
Thus, <code>match_dup</code> is used for copying the whole expression from the
original pattern, which matched corresponding <code>match_operand</code> from
the input pattern.
</p>
<p><code>match_dup N</code> is used in the output template to be replaced with
the expression from the original pattern, which matched
<code>match_operand N</code> from the input pattern.  As a consequence,
<code>match_dup</code> cannot be used to point to <code>match_operand</code>s from
the output pattern, it should always refer to a <code>match_operand</code>
from the input pattern.
</p>
<p>In the output template one can refer to the expressions from the
original pattern and create new ones.  For instance, some operands could
be added by means of standard <code>match_operand</code>.
</p>
<p>After replacing <code>match_dup</code> with some RTL-subtree from the original
pattern, it could happen that several <code>match_operand</code>s in the
output pattern have the same indexes.  It is unknown, how many and what
indexes would be used in the expression which would replace
<code>match_dup</code>, so such conflicts in indexes are inevitable.  To
overcome this issue, <code>match_operands</code> and <code>match_operators</code>,
which were introduced into the output pattern, are renumerated when all
<code>match_dup</code>s are replaced.
</p>
<p>Number of alternatives in <code>match_operand</code>s introduced into the
output template <code>M</code> could differ from the number of alternatives in
the original pattern <code>N</code>, so in the resultant pattern there would
be <code>N*M</code> alternatives.  Thus, constraints from the original pattern
would be duplicated <code>N</code> times, constraints from the output pattern
would be duplicated <code>M</code> times, producing all possible combinations.
</p>
<hr>
<a name="Constant-Definitions"></a>
<div class="header">
<p>
Next: <a href="#Iterators" accesskey="n" rel="next">Iterators</a>, Previous: <a href="#Define-Subst" accesskey="p" rel="prev">Define Subst</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Constant-Definitions-1"></a>
<h3 class="section">16.22 Constant Definitions</h3>
<a name="index-constant-definitions"></a>
<a name="index-define_005fconstants"></a>

<p>Using literal constants inside instruction patterns reduces legibility and
can be a maintenance problem.
</p>
<p>To overcome this problem, you may use the <code>define_constants</code>
expression.  It contains a vector of name-value pairs.  From that
point on, wherever any of the names appears in the MD file, it is as
if the corresponding value had been written instead.  You may use
<code>define_constants</code> multiple times; each appearance adds more
constants to the table.  It is an error to redefine a constant with
a different value.
</p>
<p>To come back to the a29k load multiple example, instead of
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(match_parallel 0 &quot;load_multiple_operation&quot;
     [(set (match_operand:SI 1 &quot;gpc_reg_operand&quot; &quot;=r&quot;)
           (match_operand:SI 2 &quot;memory_operand&quot; &quot;m&quot;))
      (use (reg:SI 179))
      (clobber (reg:SI 179))])]
  &quot;&quot;
  &quot;loadm 0,0,%1,%2&quot;)
</pre></div>

<p>You could write:
</p>
<div class="smallexample">
<pre class="smallexample">(define_constants [
    (R_BP 177)
    (R_FC 178)
    (R_CR 179)
    (R_Q  180)
])

(define_insn &quot;&quot;
  [(match_parallel 0 &quot;load_multiple_operation&quot;
     [(set (match_operand:SI 1 &quot;gpc_reg_operand&quot; &quot;=r&quot;)
           (match_operand:SI 2 &quot;memory_operand&quot; &quot;m&quot;))
      (use (reg:SI R_CR))
      (clobber (reg:SI R_CR))])]
  &quot;&quot;
  &quot;loadm 0,0,%1,%2&quot;)
</pre></div>

<p>The constants that are defined with a define_constant are also output
in the insn-codes.h header file as #defines.
</p>
<a name="index-enumerations"></a>
<a name="index-define_005fc_005fenum"></a>
<p>You can also use the machine description file to define enumerations.
Like the constants defined by <code>define_constant</code>, these enumerations
are visible to both the machine description file and the main C code.
</p>
<p>The syntax is as follows:
</p>
<div class="smallexample">
<pre class="smallexample">(define_c_enum &quot;<var>name</var>&quot; [
  <var>value0</var>
  <var>value1</var>
  &hellip;
  <var>valuen</var>
])
</pre></div>

<p>This definition causes the equivalent of the following C code to appear
in <samp>insn-constants.h</samp>:
</p>
<div class="smallexample">
<pre class="smallexample">enum <var>name</var> {
  <var>value0</var> = 0,
  <var>value1</var> = 1,
  &hellip;
  <var>valuen</var> = <var>n</var>
};
#define NUM_<var>cname</var>_VALUES (<var>n</var> + 1)
</pre></div>

<p>where <var>cname</var> is the capitalized form of <var>name</var>.
It also makes each <var>valuei</var> available in the machine description
file, just as if it had been declared with:
</p>
<div class="smallexample">
<pre class="smallexample">(define_constants [(<var>valuei</var> <var>i</var>)])
</pre></div>

<p>Each <var>valuei</var> is usually an upper-case identifier and usually
begins with <var>cname</var>.
</p>
<p>You can split the enumeration definition into as many statements as
you like.  The above example is directly equivalent to:
</p>
<div class="smallexample">
<pre class="smallexample">(define_c_enum &quot;<var>name</var>&quot; [<var>value0</var>])
(define_c_enum &quot;<var>name</var>&quot; [<var>value1</var>])
&hellip;
(define_c_enum &quot;<var>name</var>&quot; [<var>valuen</var>])
</pre></div>

<p>Splitting the enumeration helps to improve the modularity of each
individual <code>.md</code> file.  For example, if a port defines its
synchronization instructions in a separate <samp>sync.md</samp> file,
it is convenient to define all synchronization-specific enumeration
values in <samp>sync.md</samp> rather than in the main <samp>.md</samp> file.
</p>
<p>Some enumeration names have special significance to GCC:
</p>
<dl compact="compact">
<dt><code>unspecv</code></dt>
<dd><a name="index-unspec_005fvolatile-1"></a>
<p>If an enumeration called <code>unspecv</code> is defined, GCC will use it
when printing out <code>unspec_volatile</code> expressions.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">(define_c_enum &quot;unspecv&quot; [
  UNSPECV_BLOCKAGE
])
</pre></div>

<p>causes GCC to print &lsquo;<samp>(unspec_volatile &hellip; 0)</samp>&rsquo; as:
</p>
<div class="smallexample">
<pre class="smallexample">(unspec_volatile ... UNSPECV_BLOCKAGE)
</pre></div>

</dd>
<dt><code>unspec</code></dt>
<dd><a name="index-unspec-1"></a>
<p>If an enumeration called <code>unspec</code> is defined, GCC will use
it when printing out <code>unspec</code> expressions.  GCC will also use
it when printing out <code>unspec_volatile</code> expressions unless an
<code>unspecv</code> enumeration is also defined.  You can therefore
decide whether to keep separate enumerations for volatile and
non-volatile expressions or whether to use the same enumeration
for both.
</p></dd>
</dl>

<a name="index-define_005fenum"></a>
<a name="define_005fenum"></a><p>Another way of defining an enumeration is to use <code>define_enum</code>:
</p>
<div class="smallexample">
<pre class="smallexample">(define_enum &quot;<var>name</var>&quot; [
  <var>value0</var>
  <var>value1</var>
  &hellip;
  <var>valuen</var>
])
</pre></div>

<p>This directive implies:
</p>
<div class="smallexample">
<pre class="smallexample">(define_c_enum &quot;<var>name</var>&quot; [
  <var>cname</var>_<var>cvalue0</var>
  <var>cname</var>_<var>cvalue1</var>
  &hellip;
  <var>cname</var>_<var>cvaluen</var>
])
</pre></div>

<a name="index-define_005fenum_005fattr-1"></a>
<p>where <var>cvaluei</var> is the capitalized form of <var>valuei</var>.
However, unlike <code>define_c_enum</code>, the enumerations defined
by <code>define_enum</code> can be used in attribute specifications
(see <a href="#define_005fenum_005fattr">define_enum_attr</a>).
</p><hr>
<a name="Iterators"></a>
<div class="header">
<p>
Previous: <a href="#Constant-Definitions" accesskey="p" rel="prev">Constant Definitions</a>, Up: <a href="#Machine-Desc" accesskey="u" rel="up">Machine Desc</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Iterators-1"></a>
<h3 class="section">16.23 Iterators</h3>
<a name="index-iterators-in-_002emd-files"></a>

<p>Ports often need to define similar patterns for more than one machine
mode or for more than one rtx code.  GCC provides some simple iterator
facilities to make this process easier.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Mode-Iterators" accesskey="1">Mode Iterators</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Generating variations of patterns for different modes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Code-Iterators" accesskey="2">Code Iterators</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Doing the same for codes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Int-Iterators" accesskey="3">Int Iterators</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Doing the same for integers.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Subst-Iterators" accesskey="4">Subst Iterators</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Generating variations of patterns for define_subst.
</td></tr>
</table>

<hr>
<a name="Mode-Iterators"></a>
<div class="header">
<p>
Next: <a href="#Code-Iterators" accesskey="n" rel="next">Code Iterators</a>, Up: <a href="#Iterators" accesskey="u" rel="up">Iterators</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Mode-Iterators-1"></a>
<h4 class="subsection">16.23.1 Mode Iterators</h4>
<a name="index-mode-iterators-in-_002emd-files"></a>

<p>Ports often need to define similar patterns for two or more different modes.
For example:
</p>
<ul>
<li> If a processor has hardware support for both single and double
floating-point arithmetic, the <code>SFmode</code> patterns tend to be
very similar to the <code>DFmode</code> ones.

</li><li> If a port uses <code>SImode</code> pointers in one configuration and
<code>DImode</code> pointers in another, it will usually have very similar
<code>SImode</code> and <code>DImode</code> patterns for manipulating pointers.
</li></ul>

<p>Mode iterators allow several patterns to be instantiated from one
<samp>.md</samp> file template.  They can be used with any type of
rtx-based construct, such as a <code>define_insn</code>,
<code>define_split</code>, or <code>define_peephole2</code>.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Defining-Mode-Iterators" accesskey="1">Defining Mode Iterators</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining a new mode iterator.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Substitutions" accesskey="2">Substitutions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Combining mode iterators with substitutions
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Examples" accesskey="3">Examples</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Examples
</td></tr>
</table>

<hr>
<a name="Defining-Mode-Iterators"></a>
<div class="header">
<p>
Next: <a href="#Substitutions" accesskey="n" rel="next">Substitutions</a>, Up: <a href="#Mode-Iterators" accesskey="u" rel="up">Mode Iterators</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-Mode-Iterators-1"></a>
<h4 class="subsubsection">16.23.1.1 Defining Mode Iterators</h4>
<a name="index-define_005fmode_005fiterator"></a>

<p>The syntax for defining a mode iterator is:
</p>
<div class="smallexample">
<pre class="smallexample">(define_mode_iterator <var>name</var> [(<var>mode1</var> &quot;<var>cond1</var>&quot;) &hellip; (<var>moden</var> &quot;<var>condn</var>&quot;)])
</pre></div>

<p>This allows subsequent <samp>.md</samp> file constructs to use the mode suffix
<code>:<var>name</var></code>.  Every construct that does so will be expanded
<var>n</var> times, once with every use of <code>:<var>name</var></code> replaced by
<code>:<var>mode1</var></code>, once with every use replaced by <code>:<var>mode2</var></code>,
and so on.  In the expansion for a particular <var>modei</var>, every
C condition will also require that <var>condi</var> be true.
</p>
<p>For example:
</p>
<div class="smallexample">
<pre class="smallexample">(define_mode_iterator P [(SI &quot;Pmode == SImode&quot;) (DI &quot;Pmode == DImode&quot;)])
</pre></div>

<p>defines a new mode suffix <code>:P</code>.  Every construct that uses
<code>:P</code> will be expanded twice, once with every <code>:P</code> replaced
by <code>:SI</code> and once with every <code>:P</code> replaced by <code>:DI</code>.
The <code>:SI</code> version will only apply if <code>Pmode == SImode</code> and
the <code>:DI</code> version will only apply if <code>Pmode == DImode</code>.
</p>
<p>As with other <samp>.md</samp> conditions, an empty string is treated
as &ldquo;always true&rdquo;.  <code>(<var>mode</var> &quot;&quot;)</code> can also be abbreviated
to <code><var>mode</var></code>.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">(define_mode_iterator GPR [SI (DI &quot;TARGET_64BIT&quot;)])
</pre></div>

<p>means that the <code>:DI</code> expansion only applies if <code>TARGET_64BIT</code>
but that the <code>:SI</code> expansion has no such constraint.
</p>
<p>Iterators are applied in the order they are defined.  This can be
significant if two iterators are used in a construct that requires
substitutions.  See <a href="#Substitutions">Substitutions</a>.
</p>
<hr>
<a name="Substitutions"></a>
<div class="header">
<p>
Next: <a href="#Examples" accesskey="n" rel="next">Examples</a>, Previous: <a href="#Defining-Mode-Iterators" accesskey="p" rel="prev">Defining Mode Iterators</a>, Up: <a href="#Mode-Iterators" accesskey="u" rel="up">Mode Iterators</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Substitution-in-Mode-Iterators"></a>
<h4 class="subsubsection">16.23.1.2 Substitution in Mode Iterators</h4>
<a name="index-define_005fmode_005fattr"></a>

<p>If an <samp>.md</samp> file construct uses mode iterators, each version of the
construct will often need slightly different strings or modes.  For
example:
</p>
<ul>
<li> When a <code>define_expand</code> defines several <code>add<var>m</var>3</code> patterns
(see <a href="#Standard-Names">Standard Names</a>), each expander will need to use the
appropriate mode name for <var>m</var>.

</li><li> When a <code>define_insn</code> defines several instruction patterns,
each instruction will often use a different assembler mnemonic.

</li><li> When a <code>define_insn</code> requires operands with different modes,
using an iterator for one of the operand modes usually requires a specific
mode for the other operand(s).
</li></ul>

<p>GCC supports such variations through a system of &ldquo;mode attributes&rdquo;.
There are two standard attributes: <code>mode</code>, which is the name of
the mode in lower case, and <code>MODE</code>, which is the same thing in
upper case.  You can define other attributes using:
</p>
<div class="smallexample">
<pre class="smallexample">(define_mode_attr <var>name</var> [(<var>mode1</var> &quot;<var>value1</var>&quot;) &hellip; (<var>moden</var> &quot;<var>valuen</var>&quot;)])
</pre></div>

<p>where <var>name</var> is the name of the attribute and <var>valuei</var>
is the value associated with <var>modei</var>.
</p>
<p>When GCC replaces some <var>:iterator</var> with <var>:mode</var>, it will scan
each string and mode in the pattern for sequences of the form
<code>&lt;<var>iterator</var>:<var>attr</var>&gt;</code>, where <var>attr</var> is the name of a
mode attribute.  If the attribute is defined for <var>mode</var>, the whole
<code>&lt;&hellip;&gt;</code> sequence will be replaced by the appropriate attribute
value.
</p>
<p>For example, suppose an <samp>.md</samp> file has:
</p>
<div class="smallexample">
<pre class="smallexample">(define_mode_iterator P [(SI &quot;Pmode == SImode&quot;) (DI &quot;Pmode == DImode&quot;)])
(define_mode_attr load [(SI &quot;lw&quot;) (DI &quot;ld&quot;)])
</pre></div>

<p>If one of the patterns that uses <code>:P</code> contains the string
<code>&quot;&lt;P:load&gt;\t%0,%1&quot;</code>, the <code>SI</code> version of that pattern
will use <code>&quot;lw\t%0,%1&quot;</code> and the <code>DI</code> version will use
<code>&quot;ld\t%0,%1&quot;</code>.
</p>
<p>Here is an example of using an attribute for a mode:
</p>
<div class="smallexample">
<pre class="smallexample">(define_mode_iterator LONG [SI DI])
(define_mode_attr SHORT [(SI &quot;HI&quot;) (DI &quot;SI&quot;)])
(define_insn &hellip;
  (sign_extend:LONG (match_operand:&lt;LONG:SHORT&gt; &hellip;)) &hellip;)
</pre></div>

<p>The <code><var>iterator</var>:</code> prefix may be omitted, in which case the
substitution will be attempted for every iterator expansion.
</p>
<hr>
<a name="Examples"></a>
<div class="header">
<p>
Previous: <a href="#Substitutions" accesskey="p" rel="prev">Substitutions</a>, Up: <a href="#Mode-Iterators" accesskey="u" rel="up">Mode Iterators</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Mode-Iterator-Examples"></a>
<h4 class="subsubsection">16.23.1.3 Mode Iterator Examples</h4>

<p>Here is an example from the MIPS port.  It defines the following
modes and attributes (among others):
</p>
<div class="smallexample">
<pre class="smallexample">(define_mode_iterator GPR [SI (DI &quot;TARGET_64BIT&quot;)])
(define_mode_attr d [(SI &quot;&quot;) (DI &quot;d&quot;)])
</pre></div>

<p>and uses the following template to define both <code>subsi3</code>
and <code>subdi3</code>:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;sub&lt;mode&gt;3&quot;
  [(set (match_operand:GPR 0 &quot;register_operand&quot; &quot;=d&quot;)
        (minus:GPR (match_operand:GPR 1 &quot;register_operand&quot; &quot;d&quot;)
                   (match_operand:GPR 2 &quot;register_operand&quot; &quot;d&quot;)))]
  &quot;&quot;
  &quot;&lt;d&gt;subu\t%0,%1,%2&quot;
  [(set_attr &quot;type&quot; &quot;arith&quot;)
   (set_attr &quot;mode&quot; &quot;&lt;MODE&gt;&quot;)])
</pre></div>

<p>This is exactly equivalent to:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;subsi3&quot;
  [(set (match_operand:SI 0 &quot;register_operand&quot; &quot;=d&quot;)
        (minus:SI (match_operand:SI 1 &quot;register_operand&quot; &quot;d&quot;)
                  (match_operand:SI 2 &quot;register_operand&quot; &quot;d&quot;)))]
  &quot;&quot;
  &quot;subu\t%0,%1,%2&quot;
  [(set_attr &quot;type&quot; &quot;arith&quot;)
   (set_attr &quot;mode&quot; &quot;SI&quot;)])

(define_insn &quot;subdi3&quot;
  [(set (match_operand:DI 0 &quot;register_operand&quot; &quot;=d&quot;)
        (minus:DI (match_operand:DI 1 &quot;register_operand&quot; &quot;d&quot;)
                  (match_operand:DI 2 &quot;register_operand&quot; &quot;d&quot;)))]
  &quot;&quot;
  &quot;dsubu\t%0,%1,%2&quot;
  [(set_attr &quot;type&quot; &quot;arith&quot;)
   (set_attr &quot;mode&quot; &quot;DI&quot;)])
</pre></div>

<hr>
<a name="Code-Iterators"></a>
<div class="header">
<p>
Next: <a href="#Int-Iterators" accesskey="n" rel="next">Int Iterators</a>, Previous: <a href="#Mode-Iterators" accesskey="p" rel="prev">Mode Iterators</a>, Up: <a href="#Iterators" accesskey="u" rel="up">Iterators</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Code-Iterators-1"></a>
<h4 class="subsection">16.23.2 Code Iterators</h4>
<a name="index-code-iterators-in-_002emd-files"></a>
<a name="index-define_005fcode_005fiterator"></a>
<a name="index-define_005fcode_005fattr"></a>

<p>Code iterators operate in a similar way to mode iterators.  See <a href="#Mode-Iterators">Mode Iterators</a>.
</p>
<p>The construct:
</p>
<div class="smallexample">
<pre class="smallexample">(define_code_iterator <var>name</var> [(<var>code1</var> &quot;<var>cond1</var>&quot;) &hellip; (<var>coden</var> &quot;<var>condn</var>&quot;)])
</pre></div>

<p>defines a pseudo rtx code <var>name</var> that can be instantiated as
<var>codei</var> if condition <var>condi</var> is true.  Each <var>codei</var>
must have the same rtx format.  See <a href="#RTL-Classes">RTL Classes</a>.
</p>
<p>As with mode iterators, each pattern that uses <var>name</var> will be
expanded <var>n</var> times, once with all uses of <var>name</var> replaced by
<var>code1</var>, once with all uses replaced by <var>code2</var>, and so on.
See <a href="#Defining-Mode-Iterators">Defining Mode Iterators</a>.
</p>
<p>It is possible to define attributes for codes as well as for modes.
There are two standard code attributes: <code>code</code>, the name of the
code in lower case, and <code>CODE</code>, the name of the code in upper case.
Other attributes are defined using:
</p>
<div class="smallexample">
<pre class="smallexample">(define_code_attr <var>name</var> [(<var>code1</var> &quot;<var>value1</var>&quot;) &hellip; (<var>coden</var> &quot;<var>valuen</var>&quot;)])
</pre></div>

<p>Here&rsquo;s an example of code iterators in action, taken from the MIPS port:
</p>
<div class="smallexample">
<pre class="smallexample">(define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt
                                eq ne gt ge lt le gtu geu ltu leu])

(define_expand &quot;b&lt;code&gt;&quot;
  [(set (pc)
        (if_then_else (any_cond:CC (cc0)
                                   (const_int 0))
                      (label_ref (match_operand 0 &quot;&quot;))
                      (pc)))]
  &quot;&quot;
{
  gen_conditional_branch (operands, &lt;CODE&gt;);
  DONE;
})
</pre></div>

<p>This is equivalent to:
</p>
<div class="smallexample">
<pre class="smallexample">(define_expand &quot;bunordered&quot;
  [(set (pc)
        (if_then_else (unordered:CC (cc0)
                                    (const_int 0))
                      (label_ref (match_operand 0 &quot;&quot;))
                      (pc)))]
  &quot;&quot;
{
  gen_conditional_branch (operands, UNORDERED);
  DONE;
})

(define_expand &quot;bordered&quot;
  [(set (pc)
        (if_then_else (ordered:CC (cc0)
                                  (const_int 0))
                      (label_ref (match_operand 0 &quot;&quot;))
                      (pc)))]
  &quot;&quot;
{
  gen_conditional_branch (operands, ORDERED);
  DONE;
})

&hellip;
</pre></div>

<hr>
<a name="Int-Iterators"></a>
<div class="header">
<p>
Next: <a href="#Subst-Iterators" accesskey="n" rel="next">Subst Iterators</a>, Previous: <a href="#Code-Iterators" accesskey="p" rel="prev">Code Iterators</a>, Up: <a href="#Iterators" accesskey="u" rel="up">Iterators</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Int-Iterators-1"></a>
<h4 class="subsection">16.23.3 Int Iterators</h4>
<a name="index-int-iterators-in-_002emd-files"></a>
<a name="index-define_005fint_005fiterator"></a>
<a name="index-define_005fint_005fattr"></a>

<p>Int iterators operate in a similar way to code iterators.  See <a href="#Code-Iterators">Code Iterators</a>.
</p>
<p>The construct:
</p>
<div class="smallexample">
<pre class="smallexample">(define_int_iterator <var>name</var> [(<var>int1</var> &quot;<var>cond1</var>&quot;) &hellip; (<var>intn</var> &quot;<var>condn</var>&quot;)])
</pre></div>

<p>defines a pseudo integer constant <var>name</var> that can be instantiated as
<var>inti</var> if condition <var>condi</var> is true.  Each <var>int</var>
must have the same rtx format.  See <a href="#RTL-Classes">RTL Classes</a>. Int iterators can appear
in only those rtx fields that have &rsquo;i&rsquo; as the specifier. This means that
each <var>int</var> has to be a constant defined using define_constant or
define_c_enum.
</p>
<p>As with mode and code iterators, each pattern that uses <var>name</var> will be
expanded <var>n</var> times, once with all uses of <var>name</var> replaced by
<var>int1</var>, once with all uses replaced by <var>int2</var>, and so on.
See <a href="#Defining-Mode-Iterators">Defining Mode Iterators</a>.
</p>
<p>It is possible to define attributes for ints as well as for codes and modes.
Attributes are defined using:
</p>
<div class="smallexample">
<pre class="smallexample">(define_int_attr <var>name</var> [(<var>int1</var> &quot;<var>value1</var>&quot;) &hellip; (<var>intn</var> &quot;<var>valuen</var>&quot;)])
</pre></div>

<p>Here&rsquo;s an example of int iterators in action, taken from the ARM port:
</p>
<div class="smallexample">
<pre class="smallexample">(define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG])

(define_int_attr absneg [(UNSPEC_VQABS &quot;abs&quot;) (UNSPEC_VQNEG &quot;neg&quot;)])

(define_insn &quot;neon_vq&lt;absneg&gt;&lt;mode&gt;&quot;
  [(set (match_operand:VDQIW 0 &quot;s_register_operand&quot; &quot;=w&quot;)
	(unspec:VDQIW [(match_operand:VDQIW 1 &quot;s_register_operand&quot; &quot;w&quot;)
		       (match_operand:SI 2 &quot;immediate_operand&quot; &quot;i&quot;)]
		      QABSNEG))]
  &quot;TARGET_NEON&quot;
  &quot;vq&lt;absneg&gt;.&lt;V_s_elem&gt;\t%&lt;V_reg&gt;0, %&lt;V_reg&gt;1&quot;
  [(set_attr &quot;neon_type&quot; &quot;neon_vqneg_vqabs&quot;)]
)

</pre></div>

<p>This is equivalent to:
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;neon_vqabs&lt;mode&gt;&quot;
  [(set (match_operand:VDQIW 0 &quot;s_register_operand&quot; &quot;=w&quot;)
	(unspec:VDQIW [(match_operand:VDQIW 1 &quot;s_register_operand&quot; &quot;w&quot;)
		       (match_operand:SI 2 &quot;immediate_operand&quot; &quot;i&quot;)]
		      UNSPEC_VQABS))]
  &quot;TARGET_NEON&quot;
  &quot;vqabs.&lt;V_s_elem&gt;\t%&lt;V_reg&gt;0, %&lt;V_reg&gt;1&quot;
  [(set_attr &quot;neon_type&quot; &quot;neon_vqneg_vqabs&quot;)]
)

(define_insn &quot;neon_vqneg&lt;mode&gt;&quot;
  [(set (match_operand:VDQIW 0 &quot;s_register_operand&quot; &quot;=w&quot;)
	(unspec:VDQIW [(match_operand:VDQIW 1 &quot;s_register_operand&quot; &quot;w&quot;)
		       (match_operand:SI 2 &quot;immediate_operand&quot; &quot;i&quot;)]
		      UNSPEC_VQNEG))]
  &quot;TARGET_NEON&quot;
  &quot;vqneg.&lt;V_s_elem&gt;\t%&lt;V_reg&gt;0, %&lt;V_reg&gt;1&quot;
  [(set_attr &quot;neon_type&quot; &quot;neon_vqneg_vqabs&quot;)]
)

</pre></div>

<hr>
<a name="Subst-Iterators"></a>
<div class="header">
<p>
Previous: <a href="#Int-Iterators" accesskey="p" rel="prev">Int Iterators</a>, Up: <a href="#Iterators" accesskey="u" rel="up">Iterators</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Subst-Iterators-1"></a>
<h4 class="subsection">16.23.4 Subst Iterators</h4>
<a name="index-subst-iterators-in-_002emd-files"></a>
<a name="index-define_005fsubst-5"></a>
<a name="index-define_005fsubst_005fattr"></a>

<p>Subst iterators are special type of iterators with the following
restrictions: they could not be declared explicitly, they always have
only two values, and they do not have explicit dedicated name.
Subst-iterators are triggered only when corresponding subst-attribute is
used in RTL-pattern.
</p>
<p>Subst iterators transform templates in the following way: the templates
are duplicated, the subst-attributes in these templates are replaced
with the corresponding values, and a new attribute is implicitly added
to the given <code>define_insn</code>/<code>define_expand</code>.  The name of the
added attribute matches the name of <code>define_subst</code>.  Such
attributes are declared implicitly, and it is not allowed to have a
<code>define_attr</code> named as a <code>define_subst</code>.
</p>
<p>Each subst iterator is linked to a <code>define_subst</code>.  It is declared
implicitly by the first appearance of the corresponding
<code>define_subst_attr</code>, and it is not allowed to define it explicitly.
</p>
<p>Declarations of subst-attributes have the following syntax:
</p>
<a name="index-define_005fsubst_005fattr-1"></a>
<div class="smallexample">
<pre class="smallexample">(define_subst_attr &quot;<var>name</var>&quot;
  &quot;<var>subst-name</var>&quot;
  &quot;<var>no-subst-value</var>&quot;
  &quot;<var>subst-applied-value</var>&quot;)
</pre></div>

<p><var>name</var> is a string with which the given subst-attribute could be
referred to.
</p>
<p><var>subst-name</var> shows which <code>define_subst</code> should be applied to an
RTL-template if the given subst-attribute is present in the
RTL-template.
</p>
<p><var>no-subst-value</var> is a value with which subst-attribute would be
replaced in the first copy of the original RTL-template.
</p>
<p><var>subst-applied-value</var> is a value with which subst-attribute would be
replaced in the second copy of the original RTL-template.
</p>

<hr>
<a name="Target-Macros"></a>
<div class="header">
<p>
Next: <a href="#Host-Config" accesskey="n" rel="next">Host Config</a>, Previous: <a href="#Machine-Desc" accesskey="p" rel="prev">Machine Desc</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Target-Description-Macros-and-Functions"></a>
<h2 class="chapter">17 Target Description Macros and Functions</h2>
<a name="index-machine-description-macros"></a>
<a name="index-target-description-macros"></a>
<a name="index-macros_002c-target-description"></a>
<a name="index-tm_002eh-macros"></a>

<p>In addition to the file <samp><var>machine</var>.md</samp>, a machine description
includes a C header file conventionally given the name
<samp><var>machine</var>.h</samp> and a C source file named <samp><var>machine</var>.c</samp>.
The header file defines numerous macros that convey the information
about the target machine that does not fit into the scheme of the
<samp>.md</samp> file.  The file <samp>tm.h</samp> should be a link to
<samp><var>machine</var>.h</samp>.  The header file <samp>config.h</samp> includes
<samp>tm.h</samp> and most compiler source files include <samp>config.h</samp>.  The
source file defines a variable <code>targetm</code>, which is a structure
containing pointers to functions and data relating to the target
machine.  <samp><var>machine</var>.c</samp> should also contain their definitions,
if they are not defined elsewhere in GCC, and other functions called
through the macros defined in the <samp>.h</samp> file.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Target-Structure" accesskey="1">Target Structure</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The <code>targetm</code> variable.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Driver" accesskey="2">Driver</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Controlling how the driver runs the compilation passes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Run_002dtime-Target" accesskey="3">Run-time Target</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining &lsquo;<samp>-m</samp>&rsquo; options like <samp>-m68000</samp> and <samp>-m68020</samp>.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Per_002dFunction-Data" accesskey="4">Per-Function Data</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining data structures for per-function information.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Storage-Layout" accesskey="5">Storage Layout</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining sizes and alignments of data.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Type-Layout" accesskey="6">Type Layout</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining sizes and properties of basic user data types.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Registers" accesskey="7">Registers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Naming and describing the hardware registers.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Register-Classes" accesskey="8">Register Classes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining the classes of hardware registers.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Old-Constraints" accesskey="9">Old Constraints</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The old way to define machine-specific constraints.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Stack-and-Calling">Stack and Calling</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining which way the stack grows and by how much.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Varargs">Varargs</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining the varargs macros.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Trampolines">Trampolines</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Code set up at run time to enter a nested function.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Library-Calls">Library Calls</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Controlling how library routines are implicitly called.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Addressing-Modes">Addressing Modes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining addressing modes valid for memory operands.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Anchored-Addresses">Anchored Addresses</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining how <samp>-fsection-anchors</samp> should work.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Condition-Code">Condition Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining how insns update the condition code.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Costs">Costs</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining relative costs of different operations.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Scheduling">Scheduling</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Adjusting the behavior of the instruction scheduler.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Sections">Sections</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Dividing storage into text, data, and other sections.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#PIC">PIC</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros for position independent code.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Assembler-Format">Assembler Format</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining how to write insns and pseudo-ops to output.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Debugging-Info">Debugging Info</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining the format of debugging output.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Floating-Point">Floating Point</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Handling floating point for cross-compilers.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Mode-Switching">Mode Switching</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Insertion of mode-switching instructions.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Target-Attributes">Target Attributes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Defining target-specific uses of <code>__attribute__</code>.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Emulated-TLS">Emulated TLS</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Emulated TLS support.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#MIPS-Coprocessors">MIPS Coprocessors</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">MIPS coprocessor support and how to customize it.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#PCH-Target">PCH Target</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Validity checking for precompiled headers.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#C_002b_002b-ABI">C++ ABI</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Controlling C++ ABI changes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Named-Address-Spaces">Named Address Spaces</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Adding support for named address spaces
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Misc">Misc</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Everything else.
</td></tr>
</table>

<hr>
<a name="Target-Structure"></a>
<div class="header">
<p>
Next: <a href="#Driver" accesskey="n" rel="next">Driver</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-Global-targetm-Variable"></a>
<h3 class="section">17.1 The Global <code>targetm</code> Variable</h3>
<a name="index-target-hooks"></a>
<a name="index-target-functions"></a>

<dl>
<dt><a name="index-targetm"></a>Variable: <em>struct gcc_target</em> <strong>targetm</strong></dt>
<dd><p>The target <samp>.c</samp> file must define the global <code>targetm</code> variable
which contains pointers to functions and data relating to the target
machine.  The variable is declared in <samp>target.h</samp>;
<samp>target-def.h</samp> defines the macro <code>TARGET_INITIALIZER</code> which is
used to initialize the variable, and macros for the default initializers
for elements of the structure.  The <samp>.c</samp> file should override those
macros for which the default definition is inappropriate.  For example:
</p><div class="smallexample">
<pre class="smallexample">#include &quot;target.h&quot;
#include &quot;target-def.h&quot;

/* <span class="roman">Initialize the GCC target structure.</span>  */

#undef TARGET_COMP_TYPE_ATTRIBUTES
#define TARGET_COMP_TYPE_ATTRIBUTES <var>machine</var>_comp_type_attributes

struct gcc_target targetm = TARGET_INITIALIZER;
</pre></div>
</dd></dl>

<p>Where a macro should be defined in the <samp>.c</samp> file in this manner to
form part of the <code>targetm</code> structure, it is documented below as a
&ldquo;Target Hook&rdquo; with a prototype.  Many macros will change in future
from being defined in the <samp>.h</samp> file to being part of the
<code>targetm</code> structure.
</p>
<p>Similarly, there is a <code>targetcm</code> variable for hooks that are
specific to front ends for C-family languages, documented as &ldquo;C
Target Hook&rdquo;.  This is declared in <samp>c-family/c-target.h</samp>, the
initializer <code>TARGETCM_INITIALIZER</code> in
<samp>c-family/c-target-def.h</samp>.  If targets initialize <code>targetcm</code>
themselves, they should set <code>target_has_targetcm=yes</code> in
<samp>config.gcc</samp>; otherwise a default definition is used.
</p>
<p>Similarly, there is a <code>targetm_common</code> variable for hooks that
are shared between the compiler driver and the compilers proper,
documented as &ldquo;Common Target Hook&rdquo;.  This is declared in
<samp>common/common-target.h</samp>, the initializer
<code>TARGETM_COMMON_INITIALIZER</code> in
<samp>common/common-target-def.h</samp>.  If targets initialize
<code>targetm_common</code> themselves, they should set
<code>target_has_targetm_common=yes</code> in <samp>config.gcc</samp>; otherwise a
default definition is used.
</p>
<hr>
<a name="Driver"></a>
<div class="header">
<p>
Next: <a href="#Run_002dtime-Target" accesskey="n" rel="next">Run-time Target</a>, Previous: <a href="#Target-Structure" accesskey="p" rel="prev">Target Structure</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Controlling-the-Compilation-Driver_002c-gcc"></a>
<h3 class="section">17.2 Controlling the Compilation Driver, <samp>gcc</samp></h3>
<a name="index-driver"></a>
<a name="index-controlling-the-compilation-driver"></a>

<p>You can control the compilation driver.
</p>
<dl>
<dt><a name="index-DRIVER_005fSELF_005fSPECS"></a>Macro: <strong>DRIVER_SELF_SPECS</strong></dt>
<dd><p>A list of specs for the driver itself.  It should be a suitable
initializer for an array of strings, with no surrounding braces.
</p>
<p>The driver applies these specs to its own command line between loading
default <samp>specs</samp> files (but not command-line specified ones) and
choosing the multilib directory or running any subcommands.  It
applies them in the order given, so each spec can depend on the
options added by earlier ones.  It is also possible to remove options
using &lsquo;<samp>%&lt;<var>option</var></samp>&rsquo; in the usual way.
</p>
<p>This macro can be useful when a port has several interdependent target
options.  It provides a way of standardizing the command line so
that the other specs are easier to write.
</p>
<p>Do not define this macro if it does not need to do anything.
</p></dd></dl>

<dl>
<dt><a name="index-OPTION_005fDEFAULT_005fSPECS"></a>Macro: <strong>OPTION_DEFAULT_SPECS</strong></dt>
<dd><p>A list of specs used to support configure-time default options (i.e.
<samp>--with</samp> options) in the driver.  It should be a suitable initializer
for an array of structures, each containing two strings, without the
outermost pair of surrounding braces.
</p>
<p>The first item in the pair is the name of the default.  This must match
the code in <samp>config.gcc</samp> for the target.  The second item is a spec
to apply if a default with this name was specified.  The string
&lsquo;<samp>%(VALUE)</samp>&rsquo; in the spec will be replaced by the value of the default
everywhere it occurs.
</p>
<p>The driver will apply these specs to its own command line between loading
default <samp>specs</samp> files and processing <code>DRIVER_SELF_SPECS</code>, using
the same mechanism as <code>DRIVER_SELF_SPECS</code>.
</p>
<p>Do not define this macro if it does not need to do anything.
</p></dd></dl>

<dl>
<dt><a name="index-CPP_005fSPEC"></a>Macro: <strong>CPP_SPEC</strong></dt>
<dd><p>A C string constant that tells the GCC driver program options to
pass to CPP.  It can also specify how to translate options you
give to GCC into options for GCC to pass to the CPP.
</p>
<p>Do not define this macro if it does not need to do anything.
</p></dd></dl>

<dl>
<dt><a name="index-CPLUSPLUS_005fCPP_005fSPEC"></a>Macro: <strong>CPLUSPLUS_CPP_SPEC</strong></dt>
<dd><p>This macro is just like <code>CPP_SPEC</code>, but is used for C++, rather
than C.  If you do not define this macro, then the value of
<code>CPP_SPEC</code> (if any) will be used instead.
</p></dd></dl>

<dl>
<dt><a name="index-CC1_005fSPEC"></a>Macro: <strong>CC1_SPEC</strong></dt>
<dd><p>A C string constant that tells the GCC driver program options to
pass to <code>cc1</code>, <code>cc1plus</code>, <code>f771</code>, and the other language
front ends.
It can also specify how to translate options you give to GCC into options
for GCC to pass to front ends.
</p>
<p>Do not define this macro if it does not need to do anything.
</p></dd></dl>

<dl>
<dt><a name="index-CC1PLUS_005fSPEC"></a>Macro: <strong>CC1PLUS_SPEC</strong></dt>
<dd><p>A C string constant that tells the GCC driver program options to
pass to <code>cc1plus</code>.  It can also specify how to translate options you
give to GCC into options for GCC to pass to the <code>cc1plus</code>.
</p>
<p>Do not define this macro if it does not need to do anything.
Note that everything defined in CC1_SPEC is already passed to
<code>cc1plus</code> so there is no need to duplicate the contents of
CC1_SPEC in CC1PLUS_SPEC.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fSPEC"></a>Macro: <strong>ASM_SPEC</strong></dt>
<dd><p>A C string constant that tells the GCC driver program options to
pass to the assembler.  It can also specify how to translate options
you give to GCC into options for GCC to pass to the assembler.
See the file <samp>sun3.h</samp> for an example of this.
</p>
<p>Do not define this macro if it does not need to do anything.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fFINAL_005fSPEC"></a>Macro: <strong>ASM_FINAL_SPEC</strong></dt>
<dd><p>A C string constant that tells the GCC driver program how to
run any programs which cleanup after the normal assembler.
Normally, this is not needed.  See the file <samp>mips.h</samp> for
an example of this.
</p>
<p>Do not define this macro if it does not need to do anything.
</p></dd></dl>

<dl>
<dt><a name="index-AS_005fNEEDS_005fDASH_005fFOR_005fPIPED_005fINPUT"></a>Macro: <strong>AS_NEEDS_DASH_FOR_PIPED_INPUT</strong></dt>
<dd><p>Define this macro, with no value, if the driver should give the assembler
an argument consisting of a single dash, <samp>-</samp>, to instruct it to
read from its standard input (which will be a pipe connected to the
output of the compiler proper).  This argument is given after any
<samp>-o</samp> option specifying the name of the output file.
</p>
<p>If you do not define this macro, the assembler is assumed to read its
standard input if given no non-option arguments.  If your assembler
cannot read standard input at all, use a &lsquo;<samp>%{pipe:%e}</samp>&rsquo; construct;
see <samp>mips.h</samp> for instance.
</p></dd></dl>

<dl>
<dt><a name="index-LINK_005fSPEC"></a>Macro: <strong>LINK_SPEC</strong></dt>
<dd><p>A C string constant that tells the GCC driver program options to
pass to the linker.  It can also specify how to translate options you
give to GCC into options for GCC to pass to the linker.
</p>
<p>Do not define this macro if it does not need to do anything.
</p></dd></dl>

<dl>
<dt><a name="index-LIB_005fSPEC"></a>Macro: <strong>LIB_SPEC</strong></dt>
<dd><p>Another C string constant used much like <code>LINK_SPEC</code>.  The difference
between the two is that <code>LIB_SPEC</code> is used at the end of the
command given to the linker.
</p>
<p>If this macro is not defined, a default is provided that
loads the standard C library from the usual place.  See <samp>gcc.c</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-LIBGCC_005fSPEC"></a>Macro: <strong>LIBGCC_SPEC</strong></dt>
<dd><p>Another C string constant that tells the GCC driver program
how and when to place a reference to <samp>libgcc.a</samp> into the
linker command line.  This constant is placed both before and after
the value of <code>LIB_SPEC</code>.
</p>
<p>If this macro is not defined, the GCC driver provides a default that
passes the string <samp>-lgcc</samp> to the linker.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fLIBGCC_005fSPEC"></a>Macro: <strong>REAL_LIBGCC_SPEC</strong></dt>
<dd><p>By default, if <code>ENABLE_SHARED_LIBGCC</code> is defined, the
<code>LIBGCC_SPEC</code> is not directly used by the driver program but is
instead modified to refer to different versions of <samp>libgcc.a</samp>
depending on the values of the command line flags <samp>-static</samp>,
<samp>-shared</samp>, <samp>-static-libgcc</samp>, and <samp>-shared-libgcc</samp>.  On
targets where these modifications are inappropriate, define
<code>REAL_LIBGCC_SPEC</code> instead.  <code>REAL_LIBGCC_SPEC</code> tells the
driver how to place a reference to <samp>libgcc</samp> on the link command
line, but, unlike <code>LIBGCC_SPEC</code>, it is used unmodified.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fLD_005fAS_005fNEEDED"></a>Macro: <strong>USE_LD_AS_NEEDED</strong></dt>
<dd><p>A macro that controls the modifications to <code>LIBGCC_SPEC</code>
mentioned in <code>REAL_LIBGCC_SPEC</code>.  If nonzero, a spec will be
generated that uses &ndash;as-needed and the shared libgcc in place of the
static exception handler library, when linking without any of
<code>-static</code>, <code>-static-libgcc</code>, or <code>-shared-libgcc</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LINK_005fEH_005fSPEC"></a>Macro: <strong>LINK_EH_SPEC</strong></dt>
<dd><p>If defined, this C string constant is added to <code>LINK_SPEC</code>.
When <code>USE_LD_AS_NEEDED</code> is zero or undefined, it also affects
the modifications to <code>LIBGCC_SPEC</code> mentioned in
<code>REAL_LIBGCC_SPEC</code>.
</p></dd></dl>

<dl>
<dt><a name="index-STARTFILE_005fSPEC"></a>Macro: <strong>STARTFILE_SPEC</strong></dt>
<dd><p>Another C string constant used much like <code>LINK_SPEC</code>.  The
difference between the two is that <code>STARTFILE_SPEC</code> is used at
the very beginning of the command given to the linker.
</p>
<p>If this macro is not defined, a default is provided that loads the
standard C startup file from the usual place.  See <samp>gcc.c</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-ENDFILE_005fSPEC"></a>Macro: <strong>ENDFILE_SPEC</strong></dt>
<dd><p>Another C string constant used much like <code>LINK_SPEC</code>.  The
difference between the two is that <code>ENDFILE_SPEC</code> is used at
the very end of the command given to the linker.
</p>
<p>Do not define this macro if it does not need to do anything.
</p></dd></dl>

<dl>
<dt><a name="index-THREAD_005fMODEL_005fSPEC"></a>Macro: <strong>THREAD_MODEL_SPEC</strong></dt>
<dd><p>GCC <code>-v</code> will print the thread model GCC was configured to use.
However, this doesn&rsquo;t work on platforms that are multilibbed on thread
models, such as AIX 4.3.  On such platforms, define
<code>THREAD_MODEL_SPEC</code> such that it evaluates to a string without
blanks that names one of the recognized thread models.  <code>%*</code>, the
default value of this macro, will expand to the value of
<code>thread_file</code> set in <samp>config.gcc</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-SYSROOT_005fSUFFIX_005fSPEC"></a>Macro: <strong>SYSROOT_SUFFIX_SPEC</strong></dt>
<dd><p>Define this macro to add a suffix to the target sysroot when GCC is
configured with a sysroot.  This will cause GCC to search for usr/lib,
et al, within sysroot+suffix.
</p></dd></dl>

<dl>
<dt><a name="index-SYSROOT_005fHEADERS_005fSUFFIX_005fSPEC"></a>Macro: <strong>SYSROOT_HEADERS_SUFFIX_SPEC</strong></dt>
<dd><p>Define this macro to add a headers_suffix to the target sysroot when
GCC is configured with a sysroot.  This will cause GCC to pass the
updated sysroot+headers_suffix to CPP, causing it to search for
usr/include, et al, within sysroot+headers_suffix.
</p></dd></dl>

<dl>
<dt><a name="index-EXTRA_005fSPECS"></a>Macro: <strong>EXTRA_SPECS</strong></dt>
<dd><p>Define this macro to provide additional specifications to put in the
<samp>specs</samp> file that can be used in various specifications like
<code>CC1_SPEC</code>.
</p>
<p>The definition should be an initializer for an array of structures,
containing a string constant, that defines the specification name, and a
string constant that provides the specification.
</p>
<p>Do not define this macro if it does not need to do anything.
</p>
<p><code>EXTRA_SPECS</code> is useful when an architecture contains several
related targets, which have various <code>&hellip;_SPECS</code> which are similar
to each other, and the maintainer would like one central place to keep
these definitions.
</p>
<p>For example, the PowerPC System V.4 targets use <code>EXTRA_SPECS</code> to
define either <code>_CALL_SYSV</code> when the System V calling sequence is
used or <code>_CALL_AIX</code> when the older AIX-based calling sequence is
used.
</p>
<p>The <samp>config/rs6000/rs6000.h</samp> target file defines:
</p>
<div class="smallexample">
<pre class="smallexample">#define EXTRA_SPECS \
  { &quot;cpp_sysv_default&quot;, CPP_SYSV_DEFAULT },

#define CPP_SYS_DEFAULT &quot;&quot;
</pre></div>

<p>The <samp>config/rs6000/sysv.h</samp> target file defines:
</p><div class="smallexample">
<pre class="smallexample">#undef CPP_SPEC
#define CPP_SPEC \
&quot;%{posix: -D_POSIX_SOURCE } \
%{mcall-sysv: -D_CALL_SYSV } \
%{!mcall-sysv: %(cpp_sysv_default) } \
%{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}&quot;

#undef CPP_SYSV_DEFAULT
#define CPP_SYSV_DEFAULT &quot;-D_CALL_SYSV&quot;
</pre></div>

<p>while the <samp>config/rs6000/eabiaix.h</samp> target file defines
<code>CPP_SYSV_DEFAULT</code> as:
</p>
<div class="smallexample">
<pre class="smallexample">#undef CPP_SYSV_DEFAULT
#define CPP_SYSV_DEFAULT &quot;-D_CALL_AIX&quot;
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-LINK_005fLIBGCC_005fSPECIAL_005f1"></a>Macro: <strong>LINK_LIBGCC_SPECIAL_1</strong></dt>
<dd><p>Define this macro if the driver program should find the library
<samp>libgcc.a</samp>.  If you do not define this macro, the driver program will pass
the argument <samp>-lgcc</samp> to tell the linker to do the search.
</p></dd></dl>

<dl>
<dt><a name="index-LINK_005fGCC_005fC_005fSEQUENCE_005fSPEC"></a>Macro: <strong>LINK_GCC_C_SEQUENCE_SPEC</strong></dt>
<dd><p>The sequence in which libgcc and libc are specified to the linker.
By default this is <code>%G %L %G</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LINK_005fCOMMAND_005fSPEC"></a>Macro: <strong>LINK_COMMAND_SPEC</strong></dt>
<dd><p>A C string constant giving the complete command line need to execute the
linker.  When you do this, you will need to update your port each time a
change is made to the link command line within <samp>gcc.c</samp>.  Therefore,
define this macro only if you need to completely redefine the command
line for invoking the linker and there is no other way to accomplish
the effect you need.  Overriding this macro may be avoidable by overriding
<code>LINK_GCC_C_SEQUENCE_SPEC</code> instead.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fALWAYS_005fSTRIP_005fDOTDOT"></a>Common Target Hook: <em>bool</em> <strong>TARGET_ALWAYS_STRIP_DOTDOT</strong></dt>
<dd><p>True if <samp>..</samp> components should always be removed from directory names computed relative to GCC&rsquo;s internal directories, false (default) if such components should be preserved and directory names containing them passed to other tools such as the linker.
</p></dd></dl>

<dl>
<dt><a name="index-MULTILIB_005fDEFAULTS"></a>Macro: <strong>MULTILIB_DEFAULTS</strong></dt>
<dd><p>Define this macro as a C expression for the initializer of an array of
string to tell the driver program which options are defaults for this
target and thus do not need to be handled specially when using
<code>MULTILIB_OPTIONS</code>.
</p>
<p>Do not define this macro if <code>MULTILIB_OPTIONS</code> is not defined in
the target makefile fragment or if none of the options listed in
<code>MULTILIB_OPTIONS</code> are set by default.
See <a href="#Target-Fragment">Target Fragment</a>.
</p></dd></dl>

<dl>
<dt><a name="index-RELATIVE_005fPREFIX_005fNOT_005fLINKDIR"></a>Macro: <strong>RELATIVE_PREFIX_NOT_LINKDIR</strong></dt>
<dd><p>Define this macro to tell <code>gcc</code> that it should only translate
a <samp>-B</samp> prefix into a <samp>-L</samp> linker option if the prefix
indicates an absolute file name.
</p></dd></dl>

<dl>
<dt><a name="index-MD_005fEXEC_005fPREFIX"></a>Macro: <strong>MD_EXEC_PREFIX</strong></dt>
<dd><p>If defined, this macro is an additional prefix to try after
<code>STANDARD_EXEC_PREFIX</code>.  <code>MD_EXEC_PREFIX</code> is not searched
when the compiler is built as a cross
compiler.  If you define <code>MD_EXEC_PREFIX</code>, then be sure to add it
to the list of directories used to find the assembler in <samp>configure.in</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-STANDARD_005fSTARTFILE_005fPREFIX"></a>Macro: <strong>STANDARD_STARTFILE_PREFIX</strong></dt>
<dd><p>Define this macro as a C string constant if you wish to override the
standard choice of <code>libdir</code> as the default prefix to
try when searching for startup files such as <samp>crt0.o</samp>.
<code>STANDARD_STARTFILE_PREFIX</code> is not searched when the compiler
is built as a cross compiler.
</p></dd></dl>

<dl>
<dt><a name="index-STANDARD_005fSTARTFILE_005fPREFIX_005f1"></a>Macro: <strong>STANDARD_STARTFILE_PREFIX_1</strong></dt>
<dd><p>Define this macro as a C string constant if you wish to override the
standard choice of <code>/lib</code> as a prefix to try after the default prefix
when searching for startup files such as <samp>crt0.o</samp>.
<code>STANDARD_STARTFILE_PREFIX_1</code> is not searched when the compiler
is built as a cross compiler.
</p></dd></dl>

<dl>
<dt><a name="index-STANDARD_005fSTARTFILE_005fPREFIX_005f2"></a>Macro: <strong>STANDARD_STARTFILE_PREFIX_2</strong></dt>
<dd><p>Define this macro as a C string constant if you wish to override the
standard choice of <code>/lib</code> as yet another prefix to try after the
default prefix when searching for startup files such as <samp>crt0.o</samp>.
<code>STANDARD_STARTFILE_PREFIX_2</code> is not searched when the compiler
is built as a cross compiler.
</p></dd></dl>

<dl>
<dt><a name="index-MD_005fSTARTFILE_005fPREFIX"></a>Macro: <strong>MD_STARTFILE_PREFIX</strong></dt>
<dd><p>If defined, this macro supplies an additional prefix to try after the
standard prefixes.  <code>MD_EXEC_PREFIX</code> is not searched when the
compiler is built as a cross compiler.
</p></dd></dl>

<dl>
<dt><a name="index-MD_005fSTARTFILE_005fPREFIX_005f1"></a>Macro: <strong>MD_STARTFILE_PREFIX_1</strong></dt>
<dd><p>If defined, this macro supplies yet another prefix to try after the
standard prefixes.  It is not searched when the compiler is built as a
cross compiler.
</p></dd></dl>

<dl>
<dt><a name="index-INIT_005fENVIRONMENT"></a>Macro: <strong>INIT_ENVIRONMENT</strong></dt>
<dd><p>Define this macro as a C string constant if you wish to set environment
variables for programs called by the driver, such as the assembler and
loader.  The driver passes the value of this macro to <code>putenv</code> to
initialize the necessary environment variables.
</p></dd></dl>

<dl>
<dt><a name="index-LOCAL_005fINCLUDE_005fDIR"></a>Macro: <strong>LOCAL_INCLUDE_DIR</strong></dt>
<dd><p>Define this macro as a C string constant if you wish to override the
standard choice of <samp>/usr/local/include</samp> as the default prefix to
try when searching for local header files.  <code>LOCAL_INCLUDE_DIR</code>
comes before <code>NATIVE_SYSTEM_HEADER_DIR</code> (set in
<samp>config.gcc</samp>, normally <samp>/usr/include</samp>) in the search order.
</p>
<p>Cross compilers do not search either <samp>/usr/local/include</samp> or its
replacement.
</p></dd></dl>

<dl>
<dt><a name="index-NATIVE_005fSYSTEM_005fHEADER_005fCOMPONENT"></a>Macro: <strong>NATIVE_SYSTEM_HEADER_COMPONENT</strong></dt>
<dd><p>The &ldquo;component&rdquo; corresponding to <code>NATIVE_SYSTEM_HEADER_DIR</code>.
See <code>INCLUDE_DEFAULTS</code>, below, for the description of components.
If you do not define this macro, no component is used.
</p></dd></dl>

<dl>
<dt><a name="index-INCLUDE_005fDEFAULTS"></a>Macro: <strong>INCLUDE_DEFAULTS</strong></dt>
<dd><p>Define this macro if you wish to override the entire default search path
for include files.  For a native compiler, the default search path
usually consists of <code>GCC_INCLUDE_DIR</code>, <code>LOCAL_INCLUDE_DIR</code>,
<code>GPLUSPLUS_INCLUDE_DIR</code>, and
<code>NATIVE_SYSTEM_HEADER_DIR</code>.  In addition, <code>GPLUSPLUS_INCLUDE_DIR</code>
and <code>GCC_INCLUDE_DIR</code> are defined automatically by <samp>Makefile</samp>,
and specify private search areas for GCC.  The directory
<code>GPLUSPLUS_INCLUDE_DIR</code> is used only for C++ programs.
</p>
<p>The definition should be an initializer for an array of structures.
Each array element should have four elements: the directory name (a
string constant), the component name (also a string constant), a flag
for C++-only directories,
and a flag showing that the includes in the directory don&rsquo;t need to be
wrapped in <code>extern &lsquo;<samp>C</samp>&rsquo;</code> when compiling C++.  Mark the end of
the array with a null element.
</p>
<p>The component name denotes what GNU package the include file is part of,
if any, in all uppercase letters.  For example, it might be &lsquo;<samp>GCC</samp>&rsquo;
or &lsquo;<samp>BINUTILS</samp>&rsquo;.  If the package is part of a vendor-supplied
operating system, code the component name as &lsquo;<samp>0</samp>&rsquo;.
</p>
<p>For example, here is the definition used for VAX/VMS:
</p>
<div class="smallexample">
<pre class="smallexample">#define INCLUDE_DEFAULTS \
{                                       \
  { &quot;GNU_GXX_INCLUDE:&quot;, &quot;G++&quot;, 1, 1},   \
  { &quot;GNU_CC_INCLUDE:&quot;, &quot;GCC&quot;, 0, 0},    \
  { &quot;SYS$SYSROOT:[SYSLIB.]&quot;, 0, 0, 0},  \
  { &quot;.&quot;, 0, 0, 0},                      \
  { 0, 0, 0, 0}                         \
}
</pre></div>
</dd></dl>

<p>Here is the order of prefixes tried for exec files:
</p>
<ol>
<li> Any prefixes specified by the user with <samp>-B</samp>.

</li><li> The environment variable <code>GCC_EXEC_PREFIX</code> or, if <code>GCC_EXEC_PREFIX</code>
is not set and the compiler has not been installed in the configure-time
<var>prefix</var>, the location in which the compiler has actually been installed.

</li><li> The directories specified by the environment variable <code>COMPILER_PATH</code>.

</li><li> The macro <code>STANDARD_EXEC_PREFIX</code>, if the compiler has been installed
in the configured-time <var>prefix</var>.

</li><li> The location <samp>/usr/libexec/gcc/</samp>, but only if this is a native compiler.

</li><li> The location <samp>/usr/lib/gcc/</samp>, but only if this is a native compiler.

</li><li> The macro <code>MD_EXEC_PREFIX</code>, if defined, but only if this is a native
compiler.
</li></ol>

<p>Here is the order of prefixes tried for startfiles:
</p>
<ol>
<li> Any prefixes specified by the user with <samp>-B</samp>.

</li><li> The environment variable <code>GCC_EXEC_PREFIX</code> or its automatically determined
value based on the installed toolchain location.

</li><li> The directories specified by the environment variable <code>LIBRARY_PATH</code>
(or port-specific name; native only, cross compilers do not use this).

</li><li> The macro <code>STANDARD_EXEC_PREFIX</code>, but only if the toolchain is installed
in the configured <var>prefix</var> or this is a native compiler.

</li><li> The location <samp>/usr/lib/gcc/</samp>, but only if this is a native compiler.

</li><li> The macro <code>MD_EXEC_PREFIX</code>, if defined, but only if this is a native
compiler.

</li><li> The macro <code>MD_STARTFILE_PREFIX</code>, if defined, but only if this is a
native compiler, or we have a target system root.

</li><li> The macro <code>MD_STARTFILE_PREFIX_1</code>, if defined, but only if this is a
native compiler, or we have a target system root.

</li><li> The macro <code>STANDARD_STARTFILE_PREFIX</code>, with any sysroot modifications.
If this path is relative it will be prefixed by <code>GCC_EXEC_PREFIX</code> and
the machine suffix or <code>STANDARD_EXEC_PREFIX</code> and the machine suffix.

</li><li> The macro <code>STANDARD_STARTFILE_PREFIX_1</code>, but only if this is a native
compiler, or we have a target system root. The default for this macro is
<samp>/lib/</samp>.

</li><li> The macro <code>STANDARD_STARTFILE_PREFIX_2</code>, but only if this is a native
compiler, or we have a target system root. The default for this macro is
<samp>/usr/lib/</samp>.
</li></ol>

<hr>
<a name="Run_002dtime-Target"></a>
<div class="header">
<p>
Next: <a href="#Per_002dFunction-Data" accesskey="n" rel="next">Per-Function Data</a>, Previous: <a href="#Driver" accesskey="p" rel="prev">Driver</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Run_002dtime-Target-Specification"></a>
<h3 class="section">17.3 Run-time Target Specification</h3>
<a name="index-run_002dtime-target-specification"></a>
<a name="index-predefined-macros"></a>
<a name="index-target-specifications"></a>

<p>Here are run-time target specifications.
</p>
<dl>
<dt><a name="index-TARGET_005fCPU_005fCPP_005fBUILTINS"></a>Macro: <strong>TARGET_CPU_CPP_BUILTINS</strong> <em>()</em></dt>
<dd><p>This function-like macro expands to a block of code that defines
built-in preprocessor macros and assertions for the target CPU, using
the functions <code>builtin_define</code>, <code>builtin_define_std</code> and
<code>builtin_assert</code>.  When the front end
calls this macro it provides a trailing semicolon, and since it has
finished command line option processing your code can use those
results freely.
</p>
<p><code>builtin_assert</code> takes a string in the form you pass to the
command-line option <samp>-A</samp>, such as <code>cpu=mips</code>, and creates
the assertion.  <code>builtin_define</code> takes a string in the form
accepted by option <samp>-D</samp> and unconditionally defines the macro.
</p>
<p><code>builtin_define_std</code> takes a string representing the name of an
object-like macro.  If it doesn&rsquo;t lie in the user&rsquo;s namespace,
<code>builtin_define_std</code> defines it unconditionally.  Otherwise, it
defines a version with two leading underscores, and another version
with two leading and trailing underscores, and defines the original
only if an ISO standard was not requested on the command line.  For
example, passing <code>unix</code> defines <code>__unix</code>, <code>__unix__</code>
and possibly <code>unix</code>; passing <code>_mips</code> defines <code>__mips</code>,
<code>__mips__</code> and possibly <code>_mips</code>, and passing <code>_ABI64</code>
defines only <code>_ABI64</code>.
</p>
<p>You can also test for the C dialect being compiled.  The variable
<code>c_language</code> is set to one of <code>clk_c</code>, <code>clk_cplusplus</code>
or <code>clk_objective_c</code>.  Note that if we are preprocessing
assembler, this variable will be <code>clk_c</code> but the function-like
macro <code>preprocessing_asm_p()</code> will return true, so you might want
to check for that first.  If you need to check for strict ANSI, the
variable <code>flag_iso</code> can be used.  The function-like macro
<code>preprocessing_trad_p()</code> can be used to check for traditional
preprocessing.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOS_005fCPP_005fBUILTINS"></a>Macro: <strong>TARGET_OS_CPP_BUILTINS</strong> <em>()</em></dt>
<dd><p>Similarly to <code>TARGET_CPU_CPP_BUILTINS</code> but this macro is optional
and is used for the target operating system instead.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOBJFMT_005fCPP_005fBUILTINS"></a>Macro: <strong>TARGET_OBJFMT_CPP_BUILTINS</strong> <em>()</em></dt>
<dd><p>Similarly to <code>TARGET_CPU_CPP_BUILTINS</code> but this macro is optional
and is used for the target object format.  <samp>elfos.h</samp> uses this
macro to define <code>__ELF__</code>, so you probably do not need to define
it yourself.
</p></dd></dl>

<dl>
<dt><a name="index-target_005fflags"></a>Variable: <em>extern int</em> <strong>target_flags</strong></dt>
<dd><p>This variable is declared in <samp>options.h</samp>, which is included before
any target-specific headers.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDEFAULT_005fTARGET_005fFLAGS"></a>Common Target Hook: <em>int</em> <strong>TARGET_DEFAULT_TARGET_FLAGS</strong></dt>
<dd><p>This variable specifies the initial value of <code>target_flags</code>.
Its default setting is 0.
</p></dd></dl>

<a name="index-optional-hardware-or-system-features"></a>
<a name="index-features_002c-optional_002c-in-system-conventions"></a>

<dl>
<dt><a name="index-TARGET_005fHANDLE_005fOPTION"></a>Common Target Hook: <em>bool</em> <strong>TARGET_HANDLE_OPTION</strong> <em>(struct gcc_options *<var>opts</var>, struct gcc_options *<var>opts_set</var>, const struct cl_decoded_option *<var>decoded</var>, location_t <var>loc</var>)</em></dt>
<dd><p>This hook is called whenever the user specifies one of the
target-specific options described by the <samp>.opt</samp> definition files
(see <a href="#Options">Options</a>).  It has the opportunity to do some option-specific
processing and should return true if the option is valid.  The default
definition does nothing but return true.
</p>
<p><var>decoded</var> specifies the option and its arguments.  <var>opts</var> and
<var>opts_set</var> are the <code>gcc_options</code> structures to be used for
storing option state, and <var>loc</var> is the location at which the
option was passed (<code>UNKNOWN_LOCATION</code> except for options passed
via attributes).
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fHANDLE_005fC_005fOPTION"></a>C Target Hook: <em>bool</em> <strong>TARGET_HANDLE_C_OPTION</strong> <em>(size_t <var>code</var>, const char *<var>arg</var>, int <var>value</var>)</em></dt>
<dd><p>This target hook is called whenever the user specifies one of the
target-specific C language family options described by the <samp>.opt</samp>
definition files(see <a href="#Options">Options</a>).  It has the opportunity to do some
option-specific processing and should return true if the option is
valid.  The arguments are like for <code>TARGET_HANDLE_OPTION</code>.  The
default definition does nothing but return false.
</p>
<p>In general, you should use <code>TARGET_HANDLE_OPTION</code> to handle
options.  However, if processing an option requires routines that are
only available in the C (and related language) front ends, then you
should use <code>TARGET_HANDLE_C_OPTION</code> instead.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOBJC_005fCONSTRUCT_005fSTRING_005fOBJECT"></a>C Target Hook: <em>tree</em> <strong>TARGET_OBJC_CONSTRUCT_STRING_OBJECT</strong> <em>(tree <var>string</var>)</em></dt>
<dd><p>Targets may provide a string object type that can be used within and between C, C++ and their respective Objective-C dialects. A string object might, for example, embed encoding and length information. These objects are considered opaque to the compiler and handled as references. An ideal implementation makes the composition of the string object match that of the Objective-C <code>NSString</code> (<code>NXString</code> for GNUStep), allowing efficient interworking between C-only and Objective-C code. If a target implements string objects then this hook should return a reference to such an object constructed from the normal &lsquo;C&rsquo; string representation provided in <var>string</var>. At present, the hook is used by Objective-C only, to obtain a common-format string object when the target provides one.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOBJC_005fDECLARE_005fUNRESOLVED_005fCLASS_005fREFERENCE"></a>C Target Hook: <em>void</em> <strong>TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE</strong> <em>(const char *<var>classname</var>)</em></dt>
<dd><p>Declare that Objective C class <var>classname</var> is referenced  by the current TU.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOBJC_005fDECLARE_005fCLASS_005fDEFINITION"></a>C Target Hook: <em>void</em> <strong>TARGET_OBJC_DECLARE_CLASS_DEFINITION</strong> <em>(const char *<var>classname</var>)</em></dt>
<dd><p>Declare that Objective C class <var>classname</var> is defined  by the current TU.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSTRING_005fOBJECT_005fREF_005fTYPE_005fP"></a>C Target Hook: <em>bool</em> <strong>TARGET_STRING_OBJECT_REF_TYPE_P</strong> <em>(const_tree <var>stringref</var>)</em></dt>
<dd><p>If a target implements string objects then this hook should return <code>true</code> if <var>stringref</var> is a valid reference to such an object.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCHECK_005fSTRING_005fOBJECT_005fFORMAT_005fARG"></a>C Target Hook: <em>void</em> <strong>TARGET_CHECK_STRING_OBJECT_FORMAT_ARG</strong> <em>(tree <var>format_arg</var>, tree <var>args_list</var>)</em></dt>
<dd><p>If a target implements string objects then this hook should should  provide a facility to check the function arguments in <var>args_list</var>  against the format specifiers in <var>format_arg</var> where the type of  <var>format_arg</var> is one recognized as a valid string reference type.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOVERRIDE_005fOPTIONS_005fAFTER_005fCHANGE"></a>Target Hook: <em>void</em> <strong>TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE</strong> <em>(void)</em></dt>
<dd><p>This target function is similar to the hook <code>TARGET_OPTION_OVERRIDE</code>
but is called when the optimize level is changed via an attribute or
pragma or when it is reset at the end of the code affected by the
attribute or pragma.  It is not called at the beginning of compilation
when <code>TARGET_OPTION_OVERRIDE</code> is called so if you want to perform these
actions then, you should have <code>TARGET_OPTION_OVERRIDE</code> call
<code>TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-C_005fCOMMON_005fOVERRIDE_005fOPTIONS"></a>Macro: <strong>C_COMMON_OVERRIDE_OPTIONS</strong></dt>
<dd><p>This is similar to the <code>TARGET_OPTION_OVERRIDE</code> hook
but is only used in the C
language frontends (C, Objective-C, C++, Objective-C++) and so can be
used to alter option flag variables which only exist in those
frontends.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fOPTIMIZATION_005fTABLE"></a>Common Target Hook: <em>const struct default_options *</em> <strong>TARGET_OPTION_OPTIMIZATION_TABLE</strong></dt>
<dd><p>Some machines may desire to change what optimizations are performed for
various optimization levels.   This variable, if defined, describes
options to enable at particular sets of optimization levels.  These
options are processed once
just after the optimization level is determined and before the remainder
of the command options have been parsed, so may be overridden by other
options passed explicitly.
</p>
<p>This processing is run once at program startup and when the optimization
options are changed via <code>#pragma GCC optimize</code> or by using the
<code>optimize</code> attribute.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fINIT_005fSTRUCT"></a>Common Target Hook: <em>void</em> <strong>TARGET_OPTION_INIT_STRUCT</strong> <em>(struct gcc_options *<var>opts</var>)</em></dt>
<dd><p>Set target-dependent initial values of fields in <var>opts</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fDEFAULT_005fPARAMS"></a>Common Target Hook: <em>void</em> <strong>TARGET_OPTION_DEFAULT_PARAMS</strong> <em>(void)</em></dt>
<dd><p>Set target-dependent default values for <samp>--param</samp> settings, using calls to <code>set_default_param_value</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SWITCHABLE_005fTARGET"></a>Macro: <strong>SWITCHABLE_TARGET</strong></dt>
<dd><p>Some targets need to switch between substantially different subtargets
during compilation.  For example, the MIPS target has one subtarget for
the traditional MIPS architecture and another for MIPS16.  Source code
can switch between these two subarchitectures using the <code>mips16</code>
and <code>nomips16</code> attributes.
</p>
<p>Such subtargets can differ in things like the set of available
registers, the set of available instructions, the costs of various
operations, and so on.  GCC caches a lot of this type of information
in global variables, and recomputing them for each subtarget takes a
significant amount of time.  The compiler therefore provides a facility
for maintaining several versions of the global variables and quickly
switching between them; see <samp>target-globals.h</samp> for details.
</p>
<p>Define this macro to 1 if your target needs this facility.  The default
is 0.
</p></dd></dl>

<hr>
<a name="Per_002dFunction-Data"></a>
<div class="header">
<p>
Next: <a href="#Storage-Layout" accesskey="n" rel="next">Storage Layout</a>, Previous: <a href="#Run_002dtime-Target" accesskey="p" rel="prev">Run-time Target</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-data-structures-for-per_002dfunction-information_002e"></a>
<h3 class="section">17.4 Defining data structures for per-function information.</h3>
<a name="index-per_002dfunction-data"></a>
<a name="index-data-structures"></a>

<p>If the target needs to store information on a per-function basis, GCC
provides a macro and a couple of variables to allow this.  Note, just
using statics to store the information is a bad idea, since GCC supports
nested functions, so you can be halfway through encoding one function
when another one comes along.
</p>
<p>GCC defines a data structure called <code>struct function</code> which
contains all of the data specific to an individual function.  This
structure contains a field called <code>machine</code> whose type is
<code>struct machine_function *</code>, which can be used by targets to point
to their own specific data.
</p>
<p>If a target needs per-function specific data it should define the type
<code>struct machine_function</code> and also the macro <code>INIT_EXPANDERS</code>.
This macro should be used to initialize the function pointer
<code>init_machine_status</code>.  This pointer is explained below.
</p>
<p>One typical use of per-function, target specific data is to create an
RTX to hold the register containing the function&rsquo;s return address.  This
RTX can then be used to implement the <code>__builtin_return_address</code>
function, for level 0.
</p>
<p>Note&mdash;earlier implementations of GCC used a single data area to hold
all of the per-function information.  Thus when processing of a nested
function began the old per-function data had to be pushed onto a
stack, and when the processing was finished, it had to be popped off the
stack.  GCC used to provide function pointers called
<code>save_machine_status</code> and <code>restore_machine_status</code> to handle
the saving and restoring of the target specific information.  Since the
single data area approach is no longer used, these pointers are no
longer supported.
</p>
<dl>
<dt><a name="index-INIT_005fEXPANDERS"></a>Macro: <strong>INIT_EXPANDERS</strong></dt>
<dd><p>Macro called to initialize any target specific information.  This macro
is called once per function, before generation of any RTL has begun.
The intention of this macro is to allow the initialization of the
function pointer <code>init_machine_status</code>.
</p></dd></dl>

<dl>
<dt><a name="index-init_005fmachine_005fstatus"></a>Variable: <em>void (*)(struct function *)</em> <strong>init_machine_status</strong></dt>
<dd><p>If this function pointer is non-<code>NULL</code> it will be called once per
function, before function compilation starts, in order to allow the
target to perform any target specific initialization of the
<code>struct function</code> structure.  It is intended that this would be
used to initialize the <code>machine</code> of that structure.
</p>
<p><code>struct machine_function</code> structures are expected to be freed by GC.
Generally, any memory that they reference must be allocated by using
GC allocation, including the structure itself.
</p></dd></dl>

<hr>
<a name="Storage-Layout"></a>
<div class="header">
<p>
Next: <a href="#Type-Layout" accesskey="n" rel="next">Type Layout</a>, Previous: <a href="#Per_002dFunction-Data" accesskey="p" rel="prev">Per-Function Data</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Storage-Layout-1"></a>
<h3 class="section">17.5 Storage Layout</h3>
<a name="index-storage-layout"></a>

<p>Note that the definitions of the macros in this table which are sizes or
alignments measured in bits do not need to be constant.  They can be C
expressions that refer to static variables, such as the <code>target_flags</code>.
See <a href="#Run_002dtime-Target">Run-time Target</a>.
</p>
<dl>
<dt><a name="index-BITS_005fBIG_005fENDIAN"></a>Macro: <strong>BITS_BIG_ENDIAN</strong></dt>
<dd><p>Define this macro to have the value 1 if the most significant bit in a
byte has the lowest number; otherwise define it to have the value zero.
This means that bit-field instructions count from the most significant
bit.  If the machine has no bit-field instructions, then this must still
be defined, but it doesn&rsquo;t matter which value it is defined to.  This
macro need not be a constant.
</p>
<p>This macro does not affect the way structure fields are packed into
bytes or words; that is controlled by <code>BYTES_BIG_ENDIAN</code>.
</p></dd></dl>

<dl>
<dt><a name="index-BYTES_005fBIG_005fENDIAN"></a>Macro: <strong>BYTES_BIG_ENDIAN</strong></dt>
<dd><p>Define this macro to have the value 1 if the most significant byte in a
word has the lowest number.  This macro need not be a constant.
</p></dd></dl>

<dl>
<dt><a name="index-WORDS_005fBIG_005fENDIAN"></a>Macro: <strong>WORDS_BIG_ENDIAN</strong></dt>
<dd><p>Define this macro to have the value 1 if, in a multiword object, the
most significant word has the lowest number.  This applies to both
memory locations and registers; see <code>REG_WORDS_BIG_ENDIAN</code> if the
order of words in memory is not the same as the order in registers.  This
macro need not be a constant.
</p></dd></dl>

<dl>
<dt><a name="index-REG_005fWORDS_005fBIG_005fENDIAN"></a>Macro: <strong>REG_WORDS_BIG_ENDIAN</strong></dt>
<dd><p>On some machines, the order of words in a multiword object differs between
registers in memory.  In such a situation, define this macro to describe
the order of words in a register.  The macro <code>WORDS_BIG_ENDIAN</code> controls
the order of words in memory.
</p></dd></dl>

<dl>
<dt><a name="index-FLOAT_005fWORDS_005fBIG_005fENDIAN"></a>Macro: <strong>FLOAT_WORDS_BIG_ENDIAN</strong></dt>
<dd><p>Define this macro to have the value 1 if <code>DFmode</code>, <code>XFmode</code> or
<code>TFmode</code> floating point numbers are stored in memory with the word
containing the sign bit at the lowest address; otherwise define it to
have the value 0.  This macro need not be a constant.
</p>
<p>You need not define this macro if the ordering is the same as for
multi-word integers.
</p></dd></dl>

<dl>
<dt><a name="index-BITS_005fPER_005fUNIT"></a>Macro: <strong>BITS_PER_UNIT</strong></dt>
<dd><p>Define this macro to be the number of bits in an addressable storage
unit (byte).  If you do not define this macro the default is 8.
</p></dd></dl>

<dl>
<dt><a name="index-BITS_005fPER_005fWORD"></a>Macro: <strong>BITS_PER_WORD</strong></dt>
<dd><p>Number of bits in a word.  If you do not define this macro, the default
is <code>BITS_PER_UNIT * UNITS_PER_WORD</code>.
</p></dd></dl>

<dl>
<dt><a name="index-MAX_005fBITS_005fPER_005fWORD"></a>Macro: <strong>MAX_BITS_PER_WORD</strong></dt>
<dd><p>Maximum number of bits in a word.  If this is undefined, the default is
<code>BITS_PER_WORD</code>.  Otherwise, it is the constant value that is the
largest value that <code>BITS_PER_WORD</code> can have at run-time.
</p></dd></dl>

<dl>
<dt><a name="index-UNITS_005fPER_005fWORD"></a>Macro: <strong>UNITS_PER_WORD</strong></dt>
<dd><p>Number of storage units in a word; normally the size of a general-purpose
register, a power of two from 1 or 8.
</p></dd></dl>

<dl>
<dt><a name="index-MIN_005fUNITS_005fPER_005fWORD"></a>Macro: <strong>MIN_UNITS_PER_WORD</strong></dt>
<dd><p>Minimum number of units in a word.  If this is undefined, the default is
<code>UNITS_PER_WORD</code>.  Otherwise, it is the constant value that is the
smallest value that <code>UNITS_PER_WORD</code> can have at run-time.
</p></dd></dl>

<dl>
<dt><a name="index-POINTER_005fSIZE"></a>Macro: <strong>POINTER_SIZE</strong></dt>
<dd><p>Width of a pointer, in bits.  You must specify a value no wider than the
width of <code>Pmode</code>.  If it is not equal to the width of <code>Pmode</code>,
you must define <code>POINTERS_EXTEND_UNSIGNED</code>.  If you do not specify
a value the default is <code>BITS_PER_WORD</code>.
</p></dd></dl>

<dl>
<dt><a name="index-POINTERS_005fEXTEND_005fUNSIGNED"></a>Macro: <strong>POINTERS_EXTEND_UNSIGNED</strong></dt>
<dd><p>A C expression that determines how pointers should be extended from
<code>ptr_mode</code> to either <code>Pmode</code> or <code>word_mode</code>.  It is
greater than zero if pointers should be zero-extended, zero if they
should be sign-extended, and negative if some other sort of conversion
is needed.  In the last case, the extension is done by the target&rsquo;s
<code>ptr_extend</code> instruction.
</p>
<p>You need not define this macro if the <code>ptr_mode</code>, <code>Pmode</code>
and <code>word_mode</code> are all the same width.
</p></dd></dl>

<dl>
<dt><a name="index-PROMOTE_005fMODE"></a>Macro: <strong>PROMOTE_MODE</strong> <em>(<var>m</var>, <var>unsignedp</var>, <var>type</var>)</em></dt>
<dd><p>A macro to update <var>m</var> and <var>unsignedp</var> when an object whose type
is <var>type</var> and which has the specified mode and signedness is to be
stored in a register.  This macro is only called when <var>type</var> is a
scalar type.
</p>
<p>On most RISC machines, which only have operations that operate on a full
register, define this macro to set <var>m</var> to <code>word_mode</code> if
<var>m</var> is an integer mode narrower than <code>BITS_PER_WORD</code>.  In most
cases, only integer modes should be widened because wider-precision
floating-point operations are usually more expensive than their narrower
counterparts.
</p>
<p>For most machines, the macro definition does not change <var>unsignedp</var>.
However, some machines, have instructions that preferentially handle
either signed or unsigned quantities of certain modes.  For example, on
the DEC Alpha, 32-bit loads from memory and 32-bit add instructions
sign-extend the result to 64 bits.  On such machines, set
<var>unsignedp</var> according to which kind of extension is more efficient.
</p>
<p>Do not define this macro if it would never modify <var>m</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPROMOTE_005fFUNCTION_005fMODE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_PROMOTE_FUNCTION_MODE</strong> <em>(const_tree <var>type</var>, enum machine_mode <var>mode</var>, int *<var>punsignedp</var>, const_tree <var>funtype</var>, int <var>for_return</var>)</em></dt>
<dd><p>Like <code>PROMOTE_MODE</code>, but it is applied to outgoing function arguments or
function return values.  The target hook should return the new mode
and possibly change <code>*<var>punsignedp</var></code> if the promotion should
change signedness.  This function is called only for scalar <em>or
pointer</em> types.
</p>
<p><var>for_return</var> allows to distinguish the promotion of arguments and
return values.  If it is <code>1</code>, a return value is being promoted and
<code>TARGET_FUNCTION_VALUE</code> must perform the same promotions done here.
If it is <code>2</code>, the returned mode should be that of the register in
which an incoming parameter is copied, or the outgoing result is computed;
then the hook should return the same mode as <code>promote_mode</code>, though
the signedness may be different.
</p>
<p><var>type</var> can be NULL when promoting function arguments of libcalls.
</p>
<p>The default is to not promote arguments and return values.  You can
also define the hook to <code>default_promote_function_mode_always_promote</code>
if you would like to apply the same rules given by <code>PROMOTE_MODE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-PARM_005fBOUNDARY"></a>Macro: <strong>PARM_BOUNDARY</strong></dt>
<dd><p>Normal alignment required for function parameters on the stack, in
bits.  All stack parameters receive at least this much alignment
regardless of data type.  On most machines, this is the same as the
size of an integer.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fBOUNDARY"></a>Macro: <strong>STACK_BOUNDARY</strong></dt>
<dd><p>Define this macro to the minimum alignment enforced by hardware for the
stack pointer on this machine.  The definition is a C expression for the
desired alignment (measured in bits).  This value is used as a default
if <code>PREFERRED_STACK_BOUNDARY</code> is not defined.  On most machines,
this should be the same as <code>PARM_BOUNDARY</code>.
</p></dd></dl>

<dl>
<dt><a name="index-PREFERRED_005fSTACK_005fBOUNDARY"></a>Macro: <strong>PREFERRED_STACK_BOUNDARY</strong></dt>
<dd><p>Define this macro if you wish to preserve a certain alignment for the
stack pointer, greater than what the hardware enforces.  The definition
is a C expression for the desired alignment (measured in bits).  This
macro must evaluate to a value equal to or larger than
<code>STACK_BOUNDARY</code>.
</p></dd></dl>

<dl>
<dt><a name="index-INCOMING_005fSTACK_005fBOUNDARY"></a>Macro: <strong>INCOMING_STACK_BOUNDARY</strong></dt>
<dd><p>Define this macro if the incoming stack boundary may be different
from <code>PREFERRED_STACK_BOUNDARY</code>.  This macro must evaluate
to a value equal to or larger than <code>STACK_BOUNDARY</code>.
</p></dd></dl>

<dl>
<dt><a name="index-FUNCTION_005fBOUNDARY"></a>Macro: <strong>FUNCTION_BOUNDARY</strong></dt>
<dd><p>Alignment required for a function entry point, in bits.
</p></dd></dl>

<dl>
<dt><a name="index-BIGGEST_005fALIGNMENT"></a>Macro: <strong>BIGGEST_ALIGNMENT</strong></dt>
<dd><p>Biggest alignment that any data type can require on this machine, in
bits.  Note that this is not the biggest alignment that is supported,
just the biggest alignment that, when violated, may cause a fault.
</p></dd></dl>

<dl>
<dt><a name="index-MALLOC_005fABI_005fALIGNMENT"></a>Macro: <strong>MALLOC_ABI_ALIGNMENT</strong></dt>
<dd><p>Alignment, in bits, a C conformant malloc implementation has to
provide.  If not defined, the default value is <code>BITS_PER_WORD</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ATTRIBUTE_005fALIGNED_005fVALUE"></a>Macro: <strong>ATTRIBUTE_ALIGNED_VALUE</strong></dt>
<dd><p>Alignment used by the <code>__attribute__ ((aligned))</code> construct.  If
not defined, the default value is <code>BIGGEST_ALIGNMENT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-MINIMUM_005fATOMIC_005fALIGNMENT"></a>Macro: <strong>MINIMUM_ATOMIC_ALIGNMENT</strong></dt>
<dd><p>If defined, the smallest alignment, in bits, that can be given to an
object that can be referenced in one operation, without disturbing any
nearby object.  Normally, this is <code>BITS_PER_UNIT</code>, but may be larger
on machines that don&rsquo;t have byte or half-word store operations.
</p></dd></dl>

<dl>
<dt><a name="index-BIGGEST_005fFIELD_005fALIGNMENT"></a>Macro: <strong>BIGGEST_FIELD_ALIGNMENT</strong></dt>
<dd><p>Biggest alignment that any structure or union field can require on this
machine, in bits.  If defined, this overrides <code>BIGGEST_ALIGNMENT</code> for
structure and union fields only, unless the field alignment has been set
by the <code>__attribute__ ((aligned (<var>n</var>)))</code> construct.
</p></dd></dl>

<dl>
<dt><a name="index-ADJUST_005fFIELD_005fALIGN"></a>Macro: <strong>ADJUST_FIELD_ALIGN</strong> <em>(<var>field</var>, <var>computed</var>)</em></dt>
<dd><p>An expression for the alignment of a structure field <var>field</var> if the
alignment computed in the usual way (including applying of
<code>BIGGEST_ALIGNMENT</code> and <code>BIGGEST_FIELD_ALIGNMENT</code> to the
alignment) is <var>computed</var>.  It overrides alignment only if the
field alignment has not been set by the
<code>__attribute__ ((aligned (<var>n</var>)))</code> construct.
</p></dd></dl>

<dl>
<dt><a name="index-MAX_005fSTACK_005fALIGNMENT"></a>Macro: <strong>MAX_STACK_ALIGNMENT</strong></dt>
<dd><p>Biggest stack alignment guaranteed by the backend.  Use this macro
to specify the maximum alignment of a variable on stack.
</p>
<p>If not defined, the default value is <code>STACK_BOUNDARY</code>.
</p>
</dd></dl>

<dl>
<dt><a name="index-MAX_005fOFILE_005fALIGNMENT"></a>Macro: <strong>MAX_OFILE_ALIGNMENT</strong></dt>
<dd><p>Biggest alignment supported by the object file format of this machine.
Use this macro to limit the alignment which can be specified using the
<code>__attribute__ ((aligned (<var>n</var>)))</code> construct.  If not defined,
the default value is <code>BIGGEST_ALIGNMENT</code>.
</p>
<p>On systems that use ELF, the default (in <samp>config/elfos.h</samp>) is
the largest supported 32-bit ELF section alignment representable on
a 32-bit host e.g. &lsquo;<samp>(((unsigned HOST_WIDEST_INT) 1 &lt;&lt; 28) * 8)</samp>&rsquo;.
On 32-bit ELF the largest supported section alignment in bits is
&lsquo;<samp>(0x80000000 * 8)</samp>&rsquo;, but this is not representable on 32-bit hosts.
</p></dd></dl>

<dl>
<dt><a name="index-DATA_005fALIGNMENT"></a>Macro: <strong>DATA_ALIGNMENT</strong> <em>(<var>type</var>, <var>basic-align</var>)</em></dt>
<dd><p>If defined, a C expression to compute the alignment for a variable in
the static store.  <var>type</var> is the data type, and <var>basic-align</var> is
the alignment that the object would ordinarily have.  The value of this
macro is used instead of that alignment to align the object.
</p>
<p>If this macro is not defined, then <var>basic-align</var> is used.
</p>
<a name="index-strcpy"></a>
<p>One use of this macro is to increase alignment of medium-size data to
make it all fit in fewer cache lines.  Another is to cause character
arrays to be word-aligned so that <code>strcpy</code> calls that copy
constants to character arrays can be done inline.
</p></dd></dl>

<dl>
<dt><a name="index-CONSTANT_005fALIGNMENT"></a>Macro: <strong>CONSTANT_ALIGNMENT</strong> <em>(<var>constant</var>, <var>basic-align</var>)</em></dt>
<dd><p>If defined, a C expression to compute the alignment given to a constant
that is being placed in memory.  <var>constant</var> is the constant and
<var>basic-align</var> is the alignment that the object would ordinarily
have.  The value of this macro is used instead of that alignment to
align the object.
</p>
<p>If this macro is not defined, then <var>basic-align</var> is used.
</p>
<p>The typical use of this macro is to increase alignment for string
constants to be word aligned so that <code>strcpy</code> calls that copy
constants can be done inline.
</p></dd></dl>

<dl>
<dt><a name="index-LOCAL_005fALIGNMENT"></a>Macro: <strong>LOCAL_ALIGNMENT</strong> <em>(<var>type</var>, <var>basic-align</var>)</em></dt>
<dd><p>If defined, a C expression to compute the alignment for a variable in
the local store.  <var>type</var> is the data type, and <var>basic-align</var> is
the alignment that the object would ordinarily have.  The value of this
macro is used instead of that alignment to align the object.
</p>
<p>If this macro is not defined, then <var>basic-align</var> is used.
</p>
<p>One use of this macro is to increase alignment of medium-size data to
make it all fit in fewer cache lines.
</p>
<p>If the value of this macro has a type, it should be an unsigned type.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTOR_005fALIGNMENT"></a>Target Hook: <em>HOST_WIDE_INT</em> <strong>TARGET_VECTOR_ALIGNMENT</strong> <em>(const_tree <var>type</var>)</em></dt>
<dd><p>This hook can be used to define the alignment for a vector of type
<var>type</var>, in order to comply with a platform ABI.  The default is to
require natural alignment for vector types.  The alignment returned by
this hook must be a power-of-two multiple of the default alignment of
the vector element type.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fSLOT_005fALIGNMENT"></a>Macro: <strong>STACK_SLOT_ALIGNMENT</strong> <em>(<var>type</var>, <var>mode</var>, <var>basic-align</var>)</em></dt>
<dd><p>If defined, a C expression to compute the alignment for stack slot.
<var>type</var> is the data type, <var>mode</var> is the widest mode available,
and <var>basic-align</var> is the alignment that the slot would ordinarily
have.  The value of this macro is used instead of that alignment to
align the slot.
</p>
<p>If this macro is not defined, then <var>basic-align</var> is used when
<var>type</var> is <code>NULL</code>.  Otherwise, <code>LOCAL_ALIGNMENT</code> will
be used.
</p>
<p>This macro is to set alignment of stack slot to the maximum alignment
of all possible modes which the slot may have.
</p>
<p>If the value of this macro has a type, it should be an unsigned type.
</p></dd></dl>

<dl>
<dt><a name="index-LOCAL_005fDECL_005fALIGNMENT"></a>Macro: <strong>LOCAL_DECL_ALIGNMENT</strong> <em>(<var>decl</var>)</em></dt>
<dd><p>If defined, a C expression to compute the alignment for a local
variable <var>decl</var>.
</p>
<p>If this macro is not defined, then
<code>LOCAL_ALIGNMENT (TREE_TYPE (<var>decl</var>), DECL_ALIGN (<var>decl</var>))</code>
is used.
</p>
<p>One use of this macro is to increase alignment of medium-size data to
make it all fit in fewer cache lines.
</p>
<p>If the value of this macro has a type, it should be an unsigned type.
</p></dd></dl>

<dl>
<dt><a name="index-MINIMUM_005fALIGNMENT"></a>Macro: <strong>MINIMUM_ALIGNMENT</strong> <em>(<var>exp</var>, <var>mode</var>, <var>align</var>)</em></dt>
<dd><p>If defined, a C expression to compute the minimum required alignment
for dynamic stack realignment purposes for <var>exp</var> (a type or decl),
<var>mode</var>, assuming normal alignment <var>align</var>.
</p>
<p>If this macro is not defined, then <var>align</var> will be used.
</p></dd></dl>

<dl>
<dt><a name="index-EMPTY_005fFIELD_005fBOUNDARY"></a>Macro: <strong>EMPTY_FIELD_BOUNDARY</strong></dt>
<dd><p>Alignment in bits to be given to a structure bit-field that follows an
empty field such as <code>int : 0;</code>.
</p>
<p>If <code>PCC_BITFIELD_TYPE_MATTERS</code> is true, it overrides this macro.
</p></dd></dl>

<dl>
<dt><a name="index-STRUCTURE_005fSIZE_005fBOUNDARY"></a>Macro: <strong>STRUCTURE_SIZE_BOUNDARY</strong></dt>
<dd><p>Number of bits which any structure or union&rsquo;s size must be a multiple of.
Each structure or union&rsquo;s size is rounded up to a multiple of this.
</p>
<p>If you do not define this macro, the default is the same as
<code>BITS_PER_UNIT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-STRICT_005fALIGNMENT"></a>Macro: <strong>STRICT_ALIGNMENT</strong></dt>
<dd><p>Define this macro to be the value 1 if instructions will fail to work
if given data not on the nominal alignment.  If instructions will merely
go slower in that case, define this macro as 0.
</p></dd></dl>

<dl>
<dt><a name="index-PCC_005fBITFIELD_005fTYPE_005fMATTERS"></a>Macro: <strong>PCC_BITFIELD_TYPE_MATTERS</strong></dt>
<dd><p>Define this if you wish to imitate the way many other C compilers handle
alignment of bit-fields and the structures that contain them.
</p>
<p>The behavior is that the type written for a named bit-field (<code>int</code>,
<code>short</code>, or other integer type) imposes an alignment for the entire
structure, as if the structure really did contain an ordinary field of
that type.  In addition, the bit-field is placed within the structure so
that it would fit within such a field, not crossing a boundary for it.
</p>
<p>Thus, on most machines, a named bit-field whose type is written as
<code>int</code> would not cross a four-byte boundary, and would force
four-byte alignment for the whole structure.  (The alignment used may
not be four bytes; it is controlled by the other alignment parameters.)
</p>
<p>An unnamed bit-field will not affect the alignment of the containing
structure.
</p>
<p>If the macro is defined, its definition should be a C expression;
a nonzero value for the expression enables this behavior.
</p>
<p>Note that if this macro is not defined, or its value is zero, some
bit-fields may cross more than one alignment boundary.  The compiler can
support such references if there are &lsquo;<samp>insv</samp>&rsquo;, &lsquo;<samp>extv</samp>&rsquo;, and
&lsquo;<samp>extzv</samp>&rsquo; insns that can directly reference memory.
</p>
<p>The other known way of making bit-fields work is to define
<code>STRUCTURE_SIZE_BOUNDARY</code> as large as <code>BIGGEST_ALIGNMENT</code>.
Then every structure can be accessed with fullwords.
</p>
<p>Unless the machine has bit-field instructions or you define
<code>STRUCTURE_SIZE_BOUNDARY</code> that way, you must define
<code>PCC_BITFIELD_TYPE_MATTERS</code> to have a nonzero value.
</p>
<p>If your aim is to make GCC use the same conventions for laying out
bit-fields as are used by another compiler, here is how to investigate
what the other compiler does.  Compile and run this program:
</p>
<div class="smallexample">
<pre class="smallexample">struct foo1
{
  char x;
  char :0;
  char y;
};

struct foo2
{
  char x;
  int :0;
  char y;
};

main ()
{
  printf (&quot;Size of foo1 is %d\n&quot;,
          sizeof (struct foo1));
  printf (&quot;Size of foo2 is %d\n&quot;,
          sizeof (struct foo2));
  exit (0);
}
</pre></div>

<p>If this prints 2 and 5, then the compiler&rsquo;s behavior is what you would
get from <code>PCC_BITFIELD_TYPE_MATTERS</code>.
</p></dd></dl>

<dl>
<dt><a name="index-BITFIELD_005fNBYTES_005fLIMITED"></a>Macro: <strong>BITFIELD_NBYTES_LIMITED</strong></dt>
<dd><p>Like <code>PCC_BITFIELD_TYPE_MATTERS</code> except that its effect is limited
to aligning a bit-field within the structure.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fALIGN_005fANON_005fBITFIELD"></a>Target Hook: <em>bool</em> <strong>TARGET_ALIGN_ANON_BITFIELD</strong> <em>(void)</em></dt>
<dd><p>When <code>PCC_BITFIELD_TYPE_MATTERS</code> is true this hook will determine
whether unnamed bitfields affect the alignment of the containing
structure.  The hook should return true if the structure should inherit
the alignment requirements of an unnamed bitfield&rsquo;s type.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fNARROW_005fVOLATILE_005fBITFIELD"></a>Target Hook: <em>bool</em> <strong>TARGET_NARROW_VOLATILE_BITFIELD</strong> <em>(void)</em></dt>
<dd><p>This target hook should return <code>true</code> if accesses to volatile bitfields
should use the narrowest mode possible.  It should return <code>false</code> if
these accesses should use the bitfield container type.
</p>
<p>The default is <code>!TARGET_STRICT_ALIGN</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMEMBER_005fTYPE_005fFORCES_005fBLK"></a>Target Hook: <em>bool</em> <strong>TARGET_MEMBER_TYPE_FORCES_BLK</strong> <em>(const_tree <var>field</var>, enum machine_mode <var>mode</var>)</em></dt>
<dd><p>Return true if a structure, union or array containing <var>field</var> should
be accessed using <code>BLKMODE</code>.
</p>
<p>If <var>field</var> is the only field in the structure, <var>mode</var> is its
mode, otherwise <var>mode</var> is VOIDmode.  <var>mode</var> is provided in the
case where structures of one field would require the structure&rsquo;s mode to
retain the field&rsquo;s mode.
</p>
<p>Normally, this is not needed.
</p></dd></dl>

<dl>
<dt><a name="index-ROUND_005fTYPE_005fALIGN"></a>Macro: <strong>ROUND_TYPE_ALIGN</strong> <em>(<var>type</var>, <var>computed</var>, <var>specified</var>)</em></dt>
<dd><p>Define this macro as an expression for the alignment of a type (given
by <var>type</var> as a tree node) if the alignment computed in the usual
way is <var>computed</var> and the alignment explicitly specified was
<var>specified</var>.
</p>
<p>The default is to use <var>specified</var> if it is larger; otherwise, use
the smaller of <var>computed</var> and <code>BIGGEST_ALIGNMENT</code>
</p></dd></dl>

<dl>
<dt><a name="index-MAX_005fFIXED_005fMODE_005fSIZE"></a>Macro: <strong>MAX_FIXED_MODE_SIZE</strong></dt>
<dd><p>An integer expression for the size in bits of the largest integer
machine mode that should actually be used.  All integer machine modes of
this size or smaller can be used for structures and unions with the
appropriate sizes.  If this macro is undefined, <code>GET_MODE_BITSIZE
(DImode)</code> is assumed.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fSAVEAREA_005fMODE"></a>Macro: <strong>STACK_SAVEAREA_MODE</strong> <em>(<var>save_level</var>)</em></dt>
<dd><p>If defined, an expression of type <code>enum machine_mode</code> that
specifies the mode of the save area operand of a
<code>save_stack_<var>level</var></code> named pattern (see <a href="#Standard-Names">Standard Names</a>).
<var>save_level</var> is one of <code>SAVE_BLOCK</code>, <code>SAVE_FUNCTION</code>, or
<code>SAVE_NONLOCAL</code> and selects which of the three named patterns is
having its mode specified.
</p>
<p>You need not define this macro if it always returns <code>Pmode</code>.  You
would most commonly define this macro if the
<code>save_stack_<var>level</var></code> patterns need to support both a 32- and a
64-bit mode.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fSIZE_005fMODE"></a>Macro: <strong>STACK_SIZE_MODE</strong></dt>
<dd><p>If defined, an expression of type <code>enum machine_mode</code> that
specifies the mode of the size increment operand of an
<code>allocate_stack</code> named pattern (see <a href="#Standard-Names">Standard Names</a>).
</p>
<p>You need not define this macro if it always returns <code>word_mode</code>.
You would most commonly define this macro if the <code>allocate_stack</code>
pattern needs to support both a 32- and a 64-bit mode.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLIBGCC_005fCMP_005fRETURN_005fMODE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_LIBGCC_CMP_RETURN_MODE</strong> <em>(void)</em></dt>
<dd><p>This target hook should return the mode to be used for the return value
of compare instructions expanded to libgcc calls.  If not defined
<code>word_mode</code> is returned which is the right choice for a majority of
targets.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLIBGCC_005fSHIFT_005fCOUNT_005fMODE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_LIBGCC_SHIFT_COUNT_MODE</strong> <em>(void)</em></dt>
<dd><p>This target hook should return the mode to be used for the shift count operand
of shift instructions expanded to libgcc calls.  If not defined
<code>word_mode</code> is returned which is the right choice for a majority of
targets.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fUNWIND_005fWORD_005fMODE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_UNWIND_WORD_MODE</strong> <em>(void)</em></dt>
<dd><p>Return machine mode to be used for <code>_Unwind_Word</code> type.
The default is to use <code>word_mode</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ROUND_005fTOWARDS_005fZERO"></a>Macro: <strong>ROUND_TOWARDS_ZERO</strong></dt>
<dd><p>If defined, this macro should be true if the prevailing rounding
mode is towards zero.
</p>
<p>Defining this macro only affects the way <samp>libgcc.a</samp> emulates
floating-point arithmetic.
</p>
<p>Not defining this macro is equivalent to returning zero.
</p></dd></dl>

<dl>
<dt><a name="index-LARGEST_005fEXPONENT_005fIS_005fNORMAL"></a>Macro: <strong>LARGEST_EXPONENT_IS_NORMAL</strong> <em>(<var>size</var>)</em></dt>
<dd><p>This macro should return true if floats with <var>size</var>
bits do not have a NaN or infinity representation, but use the largest
exponent for normal numbers instead.
</p>
<p>Defining this macro only affects the way <samp>libgcc.a</samp> emulates
floating-point arithmetic.
</p>
<p>The default definition of this macro returns false for all sizes.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMS_005fBITFIELD_005fLAYOUT_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_MS_BITFIELD_LAYOUT_P</strong> <em>(const_tree <var>record_type</var>)</em></dt>
<dd><p>This target hook returns <code>true</code> if bit-fields in the given
<var>record_type</var> are to be laid out following the rules of Microsoft
Visual C/C++, namely: (i) a bit-field won&rsquo;t share the same storage
unit with the previous bit-field if their underlying types have
different sizes, and the bit-field will be aligned to the highest
alignment of the underlying types of itself and of the previous
bit-field; (ii) a zero-sized bit-field will affect the alignment of
the whole enclosing structure, even if it is unnamed; except that
(iii) a zero-sized bit-field will be disregarded unless it follows
another bit-field of nonzero size.  If this hook returns <code>true</code>,
other macros that control bit-field layout are ignored.
</p>
<p>When a bit-field is inserted into a packed record, the whole size
of the underlying type is used by one or more same-size adjacent
bit-fields (that is, if its long:3, 32 bits is used in the record,
and any additional adjacent long bit-fields are packed into the same
chunk of 32 bits.  However, if the size changes, a new field of that
size is allocated).  In an unpacked record, this is the same as using
alignment, but not equivalent when packing.
</p>
<p>If both MS bit-fields and &lsquo;<samp>__attribute__((packed))</samp>&rsquo; are used,
the latter will take precedence.  If &lsquo;<samp>__attribute__((packed))</samp>&rsquo; is
used on a single field when MS bit-fields are in use, it will take
precedence for that field, but the alignment of the rest of the structure
may affect its placement.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDECIMAL_005fFLOAT_005fSUPPORTED_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_DECIMAL_FLOAT_SUPPORTED_P</strong> <em>(void)</em></dt>
<dd><p>Returns true if the target supports decimal floating point.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFIXED_005fPOINT_005fSUPPORTED_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_FIXED_POINT_SUPPORTED_P</strong> <em>(void)</em></dt>
<dd><p>Returns true if the target supports fixed-point arithmetic.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEXPAND_005fTO_005fRTL_005fHOOK"></a>Target Hook: <em>void</em> <strong>TARGET_EXPAND_TO_RTL_HOOK</strong> <em>(void)</em></dt>
<dd><p>This hook is called just before expansion into rtl, allowing the target
to perform additional initializations or analysis before the expansion.
For example, the rs6000 port uses it to allocate a scratch stack slot
for use in copying SDmode values between memory and floating point
registers whenever the function being expanded has any SDmode
usage.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINSTANTIATE_005fDECLS"></a>Target Hook: <em>void</em> <strong>TARGET_INSTANTIATE_DECLS</strong> <em>(void)</em></dt>
<dd><p>This hook allows the backend to perform additional instantiations on rtl
that are not actually in any insns yet, but will be later.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMANGLE_005fTYPE"></a>Target Hook: <em>const char *</em> <strong>TARGET_MANGLE_TYPE</strong> <em>(const_tree <var>type</var>)</em></dt>
<dd><p>If your target defines any fundamental types, or any types your target
uses should be mangled differently from the default, define this hook
to return the appropriate encoding for these types as part of a C++
mangled name.  The <var>type</var> argument is the tree structure representing
the type to be mangled.  The hook may be applied to trees which are
not target-specific fundamental types; it should return <code>NULL</code>
for all such types, as well as arguments it does not recognize.  If the
return value is not <code>NULL</code>, it must point to a statically-allocated
string constant.
</p>
<p>Target-specific fundamental types might be new fundamental types or
qualified versions of ordinary fundamental types.  Encode new
fundamental types as &lsquo;<samp>u&nbsp;<var>n</var>&nbsp;<var>name</var><!-- /@w --></samp>&rsquo;, where <var>name</var>
is the name used for the type in source code, and <var>n</var> is the
length of <var>name</var> in decimal.  Encode qualified versions of
ordinary types as &lsquo;<samp>U&nbsp;<var>n</var>&nbsp;<var>name</var>&nbsp;<var>code</var><!-- /@w --></samp>&rsquo;, where
<var>name</var> is the name used for the type qualifier in source code,
<var>n</var> is the length of <var>name</var> as above, and <var>code</var> is the
code used to represent the unqualified version of this type.  (See
<code>write_builtin_type</code> in <samp>cp/mangle.c</samp> for the list of
codes.)  In both cases the spaces are for clarity; do not include any
spaces in your string.
</p>
<p>This hook is applied to types prior to typedef resolution.  If the mangled
name for a particular type depends only on that type&rsquo;s main variant, you
can perform typedef resolution yourself using <code>TYPE_MAIN_VARIANT</code>
before mangling.
</p>
<p>The default version of this hook always returns <code>NULL</code>, which is
appropriate for a target that does not define any new fundamental
types.
</p></dd></dl>

<hr>
<a name="Type-Layout"></a>
<div class="header">
<p>
Next: <a href="#Registers" accesskey="n" rel="next">Registers</a>, Previous: <a href="#Storage-Layout" accesskey="p" rel="prev">Storage Layout</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Layout-of-Source-Language-Data-Types"></a>
<h3 class="section">17.6 Layout of Source Language Data Types</h3>

<p>These macros define the sizes and other characteristics of the standard
basic data types used in programs being compiled.  Unlike the macros in
the previous section, these apply to specific features of C and related
languages, rather than to fundamental aspects of storage layout.
</p>
<dl>
<dt><a name="index-INT_005fTYPE_005fSIZE"></a>Macro: <strong>INT_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>int</code> on the
target machine.  If you don&rsquo;t define this, the default is one word.
</p></dd></dl>

<dl>
<dt><a name="index-SHORT_005fTYPE_005fSIZE"></a>Macro: <strong>SHORT_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>short</code> on the
target machine.  If you don&rsquo;t define this, the default is half a word.
(If this would be less than one storage unit, it is rounded up to one
unit.)
</p></dd></dl>

<dl>
<dt><a name="index-LONG_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>long</code> on the
target machine.  If you don&rsquo;t define this, the default is one word.
</p></dd></dl>

<dl>
<dt><a name="index-ADA_005fLONG_005fTYPE_005fSIZE"></a>Macro: <strong>ADA_LONG_TYPE_SIZE</strong></dt>
<dd><p>On some machines, the size used for the Ada equivalent of the type
<code>long</code> by a native Ada compiler differs from that used by C.  In
that situation, define this macro to be a C expression to be used for
the size of that type.  If you don&rsquo;t define this, the default is the
value of <code>LONG_TYPE_SIZE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LONG_005fLONG_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_LONG_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>long long</code> on the
target machine.  If you don&rsquo;t define this, the default is two
words.  If you want to support GNU Ada on your machine, the value of this
macro must be at least 64.
</p></dd></dl>

<dl>
<dt><a name="index-CHAR_005fTYPE_005fSIZE"></a>Macro: <strong>CHAR_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>char</code> on the
target machine.  If you don&rsquo;t define this, the default is
<code>BITS_PER_UNIT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-BOOL_005fTYPE_005fSIZE"></a>Macro: <strong>BOOL_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the C++ type <code>bool</code> and
C99 type <code>_Bool</code> on the target machine.  If you don&rsquo;t define
this, and you probably shouldn&rsquo;t, the default is <code>CHAR_TYPE_SIZE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-FLOAT_005fTYPE_005fSIZE"></a>Macro: <strong>FLOAT_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>float</code> on the
target machine.  If you don&rsquo;t define this, the default is one word.
</p></dd></dl>

<dl>
<dt><a name="index-DOUBLE_005fTYPE_005fSIZE"></a>Macro: <strong>DOUBLE_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>double</code> on the
target machine.  If you don&rsquo;t define this, the default is two
words.
</p></dd></dl>

<dl>
<dt><a name="index-LONG_005fDOUBLE_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_DOUBLE_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>long double</code> on
the target machine.  If you don&rsquo;t define this, the default is two
words.
</p></dd></dl>

<dl>
<dt><a name="index-SHORT_005fFRACT_005fTYPE_005fSIZE"></a>Macro: <strong>SHORT_FRACT_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>short _Fract</code> on
the target machine.  If you don&rsquo;t define this, the default is
<code>BITS_PER_UNIT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-FRACT_005fTYPE_005fSIZE"></a>Macro: <strong>FRACT_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>_Fract</code> on
the target machine.  If you don&rsquo;t define this, the default is
<code>BITS_PER_UNIT * 2</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LONG_005fFRACT_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_FRACT_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>long _Fract</code> on
the target machine.  If you don&rsquo;t define this, the default is
<code>BITS_PER_UNIT * 4</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LONG_005fLONG_005fFRACT_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_LONG_FRACT_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>long long _Fract</code> on
the target machine.  If you don&rsquo;t define this, the default is
<code>BITS_PER_UNIT * 8</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SHORT_005fACCUM_005fTYPE_005fSIZE"></a>Macro: <strong>SHORT_ACCUM_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>short _Accum</code> on
the target machine.  If you don&rsquo;t define this, the default is
<code>BITS_PER_UNIT * 2</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ACCUM_005fTYPE_005fSIZE"></a>Macro: <strong>ACCUM_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>_Accum</code> on
the target machine.  If you don&rsquo;t define this, the default is
<code>BITS_PER_UNIT * 4</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LONG_005fACCUM_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_ACCUM_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>long _Accum</code> on
the target machine.  If you don&rsquo;t define this, the default is
<code>BITS_PER_UNIT * 8</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LONG_005fLONG_005fACCUM_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_LONG_ACCUM_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the type <code>long long _Accum</code> on
the target machine.  If you don&rsquo;t define this, the default is
<code>BITS_PER_UNIT * 16</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LIBGCC2_005fLONG_005fDOUBLE_005fTYPE_005fSIZE"></a>Macro: <strong>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</strong></dt>
<dd><p>Define this macro if <code>LONG_DOUBLE_TYPE_SIZE</code> is not constant or
if you want routines in <samp>libgcc2.a</samp> for a size other than
<code>LONG_DOUBLE_TYPE_SIZE</code>.  If you don&rsquo;t define this, the
default is <code>LONG_DOUBLE_TYPE_SIZE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LIBGCC2_005fHAS_005fDF_005fMODE"></a>Macro: <strong>LIBGCC2_HAS_DF_MODE</strong></dt>
<dd><p>Define this macro if neither <code>DOUBLE_TYPE_SIZE</code> nor
<code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is
<code>DFmode</code> but you want <code>DFmode</code> routines in <samp>libgcc2.a</samp>
anyway.  If you don&rsquo;t define this and either <code>DOUBLE_TYPE_SIZE</code>
or <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is 64 then the default is 1,
otherwise it is 0.
</p></dd></dl>

<dl>
<dt><a name="index-LIBGCC2_005fHAS_005fXF_005fMODE"></a>Macro: <strong>LIBGCC2_HAS_XF_MODE</strong></dt>
<dd><p>Define this macro if <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is not
<code>XFmode</code> but you want <code>XFmode</code> routines in <samp>libgcc2.a</samp>
anyway.  If you don&rsquo;t define this and <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code>
is 80 then the default is 1, otherwise it is 0.
</p></dd></dl>

<dl>
<dt><a name="index-LIBGCC2_005fHAS_005fTF_005fMODE"></a>Macro: <strong>LIBGCC2_HAS_TF_MODE</strong></dt>
<dd><p>Define this macro if <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is not
<code>TFmode</code> but you want <code>TFmode</code> routines in <samp>libgcc2.a</samp>
anyway.  If you don&rsquo;t define this and <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code>
is 128 then the default is 1, otherwise it is 0.
</p></dd></dl>

<dl>
<dt><a name="index-LIBGCC2_005fGNU_005fPREFIX"></a>Macro: <strong>LIBGCC2_GNU_PREFIX</strong></dt>
<dd><p>This macro corresponds to the <code>TARGET_LIBFUNC_GNU_PREFIX</code> target
hook and should be defined if that hook is overriden to be true.  It
causes function names in libgcc to be changed to use a <code>__gnu_</code>
prefix for their name rather than the default <code>__</code>.  A port which
uses this macro should also arrange to use <samp>t-gnu-prefix</samp> in
the libgcc <samp>config.host</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-SF_005fSIZE"></a>Macro: <strong>SF_SIZE</strong></dt>
<dt><a name="index-DF_005fSIZE"></a>Macro: <strong>DF_SIZE</strong></dt>
<dt><a name="index-XF_005fSIZE"></a>Macro: <strong>XF_SIZE</strong></dt>
<dt><a name="index-TF_005fSIZE"></a>Macro: <strong>TF_SIZE</strong></dt>
<dd><p>Define these macros to be the size in bits of the mantissa of
<code>SFmode</code>, <code>DFmode</code>, <code>XFmode</code> and <code>TFmode</code> values,
if the defaults in <samp>libgcc2.h</samp> are inappropriate.  By default,
<code>FLT_MANT_DIG</code> is used for <code>SF_SIZE</code>, <code>LDBL_MANT_DIG</code>
for <code>XF_SIZE</code> and <code>TF_SIZE</code>, and <code>DBL_MANT_DIG</code> or
<code>LDBL_MANT_DIG</code> for <code>DF_SIZE</code> according to whether
<code>DOUBLE_TYPE_SIZE</code> or
<code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is 64.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFLT_005fEVAL_005fMETHOD"></a>Macro: <strong>TARGET_FLT_EVAL_METHOD</strong></dt>
<dd><p>A C expression for the value for <code>FLT_EVAL_METHOD</code> in <samp>float.h</samp>,
assuming, if applicable, that the floating-point control word is in its
default state.  If you do not define this macro the value of
<code>FLT_EVAL_METHOD</code> will be zero.
</p></dd></dl>

<dl>
<dt><a name="index-WIDEST_005fHARDWARE_005fFP_005fSIZE"></a>Macro: <strong>WIDEST_HARDWARE_FP_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the widest floating-point format
supported by the hardware.  If you define this macro, you must specify a
value less than or equal to the value of <code>LONG_DOUBLE_TYPE_SIZE</code>.
If you do not define this macro, the value of <code>LONG_DOUBLE_TYPE_SIZE</code>
is the default.
</p></dd></dl>

<dl>
<dt><a name="index-DEFAULT_005fSIGNED_005fCHAR"></a>Macro: <strong>DEFAULT_SIGNED_CHAR</strong></dt>
<dd><p>An expression whose value is 1 or 0, according to whether the type
<code>char</code> should be signed or unsigned by default.  The user can
always override this default with the options <samp>-fsigned-char</samp>
and <samp>-funsigned-char</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDEFAULT_005fSHORT_005fENUMS"></a>Target Hook: <em>bool</em> <strong>TARGET_DEFAULT_SHORT_ENUMS</strong> <em>(void)</em></dt>
<dd><p>This target hook should return true if the compiler should give an
<code>enum</code> type only as many bytes as it takes to represent the range
of possible values of that type.  It should return false if all
<code>enum</code> types should be allocated like <code>int</code>.
</p>
<p>The default is to return false.
</p></dd></dl>

<dl>
<dt><a name="index-SIZE_005fTYPE"></a>Macro: <strong>SIZE_TYPE</strong></dt>
<dd><p>A C expression for a string describing the name of the data type to use
for size values.  The typedef name <code>size_t</code> is defined using the
contents of the string.
</p>
<p>The string can contain more than one keyword.  If so, separate them with
spaces, and write first any length keyword, then <code>unsigned</code> if
appropriate, and finally <code>int</code>.  The string must exactly match one
of the data type names defined in the function
<code>c_common_nodes_and_builtins</code> in the file <samp>c-family/c-common.c</samp>.
You may not omit <code>int</code> or change the order&mdash;that would cause the
compiler to crash on startup.
</p>
<p>If you don&rsquo;t define this macro, the default is <code>&quot;long unsigned
int&quot;</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SIZETYPE"></a>Macro: <strong>SIZETYPE</strong></dt>
<dd><p>GCC defines internal types (<code>sizetype</code>, <code>ssizetype</code>,
<code>bitsizetype</code> and <code>sbitsizetype</code>) for expressions
dealing with size.  This macro is a C expression for a string describing
the name of the data type from which the precision of <code>sizetype</code>
is extracted.
</p>
<p>The string has the same restrictions as <code>SIZE_TYPE</code> string.
</p>
<p>If you don&rsquo;t define this macro, the default is <code>SIZE_TYPE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-PTRDIFF_005fTYPE"></a>Macro: <strong>PTRDIFF_TYPE</strong></dt>
<dd><p>A C expression for a string describing the name of the data type to use
for the result of subtracting two pointers.  The typedef name
<code>ptrdiff_t</code> is defined using the contents of the string.  See
<code>SIZE_TYPE</code> above for more information.
</p>
<p>If you don&rsquo;t define this macro, the default is <code>&quot;long int&quot;</code>.
</p></dd></dl>

<dl>
<dt><a name="index-WCHAR_005fTYPE"></a>Macro: <strong>WCHAR_TYPE</strong></dt>
<dd><p>A C expression for a string describing the name of the data type to use
for wide characters.  The typedef name <code>wchar_t</code> is defined using
the contents of the string.  See <code>SIZE_TYPE</code> above for more
information.
</p>
<p>If you don&rsquo;t define this macro, the default is <code>&quot;int&quot;</code>.
</p></dd></dl>

<dl>
<dt><a name="index-WCHAR_005fTYPE_005fSIZE"></a>Macro: <strong>WCHAR_TYPE_SIZE</strong></dt>
<dd><p>A C expression for the size in bits of the data type for wide
characters.  This is used in <code>cpp</code>, which cannot make use of
<code>WCHAR_TYPE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-WINT_005fTYPE"></a>Macro: <strong>WINT_TYPE</strong></dt>
<dd><p>A C expression for a string describing the name of the data type to
use for wide characters passed to <code>printf</code> and returned from
<code>getwc</code>.  The typedef name <code>wint_t</code> is defined using the
contents of the string.  See <code>SIZE_TYPE</code> above for more
information.
</p>
<p>If you don&rsquo;t define this macro, the default is <code>&quot;unsigned int&quot;</code>.
</p></dd></dl>

<dl>
<dt><a name="index-INTMAX_005fTYPE"></a>Macro: <strong>INTMAX_TYPE</strong></dt>
<dd><p>A C expression for a string describing the name of the data type that
can represent any value of any standard or extended signed integer type.
The typedef name <code>intmax_t</code> is defined using the contents of the
string.  See <code>SIZE_TYPE</code> above for more information.
</p>
<p>If you don&rsquo;t define this macro, the default is the first of
<code>&quot;int&quot;</code>, <code>&quot;long int&quot;</code>, or <code>&quot;long long int&quot;</code> that has as
much precision as <code>long long int</code>.
</p></dd></dl>

<dl>
<dt><a name="index-UINTMAX_005fTYPE"></a>Macro: <strong>UINTMAX_TYPE</strong></dt>
<dd><p>A C expression for a string describing the name of the data type that
can represent any value of any standard or extended unsigned integer
type.  The typedef name <code>uintmax_t</code> is defined using the contents
of the string.  See <code>SIZE_TYPE</code> above for more information.
</p>
<p>If you don&rsquo;t define this macro, the default is the first of
<code>&quot;unsigned int&quot;</code>, <code>&quot;long unsigned int&quot;</code>, or <code>&quot;long long
unsigned int&quot;</code> that has as much precision as <code>long long unsigned
int</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SIG_005fATOMIC_005fTYPE"></a>Macro: <strong>SIG_ATOMIC_TYPE</strong></dt>
<dt><a name="index-INT8_005fTYPE"></a>Macro: <strong>INT8_TYPE</strong></dt>
<dt><a name="index-INT16_005fTYPE"></a>Macro: <strong>INT16_TYPE</strong></dt>
<dt><a name="index-INT32_005fTYPE"></a>Macro: <strong>INT32_TYPE</strong></dt>
<dt><a name="index-INT64_005fTYPE"></a>Macro: <strong>INT64_TYPE</strong></dt>
<dt><a name="index-UINT8_005fTYPE"></a>Macro: <strong>UINT8_TYPE</strong></dt>
<dt><a name="index-UINT16_005fTYPE"></a>Macro: <strong>UINT16_TYPE</strong></dt>
<dt><a name="index-UINT32_005fTYPE"></a>Macro: <strong>UINT32_TYPE</strong></dt>
<dt><a name="index-UINT64_005fTYPE"></a>Macro: <strong>UINT64_TYPE</strong></dt>
<dt><a name="index-INT_005fLEAST8_005fTYPE"></a>Macro: <strong>INT_LEAST8_TYPE</strong></dt>
<dt><a name="index-INT_005fLEAST16_005fTYPE"></a>Macro: <strong>INT_LEAST16_TYPE</strong></dt>
<dt><a name="index-INT_005fLEAST32_005fTYPE"></a>Macro: <strong>INT_LEAST32_TYPE</strong></dt>
<dt><a name="index-INT_005fLEAST64_005fTYPE"></a>Macro: <strong>INT_LEAST64_TYPE</strong></dt>
<dt><a name="index-UINT_005fLEAST8_005fTYPE"></a>Macro: <strong>UINT_LEAST8_TYPE</strong></dt>
<dt><a name="index-UINT_005fLEAST16_005fTYPE"></a>Macro: <strong>UINT_LEAST16_TYPE</strong></dt>
<dt><a name="index-UINT_005fLEAST32_005fTYPE"></a>Macro: <strong>UINT_LEAST32_TYPE</strong></dt>
<dt><a name="index-UINT_005fLEAST64_005fTYPE"></a>Macro: <strong>UINT_LEAST64_TYPE</strong></dt>
<dt><a name="index-INT_005fFAST8_005fTYPE"></a>Macro: <strong>INT_FAST8_TYPE</strong></dt>
<dt><a name="index-INT_005fFAST16_005fTYPE"></a>Macro: <strong>INT_FAST16_TYPE</strong></dt>
<dt><a name="index-INT_005fFAST32_005fTYPE"></a>Macro: <strong>INT_FAST32_TYPE</strong></dt>
<dt><a name="index-INT_005fFAST64_005fTYPE"></a>Macro: <strong>INT_FAST64_TYPE</strong></dt>
<dt><a name="index-UINT_005fFAST8_005fTYPE"></a>Macro: <strong>UINT_FAST8_TYPE</strong></dt>
<dt><a name="index-UINT_005fFAST16_005fTYPE"></a>Macro: <strong>UINT_FAST16_TYPE</strong></dt>
<dt><a name="index-UINT_005fFAST32_005fTYPE"></a>Macro: <strong>UINT_FAST32_TYPE</strong></dt>
<dt><a name="index-UINT_005fFAST64_005fTYPE"></a>Macro: <strong>UINT_FAST64_TYPE</strong></dt>
<dt><a name="index-INTPTR_005fTYPE"></a>Macro: <strong>INTPTR_TYPE</strong></dt>
<dt><a name="index-UINTPTR_005fTYPE"></a>Macro: <strong>UINTPTR_TYPE</strong></dt>
<dd><p>C expressions for the standard types <code>sig_atomic_t</code>,
<code>int8_t</code>, <code>int16_t</code>, <code>int32_t</code>, <code>int64_t</code>,
<code>uint8_t</code>, <code>uint16_t</code>, <code>uint32_t</code>, <code>uint64_t</code>,
<code>int_least8_t</code>, <code>int_least16_t</code>, <code>int_least32_t</code>,
<code>int_least64_t</code>, <code>uint_least8_t</code>, <code>uint_least16_t</code>,
<code>uint_least32_t</code>, <code>uint_least64_t</code>, <code>int_fast8_t</code>,
<code>int_fast16_t</code>, <code>int_fast32_t</code>, <code>int_fast64_t</code>,
<code>uint_fast8_t</code>, <code>uint_fast16_t</code>, <code>uint_fast32_t</code>,
<code>uint_fast64_t</code>, <code>intptr_t</code>, and <code>uintptr_t</code>.  See
<code>SIZE_TYPE</code> above for more information.
</p>
<p>If any of these macros evaluates to a null pointer, the corresponding
type is not supported; if GCC is configured to provide
<code>&lt;stdint.h&gt;</code> in such a case, the header provided may not conform
to C99, depending on the type in question.  The defaults for all of
these macros are null pointers.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPTRMEMFUNC_005fVBIT_005fLOCATION"></a>Macro: <strong>TARGET_PTRMEMFUNC_VBIT_LOCATION</strong></dt>
<dd><p>The C++ compiler represents a pointer-to-member-function with a struct
that looks like:
</p>
<div class="smallexample">
<pre class="smallexample">  struct {
    union {
      void (*fn)();
      ptrdiff_t vtable_index;
    };
    ptrdiff_t delta;
  };
</pre></div>

<p>The C++ compiler must use one bit to indicate whether the function that
will be called through a pointer-to-member-function is virtual.
Normally, we assume that the low-order bit of a function pointer must
always be zero.  Then, by ensuring that the vtable_index is odd, we can
distinguish which variant of the union is in use.  But, on some
platforms function pointers can be odd, and so this doesn&rsquo;t work.  In
that case, we use the low-order bit of the <code>delta</code> field, and shift
the remainder of the <code>delta</code> field to the left.
</p>
<p>GCC will automatically make the right selection about where to store
this bit using the <code>FUNCTION_BOUNDARY</code> setting for your platform.
However, some platforms such as ARM/Thumb have <code>FUNCTION_BOUNDARY</code>
set such that functions always start at even addresses, but the lowest
bit of pointers to functions indicate whether the function at that
address is in ARM or Thumb mode.  If this is the case of your
architecture, you should define this macro to
<code>ptrmemfunc_vbit_in_delta</code>.
</p>
<p>In general, you should not have to define this macro.  On architectures
in which function addresses are always even, according to
<code>FUNCTION_BOUNDARY</code>, GCC will automatically define this macro to
<code>ptrmemfunc_vbit_in_pfn</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVTABLE_005fUSES_005fDESCRIPTORS"></a>Macro: <strong>TARGET_VTABLE_USES_DESCRIPTORS</strong></dt>
<dd><p>Normally, the C++ compiler uses function pointers in vtables.  This
macro allows the target to change to use &ldquo;function descriptors&rdquo;
instead.  Function descriptors are found on targets for whom a
function pointer is actually a small data structure.  Normally the
data structure consists of the actual code address plus a data
pointer to which the function&rsquo;s data is relative.
</p>
<p>If vtables are used, the value of this macro should be the number
of words that the function descriptor occupies.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVTABLE_005fENTRY_005fALIGN"></a>Macro: <strong>TARGET_VTABLE_ENTRY_ALIGN</strong></dt>
<dd><p>By default, the vtable entries are void pointers, the so the alignment
is the same as pointer alignment.  The value of this macro specifies
the alignment of the vtable entry in bits.  It should be defined only
when special alignment is necessary. */
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVTABLE_005fDATA_005fENTRY_005fDISTANCE"></a>Macro: <strong>TARGET_VTABLE_DATA_ENTRY_DISTANCE</strong></dt>
<dd><p>There are a few non-descriptor entries in the vtable at offsets below
zero.  If these entries must be padded (say, to preserve the alignment
specified by <code>TARGET_VTABLE_ENTRY_ALIGN</code>), set this to the number
of words in each data entry.
</p></dd></dl>

<hr>
<a name="Registers"></a>
<div class="header">
<p>
Next: <a href="#Register-Classes" accesskey="n" rel="next">Register Classes</a>, Previous: <a href="#Type-Layout" accesskey="p" rel="prev">Type Layout</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Register-Usage"></a>
<h3 class="section">17.7 Register Usage</h3>
<a name="index-register-usage"></a>

<p>This section explains how to describe what registers the target machine
has, and how (in general) they can be used.
</p>
<p>The description of which registers a specific instruction can use is
done with register classes; see <a href="#Register-Classes">Register Classes</a>.  For information
on using registers to access a stack frame, see <a href="#Frame-Registers">Frame Registers</a>.
For passing values in registers, see <a href="#Register-Arguments">Register Arguments</a>.
For returning values in registers, see <a href="#Scalar-Return">Scalar Return</a>.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Register-Basics" accesskey="1">Register Basics</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Number and kinds of registers.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Allocation-Order" accesskey="2">Allocation Order</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Order in which registers are allocated.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Values-in-Registers" accesskey="3">Values in Registers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What kinds of values each reg can hold.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Leaf-Functions" accesskey="4">Leaf Functions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Renumbering registers for leaf functions.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Stack-Registers" accesskey="5">Stack Registers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Handling a register stack such as 80387.
</td></tr>
</table>

<hr>
<a name="Register-Basics"></a>
<div class="header">
<p>
Next: <a href="#Allocation-Order" accesskey="n" rel="next">Allocation Order</a>, Up: <a href="#Registers" accesskey="u" rel="up">Registers</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Basic-Characteristics-of-Registers"></a>
<h4 class="subsection">17.7.1 Basic Characteristics of Registers</h4>

<p>Registers have various characteristics.
</p>
<dl>
<dt><a name="index-FIRST_005fPSEUDO_005fREGISTER"></a>Macro: <strong>FIRST_PSEUDO_REGISTER</strong></dt>
<dd><p>Number of hardware registers known to the compiler.  They receive
numbers 0 through <code>FIRST_PSEUDO_REGISTER-1</code>; thus, the first
pseudo register&rsquo;s number really is assigned the number
<code>FIRST_PSEUDO_REGISTER</code>.
</p></dd></dl>

<dl>
<dt><a name="index-FIXED_005fREGISTERS"></a>Macro: <strong>FIXED_REGISTERS</strong></dt>
<dd><a name="index-fixed-register"></a>
<p>An initializer that says which registers are used for fixed purposes
all throughout the compiled code and are therefore not available for
general allocation.  These would include the stack pointer, the frame
pointer (except on machines where that can be used as a general
register when no frame pointer is needed), the program counter on
machines where that is considered one of the addressable registers,
and any other numbered register with a standard use.
</p>
<p>This information is expressed as a sequence of numbers, separated by
commas and surrounded by braces.  The <var>n</var>th number is 1 if
register <var>n</var> is fixed, 0 otherwise.
</p>
<p>The table initialized from this macro, and the table initialized by
the following one, may be overridden at run time either automatically,
by the actions of the macro <code>CONDITIONAL_REGISTER_USAGE</code>, or by
the user with the command options <samp>-ffixed-<var>reg</var></samp>,
<samp>-fcall-used-<var>reg</var></samp> and <samp>-fcall-saved-<var>reg</var></samp>.
</p></dd></dl>

<dl>
<dt><a name="index-CALL_005fUSED_005fREGISTERS"></a>Macro: <strong>CALL_USED_REGISTERS</strong></dt>
<dd><a name="index-call_002dused-register"></a>
<a name="index-call_002dclobbered-register"></a>
<a name="index-call_002dsaved-register"></a>
<p>Like <code>FIXED_REGISTERS</code> but has 1 for each register that is
clobbered (in general) by function calls as well as for fixed
registers.  This macro therefore identifies the registers that are not
available for general allocation of values that must live across
function calls.
</p>
<p>If a register has 0 in <code>CALL_USED_REGISTERS</code>, the compiler
automatically saves it on function entry and restores it on function
exit, if the register is used within the function.
</p></dd></dl>

<dl>
<dt><a name="index-CALL_005fREALLY_005fUSED_005fREGISTERS"></a>Macro: <strong>CALL_REALLY_USED_REGISTERS</strong></dt>
<dd><a name="index-call_002dused-register-1"></a>
<a name="index-call_002dclobbered-register-1"></a>
<a name="index-call_002dsaved-register-1"></a>
<p>Like <code>CALL_USED_REGISTERS</code> except this macro doesn&rsquo;t require
that the entire set of <code>FIXED_REGISTERS</code> be included.
(<code>CALL_USED_REGISTERS</code> must be a superset of <code>FIXED_REGISTERS</code>).
This macro is optional.  If not specified, it defaults to the value
of <code>CALL_USED_REGISTERS</code>.
</p></dd></dl>

<dl>
<dt><a name="index-HARD_005fREGNO_005fCALL_005fPART_005fCLOBBERED"></a>Macro: <strong>HARD_REGNO_CALL_PART_CLOBBERED</strong> <em>(<var>regno</var>, <var>mode</var>)</em></dt>
<dd><a name="index-call_002dused-register-2"></a>
<a name="index-call_002dclobbered-register-2"></a>
<a name="index-call_002dsaved-register-2"></a>
<p>A C expression that is nonzero if it is not permissible to store a
value of mode <var>mode</var> in hard register number <var>regno</var> across a
call without some part of it being clobbered.  For most machines this
macro need not be defined.  It is only required for machines that do not
preserve the entire contents of a register across a call.
</p></dd></dl>

<a name="index-fixed_005fregs"></a>
<a name="index-call_005fused_005fregs"></a>
<a name="index-global_005fregs"></a>
<a name="index-reg_005fnames"></a>
<a name="index-reg_005fclass_005fcontents"></a>
<dl>
<dt><a name="index-TARGET_005fCONDITIONAL_005fREGISTER_005fUSAGE"></a>Target Hook: <em>void</em> <strong>TARGET_CONDITIONAL_REGISTER_USAGE</strong> <em>(void)</em></dt>
<dd><p>This hook may conditionally modify five variables
<code>fixed_regs</code>, <code>call_used_regs</code>, <code>global_regs</code>,
<code>reg_names</code>, and <code>reg_class_contents</code>, to take into account
any dependence of these register sets on target flags.  The first three
of these are of type <code>char []</code> (interpreted as Boolean vectors).
<code>global_regs</code> is a <code>const char *[]</code>, and
<code>reg_class_contents</code> is a <code>HARD_REG_SET</code>.  Before the macro is
called, <code>fixed_regs</code>, <code>call_used_regs</code>,
<code>reg_class_contents</code>, and <code>reg_names</code> have been initialized
from <code>FIXED_REGISTERS</code>, <code>CALL_USED_REGISTERS</code>,
<code>REG_CLASS_CONTENTS</code>, and <code>REGISTER_NAMES</code>, respectively.
<code>global_regs</code> has been cleared, and any <samp>-ffixed-<var>reg</var></samp>,
<samp>-fcall-used-<var>reg</var></samp> and <samp>-fcall-saved-<var>reg</var></samp>
command options have been applied.
</p>
<a name="index-disabling-certain-registers"></a>
<a name="index-controlling-register-usage"></a>
<p>If the usage of an entire class of registers depends on the target
flags, you may indicate this to GCC by using this macro to modify
<code>fixed_regs</code> and <code>call_used_regs</code> to 1 for each of the
registers in the classes which should not be used by GCC.  Also define
the macro <code>REG_CLASS_FROM_LETTER</code> / <code>REG_CLASS_FROM_CONSTRAINT</code>
to return <code>NO_REGS</code> if it
is called with a letter for a class that shouldn&rsquo;t be used.
</p>
<p>(However, if this class is not included in <code>GENERAL_REGS</code> and all
of the insn patterns whose constraints permit this class are
controlled by target switches, then GCC will automatically avoid using
these registers when the target switches are opposed to them.)
</p></dd></dl>

<dl>
<dt><a name="index-INCOMING_005fREGNO"></a>Macro: <strong>INCOMING_REGNO</strong> <em>(<var>out</var>)</em></dt>
<dd><p>Define this macro if the target machine has register windows.  This C
expression returns the register number as seen by the called function
corresponding to the register number <var>out</var> as seen by the calling
function.  Return <var>out</var> if register number <var>out</var> is not an
outbound register.
</p></dd></dl>

<dl>
<dt><a name="index-OUTGOING_005fREGNO"></a>Macro: <strong>OUTGOING_REGNO</strong> <em>(<var>in</var>)</em></dt>
<dd><p>Define this macro if the target machine has register windows.  This C
expression returns the register number as seen by the calling function
corresponding to the register number <var>in</var> as seen by the called
function.  Return <var>in</var> if register number <var>in</var> is not an inbound
register.
</p></dd></dl>

<dl>
<dt><a name="index-LOCAL_005fREGNO"></a>Macro: <strong>LOCAL_REGNO</strong> <em>(<var>regno</var>)</em></dt>
<dd><p>Define this macro if the target machine has register windows.  This C
expression returns true if the register is call-saved but is in the
register window.  Unlike most call-saved registers, such registers
need not be explicitly restored on function exit or during non-local
gotos.
</p></dd></dl>

<dl>
<dt><a name="index-PC_005fREGNUM"></a>Macro: <strong>PC_REGNUM</strong></dt>
<dd><p>If the program counter has a register number, define this as that
register number.  Otherwise, do not define it.
</p></dd></dl>

<hr>
<a name="Allocation-Order"></a>
<div class="header">
<p>
Next: <a href="#Values-in-Registers" accesskey="n" rel="next">Values in Registers</a>, Previous: <a href="#Register-Basics" accesskey="p" rel="prev">Register Basics</a>, Up: <a href="#Registers" accesskey="u" rel="up">Registers</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Order-of-Allocation-of-Registers"></a>
<h4 class="subsection">17.7.2 Order of Allocation of Registers</h4>
<a name="index-order-of-register-allocation"></a>
<a name="index-register-allocation-order"></a>

<p>Registers are allocated in order.
</p>
<dl>
<dt><a name="index-REG_005fALLOC_005fORDER"></a>Macro: <strong>REG_ALLOC_ORDER</strong></dt>
<dd><p>If defined, an initializer for a vector of integers, containing the
numbers of hard registers in the order in which GCC should prefer
to use them (from most preferred to least).
</p>
<p>If this macro is not defined, registers are used lowest numbered first
(all else being equal).
</p>
<p>One use of this macro is on machines where the highest numbered
registers must always be saved and the save-multiple-registers
instruction supports only sequences of consecutive registers.  On such
machines, define <code>REG_ALLOC_ORDER</code> to be an initializer that lists
the highest numbered allocable register first.
</p></dd></dl>

<dl>
<dt><a name="index-ADJUST_005fREG_005fALLOC_005fORDER"></a>Macro: <strong>ADJUST_REG_ALLOC_ORDER</strong></dt>
<dd><p>A C statement (sans semicolon) to choose the order in which to allocate
hard registers for pseudo-registers local to a basic block.
</p>
<p>Store the desired register order in the array <code>reg_alloc_order</code>.
Element 0 should be the register to allocate first; element 1, the next
register; and so on.
</p>
<p>The macro body should not assume anything about the contents of
<code>reg_alloc_order</code> before execution of the macro.
</p>
<p>On most machines, it is not necessary to define this macro.
</p></dd></dl>

<dl>
<dt><a name="index-HONOR_005fREG_005fALLOC_005fORDER"></a>Macro: <strong>HONOR_REG_ALLOC_ORDER</strong></dt>
<dd><p>Normally, IRA tries to estimate the costs for saving a register in the
prologue and restoring it in the epilogue.  This discourages it from
using call-saved registers.  If a machine wants to ensure that IRA
allocates registers in the order given by REG_ALLOC_ORDER even if some
call-saved registers appear earlier than call-used ones, this macro
should be defined.
</p></dd></dl>

<dl>
<dt><a name="index-IRA_005fHARD_005fREGNO_005fADD_005fCOST_005fMULTIPLIER"></a>Macro: <strong>IRA_HARD_REGNO_ADD_COST_MULTIPLIER</strong> <em>(<var>regno</var>)</em></dt>
<dd><p>In some case register allocation order is not enough for the
Integrated Register Allocator (<acronym>IRA</acronym>) to generate a good code.
If this macro is defined, it should return a floating point value
based on <var>regno</var>.  The cost of using <var>regno</var> for a pseudo will
be increased by approximately the pseudo&rsquo;s usage frequency times the
value returned by this macro.  Not defining this macro is equivalent
to having it always return <code>0.0</code>.
</p>
<p>On most machines, it is not necessary to define this macro.
</p></dd></dl>

<hr>
<a name="Values-in-Registers"></a>
<div class="header">
<p>
Next: <a href="#Leaf-Functions" accesskey="n" rel="next">Leaf Functions</a>, Previous: <a href="#Allocation-Order" accesskey="p" rel="prev">Allocation Order</a>, Up: <a href="#Registers" accesskey="u" rel="up">Registers</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="How-Values-Fit-in-Registers"></a>
<h4 class="subsection">17.7.3 How Values Fit in Registers</h4>

<p>This section discusses the macros that describe which kinds of values
(specifically, which machine modes) each register can hold, and how many
consecutive registers are needed for a given mode.
</p>
<dl>
<dt><a name="index-HARD_005fREGNO_005fNREGS"></a>Macro: <strong>HARD_REGNO_NREGS</strong> <em>(<var>regno</var>, <var>mode</var>)</em></dt>
<dd><p>A C expression for the number of consecutive hard registers, starting
at register number <var>regno</var>, required to hold a value of mode
<var>mode</var>.  This macro must never return zero, even if a register
cannot hold the requested mode - indicate that with HARD_REGNO_MODE_OK
and/or CANNOT_CHANGE_MODE_CLASS instead.
</p>
<p>On a machine where all registers are exactly one word, a suitable
definition of this macro is
</p>
<div class="smallexample">
<pre class="smallexample">#define HARD_REGNO_NREGS(REGNO, MODE)            \
   ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1)  \
    / UNITS_PER_WORD)
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-HARD_005fREGNO_005fNREGS_005fHAS_005fPADDING"></a>Macro: <strong>HARD_REGNO_NREGS_HAS_PADDING</strong> <em>(<var>regno</var>, <var>mode</var>)</em></dt>
<dd><p>A C expression that is nonzero if a value of mode <var>mode</var>, stored
in memory, ends with padding that causes it to take up more space than
in registers starting at register number <var>regno</var> (as determined by
multiplying GCC&rsquo;s notion of the size of the register when containing
this mode by the number of registers returned by
<code>HARD_REGNO_NREGS</code>).  By default this is zero.
</p>
<p>For example, if a floating-point value is stored in three 32-bit
registers but takes up 128 bits in memory, then this would be
nonzero.
</p>
<p>This macros only needs to be defined if there are cases where
<code>subreg_get_info</code>
would otherwise wrongly determine that a <code>subreg</code> can be
represented by an offset to the register number, when in fact such a
<code>subreg</code> would contain some of the padding not stored in
registers and so not be representable.
</p></dd></dl>

<dl>
<dt><a name="index-HARD_005fREGNO_005fNREGS_005fWITH_005fPADDING"></a>Macro: <strong>HARD_REGNO_NREGS_WITH_PADDING</strong> <em>(<var>regno</var>, <var>mode</var>)</em></dt>
<dd><p>For values of <var>regno</var> and <var>mode</var> for which
<code>HARD_REGNO_NREGS_HAS_PADDING</code> returns nonzero, a C expression
returning the greater number of registers required to hold the value
including any padding.  In the example above, the value would be four.
</p></dd></dl>

<dl>
<dt><a name="index-REGMODE_005fNATURAL_005fSIZE"></a>Macro: <strong>REGMODE_NATURAL_SIZE</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>Define this macro if the natural size of registers that hold values
of mode <var>mode</var> is not the word size.  It is a C expression that
should give the natural size in bytes for the specified mode.  It is
used by the register allocator to try to optimize its results.  This
happens for example on SPARC 64-bit where the natural size of
floating-point registers is still 32-bit.
</p></dd></dl>

<dl>
<dt><a name="index-HARD_005fREGNO_005fMODE_005fOK"></a>Macro: <strong>HARD_REGNO_MODE_OK</strong> <em>(<var>regno</var>, <var>mode</var>)</em></dt>
<dd><p>A C expression that is nonzero if it is permissible to store a value
of mode <var>mode</var> in hard register number <var>regno</var> (or in several
registers starting with that one).  For a machine where all registers
are equivalent, a suitable definition is
</p>
<div class="smallexample">
<pre class="smallexample">#define HARD_REGNO_MODE_OK(REGNO, MODE) 1
</pre></div>

<p>You need not include code to check for the numbers of fixed registers,
because the allocation mechanism considers them to be always occupied.
</p>
<a name="index-register-pairs"></a>
<p>On some machines, double-precision values must be kept in even/odd
register pairs.  You can implement that by defining this macro to reject
odd register numbers for such modes.
</p>
<p>The minimum requirement for a mode to be OK in a register is that the
&lsquo;<samp>mov<var>mode</var></samp>&rsquo; instruction pattern support moves between the
register and other hard register in the same class and that moving a
value into the register and back out not alter it.
</p>
<p>Since the same instruction used to move <code>word_mode</code> will work for
all narrower integer modes, it is not necessary on any machine for
<code>HARD_REGNO_MODE_OK</code> to distinguish between these modes, provided
you define patterns &lsquo;<samp>movhi</samp>&rsquo;, etc., to take advantage of this.  This
is useful because of the interaction between <code>HARD_REGNO_MODE_OK</code>
and <code>MODES_TIEABLE_P</code>; it is very desirable for all integer modes
to be tieable.
</p>
<p>Many machines have special registers for floating point arithmetic.
Often people assume that floating point machine modes are allowed only
in floating point registers.  This is not true.  Any registers that
can hold integers can safely <em>hold</em> a floating point machine
mode, whether or not floating arithmetic can be done on it in those
registers.  Integer move instructions can be used to move the values.
</p>
<p>On some machines, though, the converse is true: fixed-point machine
modes may not go in floating registers.  This is true if the floating
registers normalize any value stored in them, because storing a
non-floating value there would garble it.  In this case,
<code>HARD_REGNO_MODE_OK</code> should reject fixed-point machine modes in
floating registers.  But if the floating registers do not automatically
normalize, if you can store any bit pattern in one and retrieve it
unchanged without a trap, then any machine mode may go in a floating
register, so you can define this macro to say so.
</p>
<p>The primary significance of special floating registers is rather that
they are the registers acceptable in floating point arithmetic
instructions.  However, this is of no concern to
<code>HARD_REGNO_MODE_OK</code>.  You handle it by writing the proper
constraints for those instructions.
</p>
<p>On some machines, the floating registers are especially slow to access,
so that it is better to store a value in a stack frame than in such a
register if floating point arithmetic is not being done.  As long as the
floating registers are not in class <code>GENERAL_REGS</code>, they will not
be used unless some pattern&rsquo;s constraint asks for one.
</p></dd></dl>

<dl>
<dt><a name="index-HARD_005fREGNO_005fRENAME_005fOK"></a>Macro: <strong>HARD_REGNO_RENAME_OK</strong> <em>(<var>from</var>, <var>to</var>)</em></dt>
<dd><p>A C expression that is nonzero if it is OK to rename a hard register
<var>from</var> to another hard register <var>to</var>.
</p>
<p>One common use of this macro is to prevent renaming of a register to
another register that is not saved by a prologue in an interrupt
handler.
</p>
<p>The default is always nonzero.
</p></dd></dl>

<dl>
<dt><a name="index-MODES_005fTIEABLE_005fP"></a>Macro: <strong>MODES_TIEABLE_P</strong> <em>(<var>mode1</var>, <var>mode2</var>)</em></dt>
<dd><p>A C expression that is nonzero if a value of mode
<var>mode1</var> is accessible in mode <var>mode2</var> without copying.
</p>
<p>If <code>HARD_REGNO_MODE_OK (<var>r</var>, <var>mode1</var>)</code> and
<code>HARD_REGNO_MODE_OK (<var>r</var>, <var>mode2</var>)</code> are always the same for
any <var>r</var>, then <code>MODES_TIEABLE_P (<var>mode1</var>, <var>mode2</var>)</code>
should be nonzero.  If they differ for any <var>r</var>, you should define
this macro to return zero unless some other mechanism ensures the
accessibility of the value in a narrower mode.
</p>
<p>You should define this macro to return nonzero in as many cases as
possible since doing so will allow GCC to perform better register
allocation.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fHARD_005fREGNO_005fSCRATCH_005fOK"></a>Target Hook: <em>bool</em> <strong>TARGET_HARD_REGNO_SCRATCH_OK</strong> <em>(unsigned int <var>regno</var>)</em></dt>
<dd><p>This target hook should return <code>true</code> if it is OK to use a hard register
<var>regno</var> as scratch reg in peephole2.
</p>
<p>One common use of this macro is to prevent using of a register that
is not saved by a prologue in an interrupt handler.
</p>
<p>The default version of this hook always returns <code>true</code>.
</p></dd></dl>

<dl>
<dt><a name="index-AVOID_005fCCMODE_005fCOPIES"></a>Macro: <strong>AVOID_CCMODE_COPIES</strong></dt>
<dd><p>Define this macro if the compiler should avoid copies to/from <code>CCmode</code>
registers.  You should only define this macro if support for copying to/from
<code>CCmode</code> is incomplete.
</p></dd></dl>

<hr>
<a name="Leaf-Functions"></a>
<div class="header">
<p>
Next: <a href="#Stack-Registers" accesskey="n" rel="next">Stack Registers</a>, Previous: <a href="#Values-in-Registers" accesskey="p" rel="prev">Values in Registers</a>, Up: <a href="#Registers" accesskey="u" rel="up">Registers</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Handling-Leaf-Functions"></a>
<h4 class="subsection">17.7.4 Handling Leaf Functions</h4>

<a name="index-leaf-functions"></a>
<a name="index-functions_002c-leaf"></a>
<p>On some machines, a leaf function (i.e., one which makes no calls) can run
more efficiently if it does not make its own register window.  Often this
means it is required to receive its arguments in the registers where they
are passed by the caller, instead of the registers where they would
normally arrive.
</p>
<p>The special treatment for leaf functions generally applies only when
other conditions are met; for example, often they may use only those
registers for its own variables and temporaries.  We use the term &ldquo;leaf
function&rdquo; to mean a function that is suitable for this special
handling, so that functions with no calls are not necessarily &ldquo;leaf
functions&rdquo;.
</p>
<p>GCC assigns register numbers before it knows whether the function is
suitable for leaf function treatment.  So it needs to renumber the
registers in order to output a leaf function.  The following macros
accomplish this.
</p>
<dl>
<dt><a name="index-LEAF_005fREGISTERS"></a>Macro: <strong>LEAF_REGISTERS</strong></dt>
<dd><p>Name of a char vector, indexed by hard register number, which
contains 1 for a register that is allowable in a candidate for leaf
function treatment.
</p>
<p>If leaf function treatment involves renumbering the registers, then the
registers marked here should be the ones before renumbering&mdash;those that
GCC would ordinarily allocate.  The registers which will actually be
used in the assembler code, after renumbering, should not be marked with 1
in this vector.
</p>
<p>Define this macro only if the target machine offers a way to optimize
the treatment of leaf functions.
</p></dd></dl>

<dl>
<dt><a name="index-LEAF_005fREG_005fREMAP"></a>Macro: <strong>LEAF_REG_REMAP</strong> <em>(<var>regno</var>)</em></dt>
<dd><p>A C expression whose value is the register number to which <var>regno</var>
should be renumbered, when a function is treated as a leaf function.
</p>
<p>If <var>regno</var> is a register number which should not appear in a leaf
function before renumbering, then the expression should yield -1, which
will cause the compiler to abort.
</p>
<p>Define this macro only if the target machine offers a way to optimize the
treatment of leaf functions, and registers need to be renumbered to do
this.
</p></dd></dl>

<a name="index-current_005ffunction_005fis_005fleaf"></a>
<a name="index-current_005ffunction_005fuses_005fonly_005fleaf_005fregs"></a>
<p><code>TARGET_ASM_FUNCTION_PROLOGUE</code> and
<code>TARGET_ASM_FUNCTION_EPILOGUE</code> must usually treat leaf functions
specially.  They can test the C variable <code>current_function_is_leaf</code>
which is nonzero for leaf functions.  <code>current_function_is_leaf</code> is
set prior to local register allocation and is valid for the remaining
compiler passes.  They can also test the C variable
<code>current_function_uses_only_leaf_regs</code> which is nonzero for leaf
functions which only use leaf registers.
<code>current_function_uses_only_leaf_regs</code> is valid after all passes
that modify the instructions have been run and is only useful if
<code>LEAF_REGISTERS</code> is defined.
</p>
<hr>
<a name="Stack-Registers"></a>
<div class="header">
<p>
Previous: <a href="#Leaf-Functions" accesskey="p" rel="prev">Leaf Functions</a>, Up: <a href="#Registers" accesskey="u" rel="up">Registers</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Registers-That-Form-a-Stack"></a>
<h4 class="subsection">17.7.5 Registers That Form a Stack</h4>

<p>There are special features to handle computers where some of the
&ldquo;registers&rdquo; form a stack.  Stack registers are normally written by
pushing onto the stack, and are numbered relative to the top of the
stack.
</p>
<p>Currently, GCC can only handle one group of stack-like registers, and
they must be consecutively numbered.  Furthermore, the existing
support for stack-like registers is specific to the 80387 floating
point coprocessor.  If you have a new architecture that uses
stack-like registers, you will need to do substantial work on
<samp>reg-stack.c</samp> and write your machine description to cooperate
with it, as well as defining these macros.
</p>
<dl>
<dt><a name="index-STACK_005fREGS"></a>Macro: <strong>STACK_REGS</strong></dt>
<dd><p>Define this if the machine has any stack-like registers.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fREG_005fCOVER_005fCLASS"></a>Macro: <strong>STACK_REG_COVER_CLASS</strong></dt>
<dd><p>This is a cover class containing the stack registers.  Define this if
the machine has any stack-like registers.
</p></dd></dl>

<dl>
<dt><a name="index-FIRST_005fSTACK_005fREG"></a>Macro: <strong>FIRST_STACK_REG</strong></dt>
<dd><p>The number of the first stack-like register.  This one is the top
of the stack.
</p></dd></dl>

<dl>
<dt><a name="index-LAST_005fSTACK_005fREG"></a>Macro: <strong>LAST_STACK_REG</strong></dt>
<dd><p>The number of the last stack-like register.  This one is the bottom of
the stack.
</p></dd></dl>

<hr>
<a name="Register-Classes"></a>
<div class="header">
<p>
Next: <a href="#Old-Constraints" accesskey="n" rel="next">Old Constraints</a>, Previous: <a href="#Registers" accesskey="p" rel="prev">Registers</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Register-Classes-1"></a>
<h3 class="section">17.8 Register Classes</h3>
<a name="index-register-class-definitions"></a>
<a name="index-class-definitions_002c-register"></a>

<p>On many machines, the numbered registers are not all equivalent.
For example, certain registers may not be allowed for indexed addressing;
certain registers may not be allowed in some instructions.  These machine
restrictions are described to the compiler using <em>register classes</em>.
</p>
<p>You define a number of register classes, giving each one a name and saying
which of the registers belong to it.  Then you can specify register classes
that are allowed as operands to particular instruction patterns.
</p>
<a name="index-ALL_005fREGS"></a>
<a name="index-NO_005fREGS"></a>
<p>In general, each register will belong to several classes.  In fact, one
class must be named <code>ALL_REGS</code> and contain all the registers.  Another
class must be named <code>NO_REGS</code> and contain no registers.  Often the
union of two classes will be another class; however, this is not required.
</p>
<a name="index-GENERAL_005fREGS"></a>
<p>One of the classes must be named <code>GENERAL_REGS</code>.  There is nothing
terribly special about the name, but the operand constraint letters
&lsquo;<samp>r</samp>&rsquo; and &lsquo;<samp>g</samp>&rsquo; specify this class.  If <code>GENERAL_REGS</code> is
the same as <code>ALL_REGS</code>, just define it as a macro which expands
to <code>ALL_REGS</code>.
</p>
<p>Order the classes so that if class <var>x</var> is contained in class <var>y</var>
then <var>x</var> has a lower class number than <var>y</var>.
</p>
<p>The way classes other than <code>GENERAL_REGS</code> are specified in operand
constraints is through machine-dependent operand constraint letters.
You can define such letters to correspond to various classes, then use
them in operand constraints.
</p>
<p>You must define the narrowest register classes for allocatable
registers, so that each class either has no subclasses, or that for
some mode, the move cost between registers within the class is
cheaper than moving a register in the class to or from memory
(see <a href="#Costs">Costs</a>).
</p>
<p>You should define a class for the union of two classes whenever some
instruction allows both classes.  For example, if an instruction allows
either a floating point (coprocessor) register or a general register for a
certain operand, you should define a class <code>FLOAT_OR_GENERAL_REGS</code>
which includes both of them.  Otherwise you will get suboptimal code,
or even internal compiler errors when reload cannot find a register in the
class computed via <code>reg_class_subunion</code>.
</p>
<p>You must also specify certain redundant information about the register
classes: for each class, which classes contain it and which ones are
contained in it; for each pair of classes, the largest class contained
in their union.
</p>
<p>When a value occupying several consecutive registers is expected in a
certain class, all the registers used must belong to that class.
Therefore, register classes cannot be used to enforce a requirement for
a register pair to start with an even-numbered register.  The way to
specify this requirement is with <code>HARD_REGNO_MODE_OK</code>.
</p>
<p>Register classes used for input-operands of bitwise-and or shift
instructions have a special requirement: each such class must have, for
each fixed-point machine mode, a subclass whose registers can transfer that
mode to or from memory.  For example, on some machines, the operations for
single-byte values (<code>QImode</code>) are limited to certain registers.  When
this is so, each register class that is used in a bitwise-and or shift
instruction must have a subclass consisting of registers from which
single-byte values can be loaded or stored.  This is so that
<code>PREFERRED_RELOAD_CLASS</code> can always have a possible value to return.
</p>
<dl>
<dt><a name="index-enum-reg_005fclass"></a>Data type: <strong>enum reg_class</strong></dt>
<dd><p>An enumerated type that must be defined with all the register class names
as enumerated values.  <code>NO_REGS</code> must be first.  <code>ALL_REGS</code>
must be the last register class, followed by one more enumerated value,
<code>LIM_REG_CLASSES</code>, which is not a register class but rather
tells how many classes there are.
</p>
<p>Each register class has a number, which is the value of casting
the class name to type <code>int</code>.  The number serves as an index
in many of the tables described below.
</p></dd></dl>

<dl>
<dt><a name="index-N_005fREG_005fCLASSES"></a>Macro: <strong>N_REG_CLASSES</strong></dt>
<dd><p>The number of distinct register classes, defined as follows:
</p>
<div class="smallexample">
<pre class="smallexample">#define N_REG_CLASSES (int) LIM_REG_CLASSES
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-REG_005fCLASS_005fNAMES"></a>Macro: <strong>REG_CLASS_NAMES</strong></dt>
<dd><p>An initializer containing the names of the register classes as C string
constants.  These names are used in writing some of the debugging dumps.
</p></dd></dl>

<dl>
<dt><a name="index-REG_005fCLASS_005fCONTENTS"></a>Macro: <strong>REG_CLASS_CONTENTS</strong></dt>
<dd><p>An initializer containing the contents of the register classes, as integers
which are bit masks.  The <var>n</var>th integer specifies the contents of class
<var>n</var>.  The way the integer <var>mask</var> is interpreted is that
register <var>r</var> is in the class if <code><var>mask</var> &amp; (1 &lt;&lt; <var>r</var>)</code> is 1.
</p>
<p>When the machine has more than 32 registers, an integer does not suffice.
Then the integers are replaced by sub-initializers, braced groupings containing
several integers.  Each sub-initializer must be suitable as an initializer
for the type <code>HARD_REG_SET</code> which is defined in <samp>hard-reg-set.h</samp>.
In this situation, the first integer in each sub-initializer corresponds to
registers 0 through 31, the second integer to registers 32 through 63, and
so on.
</p></dd></dl>

<dl>
<dt><a name="index-REGNO_005fREG_005fCLASS"></a>Macro: <strong>REGNO_REG_CLASS</strong> <em>(<var>regno</var>)</em></dt>
<dd><p>A C expression whose value is a register class containing hard register
<var>regno</var>.  In general there is more than one such class; choose a class
which is <em>minimal</em>, meaning that no smaller class also contains the
register.
</p></dd></dl>

<dl>
<dt><a name="index-BASE_005fREG_005fCLASS"></a>Macro: <strong>BASE_REG_CLASS</strong></dt>
<dd><p>A macro whose definition is the name of the class to which a valid
base register must belong.  A base register is one used in an address
which is the register value plus a displacement.
</p></dd></dl>

<dl>
<dt><a name="index-MODE_005fBASE_005fREG_005fCLASS"></a>Macro: <strong>MODE_BASE_REG_CLASS</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>This is a variation of the <code>BASE_REG_CLASS</code> macro which allows
the selection of a base register in a mode dependent manner.  If
<var>mode</var> is VOIDmode then it should return the same value as
<code>BASE_REG_CLASS</code>.
</p></dd></dl>

<dl>
<dt><a name="index-MODE_005fBASE_005fREG_005fREG_005fCLASS"></a>Macro: <strong>MODE_BASE_REG_REG_CLASS</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression whose value is the register class to which a valid
base register must belong in order to be used in a base plus index
register address.  You should define this macro if base plus index
addresses have different requirements than other base register uses.
</p></dd></dl>

<dl>
<dt><a name="index-MODE_005fCODE_005fBASE_005fREG_005fCLASS"></a>Macro: <strong>MODE_CODE_BASE_REG_CLASS</strong> <em>(<var>mode</var>, <var>address_space</var>, <var>outer_code</var>, <var>index_code</var>)</em></dt>
<dd><p>A C expression whose value is the register class to which a valid
base register for a memory reference in mode <var>mode</var> to address
space <var>address_space</var> must belong.  <var>outer_code</var> and <var>index_code</var>
define the context in which the base register occurs.  <var>outer_code</var> is
the code of the immediately enclosing expression (<code>MEM</code> for the top level
of an address, <code>ADDRESS</code> for something that occurs in an
<code>address_operand</code>).  <var>index_code</var> is the code of the corresponding
index expression if <var>outer_code</var> is <code>PLUS</code>; <code>SCRATCH</code> otherwise.
</p></dd></dl>

<dl>
<dt><a name="index-INDEX_005fREG_005fCLASS"></a>Macro: <strong>INDEX_REG_CLASS</strong></dt>
<dd><p>A macro whose definition is the name of the class to which a valid
index register must belong.  An index register is one used in an
address where its value is either multiplied by a scale factor or
added to another register (as well as added to a displacement).
</p></dd></dl>

<dl>
<dt><a name="index-REGNO_005fOK_005fFOR_005fBASE_005fP"></a>Macro: <strong>REGNO_OK_FOR_BASE_P</strong> <em>(<var>num</var>)</em></dt>
<dd><p>A C expression which is nonzero if register number <var>num</var> is
suitable for use as a base register in operand addresses.
</p></dd></dl>

<dl>
<dt><a name="index-REGNO_005fMODE_005fOK_005fFOR_005fBASE_005fP"></a>Macro: <strong>REGNO_MODE_OK_FOR_BASE_P</strong> <em>(<var>num</var>, <var>mode</var>)</em></dt>
<dd><p>A C expression that is just like <code>REGNO_OK_FOR_BASE_P</code>, except that
that expression may examine the mode of the memory reference in
<var>mode</var>.  You should define this macro if the mode of the memory
reference affects whether a register may be used as a base register.  If
you define this macro, the compiler will use it instead of
<code>REGNO_OK_FOR_BASE_P</code>.  The mode may be <code>VOIDmode</code> for
addresses that appear outside a <code>MEM</code>, i.e., as an
<code>address_operand</code>.
</p></dd></dl>

<dl>
<dt><a name="index-REGNO_005fMODE_005fOK_005fFOR_005fREG_005fBASE_005fP"></a>Macro: <strong>REGNO_MODE_OK_FOR_REG_BASE_P</strong> <em>(<var>num</var>, <var>mode</var>)</em></dt>
<dd><p>A C expression which is nonzero if register number <var>num</var> is suitable for
use as a base register in base plus index operand addresses, accessing
memory in mode <var>mode</var>.  It may be either a suitable hard register or a
pseudo register that has been allocated such a hard register.  You should
define this macro if base plus index addresses have different requirements
than other base register uses.
</p>
<p>Use of this macro is deprecated; please use the more general
<code>REGNO_MODE_CODE_OK_FOR_BASE_P</code>.
</p></dd></dl>

<dl>
<dt><a name="index-REGNO_005fMODE_005fCODE_005fOK_005fFOR_005fBASE_005fP"></a>Macro: <strong>REGNO_MODE_CODE_OK_FOR_BASE_P</strong> <em>(<var>num</var>, <var>mode</var>, <var>address_space</var>, <var>outer_code</var>, <var>index_code</var>)</em></dt>
<dd><p>A C expression which is nonzero if register number <var>num</var> is
suitable for use as a base register in operand addresses, accessing
memory in mode <var>mode</var> in address space <var>address_space</var>.
This is similar to <code>REGNO_MODE_OK_FOR_BASE_P</code>, except
that that expression may examine the context in which the register
appears in the memory reference.  <var>outer_code</var> is the code of the
immediately enclosing expression (<code>MEM</code> if at the top level of the
address, <code>ADDRESS</code> for something that occurs in an
<code>address_operand</code>).  <var>index_code</var> is the code of the
corresponding index expression if <var>outer_code</var> is <code>PLUS</code>;
<code>SCRATCH</code> otherwise.  The mode may be <code>VOIDmode</code> for addresses
that appear outside a <code>MEM</code>, i.e., as an <code>address_operand</code>.
</p></dd></dl>

<dl>
<dt><a name="index-REGNO_005fOK_005fFOR_005fINDEX_005fP"></a>Macro: <strong>REGNO_OK_FOR_INDEX_P</strong> <em>(<var>num</var>)</em></dt>
<dd><p>A C expression which is nonzero if register number <var>num</var> is
suitable for use as an index register in operand addresses.  It may be
either a suitable hard register or a pseudo register that has been
allocated such a hard register.
</p>
<p>The difference between an index register and a base register is that
the index register may be scaled.  If an address involves the sum of
two registers, neither one of them scaled, then either one may be
labeled the &ldquo;base&rdquo; and the other the &ldquo;index&rdquo;; but whichever
labeling is used must fit the machine&rsquo;s constraints of which registers
may serve in each capacity.  The compiler will try both labelings,
looking for one that is valid, and will reload one or both registers
only if neither labeling works.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPREFERRED_005fRENAME_005fCLASS"></a>Target Hook: <em>reg_class_t</em> <strong>TARGET_PREFERRED_RENAME_CLASS</strong> <em>(reg_class_t <var>rclass</var>)</em></dt>
<dd><p>A target hook that places additional preference on the register class to use when it is necessary to rename a register in class <var>rclass</var> to another class, or perhaps <var>NO_REGS</var>, if no preferred register class is found or hook <code>preferred_rename_class</code> is not implemented. Sometimes returning a more restrictive class makes better code.  For example, on ARM, thumb-2 instructions using <code>LO_REGS</code> may be smaller than instructions using <code>GENERIC_REGS</code>.  By returning <code>LO_REGS</code> from <code>preferred_rename_class</code>, code size can be reduced.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPREFERRED_005fRELOAD_005fCLASS"></a>Target Hook: <em>reg_class_t</em> <strong>TARGET_PREFERRED_RELOAD_CLASS</strong> <em>(rtx <var>x</var>, reg_class_t <var>rclass</var>)</em></dt>
<dd><p>A target hook that places additional restrictions on the register class
to use when it is necessary to copy value <var>x</var> into a register in class
<var>rclass</var>.  The value is a register class; perhaps <var>rclass</var>, or perhaps
another, smaller class.
</p>
<p>The default version of this hook always returns value of <code>rclass</code> argument.
</p>
<p>Sometimes returning a more restrictive class makes better code.  For
example, on the 68000, when <var>x</var> is an integer constant that is in range
for a &lsquo;<samp>moveq</samp>&rsquo; instruction, the value of this macro is always
<code>DATA_REGS</code> as long as <var>rclass</var> includes the data registers.
Requiring a data register guarantees that a &lsquo;<samp>moveq</samp>&rsquo; will be used.
</p>
<p>One case where <code>TARGET_PREFERRED_RELOAD_CLASS</code> must not return
<var>rclass</var> is if <var>x</var> is a legitimate constant which cannot be
loaded into some register class.  By returning <code>NO_REGS</code> you can
force <var>x</var> into a memory location.  For example, rs6000 can load
immediate values into general-purpose registers, but does not have an
instruction for loading an immediate value into a floating-point
register, so <code>TARGET_PREFERRED_RELOAD_CLASS</code> returns <code>NO_REGS</code> when
<var>x</var> is a floating-point constant.  If the constant can&rsquo;t be loaded
into any kind of register, code generation will be better if
<code>TARGET_LEGITIMATE_CONSTANT_P</code> makes the constant illegitimate instead
of using <code>TARGET_PREFERRED_RELOAD_CLASS</code>.
</p>
<p>If an insn has pseudos in it after register allocation, reload will go
through the alternatives and call repeatedly <code>TARGET_PREFERRED_RELOAD_CLASS</code>
to find the best one.  Returning <code>NO_REGS</code>, in this case, makes
reload add a <code>!</code> in front of the constraint: the x86 back-end uses
this feature to discourage usage of 387 registers when math is done in
the SSE registers (and vice versa).
</p></dd></dl>

<dl>
<dt><a name="index-PREFERRED_005fRELOAD_005fCLASS"></a>Macro: <strong>PREFERRED_RELOAD_CLASS</strong> <em>(<var>x</var>, <var>class</var>)</em></dt>
<dd><p>A C expression that places additional restrictions on the register class
to use when it is necessary to copy value <var>x</var> into a register in class
<var>class</var>.  The value is a register class; perhaps <var>class</var>, or perhaps
another, smaller class.  On many machines, the following definition is
safe:
</p>
<div class="smallexample">
<pre class="smallexample">#define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
</pre></div>

<p>Sometimes returning a more restrictive class makes better code.  For
example, on the 68000, when <var>x</var> is an integer constant that is in range
for a &lsquo;<samp>moveq</samp>&rsquo; instruction, the value of this macro is always
<code>DATA_REGS</code> as long as <var>class</var> includes the data registers.
Requiring a data register guarantees that a &lsquo;<samp>moveq</samp>&rsquo; will be used.
</p>
<p>One case where <code>PREFERRED_RELOAD_CLASS</code> must not return
<var>class</var> is if <var>x</var> is a legitimate constant which cannot be
loaded into some register class.  By returning <code>NO_REGS</code> you can
force <var>x</var> into a memory location.  For example, rs6000 can load
immediate values into general-purpose registers, but does not have an
instruction for loading an immediate value into a floating-point
register, so <code>PREFERRED_RELOAD_CLASS</code> returns <code>NO_REGS</code> when
<var>x</var> is a floating-point constant.  If the constant can&rsquo;t be loaded
into any kind of register, code generation will be better if
<code>TARGET_LEGITIMATE_CONSTANT_P</code> makes the constant illegitimate instead
of using <code>TARGET_PREFERRED_RELOAD_CLASS</code>.
</p>
<p>If an insn has pseudos in it after register allocation, reload will go
through the alternatives and call repeatedly <code>PREFERRED_RELOAD_CLASS</code>
to find the best one.  Returning <code>NO_REGS</code>, in this case, makes
reload add a <code>!</code> in front of the constraint: the x86 back-end uses
this feature to discourage usage of 387 registers when math is done in
the SSE registers (and vice versa).
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPREFERRED_005fOUTPUT_005fRELOAD_005fCLASS"></a>Target Hook: <em>reg_class_t</em> <strong>TARGET_PREFERRED_OUTPUT_RELOAD_CLASS</strong> <em>(rtx <var>x</var>, reg_class_t <var>rclass</var>)</em></dt>
<dd><p>Like <code>TARGET_PREFERRED_RELOAD_CLASS</code>, but for output reloads instead of
input reloads.
</p>
<p>The default version of this hook always returns value of <code>rclass</code>
argument.
</p>
<p>You can also use <code>TARGET_PREFERRED_OUTPUT_RELOAD_CLASS</code> to discourage
reload from using some alternatives, like <code>TARGET_PREFERRED_RELOAD_CLASS</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LIMIT_005fRELOAD_005fCLASS"></a>Macro: <strong>LIMIT_RELOAD_CLASS</strong> <em>(<var>mode</var>, <var>class</var>)</em></dt>
<dd><p>A C expression that places additional restrictions on the register class
to use when it is necessary to be able to hold a value of mode
<var>mode</var> in a reload register for which class <var>class</var> would
ordinarily be used.
</p>
<p>Unlike <code>PREFERRED_RELOAD_CLASS</code>, this macro should be used when
there are certain modes that simply can&rsquo;t go in certain reload classes.
</p>
<p>The value is a register class; perhaps <var>class</var>, or perhaps another,
smaller class.
</p>
<p>Don&rsquo;t define this macro unless the target machine has limitations which
require the macro to do something nontrivial.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSECONDARY_005fRELOAD"></a>Target Hook: <em>reg_class_t</em> <strong>TARGET_SECONDARY_RELOAD</strong> <em>(bool <var>in_p</var>, rtx <var>x</var>, reg_class_t <var>reload_class</var>, enum machine_mode <var>reload_mode</var>, secondary_reload_info *<var>sri</var>)</em></dt>
<dd><p>Many machines have some registers that cannot be copied directly to or
from memory or even from other types of registers.  An example is the
&lsquo;<samp>MQ</samp>&rsquo; register, which on most machines, can only be copied to or
from general registers, but not memory.  Below, we shall be using the
term &rsquo;intermediate register&rsquo; when a move operation cannot be performed
directly, but has to be done by copying the source into the intermediate
register first, and then copying the intermediate register to the
destination.  An intermediate register always has the same mode as
source and destination.  Since it holds the actual value being copied,
reload might apply optimizations to re-use an intermediate register
and eliding the copy from the source when it can determine that the
intermediate register still holds the required value.
</p>
<p>Another kind of secondary reload is required on some machines which
allow copying all registers to and from memory, but require a scratch
register for stores to some memory locations (e.g., those with symbolic
address on the RT, and those with certain symbolic address on the SPARC
when compiling PIC).  Scratch registers need not have the same mode
as the value being copied, and usually hold a different value than
that being copied.  Special patterns in the md file are needed to
describe how the copy is performed with the help of the scratch register;
these patterns also describe the number, register class(es) and mode(s)
of the scratch register(s).
</p>
<p>In some cases, both an intermediate and a scratch register are required.
</p>
<p>For input reloads, this target hook is called with nonzero <var>in_p</var>,
and <var>x</var> is an rtx that needs to be copied to a register of class
<var>reload_class</var> in <var>reload_mode</var>.  For output reloads, this target
hook is called with zero <var>in_p</var>, and a register of class <var>reload_class</var>
needs to be copied to rtx <var>x</var> in <var>reload_mode</var>.
</p>
<p>If copying a register of <var>reload_class</var> from/to <var>x</var> requires
an intermediate register, the hook <code>secondary_reload</code> should
return the register class required for this intermediate register.
If no intermediate register is required, it should return NO_REGS.
If more than one intermediate register is required, describe the one
that is closest in the copy chain to the reload register.
</p>
<p>If scratch registers are needed, you also have to describe how to
perform the copy from/to the reload register to/from this
closest intermediate register.  Or if no intermediate register is
required, but still a scratch register is needed, describe the
copy  from/to the reload register to/from the reload operand <var>x</var>.
</p>
<p>You do this by setting <code>sri-&gt;icode</code> to the instruction code of a pattern
in the md file which performs the move.  Operands 0 and 1 are the output
and input of this copy, respectively.  Operands from operand 2 onward are
for scratch operands.  These scratch operands must have a mode, and a
single-register-class
output constraint.
</p>
<p>When an intermediate register is used, the <code>secondary_reload</code>
hook will be called again to determine how to copy the intermediate
register to/from the reload operand <var>x</var>, so your hook must also
have code to handle the register class of the intermediate operand.
</p>


<p><var>x</var> might be a pseudo-register or a <code>subreg</code> of a
pseudo-register, which could either be in a hard register or in memory.
Use <code>true_regnum</code> to find out; it will return -1 if the pseudo is
in memory and the hard register number if it is in a register.
</p>
<p>Scratch operands in memory (constraint <code>&quot;=m&quot;</code> / <code>&quot;=&amp;m&quot;</code>) are
currently not supported.  For the time being, you will have to continue
to use <code>SECONDARY_MEMORY_NEEDED</code> for that purpose.
</p>
<p><code>copy_cost</code> also uses this target hook to find out how values are
copied.  If you want it to include some extra cost for the need to allocate
(a) scratch register(s), set <code>sri-&gt;extra_cost</code> to the additional cost.
Or if two dependent moves are supposed to have a lower cost than the sum
of the individual moves due to expected fortuitous scheduling and/or special
forwarding logic, you can set <code>sri-&gt;extra_cost</code> to a negative amount.
</p></dd></dl>

<dl>
<dt><a name="index-SECONDARY_005fRELOAD_005fCLASS"></a>Macro: <strong>SECONDARY_RELOAD_CLASS</strong> <em>(<var>class</var>, <var>mode</var>, <var>x</var>)</em></dt>
<dt><a name="index-SECONDARY_005fINPUT_005fRELOAD_005fCLASS"></a>Macro: <strong>SECONDARY_INPUT_RELOAD_CLASS</strong> <em>(<var>class</var>, <var>mode</var>, <var>x</var>)</em></dt>
<dt><a name="index-SECONDARY_005fOUTPUT_005fRELOAD_005fCLASS"></a>Macro: <strong>SECONDARY_OUTPUT_RELOAD_CLASS</strong> <em>(<var>class</var>, <var>mode</var>, <var>x</var>)</em></dt>
<dd><p>These macros are obsolete, new ports should use the target hook
<code>TARGET_SECONDARY_RELOAD</code> instead.
</p>
<p>These are obsolete macros, replaced by the <code>TARGET_SECONDARY_RELOAD</code>
target hook.  Older ports still define these macros to indicate to the
reload phase that it may
need to allocate at least one register for a reload in addition to the
register to contain the data.  Specifically, if copying <var>x</var> to a
register <var>class</var> in <var>mode</var> requires an intermediate register,
you were supposed to define <code>SECONDARY_INPUT_RELOAD_CLASS</code> to return the
largest register class all of whose registers can be used as
intermediate registers or scratch registers.
</p>
<p>If copying a register <var>class</var> in <var>mode</var> to <var>x</var> requires an
intermediate or scratch register, <code>SECONDARY_OUTPUT_RELOAD_CLASS</code>
was supposed to be defined be defined to return the largest register
class required.  If the
requirements for input and output reloads were the same, the macro
<code>SECONDARY_RELOAD_CLASS</code> should have been used instead of defining both
macros identically.
</p>
<p>The values returned by these macros are often <code>GENERAL_REGS</code>.
Return <code>NO_REGS</code> if no spare register is needed; i.e., if <var>x</var>
can be directly copied to or from a register of <var>class</var> in
<var>mode</var> without requiring a scratch register.  Do not define this
macro if it would always return <code>NO_REGS</code>.
</p>
<p>If a scratch register is required (either with or without an
intermediate register), you were supposed to define patterns for
&lsquo;<samp>reload_in<var>m</var></samp>&rsquo; or &lsquo;<samp>reload_out<var>m</var></samp>&rsquo;, as required
(see <a href="#Standard-Names">Standard Names</a>.  These patterns, which were normally
implemented with a <code>define_expand</code>, should be similar to the
&lsquo;<samp>mov<var>m</var></samp>&rsquo; patterns, except that operand 2 is the scratch
register.
</p>
<p>These patterns need constraints for the reload register and scratch
register that
contain a single register class.  If the original reload register (whose
class is <var>class</var>) can meet the constraint given in the pattern, the
value returned by these macros is used for the class of the scratch
register.  Otherwise, two additional reload registers are required.
Their classes are obtained from the constraints in the insn pattern.
</p>
<p><var>x</var> might be a pseudo-register or a <code>subreg</code> of a
pseudo-register, which could either be in a hard register or in memory.
Use <code>true_regnum</code> to find out; it will return -1 if the pseudo is
in memory and the hard register number if it is in a register.
</p>
<p>These macros should not be used in the case where a particular class of
registers can only be copied to memory and not to another class of
registers.  In that case, secondary reload registers are not needed and
would not be helpful.  Instead, a stack location must be used to perform
the copy and the <code>mov<var>m</var></code> pattern should use memory as an
intermediate storage.  This case often occurs between floating-point and
general registers.
</p></dd></dl>

<dl>
<dt><a name="index-SECONDARY_005fMEMORY_005fNEEDED"></a>Macro: <strong>SECONDARY_MEMORY_NEEDED</strong> <em>(<var>class1</var>, <var>class2</var>, <var>m</var>)</em></dt>
<dd><p>Certain machines have the property that some registers cannot be copied
to some other registers without using memory.  Define this macro on
those machines to be a C expression that is nonzero if objects of mode
<var>m</var> in registers of <var>class1</var> can only be copied to registers of
class <var>class2</var> by storing a register of <var>class1</var> into memory
and loading that memory location into a register of <var>class2</var>.
</p>
<p>Do not define this macro if its value would always be zero.
</p></dd></dl>

<dl>
<dt><a name="index-SECONDARY_005fMEMORY_005fNEEDED_005fRTX"></a>Macro: <strong>SECONDARY_MEMORY_NEEDED_RTX</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>Normally when <code>SECONDARY_MEMORY_NEEDED</code> is defined, the compiler
allocates a stack slot for a memory location needed for register copies.
If this macro is defined, the compiler instead uses the memory location
defined by this macro.
</p>
<p>Do not define this macro if you do not define
<code>SECONDARY_MEMORY_NEEDED</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SECONDARY_005fMEMORY_005fNEEDED_005fMODE"></a>Macro: <strong>SECONDARY_MEMORY_NEEDED_MODE</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>When the compiler needs a secondary memory location to copy between two
registers of mode <var>mode</var>, it normally allocates sufficient memory to
hold a quantity of <code>BITS_PER_WORD</code> bits and performs the store and
load operations in a mode that many bits wide and whose class is the
same as that of <var>mode</var>.
</p>
<p>This is right thing to do on most machines because it ensures that all
bits of the register are copied and prevents accesses to the registers
in a narrower mode, which some machines prohibit for floating-point
registers.
</p>
<p>However, this default behavior is not correct on some machines, such as
the DEC Alpha, that store short integers in floating-point registers
differently than in integer registers.  On those machines, the default
widening will not work correctly and you must define this macro to
suppress that widening in some cases.  See the file <samp>alpha.h</samp> for
details.
</p>
<p>Do not define this macro if you do not define
<code>SECONDARY_MEMORY_NEEDED</code> or if widening <var>mode</var> to a mode that
is <code>BITS_PER_WORD</code> bits wide is correct for your machine.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCLASS_005fLIKELY_005fSPILLED_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_CLASS_LIKELY_SPILLED_P</strong> <em>(reg_class_t <var>rclass</var>)</em></dt>
<dd><p>A target hook which returns <code>true</code> if pseudos that have been assigned
to registers of class <var>rclass</var> would likely be spilled because
registers of <var>rclass</var> are needed for spill registers.
</p>
<p>The default version of this target hook returns <code>true</code> if <var>rclass</var>
has exactly one register and <code>false</code> otherwise.  On most machines, this
default should be used.  For generally register-starved machines, such as
i386, or machines with right register constraints, such as SH, this hook
can be used to avoid excessive spilling.
</p>
<p>This hook is also used by some of the global intra-procedural code
transformations to throtle code motion, to avoid increasing register
pressure.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCLASS_005fMAX_005fNREGS"></a>Target Hook: <em>unsigned char</em> <strong>TARGET_CLASS_MAX_NREGS</strong> <em>(reg_class_t <var>rclass</var>, enum machine_mode <var>mode</var>)</em></dt>
<dd><p>A target hook returns the maximum number of consecutive registers
of class <var>rclass</var> needed to hold a value of mode <var>mode</var>.
</p>
<p>This is closely related to the macro <code>HARD_REGNO_NREGS</code>.  In fact,
the value returned by <code>TARGET_CLASS_MAX_NREGS (<var>rclass</var>,
<var>mode</var>)</code> target hook should be the maximum value of
<code>HARD_REGNO_NREGS (<var>regno</var>, <var>mode</var>)</code> for all <var>regno</var>
values in the class <var>rclass</var>.
</p>
<p>This target hook helps control the handling of multiple-word values
in the reload pass.
</p>
<p>The default version of this target hook returns the size of <var>mode</var>
in words.
</p></dd></dl>

<dl>
<dt><a name="index-CLASS_005fMAX_005fNREGS"></a>Macro: <strong>CLASS_MAX_NREGS</strong> <em>(<var>class</var>, <var>mode</var>)</em></dt>
<dd><p>A C expression for the maximum number of consecutive registers
of class <var>class</var> needed to hold a value of mode <var>mode</var>.
</p>
<p>This is closely related to the macro <code>HARD_REGNO_NREGS</code>.  In fact,
the value of the macro <code>CLASS_MAX_NREGS (<var>class</var>, <var>mode</var>)</code>
should be the maximum value of <code>HARD_REGNO_NREGS (<var>regno</var>,
<var>mode</var>)</code> for all <var>regno</var> values in the class <var>class</var>.
</p>
<p>This macro helps control the handling of multiple-word values
in the reload pass.
</p></dd></dl>

<dl>
<dt><a name="index-CANNOT_005fCHANGE_005fMODE_005fCLASS"></a>Macro: <strong>CANNOT_CHANGE_MODE_CLASS</strong> <em>(<var>from</var>, <var>to</var>, <var>class</var>)</em></dt>
<dd><p>If defined, a C expression that returns nonzero for a <var>class</var> for which
a change from mode <var>from</var> to mode <var>to</var> is invalid.
</p>
<p>For the example, loading 32-bit integer or floating-point objects into
floating-point registers on the Alpha extends them to 64 bits.
Therefore loading a 64-bit object and then storing it as a 32-bit object
does not store the low-order 32 bits, as would be the case for a normal
register.  Therefore, <samp>alpha.h</samp> defines <code>CANNOT_CHANGE_MODE_CLASS</code>
as below:
</p>
<div class="smallexample">
<pre class="smallexample">#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
  (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \
   ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0)
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-TARGET_005fLRA_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_LRA_P</strong> <em>(void)</em></dt>
<dd><p>A target hook which returns true if we use LRA instead of reload pass.  It means that LRA was ported to the target.    The default version of this target hook returns always false.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fREGISTER_005fPRIORITY"></a>Target Hook: <em>int</em> <strong>TARGET_REGISTER_PRIORITY</strong> <em>(int)</em></dt>
<dd><p>A target hook which returns the register priority number to which the  register <var>hard_regno</var> belongs to.  The bigger the number, the  more preferable the hard register usage (when all other conditions are  the same).  This hook can be used to prefer some hard register over  others in LRA.  For example, some x86-64 register usage needs  additional prefix which makes instructions longer.  The hook can  return lower priority number for such registers make them less favorable  and as result making the generated code smaller.    The default version of this target hook returns always zero.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDIFFERENT_005fADDR_005fDISPLACEMENT_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_DIFFERENT_ADDR_DISPLACEMENT_P</strong> <em>(void)</em></dt>
<dd><p>A target hook which returns true if an address with the same structure  can have different maximal legitimate displacement.  For example, the  displacement can depend on memory mode or on operand combinations in  the insn.    The default version of this target hook returns always false.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSPILL_005fCLASS"></a>Target Hook: <em>reg_class_t</em> <strong>TARGET_SPILL_CLASS</strong> <em>(reg_class_t, enum <var>machine_mode</var>)</em></dt>
<dd><p>This hook defines a class of registers which could be used for spilling  pseudos of the given mode and class, or <code>NO_REGS</code> if only memory  should be used.  Not defining this hook is equivalent to returning  <code>NO_REGS</code> for all inputs.
</p></dd></dl>

<hr>
<a name="Old-Constraints"></a>
<div class="header">
<p>
Next: <a href="#Stack-and-Calling" accesskey="n" rel="next">Stack and Calling</a>, Previous: <a href="#Register-Classes" accesskey="p" rel="prev">Register Classes</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Obsolete-Macros-for-Defining-Constraints"></a>
<h3 class="section">17.9 Obsolete Macros for Defining Constraints</h3>
<a name="index-defining-constraints_002c-obsolete-method"></a>
<a name="index-constraints_002c-defining_002c-obsolete-method"></a>

<p>Machine-specific constraints can be defined with these macros instead
of the machine description constructs described in <a href="#Define-Constraints">Define Constraints</a>.  This mechanism is obsolete.  New ports should not use
it; old ports should convert to the new mechanism.
</p>
<dl>
<dt><a name="index-CONSTRAINT_005fLEN"></a>Macro: <strong>CONSTRAINT_LEN</strong> <em>(<var>char</var>, <var>str</var>)</em></dt>
<dd><p>For the constraint at the start of <var>str</var>, which starts with the letter
<var>c</var>, return the length.  This allows you to have register class /
constant / extra constraints that are longer than a single letter;
you don&rsquo;t need to define this macro if you can do with single-letter
constraints only.  The definition of this macro should use
DEFAULT_CONSTRAINT_LEN for all the characters that you don&rsquo;t want
to handle specially.
There are some sanity checks in genoutput.c that check the constraint lengths
for the md file, so you can also use this macro to help you while you are
transitioning from a byzantine single-letter-constraint scheme: when you
return a negative length for a constraint you want to re-use, genoutput
will complain about every instance where it is used in the md file.
</p></dd></dl>

<dl>
<dt><a name="index-REG_005fCLASS_005fFROM_005fLETTER"></a>Macro: <strong>REG_CLASS_FROM_LETTER</strong> <em>(<var>char</var>)</em></dt>
<dd><p>A C expression which defines the machine-dependent operand constraint
letters for register classes.  If <var>char</var> is such a letter, the
value should be the register class corresponding to it.  Otherwise,
the value should be <code>NO_REGS</code>.  The register letter &lsquo;<samp>r</samp>&rsquo;,
corresponding to class <code>GENERAL_REGS</code>, will not be passed
to this macro; you do not need to handle it.
</p></dd></dl>

<dl>
<dt><a name="index-REG_005fCLASS_005fFROM_005fCONSTRAINT"></a>Macro: <strong>REG_CLASS_FROM_CONSTRAINT</strong> <em>(<var>char</var>, <var>str</var>)</em></dt>
<dd><p>Like <code>REG_CLASS_FROM_LETTER</code>, but you also get the constraint string
passed in <var>str</var>, so that you can use suffixes to distinguish between
different variants.
</p></dd></dl>

<dl>
<dt><a name="index-CONST_005fOK_005fFOR_005fLETTER_005fP"></a>Macro: <strong>CONST_OK_FOR_LETTER_P</strong> <em>(<var>value</var>, <var>c</var>)</em></dt>
<dd><p>A C expression that defines the machine-dependent operand constraint
letters (&lsquo;<samp>I</samp>&rsquo;, &lsquo;<samp>J</samp>&rsquo;, &lsquo;<samp>K</samp>&rsquo;, &hellip; &lsquo;<samp>P</samp>&rsquo;) that specify
particular ranges of integer values.  If <var>c</var> is one of those
letters, the expression should check that <var>value</var>, an integer, is in
the appropriate range and return 1 if so, 0 otherwise.  If <var>c</var> is
not one of those letters, the value should be 0 regardless of
<var>value</var>.
</p></dd></dl>

<dl>
<dt><a name="index-CONST_005fOK_005fFOR_005fCONSTRAINT_005fP"></a>Macro: <strong>CONST_OK_FOR_CONSTRAINT_P</strong> <em>(<var>value</var>, <var>c</var>, <var>str</var>)</em></dt>
<dd><p>Like <code>CONST_OK_FOR_LETTER_P</code>, but you also get the constraint
string passed in <var>str</var>, so that you can use suffixes to distinguish
between different variants.
</p></dd></dl>

<dl>
<dt><a name="index-CONST_005fDOUBLE_005fOK_005fFOR_005fLETTER_005fP"></a>Macro: <strong>CONST_DOUBLE_OK_FOR_LETTER_P</strong> <em>(<var>value</var>, <var>c</var>)</em></dt>
<dd><p>A C expression that defines the machine-dependent operand constraint
letters that specify particular ranges of <code>const_double</code> values
(&lsquo;<samp>G</samp>&rsquo; or &lsquo;<samp>H</samp>&rsquo;).
</p>
<p>If <var>c</var> is one of those letters, the expression should check that
<var>value</var>, an RTX of code <code>const_double</code>, is in the appropriate
range and return 1 if so, 0 otherwise.  If <var>c</var> is not one of those
letters, the value should be 0 regardless of <var>value</var>.
</p>
<p><code>const_double</code> is used for all floating-point constants and for
<code>DImode</code> fixed-point constants.  A given letter can accept either
or both kinds of values.  It can use <code>GET_MODE</code> to distinguish
between these kinds.
</p></dd></dl>

<dl>
<dt><a name="index-CONST_005fDOUBLE_005fOK_005fFOR_005fCONSTRAINT_005fP"></a>Macro: <strong>CONST_DOUBLE_OK_FOR_CONSTRAINT_P</strong> <em>(<var>value</var>, <var>c</var>, <var>str</var>)</em></dt>
<dd><p>Like <code>CONST_DOUBLE_OK_FOR_LETTER_P</code>, but you also get the constraint
string passed in <var>str</var>, so that you can use suffixes to distinguish
between different variants.
</p></dd></dl>

<dl>
<dt><a name="index-EXTRA_005fCONSTRAINT"></a>Macro: <strong>EXTRA_CONSTRAINT</strong> <em>(<var>value</var>, <var>c</var>)</em></dt>
<dd><p>A C expression that defines the optional machine-dependent constraint
letters that can be used to segregate specific types of operands, usually
memory references, for the target machine.  Any letter that is not
elsewhere defined and not matched by <code>REG_CLASS_FROM_LETTER</code> /
<code>REG_CLASS_FROM_CONSTRAINT</code>
may be used.  Normally this macro will not be defined.
</p>
<p>If it is required for a particular target machine, it should return 1
if <var>value</var> corresponds to the operand type represented by the
constraint letter <var>c</var>.  If <var>c</var> is not defined as an extra
constraint, the value returned should be 0 regardless of <var>value</var>.
</p>
<p>For example, on the ROMP, load instructions cannot have their output
in r0 if the memory reference contains a symbolic address.  Constraint
letter &lsquo;<samp>Q</samp>&rsquo; is defined as representing a memory address that does
<em>not</em> contain a symbolic address.  An alternative is specified with
a &lsquo;<samp>Q</samp>&rsquo; constraint on the input and &lsquo;<samp>r</samp>&rsquo; on the output.  The next
alternative specifies &lsquo;<samp>m</samp>&rsquo; on the input and a register class that
does not include r0 on the output.
</p></dd></dl>

<dl>
<dt><a name="index-EXTRA_005fCONSTRAINT_005fSTR"></a>Macro: <strong>EXTRA_CONSTRAINT_STR</strong> <em>(<var>value</var>, <var>c</var>, <var>str</var>)</em></dt>
<dd><p>Like <code>EXTRA_CONSTRAINT</code>, but you also get the constraint string passed
in <var>str</var>, so that you can use suffixes to distinguish between different
variants.
</p></dd></dl>

<dl>
<dt><a name="index-EXTRA_005fMEMORY_005fCONSTRAINT"></a>Macro: <strong>EXTRA_MEMORY_CONSTRAINT</strong> <em>(<var>c</var>, <var>str</var>)</em></dt>
<dd><p>A C expression that defines the optional machine-dependent constraint
letters, amongst those accepted by <code>EXTRA_CONSTRAINT</code>, that should
be treated like memory constraints by the reload pass.
</p>
<p>It should return 1 if the operand type represented by the constraint
at the start of <var>str</var>, the first letter of which is the letter <var>c</var>,
comprises a subset of all memory references including
all those whose address is simply a base register.  This allows the reload
pass to reload an operand, if it does not directly correspond to the operand
type of <var>c</var>, by copying its address into a base register.
</p>
<p>For example, on the S/390, some instructions do not accept arbitrary
memory references, but only those that do not make use of an index
register.  The constraint letter &lsquo;<samp>Q</samp>&rsquo; is defined via
<code>EXTRA_CONSTRAINT</code> as representing a memory address of this type.
If the letter &lsquo;<samp>Q</samp>&rsquo; is marked as <code>EXTRA_MEMORY_CONSTRAINT</code>,
a &lsquo;<samp>Q</samp>&rsquo; constraint can handle any memory operand, because the
reload pass knows it can be reloaded by copying the memory address
into a base register if required.  This is analogous to the way
an &lsquo;<samp>o</samp>&rsquo; constraint can handle any memory operand.
</p></dd></dl>

<dl>
<dt><a name="index-EXTRA_005fADDRESS_005fCONSTRAINT"></a>Macro: <strong>EXTRA_ADDRESS_CONSTRAINT</strong> <em>(<var>c</var>, <var>str</var>)</em></dt>
<dd><p>A C expression that defines the optional machine-dependent constraint
letters, amongst those accepted by <code>EXTRA_CONSTRAINT</code> /
<code>EXTRA_CONSTRAINT_STR</code>, that should
be treated like address constraints by the reload pass.
</p>
<p>It should return 1 if the operand type represented by the constraint
at the start of <var>str</var>, which starts with the letter <var>c</var>, comprises
a subset of all memory addresses including
all those that consist of just a base register.  This allows the reload
pass to reload an operand, if it does not directly correspond to the operand
type of <var>str</var>, by copying it into a base register.
</p>
<p>Any constraint marked as <code>EXTRA_ADDRESS_CONSTRAINT</code> can only
be used with the <code>address_operand</code> predicate.  It is treated
analogously to the &lsquo;<samp>p</samp>&rsquo; constraint.
</p></dd></dl>

<hr>
<a name="Stack-and-Calling"></a>
<div class="header">
<p>
Next: <a href="#Varargs" accesskey="n" rel="next">Varargs</a>, Previous: <a href="#Old-Constraints" accesskey="p" rel="prev">Old Constraints</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Stack-Layout-and-Calling-Conventions"></a>
<h3 class="section">17.10 Stack Layout and Calling Conventions</h3>
<a name="index-calling-conventions"></a>

<p>This describes the stack layout and calling conventions.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Frame-Layout" accesskey="1">Frame Layout</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Exception-Handling" accesskey="2">Exception Handling</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Stack-Checking" accesskey="3">Stack Checking</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Frame-Registers" accesskey="4">Frame Registers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Elimination" accesskey="5">Elimination</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Stack-Arguments" accesskey="6">Stack Arguments</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Register-Arguments" accesskey="7">Register Arguments</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Scalar-Return" accesskey="8">Scalar Return</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Aggregate-Return" accesskey="9">Aggregate Return</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Caller-Saves">Caller Saves</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Function-Entry">Function Entry</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Profiling">Profiling</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Tail-Calls">Tail Calls</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Stack-Smashing-Protection">Stack Smashing Protection</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>

<hr>
<a name="Frame-Layout"></a>
<div class="header">
<p>
Next: <a href="#Exception-Handling" accesskey="n" rel="next">Exception Handling</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Basic-Stack-Layout"></a>
<h4 class="subsection">17.10.1 Basic Stack Layout</h4>
<a name="index-stack-frame-layout"></a>
<a name="index-frame-layout"></a>

<p>Here is the basic stack layout.
</p>
<dl>
<dt><a name="index-STACK_005fGROWS_005fDOWNWARD"></a>Macro: <strong>STACK_GROWS_DOWNWARD</strong></dt>
<dd><p>Define this macro if pushing a word onto the stack moves the stack
pointer to a smaller address.
</p>
<p>When we say, &ldquo;define this macro if &hellip;&rdquo;, it means that the
compiler checks this macro only with <code>#ifdef</code> so the precise
definition used does not matter.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fPUSH_005fCODE"></a>Macro: <strong>STACK_PUSH_CODE</strong></dt>
<dd><p>This macro defines the operation used when something is pushed
on the stack.  In RTL, a push operation will be
<code>(set (mem (STACK_PUSH_CODE (reg sp))) &hellip;)</code>
</p>
<p>The choices are <code>PRE_DEC</code>, <code>POST_DEC</code>, <code>PRE_INC</code>,
and <code>POST_INC</code>.  Which of these is correct depends on
the stack direction and on whether the stack pointer points
to the last item on the stack or whether it points to the
space for the next item on the stack.
</p>
<p>The default is <code>PRE_DEC</code> when <code>STACK_GROWS_DOWNWARD</code> is
defined, which is almost always right, and <code>PRE_INC</code> otherwise,
which is often wrong.
</p></dd></dl>

<dl>
<dt><a name="index-FRAME_005fGROWS_005fDOWNWARD"></a>Macro: <strong>FRAME_GROWS_DOWNWARD</strong></dt>
<dd><p>Define this macro to nonzero value if the addresses of local variable slots
are at negative offsets from the frame pointer.
</p></dd></dl>

<dl>
<dt><a name="index-ARGS_005fGROW_005fDOWNWARD"></a>Macro: <strong>ARGS_GROW_DOWNWARD</strong></dt>
<dd><p>Define this macro if successive arguments to a function occupy decreasing
addresses on the stack.
</p></dd></dl>

<dl>
<dt><a name="index-STARTING_005fFRAME_005fOFFSET"></a>Macro: <strong>STARTING_FRAME_OFFSET</strong></dt>
<dd><p>Offset from the frame pointer to the first local variable slot to be allocated.
</p>
<p>If <code>FRAME_GROWS_DOWNWARD</code>, find the next slot&rsquo;s offset by
subtracting the first slot&rsquo;s length from <code>STARTING_FRAME_OFFSET</code>.
Otherwise, it is found by adding the length of the first slot to the
value <code>STARTING_FRAME_OFFSET</code>.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fALIGNMENT_005fNEEDED"></a>Macro: <strong>STACK_ALIGNMENT_NEEDED</strong></dt>
<dd><p>Define to zero to disable final alignment of the stack during reload.
The nonzero default for this macro is suitable for most ports.
</p>
<p>On ports where <code>STARTING_FRAME_OFFSET</code> is nonzero or where there
is a register save block following the local block that doesn&rsquo;t require
alignment to <code>STACK_BOUNDARY</code>, it may be beneficial to disable
stack alignment and do it in the backend.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fPOINTER_005fOFFSET"></a>Macro: <strong>STACK_POINTER_OFFSET</strong></dt>
<dd><p>Offset from the stack pointer register to the first location at which
outgoing arguments are placed.  If not specified, the default value of
zero is used.  This is the proper value for most machines.
</p>
<p>If <code>ARGS_GROW_DOWNWARD</code>, this is the offset to the location above
the first location at which outgoing arguments are placed.
</p></dd></dl>

<dl>
<dt><a name="index-FIRST_005fPARM_005fOFFSET"></a>Macro: <strong>FIRST_PARM_OFFSET</strong> <em>(<var>fundecl</var>)</em></dt>
<dd><p>Offset from the argument pointer register to the first argument&rsquo;s
address.  On some machines it may depend on the data type of the
function.
</p>
<p>If <code>ARGS_GROW_DOWNWARD</code>, this is the offset to the location above
the first argument&rsquo;s address.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fDYNAMIC_005fOFFSET"></a>Macro: <strong>STACK_DYNAMIC_OFFSET</strong> <em>(<var>fundecl</var>)</em></dt>
<dd><p>Offset from the stack pointer register to an item dynamically allocated
on the stack, e.g., by <code>alloca</code>.
</p>
<p>The default value for this macro is <code>STACK_POINTER_OFFSET</code> plus the
length of the outgoing arguments.  The default is correct for most
machines.  See <samp>function.c</samp> for details.
</p></dd></dl>

<dl>
<dt><a name="index-INITIAL_005fFRAME_005fADDRESS_005fRTX"></a>Macro: <strong>INITIAL_FRAME_ADDRESS_RTX</strong></dt>
<dd><p>A C expression whose value is RTL representing the address of the initial
stack frame. This address is passed to <code>RETURN_ADDR_RTX</code> and
<code>DYNAMIC_CHAIN_ADDRESS</code>.  If you don&rsquo;t define this macro, a reasonable
default value will be used.  Define this macro in order to make frame pointer
elimination work in the presence of <code>__builtin_frame_address (count)</code> and
<code>__builtin_return_address (count)</code> for <code>count</code> not equal to zero.
</p></dd></dl>

<dl>
<dt><a name="index-DYNAMIC_005fCHAIN_005fADDRESS"></a>Macro: <strong>DYNAMIC_CHAIN_ADDRESS</strong> <em>(<var>frameaddr</var>)</em></dt>
<dd><p>A C expression whose value is RTL representing the address in a stack
frame where the pointer to the caller&rsquo;s frame is stored.  Assume that
<var>frameaddr</var> is an RTL expression for the address of the stack frame
itself.
</p>
<p>If you don&rsquo;t define this macro, the default is to return the value
of <var>frameaddr</var>&mdash;that is, the stack frame address is also the
address of the stack word that points to the previous frame.
</p></dd></dl>

<dl>
<dt><a name="index-SETUP_005fFRAME_005fADDRESSES"></a>Macro: <strong>SETUP_FRAME_ADDRESSES</strong></dt>
<dd><p>If defined, a C expression that produces the machine-specific code to
setup the stack so that arbitrary frames can be accessed.  For example,
on the SPARC, we must flush all of the register windows to the stack
before we can access arbitrary stack frames.  You will seldom need to
define this macro.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fBUILTIN_005fSETJMP_005fFRAME_005fVALUE"></a>Target Hook: <em>rtx</em> <strong>TARGET_BUILTIN_SETJMP_FRAME_VALUE</strong> <em>(void)</em></dt>
<dd><p>This target hook should return an rtx that is used to store
the address of the current frame into the built in <code>setjmp</code> buffer.
The default value, <code>virtual_stack_vars_rtx</code>, is correct for most
machines.  One reason you may need to define this target hook is if
<code>hard_frame_pointer_rtx</code> is the appropriate value on your machine.
</p></dd></dl>

<dl>
<dt><a name="index-FRAME_005fADDR_005fRTX"></a>Macro: <strong>FRAME_ADDR_RTX</strong> <em>(<var>frameaddr</var>)</em></dt>
<dd><p>A C expression whose value is RTL representing the value of the frame
address for the current frame.  <var>frameaddr</var> is the frame pointer
of the current frame.  This is used for __builtin_frame_address.
You need only define this macro if the frame address is not the same
as the frame pointer.  Most machines do not need to define it.
</p></dd></dl>

<dl>
<dt><a name="index-RETURN_005fADDR_005fRTX"></a>Macro: <strong>RETURN_ADDR_RTX</strong> <em>(<var>count</var>, <var>frameaddr</var>)</em></dt>
<dd><p>A C expression whose value is RTL representing the value of the return
address for the frame <var>count</var> steps up from the current frame, after
the prologue.  <var>frameaddr</var> is the frame pointer of the <var>count</var>
frame, or the frame pointer of the <var>count</var> - 1 frame if
<code>RETURN_ADDR_IN_PREVIOUS_FRAME</code> is defined.
</p>
<p>The value of the expression must always be the correct address when
<var>count</var> is zero, but may be <code>NULL_RTX</code> if there is no way to
determine the return address of other frames.
</p></dd></dl>

<dl>
<dt><a name="index-RETURN_005fADDR_005fIN_005fPREVIOUS_005fFRAME"></a>Macro: <strong>RETURN_ADDR_IN_PREVIOUS_FRAME</strong></dt>
<dd><p>Define this if the return address of a particular stack frame is accessed
from the frame pointer of the previous stack frame.
</p></dd></dl>

<dl>
<dt><a name="index-INCOMING_005fRETURN_005fADDR_005fRTX"></a>Macro: <strong>INCOMING_RETURN_ADDR_RTX</strong></dt>
<dd><p>A C expression whose value is RTL representing the location of the
incoming return address at the beginning of any function, before the
prologue.  This RTL is either a <code>REG</code>, indicating that the return
value is saved in &lsquo;<samp>REG</samp>&rsquo;, or a <code>MEM</code> representing a location in
the stack.
</p>
<p>You only need to define this macro if you want to support call frame
debugging information like that provided by DWARF 2.
</p>
<p>If this RTL is a <code>REG</code>, you should also define
<code>DWARF_FRAME_RETURN_COLUMN</code> to <code>DWARF_FRAME_REGNUM (REGNO)</code>.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF_005fALT_005fFRAME_005fRETURN_005fCOLUMN"></a>Macro: <strong>DWARF_ALT_FRAME_RETURN_COLUMN</strong></dt>
<dd><p>A C expression whose value is an integer giving a DWARF 2 column
number that may be used as an alternative return column.  The column
must not correspond to any gcc hard register (that is, it must not
be in the range of <code>DWARF_FRAME_REGNUM</code>).
</p>
<p>This macro can be useful if <code>DWARF_FRAME_RETURN_COLUMN</code> is set to a
general register, but an alternative column needs to be used for signal
frames.  Some targets have also used different frame return columns
over time.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF_005fZERO_005fREG"></a>Macro: <strong>DWARF_ZERO_REG</strong></dt>
<dd><p>A C expression whose value is an integer giving a DWARF 2 register
number that is considered to always have the value zero.  This should
only be defined if the target has an architected zero register, and
someone decided it was a good idea to use that register number to
terminate the stack backtrace.  New ports should avoid this.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDWARF_005fHANDLE_005fFRAME_005fUNSPEC"></a>Target Hook: <em>void</em> <strong>TARGET_DWARF_HANDLE_FRAME_UNSPEC</strong> <em>(const char *<var>label</var>, rtx <var>pattern</var>, int <var>index</var>)</em></dt>
<dd><p>This target hook allows the backend to emit frame-related insns that
contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame debugging
info engine will invoke it on insns of the form
</p><div class="smallexample">
<pre class="smallexample">(set (reg) (unspec [&hellip;] UNSPEC_INDEX))
</pre></div>
<p>and
</p><div class="smallexample">
<pre class="smallexample">(set (reg) (unspec_volatile [&hellip;] UNSPECV_INDEX)).
</pre></div>
<p>to let the backend emit the call frame instructions.  <var>label</var> is
the CFI label attached to the insn, <var>pattern</var> is the pattern of
the insn and <var>index</var> is <code>UNSPEC_INDEX</code> or <code>UNSPECV_INDEX</code>.
</p></dd></dl>

<dl>
<dt><a name="index-INCOMING_005fFRAME_005fSP_005fOFFSET"></a>Macro: <strong>INCOMING_FRAME_SP_OFFSET</strong></dt>
<dd><p>A C expression whose value is an integer giving the offset, in bytes,
from the value of the stack pointer register to the top of the stack
frame at the beginning of any function, before the prologue.  The top of
the frame is defined to be the value of the stack pointer in the
previous frame, just before the call instruction.
</p>
<p>You only need to define this macro if you want to support call frame
debugging information like that provided by DWARF 2.
</p></dd></dl>

<dl>
<dt><a name="index-ARG_005fPOINTER_005fCFA_005fOFFSET"></a>Macro: <strong>ARG_POINTER_CFA_OFFSET</strong> <em>(<var>fundecl</var>)</em></dt>
<dd><p>A C expression whose value is an integer giving the offset, in bytes,
from the argument pointer to the canonical frame address (cfa).  The
final value should coincide with that calculated by
<code>INCOMING_FRAME_SP_OFFSET</code>.  Which is unfortunately not usable
during virtual register instantiation.
</p>
<p>The default value for this macro is
<code>FIRST_PARM_OFFSET (fundecl) + crtl-&gt;args.pretend_args_size</code>,
which is correct for most machines; in general, the arguments are found
immediately before the stack frame.  Note that this is not the case on
some targets that save registers into the caller&rsquo;s frame, such as SPARC
and rs6000, and so such targets need to define this macro.
</p>
<p>You only need to define this macro if the default is incorrect, and you
want to support call frame debugging information like that provided by
DWARF 2.
</p></dd></dl>

<dl>
<dt><a name="index-FRAME_005fPOINTER_005fCFA_005fOFFSET"></a>Macro: <strong>FRAME_POINTER_CFA_OFFSET</strong> <em>(<var>fundecl</var>)</em></dt>
<dd><p>If defined, a C expression whose value is an integer giving the offset
in bytes from the frame pointer to the canonical frame address (cfa).
The final value should coincide with that calculated by
<code>INCOMING_FRAME_SP_OFFSET</code>.
</p>
<p>Normally the CFA is calculated as an offset from the argument pointer,
via <code>ARG_POINTER_CFA_OFFSET</code>, but if the argument pointer is
variable due to the ABI, this may not be possible.  If this macro is
defined, it implies that the virtual register instantiation should be
based on the frame pointer instead of the argument pointer.  Only one
of <code>FRAME_POINTER_CFA_OFFSET</code> and <code>ARG_POINTER_CFA_OFFSET</code>
should be defined.
</p></dd></dl>

<dl>
<dt><a name="index-CFA_005fFRAME_005fBASE_005fOFFSET"></a>Macro: <strong>CFA_FRAME_BASE_OFFSET</strong> <em>(<var>fundecl</var>)</em></dt>
<dd><p>If defined, a C expression whose value is an integer giving the offset
in bytes from the canonical frame address (cfa) to the frame base used
in DWARF 2 debug information.  The default is zero.  A different value
may reduce the size of debug information on some ports.
</p></dd></dl>

<hr>
<a name="Exception-Handling"></a>
<div class="header">
<p>
Next: <a href="#Stack-Checking" accesskey="n" rel="next">Stack Checking</a>, Previous: <a href="#Frame-Layout" accesskey="p" rel="prev">Frame Layout</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Exception-Handling-Support"></a>
<h4 class="subsection">17.10.2 Exception Handling Support</h4>
<a name="index-exception-handling-1"></a>

<dl>
<dt><a name="index-EH_005fRETURN_005fDATA_005fREGNO"></a>Macro: <strong>EH_RETURN_DATA_REGNO</strong> <em>(<var>N</var>)</em></dt>
<dd><p>A C expression whose value is the <var>N</var>th register number used for
data by exception handlers, or <code>INVALID_REGNUM</code> if fewer than
<var>N</var> registers are usable.
</p>
<p>The exception handling library routines communicate with the exception
handlers via a set of agreed upon registers.  Ideally these registers
should be call-clobbered; it is possible to use call-saved registers,
but may negatively impact code size.  The target must support at least
2 data registers, but should define 4 if there are enough free registers.
</p>
<p>You must define this macro if you want to support call frame exception
handling like that provided by DWARF 2.
</p></dd></dl>

<dl>
<dt><a name="index-EH_005fRETURN_005fSTACKADJ_005fRTX"></a>Macro: <strong>EH_RETURN_STACKADJ_RTX</strong></dt>
<dd><p>A C expression whose value is RTL representing a location in which
to store a stack adjustment to be applied before function return.
This is used to unwind the stack to an exception handler&rsquo;s call frame.
It will be assigned zero on code paths that return normally.
</p>
<p>Typically this is a call-clobbered hard register that is otherwise
untouched by the epilogue, but could also be a stack slot.
</p>
<p>Do not define this macro if the stack pointer is saved and restored
by the regular prolog and epilog code in the call frame itself; in
this case, the exception handling library routines will update the
stack location to be restored in place.  Otherwise, you must define
this macro if you want to support call frame exception handling like
that provided by DWARF 2.
</p></dd></dl>

<dl>
<dt><a name="index-EH_005fRETURN_005fHANDLER_005fRTX"></a>Macro: <strong>EH_RETURN_HANDLER_RTX</strong></dt>
<dd><p>A C expression whose value is RTL representing a location in which
to store the address of an exception handler to which we should
return.  It will not be assigned on code paths that return normally.
</p>
<p>Typically this is the location in the call frame at which the normal
return address is stored.  For targets that return by popping an
address off the stack, this might be a memory address just below
the <em>target</em> call frame rather than inside the current call
frame.  If defined, <code>EH_RETURN_STACKADJ_RTX</code> will have already
been assigned, so it may be used to calculate the location of the
target call frame.
</p>
<p>Some targets have more complex requirements than storing to an
address calculable during initial code generation.  In that case
the <code>eh_return</code> instruction pattern should be used instead.
</p>
<p>If you want to support call frame exception handling, you must
define either this macro or the <code>eh_return</code> instruction pattern.
</p></dd></dl>

<dl>
<dt><a name="index-RETURN_005fADDR_005fOFFSET"></a>Macro: <strong>RETURN_ADDR_OFFSET</strong></dt>
<dd><p>If defined, an integer-valued C expression for which rtl will be generated
to add it to the exception handler address before it is searched in the
exception handling tables, and to subtract it again from the address before
using it to return to the exception handler.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fPREFERRED_005fEH_005fDATA_005fFORMAT"></a>Macro: <strong>ASM_PREFERRED_EH_DATA_FORMAT</strong> <em>(<var>code</var>, <var>global</var>)</em></dt>
<dd><p>This macro chooses the encoding of pointers embedded in the exception
handling sections.  If at all possible, this should be defined such
that the exception handling section will not require dynamic relocations,
and so may be read-only.
</p>
<p><var>code</var> is 0 for data, 1 for code labels, 2 for function pointers.
<var>global</var> is true if the symbol may be affected by dynamic relocations.
The macro should return a combination of the <code>DW_EH_PE_*</code> defines
as found in <samp>dwarf2.h</samp>.
</p>
<p>If this macro is not defined, pointers will not be encoded but
represented directly.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fMAYBE_005fOUTPUT_005fENCODED_005fADDR_005fRTX"></a>Macro: <strong>ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX</strong> <em>(<var>file</var>, <var>encoding</var>, <var>size</var>, <var>addr</var>, <var>done</var>)</em></dt>
<dd><p>This macro allows the target to emit whatever special magic is required
to represent the encoding chosen by <code>ASM_PREFERRED_EH_DATA_FORMAT</code>.
Generic code takes care of pc-relative and indirect encodings; this must
be defined if the target uses text-relative or data-relative encodings.
</p>
<p>This is a C statement that branches to <var>done</var> if the format was
handled.  <var>encoding</var> is the format chosen, <var>size</var> is the number
of bytes that the format occupies, <var>addr</var> is the <code>SYMBOL_REF</code>
to be emitted.
</p></dd></dl>

<dl>
<dt><a name="index-MD_005fFALLBACK_005fFRAME_005fSTATE_005fFOR"></a>Macro: <strong>MD_FALLBACK_FRAME_STATE_FOR</strong> <em>(<var>context</var>, <var>fs</var>)</em></dt>
<dd><p>This macro allows the target to add CPU and operating system specific
code to the call-frame unwinder for use when there is no unwind data
available.  The most common reason to implement this macro is to unwind
through signal frames.
</p>
<p>This macro is called from <code>uw_frame_state_for</code> in
<samp>unwind-dw2.c</samp>, <samp>unwind-dw2-xtensa.c</samp> and
<samp>unwind-ia64.c</samp>.  <var>context</var> is an <code>_Unwind_Context</code>;
<var>fs</var> is an <code>_Unwind_FrameState</code>.  Examine <code>context-&gt;ra</code>
for the address of the code being executed and <code>context-&gt;cfa</code> for
the stack pointer value.  If the frame can be decoded, the register
save addresses should be updated in <var>fs</var> and the macro should
evaluate to <code>_URC_NO_REASON</code>.  If the frame cannot be decoded,
the macro should evaluate to <code>_URC_END_OF_STACK</code>.
</p>
<p>For proper signal handling in Java this macro is accompanied by
<code>MAKE_THROW_FRAME</code>, defined in <samp>libjava/include/*-signal.h</samp> headers.
</p></dd></dl>

<dl>
<dt><a name="index-MD_005fHANDLE_005fUNWABI"></a>Macro: <strong>MD_HANDLE_UNWABI</strong> <em>(<var>context</var>, <var>fs</var>)</em></dt>
<dd><p>This macro allows the target to add operating system specific code to the
call-frame unwinder to handle the IA-64 <code>.unwabi</code> unwinding directive,
usually used for signal or interrupt frames.
</p>
<p>This macro is called from <code>uw_update_context</code> in libgcc&rsquo;s
<samp>unwind-ia64.c</samp>.  <var>context</var> is an <code>_Unwind_Context</code>;
<var>fs</var> is an <code>_Unwind_FrameState</code>.  Examine <code>fs-&gt;unwabi</code>
for the abi and context in the <code>.unwabi</code> directive.  If the
<code>.unwabi</code> directive can be handled, the register save addresses should
be updated in <var>fs</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fUSES_005fWEAK_005fUNWIND_005fINFO"></a>Macro: <strong>TARGET_USES_WEAK_UNWIND_INFO</strong></dt>
<dd><p>A C expression that evaluates to true if the target requires unwind
info to be given comdat linkage.  Define it to be <code>1</code> if comdat
linkage is necessary.  The default is <code>0</code>.
</p></dd></dl>

<hr>
<a name="Stack-Checking"></a>
<div class="header">
<p>
Next: <a href="#Frame-Registers" accesskey="n" rel="next">Frame Registers</a>, Previous: <a href="#Exception-Handling" accesskey="p" rel="prev">Exception Handling</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Specifying-How-Stack-Checking-is-Done"></a>
<h4 class="subsection">17.10.3 Specifying How Stack Checking is Done</h4>

<p>GCC will check that stack references are within the boundaries of the
stack, if the option <samp>-fstack-check</samp> is specified, in one of
three ways:
</p>
<ol>
<li> If the value of the <code>STACK_CHECK_BUILTIN</code> macro is nonzero, GCC
will assume that you have arranged for full stack checking to be done
at appropriate places in the configuration files.  GCC will not do
other special processing.

</li><li> If <code>STACK_CHECK_BUILTIN</code> is zero and the value of the
<code>STACK_CHECK_STATIC_BUILTIN</code> macro is nonzero, GCC will assume
that you have arranged for static stack checking (checking of the
static stack frame of functions) to be done at appropriate places
in the configuration files.  GCC will only emit code to do dynamic
stack checking (checking on dynamic stack allocations) using the third
approach below.

</li><li> If neither of the above are true, GCC will generate code to periodically
&ldquo;probe&rdquo; the stack pointer using the values of the macros defined below.
</li></ol>

<p>If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is defined,
GCC will change its allocation strategy for large objects if the option
<samp>-fstack-check</samp> is specified: they will always be allocated
dynamically if their size exceeds <code>STACK_CHECK_MAX_VAR_SIZE</code> bytes.
</p>
<dl>
<dt><a name="index-STACK_005fCHECK_005fBUILTIN"></a>Macro: <strong>STACK_CHECK_BUILTIN</strong></dt>
<dd><p>A nonzero value if stack checking is done by the configuration files in a
machine-dependent manner.  You should define this macro if stack checking
is required by the ABI of your machine or if you would like to do stack
checking in some more efficient way than the generic approach.  The default
value of this macro is zero.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fCHECK_005fSTATIC_005fBUILTIN"></a>Macro: <strong>STACK_CHECK_STATIC_BUILTIN</strong></dt>
<dd><p>A nonzero value if static stack checking is done by the configuration files
in a machine-dependent manner.  You should define this macro if you would
like to do static stack checking in some more efficient way than the generic
approach.  The default value of this macro is zero.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fCHECK_005fPROBE_005fINTERVAL_005fEXP"></a>Macro: <strong>STACK_CHECK_PROBE_INTERVAL_EXP</strong></dt>
<dd><p>An integer specifying the interval at which GCC must generate stack probe
instructions, defined as 2 raised to this integer.  You will normally
define this macro so that the interval be no larger than the size of
the &ldquo;guard pages&rdquo; at the end of a stack area.  The default value
of 12 (4096-byte interval) is suitable for most systems.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fCHECK_005fMOVING_005fSP"></a>Macro: <strong>STACK_CHECK_MOVING_SP</strong></dt>
<dd><p>An integer which is nonzero if GCC should move the stack pointer page by page
when doing probes.  This can be necessary on systems where the stack pointer
contains the bottom address of the memory area accessible to the executing
thread at any point in time.  In this situation an alternate signal stack
is required in order to be able to recover from a stack overflow.  The
default value of this macro is zero.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fCHECK_005fPROTECT"></a>Macro: <strong>STACK_CHECK_PROTECT</strong></dt>
<dd><p>The number of bytes of stack needed to recover from a stack overflow, for
languages where such a recovery is supported.  The default value of 75 words
with the <code>setjmp</code>/<code>longjmp</code>-based exception handling mechanism and
8192 bytes with other exception handling mechanisms should be adequate for
most machines.
</p></dd></dl>

<p>The following macros are relevant only if neither STACK_CHECK_BUILTIN
nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether
in the opposite case.
</p>
<dl>
<dt><a name="index-STACK_005fCHECK_005fMAX_005fFRAME_005fSIZE"></a>Macro: <strong>STACK_CHECK_MAX_FRAME_SIZE</strong></dt>
<dd><p>The maximum size of a stack frame, in bytes.  GCC will generate probe
instructions in non-leaf functions to ensure at least this many bytes of
stack are available.  If a stack frame is larger than this size, stack
checking will not be reliable and GCC will issue a warning.  The
default is chosen so that GCC only generates one instruction on most
systems.  You should normally not change the default value of this macro.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fCHECK_005fFIXED_005fFRAME_005fSIZE"></a>Macro: <strong>STACK_CHECK_FIXED_FRAME_SIZE</strong></dt>
<dd><p>GCC uses this value to generate the above warning message.  It
represents the amount of fixed frame used by a function, not including
space for any callee-saved registers, temporaries and user variables.
You need only specify an upper bound for this amount and will normally
use the default of four words.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fCHECK_005fMAX_005fVAR_005fSIZE"></a>Macro: <strong>STACK_CHECK_MAX_VAR_SIZE</strong></dt>
<dd><p>The maximum size, in bytes, of an object that GCC will place in the
fixed area of the stack frame when the user specifies
<samp>-fstack-check</samp>.
GCC computed the default from the values of the above macros and you will
normally not need to override that default.
</p></dd></dl>

<hr>
<a name="Frame-Registers"></a>
<div class="header">
<p>
Next: <a href="#Elimination" accesskey="n" rel="next">Elimination</a>, Previous: <a href="#Stack-Checking" accesskey="p" rel="prev">Stack Checking</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Registers-That-Address-the-Stack-Frame"></a>
<h4 class="subsection">17.10.4 Registers That Address the Stack Frame</h4>

<p>This discusses registers that address the stack frame.
</p>
<dl>
<dt><a name="index-STACK_005fPOINTER_005fREGNUM"></a>Macro: <strong>STACK_POINTER_REGNUM</strong></dt>
<dd><p>The register number of the stack pointer register, which must also be a
fixed register according to <code>FIXED_REGISTERS</code>.  On most machines,
the hardware determines which register this is.
</p></dd></dl>

<dl>
<dt><a name="index-FRAME_005fPOINTER_005fREGNUM"></a>Macro: <strong>FRAME_POINTER_REGNUM</strong></dt>
<dd><p>The register number of the frame pointer register, which is used to
access automatic variables in the stack frame.  On some machines, the
hardware determines which register this is.  On other machines, you can
choose any register you wish for this purpose.
</p></dd></dl>

<dl>
<dt><a name="index-HARD_005fFRAME_005fPOINTER_005fREGNUM"></a>Macro: <strong>HARD_FRAME_POINTER_REGNUM</strong></dt>
<dd><p>On some machines the offset between the frame pointer and starting
offset of the automatic variables is not known until after register
allocation has been done (for example, because the saved registers are
between these two locations).  On those machines, define
<code>FRAME_POINTER_REGNUM</code> the number of a special, fixed register to
be used internally until the offset is known, and define
<code>HARD_FRAME_POINTER_REGNUM</code> to be the actual hard register number
used for the frame pointer.
</p>
<p>You should define this macro only in the very rare circumstances when it
is not possible to calculate the offset between the frame pointer and
the automatic variables until after register allocation has been
completed.  When this macro is defined, you must also indicate in your
definition of <code>ELIMINABLE_REGS</code> how to eliminate
<code>FRAME_POINTER_REGNUM</code> into either <code>HARD_FRAME_POINTER_REGNUM</code>
or <code>STACK_POINTER_REGNUM</code>.
</p>
<p>Do not define this macro if it would be the same as
<code>FRAME_POINTER_REGNUM</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ARG_005fPOINTER_005fREGNUM"></a>Macro: <strong>ARG_POINTER_REGNUM</strong></dt>
<dd><p>The register number of the arg pointer register, which is used to access
the function&rsquo;s argument list.  On some machines, this is the same as the
frame pointer register.  On some machines, the hardware determines which
register this is.  On other machines, you can choose any register you
wish for this purpose.  If this is not the same register as the frame
pointer register, then you must mark it as a fixed register according to
<code>FIXED_REGISTERS</code>, or arrange to be able to eliminate it
(see <a href="#Elimination">Elimination</a>).
</p></dd></dl>

<dl>
<dt><a name="index-HARD_005fFRAME_005fPOINTER_005fIS_005fFRAME_005fPOINTER"></a>Macro: <strong>HARD_FRAME_POINTER_IS_FRAME_POINTER</strong></dt>
<dd><p>Define this to a preprocessor constant that is nonzero if
<code>hard_frame_pointer_rtx</code> and <code>frame_pointer_rtx</code> should be
the same.  The default definition is &lsquo;<samp>(HARD_FRAME_POINTER_REGNUM
== FRAME_POINTER_REGNUM)</samp>&rsquo;; you only need to define this macro if that
definition is not suitable for use in preprocessor conditionals.
</p></dd></dl>

<dl>
<dt><a name="index-HARD_005fFRAME_005fPOINTER_005fIS_005fARG_005fPOINTER"></a>Macro: <strong>HARD_FRAME_POINTER_IS_ARG_POINTER</strong></dt>
<dd><p>Define this to a preprocessor constant that is nonzero if
<code>hard_frame_pointer_rtx</code> and <code>arg_pointer_rtx</code> should be the
same.  The default definition is &lsquo;<samp>(HARD_FRAME_POINTER_REGNUM ==
ARG_POINTER_REGNUM)</samp>&rsquo;; you only need to define this macro if that
definition is not suitable for use in preprocessor conditionals.
</p></dd></dl>

<dl>
<dt><a name="index-RETURN_005fADDRESS_005fPOINTER_005fREGNUM"></a>Macro: <strong>RETURN_ADDRESS_POINTER_REGNUM</strong></dt>
<dd><p>The register number of the return address pointer register, which is used to
access the current function&rsquo;s return address from the stack.  On some
machines, the return address is not at a fixed offset from the frame
pointer or stack pointer or argument pointer.  This register can be defined
to point to the return address on the stack, and then be converted by
<code>ELIMINABLE_REGS</code> into either the frame pointer or stack pointer.
</p>
<p>Do not define this macro unless there is no other way to get the return
address from the stack.
</p></dd></dl>

<dl>
<dt><a name="index-STATIC_005fCHAIN_005fREGNUM"></a>Macro: <strong>STATIC_CHAIN_REGNUM</strong></dt>
<dt><a name="index-STATIC_005fCHAIN_005fINCOMING_005fREGNUM"></a>Macro: <strong>STATIC_CHAIN_INCOMING_REGNUM</strong></dt>
<dd><p>Register numbers used for passing a function&rsquo;s static chain pointer.  If
register windows are used, the register number as seen by the called
function is <code>STATIC_CHAIN_INCOMING_REGNUM</code>, while the register
number as seen by the calling function is <code>STATIC_CHAIN_REGNUM</code>.  If
these registers are the same, <code>STATIC_CHAIN_INCOMING_REGNUM</code> need
not be defined.
</p>
<p>The static chain register need not be a fixed register.
</p>
<p>If the static chain is passed in memory, these macros should not be
defined; instead, the <code>TARGET_STATIC_CHAIN</code> hook should be used.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSTATIC_005fCHAIN"></a>Target Hook: <em>rtx</em> <strong>TARGET_STATIC_CHAIN</strong> <em>(const_tree <var>fndecl</var>, bool <var>incoming_p</var>)</em></dt>
<dd><p>This hook replaces the use of <code>STATIC_CHAIN_REGNUM</code> et al for
targets that may use different static chain locations for different
nested functions.  This may be required if the target has function
attributes that affect the calling conventions of the function and
those calling conventions use different static chain locations.
</p>
<p>The default version of this hook uses <code>STATIC_CHAIN_REGNUM</code> et al.
</p>
<p>If the static chain is passed in memory, this hook should be used to
provide rtx giving <code>mem</code> expressions that denote where they are stored.
Often the <code>mem</code> expression as seen by the caller will be at an offset
from the stack pointer and the <code>mem</code> expression as seen by the callee
will be at an offset from the frame pointer.
<a name="index-stack_005fpointer_005frtx"></a>
<a name="index-frame_005fpointer_005frtx"></a>
<a name="index-arg_005fpointer_005frtx"></a>
The variables <code>stack_pointer_rtx</code>, <code>frame_pointer_rtx</code>, and
<code>arg_pointer_rtx</code> will have been initialized and should be used
to refer to those items.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF_005fFRAME_005fREGISTERS"></a>Macro: <strong>DWARF_FRAME_REGISTERS</strong></dt>
<dd><p>This macro specifies the maximum number of hard registers that can be
saved in a call frame.  This is used to size data structures used in
DWARF2 exception handling.
</p>
<p>Prior to GCC 3.0, this macro was needed in order to establish a stable
exception handling ABI in the face of adding new hard registers for ISA
extensions.  In GCC 3.0 and later, the EH ABI is insulated from changes
in the number of hard registers.  Nevertheless, this macro can still be
used to reduce the runtime memory requirements of the exception handling
routines, which can be substantial if the ISA contains a lot of
registers that are not call-saved.
</p>
<p>If this macro is not defined, it defaults to
<code>FIRST_PSEUDO_REGISTER</code>.
</p></dd></dl>

<dl>
<dt><a name="index-PRE_005fGCC3_005fDWARF_005fFRAME_005fREGISTERS"></a>Macro: <strong>PRE_GCC3_DWARF_FRAME_REGISTERS</strong></dt>
<dd>
<p>This macro is similar to <code>DWARF_FRAME_REGISTERS</code>, but is provided
for backward compatibility in pre GCC 3.0 compiled code.
</p>
<p>If this macro is not defined, it defaults to
<code>DWARF_FRAME_REGISTERS</code>.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF_005fREG_005fTO_005fUNWIND_005fCOLUMN"></a>Macro: <strong>DWARF_REG_TO_UNWIND_COLUMN</strong> <em>(<var>regno</var>)</em></dt>
<dd>
<p>Define this macro if the target&rsquo;s representation for dwarf registers
is different than the internal representation for unwind column.
Given a dwarf register, this macro should return the internal unwind
column number to use instead.
</p>
<p>See the PowerPC&rsquo;s SPE target for an example.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF_005fFRAME_005fREGNUM"></a>Macro: <strong>DWARF_FRAME_REGNUM</strong> <em>(<var>regno</var>)</em></dt>
<dd>
<p>Define this macro if the target&rsquo;s representation for dwarf registers
used in .eh_frame or .debug_frame is different from that used in other
debug info sections.  Given a GCC hard register number, this macro
should return the .eh_frame register number.  The default is
<code>DBX_REGISTER_NUMBER (<var>regno</var>)</code>.
</p>
</dd></dl>

<dl>
<dt><a name="index-DWARF2_005fFRAME_005fREG_005fOUT"></a>Macro: <strong>DWARF2_FRAME_REG_OUT</strong> <em>(<var>regno</var>, <var>for_eh</var>)</em></dt>
<dd>
<p>Define this macro to map register numbers held in the call frame info
that GCC has collected using <code>DWARF_FRAME_REGNUM</code> to those that
should be output in .debug_frame (<code><var>for_eh</var></code> is zero) and
.eh_frame (<code><var>for_eh</var></code> is nonzero).  The default is to
return <code><var>regno</var></code>.
</p>
</dd></dl>

<dl>
<dt><a name="index-REG_005fVALUE_005fIN_005fUNWIND_005fCONTEXT"></a>Macro: <strong>REG_VALUE_IN_UNWIND_CONTEXT</strong></dt>
<dd>
<p>Define this macro if the target stores register values as
<code>_Unwind_Word</code> type in unwind context.  It should be defined if
target register size is larger than the size of <code>void *</code>.  The
default is to store register values as <code>void *</code> type.
</p>
</dd></dl>

<dl>
<dt><a name="index-ASSUME_005fEXTENDED_005fUNWIND_005fCONTEXT"></a>Macro: <strong>ASSUME_EXTENDED_UNWIND_CONTEXT</strong></dt>
<dd>
<p>Define this macro to be 1 if the target always uses extended unwind
context with version, args_size and by_value fields.  If it is undefined,
it will be defined to 1 when <code>REG_VALUE_IN_UNWIND_CONTEXT</code> is
defined and 0 otherwise.
</p>
</dd></dl>

<hr>
<a name="Elimination"></a>
<div class="header">
<p>
Next: <a href="#Stack-Arguments" accesskey="n" rel="next">Stack Arguments</a>, Previous: <a href="#Frame-Registers" accesskey="p" rel="prev">Frame Registers</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Eliminating-Frame-Pointer-and-Arg-Pointer"></a>
<h4 class="subsection">17.10.5 Eliminating Frame Pointer and Arg Pointer</h4>

<p>This is about eliminating the frame pointer and arg pointer.
</p>
<dl>
<dt><a name="index-TARGET_005fFRAME_005fPOINTER_005fREQUIRED"></a>Target Hook: <em>bool</em> <strong>TARGET_FRAME_POINTER_REQUIRED</strong> <em>(void)</em></dt>
<dd><p>This target hook should return <code>true</code> if a function must have and use
a frame pointer.  This target hook is called in the reload pass.  If its return
value is <code>true</code> the function will have a frame pointer.
</p>
<p>This target hook can in principle examine the current function and decide
according to the facts, but on most machines the constant <code>false</code> or the
constant <code>true</code> suffices.  Use <code>false</code> when the machine allows code
to be generated with no frame pointer, and doing so saves some time or space.
Use <code>true</code> when there is no possible advantage to avoiding a frame
pointer.
</p>
<p>In certain cases, the compiler does not know how to produce valid code
without a frame pointer.  The compiler recognizes those cases and
automatically gives the function a frame pointer regardless of what
<code>TARGET_FRAME_POINTER_REQUIRED</code> returns.  You don&rsquo;t need to worry about
them.
</p>
<p>In a function that does not require a frame pointer, the frame pointer
register can be allocated for ordinary usage, unless you mark it as a
fixed register.  See <code>FIXED_REGISTERS</code> for more information.
</p>
<p>Default return value is <code>false</code>.
</p></dd></dl>

<a name="index-get_005fframe_005fsize"></a>
<dl>
<dt><a name="index-INITIAL_005fFRAME_005fPOINTER_005fOFFSET"></a>Macro: <strong>INITIAL_FRAME_POINTER_OFFSET</strong> <em>(<var>depth-var</var>)</em></dt>
<dd><p>A C statement to store in the variable <var>depth-var</var> the difference
between the frame pointer and the stack pointer values immediately after
the function prologue.  The value would be computed from information
such as the result of <code>get_frame_size ()</code> and the tables of
registers <code>regs_ever_live</code> and <code>call_used_regs</code>.
</p>
<p>If <code>ELIMINABLE_REGS</code> is defined, this macro will be not be used and
need not be defined.  Otherwise, it must be defined even if
<code>TARGET_FRAME_POINTER_REQUIRED</code> always returns true; in that
case, you may set <var>depth-var</var> to anything.
</p></dd></dl>

<dl>
<dt><a name="index-ELIMINABLE_005fREGS"></a>Macro: <strong>ELIMINABLE_REGS</strong></dt>
<dd><p>If defined, this macro specifies a table of register pairs used to
eliminate unneeded registers that point into the stack frame.  If it is not
defined, the only elimination attempted by the compiler is to replace
references to the frame pointer with references to the stack pointer.
</p>
<p>The definition of this macro is a list of structure initializations, each
of which specifies an original and replacement register.
</p>
<p>On some machines, the position of the argument pointer is not known until
the compilation is completed.  In such a case, a separate hard register
must be used for the argument pointer.  This register can be eliminated by
replacing it with either the frame pointer or the argument pointer,
depending on whether or not the frame pointer has been eliminated.
</p>
<p>In this case, you might specify:
</p><div class="smallexample">
<pre class="smallexample">#define ELIMINABLE_REGS  \
{{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
</pre></div>

<p>Note that the elimination of the argument pointer with the stack pointer is
specified first since that is the preferred elimination.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCAN_005fELIMINATE"></a>Target Hook: <em>bool</em> <strong>TARGET_CAN_ELIMINATE</strong> <em>(const int <var>from_reg</var>, const int <var>to_reg</var>)</em></dt>
<dd><p>This target hook should returns <code>true</code> if the compiler is allowed to
try to replace register number <var>from_reg</var> with register number
<var>to_reg</var>.  This target hook need only be defined if <code>ELIMINABLE_REGS</code>
is defined, and will usually be <code>true</code>, since most of the cases
preventing register elimination are things that the compiler already
knows about.
</p>
<p>Default return value is <code>true</code>.
</p></dd></dl>

<dl>
<dt><a name="index-INITIAL_005fELIMINATION_005fOFFSET"></a>Macro: <strong>INITIAL_ELIMINATION_OFFSET</strong> <em>(<var>from-reg</var>, <var>to-reg</var>, <var>offset-var</var>)</em></dt>
<dd><p>This macro is similar to <code>INITIAL_FRAME_POINTER_OFFSET</code>.  It
specifies the initial difference between the specified pair of
registers.  This macro must be defined if <code>ELIMINABLE_REGS</code> is
defined.
</p></dd></dl>

<hr>
<a name="Stack-Arguments"></a>
<div class="header">
<p>
Next: <a href="#Register-Arguments" accesskey="n" rel="next">Register Arguments</a>, Previous: <a href="#Elimination" accesskey="p" rel="prev">Elimination</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Passing-Function-Arguments-on-the-Stack"></a>
<h4 class="subsection">17.10.6 Passing Function Arguments on the Stack</h4>
<a name="index-arguments-on-stack"></a>
<a name="index-stack-arguments"></a>

<p>The macros in this section control how arguments are passed
on the stack.  See the following section for other macros that
control passing certain arguments in registers.
</p>
<dl>
<dt><a name="index-TARGET_005fPROMOTE_005fPROTOTYPES"></a>Target Hook: <em>bool</em> <strong>TARGET_PROMOTE_PROTOTYPES</strong> <em>(const_tree <var>fntype</var>)</em></dt>
<dd><p>This target hook returns <code>true</code> if an argument declared in a
prototype as an integral type smaller than <code>int</code> should actually be
passed as an <code>int</code>.  In addition to avoiding errors in certain
cases of mismatch, it also makes for better code on certain machines.
The default is to not promote prototypes.
</p></dd></dl>

<dl>
<dt><a name="index-PUSH_005fARGS"></a>Macro: <strong>PUSH_ARGS</strong></dt>
<dd><p>A C expression.  If nonzero, push insns will be used to pass
outgoing arguments.
If the target machine does not have a push instruction, set it to zero.
That directs GCC to use an alternate strategy: to
allocate the entire argument block and then store the arguments into
it.  When <code>PUSH_ARGS</code> is nonzero, <code>PUSH_ROUNDING</code> must be defined too.
</p></dd></dl>

<dl>
<dt><a name="index-PUSH_005fARGS_005fREVERSED"></a>Macro: <strong>PUSH_ARGS_REVERSED</strong></dt>
<dd><p>A C expression.  If nonzero, function arguments will be evaluated from
last to first, rather than from first to last.  If this macro is not
defined, it defaults to <code>PUSH_ARGS</code> on targets where the stack
and args grow in opposite directions, and 0 otherwise.
</p></dd></dl>

<dl>
<dt><a name="index-PUSH_005fROUNDING"></a>Macro: <strong>PUSH_ROUNDING</strong> <em>(<var>npushed</var>)</em></dt>
<dd><p>A C expression that is the number of bytes actually pushed onto the
stack when an instruction attempts to push <var>npushed</var> bytes.
</p>
<p>On some machines, the definition
</p>
<div class="smallexample">
<pre class="smallexample">#define PUSH_ROUNDING(BYTES) (BYTES)
</pre></div>

<p>will suffice.  But on other machines, instructions that appear
to push one byte actually push two bytes in an attempt to maintain
alignment.  Then the definition should be
</p>
<div class="smallexample">
<pre class="smallexample">#define PUSH_ROUNDING(BYTES) (((BYTES) + 1) &amp; ~1)
</pre></div>

<p>If the value of this macro has a type, it should be an unsigned type.
</p></dd></dl>

<a name="index-outgoing_005fargs_005fsize"></a>
<a name="index-crtl_002d_003eoutgoing_005fargs_005fsize"></a>
<dl>
<dt><a name="index-ACCUMULATE_005fOUTGOING_005fARGS"></a>Macro: <strong>ACCUMULATE_OUTGOING_ARGS</strong></dt>
<dd><p>A C expression.  If nonzero, the maximum amount of space required for outgoing arguments
will be computed and placed into
<code>crtl-&gt;outgoing_args_size</code>.  No space will be pushed
onto the stack for each call; instead, the function prologue should
increase the stack frame size by this amount.
</p>
<p>Setting both <code>PUSH_ARGS</code> and <code>ACCUMULATE_OUTGOING_ARGS</code>
is not proper.
</p></dd></dl>

<dl>
<dt><a name="index-REG_005fPARM_005fSTACK_005fSPACE"></a>Macro: <strong>REG_PARM_STACK_SPACE</strong> <em>(<var>fndecl</var>)</em></dt>
<dd><p>Define this macro if functions should assume that stack space has been
allocated for arguments even when their values are passed in
registers.
</p>
<p>The value of this macro is the size, in bytes, of the area reserved for
arguments passed in registers for the function represented by <var>fndecl</var>,
which can be zero if GCC is calling a library function.
The argument <var>fndecl</var> can be the FUNCTION_DECL, or the type itself
of the function.
</p>
<p>This space can be allocated by the caller, or be a part of the
machine-dependent stack frame: <code>OUTGOING_REG_PARM_STACK_SPACE</code> says
which.
</p></dd></dl>

<dl>
<dt><a name="index-INCOMING_005fREG_005fPARM_005fSTACK_005fSPACE"></a>Macro: <strong>INCOMING_REG_PARM_STACK_SPACE</strong> <em>(<var>fndecl</var>)</em></dt>
<dd><p>Like <code>REG_PARM_STACK_SPACE</code>, but for incoming register arguments.
Define this macro if space guaranteed when compiling a function body
is different to space required when making a call, a situation that
can arise with K&amp;R style function definitions.
</p></dd></dl>

<dl>
<dt><a name="index-OUTGOING_005fREG_005fPARM_005fSTACK_005fSPACE"></a>Macro: <strong>OUTGOING_REG_PARM_STACK_SPACE</strong> <em>(<var>fntype</var>)</em></dt>
<dd><p>Define this to a nonzero value if it is the responsibility of the
caller to allocate the area reserved for arguments passed in registers
when calling a function of <var>fntype</var>.  <var>fntype</var> may be NULL
if the function called is a library function.
</p>
<p>If <code>ACCUMULATE_OUTGOING_ARGS</code> is defined, this macro controls
whether the space for these arguments counts in the value of
<code>crtl-&gt;outgoing_args_size</code>.
</p></dd></dl>

<dl>
<dt><a name="index-STACK_005fPARMS_005fIN_005fREG_005fPARM_005fAREA"></a>Macro: <strong>STACK_PARMS_IN_REG_PARM_AREA</strong></dt>
<dd><p>Define this macro if <code>REG_PARM_STACK_SPACE</code> is defined, but the
stack parameters don&rsquo;t skip the area specified by it.
</p>
<p>Normally, when a parameter is not passed in registers, it is placed on the
stack beyond the <code>REG_PARM_STACK_SPACE</code> area.  Defining this macro
suppresses this behavior and causes the parameter to be passed on the
stack in its natural location.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fRETURN_005fPOPS_005fARGS"></a>Target Hook: <em>int</em> <strong>TARGET_RETURN_POPS_ARGS</strong> <em>(tree <var>fundecl</var>, tree <var>funtype</var>, int <var>size</var>)</em></dt>
<dd><p>This target hook returns the number of bytes of its own arguments that
a function pops on returning, or 0 if the function pops no arguments
and the caller must therefore pop them all after the function returns.
</p>
<p><var>fundecl</var> is a C variable whose value is a tree node that describes
the function in question.  Normally it is a node of type
<code>FUNCTION_DECL</code> that describes the declaration of the function.
From this you can obtain the <code>DECL_ATTRIBUTES</code> of the function.
</p>
<p><var>funtype</var> is a C variable whose value is a tree node that
describes the function in question.  Normally it is a node of type
<code>FUNCTION_TYPE</code> that describes the data type of the function.
From this it is possible to obtain the data types of the value and
arguments (if known).
</p>
<p>When a call to a library function is being considered, <var>fundecl</var>
will contain an identifier node for the library function.  Thus, if
you need to distinguish among various library functions, you can do so
by their names.  Note that &ldquo;library function&rdquo; in this context means
a function used to perform arithmetic, whose name is known specially
in the compiler and was not mentioned in the C code being compiled.
</p>
<p><var>size</var> is the number of bytes of arguments passed on the
stack.  If a variable number of bytes is passed, it is zero, and
argument popping will always be the responsibility of the calling function.
</p>
<p>On the VAX, all functions always pop their arguments, so the definition
of this macro is <var>size</var>.  On the 68000, using the standard
calling convention, no functions pop their arguments, so the value of
the macro is always 0 in this case.  But an alternative calling
convention is available in which functions that take a fixed number of
arguments pop them but other functions (such as <code>printf</code>) pop
nothing (the caller pops all).  When this convention is in use,
<var>funtype</var> is examined to determine whether a function takes a fixed
number of arguments.
</p></dd></dl>

<dl>
<dt><a name="index-CALL_005fPOPS_005fARGS"></a>Macro: <strong>CALL_POPS_ARGS</strong> <em>(<var>cum</var>)</em></dt>
<dd><p>A C expression that should indicate the number of bytes a call sequence
pops off the stack.  It is added to the value of <code>RETURN_POPS_ARGS</code>
when compiling a function call.
</p>
<p><var>cum</var> is the variable in which all arguments to the called function
have been accumulated.
</p>
<p>On certain architectures, such as the SH5, a call trampoline is used
that pops certain registers off the stack, depending on the arguments
that have been passed to the function.  Since this is a property of the
call site, not of the called function, <code>RETURN_POPS_ARGS</code> is not
appropriate.
</p></dd></dl>

<hr>
<a name="Register-Arguments"></a>
<div class="header">
<p>
Next: <a href="#Scalar-Return" accesskey="n" rel="next">Scalar Return</a>, Previous: <a href="#Stack-Arguments" accesskey="p" rel="prev">Stack Arguments</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Passing-Arguments-in-Registers"></a>
<h4 class="subsection">17.10.7 Passing Arguments in Registers</h4>
<a name="index-arguments-in-registers"></a>
<a name="index-registers-arguments"></a>

<p>This section describes the macros which let you control how various
types of arguments are passed in registers or how they are arranged in
the stack.
</p>
<dl>
<dt><a name="index-TARGET_005fFUNCTION_005fARG"></a>Target Hook: <em>rtx</em> <strong>TARGET_FUNCTION_ARG</strong> <em>(cumulative_args_t <var>ca</var>, enum machine_mode <var>mode</var>, const_tree <var>type</var>, bool <var>named</var>)</em></dt>
<dd><p>Return an RTX indicating whether a function argument is passed in a
register and if so, which register.
</p>
<p>The arguments are <var>ca</var>, which summarizes all the previous
arguments; <var>mode</var>, the machine mode of the argument; <var>type</var>,
the data type of the argument as a tree node or 0 if that is not known
(which happens for C support library functions); and <var>named</var>,
which is <code>true</code> for an ordinary argument and <code>false</code> for
nameless arguments that correspond to &lsquo;<samp>&hellip;</samp>&rsquo; in the called
function&rsquo;s prototype.  <var>type</var> can be an incomplete type if a
syntax error has previously occurred.
</p>
<p>The return value is usually either a <code>reg</code> RTX for the hard
register in which to pass the argument, or zero to pass the argument
on the stack.
</p>
<p>The value of the expression can also be a <code>parallel</code> RTX.  This is
used when an argument is passed in multiple locations.  The mode of the
<code>parallel</code> should be the mode of the entire argument.  The
<code>parallel</code> holds any number of <code>expr_list</code> pairs; each one
describes where part of the argument is passed.  In each
<code>expr_list</code> the first operand must be a <code>reg</code> RTX for the hard
register in which to pass this part of the argument, and the mode of the
register RTX indicates how large this part of the argument is.  The
second operand of the <code>expr_list</code> is a <code>const_int</code> which gives
the offset in bytes into the entire argument of where this part starts.
As a special exception the first <code>expr_list</code> in the <code>parallel</code>
RTX may have a first operand of zero.  This indicates that the entire
argument is also stored on the stack.
</p>
<p>The last time this hook is called, it is called with <code>MODE ==
VOIDmode</code>, and its result is passed to the <code>call</code> or <code>call_value</code>
pattern as operands 2 and 3 respectively.
</p>
<a name="index-stdarg_002eh-and-register-arguments"></a>
<p>The usual way to make the ISO library <samp>stdarg.h</samp> work on a
machine where some arguments are usually passed in registers, is to
cause nameless arguments to be passed on the stack instead.  This is
done by making <code>TARGET_FUNCTION_ARG</code> return 0 whenever
<var>named</var> is <code>false</code>.
</p>
<a name="index-TARGET_005fMUST_005fPASS_005fIN_005fSTACK_002c-and-TARGET_005fFUNCTION_005fARG"></a>
<a name="index-REG_005fPARM_005fSTACK_005fSPACE_002c-and-TARGET_005fFUNCTION_005fARG"></a>
<p>You may use the hook <code>targetm.calls.must_pass_in_stack</code>
in the definition of this macro to determine if this argument is of a
type that must be passed in the stack.  If <code>REG_PARM_STACK_SPACE</code>
is not defined and <code>TARGET_FUNCTION_ARG</code> returns nonzero for such an
argument, the compiler will abort.  If <code>REG_PARM_STACK_SPACE</code> is
defined, the argument will be computed in the stack and then loaded into
a register.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMUST_005fPASS_005fIN_005fSTACK"></a>Target Hook: <em>bool</em> <strong>TARGET_MUST_PASS_IN_STACK</strong> <em>(enum machine_mode <var>mode</var>, const_tree <var>type</var>)</em></dt>
<dd><p>This target hook should return <code>true</code> if we should not pass <var>type</var>
solely in registers.  The file <samp>expr.h</samp> defines a
definition that is usually appropriate, refer to <samp>expr.h</samp> for additional
documentation.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFUNCTION_005fINCOMING_005fARG"></a>Target Hook: <em>rtx</em> <strong>TARGET_FUNCTION_INCOMING_ARG</strong> <em>(cumulative_args_t <var>ca</var>, enum machine_mode <var>mode</var>, const_tree <var>type</var>, bool <var>named</var>)</em></dt>
<dd><p>Define this hook if the target machine has &ldquo;register windows&rdquo;, so
that the register in which a function sees an arguments is not
necessarily the same as the one in which the caller passed the
argument.
</p>
<p>For such machines, <code>TARGET_FUNCTION_ARG</code> computes the register in
which the caller passes the value, and
<code>TARGET_FUNCTION_INCOMING_ARG</code> should be defined in a similar
fashion to tell the function being called where the arguments will
arrive.
</p>
<p>If <code>TARGET_FUNCTION_INCOMING_ARG</code> is not defined,
<code>TARGET_FUNCTION_ARG</code> serves both purposes.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fARG_005fPARTIAL_005fBYTES"></a>Target Hook: <em>int</em> <strong>TARGET_ARG_PARTIAL_BYTES</strong> <em>(cumulative_args_t <var>cum</var>, enum machine_mode <var>mode</var>, tree <var>type</var>, bool <var>named</var>)</em></dt>
<dd><p>This target hook returns the number of bytes at the beginning of an
argument that must be put in registers.  The value must be zero for
arguments that are passed entirely in registers or that are entirely
pushed on the stack.
</p>
<p>On some machines, certain arguments must be passed partially in
registers and partially in memory.  On these machines, typically the
first few words of arguments are passed in registers, and the rest
on the stack.  If a multi-word argument (a <code>double</code> or a
structure) crosses that boundary, its first few words must be passed
in registers and the rest must be pushed.  This macro tells the
compiler when this occurs, and how many bytes should go in registers.
</p>
<p><code>TARGET_FUNCTION_ARG</code> for these arguments should return the first
register to be used by the caller for this argument; likewise
<code>TARGET_FUNCTION_INCOMING_ARG</code>, for the called function.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPASS_005fBY_005fREFERENCE"></a>Target Hook: <em>bool</em> <strong>TARGET_PASS_BY_REFERENCE</strong> <em>(cumulative_args_t <var>cum</var>, enum machine_mode <var>mode</var>, const_tree <var>type</var>, bool <var>named</var>)</em></dt>
<dd><p>This target hook should return <code>true</code> if an argument at the
position indicated by <var>cum</var> should be passed by reference.  This
predicate is queried after target independent reasons for being
passed by reference, such as <code>TREE_ADDRESSABLE (type)</code>.
</p>
<p>If the hook returns true, a copy of that argument is made in memory and a
pointer to the argument is passed instead of the argument itself.
The pointer is passed in whatever way is appropriate for passing a pointer
to that type.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCALLEE_005fCOPIES"></a>Target Hook: <em>bool</em> <strong>TARGET_CALLEE_COPIES</strong> <em>(cumulative_args_t <var>cum</var>, enum machine_mode <var>mode</var>, const_tree <var>type</var>, bool <var>named</var>)</em></dt>
<dd><p>The function argument described by the parameters to this hook is
known to be passed by reference.  The hook should return true if the
function argument should be copied by the callee instead of copied
by the caller.
</p>
<p>For any argument for which the hook returns true, if it can be
determined that the argument is not modified, then a copy need
not be generated.
</p>
<p>The default version of this hook always returns false.
</p></dd></dl>

<dl>
<dt><a name="index-CUMULATIVE_005fARGS"></a>Macro: <strong>CUMULATIVE_ARGS</strong></dt>
<dd><p>A C type for declaring a variable that is used as the first argument
of <code>TARGET_FUNCTION_ARG</code> and other related values.  For some
target machines, the type <code>int</code> suffices and can hold the number
of bytes of argument so far.
</p>
<p>There is no need to record in <code>CUMULATIVE_ARGS</code> anything about the
arguments that have been passed on the stack.  The compiler has other
variables to keep track of that.  For target machines on which all
arguments are passed on the stack, there is no need to store anything in
<code>CUMULATIVE_ARGS</code>; however, the data structure must exist and
should not be empty, so use <code>int</code>.
</p></dd></dl>

<dl>
<dt><a name="index-OVERRIDE_005fABI_005fFORMAT"></a>Macro: <strong>OVERRIDE_ABI_FORMAT</strong> <em>(<var>fndecl</var>)</em></dt>
<dd><p>If defined, this macro is called before generating any code for a
function, but after the <var>cfun</var> descriptor for the function has been
created.  The back end may use this macro to update <var>cfun</var> to
reflect an ABI other than that which would normally be used by default.
If the compiler is generating code for a compiler-generated function,
<var>fndecl</var> may be <code>NULL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-INIT_005fCUMULATIVE_005fARGS"></a>Macro: <strong>INIT_CUMULATIVE_ARGS</strong> <em>(<var>cum</var>, <var>fntype</var>, <var>libname</var>, <var>fndecl</var>, <var>n_named_args</var>)</em></dt>
<dd><p>A C statement (sans semicolon) for initializing the variable
<var>cum</var> for the state at the beginning of the argument list.  The
variable has type <code>CUMULATIVE_ARGS</code>.  The value of <var>fntype</var>
is the tree node for the data type of the function which will receive
the args, or 0 if the args are to a compiler support library function.
For direct calls that are not libcalls, <var>fndecl</var> contain the
declaration node of the function.  <var>fndecl</var> is also set when
<code>INIT_CUMULATIVE_ARGS</code> is used to find arguments for the function
being compiled.  <var>n_named_args</var> is set to the number of named
arguments, including a structure return address if it is passed as a
parameter, when making a call.  When processing incoming arguments,
<var>n_named_args</var> is set to -1.
</p>
<p>When processing a call to a compiler support library function,
<var>libname</var> identifies which one.  It is a <code>symbol_ref</code> rtx which
contains the name of the function, as a string.  <var>libname</var> is 0 when
an ordinary C function call is being processed.  Thus, each time this
macro is called, either <var>libname</var> or <var>fntype</var> is nonzero, but
never both of them at once.
</p></dd></dl>

<dl>
<dt><a name="index-INIT_005fCUMULATIVE_005fLIBCALL_005fARGS"></a>Macro: <strong>INIT_CUMULATIVE_LIBCALL_ARGS</strong> <em>(<var>cum</var>, <var>mode</var>, <var>libname</var>)</em></dt>
<dd><p>Like <code>INIT_CUMULATIVE_ARGS</code> but only used for outgoing libcalls,
it gets a <code>MODE</code> argument instead of <var>fntype</var>, that would be
<code>NULL</code>.  <var>indirect</var> would always be zero, too.  If this macro
is not defined, <code>INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname,
0)</code> is used instead.
</p></dd></dl>

<dl>
<dt><a name="index-INIT_005fCUMULATIVE_005fINCOMING_005fARGS"></a>Macro: <strong>INIT_CUMULATIVE_INCOMING_ARGS</strong> <em>(<var>cum</var>, <var>fntype</var>, <var>libname</var>)</em></dt>
<dd><p>Like <code>INIT_CUMULATIVE_ARGS</code> but overrides it for the purposes of
finding the arguments for the function being compiled.  If this macro is
undefined, <code>INIT_CUMULATIVE_ARGS</code> is used instead.
</p>
<p>The value passed for <var>libname</var> is always 0, since library routines
with special calling conventions are never compiled with GCC.  The
argument <var>libname</var> exists for symmetry with
<code>INIT_CUMULATIVE_ARGS</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFUNCTION_005fARG_005fADVANCE"></a>Target Hook: <em>void</em> <strong>TARGET_FUNCTION_ARG_ADVANCE</strong> <em>(cumulative_args_t <var>ca</var>, enum machine_mode <var>mode</var>, const_tree <var>type</var>, bool <var>named</var>)</em></dt>
<dd><p>This hook updates the summarizer variable pointed to by <var>ca</var> to
advance past an argument in the argument list.  The values <var>mode</var>,
<var>type</var> and <var>named</var> describe that argument.  Once this is done,
the variable <var>cum</var> is suitable for analyzing the <em>following</em>
argument with <code>TARGET_FUNCTION_ARG</code>, etc.
</p>
<p>This hook need not do anything if the argument in question was passed
on the stack.  The compiler knows how to track the amount of stack space
used for arguments without any special help.
</p></dd></dl>

<dl>
<dt><a name="index-FUNCTION_005fARG_005fOFFSET"></a>Macro: <strong>FUNCTION_ARG_OFFSET</strong> <em>(<var>mode</var>, <var>type</var>)</em></dt>
<dd><p>If defined, a C expression that is the number of bytes to add to the
offset of the argument passed in memory.  This is needed for the SPU,
which passes <code>char</code> and <code>short</code> arguments in the preferred
slot that is in the middle of the quad word instead of starting at the
top.
</p></dd></dl>

<dl>
<dt><a name="index-FUNCTION_005fARG_005fPADDING"></a>Macro: <strong>FUNCTION_ARG_PADDING</strong> <em>(<var>mode</var>, <var>type</var>)</em></dt>
<dd><p>If defined, a C expression which determines whether, and in which direction,
to pad out an argument with extra space.  The value should be of type
<code>enum direction</code>: either <code>upward</code> to pad above the argument,
<code>downward</code> to pad below, or <code>none</code> to inhibit padding.
</p>
<p>The <em>amount</em> of padding is not controlled by this macro, but by the
target hook <code>TARGET_FUNCTION_ARG_ROUND_BOUNDARY</code>.  It is
always just enough to reach the next multiple of that boundary. 
</p>
<p>This macro has a default definition which is right for most systems.
For little-endian machines, the default is to pad upward.  For
big-endian machines, the default is to pad downward for an argument of
constant size shorter than an <code>int</code>, and upward otherwise.
</p></dd></dl>

<dl>
<dt><a name="index-PAD_005fVARARGS_005fDOWN"></a>Macro: <strong>PAD_VARARGS_DOWN</strong></dt>
<dd><p>If defined, a C expression which determines whether the default
implementation of va_arg will attempt to pad down before reading the
next argument, if that argument is smaller than its aligned space as
controlled by <code>PARM_BOUNDARY</code>.  If this macro is not defined, all such
arguments are padded down if <code>BYTES_BIG_ENDIAN</code> is true.
</p></dd></dl>

<dl>
<dt><a name="index-BLOCK_005fREG_005fPADDING"></a>Macro: <strong>BLOCK_REG_PADDING</strong> <em>(<var>mode</var>, <var>type</var>, <var>first</var>)</em></dt>
<dd><p>Specify padding for the last element of a block move between registers and
memory.  <var>first</var> is nonzero if this is the only element.  Defining this
macro allows better control of register function parameters on big-endian
machines, without using <code>PARALLEL</code> rtl.  In particular,
<code>MUST_PASS_IN_STACK</code> need not test padding and mode of types in
registers, as there is no longer a &quot;wrong&quot; part of a register;  For example,
a three byte aggregate may be passed in the high part of a register if so
required.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFUNCTION_005fARG_005fBOUNDARY"></a>Target Hook: <em>unsigned int</em> <strong>TARGET_FUNCTION_ARG_BOUNDARY</strong> <em>(enum machine_mode <var>mode</var>, const_tree <var>type</var>)</em></dt>
<dd><p>This hook returns the alignment boundary, in bits, of an argument
with the specified mode and type.  The default hook returns
<code>PARM_BOUNDARY</code> for all arguments.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFUNCTION_005fARG_005fROUND_005fBOUNDARY"></a>Target Hook: <em>unsigned int</em> <strong>TARGET_FUNCTION_ARG_ROUND_BOUNDARY</strong> <em>(enum machine_mode <var>mode</var>, const_tree <var>type</var>)</em></dt>
<dd><p>Normally, the size of an argument is rounded up to <code>PARM_BOUNDARY</code>,
which is the default value for this hook.  You can define this hook to
return a different value if an argument size must be rounded to a larger
value.
</p></dd></dl>

<dl>
<dt><a name="index-FUNCTION_005fARG_005fREGNO_005fP"></a>Macro: <strong>FUNCTION_ARG_REGNO_P</strong> <em>(<var>regno</var>)</em></dt>
<dd><p>A C expression that is nonzero if <var>regno</var> is the number of a hard
register in which function arguments are sometimes passed.  This does
<em>not</em> include implicit arguments such as the static chain and
the structure-value address.  On many machines, no registers can be
used for this purpose since all function arguments are pushed on the
stack.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSPLIT_005fCOMPLEX_005fARG"></a>Target Hook: <em>bool</em> <strong>TARGET_SPLIT_COMPLEX_ARG</strong> <em>(const_tree <var>type</var>)</em></dt>
<dd><p>This hook should return true if parameter of type <var>type</var> are passed
as two scalar parameters.  By default, GCC will attempt to pack complex
arguments into the target&rsquo;s word size.  Some ABIs require complex arguments
to be split and treated as their individual components.  For example, on
AIX64, complex floats should be passed in a pair of floating point
registers, even though a complex float would fit in one 64-bit floating
point register.
</p>
<p>The default value of this hook is <code>NULL</code>, which is treated as always
false.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fBUILD_005fBUILTIN_005fVA_005fLIST"></a>Target Hook: <em>tree</em> <strong>TARGET_BUILD_BUILTIN_VA_LIST</strong> <em>(void)</em></dt>
<dd><p>This hook returns a type node for <code>va_list</code> for the target.
The default version of the hook returns <code>void*</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fENUM_005fVA_005fLIST_005fP"></a>Target Hook: <em>int</em> <strong>TARGET_ENUM_VA_LIST_P</strong> <em>(int <var>idx</var>, const char **<var>pname</var>, tree *<var>ptree</var>)</em></dt>
<dd><p>This target hook is used in function <code>c_common_nodes_and_builtins</code>
to iterate through the target specific builtin types for va_list. The
variable <var>idx</var> is used as iterator. <var>pname</var> has to be a pointer
to a <code>const char *</code> and <var>ptree</var> a pointer to a <code>tree</code> typed
variable.
The arguments <var>pname</var> and <var>ptree</var> are used to store the result of
this macro and are set to the name of the va_list builtin type and its
internal type.
If the return value of this macro is zero, then there is no more element.
Otherwise the <var>IDX</var> should be increased for the next call of this
macro to iterate through all types.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFN_005fABI_005fVA_005fLIST"></a>Target Hook: <em>tree</em> <strong>TARGET_FN_ABI_VA_LIST</strong> <em>(tree <var>fndecl</var>)</em></dt>
<dd><p>This hook returns the va_list type of the calling convention specified by
<var>fndecl</var>.
The default version of this hook returns <code>va_list_type_node</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCANONICAL_005fVA_005fLIST_005fTYPE"></a>Target Hook: <em>tree</em> <strong>TARGET_CANONICAL_VA_LIST_TYPE</strong> <em>(tree <var>type</var>)</em></dt>
<dd><p>This hook returns the va_list type of the calling convention specified by the
type of <var>type</var>. If <var>type</var> is not a valid va_list type, it returns
<code>NULL_TREE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fGIMPLIFY_005fVA_005fARG_005fEXPR"></a>Target Hook: <em>tree</em> <strong>TARGET_GIMPLIFY_VA_ARG_EXPR</strong> <em>(tree <var>valist</var>, tree <var>type</var>, gimple_seq *<var>pre_p</var>, gimple_seq *<var>post_p</var>)</em></dt>
<dd><p>This hook performs target-specific gimplification of
<code>VA_ARG_EXPR</code>.  The first two parameters correspond to the
arguments to <code>va_arg</code>; the latter two are as in
<code>gimplify.c:gimplify_expr</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVALID_005fPOINTER_005fMODE"></a>Target Hook: <em>bool</em> <strong>TARGET_VALID_POINTER_MODE</strong> <em>(enum machine_mode <var>mode</var>)</em></dt>
<dd><p>Define this to return nonzero if the port can handle pointers
with machine mode <var>mode</var>.  The default version of this
hook returns true for both <code>ptr_mode</code> and <code>Pmode</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fREF_005fMAY_005fALIAS_005fERRNO"></a>Target Hook: <em>bool</em> <strong>TARGET_REF_MAY_ALIAS_ERRNO</strong> <em>(struct ao_ref_s *<var>ref</var>)</em></dt>
<dd><p>Define this to return nonzero if the memory reference <var>ref</var>  may alias with the system C library errno location.  The default  version of this hook assumes the system C library errno location  is either a declaration of type int or accessed by dereferencing  a pointer to int.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCALAR_005fMODE_005fSUPPORTED_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_SCALAR_MODE_SUPPORTED_P</strong> <em>(enum machine_mode <var>mode</var>)</em></dt>
<dd><p>Define this to return nonzero if the port is prepared to handle
insns involving scalar mode <var>mode</var>.  For a scalar mode to be
considered supported, all the basic arithmetic and comparisons
must work.
</p>
<p>The default version of this hook returns true for any mode
required to handle the basic C types (as defined by the port).
Included here are the double-word arithmetic supported by the
code in <samp>optabs.c</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTOR_005fMODE_005fSUPPORTED_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_VECTOR_MODE_SUPPORTED_P</strong> <em>(enum machine_mode <var>mode</var>)</em></dt>
<dd><p>Define this to return nonzero if the port is prepared to handle
insns involving vector mode <var>mode</var>.  At the very least, it
must have move patterns for this mode.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fARRAY_005fMODE_005fSUPPORTED_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_ARRAY_MODE_SUPPORTED_P</strong> <em>(enum machine_mode <var>mode</var>, unsigned HOST_WIDE_INT <var>nelems</var>)</em></dt>
<dd><p>Return true if GCC should try to use a scalar mode to store an array
of <var>nelems</var> elements, given that each element has mode <var>mode</var>.
Returning true here overrides the usual <code>MAX_FIXED_MODE</code> limit
and allows GCC to use any defined integer mode.
</p>
<p>One use of this hook is to support vector load and store operations
that operate on several homogeneous vectors.  For example, ARM NEON
has operations like:
</p>
<div class="smallexample">
<pre class="smallexample">int8x8x3_t vld3_s8 (const int8_t *)
</pre></div>

<p>where the return type is defined as:
</p>
<div class="smallexample">
<pre class="smallexample">typedef struct int8x8x3_t
{
  int8x8_t val[3];
} int8x8x3_t;
</pre></div>

<p>If this hook allows <code>val</code> to have a scalar mode, then
<code>int8x8x3_t</code> can have the same mode.  GCC can then store
<code>int8x8x3_t</code>s in registers rather than forcing them onto the stack.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSMALL_005fREGISTER_005fCLASSES_005fFOR_005fMODE_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P</strong> <em>(enum machine_mode <var>mode</var>)</em></dt>
<dd><p>Define this to return nonzero for machine modes for which the port has
small register classes.  If this target hook returns nonzero for a given
<var>mode</var>, the compiler will try to minimize the lifetime of registers
in <var>mode</var>.  The hook may be called with <code>VOIDmode</code> as argument.
In this case, the hook is expected to return nonzero if it returns nonzero
for any mode.
</p>
<p>On some machines, it is risky to let hard registers live across arbitrary
insns.  Typically, these machines have instructions that require values
to be in specific registers (like an accumulator), and reload will fail
if the required hard register is used for another purpose across such an
insn.
</p>
<p>Passes before reload do not know which hard registers will be used
in an instruction, but the machine modes of the registers set or used in
the instruction are already known.  And for some machines, register
classes are small for, say, integer registers but not for floating point
registers.  For example, the AMD x86-64 architecture requires specific
registers for the legacy x86 integer instructions, but there are many
SSE registers for floating point operations.  On such targets, a good
strategy may be to return nonzero from this hook for <code>INTEGRAL_MODE_P</code>
machine modes but zero for the SSE register classes.
</p>
<p>The default version of this hook returns false for any mode.  It is always
safe to redefine this hook to return with a nonzero value.  But if you
unnecessarily define it, you will reduce the amount of optimizations
that can be performed in some cases.  If you do not define this hook
to return a nonzero value when it is required, the compiler will run out
of spill registers and print a fatal error message.
</p></dd></dl>

<hr>
<a name="Scalar-Return"></a>
<div class="header">
<p>
Next: <a href="#Aggregate-Return" accesskey="n" rel="next">Aggregate Return</a>, Previous: <a href="#Register-Arguments" accesskey="p" rel="prev">Register Arguments</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="How-Scalar-Function-Values-Are-Returned"></a>
<h4 class="subsection">17.10.8 How Scalar Function Values Are Returned</h4>
<a name="index-return-values-in-registers"></a>
<a name="index-values_002c-returned-by-functions"></a>
<a name="index-scalars_002c-returned-as-values"></a>

<p>This section discusses the macros that control returning scalars as
values&mdash;values that can fit in registers.
</p>
<dl>
<dt><a name="index-TARGET_005fFUNCTION_005fVALUE"></a>Target Hook: <em>rtx</em> <strong>TARGET_FUNCTION_VALUE</strong> <em>(const_tree <var>ret_type</var>, const_tree <var>fn_decl_or_type</var>, bool <var>outgoing</var>)</em></dt>
<dd>
<p>Define this to return an RTX representing the place where a function
returns or receives a value of data type <var>ret_type</var>, a tree node
representing a data type.  <var>fn_decl_or_type</var> is a tree node
representing <code>FUNCTION_DECL</code> or <code>FUNCTION_TYPE</code> of a
function being called.  If <var>outgoing</var> is false, the hook should
compute the register in which the caller will see the return value.
Otherwise, the hook should return an RTX representing the place where
a function returns a value.
</p>
<p>On many machines, only <code>TYPE_MODE (<var>ret_type</var>)</code> is relevant.
(Actually, on most machines, scalar values are returned in the same
place regardless of mode.)  The value of the expression is usually a
<code>reg</code> RTX for the hard register where the return value is stored.
The value can also be a <code>parallel</code> RTX, if the return value is in
multiple places.  See <code>TARGET_FUNCTION_ARG</code> for an explanation of the
<code>parallel</code> form.   Note that the callee will populate every
location specified in the <code>parallel</code>, but if the first element of
the <code>parallel</code> contains the whole return value, callers will use
that element as the canonical location and ignore the others.  The m68k
port uses this type of <code>parallel</code> to return pointers in both
&lsquo;<samp>%a0</samp>&rsquo; (the canonical location) and &lsquo;<samp>%d0</samp>&rsquo;.
</p>
<p>If <code>TARGET_PROMOTE_FUNCTION_RETURN</code> returns true, you must apply
the same promotion rules specified in <code>PROMOTE_MODE</code> if
<var>valtype</var> is a scalar type.
</p>
<p>If the precise function being called is known, <var>func</var> is a tree
node (<code>FUNCTION_DECL</code>) for it; otherwise, <var>func</var> is a null
pointer.  This makes it possible to use a different value-returning
convention for specific functions when all their calls are
known.
</p>
<p>Some target machines have &ldquo;register windows&rdquo; so that the register in
which a function returns its value is not the same as the one in which
the caller sees the value.  For such machines, you should return
different RTX depending on <var>outgoing</var>.
</p>
<p><code>TARGET_FUNCTION_VALUE</code> is not used for return values with
aggregate data types, because these are returned in another way.  See
<code>TARGET_STRUCT_VALUE_RTX</code> and related macros, below.
</p></dd></dl>

<dl>
<dt><a name="index-FUNCTION_005fVALUE"></a>Macro: <strong>FUNCTION_VALUE</strong> <em>(<var>valtype</var>, <var>func</var>)</em></dt>
<dd><p>This macro has been deprecated.  Use <code>TARGET_FUNCTION_VALUE</code> for
a new target instead.
</p></dd></dl>

<dl>
<dt><a name="index-LIBCALL_005fVALUE"></a>Macro: <strong>LIBCALL_VALUE</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression to create an RTX representing the place where a library
function returns a value of mode <var>mode</var>.
</p>
<p>Note that &ldquo;library function&rdquo; in this context means a compiler
support routine, used to perform arithmetic, whose name is known
specially by the compiler and was not mentioned in the C code being
compiled.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLIBCALL_005fVALUE"></a>Target Hook: <em>rtx</em> <strong>TARGET_LIBCALL_VALUE</strong> <em>(enum machine_mode <var>mode</var>, const_rtx <var>fun</var>)</em></dt>
<dd><p>Define this hook if the back-end needs to know the name of the libcall
function in order to determine where the result should be returned.
</p>
<p>The mode of the result is given by <var>mode</var> and the name of the called
library function is given by <var>fun</var>.  The hook should return an RTX
representing the place where the library function result will be returned.
</p>
<p>If this hook is not defined, then LIBCALL_VALUE will be used.
</p></dd></dl>

<dl>
<dt><a name="index-FUNCTION_005fVALUE_005fREGNO_005fP"></a>Macro: <strong>FUNCTION_VALUE_REGNO_P</strong> <em>(<var>regno</var>)</em></dt>
<dd><p>A C expression that is nonzero if <var>regno</var> is the number of a hard
register in which the values of called function may come back.
</p>
<p>A register whose use for returning values is limited to serving as the
second of a pair (for a value of type <code>double</code>, say) need not be
recognized by this macro.  So for most machines, this definition
suffices:
</p>
<div class="smallexample">
<pre class="smallexample">#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
</pre></div>

<p>If the machine has register windows, so that the caller and the called
function use different registers for the return value, this macro
should recognize only the caller&rsquo;s register numbers.
</p>
<p>This macro has been deprecated.  Use <code>TARGET_FUNCTION_VALUE_REGNO_P</code>
for a new target instead.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFUNCTION_005fVALUE_005fREGNO_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_FUNCTION_VALUE_REGNO_P</strong> <em>(const unsigned int <var>regno</var>)</em></dt>
<dd><p>A target hook that return <code>true</code> if <var>regno</var> is the number of a hard
register in which the values of called function may come back.
</p>
<p>A register whose use for returning values is limited to serving as the
second of a pair (for a value of type <code>double</code>, say) need not be
recognized by this target hook.
</p>
<p>If the machine has register windows, so that the caller and the called
function use different registers for the return value, this target hook
should recognize only the caller&rsquo;s register numbers.
</p>
<p>If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be used.
</p></dd></dl>

<dl>
<dt><a name="index-APPLY_005fRESULT_005fSIZE"></a>Macro: <strong>APPLY_RESULT_SIZE</strong></dt>
<dd><p>Define this macro if &lsquo;<samp>untyped_call</samp>&rsquo; and &lsquo;<samp>untyped_return</samp>&rsquo;
need more space than is implied by <code>FUNCTION_VALUE_REGNO_P</code> for
saving and restoring an arbitrary return value.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fRETURN_005fIN_005fMSB"></a>Target Hook: <em>bool</em> <strong>TARGET_RETURN_IN_MSB</strong> <em>(const_tree <var>type</var>)</em></dt>
<dd><p>This hook should return true if values of type <var>type</var> are returned
at the most significant end of a register (in other words, if they are
padded at the least significant end).  You can assume that <var>type</var>
is returned in a register; the caller is required to check this.
</p>
<p>Note that the register provided by <code>TARGET_FUNCTION_VALUE</code> must
be able to hold the complete return value.  For example, if a 1-, 2-
or 3-byte structure is returned at the most significant end of a
4-byte register, <code>TARGET_FUNCTION_VALUE</code> should provide an
<code>SImode</code> rtx.
</p></dd></dl>

<hr>
<a name="Aggregate-Return"></a>
<div class="header">
<p>
Next: <a href="#Caller-Saves" accesskey="n" rel="next">Caller Saves</a>, Previous: <a href="#Scalar-Return" accesskey="p" rel="prev">Scalar Return</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="How-Large-Values-Are-Returned"></a>
<h4 class="subsection">17.10.9 How Large Values Are Returned</h4>
<a name="index-aggregates-as-return-values"></a>
<a name="index-large-return-values"></a>
<a name="index-returning-aggregate-values"></a>
<a name="index-structure-value-address"></a>

<p>When a function value&rsquo;s mode is <code>BLKmode</code> (and in some other
cases), the value is not returned according to
<code>TARGET_FUNCTION_VALUE</code> (see <a href="#Scalar-Return">Scalar Return</a>).  Instead, the
caller passes the address of a block of memory in which the value
should be stored.  This address is called the <em>structure value
address</em>.
</p>
<p>This section describes how to control returning structure values in
memory.
</p>
<dl>
<dt><a name="index-TARGET_005fRETURN_005fIN_005fMEMORY"></a>Target Hook: <em>bool</em> <strong>TARGET_RETURN_IN_MEMORY</strong> <em>(const_tree <var>type</var>, const_tree <var>fntype</var>)</em></dt>
<dd><p>This target hook should return a nonzero value to say to return the
function value in memory, just as large structures are always returned.
Here <var>type</var> will be the data type of the value, and <var>fntype</var>
will be the type of the function doing the returning, or <code>NULL</code> for
libcalls.
</p>
<p>Note that values of mode <code>BLKmode</code> must be explicitly handled
by this function.  Also, the option <samp>-fpcc-struct-return</samp>
takes effect regardless of this macro.  On most systems, it is
possible to leave the hook undefined; this causes a default
definition to be used, whose value is the constant 1 for <code>BLKmode</code>
values, and 0 otherwise.
</p>
<p>Do not use this hook to indicate that structures and unions should always
be returned in memory.  You should instead use <code>DEFAULT_PCC_STRUCT_RETURN</code>
to indicate this.
</p></dd></dl>

<dl>
<dt><a name="index-DEFAULT_005fPCC_005fSTRUCT_005fRETURN"></a>Macro: <strong>DEFAULT_PCC_STRUCT_RETURN</strong></dt>
<dd><p>Define this macro to be 1 if all structure and union return values must be
in memory.  Since this results in slower code, this should be defined
only if needed for compatibility with other compilers or with an ABI.
If you define this macro to be 0, then the conventions used for structure
and union return values are decided by the <code>TARGET_RETURN_IN_MEMORY</code>
target hook.
</p>
<p>If not defined, this defaults to the value 1.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSTRUCT_005fVALUE_005fRTX"></a>Target Hook: <em>rtx</em> <strong>TARGET_STRUCT_VALUE_RTX</strong> <em>(tree <var>fndecl</var>, int <var>incoming</var>)</em></dt>
<dd><p>This target hook should return the location of the structure value
address (normally a <code>mem</code> or <code>reg</code>), or 0 if the address is
passed as an &ldquo;invisible&rdquo; first argument.  Note that <var>fndecl</var> may
be <code>NULL</code>, for libcalls.  You do not need to define this target
hook if the address is always passed as an &ldquo;invisible&rdquo; first
argument.
</p>
<p>On some architectures the place where the structure value address
is found by the called function is not the same place that the
caller put it.  This can be due to register windows, or it could
be because the function prologue moves it to a different place.
<var>incoming</var> is <code>1</code> or <code>2</code> when the location is needed in
the context of the called function, and <code>0</code> in the context of
the caller.
</p>
<p>If <var>incoming</var> is nonzero and the address is to be found on the
stack, return a <code>mem</code> which refers to the frame pointer. If
<var>incoming</var> is <code>2</code>, the result is being used to fetch the
structure value address at the beginning of a function.  If you need
to emit adjusting code, you should do it at this point.
</p></dd></dl>

<dl>
<dt><a name="index-PCC_005fSTATIC_005fSTRUCT_005fRETURN"></a>Macro: <strong>PCC_STATIC_STRUCT_RETURN</strong></dt>
<dd><p>Define this macro if the usual system convention on the target machine
for returning structures and unions is for the called function to return
the address of a static variable containing the value.
</p>
<p>Do not define this if the usual system convention is for the caller to
pass an address to the subroutine.
</p>
<p>This macro has effect in <samp>-fpcc-struct-return</samp> mode, but it does
nothing when you use <samp>-freg-struct-return</samp> mode.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fGET_005fRAW_005fRESULT_005fMODE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_GET_RAW_RESULT_MODE</strong> <em>(int <var>regno</var>)</em></dt>
<dd><p>This target hook returns the mode to be used when accessing raw return registers in <code>__builtin_return</code>.  Define this macro if the value in <var>reg_raw_mode</var> is not correct.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fGET_005fRAW_005fARG_005fMODE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_GET_RAW_ARG_MODE</strong> <em>(int <var>regno</var>)</em></dt>
<dd><p>This target hook returns the mode to be used when accessing raw argument registers in <code>__builtin_apply_args</code>.  Define this macro if the value in <var>reg_raw_mode</var> is not correct.
</p></dd></dl>

<hr>
<a name="Caller-Saves"></a>
<div class="header">
<p>
Next: <a href="#Function-Entry" accesskey="n" rel="next">Function Entry</a>, Previous: <a href="#Aggregate-Return" accesskey="p" rel="prev">Aggregate Return</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Caller_002dSaves-Register-Allocation"></a>
<h4 class="subsection">17.10.10 Caller-Saves Register Allocation</h4>

<p>If you enable it, GCC can save registers around function calls.  This
makes it possible to use call-clobbered registers to hold variables that
must live across calls.
</p>
<dl>
<dt><a name="index-CALLER_005fSAVE_005fPROFITABLE"></a>Macro: <strong>CALLER_SAVE_PROFITABLE</strong> <em>(<var>refs</var>, <var>calls</var>)</em></dt>
<dd><p>A C expression to determine whether it is worthwhile to consider placing
a pseudo-register in a call-clobbered hard register and saving and
restoring it around each function call.  The expression should be 1 when
this is worth doing, and 0 otherwise.
</p>
<p>If you don&rsquo;t define this macro, a default is used which is good on most
machines: <code>4 * <var>calls</var> &lt; <var>refs</var></code>.
</p></dd></dl>

<dl>
<dt><a name="index-HARD_005fREGNO_005fCALLER_005fSAVE_005fMODE"></a>Macro: <strong>HARD_REGNO_CALLER_SAVE_MODE</strong> <em>(<var>regno</var>, <var>nregs</var>)</em></dt>
<dd><p>A C expression specifying which mode is required for saving <var>nregs</var>
of a pseudo-register in call-clobbered hard register <var>regno</var>.  If
<var>regno</var> is unsuitable for caller save, <code>VOIDmode</code> should be
returned.  For most machines this macro need not be defined since GCC
will select the smallest suitable mode.
</p></dd></dl>

<hr>
<a name="Function-Entry"></a>
<div class="header">
<p>
Next: <a href="#Profiling" accesskey="n" rel="next">Profiling</a>, Previous: <a href="#Caller-Saves" accesskey="p" rel="prev">Caller Saves</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Function-Entry-and-Exit"></a>
<h4 class="subsection">17.10.11 Function Entry and Exit</h4>
<a name="index-function-entry-and-exit"></a>
<a name="index-prologue"></a>
<a name="index-epilogue"></a>

<p>This section describes the macros that output function entry
(<em>prologue</em>) and exit (<em>epilogue</em>) code.
</p>
<dl>
<dt><a name="index-TARGET_005fASM_005fFUNCTION_005fPROLOGUE"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_FUNCTION_PROLOGUE</strong> <em>(FILE *<var>file</var>, HOST_WIDE_INT <var>size</var>)</em></dt>
<dd><p>If defined, a function that outputs the assembler code for entry to a
function.  The prologue is responsible for setting up the stack frame,
initializing the frame pointer register, saving registers that must be
saved, and allocating <var>size</var> additional bytes of storage for the
local variables.  <var>size</var> is an integer.  <var>file</var> is a stdio
stream to which the assembler code should be output.
</p>
<p>The label for the beginning of the function need not be output by this
macro.  That has already been done when the macro is run.
</p>
<a name="index-regs_005fever_005flive"></a>
<p>To determine which registers to save, the macro can refer to the array
<code>regs_ever_live</code>: element <var>r</var> is nonzero if hard register
<var>r</var> is used anywhere within the function.  This implies the function
prologue should save register <var>r</var>, provided it is not one of the
call-used registers.  (<code>TARGET_ASM_FUNCTION_EPILOGUE</code> must likewise use
<code>regs_ever_live</code>.)
</p>
<p>On machines that have &ldquo;register windows&rdquo;, the function entry code does
not save on the stack the registers that are in the windows, even if
they are supposed to be preserved by function calls; instead it takes
appropriate steps to &ldquo;push&rdquo; the register stack, if any non-call-used
registers are used in the function.
</p>
<a name="index-frame_005fpointer_005fneeded"></a>
<p>On machines where functions may or may not have frame-pointers, the
function entry code must vary accordingly; it must set up the frame
pointer if one is wanted, and not otherwise.  To determine whether a
frame pointer is in wanted, the macro can refer to the variable
<code>frame_pointer_needed</code>.  The variable&rsquo;s value will be 1 at run
time in a function that needs a frame pointer.  See <a href="#Elimination">Elimination</a>.
</p>
<p>The function entry code is responsible for allocating any stack space
required for the function.  This stack space consists of the regions
listed below.  In most cases, these regions are allocated in the
order listed, with the last listed region closest to the top of the
stack (the lowest address if <code>STACK_GROWS_DOWNWARD</code> is defined, and
the highest address if it is not defined).  You can use a different order
for a machine if doing so is more convenient or required for
compatibility reasons.  Except in cases where required by standard
or by a debugger, there is no reason why the stack layout used by GCC
need agree with that used by other compilers for a machine.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFUNCTION_005fEND_005fPROLOGUE"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_FUNCTION_END_PROLOGUE</strong> <em>(FILE *<var>file</var>)</em></dt>
<dd><p>If defined, a function that outputs assembler code at the end of a
prologue.  This should be used when the function prologue is being
emitted as RTL, and you have some extra assembler that needs to be
emitted.  See <a href="#prologue-instruction-pattern">prologue instruction pattern</a>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFUNCTION_005fBEGIN_005fEPILOGUE"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_FUNCTION_BEGIN_EPILOGUE</strong> <em>(FILE *<var>file</var>)</em></dt>
<dd><p>If defined, a function that outputs assembler code at the start of an
epilogue.  This should be used when the function epilogue is being
emitted as RTL, and you have some extra assembler that needs to be
emitted.  See <a href="#epilogue-instruction-pattern">epilogue instruction pattern</a>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFUNCTION_005fEPILOGUE"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_FUNCTION_EPILOGUE</strong> <em>(FILE *<var>file</var>, HOST_WIDE_INT <var>size</var>)</em></dt>
<dd><p>If defined, a function that outputs the assembler code for exit from a
function.  The epilogue is responsible for restoring the saved
registers and stack pointer to their values when the function was
called, and returning control to the caller.  This macro takes the
same arguments as the macro <code>TARGET_ASM_FUNCTION_PROLOGUE</code>, and the
registers to restore are determined from <code>regs_ever_live</code> and
<code>CALL_USED_REGISTERS</code> in the same way.
</p>
<p>On some machines, there is a single instruction that does all the work
of returning from the function.  On these machines, give that
instruction the name &lsquo;<samp>return</samp>&rsquo; and do not define the macro
<code>TARGET_ASM_FUNCTION_EPILOGUE</code> at all.
</p>
<p>Do not define a pattern named &lsquo;<samp>return</samp>&rsquo; if you want the
<code>TARGET_ASM_FUNCTION_EPILOGUE</code> to be used.  If you want the target
switches to control whether return instructions or epilogues are used,
define a &lsquo;<samp>return</samp>&rsquo; pattern with a validity condition that tests the
target switches appropriately.  If the &lsquo;<samp>return</samp>&rsquo; pattern&rsquo;s validity
condition is false, epilogues will be used.
</p>
<p>On machines where functions may or may not have frame-pointers, the
function exit code must vary accordingly.  Sometimes the code for these
two cases is completely different.  To determine whether a frame pointer
is wanted, the macro can refer to the variable
<code>frame_pointer_needed</code>.  The variable&rsquo;s value will be 1 when compiling
a function that needs a frame pointer.
</p>
<p>Normally, <code>TARGET_ASM_FUNCTION_PROLOGUE</code> and
<code>TARGET_ASM_FUNCTION_EPILOGUE</code> must treat leaf functions specially.
The C variable <code>current_function_is_leaf</code> is nonzero for such a
function.  See <a href="#Leaf-Functions">Leaf Functions</a>.
</p>
<p>On some machines, some functions pop their arguments on exit while
others leave that for the caller to do.  For example, the 68020 when
given <samp>-mrtd</samp> pops arguments in functions that take a fixed
number of arguments.
</p>
<a name="index-pops_005fargs"></a>
<a name="index-crtl_002d_003eargs_002epops_005fargs"></a>
<p>Your definition of the macro <code>RETURN_POPS_ARGS</code> decides which
functions pop their own arguments.  <code>TARGET_ASM_FUNCTION_EPILOGUE</code>
needs to know what was decided.  The number of bytes of the current
function&rsquo;s arguments that this function should pop is available in
<code>crtl-&gt;args.pops_args</code>.  See <a href="#Scalar-Return">Scalar Return</a>.
</p></dd></dl>

<ul>
<li> <a name="index-pretend_005fargs_005fsize"></a>
<a name="index-crtl_002d_003eargs_002epretend_005fargs_005fsize"></a>
A region of <code>crtl-&gt;args.pretend_args_size</code> bytes of
uninitialized space just underneath the first argument arriving on the
stack.  (This may not be at the very start of the allocated stack region
if the calling sequence has pushed anything else since pushing the stack
arguments.  But usually, on such machines, nothing else has been pushed
yet, because the function prologue itself does all the pushing.)  This
region is used on machines where an argument may be passed partly in
registers and partly in memory, and, in some cases to support the
features in <code>&lt;stdarg.h&gt;</code>.

</li><li> An area of memory used to save certain registers used by the function.
The size of this area, which may also include space for such things as
the return address and pointers to previous stack frames, is
machine-specific and usually depends on which registers have been used
in the function.  Machines with register windows often do not require
a save area.

</li><li> A region of at least <var>size</var> bytes, possibly rounded up to an allocation
boundary, to contain the local variables of the function.  On some machines,
this region and the save area may occur in the opposite order, with the
save area closer to the top of the stack.

</li><li> <a name="index-ACCUMULATE_005fOUTGOING_005fARGS-and-stack-frames"></a>
Optionally, when <code>ACCUMULATE_OUTGOING_ARGS</code> is defined, a region of
<code>crtl-&gt;outgoing_args_size</code> bytes to be used for outgoing
argument lists of the function.  See <a href="#Stack-Arguments">Stack Arguments</a>.
</li></ul>

<dl>
<dt><a name="index-EXIT_005fIGNORE_005fSTACK"></a>Macro: <strong>EXIT_IGNORE_STACK</strong></dt>
<dd><p>Define this macro as a C expression that is nonzero if the return
instruction or the function epilogue ignores the value of the stack
pointer; in other words, if it is safe to delete an instruction to
adjust the stack pointer before a return from the function.  The
default is 0.
</p>
<p>Note that this macro&rsquo;s value is relevant only for functions for which
frame pointers are maintained.  It is never safe to delete a final
stack adjustment in a function that has no frame pointer, and the
compiler knows this regardless of <code>EXIT_IGNORE_STACK</code>.
</p></dd></dl>

<dl>
<dt><a name="index-EPILOGUE_005fUSES"></a>Macro: <strong>EPILOGUE_USES</strong> <em>(<var>regno</var>)</em></dt>
<dd><p>Define this macro as a C expression that is nonzero for registers that are
used by the epilogue or the &lsquo;<samp>return</samp>&rsquo; pattern.  The stack and frame
pointer registers are already assumed to be used as needed.
</p></dd></dl>

<dl>
<dt><a name="index-EH_005fUSES"></a>Macro: <strong>EH_USES</strong> <em>(<var>regno</var>)</em></dt>
<dd><p>Define this macro as a C expression that is nonzero for registers that are
used by the exception handling mechanism, and so should be considered live
on entry to an exception edge.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fOUTPUT_005fMI_005fTHUNK"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_OUTPUT_MI_THUNK</strong> <em>(FILE *<var>file</var>, tree <var>thunk_fndecl</var>, HOST_WIDE_INT <var>delta</var>, HOST_WIDE_INT <var>vcall_offset</var>, tree <var>function</var>)</em></dt>
<dd><p>A function that outputs the assembler code for a thunk
function, used to implement C++ virtual function calls with multiple
inheritance.  The thunk acts as a wrapper around a virtual function,
adjusting the implicit object parameter before handing control off to
the real function.
</p>
<p>First, emit code to add the integer <var>delta</var> to the location that
contains the incoming first argument.  Assume that this argument
contains a pointer, and is the one used to pass the <code>this</code> pointer
in C++.  This is the incoming argument <em>before</em> the function prologue,
e.g. &lsquo;<samp>%o0</samp>&rsquo; on a sparc.  The addition must preserve the values of
all other incoming arguments.
</p>
<p>Then, if <var>vcall_offset</var> is nonzero, an additional adjustment should be
made after adding <code>delta</code>.  In particular, if <var>p</var> is the
adjusted pointer, the following adjustment should be made:
</p>
<div class="smallexample">
<pre class="smallexample">p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]
</pre></div>

<p>After the additions, emit code to jump to <var>function</var>, which is a
<code>FUNCTION_DECL</code>.  This is a direct pure jump, not a call, and does
not touch the return address.  Hence returning from <var>FUNCTION</var> will
return to whoever called the current &lsquo;<samp>thunk</samp>&rsquo;.
</p>
<p>The effect must be as if <var>function</var> had been called directly with
the adjusted first argument.  This macro is responsible for emitting all
of the code for a thunk function; <code>TARGET_ASM_FUNCTION_PROLOGUE</code>
and <code>TARGET_ASM_FUNCTION_EPILOGUE</code> are not invoked.
</p>
<p>The <var>thunk_fndecl</var> is redundant.  (<var>delta</var> and <var>function</var>
have already been extracted from it.)  It might possibly be useful on
some targets, but probably not.
</p>
<p>If you do not define this macro, the target-independent code in the C++
front end will generate a less efficient heavyweight thunk that calls
<var>function</var> instead of jumping to it.  The generic approach does
not support varargs.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fCAN_005fOUTPUT_005fMI_005fTHUNK"></a>Target Hook: <em>bool</em> <strong>TARGET_ASM_CAN_OUTPUT_MI_THUNK</strong> <em>(const_tree <var>thunk_fndecl</var>, HOST_WIDE_INT <var>delta</var>, HOST_WIDE_INT <var>vcall_offset</var>, const_tree <var>function</var>)</em></dt>
<dd><p>A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be able
to output the assembler code for the thunk function specified by the
arguments it is passed, and false otherwise.  In the latter case, the
generic approach will be used by the C++ front end, with the limitations
previously exposed.
</p></dd></dl>

<hr>
<a name="Profiling"></a>
<div class="header">
<p>
Next: <a href="#Tail-Calls" accesskey="n" rel="next">Tail Calls</a>, Previous: <a href="#Function-Entry" accesskey="p" rel="prev">Function Entry</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Generating-Code-for-Profiling"></a>
<h4 class="subsection">17.10.12 Generating Code for Profiling</h4>
<a name="index-profiling_002c-code-generation"></a>

<p>These macros will help you generate code for profiling.
</p>
<dl>
<dt><a name="index-FUNCTION_005fPROFILER"></a>Macro: <strong>FUNCTION_PROFILER</strong> <em>(<var>file</var>, <var>labelno</var>)</em></dt>
<dd><p>A C statement or compound statement to output to <var>file</var> some
assembler code to call the profiling subroutine <code>mcount</code>.
</p>
<a name="index-mcount"></a>
<p>The details of how <code>mcount</code> expects to be called are determined by
your operating system environment, not by GCC.  To figure them out,
compile a small program for profiling using the system&rsquo;s installed C
compiler and look at the assembler code that results.
</p>
<p>Older implementations of <code>mcount</code> expect the address of a counter
variable to be loaded into some register.  The name of this variable is
&lsquo;<samp>LP</samp>&rsquo; followed by the number <var>labelno</var>, so you would generate
the name using &lsquo;<samp>LP%d</samp>&rsquo; in a <code>fprintf</code>.
</p></dd></dl>

<dl>
<dt><a name="index-PROFILE_005fHOOK"></a>Macro: <strong>PROFILE_HOOK</strong></dt>
<dd><p>A C statement or compound statement to output to <var>file</var> some assembly
code to call the profiling subroutine <code>mcount</code> even the target does
not support profiling.
</p></dd></dl>

<dl>
<dt><a name="index-NO_005fPROFILE_005fCOUNTERS"></a>Macro: <strong>NO_PROFILE_COUNTERS</strong></dt>
<dd><p>Define this macro to be an expression with a nonzero value if the
<code>mcount</code> subroutine on your system does not need a counter variable
allocated for each function.  This is true for almost all modern
implementations.  If you define this macro, you must not use the
<var>labelno</var> argument to <code>FUNCTION_PROFILER</code>.
</p></dd></dl>

<dl>
<dt><a name="index-PROFILE_005fBEFORE_005fPROLOGUE"></a>Macro: <strong>PROFILE_BEFORE_PROLOGUE</strong></dt>
<dd><p>Define this macro if the code for function profiling should come before
the function prologue.  Normally, the profiling code comes after.
</p></dd></dl>

<hr>
<a name="Tail-Calls"></a>
<div class="header">
<p>
Next: <a href="#Stack-Smashing-Protection" accesskey="n" rel="next">Stack Smashing Protection</a>, Previous: <a href="#Profiling" accesskey="p" rel="prev">Profiling</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Permitting-tail-calls"></a>
<h4 class="subsection">17.10.13 Permitting tail calls</h4>
<a name="index-tail-calls"></a>

<dl>
<dt><a name="index-TARGET_005fFUNCTION_005fOK_005fFOR_005fSIBCALL"></a>Target Hook: <em>bool</em> <strong>TARGET_FUNCTION_OK_FOR_SIBCALL</strong> <em>(tree <var>decl</var>, tree <var>exp</var>)</em></dt>
<dd><p>True if it is ok to do sibling call optimization for the specified
call expression <var>exp</var>.  <var>decl</var> will be the called function,
or <code>NULL</code> if this is an indirect call.
</p>
<p>It is not uncommon for limitations of calling conventions to prevent
tail calls to functions outside the current unit of translation, or
during PIC compilation.  The hook is used to enforce these restrictions,
as the <code>sibcall</code> md pattern can not fail, or fall over to a
&ldquo;normal&rdquo; call.  The criteria for successful sibling call optimization
may vary greatly between different architectures.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEXTRA_005fLIVE_005fON_005fENTRY"></a>Target Hook: <em>void</em> <strong>TARGET_EXTRA_LIVE_ON_ENTRY</strong> <em>(bitmap <var>regs</var>)</em></dt>
<dd><p>Add any hard registers to <var>regs</var> that are live on entry to the
function.  This hook only needs to be defined to provide registers that
cannot be found by examination of FUNCTION_ARG_REGNO_P, the callee saved
registers, STATIC_CHAIN_INCOMING_REGNUM, STATIC_CHAIN_REGNUM,
TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM, EH_USES,
FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSET_005fUP_005fBY_005fPROLOGUE"></a>Target Hook: <em>void</em> <strong>TARGET_SET_UP_BY_PROLOGUE</strong> <em>(struct hard_reg_set_container *<var></var>)</em></dt>
<dd><p>This hook should add additional registers that are computed by the prologue to the hard regset for shrink-wrapping optimization purposes.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fWARN_005fFUNC_005fRETURN"></a>Target Hook: <em>bool</em> <strong>TARGET_WARN_FUNC_RETURN</strong> <em>(tree)</em></dt>
<dd><p>True if a function&rsquo;s return statements should be checked for matching the function&rsquo;s return type.  This includes checking for falling off the end of a non-void function.  Return false if no such check should be made.
</p></dd></dl>

<hr>
<a name="Stack-Smashing-Protection"></a>
<div class="header">
<p>
Previous: <a href="#Tail-Calls" accesskey="p" rel="prev">Tail Calls</a>, Up: <a href="#Stack-and-Calling" accesskey="u" rel="up">Stack and Calling</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Stack-smashing-protection"></a>
<h4 class="subsection">17.10.14 Stack smashing protection</h4>
<a name="index-stack-smashing-protection"></a>

<dl>
<dt><a name="index-TARGET_005fSTACK_005fPROTECT_005fGUARD"></a>Target Hook: <em>tree</em> <strong>TARGET_STACK_PROTECT_GUARD</strong> <em>(void)</em></dt>
<dd><p>This hook returns a <code>DECL</code> node for the external variable to use
for the stack protection guard.  This variable is initialized by the
runtime to some random value and is used to initialize the guard value
that is placed at the top of the local stack frame.  The type of this
variable must be <code>ptr_type_node</code>.
</p>
<p>The default version of this hook creates a variable called
&lsquo;<samp>__stack_chk_guard</samp>&rsquo;, which is normally defined in <samp>libgcc2.c</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSTACK_005fPROTECT_005fFAIL"></a>Target Hook: <em>tree</em> <strong>TARGET_STACK_PROTECT_FAIL</strong> <em>(void)</em></dt>
<dd><p>This hook returns a <code>CALL_EXPR</code> that alerts the runtime that the
stack protect guard variable has been modified.  This expression should
involve a call to a <code>noreturn</code> function.
</p>
<p>The default version of this hook invokes a function called
&lsquo;<samp>__stack_chk_fail</samp>&rsquo;, taking no arguments.  This function is
normally defined in <samp>libgcc2.c</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSUPPORTS_005fSPLIT_005fSTACK"></a>Common Target Hook: <em>bool</em> <strong>TARGET_SUPPORTS_SPLIT_STACK</strong> <em>(bool <var>report</var>, struct gcc_options *<var>opts</var>)</em></dt>
<dd><p>Whether this target supports splitting the stack when the options described in <var>opts</var> have been passed.  This is called after options have been parsed, so the target may reject splitting the stack in some configurations.  The default version of this hook returns false.  If <var>report</var> is true, this function may issue a warning or error; if <var>report</var> is false, it must simply return a value
</p></dd></dl>

<hr>
<a name="Varargs"></a>
<div class="header">
<p>
Next: <a href="#Trampolines" accesskey="n" rel="next">Trampolines</a>, Previous: <a href="#Stack-and-Calling" accesskey="p" rel="prev">Stack and Calling</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Implementing-the-Varargs-Macros"></a>
<h3 class="section">17.11 Implementing the Varargs Macros</h3>
<a name="index-varargs-implementation"></a>

<p>GCC comes with an implementation of <code>&lt;varargs.h&gt;</code> and
<code>&lt;stdarg.h&gt;</code> that work without change on machines that pass arguments
on the stack.  Other machines require their own implementations of
varargs, and the two machine independent header files must have
conditionals to include it.
</p>
<p>ISO <code>&lt;stdarg.h&gt;</code> differs from traditional <code>&lt;varargs.h&gt;</code> mainly in
the calling convention for <code>va_start</code>.  The traditional
implementation takes just one argument, which is the variable in which
to store the argument pointer.  The ISO implementation of
<code>va_start</code> takes an additional second argument.  The user is
supposed to write the last named argument of the function here.
</p>
<p>However, <code>va_start</code> should not use this argument.  The way to find
the end of the named arguments is with the built-in functions described
below.
</p>
<dl>
<dt><a name="index-_005f_005fbuiltin_005fsaveregs"></a>Macro: <strong>__builtin_saveregs</strong> <em>()</em></dt>
<dd><p>Use this built-in function to save the argument registers in memory so
that the varargs mechanism can access them.  Both ISO and traditional
versions of <code>va_start</code> must use <code>__builtin_saveregs</code>, unless
you use <code>TARGET_SETUP_INCOMING_VARARGS</code> (see below) instead.
</p>
<p>On some machines, <code>__builtin_saveregs</code> is open-coded under the
control of the target hook <code>TARGET_EXPAND_BUILTIN_SAVEREGS</code>.  On
other machines, it calls a routine written in assembler language,
found in <samp>libgcc2.c</samp>.
</p>
<p>Code generated for the call to <code>__builtin_saveregs</code> appears at the
beginning of the function, as opposed to where the call to
<code>__builtin_saveregs</code> is written, regardless of what the code is.
This is because the registers must be saved before the function starts
to use them for its own purposes.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fbuiltin_005fnext_005farg"></a>Macro: <strong>__builtin_next_arg</strong> <em>(<var>lastarg</var>)</em></dt>
<dd><p>This builtin returns the address of the first anonymous stack
argument, as type <code>void *</code>.  If <code>ARGS_GROW_DOWNWARD</code>, it
returns the address of the location above the first anonymous stack
argument.  Use it in <code>va_start</code> to initialize the pointer for
fetching arguments from the stack.  Also use it in <code>va_start</code> to
verify that the second parameter <var>lastarg</var> is the last named argument
of the current function.
</p></dd></dl>

<dl>
<dt><a name="index-_005f_005fbuiltin_005fclassify_005ftype"></a>Macro: <strong>__builtin_classify_type</strong> <em>(<var>object</var>)</em></dt>
<dd><p>Since each machine has its own conventions for which data types are
passed in which kind of register, your implementation of <code>va_arg</code>
has to embody these conventions.  The easiest way to categorize the
specified data type is to use <code>__builtin_classify_type</code> together
with <code>sizeof</code> and <code>__alignof__</code>.
</p>
<p><code>__builtin_classify_type</code> ignores the value of <var>object</var>,
considering only its data type.  It returns an integer describing what
kind of type that is&mdash;integer, floating, pointer, structure, and so on.
</p>
<p>The file <samp>typeclass.h</samp> defines an enumeration that you can use to
interpret the values of <code>__builtin_classify_type</code>.
</p></dd></dl>

<p>These machine description macros help implement varargs:
</p>
<dl>
<dt><a name="index-TARGET_005fEXPAND_005fBUILTIN_005fSAVEREGS"></a>Target Hook: <em>rtx</em> <strong>TARGET_EXPAND_BUILTIN_SAVEREGS</strong> <em>(void)</em></dt>
<dd><p>If defined, this hook produces the machine-specific code for a call to
<code>__builtin_saveregs</code>.  This code will be moved to the very
beginning of the function, before any parameter access are made.  The
return value of this function should be an RTX that contains the value
to use as the return of <code>__builtin_saveregs</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSETUP_005fINCOMING_005fVARARGS"></a>Target Hook: <em>void</em> <strong>TARGET_SETUP_INCOMING_VARARGS</strong> <em>(cumulative_args_t <var>args_so_far</var>, enum machine_mode <var>mode</var>, tree <var>type</var>, int *<var>pretend_args_size</var>, int <var>second_time</var>)</em></dt>
<dd><p>This target hook offers an alternative to using
<code>__builtin_saveregs</code> and defining the hook
<code>TARGET_EXPAND_BUILTIN_SAVEREGS</code>.  Use it to store the anonymous
register arguments into the stack so that all the arguments appear to
have been passed consecutively on the stack.  Once this is done, you can
use the standard implementation of varargs that works for machines that
pass all their arguments on the stack.
</p>
<p>The argument <var>args_so_far</var> points to the <code>CUMULATIVE_ARGS</code> data
structure, containing the values that are obtained after processing the
named arguments.  The arguments <var>mode</var> and <var>type</var> describe the
last named argument&mdash;its machine mode and its data type as a tree node.
</p>
<p>The target hook should do two things: first, push onto the stack all the
argument registers <em>not</em> used for the named arguments, and second,
store the size of the data thus pushed into the <code>int</code>-valued
variable pointed to by <var>pretend_args_size</var>.  The value that you
store here will serve as additional offset for setting up the stack
frame.
</p>
<p>Because you must generate code to push the anonymous arguments at
compile time without knowing their data types,
<code>TARGET_SETUP_INCOMING_VARARGS</code> is only useful on machines that
have just a single category of argument register and use it uniformly
for all data types.
</p>
<p>If the argument <var>second_time</var> is nonzero, it means that the
arguments of the function are being analyzed for the second time.  This
happens for an inline function, which is not actually compiled until the
end of the source file.  The hook <code>TARGET_SETUP_INCOMING_VARARGS</code> should
not generate any instructions in this case.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSTRICT_005fARGUMENT_005fNAMING"></a>Target Hook: <em>bool</em> <strong>TARGET_STRICT_ARGUMENT_NAMING</strong> <em>(cumulative_args_t <var>ca</var>)</em></dt>
<dd><p>Define this hook to return <code>true</code> if the location where a function
argument is passed depends on whether or not it is a named argument.
</p>
<p>This hook controls how the <var>named</var> argument to <code>TARGET_FUNCTION_ARG</code>
is set for varargs and stdarg functions.  If this hook returns
<code>true</code>, the <var>named</var> argument is always true for named
arguments, and false for unnamed arguments.  If it returns <code>false</code>,
but <code>TARGET_PRETEND_OUTGOING_VARARGS_NAMED</code> returns <code>true</code>,
then all arguments are treated as named.  Otherwise, all named arguments
except the last are treated as named.
</p>
<p>You need not define this hook if it always returns <code>false</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPRETEND_005fOUTGOING_005fVARARGS_005fNAMED"></a>Target Hook: <em>bool</em> <strong>TARGET_PRETEND_OUTGOING_VARARGS_NAMED</strong> <em>(cumulative_args_t <var>ca</var>)</em></dt>
<dd><p>If you need to conditionally change ABIs so that one works with
<code>TARGET_SETUP_INCOMING_VARARGS</code>, but the other works like neither
<code>TARGET_SETUP_INCOMING_VARARGS</code> nor <code>TARGET_STRICT_ARGUMENT_NAMING</code> was
defined, then define this hook to return <code>true</code> if
<code>TARGET_SETUP_INCOMING_VARARGS</code> is used, <code>false</code> otherwise.
Otherwise, you should not define this hook.
</p></dd></dl>

<hr>
<a name="Trampolines"></a>
<div class="header">
<p>
Next: <a href="#Library-Calls" accesskey="n" rel="next">Library Calls</a>, Previous: <a href="#Varargs" accesskey="p" rel="prev">Varargs</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Trampolines-for-Nested-Functions"></a>
<h3 class="section">17.12 Trampolines for Nested Functions</h3>
<a name="index-trampolines-for-nested-functions"></a>
<a name="index-nested-functions_002c-trampolines-for"></a>

<p>A <em>trampoline</em> is a small piece of code that is created at run time
when the address of a nested function is taken.  It normally resides on
the stack, in the stack frame of the containing function.  These macros
tell GCC how to generate code to allocate and initialize a
trampoline.
</p>
<p>The instructions in the trampoline must do two things: load a constant
address into the static chain register, and jump to the real address of
the nested function.  On CISC machines such as the m68k, this requires
two instructions, a move immediate and a jump.  Then the two addresses
exist in the trampoline as word-long immediate operands.  On RISC
machines, it is often necessary to load each address into a register in
two parts.  Then pieces of each address form separate immediate
operands.
</p>
<p>The code generated to initialize the trampoline must store the variable
parts&mdash;the static chain value and the function address&mdash;into the
immediate operands of the instructions.  On a CISC machine, this is
simply a matter of copying each address to a memory reference at the
proper offset from the start of the trampoline.  On a RISC machine, it
may be necessary to take out pieces of the address and store them
separately.
</p>
<dl>
<dt><a name="index-TARGET_005fASM_005fTRAMPOLINE_005fTEMPLATE"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_TRAMPOLINE_TEMPLATE</strong> <em>(FILE *<var>f</var>)</em></dt>
<dd><p>This hook is called by <code>assemble_trampoline_template</code> to output,
on the stream <var>f</var>, assembler code for a block of data that contains
the constant parts of a trampoline.  This code should not include a
label&mdash;the label is taken care of automatically.
</p>
<p>If you do not define this hook, it means no template is needed
for the target.  Do not define this hook on systems where the block move
code to copy the trampoline into place would be larger than the code
to generate it on the spot.
</p></dd></dl>

<dl>
<dt><a name="index-TRAMPOLINE_005fSECTION"></a>Macro: <strong>TRAMPOLINE_SECTION</strong></dt>
<dd><p>Return the section into which the trampoline template is to be placed
(see <a href="#Sections">Sections</a>).  The default value is <code>readonly_data_section</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TRAMPOLINE_005fSIZE"></a>Macro: <strong>TRAMPOLINE_SIZE</strong></dt>
<dd><p>A C expression for the size in bytes of the trampoline, as an integer.
</p></dd></dl>

<dl>
<dt><a name="index-TRAMPOLINE_005fALIGNMENT"></a>Macro: <strong>TRAMPOLINE_ALIGNMENT</strong></dt>
<dd><p>Alignment required for trampolines, in bits.
</p>
<p>If you don&rsquo;t define this macro, the value of <code>FUNCTION_ALIGNMENT</code>
is used for aligning trampolines.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fTRAMPOLINE_005fINIT"></a>Target Hook: <em>void</em> <strong>TARGET_TRAMPOLINE_INIT</strong> <em>(rtx <var>m_tramp</var>, tree <var>fndecl</var>, rtx <var>static_chain</var>)</em></dt>
<dd><p>This hook is called to initialize a trampoline.
<var>m_tramp</var> is an RTX for the memory block for the trampoline; <var>fndecl</var>
is the <code>FUNCTION_DECL</code> for the nested function; <var>static_chain</var> is an
RTX for the static chain value that should be passed to the function
when it is called.
</p>
<p>If the target defines <code>TARGET_ASM_TRAMPOLINE_TEMPLATE</code>, then the
first thing this hook should do is emit a block move into <var>m_tramp</var>
from the memory block returned by <code>assemble_trampoline_template</code>.
Note that the block move need only cover the constant parts of the
trampoline.  If the target isolates the variable parts of the trampoline
to the end, not all <code>TRAMPOLINE_SIZE</code> bytes need be copied.
</p>
<p>If the target requires any other actions, such as flushing caches or
enabling stack execution, these actions should be performed after
initializing the trampoline proper.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fTRAMPOLINE_005fADJUST_005fADDRESS"></a>Target Hook: <em>rtx</em> <strong>TARGET_TRAMPOLINE_ADJUST_ADDRESS</strong> <em>(rtx <var>addr</var>)</em></dt>
<dd><p>This hook should perform any machine-specific adjustment in
the address of the trampoline.  Its argument contains the address of the
memory block that was passed to <code>TARGET_TRAMPOLINE_INIT</code>.  In case
the address to be used for a function call should be different from the
address at which the template was stored, the different address should
be returned; otherwise <var>addr</var> should be returned unchanged.
If this hook is not defined, <var>addr</var> will be used for function calls.
</p></dd></dl>

<p>Implementing trampolines is difficult on many machines because they have
separate instruction and data caches.  Writing into a stack location
fails to clear the memory in the instruction cache, so when the program
jumps to that location, it executes the old contents.
</p>
<p>Here are two possible solutions.  One is to clear the relevant parts of
the instruction cache whenever a trampoline is set up.  The other is to
make all trampolines identical, by having them jump to a standard
subroutine.  The former technique makes trampoline execution faster; the
latter makes initialization faster.
</p>
<p>To clear the instruction cache when a trampoline is initialized, define
the following macro.
</p>
<dl>
<dt><a name="index-CLEAR_005fINSN_005fCACHE"></a>Macro: <strong>CLEAR_INSN_CACHE</strong> <em>(<var>beg</var>, <var>end</var>)</em></dt>
<dd><p>If defined, expands to a C expression clearing the <em>instruction
cache</em> in the specified interval.  The definition of this macro would
typically be a series of <code>asm</code> statements.  Both <var>beg</var> and
<var>end</var> are both pointer expressions.
</p></dd></dl>

<p>To use a standard subroutine, define the following macro.  In addition,
you must make sure that the instructions in a trampoline fill an entire
cache line with identical instructions, or else ensure that the
beginning of the trampoline code is always aligned at the same point in
its cache line.  Look in <samp>m68k.h</samp> as a guide.
</p>
<dl>
<dt><a name="index-TRANSFER_005fFROM_005fTRAMPOLINE"></a>Macro: <strong>TRANSFER_FROM_TRAMPOLINE</strong></dt>
<dd><p>Define this macro if trampolines need a special subroutine to do their
work.  The macro should expand to a series of <code>asm</code> statements
which will be compiled with GCC.  They go in a library function named
<code>__transfer_from_trampoline</code>.
</p>
<p>If you need to avoid executing the ordinary prologue code of a compiled
C function when you jump to the subroutine, you can do so by placing a
special label of your own in the assembler code.  Use one <code>asm</code>
statement to generate an assembler label, and another to make the label
global.  Then trampolines can use that label to jump directly to your
special assembler code.
</p></dd></dl>

<hr>
<a name="Library-Calls"></a>
<div class="header">
<p>
Next: <a href="#Addressing-Modes" accesskey="n" rel="next">Addressing Modes</a>, Previous: <a href="#Trampolines" accesskey="p" rel="prev">Trampolines</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Implicit-Calls-to-Library-Routines"></a>
<h3 class="section">17.13 Implicit Calls to Library Routines</h3>
<a name="index-library-subroutine-names"></a>
<a name="index-libgcc_002ea"></a>

<p>Here is an explanation of implicit calls to library routines.
</p>
<dl>
<dt><a name="index-DECLARE_005fLIBRARY_005fRENAMES"></a>Macro: <strong>DECLARE_LIBRARY_RENAMES</strong></dt>
<dd><p>This macro, if defined, should expand to a piece of C code that will get
expanded when compiling functions for libgcc.a.  It can be used to
provide alternate names for GCC&rsquo;s internal library functions if there
are ABI-mandated names that the compiler should provide.
</p></dd></dl>

<a name="index-set_005foptab_005flibfunc"></a>
<a name="index-init_005fone_005flibfunc"></a>
<dl>
<dt><a name="index-TARGET_005fINIT_005fLIBFUNCS"></a>Target Hook: <em>void</em> <strong>TARGET_INIT_LIBFUNCS</strong> <em>(void)</em></dt>
<dd><p>This hook should declare additional library routines or rename
existing ones, using the functions <code>set_optab_libfunc</code> and
<code>init_one_libfunc</code> defined in <samp>optabs.c</samp>.
<code>init_optabs</code> calls this macro after initializing all the normal
library routines.
</p>
<p>The default is to do nothing.  Most ports don&rsquo;t need to define this hook.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLIBFUNC_005fGNU_005fPREFIX"></a>Target Hook: <em>bool</em> <strong>TARGET_LIBFUNC_GNU_PREFIX</strong></dt>
<dd><p>If false (the default), internal library routines start with two
underscores.  If set to true, these routines start with <code>__gnu_</code>
instead.  E.g., <code>__muldi3</code> changes to <code>__gnu_muldi3</code>.  This
currently only affects functions defined in <samp>libgcc2.c</samp>.  If this
is set to true, the <samp>tm.h</samp> file must also
<code>#define LIBGCC2_GNU_PREFIX</code>.
</p></dd></dl>

<dl>
<dt><a name="index-FLOAT_005fLIB_005fCOMPARE_005fRETURNS_005fBOOL"></a>Macro: <strong>FLOAT_LIB_COMPARE_RETURNS_BOOL</strong> <em>(<var>mode</var>, <var>comparison</var>)</em></dt>
<dd><p>This macro should return <code>true</code> if the library routine that
implements the floating point comparison operator <var>comparison</var> in
mode <var>mode</var> will return a boolean, and <var>false</var> if it will
return a tristate.
</p>
<p>GCC&rsquo;s own floating point libraries return tristates from the
comparison operators, so the default returns false always.  Most ports
don&rsquo;t need to define this macro.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLIB_005fINT_005fCMP_005fBIASED"></a>Macro: <strong>TARGET_LIB_INT_CMP_BIASED</strong></dt>
<dd><p>This macro should evaluate to <code>true</code> if the integer comparison
functions (like <code>__cmpdi2</code>) return 0 to indicate that the first
operand is smaller than the second, 1 to indicate that they are equal,
and 2 to indicate that the first operand is greater than the second.
If this macro evaluates to <code>false</code> the comparison functions return
-1, 0, and 1 instead of 0, 1, and 2.  If the target uses the routines
in <samp>libgcc.a</samp>, you do not need to define this macro.
</p></dd></dl>

<a name="index-EDOM_002c-implicit-usage"></a>
<a name="index-matherr"></a>
<dl>
<dt><a name="index-TARGET_005fEDOM"></a>Macro: <strong>TARGET_EDOM</strong></dt>
<dd><p>The value of <code>EDOM</code> on the target machine, as a C integer constant
expression.  If you don&rsquo;t define this macro, GCC does not attempt to
deposit the value of <code>EDOM</code> into <code>errno</code> directly.  Look in
<samp>/usr/include/errno.h</samp> to find the value of <code>EDOM</code> on your
system.
</p>
<p>If you do not define <code>TARGET_EDOM</code>, then compiled code reports
domain errors by calling the library function and letting it report the
error.  If mathematical functions on your system use <code>matherr</code> when
there is an error, then you should leave <code>TARGET_EDOM</code> undefined so
that <code>matherr</code> is used normally.
</p></dd></dl>

<a name="index-errno_002c-implicit-usage"></a>
<dl>
<dt><a name="index-GEN_005fERRNO_005fRTX"></a>Macro: <strong>GEN_ERRNO_RTX</strong></dt>
<dd><p>Define this macro as a C expression to create an rtl expression that
refers to the global &ldquo;variable&rdquo; <code>errno</code>.  (On certain systems,
<code>errno</code> may not actually be a variable.)  If you don&rsquo;t define this
macro, a reasonable default is used.
</p></dd></dl>

<a name="index-C99-math-functions_002c-implicit-usage"></a>
<dl>
<dt><a name="index-TARGET_005fC99_005fFUNCTIONS"></a>Macro: <strong>TARGET_C99_FUNCTIONS</strong></dt>
<dd><p>When this macro is nonzero, GCC will implicitly optimize <code>sin</code> calls into
<code>sinf</code> and similarly for other functions defined by C99 standard.  The
default is zero because a number of existing systems lack support for these
functions in their runtime so this macro needs to be redefined to one on
systems that do support the C99 runtime.
</p></dd></dl>

<a name="index-sincos-math-function_002c-implicit-usage"></a>
<dl>
<dt><a name="index-TARGET_005fHAS_005fSINCOS"></a>Macro: <strong>TARGET_HAS_SINCOS</strong></dt>
<dd><p>When this macro is nonzero, GCC will implicitly optimize calls to <code>sin</code>
and <code>cos</code> with the same argument to a call to <code>sincos</code>.  The
default is zero.  The target has to provide the following functions:
</p><div class="smallexample">
<pre class="smallexample">void sincos(double x, double *sin, double *cos);
void sincosf(float x, float *sin, float *cos);
void sincosl(long double x, long double *sin, long double *cos);
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-NEXT_005fOBJC_005fRUNTIME"></a>Macro: <strong>NEXT_OBJC_RUNTIME</strong></dt>
<dd><p>Set this macro to 1 to use the &quot;NeXT&quot; Objective-C message sending conventions
by default.  This calling convention involves passing the object, the selector
and the method arguments all at once to the method-lookup library function.
This is the usual setting when targeting Darwin/Mac OS X systems, which have
the NeXT runtime installed.
</p>
<p>If the macro is set to 0, the &quot;GNU&quot; Objective-C message sending convention
will be used by default.  This convention passes just the object and the
selector to the method-lookup function, which returns a pointer to the method.
</p>
<p>In either case, it remains possible to select code-generation for the alternate
scheme, by means of compiler command line switches.
</p></dd></dl>

<hr>
<a name="Addressing-Modes"></a>
<div class="header">
<p>
Next: <a href="#Anchored-Addresses" accesskey="n" rel="next">Anchored Addresses</a>, Previous: <a href="#Library-Calls" accesskey="p" rel="prev">Library Calls</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Addressing-Modes-1"></a>
<h3 class="section">17.14 Addressing Modes</h3>
<a name="index-addressing-modes"></a>

<p>This is about addressing modes.
</p>
<dl>
<dt><a name="index-HAVE_005fPRE_005fINCREMENT"></a>Macro: <strong>HAVE_PRE_INCREMENT</strong></dt>
<dt><a name="index-HAVE_005fPRE_005fDECREMENT"></a>Macro: <strong>HAVE_PRE_DECREMENT</strong></dt>
<dt><a name="index-HAVE_005fPOST_005fINCREMENT"></a>Macro: <strong>HAVE_POST_INCREMENT</strong></dt>
<dt><a name="index-HAVE_005fPOST_005fDECREMENT"></a>Macro: <strong>HAVE_POST_DECREMENT</strong></dt>
<dd><p>A C expression that is nonzero if the machine supports pre-increment,
pre-decrement, post-increment, or post-decrement addressing respectively.
</p></dd></dl>

<dl>
<dt><a name="index-HAVE_005fPRE_005fMODIFY_005fDISP"></a>Macro: <strong>HAVE_PRE_MODIFY_DISP</strong></dt>
<dt><a name="index-HAVE_005fPOST_005fMODIFY_005fDISP"></a>Macro: <strong>HAVE_POST_MODIFY_DISP</strong></dt>
<dd><p>A C expression that is nonzero if the machine supports pre- or
post-address side-effect generation involving constants other than
the size of the memory operand.
</p></dd></dl>

<dl>
<dt><a name="index-HAVE_005fPRE_005fMODIFY_005fREG"></a>Macro: <strong>HAVE_PRE_MODIFY_REG</strong></dt>
<dt><a name="index-HAVE_005fPOST_005fMODIFY_005fREG"></a>Macro: <strong>HAVE_POST_MODIFY_REG</strong></dt>
<dd><p>A C expression that is nonzero if the machine supports pre- or
post-address side-effect generation involving a register displacement.
</p></dd></dl>

<dl>
<dt><a name="index-CONSTANT_005fADDRESS_005fP"></a>Macro: <strong>CONSTANT_ADDRESS_P</strong> <em>(<var>x</var>)</em></dt>
<dd><p>A C expression that is 1 if the RTX <var>x</var> is a constant which
is a valid address.  On most machines the default definition of
<code>(CONSTANT_P (<var>x</var>) &amp;&amp; GET_CODE (<var>x</var>) != CONST_DOUBLE)</code>
is acceptable, but a few machines are more restrictive as to which
constant addresses are supported.
</p></dd></dl>

<dl>
<dt><a name="index-CONSTANT_005fP"></a>Macro: <strong>CONSTANT_P</strong> <em>(<var>x</var>)</em></dt>
<dd><p><code>CONSTANT_P</code>, which is defined by target-independent code,
accepts integer-values expressions whose values are not explicitly
known, such as <code>symbol_ref</code>, <code>label_ref</code>, and <code>high</code>
expressions and <code>const</code> arithmetic expressions, in addition to
<code>const_int</code> and <code>const_double</code> expressions.
</p></dd></dl>

<dl>
<dt><a name="index-MAX_005fREGS_005fPER_005fADDRESS"></a>Macro: <strong>MAX_REGS_PER_ADDRESS</strong></dt>
<dd><p>A number, the maximum number of registers that can appear in a valid
memory address.  Note that it is up to you to specify a value equal to
the maximum number that <code>TARGET_LEGITIMATE_ADDRESS_P</code> would ever
accept.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLEGITIMATE_005fADDRESS_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_LEGITIMATE_ADDRESS_P</strong> <em>(enum machine_mode <var>mode</var>, rtx <var>x</var>, bool <var>strict</var>)</em></dt>
<dd><p>A function that returns whether <var>x</var> (an RTX) is a legitimate memory
address on the target machine for a memory operand of mode <var>mode</var>.
</p>
<p>Legitimate addresses are defined in two variants: a strict variant and a
non-strict one.  The <var>strict</var> parameter chooses which variant is
desired by the caller.
</p>
<p>The strict variant is used in the reload pass.  It must be defined so
that any pseudo-register that has not been allocated a hard register is
considered a memory reference.  This is because in contexts where some
kind of register is required, a pseudo-register with no hard register
must be rejected.  For non-hard registers, the strict variant should look
up the <code>reg_renumber</code> array; it should then proceed using the hard
register number in the array, or treat the pseudo as a memory reference
if the array holds <code>-1</code>.
</p>
<p>The non-strict variant is used in other passes.  It must be defined to
accept all pseudo-registers in every context where some kind of
register is required.
</p>
<p>Normally, constant addresses which are the sum of a <code>symbol_ref</code>
and an integer are stored inside a <code>const</code> RTX to mark them as
constant.  Therefore, there is no need to recognize such sums
specifically as legitimate addresses.  Normally you would simply
recognize any <code>const</code> as legitimate.
</p>
<p>Usually <code>PRINT_OPERAND_ADDRESS</code> is not prepared to handle constant
sums that are not marked with  <code>const</code>.  It assumes that a naked
<code>plus</code> indicates indexing.  If so, then you <em>must</em> reject such
naked constant sums as illegitimate addresses, so that none of them will
be given to <code>PRINT_OPERAND_ADDRESS</code>.
</p>
<a name="index-TARGET_005fENCODE_005fSECTION_005fINFO-and-address-validation"></a>
<p>On some machines, whether a symbolic address is legitimate depends on
the section that the address refers to.  On these machines, define the
target hook <code>TARGET_ENCODE_SECTION_INFO</code> to store the information
into the <code>symbol_ref</code>, and then check for it here.  When you see a
<code>const</code>, you will have to look inside it to find the
<code>symbol_ref</code> in order to determine the section.  See <a href="#Assembler-Format">Assembler Format</a>.
</p>
<a name="index-GO_005fIF_005fLEGITIMATE_005fADDRESS"></a>
<p>Some ports are still using a deprecated legacy substitute for
this hook, the <code>GO_IF_LEGITIMATE_ADDRESS</code> macro.  This macro
has this syntax:
</p>
<div class="example">
<pre class="example">#define GO_IF_LEGITIMATE_ADDRESS (<var>mode</var>, <var>x</var>, <var>label</var>)
</pre></div>

<p>and should <code>goto <var>label</var></code> if the address <var>x</var> is a valid
address on the target machine for a memory operand of mode <var>mode</var>.
</p>
<a name="index-REG_005fOK_005fSTRICT"></a>
<p>Compiler source files that want to use the strict variant of this
macro define the macro <code>REG_OK_STRICT</code>.  You should use an
<code>#ifdef REG_OK_STRICT</code> conditional to define the strict variant in
that case and the non-strict variant otherwise.
</p>
<p>Using the hook is usually simpler because it limits the number of
files that are recompiled when changes are made.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMEM_005fCONSTRAINT"></a>Macro: <strong>TARGET_MEM_CONSTRAINT</strong></dt>
<dd><p>A single character to be used instead of the default <code>'m'</code>
character for general memory addresses.  This defines the constraint
letter which matches the memory addresses accepted by
<code>TARGET_LEGITIMATE_ADDRESS_P</code>.  Define this macro if you want to
support new address formats in your back end without changing the
semantics of the <code>'m'</code> constraint.  This is necessary in order to
preserve functionality of inline assembly constructs using the
<code>'m'</code> constraint.
</p></dd></dl>

<dl>
<dt><a name="index-FIND_005fBASE_005fTERM"></a>Macro: <strong>FIND_BASE_TERM</strong> <em>(<var>x</var>)</em></dt>
<dd><p>A C expression to determine the base term of address <var>x</var>,
or to provide a simplified version of <var>x</var> from which <samp>alias.c</samp>
can easily find the base term.  This macro is used in only two places:
<code>find_base_value</code> and <code>find_base_term</code> in <samp>alias.c</samp>.
</p>
<p>It is always safe for this macro to not be defined.  It exists so
that alias analysis can understand machine-dependent addresses.
</p>
<p>The typical use of this macro is to handle addresses containing
a label_ref or symbol_ref within an UNSPEC.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLEGITIMIZE_005fADDRESS"></a>Target Hook: <em>rtx</em> <strong>TARGET_LEGITIMIZE_ADDRESS</strong> <em>(rtx <var>x</var>, rtx <var>oldx</var>, enum machine_mode <var>mode</var>)</em></dt>
<dd><p>This hook is given an invalid memory address <var>x</var> for an
operand of mode <var>mode</var> and should try to return a valid memory
address.
</p>
<a name="index-break_005fout_005fmemory_005frefs"></a>
<p><var>x</var> will always be the result of a call to <code>break_out_memory_refs</code>,
and <var>oldx</var> will be the operand that was given to that function to produce
<var>x</var>.
</p>
<p>The code of the hook should not alter the substructure of
<var>x</var>.  If it transforms <var>x</var> into a more legitimate form, it
should return the new <var>x</var>.
</p>
<p>It is not necessary for this hook to come up with a legitimate address,
with the exception of native TLS addresses (see <a href="#Emulated-TLS">Emulated TLS</a>).
The compiler has standard ways of doing so in all cases.  In fact, if
the target supports only emulated TLS, it
is safe to omit this hook or make it return <var>x</var> if it cannot find
a valid way to legitimize the address.  But often a machine-dependent
strategy can generate better code.
</p></dd></dl>

<dl>
<dt><a name="index-LEGITIMIZE_005fRELOAD_005fADDRESS"></a>Macro: <strong>LEGITIMIZE_RELOAD_ADDRESS</strong> <em>(<var>x</var>, <var>mode</var>, <var>opnum</var>, <var>type</var>, <var>ind_levels</var>, <var>win</var>)</em></dt>
<dd><p>A C compound statement that attempts to replace <var>x</var>, which is an address
that needs reloading, with a valid memory address for an operand of mode
<var>mode</var>.  <var>win</var> will be a C statement label elsewhere in the code.
It is not necessary to define this macro, but it might be useful for
performance reasons.
</p>
<p>For example, on the i386, it is sometimes possible to use a single
reload register instead of two by reloading a sum of two pseudo
registers into a register.  On the other hand, for number of RISC
processors offsets are limited so that often an intermediate address
needs to be generated in order to address a stack slot.  By defining
<code>LEGITIMIZE_RELOAD_ADDRESS</code> appropriately, the intermediate addresses
generated for adjacent some stack slots can be made identical, and thus
be shared.
</p>
<p><em>Note</em>: This macro should be used with caution.  It is necessary
to know something of how reload works in order to effectively use this,
and it is quite easy to produce macros that build in too much knowledge
of reload internals.
</p>
<p><em>Note</em>: This macro must be able to reload an address created by a
previous invocation of this macro.  If it fails to handle such addresses
then the compiler may generate incorrect code or abort.
</p>
<a name="index-push_005freload"></a>
<p>The macro definition should use <code>push_reload</code> to indicate parts that
need reloading; <var>opnum</var>, <var>type</var> and <var>ind_levels</var> are usually
suitable to be passed unaltered to <code>push_reload</code>.
</p>
<p>The code generated by this macro must not alter the substructure of
<var>x</var>.  If it transforms <var>x</var> into a more legitimate form, it
should assign <var>x</var> (which will always be a C variable) a new value.
This also applies to parts that you change indirectly by calling
<code>push_reload</code>.
</p>
<a name="index-strict_005fmemory_005faddress_005fp"></a>
<p>The macro definition may use <code>strict_memory_address_p</code> to test if
the address has become legitimate.
</p>
<a name="index-copy_005frtx"></a>
<p>If you want to change only a part of <var>x</var>, one standard way of doing
this is to use <code>copy_rtx</code>.  Note, however, that it unshares only a
single level of rtl.  Thus, if the part to be changed is not at the
top level, you&rsquo;ll need to replace first the top level.
It is not necessary for this macro to come up with a legitimate
address;  but often a machine-dependent strategy can generate better code.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMODE_005fDEPENDENT_005fADDRESS_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_MODE_DEPENDENT_ADDRESS_P</strong> <em>(const_rtx <var>addr</var>, addr_space_t <var>addrspace</var>)</em></dt>
<dd><p>This hook returns <code>true</code> if memory address <var>addr</var> in address
space <var>addrspace</var> can have
different meanings depending on the machine mode of the memory
reference it is used for or if the address is valid for some modes
but not others.
</p>
<p>Autoincrement and autodecrement addresses typically have mode-dependent
effects because the amount of the increment or decrement is the size
of the operand being addressed.  Some machines have other mode-dependent
addresses.  Many RISC machines have no mode-dependent addresses.
</p>
<p>You may assume that <var>addr</var> is a valid address for the machine.
</p>
<p>The default version of this hook returns <code>false</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLEGITIMATE_005fCONSTANT_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_LEGITIMATE_CONSTANT_P</strong> <em>(enum machine_mode <var>mode</var>, rtx <var>x</var>)</em></dt>
<dd><p>This hook returns true if <var>x</var> is a legitimate constant for a
<var>mode</var>-mode immediate operand on the target machine.  You can assume that
<var>x</var> satisfies <code>CONSTANT_P</code>, so you need not check this.
</p>
<p>The default definition returns true.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDELEGITIMIZE_005fADDRESS"></a>Target Hook: <em>rtx</em> <strong>TARGET_DELEGITIMIZE_ADDRESS</strong> <em>(rtx <var>x</var>)</em></dt>
<dd><p>This hook is used to undo the possibly obfuscating effects of the
<code>LEGITIMIZE_ADDRESS</code> and <code>LEGITIMIZE_RELOAD_ADDRESS</code> target
macros.  Some backend implementations of these macros wrap symbol
references inside an <code>UNSPEC</code> rtx to represent PIC or similar
addressing modes.  This target hook allows GCC&rsquo;s optimizers to understand
the semantics of these opaque <code>UNSPEC</code>s by converting them back
into their original form.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCONST_005fNOT_005fOK_005fFOR_005fDEBUG_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_CONST_NOT_OK_FOR_DEBUG_P</strong> <em>(rtx <var>x</var>)</em></dt>
<dd><p>This hook should return true if <var>x</var> should not be emitted into
debug sections.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCANNOT_005fFORCE_005fCONST_005fMEM"></a>Target Hook: <em>bool</em> <strong>TARGET_CANNOT_FORCE_CONST_MEM</strong> <em>(enum machine_mode <var>mode</var>, rtx <var>x</var>)</em></dt>
<dd><p>This hook should return true if <var>x</var> is of a form that cannot (or
should not) be spilled to the constant pool.  <var>mode</var> is the mode
of <var>x</var>.
</p>
<p>The default version of this hook returns false.
</p>
<p>The primary reason to define this hook is to prevent reload from
deciding that a non-legitimate constant would be better reloaded
from the constant pool instead of spilling and reloading a register
holding the constant.  This restriction is often true of addresses
of TLS symbols for various targets.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fUSE_005fBLOCKS_005fFOR_005fCONSTANT_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_USE_BLOCKS_FOR_CONSTANT_P</strong> <em>(enum machine_mode <var>mode</var>, const_rtx <var>x</var>)</em></dt>
<dd><p>This hook should return true if pool entries for constant <var>x</var> can
be placed in an <code>object_block</code> structure.  <var>mode</var> is the mode
of <var>x</var>.
</p>
<p>The default version returns false for all constants.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fUSE_005fBLOCKS_005fFOR_005fDECL_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_USE_BLOCKS_FOR_DECL_P</strong> <em>(const_tree <var>decl</var>)</em></dt>
<dd><p>This hook should return true if pool entries for <var>decl</var> should
be placed in an <code>object_block</code> structure.
</p>
<p>The default version returns true for all decls.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fBUILTIN_005fRECIPROCAL"></a>Target Hook: <em>tree</em> <strong>TARGET_BUILTIN_RECIPROCAL</strong> <em>(unsigned <var>fn</var>, bool <var>md_fn</var>, bool <var>sqrt</var>)</em></dt>
<dd><p>This hook should return the DECL of a function that implements reciprocal of
the builtin function with builtin function code <var>fn</var>, or
<code>NULL_TREE</code> if such a function is not available.  <var>md_fn</var> is true
when <var>fn</var> is a code of a machine-dependent builtin function.  When
<var>sqrt</var> is true, additional optimizations that apply only to the reciprocal
of a square root function are performed, and only reciprocals of <code>sqrt</code>
function are valid.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fBUILTIN_005fMASK_005fFOR_005fLOAD"></a>Target Hook: <em>tree</em> <strong>TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD</strong> <em>(void)</em></dt>
<dd><p>This hook should return the DECL of a function <var>f</var> that given an
address <var>addr</var> as an argument returns a mask <var>m</var> that can be
used to extract from two vectors the relevant data that resides in
<var>addr</var> in case <var>addr</var> is not properly aligned.
</p>
<p>The autovectorizer, when vectorizing a load operation from an address
<var>addr</var> that may be unaligned, will generate two vector loads from
the two aligned addresses around <var>addr</var>. It then generates a
<code>REALIGN_LOAD</code> operation to extract the relevant data from the
two loaded vectors. The first two arguments to <code>REALIGN_LOAD</code>,
<var>v1</var> and <var>v2</var>, are the two vectors, each of size <var>VS</var>, and
the third argument, <var>OFF</var>, defines how the data will be extracted
from these two vectors: if <var>OFF</var> is 0, then the returned vector is
<var>v2</var>; otherwise, the returned vector is composed from the last
<var>VS</var>-<var>OFF</var> elements of <var>v1</var> concatenated to the first
<var>OFF</var> elements of <var>v2</var>.
</p>
<p>If this hook is defined, the autovectorizer will generate a call
to <var>f</var> (using the DECL tree that this hook returns) and will
use the return value of <var>f</var> as the argument <var>OFF</var> to
<code>REALIGN_LOAD</code>. Therefore, the mask <var>m</var> returned by <var>f</var>
should comply with the semantics expected by <code>REALIGN_LOAD</code>
described above.
If this hook is not defined, then <var>addr</var> will be used as
the argument <var>OFF</var> to <code>REALIGN_LOAD</code>, in which case the low
log2(<var>VS</var>) - 1 bits of <var>addr</var> will be considered.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fBUILTIN_005fVECTORIZATION_005fCOST"></a>Target Hook: <em>int</em> <strong>TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST</strong> <em>(enum vect_cost_for_stmt <var>type_of_cost</var>, tree <var>vectype</var>, int <var>misalign</var>)</em></dt>
<dd><p>Returns cost of different scalar or vector statements for vectorization cost model.
For vector memory operations the cost may depend on type (<var>vectype</var>) and
misalignment value (<var>misalign</var>).
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fVECTOR_005fALIGNMENT_005fREACHABLE"></a>Target Hook: <em>bool</em> <strong>TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE</strong> <em>(const_tree <var>type</var>, bool <var>is_packed</var>)</em></dt>
<dd><p>Return true if vector alignment is reachable (by peeling N iterations) for the given type.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fVEC_005fPERM_005fCONST_005fOK"></a>Target Hook: <em>bool</em> <strong>TARGET_VECTORIZE_VEC_PERM_CONST_OK</strong> <em>(enum <var>machine_mode</var>, const unsigned char *<var>sel</var>)</em></dt>
<dd><p>Return true if a vector created for <code>vec_perm_const</code> is valid.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fBUILTIN_005fCONVERSION"></a>Target Hook: <em>tree</em> <strong>TARGET_VECTORIZE_BUILTIN_CONVERSION</strong> <em>(unsigned <var>code</var>, tree <var>dest_type</var>, tree <var>src_type</var>)</em></dt>
<dd><p>This hook should return the DECL of a function that implements conversion of the
input vector of type <var>src_type</var> to type <var>dest_type</var>.
The value of <var>code</var> is one of the enumerators in <code>enum tree_code</code> and
specifies how the conversion is to be applied
(truncation, rounding, etc.).
</p>
<p>If this hook is defined, the autovectorizer will use the
<code>TARGET_VECTORIZE_BUILTIN_CONVERSION</code> target hook when vectorizing
conversion. Otherwise, it will return <code>NULL_TREE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fBUILTIN_005fVECTORIZED_005fFUNCTION"></a>Target Hook: <em>tree</em> <strong>TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION</strong> <em>(tree <var>fndecl</var>, tree <var>vec_type_out</var>, tree <var>vec_type_in</var>)</em></dt>
<dd><p>This hook should return the decl of a function that implements the
vectorized variant of the builtin function with builtin function code
<var>code</var> or <code>NULL_TREE</code> if such a function is not available.
The value of <var>fndecl</var> is the builtin function declaration.  The
return type of the vectorized function shall be of vector type
<var>vec_type_out</var> and the argument types should be <var>vec_type_in</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fSUPPORT_005fVECTOR_005fMISALIGNMENT"></a>Target Hook: <em>bool</em> <strong>TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT</strong> <em>(enum machine_mode <var>mode</var>, const_tree <var>type</var>, int <var>misalignment</var>, bool <var>is_packed</var>)</em></dt>
<dd><p>This hook should return true if the target supports misaligned vector
store/load of a specific factor denoted in the <var>misalignment</var>
parameter.  The vector store/load should be of machine mode <var>mode</var> and
the elements in the vectors should be of type <var>type</var>.  <var>is_packed</var>
parameter is true if the memory access is defined in a packed struct.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fPREFERRED_005fSIMD_005fMODE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_VECTORIZE_PREFERRED_SIMD_MODE</strong> <em>(enum machine_mode <var>mode</var>)</em></dt>
<dd><p>This hook should return the preferred mode for vectorizing scalar
mode <var>mode</var>.  The default is
equal to <code>word_mode</code>, because the vectorizer can do some
transformations even in absence of specialized <acronym>SIMD</acronym> hardware.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fAUTOVECTORIZE_005fVECTOR_005fSIZES"></a>Target Hook: <em>unsigned int</em> <strong>TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES</strong> <em>(void)</em></dt>
<dd><p>This hook should return a mask of sizes that should be iterated over
after trying to autovectorize using the vector size derived from the
mode returned by <code>TARGET_VECTORIZE_PREFERRED_SIMD_MODE</code>.
The default is zero which means to not iterate over other vector sizes.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fINIT_005fCOST"></a>Target Hook: <em>void *</em> <strong>TARGET_VECTORIZE_INIT_COST</strong> <em>(struct loop *<var>loop_info</var>)</em></dt>
<dd><p>This hook should initialize target-specific data structures in preparation for modeling the costs of vectorizing a loop or basic block.  The default allocates three unsigned integers for accumulating costs for the prologue, body, and epilogue of the loop or basic block.  If <var>loop_info</var> is non-NULL, it identifies the loop being vectorized; otherwise a single block is being vectorized.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fADD_005fSTMT_005fCOST"></a>Target Hook: <em>unsigned</em> <strong>TARGET_VECTORIZE_ADD_STMT_COST</strong> <em>(void *<var>data</var>, int <var>count</var>, enum vect_cost_for_stmt <var>kind</var>, struct _stmt_vec_info *<var>stmt_info</var>, int <var>misalign</var>, enum vect_cost_model_location <var>where</var>)</em></dt>
<dd><p>This hook should update the target-specific <var>data</var> in response to adding <var>count</var> copies of the given <var>kind</var> of statement to a loop or basic block.  The default adds the builtin vectorizer cost for the copies of the statement to the accumulator specified by <var>where</var>, (the prologue, body, or epilogue) and returns the amount added.  The return value should be viewed as a tentative cost that may later be revised.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fFINISH_005fCOST"></a>Target Hook: <em>void</em> <strong>TARGET_VECTORIZE_FINISH_COST</strong> <em>(void *<var>data</var>, unsigned *<var>prologue_cost</var>, unsigned *<var>body_cost</var>, unsigned *<var>epilogue_cost</var>)</em></dt>
<dd><p>This hook should complete calculations of the cost of vectorizing a loop or basic block based on <var>data</var>, and return the prologue, body, and epilogue costs as unsigned integers.  The default returns the value of the three accumulators.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fDESTROY_005fCOST_005fDATA"></a>Target Hook: <em>void</em> <strong>TARGET_VECTORIZE_DESTROY_COST_DATA</strong> <em>(void *<var>data</var>)</em></dt>
<dd><p>This hook should release <var>data</var> and any related data structures allocated by TARGET_VECTORIZE_INIT_COST.  The default releases the accumulator.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fBUILTIN_005fTM_005fLOAD"></a>Target Hook: <em>tree</em> <strong>TARGET_VECTORIZE_BUILTIN_TM_LOAD</strong> <em>(tree)</em></dt>
<dd><p>This hook should return the built-in decl needed to load a vector of the given type within a transaction.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fBUILTIN_005fTM_005fSTORE"></a>Target Hook: <em>tree</em> <strong>TARGET_VECTORIZE_BUILTIN_TM_STORE</strong> <em>(tree)</em></dt>
<dd><p>This hook should return the built-in decl needed to store a vector of the given type within a transaction.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVECTORIZE_005fBUILTIN_005fGATHER"></a>Target Hook: <em>tree</em> <strong>TARGET_VECTORIZE_BUILTIN_GATHER</strong> <em>(const_tree <var>mem_vectype</var>, const_tree <var>index_type</var>, int <var>scale</var>)</em></dt>
<dd><p>Target builtin that implements vector gather operation.  <var>mem_vectype</var>
is the vector type of the load and <var>index_type</var> is scalar type of
the index, scaled by <var>scale</var>.
The default is <code>NULL_TREE</code> which means to not vectorize gather
loads.
</p></dd></dl>

<hr>
<a name="Anchored-Addresses"></a>
<div class="header">
<p>
Next: <a href="#Condition-Code" accesskey="n" rel="next">Condition Code</a>, Previous: <a href="#Addressing-Modes" accesskey="p" rel="prev">Addressing Modes</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Anchored-Addresses-1"></a>
<h3 class="section">17.15 Anchored Addresses</h3>
<a name="index-anchored-addresses"></a>
<a name="index-_002dfsection_002danchors-1"></a>

<p>GCC usually addresses every static object as a separate entity.
For example, if we have:
</p>
<div class="smallexample">
<pre class="smallexample">static int a, b, c;
int foo (void) { return a + b + c; }
</pre></div>

<p>the code for <code>foo</code> will usually calculate three separate symbolic
addresses: those of <code>a</code>, <code>b</code> and <code>c</code>.  On some targets,
it would be better to calculate just one symbolic address and access
the three variables relative to it.  The equivalent pseudocode would
be something like:
</p>
<div class="smallexample">
<pre class="smallexample">int foo (void)
{
  register int *xr = &amp;x;
  return xr[&amp;a - &amp;x] + xr[&amp;b - &amp;x] + xr[&amp;c - &amp;x];
}
</pre></div>

<p>(which isn&rsquo;t valid C).  We refer to shared addresses like <code>x</code> as
&ldquo;section anchors&rdquo;.  Their use is controlled by <samp>-fsection-anchors</samp>.
</p>
<p>The hooks below describe the target properties that GCC needs to know
in order to make effective use of section anchors.  It won&rsquo;t use
section anchors at all unless either <code>TARGET_MIN_ANCHOR_OFFSET</code>
or <code>TARGET_MAX_ANCHOR_OFFSET</code> is set to a nonzero value.
</p>
<dl>
<dt><a name="index-TARGET_005fMIN_005fANCHOR_005fOFFSET"></a>Target Hook: <em>HOST_WIDE_INT</em> <strong>TARGET_MIN_ANCHOR_OFFSET</strong></dt>
<dd><p>The minimum offset that should be applied to a section anchor.
On most targets, it should be the smallest offset that can be
applied to a base register while still giving a legitimate address
for every mode.  The default value is 0.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMAX_005fANCHOR_005fOFFSET"></a>Target Hook: <em>HOST_WIDE_INT</em> <strong>TARGET_MAX_ANCHOR_OFFSET</strong></dt>
<dd><p>Like <code>TARGET_MIN_ANCHOR_OFFSET</code>, but the maximum (inclusive)
offset that should be applied to section anchors.  The default
value is 0.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fOUTPUT_005fANCHOR"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_OUTPUT_ANCHOR</strong> <em>(rtx <var>x</var>)</em></dt>
<dd><p>Write the assembly code to define section anchor <var>x</var>, which is a
<code>SYMBOL_REF</code> for which &lsquo;<samp>SYMBOL_REF_ANCHOR_P (<var>x</var>)</samp>&rsquo; is true.
The hook is called with the assembly output position set to the beginning
of <code>SYMBOL_REF_BLOCK (<var>x</var>)</code>.
</p>
<p>If <code>ASM_OUTPUT_DEF</code> is available, the hook&rsquo;s default definition uses
it to define the symbol as &lsquo;<samp>. + SYMBOL_REF_BLOCK_OFFSET (<var>x</var>)</samp>&rsquo;.
If <code>ASM_OUTPUT_DEF</code> is not available, the hook&rsquo;s default definition
is <code>NULL</code>, which disables the use of section anchors altogether.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fUSE_005fANCHORS_005fFOR_005fSYMBOL_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_USE_ANCHORS_FOR_SYMBOL_P</strong> <em>(const_rtx <var>x</var>)</em></dt>
<dd><p>Return true if GCC should attempt to use anchors to access <code>SYMBOL_REF</code>
<var>x</var>.  You can assume &lsquo;<samp>SYMBOL_REF_HAS_BLOCK_INFO_P (<var>x</var>)</samp>&rsquo; and
&lsquo;<samp>!SYMBOL_REF_ANCHOR_P (<var>x</var>)</samp>&rsquo;.
</p>
<p>The default version is correct for most targets, but you might need to
intercept this hook to handle things like target-specific attributes
or target-specific sections.
</p></dd></dl>

<hr>
<a name="Condition-Code"></a>
<div class="header">
<p>
Next: <a href="#Costs" accesskey="n" rel="next">Costs</a>, Previous: <a href="#Anchored-Addresses" accesskey="p" rel="prev">Anchored Addresses</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Condition-Code-Status"></a>
<h3 class="section">17.16 Condition Code Status</h3>
<a name="index-condition-code-status"></a>

<p>The macros in this section can be split in two families, according to the
two ways of representing condition codes in GCC.
</p>
<p>The first representation is the so called <code>(cc0)</code> representation
(see <a href="#Jump-Patterns">Jump Patterns</a>), where all instructions can have an implicit
clobber of the condition codes.  The second is the condition code
register representation, which provides better schedulability for
architectures that do have a condition code register, but on which
most instructions do not affect it.  The latter category includes
most RISC machines.
</p>
<p>The implicit clobbering poses a strong restriction on the placement of
the definition and use of the condition code, which need to be in adjacent
insns for machines using <code>(cc0)</code>.  This can prevent important
optimizations on some machines.  For example, on the IBM RS/6000, there
is a delay for taken branches unless the condition code register is set
three instructions earlier than the conditional branch.  The instruction
scheduler cannot perform this optimization if it is not permitted to
separate the definition and use of the condition code register.
</p>
<p>For this reason, it is possible and suggested to use a register to
represent the condition code for new ports.  If there is a specific
condition code register in the machine, use a hard register.  If the
condition code or comparison result can be placed in any general register,
or if there are multiple condition registers, use a pseudo register.
Registers used to store the condition code value will usually have a mode
that is in class <code>MODE_CC</code>.
</p>
<p>Alternatively, you can use <code>BImode</code> if the comparison operator is
specified already in the compare instruction.  In this case, you are not
interested in most macros in this section.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#CC0-Condition-Codes" accesskey="1">CC0 Condition Codes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Old style representation of condition codes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#MODE_005fCC-Condition-Codes" accesskey="2">MODE_CC Condition Codes</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Modern representation of condition codes.
</td></tr>
</table>

<hr>
<a name="CC0-Condition-Codes"></a>
<div class="header">
<p>
Next: <a href="#MODE_005fCC-Condition-Codes" accesskey="n" rel="next">MODE_CC Condition Codes</a>, Up: <a href="#Condition-Code" accesskey="u" rel="up">Condition Code</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Representation-of-condition-codes-using-_0028cc0_0029"></a>
<h4 class="subsection">17.16.1 Representation of condition codes using <code>(cc0)</code></h4>
<a name="index-cc0-1"></a>

<a name="index-cc_005fstatus"></a>
<p>The file <samp>conditions.h</samp> defines a variable <code>cc_status</code> to
describe how the condition code was computed (in case the interpretation of
the condition code depends on the instruction that it was set by).  This
variable contains the RTL expressions on which the condition code is
currently based, and several standard flags.
</p>
<p>Sometimes additional machine-specific flags must be defined in the machine
description header file.  It can also add additional machine-specific
information by defining <code>CC_STATUS_MDEP</code>.
</p>
<dl>
<dt><a name="index-CC_005fSTATUS_005fMDEP"></a>Macro: <strong>CC_STATUS_MDEP</strong></dt>
<dd><p>C code for a data type which is used for declaring the <code>mdep</code>
component of <code>cc_status</code>.  It defaults to <code>int</code>.
</p>
<p>This macro is not used on machines that do not use <code>cc0</code>.
</p></dd></dl>

<dl>
<dt><a name="index-CC_005fSTATUS_005fMDEP_005fINIT"></a>Macro: <strong>CC_STATUS_MDEP_INIT</strong></dt>
<dd><p>A C expression to initialize the <code>mdep</code> field to &ldquo;empty&rdquo;.
The default definition does nothing, since most machines don&rsquo;t use
the field anyway.  If you want to use the field, you should probably
define this macro to initialize it.
</p>
<p>This macro is not used on machines that do not use <code>cc0</code>.
</p></dd></dl>

<dl>
<dt><a name="index-NOTICE_005fUPDATE_005fCC"></a>Macro: <strong>NOTICE_UPDATE_CC</strong> <em>(<var>exp</var>, <var>insn</var>)</em></dt>
<dd><p>A C compound statement to set the components of <code>cc_status</code>
appropriately for an insn <var>insn</var> whose body is <var>exp</var>.  It is
this macro&rsquo;s responsibility to recognize insns that set the condition
code as a byproduct of other activity as well as those that explicitly
set <code>(cc0)</code>.
</p>
<p>This macro is not used on machines that do not use <code>cc0</code>.
</p>
<p>If there are insns that do not set the condition code but do alter
other machine registers, this macro must check to see whether they
invalidate the expressions that the condition code is recorded as
reflecting.  For example, on the 68000, insns that store in address
registers do not set the condition code, which means that usually
<code>NOTICE_UPDATE_CC</code> can leave <code>cc_status</code> unaltered for such
insns.  But suppose that the previous insn set the condition code
based on location &lsquo;<samp>a4@(102)</samp>&rsquo; and the current insn stores a new
value in &lsquo;<samp>a4</samp>&rsquo;.  Although the condition code is not changed by
this, it will no longer be true that it reflects the contents of
&lsquo;<samp>a4@(102)</samp>&rsquo;.  Therefore, <code>NOTICE_UPDATE_CC</code> must alter
<code>cc_status</code> in this case to say that nothing is known about the
condition code value.
</p>
<p>The definition of <code>NOTICE_UPDATE_CC</code> must be prepared to deal
with the results of peephole optimization: insns whose patterns are
<code>parallel</code> RTXs containing various <code>reg</code>, <code>mem</code> or
constants which are just the operands.  The RTL structure of these
insns is not sufficient to indicate what the insns actually do.  What
<code>NOTICE_UPDATE_CC</code> should do when it sees one is just to run
<code>CC_STATUS_INIT</code>.
</p>
<p>A possible definition of <code>NOTICE_UPDATE_CC</code> is to call a function
that looks at an attribute (see <a href="#Insn-Attributes">Insn Attributes</a>) named, for example,
&lsquo;<samp>cc</samp>&rsquo;.  This avoids having detailed information about patterns in
two places, the <samp>md</samp> file and in <code>NOTICE_UPDATE_CC</code>.
</p></dd></dl>

<hr>
<a name="MODE_005fCC-Condition-Codes"></a>
<div class="header">
<p>
Previous: <a href="#CC0-Condition-Codes" accesskey="p" rel="prev">CC0 Condition Codes</a>, Up: <a href="#Condition-Code" accesskey="u" rel="up">Condition Code</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Representation-of-condition-codes-using-registers"></a>
<h4 class="subsection">17.16.2 Representation of condition codes using registers</h4>
<a name="index-CCmode-1"></a>
<a name="index-MODE_005fCC-1"></a>

<dl>
<dt><a name="index-SELECT_005fCC_005fMODE"></a>Macro: <strong>SELECT_CC_MODE</strong> <em>(<var>op</var>, <var>x</var>, <var>y</var>)</em></dt>
<dd><p>On many machines, the condition code may be produced by other instructions
than compares, for example the branch can use directly the condition
code set by a subtract instruction.  However, on some machines
when the condition code is set this way some bits (such as the overflow
bit) are not set in the same way as a test instruction, so that a different
branch instruction must be used for some conditional branches.  When
this happens, use the machine mode of the condition code register to
record different formats of the condition code register.  Modes can
also be used to record which compare instruction (e.g. a signed or an
unsigned comparison) produced the condition codes.
</p>
<p>If other modes than <code>CCmode</code> are required, add them to
<samp><var>machine</var>-modes.def</samp> and define <code>SELECT_CC_MODE</code> to choose
a mode given an operand of a compare.  This is needed because the modes
have to be chosen not only during RTL generation but also, for example,
by instruction combination.  The result of <code>SELECT_CC_MODE</code> should
be consistent with the mode used in the patterns; for example to support
the case of the add on the SPARC discussed above, we have the pattern
</p>
<div class="smallexample">
<pre class="smallexample">(define_insn &quot;&quot;
  [(set (reg:CC_NOOV 0)
        (compare:CC_NOOV
          (plus:SI (match_operand:SI 0 &quot;register_operand&quot; &quot;%r&quot;)
                   (match_operand:SI 1 &quot;arith_operand&quot; &quot;rI&quot;))
          (const_int 0)))]
  &quot;&quot;
  &quot;&hellip;&quot;)
</pre></div>

<p>together with a <code>SELECT_CC_MODE</code> that returns <code>CC_NOOVmode</code>
for comparisons whose argument is a <code>plus</code>:
</p>
<div class="smallexample">
<pre class="smallexample">#define SELECT_CC_MODE(OP,X,Y) \
  (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT           \
   ? ((OP == LT || OP == LE || OP == GT || OP == GE)     \
      ? CCFPEmode : CCFPmode)                            \
   : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS     \
       || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \
      ? CC_NOOVmode : CCmode))
</pre></div>

<p>Another reason to use modes is to retain information on which operands
were used by the comparison; see <code>REVERSIBLE_CC_MODE</code> later in
this section.
</p>
<p>You should define this macro if and only if you define extra CC modes
in <samp><var>machine</var>-modes.def</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCANONICALIZE_005fCOMPARISON"></a>Target Hook: <em>void</em> <strong>TARGET_CANONICALIZE_COMPARISON</strong> <em>(int *<var>code</var>, rtx *<var>op0</var>, rtx *<var>op1</var>, bool <var>op0_preserve_value</var>) (<var>code</var>, <var>op0</var>, <var>op1</var>, <var>op0_preserve_value</var>)</em></dt>
<dd><p>On some machines not all possible comparisons are defined, but you can
convert an invalid comparison into a valid one.  For example, the Alpha
does not have a <code>GT</code> comparison, but you can use an <code>LT</code>
comparison instead and swap the order of the operands.
</p>
<p>On such machines, implement this hook to do any required conversions.
<var>code</var> is the initial comparison code and <var>op0</var> and <var>op1</var>
are the left and right operands of the comparison, respectively.  If
<var>op0_preserve_value</var> is <code>true</code> the implementation is not
allowed to change the value of <var>op0</var> since the value might be used
in RTXs which aren&rsquo;t comparisons.  E.g. the implementation is not
allowed to swap operands in that case.
</p>
<p>GCC will not assume that the comparison resulting from this macro is
valid but will see if the resulting insn matches a pattern in the
<samp>md</samp> file.
</p>
<p>You need not to implement this hook if it would never change the
comparison code or operands.
</p></dd></dl>

<dl>
<dt><a name="index-REVERSIBLE_005fCC_005fMODE"></a>Macro: <strong>REVERSIBLE_CC_MODE</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression whose value is one if it is always safe to reverse a
comparison whose mode is <var>mode</var>.  If <code>SELECT_CC_MODE</code>
can ever return <var>mode</var> for a floating-point inequality comparison,
then <code>REVERSIBLE_CC_MODE (<var>mode</var>)</code> must be zero.
</p>
<p>You need not define this macro if it would always returns zero or if the
floating-point format is anything other than <code>IEEE_FLOAT_FORMAT</code>.
For example, here is the definition used on the SPARC, where floating-point
inequality comparisons are given either <code>CCFPEmode</code> or <code>CCFPmode</code>:
</p>
<div class="smallexample">
<pre class="smallexample">#define REVERSIBLE_CC_MODE(MODE) \
   ((MODE) != CCFPEmode &amp;&amp; (MODE) != CCFPmode)
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-REVERSE_005fCONDITION"></a>Macro: <strong>REVERSE_CONDITION</strong> <em>(<var>code</var>, <var>mode</var>)</em></dt>
<dd><p>A C expression whose value is reversed condition code of the <var>code</var> for
comparison done in CC_MODE <var>mode</var>.  The macro is used only in case
<code>REVERSIBLE_CC_MODE (<var>mode</var>)</code> is nonzero.  Define this macro in case
machine has some non-standard way how to reverse certain conditionals.  For
instance in case all floating point conditions are non-trapping, compiler may
freely convert unordered compares to ordered ones.  Then definition may look
like:
</p>
<div class="smallexample">
<pre class="smallexample">#define REVERSE_CONDITION(CODE, MODE) \
   ((MODE) != CCFPmode ? reverse_condition (CODE) \
    : reverse_condition_maybe_unordered (CODE))
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-TARGET_005fFIXED_005fCONDITION_005fCODE_005fREGS"></a>Target Hook: <em>bool</em> <strong>TARGET_FIXED_CONDITION_CODE_REGS</strong> <em>(unsigned int *<var>p1</var>, unsigned int *<var>p2</var>)</em></dt>
<dd><p>On targets which do not use <code>(cc0)</code>, and which use a hard
register rather than a pseudo-register to hold condition codes, the
regular CSE passes are often not able to identify cases in which the
hard register is set to a common value.  Use this hook to enable a
small pass which optimizes such cases.  This hook should return true
to enable this pass, and it should set the integers to which its
arguments point to the hard register numbers used for condition codes.
When there is only one such register, as is true on most systems, the
integer pointed to by <var>p2</var> should be set to
<code>INVALID_REGNUM</code>.
</p>
<p>The default version of this hook returns false.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCC_005fMODES_005fCOMPATIBLE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_CC_MODES_COMPATIBLE</strong> <em>(enum machine_mode <var>m1</var>, enum machine_mode <var>m2</var>)</em></dt>
<dd><p>On targets which use multiple condition code modes in class
<code>MODE_CC</code>, it is sometimes the case that a comparison can be
validly done in more than one mode.  On such a system, define this
target hook to take two mode arguments and to return a mode in which
both comparisons may be validly done.  If there is no such mode,
return <code>VOIDmode</code>.
</p>
<p>The default version of this hook checks whether the modes are the
same.  If they are, it returns that mode.  If they are different, it
returns <code>VOIDmode</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFLAGS_005fREGNUM"></a>Target Hook: <em>unsigned int</em> <strong>TARGET_FLAGS_REGNUM</strong></dt>
<dd><p>If the target has a dedicated flags register, and it needs to use the post-reload comparison elimination pass, then this value should be set appropriately.
</p></dd></dl>

<hr>
<a name="Costs"></a>
<div class="header">
<p>
Next: <a href="#Scheduling" accesskey="n" rel="next">Scheduling</a>, Previous: <a href="#Condition-Code" accesskey="p" rel="prev">Condition Code</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Describing-Relative-Costs-of-Operations"></a>
<h3 class="section">17.17 Describing Relative Costs of Operations</h3>
<a name="index-costs-of-instructions"></a>
<a name="index-relative-costs"></a>
<a name="index-speed-of-instructions"></a>

<p>These macros let you describe the relative speed of various operations
on the target machine.
</p>
<dl>
<dt><a name="index-REGISTER_005fMOVE_005fCOST"></a>Macro: <strong>REGISTER_MOVE_COST</strong> <em>(<var>mode</var>, <var>from</var>, <var>to</var>)</em></dt>
<dd><p>A C expression for the cost of moving data of mode <var>mode</var> from a
register in class <var>from</var> to one in class <var>to</var>.  The classes are
expressed using the enumeration values such as <code>GENERAL_REGS</code>.  A
value of 2 is the default; other values are interpreted relative to
that.
</p>
<p>It is not required that the cost always equal 2 when <var>from</var> is the
same as <var>to</var>; on some machines it is expensive to move between
registers if they are not general registers.
</p>
<p>If reload sees an insn consisting of a single <code>set</code> between two
hard registers, and if <code>REGISTER_MOVE_COST</code> applied to their
classes returns a value of 2, reload does not check to ensure that the
constraints of the insn are met.  Setting a cost of other than 2 will
allow reload to verify that the constraints are met.  You should do this
if the &lsquo;<samp>mov<var>m</var></samp>&rsquo; pattern&rsquo;s constraints do not allow such copying.
</p>
<p>These macros are obsolete, new ports should use the target hook
<code>TARGET_REGISTER_MOVE_COST</code> instead.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fREGISTER_005fMOVE_005fCOST"></a>Target Hook: <em>int</em> <strong>TARGET_REGISTER_MOVE_COST</strong> <em>(enum machine_mode <var>mode</var>, reg_class_t <var>from</var>, reg_class_t <var>to</var>)</em></dt>
<dd><p>This target hook should return the cost of moving data of mode <var>mode</var>
from a register in class <var>from</var> to one in class <var>to</var>.  The classes
are expressed using the enumeration values such as <code>GENERAL_REGS</code>.
A value of 2 is the default; other values are interpreted relative to
that.
</p>
<p>It is not required that the cost always equal 2 when <var>from</var> is the
same as <var>to</var>; on some machines it is expensive to move between
registers if they are not general registers.
</p>
<p>If reload sees an insn consisting of a single <code>set</code> between two
hard registers, and if <code>TARGET_REGISTER_MOVE_COST</code> applied to their
classes returns a value of 2, reload does not check to ensure that the
constraints of the insn are met.  Setting a cost of other than 2 will
allow reload to verify that the constraints are met.  You should do this
if the &lsquo;<samp>mov<var>m</var></samp>&rsquo; pattern&rsquo;s constraints do not allow such copying.
</p>
<p>The default version of this function returns 2.
</p></dd></dl>

<dl>
<dt><a name="index-MEMORY_005fMOVE_005fCOST"></a>Macro: <strong>MEMORY_MOVE_COST</strong> <em>(<var>mode</var>, <var>class</var>, <var>in</var>)</em></dt>
<dd><p>A C expression for the cost of moving data of mode <var>mode</var> between a
register of class <var>class</var> and memory; <var>in</var> is zero if the value
is to be written to memory, nonzero if it is to be read in.  This cost
is relative to those in <code>REGISTER_MOVE_COST</code>.  If moving between
registers and memory is more expensive than between two registers, you
should define this macro to express the relative cost.
</p>
<p>If you do not define this macro, GCC uses a default cost of 4 plus
the cost of copying via a secondary reload register, if one is
needed.  If your machine requires a secondary reload register to copy
between memory and a register of <var>class</var> but the reload mechanism is
more complex than copying via an intermediate, define this macro to
reflect the actual cost of the move.
</p>
<p>GCC defines the function <code>memory_move_secondary_cost</code> if
secondary reloads are needed.  It computes the costs due to copying via
a secondary register.  If your machine copies from memory using a
secondary register in the conventional way but the default base value of
4 is not correct for your machine, define this macro to add some other
value to the result of that function.  The arguments to that function
are the same as to this macro.
</p>
<p>These macros are obsolete, new ports should use the target hook
<code>TARGET_MEMORY_MOVE_COST</code> instead.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMEMORY_005fMOVE_005fCOST"></a>Target Hook: <em>int</em> <strong>TARGET_MEMORY_MOVE_COST</strong> <em>(enum machine_mode <var>mode</var>, reg_class_t <var>rclass</var>, bool <var>in</var>)</em></dt>
<dd><p>This target hook should return the cost of moving data of mode <var>mode</var>
between a register of class <var>rclass</var> and memory; <var>in</var> is <code>false</code>
if the value is to be written to memory, <code>true</code> if it is to be read in.
This cost is relative to those in <code>TARGET_REGISTER_MOVE_COST</code>.
If moving between registers and memory is more expensive than between two
registers, you should add this target hook to express the relative cost.
</p>
<p>If you do not add this target hook, GCC uses a default cost of 4 plus
the cost of copying via a secondary reload register, if one is
needed.  If your machine requires a secondary reload register to copy
between memory and a register of <var>rclass</var> but the reload mechanism is
more complex than copying via an intermediate, use this target hook to
reflect the actual cost of the move.
</p>
<p>GCC defines the function <code>memory_move_secondary_cost</code> if
secondary reloads are needed.  It computes the costs due to copying via
a secondary register.  If your machine copies from memory using a
secondary register in the conventional way but the default base value of
4 is not correct for your machine, use this target hook to add some other
value to the result of that function.  The arguments to that function
are the same as to this target hook.
</p></dd></dl>

<dl>
<dt><a name="index-BRANCH_005fCOST"></a>Macro: <strong>BRANCH_COST</strong> <em>(<var>speed_p</var>, <var>predictable_p</var>)</em></dt>
<dd><p>A C expression for the cost of a branch instruction.  A value of 1 is
the default; other values are interpreted relative to that. Parameter
<var>speed_p</var> is true when the branch in question should be optimized
for speed.  When it is false, <code>BRANCH_COST</code> should return a value
optimal for code size rather than performance.  <var>predictable_p</var> is
true for well-predicted branches. On many architectures the
<code>BRANCH_COST</code> can be reduced then.
</p></dd></dl>

<p>Here are additional macros which do not specify precise relative costs,
but only that certain actions are more expensive than GCC would
ordinarily expect.
</p>
<dl>
<dt><a name="index-SLOW_005fBYTE_005fACCESS"></a>Macro: <strong>SLOW_BYTE_ACCESS</strong></dt>
<dd><p>Define this macro as a C expression which is nonzero if accessing less
than a word of memory (i.e. a <code>char</code> or a <code>short</code>) is no
faster than accessing a word of memory, i.e., if such access
require more than one instruction or if there is no difference in cost
between byte and (aligned) word loads.
</p>
<p>When this macro is not defined, the compiler will access a field by
finding the smallest containing object; when it is defined, a fullword
load will be used if alignment permits.  Unless bytes accesses are
faster than word accesses, using word accesses is preferable since it
may eliminate subsequent memory access if subsequent accesses occur to
other fields in the same word of the structure, but to different bytes.
</p></dd></dl>

<dl>
<dt><a name="index-SLOW_005fUNALIGNED_005fACCESS"></a>Macro: <strong>SLOW_UNALIGNED_ACCESS</strong> <em>(<var>mode</var>, <var>alignment</var>)</em></dt>
<dd><p>Define this macro to be the value 1 if memory accesses described by the
<var>mode</var> and <var>alignment</var> parameters have a cost many times greater
than aligned accesses, for example if they are emulated in a trap
handler.
</p>
<p>When this macro is nonzero, the compiler will act as if
<code>STRICT_ALIGNMENT</code> were nonzero when generating code for block
moves.  This can cause significantly more instructions to be produced.
Therefore, do not set this macro nonzero if unaligned accesses only add a
cycle or two to the time for a memory access.
</p>
<p>If the value of this macro is always zero, it need not be defined.  If
this macro is defined, it should produce a nonzero value when
<code>STRICT_ALIGNMENT</code> is nonzero.
</p></dd></dl>

<dl>
<dt><a name="index-MOVE_005fRATIO"></a>Macro: <strong>MOVE_RATIO</strong> <em>(<var>speed</var>)</em></dt>
<dd><p>The threshold of number of scalar memory-to-memory move insns, <em>below</em>
which a sequence of insns should be generated instead of a
string move insn or a library call.  Increasing the value will always
make code faster, but eventually incurs high cost in increased code size.
</p>
<p>Note that on machines where the corresponding move insn is a
<code>define_expand</code> that emits a sequence of insns, this macro counts
the number of such sequences.
</p>
<p>The parameter <var>speed</var> is true if the code is currently being
optimized for speed rather than size.
</p>
<p>If you don&rsquo;t define this, a reasonable default is used.
</p></dd></dl>

<dl>
<dt><a name="index-MOVE_005fBY_005fPIECES_005fP"></a>Macro: <strong>MOVE_BY_PIECES_P</strong> <em>(<var>size</var>, <var>alignment</var>)</em></dt>
<dd><p>A C expression used to determine whether <code>move_by_pieces</code> will be used to
copy a chunk of memory, or whether some other block move mechanism
will be used.  Defaults to 1 if <code>move_by_pieces_ninsns</code> returns less
than <code>MOVE_RATIO</code>.
</p></dd></dl>

<dl>
<dt><a name="index-MOVE_005fMAX_005fPIECES"></a>Macro: <strong>MOVE_MAX_PIECES</strong></dt>
<dd><p>A C expression used by <code>move_by_pieces</code> to determine the largest unit
a load or store used to copy memory is.  Defaults to <code>MOVE_MAX</code>.
</p></dd></dl>

<dl>
<dt><a name="index-CLEAR_005fRATIO"></a>Macro: <strong>CLEAR_RATIO</strong> <em>(<var>speed</var>)</em></dt>
<dd><p>The threshold of number of scalar move insns, <em>below</em> which a sequence
of insns should be generated to clear memory instead of a string clear insn
or a library call.  Increasing the value will always make code faster, but
eventually incurs high cost in increased code size.
</p>
<p>The parameter <var>speed</var> is true if the code is currently being
optimized for speed rather than size.
</p>
<p>If you don&rsquo;t define this, a reasonable default is used.
</p></dd></dl>

<dl>
<dt><a name="index-CLEAR_005fBY_005fPIECES_005fP"></a>Macro: <strong>CLEAR_BY_PIECES_P</strong> <em>(<var>size</var>, <var>alignment</var>)</em></dt>
<dd><p>A C expression used to determine whether <code>clear_by_pieces</code> will be used
to clear a chunk of memory, or whether some other block clear mechanism
will be used.  Defaults to 1 if <code>move_by_pieces_ninsns</code> returns less
than <code>CLEAR_RATIO</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SET_005fRATIO"></a>Macro: <strong>SET_RATIO</strong> <em>(<var>speed</var>)</em></dt>
<dd><p>The threshold of number of scalar move insns, <em>below</em> which a sequence
of insns should be generated to set memory to a constant value, instead of
a block set insn or a library call.
Increasing the value will always make code faster, but
eventually incurs high cost in increased code size.
</p>
<p>The parameter <var>speed</var> is true if the code is currently being
optimized for speed rather than size.
</p>
<p>If you don&rsquo;t define this, it defaults to the value of <code>MOVE_RATIO</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SET_005fBY_005fPIECES_005fP"></a>Macro: <strong>SET_BY_PIECES_P</strong> <em>(<var>size</var>, <var>alignment</var>)</em></dt>
<dd><p>A C expression used to determine whether <code>store_by_pieces</code> will be
used to set a chunk of memory to a constant value, or whether some
other mechanism will be used.  Used by <code>__builtin_memset</code> when
storing values other than constant zero.
Defaults to 1 if <code>move_by_pieces_ninsns</code> returns less
than <code>SET_RATIO</code>.
</p></dd></dl>

<dl>
<dt><a name="index-STORE_005fBY_005fPIECES_005fP"></a>Macro: <strong>STORE_BY_PIECES_P</strong> <em>(<var>size</var>, <var>alignment</var>)</em></dt>
<dd><p>A C expression used to determine whether <code>store_by_pieces</code> will be
used to set a chunk of memory to a constant string value, or whether some
other mechanism will be used.  Used by <code>__builtin_strcpy</code> when
called with a constant source string.
Defaults to 1 if <code>move_by_pieces_ninsns</code> returns less
than <code>MOVE_RATIO</code>.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fLOAD_005fPOST_005fINCREMENT"></a>Macro: <strong>USE_LOAD_POST_INCREMENT</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression used to determine whether a load postincrement is a good
thing to use for a given mode.  Defaults to the value of
<code>HAVE_POST_INCREMENT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fLOAD_005fPOST_005fDECREMENT"></a>Macro: <strong>USE_LOAD_POST_DECREMENT</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression used to determine whether a load postdecrement is a good
thing to use for a given mode.  Defaults to the value of
<code>HAVE_POST_DECREMENT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fLOAD_005fPRE_005fINCREMENT"></a>Macro: <strong>USE_LOAD_PRE_INCREMENT</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression used to determine whether a load preincrement is a good
thing to use for a given mode.  Defaults to the value of
<code>HAVE_PRE_INCREMENT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fLOAD_005fPRE_005fDECREMENT"></a>Macro: <strong>USE_LOAD_PRE_DECREMENT</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression used to determine whether a load predecrement is a good
thing to use for a given mode.  Defaults to the value of
<code>HAVE_PRE_DECREMENT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fSTORE_005fPOST_005fINCREMENT"></a>Macro: <strong>USE_STORE_POST_INCREMENT</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression used to determine whether a store postincrement is a good
thing to use for a given mode.  Defaults to the value of
<code>HAVE_POST_INCREMENT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fSTORE_005fPOST_005fDECREMENT"></a>Macro: <strong>USE_STORE_POST_DECREMENT</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression used to determine whether a store postdecrement is a good
thing to use for a given mode.  Defaults to the value of
<code>HAVE_POST_DECREMENT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fSTORE_005fPRE_005fINCREMENT"></a>Macro: <strong>USE_STORE_PRE_INCREMENT</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>This macro is used to determine whether a store preincrement is a good
thing to use for a given mode.  Defaults to the value of
<code>HAVE_PRE_INCREMENT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fSTORE_005fPRE_005fDECREMENT"></a>Macro: <strong>USE_STORE_PRE_DECREMENT</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>This macro is used to determine whether a store predecrement is a good
thing to use for a given mode.  Defaults to the value of
<code>HAVE_PRE_DECREMENT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-NO_005fFUNCTION_005fCSE"></a>Macro: <strong>NO_FUNCTION_CSE</strong></dt>
<dd><p>Define this macro if it is as good or better to call a constant
function address than to call an address kept in a register.
</p></dd></dl>

<dl>
<dt><a name="index-LOGICAL_005fOP_005fNON_005fSHORT_005fCIRCUIT"></a>Macro: <strong>LOGICAL_OP_NON_SHORT_CIRCUIT</strong></dt>
<dd><p>Define this macro if a non-short-circuit operation produced by
&lsquo;<samp>fold_range_test ()</samp>&rsquo; is optimal.  This macro defaults to true if
<code>BRANCH_COST</code> is greater than or equal to the value 2.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fRTX_005fCOSTS"></a>Target Hook: <em>bool</em> <strong>TARGET_RTX_COSTS</strong> <em>(rtx <var>x</var>, int <var>code</var>, int <var>outer_code</var>, int <var>opno</var>, int *<var>total</var>, bool <var>speed</var>)</em></dt>
<dd><p>This target hook describes the relative costs of RTL expressions.
</p>
<p>The cost may depend on the precise form of the expression, which is
available for examination in <var>x</var>, and the fact that <var>x</var> appears
as operand <var>opno</var> of an expression with rtx code <var>outer_code</var>.
That is, the hook can assume that there is some rtx <var>y</var> such
that &lsquo;<samp>GET_CODE (<var>y</var>) == <var>outer_code</var></samp>&rsquo; and such that
either (a) &lsquo;<samp>XEXP (<var>y</var>, <var>opno</var>) == <var>x</var></samp>&rsquo; or
(b) &lsquo;<samp>XVEC (<var>y</var>, <var>opno</var>)</samp>&rsquo; contains <var>x</var>.
</p>
<p><var>code</var> is <var>x</var>&rsquo;s expression code&mdash;redundant, since it can be
obtained with <code>GET_CODE (<var>x</var>)</code>.
</p>
<p>In implementing this hook, you can use the construct
<code>COSTS_N_INSNS (<var>n</var>)</code> to specify a cost equal to <var>n</var> fast
instructions.
</p>
<p>On entry to the hook, <code>*<var>total</var></code> contains a default estimate
for the cost of the expression.  The hook should modify this value as
necessary.  Traditionally, the default costs are <code>COSTS_N_INSNS (5)</code>
for multiplications, <code>COSTS_N_INSNS (7)</code> for division and modulus
operations, and <code>COSTS_N_INSNS (1)</code> for all other operations.
</p>
<p>When optimizing for code size, i.e. when <code>speed</code> is
false, this target hook should be used to estimate the relative
size cost of an expression, again relative to <code>COSTS_N_INSNS</code>.
</p>
<p>The hook returns true when all subexpressions of <var>x</var> have been
processed, and false when <code>rtx_cost</code> should recurse.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fADDRESS_005fCOST"></a>Target Hook: <em>int</em> <strong>TARGET_ADDRESS_COST</strong> <em>(rtx <var>address</var>, enum machine_mode <var>mode</var>, addr_space_t <var>as</var>, bool <var>speed</var>)</em></dt>
<dd><p>This hook computes the cost of an addressing mode that contains
<var>address</var>.  If not defined, the cost is computed from
the <var>address</var> expression and the <code>TARGET_RTX_COST</code> hook.
</p>
<p>For most CISC machines, the default cost is a good approximation of the
true cost of the addressing mode.  However, on RISC machines, all
instructions normally have the same length and execution time.  Hence
all addresses will have equal costs.
</p>
<p>In cases where more than one form of an address is known, the form with
the lowest cost will be used.  If multiple forms have the same, lowest,
cost, the one that is the most complex will be used.
</p>
<p>For example, suppose an address that is equal to the sum of a register
and a constant is used twice in the same basic block.  When this macro
is not defined, the address will be computed in a register and memory
references will be indirect through that register.  On machines where
the cost of the addressing mode containing the sum is no higher than
that of a simple indirect reference, this will produce an additional
instruction and possibly require an additional register.  Proper
specification of this macro eliminates this overhead for such machines.
</p>
<p>This hook is never called with an invalid address.
</p>
<p>On machines where an address involving more than one register is as
cheap as an address computation involving only one register, defining
<code>TARGET_ADDRESS_COST</code> to reflect this can cause two registers to
be live over a region of code where only one would have been if
<code>TARGET_ADDRESS_COST</code> were not defined in that manner.  This effect
should be considered in the definition of this macro.  Equivalent costs
should probably only be given to addresses with different numbers of
registers on machines with lots of registers.
</p></dd></dl>

<hr>
<a name="Scheduling"></a>
<div class="header">
<p>
Next: <a href="#Sections" accesskey="n" rel="next">Sections</a>, Previous: <a href="#Costs" accesskey="p" rel="prev">Costs</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Adjusting-the-Instruction-Scheduler"></a>
<h3 class="section">17.18 Adjusting the Instruction Scheduler</h3>

<p>The instruction scheduler may need a fair amount of machine-specific
adjustment in order to produce good code.  GCC provides several target
hooks for this purpose.  It is usually enough to define just a few of
them: try the first ones in this list first.
</p>
<dl>
<dt><a name="index-TARGET_005fSCHED_005fISSUE_005fRATE"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_ISSUE_RATE</strong> <em>(void)</em></dt>
<dd><p>This hook returns the maximum number of instructions that can ever
issue at the same time on the target machine.  The default is one.
Although the insn scheduler can define itself the possibility of issue
an insn on the same cycle, the value can serve as an additional
constraint to issue insns on the same simulated processor cycle (see
hooks &lsquo;<samp>TARGET_SCHED_REORDER</samp>&rsquo; and &lsquo;<samp>TARGET_SCHED_REORDER2</samp>&rsquo;).
This value must be constant over the entire compilation.  If you need
it to vary depending on what the instructions are, you must use
&lsquo;<samp>TARGET_SCHED_VARIABLE_ISSUE</samp>&rsquo;.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fVARIABLE_005fISSUE"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_VARIABLE_ISSUE</strong> <em>(FILE *<var>file</var>, int <var>verbose</var>, rtx <var>insn</var>, int <var>more</var>)</em></dt>
<dd><p>This hook is executed by the scheduler after it has scheduled an insn
from the ready list.  It should return the number of insns which can
still be issued in the current cycle.  The default is
&lsquo;<samp><var>more</var>&nbsp;<span class="nolinebreak">-</span>&nbsp;1<!-- /@w --></samp>&rsquo; for insns other than <code>CLOBBER</code> and
<code>USE</code>, which normally are not counted against the issue rate.
You should define this hook if some insns take more machine resources
than others, so that fewer insns can follow them in the same cycle.
<var>file</var> is either a null pointer, or a stdio stream to write any
debug output to.  <var>verbose</var> is the verbose level provided by
<samp>-fsched-verbose-<var>n</var></samp>.  <var>insn</var> is the instruction that
was scheduled.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fADJUST_005fCOST"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_ADJUST_COST</strong> <em>(rtx <var>insn</var>, rtx <var>link</var>, rtx <var>dep_insn</var>, int <var>cost</var>)</em></dt>
<dd><p>This function corrects the value of <var>cost</var> based on the
relationship between <var>insn</var> and <var>dep_insn</var> through the
dependence <var>link</var>.  It should return the new value.  The default
is to make no adjustment to <var>cost</var>.  This can be used for example
to specify to the scheduler using the traditional pipeline description
that an output- or anti-dependence does not incur the same cost as a
data-dependence.  If the scheduler using the automaton based pipeline
description, the cost of anti-dependence is zero and the cost of
output-dependence is maximum of one and the difference of latency
times of the first and the second insns.  If these values are not
acceptable, you could use the hook to modify them too.  See also
see <a href="#Processor-pipeline-description">Processor pipeline description</a>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fADJUST_005fPRIORITY"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_ADJUST_PRIORITY</strong> <em>(rtx <var>insn</var>, int <var>priority</var>)</em></dt>
<dd><p>This hook adjusts the integer scheduling priority <var>priority</var> of
<var>insn</var>.  It should return the new priority.  Increase the priority to
execute <var>insn</var> earlier, reduce the priority to execute <var>insn</var>
later.  Do not define this hook if you do not need to adjust the
scheduling priorities of insns.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fREORDER"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_REORDER</strong> <em>(FILE *<var>file</var>, int <var>verbose</var>, rtx *<var>ready</var>, int *<var>n_readyp</var>, int <var>clock</var>)</em></dt>
<dd><p>This hook is executed by the scheduler after it has scheduled the ready
list, to allow the machine description to reorder it (for example to
combine two small instructions together on &lsquo;<samp>VLIW</samp>&rsquo; machines).
<var>file</var> is either a null pointer, or a stdio stream to write any
debug output to.  <var>verbose</var> is the verbose level provided by
<samp>-fsched-verbose-<var>n</var></samp>.  <var>ready</var> is a pointer to the ready
list of instructions that are ready to be scheduled.  <var>n_readyp</var> is
a pointer to the number of elements in the ready list.  The scheduler
reads the ready list in reverse order, starting with
<var>ready</var>[<var>*n_readyp</var> - 1] and going to <var>ready</var>[0].  <var>clock</var>
is the timer tick of the scheduler.  You may modify the ready list and
the number of ready insns.  The return value is the number of insns that
can issue this cycle; normally this is just <code>issue_rate</code>.  See also
&lsquo;<samp>TARGET_SCHED_REORDER2</samp>&rsquo;.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fREORDER2"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_REORDER2</strong> <em>(FILE *<var>file</var>, int <var>verbose</var>, rtx *<var>ready</var>, int *<var>n_readyp</var>, int <var>clock</var>)</em></dt>
<dd><p>Like &lsquo;<samp>TARGET_SCHED_REORDER</samp>&rsquo;, but called at a different time.  That
function is called whenever the scheduler starts a new cycle.  This one
is called once per iteration over a cycle, immediately after
&lsquo;<samp>TARGET_SCHED_VARIABLE_ISSUE</samp>&rsquo;; it can reorder the ready list and
return the number of insns to be scheduled in the same cycle.  Defining
this hook can be useful if there are frequent situations where
scheduling one insn causes other insns to become ready in the same
cycle.  These other insns can then be taken into account properly.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fDEPENDENCIES_005fEVALUATION_005fHOOK"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK</strong> <em>(rtx <var>head</var>, rtx <var>tail</var>)</em></dt>
<dd><p>This hook is called after evaluation forward dependencies of insns in
chain given by two parameter values (<var>head</var> and <var>tail</var>
correspondingly) but before insns scheduling of the insn chain.  For
example, it can be used for better insn classification if it requires
analysis of dependencies.  This hook can use backward and forward
dependencies of the insn scheduler because they are already
calculated.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fINIT"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_INIT</strong> <em>(FILE *<var>file</var>, int <var>verbose</var>, int <var>max_ready</var>)</em></dt>
<dd><p>This hook is executed by the scheduler at the beginning of each block of
instructions that are to be scheduled.  <var>file</var> is either a null
pointer, or a stdio stream to write any debug output to.  <var>verbose</var>
is the verbose level provided by <samp>-fsched-verbose-<var>n</var></samp>.
<var>max_ready</var> is the maximum number of insns in the current scheduling
region that can be live at the same time.  This can be used to allocate
scratch space if it is needed, e.g. by &lsquo;<samp>TARGET_SCHED_REORDER</samp>&rsquo;.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFINISH"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_FINISH</strong> <em>(FILE *<var>file</var>, int <var>verbose</var>)</em></dt>
<dd><p>This hook is executed by the scheduler at the end of each block of
instructions that are to be scheduled.  It can be used to perform
cleanup of any actions done by the other scheduling hooks.  <var>file</var>
is either a null pointer, or a stdio stream to write any debug output
to.  <var>verbose</var> is the verbose level provided by
<samp>-fsched-verbose-<var>n</var></samp>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fINIT_005fGLOBAL"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_INIT_GLOBAL</strong> <em>(FILE *<var>file</var>, int <var>verbose</var>, int <var>old_max_uid</var>)</em></dt>
<dd><p>This hook is executed by the scheduler after function level initializations.
<var>file</var> is either a null pointer, or a stdio stream to write any debug output to.
<var>verbose</var> is the verbose level provided by <samp>-fsched-verbose-<var>n</var></samp>.
<var>old_max_uid</var> is the maximum insn uid when scheduling begins.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFINISH_005fGLOBAL"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_FINISH_GLOBAL</strong> <em>(FILE *<var>file</var>, int <var>verbose</var>)</em></dt>
<dd><p>This is the cleanup hook corresponding to <code>TARGET_SCHED_INIT_GLOBAL</code>.
<var>file</var> is either a null pointer, or a stdio stream to write any debug output to.
<var>verbose</var> is the verbose level provided by <samp>-fsched-verbose-<var>n</var></samp>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fDFA_005fPRE_005fCYCLE_005fINSN"></a>Target Hook: <em>rtx</em> <strong>TARGET_SCHED_DFA_PRE_CYCLE_INSN</strong> <em>(void)</em></dt>
<dd><p>The hook returns an RTL insn.  The automaton state used in the
pipeline hazard recognizer is changed as if the insn were scheduled
when the new simulated processor cycle starts.  Usage of the hook may
simplify the automaton pipeline description for some <acronym>VLIW</acronym>
processors.  If the hook is defined, it is used only for the automaton
based pipeline description.  The default is not to change the state
when the new simulated processor cycle starts.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fINIT_005fDFA_005fPRE_005fCYCLE_005fINSN"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN</strong> <em>(void)</em></dt>
<dd><p>The hook can be used to initialize data used by the previous hook.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fDFA_005fPOST_005fCYCLE_005fINSN"></a>Target Hook: <em>rtx</em> <strong>TARGET_SCHED_DFA_POST_CYCLE_INSN</strong> <em>(void)</em></dt>
<dd><p>The hook is analogous to &lsquo;<samp>TARGET_SCHED_DFA_PRE_CYCLE_INSN</samp>&rsquo; but used
to changed the state as if the insn were scheduled when the new
simulated processor cycle finishes.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fINIT_005fDFA_005fPOST_005fCYCLE_005fINSN"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN</strong> <em>(void)</em></dt>
<dd><p>The hook is analogous to &lsquo;<samp>TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN</samp>&rsquo; but
used to initialize data used by the previous hook.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fDFA_005fPRE_005fADVANCE_005fCYCLE"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE</strong> <em>(void)</em></dt>
<dd><p>The hook to notify target that the current simulated cycle is about to finish.
The hook is analogous to &lsquo;<samp>TARGET_SCHED_DFA_PRE_CYCLE_INSN</samp>&rsquo; but used
to change the state in more complicated situations - e.g., when advancing
state on a single insn is not enough.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fDFA_005fPOST_005fADVANCE_005fCYCLE"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_DFA_POST_ADVANCE_CYCLE</strong> <em>(void)</em></dt>
<dd><p>The hook to notify target that new simulated cycle has just started.
The hook is analogous to &lsquo;<samp>TARGET_SCHED_DFA_POST_CYCLE_INSN</samp>&rsquo; but used
to change the state in more complicated situations - e.g., when advancing
state on a single insn is not enough.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fDFA_005fLOOKAHEAD"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD</strong> <em>(void)</em></dt>
<dd><p>This hook controls better choosing an insn from the ready insn queue
for the <acronym>DFA</acronym>-based insn scheduler.  Usually the scheduler
chooses the first insn from the queue.  If the hook returns a positive
value, an additional scheduler code tries all permutations of
&lsquo;<samp>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()</samp>&rsquo;
subsequent ready insns to choose an insn whose issue will result in
maximal number of issued insns on the same cycle.  For the
<acronym>VLIW</acronym> processor, the code could actually solve the problem of
packing simple insns into the <acronym>VLIW</acronym> insn.  Of course, if the
rules of <acronym>VLIW</acronym> packing are described in the automaton.
</p>
<p>This code also could be used for superscalar <acronym>RISC</acronym>
processors.  Let us consider a superscalar <acronym>RISC</acronym> processor
with 3 pipelines.  Some insns can be executed in pipelines <var>A</var> or
<var>B</var>, some insns can be executed only in pipelines <var>B</var> or
<var>C</var>, and one insn can be executed in pipeline <var>B</var>.  The
processor may issue the 1st insn into <var>A</var> and the 2nd one into
<var>B</var>.  In this case, the 3rd insn will wait for freeing <var>B</var>
until the next cycle.  If the scheduler issues the 3rd insn the first,
the processor could issue all 3 insns per cycle.
</p>
<p>Actually this code demonstrates advantages of the automaton based
pipeline hazard recognizer.  We try quickly and easy many insn
schedules to choose the best one.
</p>
<p>The default is no multipass scheduling.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fDFA_005fLOOKAHEAD_005fGUARD"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD</strong> <em>(rtx <var>insn</var>)</em></dt>
<dd>
<p>This hook controls what insns from the ready insn queue will be
considered for the multipass insn scheduling.  If the hook returns
zero for <var>insn</var>, the insn will be not chosen to
be issued.
</p>
<p>The default is that any ready insns can be chosen to be issued.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fBEGIN"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN</strong> <em>(void *<var>data</var>, char *<var>ready_try</var>, int <var>n_ready</var>, bool <var>first_cycle_insn_p</var>)</em></dt>
<dd><p>This hook prepares the target backend for a new round of multipass
scheduling.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fISSUE"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE</strong> <em>(void *<var>data</var>, char *<var>ready_try</var>, int <var>n_ready</var>, rtx <var>insn</var>, const void *<var>prev_data</var>)</em></dt>
<dd><p>This hook is called when multipass scheduling evaluates instruction INSN.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fBACKTRACK"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK</strong> <em>(const void *<var>data</var>, char *<var>ready_try</var>, int <var>n_ready</var>)</em></dt>
<dd><p>This is called when multipass scheduling backtracks from evaluation of
an instruction.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fEND"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END</strong> <em>(const void *<var>data</var>)</em></dt>
<dd><p>This hook notifies the target about the result of the concluded current
round of multipass scheduling.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fINIT"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT</strong> <em>(void *<var>data</var>)</em></dt>
<dd><p>This hook initializes target-specific data used in multipass scheduling.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fFINI"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI</strong> <em>(void *<var>data</var>)</em></dt>
<dd><p>This hook finalizes target-specific data used in multipass scheduling.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fDFA_005fNEW_005fCYCLE"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_DFA_NEW_CYCLE</strong> <em>(FILE *<var>dump</var>, int <var>verbose</var>, rtx <var>insn</var>, int <var>last_clock</var>, int <var>clock</var>, int *<var>sort_p</var>)</em></dt>
<dd><p>This hook is called by the insn scheduler before issuing <var>insn</var>
on cycle <var>clock</var>.  If the hook returns nonzero,
<var>insn</var> is not issued on this processor cycle.  Instead,
the processor cycle is advanced.  If *<var>sort_p</var>
is zero, the insn ready queue is not sorted on the new cycle
start as usually.  <var>dump</var> and <var>verbose</var> specify the file and
verbosity level to use for debugging output.
<var>last_clock</var> and <var>clock</var> are, respectively, the
processor cycle on which the previous insn has been issued,
and the current processor cycle.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fIS_005fCOSTLY_005fDEPENDENCE"></a>Target Hook: <em>bool</em> <strong>TARGET_SCHED_IS_COSTLY_DEPENDENCE</strong> <em>(struct _dep *<var>_dep</var>, int <var>cost</var>, int <var>distance</var>)</em></dt>
<dd><p>This hook is used to define which dependences are considered costly by
the target, so costly that it is not advisable to schedule the insns that
are involved in the dependence too close to one another.  The parameters
to this hook are as follows:  The first parameter <var>_dep</var> is the dependence
being evaluated.  The second parameter <var>cost</var> is the cost of the
dependence as estimated by the scheduler, and the third
parameter <var>distance</var> is the distance in cycles between the two insns.
The hook returns <code>true</code> if considering the distance between the two
insns the dependence between them is considered costly by the target,
and <code>false</code> otherwise.
</p>
<p>Defining this hook can be useful in multiple-issue out-of-order machines,
where (a) it&rsquo;s practically hopeless to predict the actual data/resource
delays, however: (b) there&rsquo;s a better chance to predict the actual grouping
that will be formed, and (c) correctly emulating the grouping can be very
important.  In such targets one may want to allow issuing dependent insns
closer to one another&mdash;i.e., closer than the dependence distance;  however,
not in cases of &ldquo;costly dependences&rdquo;, which this hooks allows to define.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fH_005fI_005fD_005fEXTENDED"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_H_I_D_EXTENDED</strong> <em>(void)</em></dt>
<dd><p>This hook is called by the insn scheduler after emitting a new instruction to
the instruction stream.  The hook notifies a target backend to extend its
per instruction data structures.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fALLOC_005fSCHED_005fCONTEXT"></a>Target Hook: <em>void *</em> <strong>TARGET_SCHED_ALLOC_SCHED_CONTEXT</strong> <em>(void)</em></dt>
<dd><p>Return a pointer to a store large enough to hold target scheduling context.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fINIT_005fSCHED_005fCONTEXT"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_INIT_SCHED_CONTEXT</strong> <em>(void *<var>tc</var>, bool <var>clean_p</var>)</em></dt>
<dd><p>Initialize store pointed to by <var>tc</var> to hold target scheduling context.
It <var>clean_p</var> is true then initialize <var>tc</var> as if scheduler is at the
beginning of the block.  Otherwise, copy the current context into <var>tc</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fSET_005fSCHED_005fCONTEXT"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_SET_SCHED_CONTEXT</strong> <em>(void *<var>tc</var>)</em></dt>
<dd><p>Copy target scheduling context pointed to by <var>tc</var> to the current context.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fCLEAR_005fSCHED_005fCONTEXT"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_CLEAR_SCHED_CONTEXT</strong> <em>(void *<var>tc</var>)</em></dt>
<dd><p>Deallocate internal data in target scheduling context pointed to by <var>tc</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFREE_005fSCHED_005fCONTEXT"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_FREE_SCHED_CONTEXT</strong> <em>(void *<var>tc</var>)</em></dt>
<dd><p>Deallocate a store for target scheduling context pointed to by <var>tc</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fSPECULATE_005fINSN"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_SPECULATE_INSN</strong> <em>(rtx <var>insn</var>, int <var>request</var>, rtx *<var>new_pat</var>)</em></dt>
<dd><p>This hook is called by the insn scheduler when <var>insn</var> has only
speculative dependencies and therefore can be scheduled speculatively.
The hook is used to check if the pattern of <var>insn</var> has a speculative
version and, in case of successful check, to generate that speculative
pattern.  The hook should return 1, if the instruction has a speculative form,
or -1, if it doesn&rsquo;t.  <var>request</var> describes the type of requested
speculation.  If the return value equals 1 then <var>new_pat</var> is assigned
the generated speculative pattern.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fNEEDS_005fBLOCK_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_SCHED_NEEDS_BLOCK_P</strong> <em>(int <var>dep_status</var>)</em></dt>
<dd><p>This hook is called by the insn scheduler during generation of recovery code
for <var>insn</var>.  It should return <code>true</code>, if the corresponding check
instruction should branch to recovery code, or <code>false</code> otherwise.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fGEN_005fSPEC_005fCHECK"></a>Target Hook: <em>rtx</em> <strong>TARGET_SCHED_GEN_SPEC_CHECK</strong> <em>(rtx <var>insn</var>, rtx <var>label</var>, int <var>mutate_p</var>)</em></dt>
<dd><p>This hook is called by the insn scheduler to generate a pattern for recovery
check instruction.  If <var>mutate_p</var> is zero, then <var>insn</var> is a
speculative instruction for which the check should be generated.
<var>label</var> is either a label of a basic block, where recovery code should
be emitted, or a null pointer, when requested check doesn&rsquo;t branch to
recovery code (a simple check).  If <var>mutate_p</var> is nonzero, then
a pattern for a branchy check corresponding to a simple check denoted by
<var>insn</var> should be generated.  In this case <var>label</var> can&rsquo;t be null.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fDFA_005fLOOKAHEAD_005fGUARD_005fSPEC"></a>Target Hook: <em>bool</em> <strong>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC</strong> <em>(const_rtx <var>insn</var>)</em></dt>
<dd><p>This hook is used as a workaround for
&lsquo;<samp>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD</samp>&rsquo; not being
called on the first instruction of the ready list.  The hook is used to
discard speculative instructions that stand first in the ready list from
being scheduled on the current cycle.  If the hook returns <code>false</code>,
<var>insn</var> will not be chosen to be issued.
For non-speculative instructions,
the hook should always return <code>true</code>.  For example, in the ia64 backend
the hook is used to cancel data speculative insns when the ALAT table
is nearly full.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fSET_005fSCHED_005fFLAGS"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_SET_SCHED_FLAGS</strong> <em>(struct spec_info_def *<var>spec_info</var>)</em></dt>
<dd><p>This hook is used by the insn scheduler to find out what features should be
enabled/used.
The structure *<var>spec_info</var> should be filled in by the target.
The structure describes speculation types that can be used in the scheduler.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fSMS_005fRES_005fMII"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_SMS_RES_MII</strong> <em>(struct ddg *<var>g</var>)</em></dt>
<dd><p>This hook is called by the swing modulo scheduler to calculate a
resource-based lower bound which is based on the resources available in
the machine and the resources required by each instruction.  The target
backend can use <var>g</var> to calculate such bound.  A very simple lower
bound will be used in case this hook is not implemented: the total number
of instructions divided by the issue rate.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fDISPATCH"></a>Target Hook: <em>bool</em> <strong>TARGET_SCHED_DISPATCH</strong> <em>(rtx <var>insn</var>, int <var>x</var>)</em></dt>
<dd><p>This hook is called by Haifa Scheduler.  It returns true if dispatch scheduling
is supported in hardware and the condition specified in the parameter is true.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fDISPATCH_005fDO"></a>Target Hook: <em>void</em> <strong>TARGET_SCHED_DISPATCH_DO</strong> <em>(rtx <var>insn</var>, int <var>x</var>)</em></dt>
<dd><p>This hook is called by Haifa Scheduler.  It performs the operation specified
in its second parameter.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fEXPOSED_005fPIPELINE"></a>Target Hook: <em>bool</em> <strong>TARGET_SCHED_EXPOSED_PIPELINE</strong></dt>
<dd><p>True if the processor has an exposed pipeline, which means that not just
the order of instructions is important for correctness when scheduling, but
also the latencies of operations.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSCHED_005fREASSOCIATION_005fWIDTH"></a>Target Hook: <em>int</em> <strong>TARGET_SCHED_REASSOCIATION_WIDTH</strong> <em>(unsigned int <var>opc</var>, enum machine_mode <var>mode</var>)</em></dt>
<dd><p>This hook is called by tree reassociator to determine a level of
parallelism required in output calculations chain.
</p></dd></dl>

<hr>
<a name="Sections"></a>
<div class="header">
<p>
Next: <a href="#PIC" accesskey="n" rel="next">PIC</a>, Previous: <a href="#Scheduling" accesskey="p" rel="prev">Scheduling</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Dividing-the-Output-into-Sections-_0028Texts_002c-Data_002c-_2026_0029"></a>
<h3 class="section">17.19 Dividing the Output into Sections (Texts, Data, &hellip;)</h3>

<p>An object file is divided into sections containing different types of
data.  In the most common case, there are three sections: the <em>text
section</em>, which holds instructions and read-only data; the <em>data
section</em>, which holds initialized writable data; and the <em>bss
section</em>, which holds uninitialized data.  Some systems have other kinds
of sections.
</p>
<p><samp>varasm.c</samp> provides several well-known sections, such as
<code>text_section</code>, <code>data_section</code> and <code>bss_section</code>.
The normal way of controlling a <code><var>foo</var>_section</code> variable
is to define the associated <code><var>FOO</var>_SECTION_ASM_OP</code> macro,
as described below.  The macros are only read once, when <samp>varasm.c</samp>
initializes itself, so their values must be run-time constants.
They may however depend on command-line flags.
</p>
<p><em>Note:</em> Some run-time files, such <samp>crtstuff.c</samp>, also make
use of the <code><var>FOO</var>_SECTION_ASM_OP</code> macros, and expect them
to be string literals.
</p>
<p>Some assemblers require a different string to be written every time a
section is selected.  If your assembler falls into this category, you
should define the <code>TARGET_ASM_INIT_SECTIONS</code> hook and use
<code>get_unnamed_section</code> to set up the sections.
</p>
<p>You must always create a <code>text_section</code>, either by defining
<code>TEXT_SECTION_ASM_OP</code> or by initializing <code>text_section</code>
in <code>TARGET_ASM_INIT_SECTIONS</code>.  The same is true of
<code>data_section</code> and <code>DATA_SECTION_ASM_OP</code>.  If you do not
create a distinct <code>readonly_data_section</code>, the default is to
reuse <code>text_section</code>.
</p>
<p>All the other <samp>varasm.c</samp> sections are optional, and are null
if the target does not provide them.
</p>
<dl>
<dt><a name="index-TEXT_005fSECTION_005fASM_005fOP"></a>Macro: <strong>TEXT_SECTION_ASM_OP</strong></dt>
<dd><p>A C expression whose value is a string, including spacing, containing the
assembler operation that should precede instructions and read-only data.
Normally <code>&quot;\t.text&quot;</code> is right.
</p></dd></dl>

<dl>
<dt><a name="index-HOT_005fTEXT_005fSECTION_005fNAME"></a>Macro: <strong>HOT_TEXT_SECTION_NAME</strong></dt>
<dd><p>If defined, a C string constant for the name of the section containing most
frequently executed functions of the program.  If not defined, GCC will provide
a default definition if the target supports named sections.
</p></dd></dl>

<dl>
<dt><a name="index-UNLIKELY_005fEXECUTED_005fTEXT_005fSECTION_005fNAME"></a>Macro: <strong>UNLIKELY_EXECUTED_TEXT_SECTION_NAME</strong></dt>
<dd><p>If defined, a C string constant for the name of the section containing unlikely
executed functions in the program.
</p></dd></dl>

<dl>
<dt><a name="index-DATA_005fSECTION_005fASM_005fOP"></a>Macro: <strong>DATA_SECTION_ASM_OP</strong></dt>
<dd><p>A C expression whose value is a string, including spacing, containing the
assembler operation to identify the following data as writable initialized
data.  Normally <code>&quot;\t.data&quot;</code> is right.
</p></dd></dl>

<dl>
<dt><a name="index-SDATA_005fSECTION_005fASM_005fOP"></a>Macro: <strong>SDATA_SECTION_ASM_OP</strong></dt>
<dd><p>If defined, a C expression whose value is a string, including spacing,
containing the assembler operation to identify the following data as
initialized, writable small data.
</p></dd></dl>

<dl>
<dt><a name="index-READONLY_005fDATA_005fSECTION_005fASM_005fOP"></a>Macro: <strong>READONLY_DATA_SECTION_ASM_OP</strong></dt>
<dd><p>A C expression whose value is a string, including spacing, containing the
assembler operation to identify the following data as read-only initialized
data.
</p></dd></dl>

<dl>
<dt><a name="index-BSS_005fSECTION_005fASM_005fOP"></a>Macro: <strong>BSS_SECTION_ASM_OP</strong></dt>
<dd><p>If defined, a C expression whose value is a string, including spacing,
containing the assembler operation to identify the following data as
uninitialized global data.  If not defined, and
<code>ASM_OUTPUT_ALIGNED_BSS</code> not defined,
uninitialized global data will be output in the data section if
<samp>-fno-common</samp> is passed, otherwise <code>ASM_OUTPUT_COMMON</code> will be
used.
</p></dd></dl>

<dl>
<dt><a name="index-SBSS_005fSECTION_005fASM_005fOP"></a>Macro: <strong>SBSS_SECTION_ASM_OP</strong></dt>
<dd><p>If defined, a C expression whose value is a string, including spacing,
containing the assembler operation to identify the following data as
uninitialized, writable small data.
</p></dd></dl>

<dl>
<dt><a name="index-TLS_005fCOMMON_005fASM_005fOP"></a>Macro: <strong>TLS_COMMON_ASM_OP</strong></dt>
<dd><p>If defined, a C expression whose value is a string containing the
assembler operation to identify the following data as thread-local
common data.  The default is <code>&quot;.tls_common&quot;</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TLS_005fSECTION_005fASM_005fFLAG"></a>Macro: <strong>TLS_SECTION_ASM_FLAG</strong></dt>
<dd><p>If defined, a C expression whose value is a character constant
containing the flag used to mark a section as a TLS section.  The
default is <code>'T'</code>.
</p></dd></dl>

<dl>
<dt><a name="index-INIT_005fSECTION_005fASM_005fOP"></a>Macro: <strong>INIT_SECTION_ASM_OP</strong></dt>
<dd><p>If defined, a C expression whose value is a string, including spacing,
containing the assembler operation to identify the following data as
initialization code.  If not defined, GCC will assume such a section does
not exist.  This section has no corresponding <code>init_section</code>
variable; it is used entirely in runtime code.
</p></dd></dl>

<dl>
<dt><a name="index-FINI_005fSECTION_005fASM_005fOP"></a>Macro: <strong>FINI_SECTION_ASM_OP</strong></dt>
<dd><p>If defined, a C expression whose value is a string, including spacing,
containing the assembler operation to identify the following data as
finalization code.  If not defined, GCC will assume such a section does
not exist.  This section has no corresponding <code>fini_section</code>
variable; it is used entirely in runtime code.
</p></dd></dl>

<dl>
<dt><a name="index-INIT_005fARRAY_005fSECTION_005fASM_005fOP"></a>Macro: <strong>INIT_ARRAY_SECTION_ASM_OP</strong></dt>
<dd><p>If defined, a C expression whose value is a string, including spacing,
containing the assembler operation to identify the following data as
part of the <code>.init_array</code> (or equivalent) section.  If not
defined, GCC will assume such a section does not exist.  Do not define
both this macro and <code>INIT_SECTION_ASM_OP</code>.
</p></dd></dl>

<dl>
<dt><a name="index-FINI_005fARRAY_005fSECTION_005fASM_005fOP"></a>Macro: <strong>FINI_ARRAY_SECTION_ASM_OP</strong></dt>
<dd><p>If defined, a C expression whose value is a string, including spacing,
containing the assembler operation to identify the following data as
part of the <code>.fini_array</code> (or equivalent) section.  If not
defined, GCC will assume such a section does not exist.  Do not define
both this macro and <code>FINI_SECTION_ASM_OP</code>.
</p></dd></dl>

<dl>
<dt><a name="index-CRT_005fCALL_005fSTATIC_005fFUNCTION"></a>Macro: <strong>CRT_CALL_STATIC_FUNCTION</strong> <em>(<var>section_op</var>, <var>function</var>)</em></dt>
<dd><p>If defined, an ASM statement that switches to a different section
via <var>section_op</var>, calls <var>function</var>, and switches back to
the text section.  This is used in <samp>crtstuff.c</samp> if
<code>INIT_SECTION_ASM_OP</code> or <code>FINI_SECTION_ASM_OP</code> to calls
to initialization and finalization functions from the init and fini
sections.  By default, this macro uses a simple function call.  Some
ports need hand-crafted assembly code to avoid dependencies on
registers initialized in the function prologue or to ensure that
constant pools don&rsquo;t end up too far way in the text section.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLIBGCC_005fSDATA_005fSECTION"></a>Macro: <strong>TARGET_LIBGCC_SDATA_SECTION</strong></dt>
<dd><p>If defined, a string which names the section into which small
variables defined in crtstuff and libgcc should go.  This is useful
when the target has options for optimizing access to small data, and
you want the crtstuff and libgcc routines to be conservative in what
they expect of your application yet liberal in what your application
expects.  For example, for targets with a <code>.sdata</code> section (like
MIPS), you could compile crtstuff with <code>-G 0</code> so that it doesn&rsquo;t
require small data support from your application, but use this macro
to put small data into <code>.sdata</code> so that your application can
access these variables whether it uses small data or not.
</p></dd></dl>

<dl>
<dt><a name="index-FORCE_005fCODE_005fSECTION_005fALIGN"></a>Macro: <strong>FORCE_CODE_SECTION_ALIGN</strong></dt>
<dd><p>If defined, an ASM statement that aligns a code section to some
arbitrary boundary.  This is used to force all fragments of the
<code>.init</code> and <code>.fini</code> sections to have to same alignment
and thus prevent the linker from having to add any padding.
</p></dd></dl>

<dl>
<dt><a name="index-JUMP_005fTABLES_005fIN_005fTEXT_005fSECTION"></a>Macro: <strong>JUMP_TABLES_IN_TEXT_SECTION</strong></dt>
<dd><p>Define this macro to be an expression with a nonzero value if jump
tables (for <code>tablejump</code> insns) should be output in the text
section, along with the assembler instructions.  Otherwise, the
readonly data section is used.
</p>
<p>This macro is irrelevant if there is no separate readonly data section.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fINIT_005fSECTIONS"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_INIT_SECTIONS</strong> <em>(void)</em></dt>
<dd><p>Define this hook if you need to do something special to set up the
<samp>varasm.c</samp> sections, or if your target has some special sections
of its own that you need to create.
</p>
<p>GCC calls this hook after processing the command line, but before writing
any assembly code, and before calling any of the section-returning hooks
described below.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fRELOC_005fRW_005fMASK"></a>Target Hook: <em>int</em> <strong>TARGET_ASM_RELOC_RW_MASK</strong> <em>(void)</em></dt>
<dd><p>Return a mask describing how relocations should be treated when
selecting sections.  Bit 1 should be set if global relocations
should be placed in a read-write section; bit 0 should be set if
local relocations should be placed in a read-write section.
</p>
<p>The default version of this function returns 3 when <samp>-fpic</samp>
is in effect, and 0 otherwise.  The hook is typically redefined
when the target cannot support (some kinds of) dynamic relocations
in read-only sections even in executables.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fSELECT_005fSECTION"></a>Target Hook: <em>section *</em> <strong>TARGET_ASM_SELECT_SECTION</strong> <em>(tree <var>exp</var>, int <var>reloc</var>, unsigned HOST_WIDE_INT <var>align</var>)</em></dt>
<dd><p>Return the section into which <var>exp</var> should be placed.  You can
assume that <var>exp</var> is either a <code>VAR_DECL</code> node or a constant of
some sort.  <var>reloc</var> indicates whether the initial value of <var>exp</var>
requires link-time relocations.  Bit 0 is set when variable contains
local relocations only, while bit 1 is set for global relocations.
<var>align</var> is the constant alignment in bits.
</p>
<p>The default version of this function takes care of putting read-only
variables in <code>readonly_data_section</code>.
</p>
<p>See also <var>USE_SELECT_SECTION_FOR_FUNCTIONS</var>.
</p></dd></dl>

<dl>
<dt><a name="index-USE_005fSELECT_005fSECTION_005fFOR_005fFUNCTIONS"></a>Macro: <strong>USE_SELECT_SECTION_FOR_FUNCTIONS</strong></dt>
<dd><p>Define this macro if you wish TARGET_ASM_SELECT_SECTION to be called
for <code>FUNCTION_DECL</code>s as well as for variables and constants.
</p>
<p>In the case of a <code>FUNCTION_DECL</code>, <var>reloc</var> will be zero if the
function has been determined to be likely to be called, and nonzero if
it is unlikely to be called.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fUNIQUE_005fSECTION"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_UNIQUE_SECTION</strong> <em>(tree <var>decl</var>, int <var>reloc</var>)</em></dt>
<dd><p>Build up a unique section name, expressed as a <code>STRING_CST</code> node,
and assign it to &lsquo;<samp>DECL_SECTION_NAME (<var>decl</var>)</samp>&rsquo;.
As with <code>TARGET_ASM_SELECT_SECTION</code>, <var>reloc</var> indicates whether
the initial value of <var>exp</var> requires link-time relocations.
</p>
<p>The default version of this function appends the symbol name to the
ELF section name that would normally be used for the symbol.  For
example, the function <code>foo</code> would be placed in <code>.text.foo</code>.
Whatever the actual target object format, this is often good enough.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFUNCTION_005fRODATA_005fSECTION"></a>Target Hook: <em>section *</em> <strong>TARGET_ASM_FUNCTION_RODATA_SECTION</strong> <em>(tree <var>decl</var>)</em></dt>
<dd><p>Return the readonly data section associated with
&lsquo;<samp>DECL_SECTION_NAME (<var>decl</var>)</samp>&rsquo;.
The default version of this function selects <code>.gnu.linkonce.r.name</code> if
the function&rsquo;s section is <code>.gnu.linkonce.t.name</code>, <code>.rodata.name</code>
if function is in <code>.text.name</code>, and the normal readonly-data section
otherwise.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fMERGEABLE_005fRODATA_005fPREFIX"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_MERGEABLE_RODATA_PREFIX</strong></dt>
<dd><p>Usually, the compiler uses the prefix <code>&quot;.rodata&quot;</code> to construct
section names for mergeable constant data.  Define this macro to override
the string if a different section name should be used.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fTM_005fCLONE_005fTABLE_005fSECTION"></a>Target Hook: <em>section *</em> <strong>TARGET_ASM_TM_CLONE_TABLE_SECTION</strong> <em>(void)</em></dt>
<dd><p>Return the section that should be used for transactional memory clone  tables.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fSELECT_005fRTX_005fSECTION"></a>Target Hook: <em>section *</em> <strong>TARGET_ASM_SELECT_RTX_SECTION</strong> <em>(enum machine_mode <var>mode</var>, rtx <var>x</var>, unsigned HOST_WIDE_INT <var>align</var>)</em></dt>
<dd><p>Return the section into which a constant <var>x</var>, of mode <var>mode</var>,
should be placed.  You can assume that <var>x</var> is some kind of
constant in RTL.  The argument <var>mode</var> is redundant except in the
case of a <code>const_int</code> rtx.  <var>align</var> is the constant alignment
in bits.
</p>
<p>The default version of this function takes care of putting symbolic
constants in <code>flag_pic</code> mode in <code>data_section</code> and everything
else in <code>readonly_data_section</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMANGLE_005fDECL_005fASSEMBLER_005fNAME"></a>Target Hook: <em>tree</em> <strong>TARGET_MANGLE_DECL_ASSEMBLER_NAME</strong> <em>(tree <var>decl</var>, tree <var>id</var>)</em></dt>
<dd><p>Define this hook if you need to postprocess the assembler name generated
by target-independent code.  The <var>id</var> provided to this hook will be
the computed name (e.g., the macro <code>DECL_NAME</code> of the <var>decl</var> in C,
or the mangled name of the <var>decl</var> in C++).  The return value of the
hook is an <code>IDENTIFIER_NODE</code> for the appropriate mangled name on
your target system.  The default implementation of this hook just
returns the <var>id</var> provided.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fENCODE_005fSECTION_005fINFO"></a>Target Hook: <em>void</em> <strong>TARGET_ENCODE_SECTION_INFO</strong> <em>(tree <var>decl</var>, rtx <var>rtl</var>, int <var>new_decl_p</var>)</em></dt>
<dd><p>Define this hook if references to a symbol or a constant must be
treated differently depending on something about the variable or
function named by the symbol (such as what section it is in).
</p>
<p>The hook is executed immediately after rtl has been created for
<var>decl</var>, which may be a variable or function declaration or
an entry in the constant pool.  In either case, <var>rtl</var> is the
rtl in question.  Do <em>not</em> use <code>DECL_RTL (<var>decl</var>)</code>
in this hook; that field may not have been initialized yet.
</p>
<p>In the case of a constant, it is safe to assume that the rtl is
a <code>mem</code> whose address is a <code>symbol_ref</code>.  Most decls
will also have this form, but that is not guaranteed.  Global
register variables, for instance, will have a <code>reg</code> for their
rtl.  (Normally the right thing to do with such unusual rtl is
leave it alone.)
</p>
<p>The <var>new_decl_p</var> argument will be true if this is the first time
that <code>TARGET_ENCODE_SECTION_INFO</code> has been invoked on this decl.  It will
be false for subsequent invocations, which will happen for duplicate
declarations.  Whether or not anything must be done for the duplicate
declaration depends on whether the hook examines <code>DECL_ATTRIBUTES</code>.
<var>new_decl_p</var> is always true when the hook is called for a constant.
</p>
<a name="index-SYMBOL_005fREF_005fFLAG_002c-in-TARGET_005fENCODE_005fSECTION_005fINFO"></a>
<p>The usual thing for this hook to do is to record flags in the
<code>symbol_ref</code>, using <code>SYMBOL_REF_FLAG</code> or <code>SYMBOL_REF_FLAGS</code>.
Historically, the name string was modified if it was necessary to
encode more than one bit of information, but this practice is now
discouraged; use <code>SYMBOL_REF_FLAGS</code>.
</p>
<p>The default definition of this hook, <code>default_encode_section_info</code>
in <samp>varasm.c</samp>, sets a number of commonly-useful bits in
<code>SYMBOL_REF_FLAGS</code>.  Check whether the default does what you need
before overriding it.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSTRIP_005fNAME_005fENCODING"></a>Target Hook: <em>const char *</em> <strong>TARGET_STRIP_NAME_ENCODING</strong> <em>(const char *<var>name</var>)</em></dt>
<dd><p>Decode <var>name</var> and return the real name part, sans
the characters that <code>TARGET_ENCODE_SECTION_INFO</code>
may have added.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fIN_005fSMALL_005fDATA_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_IN_SMALL_DATA_P</strong> <em>(const_tree <var>exp</var>)</em></dt>
<dd><p>Returns true if <var>exp</var> should be placed into a &ldquo;small data&rdquo; section.
The default version of this hook always returns false.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fHAVE_005fSRODATA_005fSECTION"></a>Target Hook: <em>bool</em> <strong>TARGET_HAVE_SRODATA_SECTION</strong></dt>
<dd><p>Contains the value true if the target places read-only
&ldquo;small data&rdquo; into a separate section.  The default value is false.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPROFILE_005fBEFORE_005fPROLOGUE"></a>Target Hook: <em>bool</em> <strong>TARGET_PROFILE_BEFORE_PROLOGUE</strong> <em>(void)</em></dt>
<dd><p>It returns true if target wants profile code emitted before prologue.
</p>
<p>The default version of this hook use the target macro
<code>PROFILE_BEFORE_PROLOGUE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fBINDS_005fLOCAL_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_BINDS_LOCAL_P</strong> <em>(const_tree <var>exp</var>)</em></dt>
<dd><p>Returns true if <var>exp</var> names an object for which name resolution
rules must resolve to the current &ldquo;module&rdquo; (dynamic shared library
or executable image).
</p>
<p>The default version of this hook implements the name resolution rules
for ELF, which has a looser model of global name binding than other
currently supported object file formats.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fHAVE_005fTLS"></a>Target Hook: <em>bool</em> <strong>TARGET_HAVE_TLS</strong></dt>
<dd><p>Contains the value true if the target supports thread-local storage.
The default value is false.
</p></dd></dl>


<hr>
<a name="PIC"></a>
<div class="header">
<p>
Next: <a href="#Assembler-Format" accesskey="n" rel="next">Assembler Format</a>, Previous: <a href="#Sections" accesskey="p" rel="prev">Sections</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Position-Independent-Code"></a>
<h3 class="section">17.20 Position Independent Code</h3>
<a name="index-position-independent-code"></a>
<a name="index-PIC"></a>

<p>This section describes macros that help implement generation of position
independent code.  Simply defining these macros is not enough to
generate valid PIC; you must also add support to the hook
<code>TARGET_LEGITIMATE_ADDRESS_P</code> and to the macro
<code>PRINT_OPERAND_ADDRESS</code>, as well as <code>LEGITIMIZE_ADDRESS</code>.  You
must modify the definition of &lsquo;<samp>movsi</samp>&rsquo; to do something appropriate
when the source operand contains a symbolic address.  You may also
need to alter the handling of switch statements so that they use
relative addresses.
</p>
<dl>
<dt><a name="index-PIC_005fOFFSET_005fTABLE_005fREGNUM"></a>Macro: <strong>PIC_OFFSET_TABLE_REGNUM</strong></dt>
<dd><p>The register number of the register used to address a table of static
data addresses in memory.  In some cases this register is defined by a
processor&rsquo;s &ldquo;application binary interface&rdquo; (ABI).  When this macro
is defined, RTL is generated for this register once, as with the stack
pointer and frame pointer registers.  If this macro is not defined, it
is up to the machine-dependent files to allocate such a register (if
necessary).  Note that this register must be fixed when in use (e.g.
when <code>flag_pic</code> is true).
</p></dd></dl>

<dl>
<dt><a name="index-PIC_005fOFFSET_005fTABLE_005fREG_005fCALL_005fCLOBBERED"></a>Macro: <strong>PIC_OFFSET_TABLE_REG_CALL_CLOBBERED</strong></dt>
<dd><p>A C expression that is nonzero if the register defined by
<code>PIC_OFFSET_TABLE_REGNUM</code> is clobbered by calls.  If not defined,
the default is zero.  Do not define
this macro if <code>PIC_OFFSET_TABLE_REGNUM</code> is not defined.
</p></dd></dl>

<dl>
<dt><a name="index-LEGITIMATE_005fPIC_005fOPERAND_005fP"></a>Macro: <strong>LEGITIMATE_PIC_OPERAND_P</strong> <em>(<var>x</var>)</em></dt>
<dd><p>A C expression that is nonzero if <var>x</var> is a legitimate immediate
operand on the target machine when generating position independent code.
You can assume that <var>x</var> satisfies <code>CONSTANT_P</code>, so you need not
check this.  You can also assume <var>flag_pic</var> is true, so you need not
check it either.  You need not define this macro if all constants
(including <code>SYMBOL_REF</code>) can be immediate operands when generating
position independent code.
</p></dd></dl>

<hr>
<a name="Assembler-Format"></a>
<div class="header">
<p>
Next: <a href="#Debugging-Info" accesskey="n" rel="next">Debugging Info</a>, Previous: <a href="#PIC" accesskey="p" rel="prev">PIC</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-the-Output-Assembler-Language"></a>
<h3 class="section">17.21 Defining the Output Assembler Language</h3>

<p>This section describes macros whose principal purpose is to describe how
to write instructions in assembler language&mdash;rather than what the
instructions do.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#File-Framework" accesskey="1">File Framework</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Structural information for the assembler file.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Data-Output" accesskey="2">Data Output</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Output of constants (numbers, strings, addresses).
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Uninitialized-Data" accesskey="3">Uninitialized Data</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Output of uninitialized variables.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Label-Output" accesskey="4">Label Output</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Output and generation of labels.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Initialization" accesskey="5">Initialization</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">General principles of initialization
                         and termination routines.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Macros-for-Initialization" accesskey="6">Macros for Initialization</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
                         Specific macros that control the handling of
                         initialization and termination routines.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Instruction-Output" accesskey="7">Instruction Output</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Output of actual instructions.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Dispatch-Tables" accesskey="8">Dispatch Tables</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Output of jump tables.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Exception-Region-Output" accesskey="9">Exception Region Output</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Output of exception region code.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Alignment-Output">Alignment Output</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Pseudo ops for alignment and skipping data.
</td></tr>
</table>

<hr>
<a name="File-Framework"></a>
<div class="header">
<p>
Next: <a href="#Data-Output" accesskey="n" rel="next">Data Output</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-Overall-Framework-of-an-Assembler-File"></a>
<h4 class="subsection">17.21.1 The Overall Framework of an Assembler File</h4>
<a name="index-assembler-format"></a>
<a name="index-output-of-assembler-code"></a>

<p>This describes the overall framework of an assembly file.
</p>
<a name="index-default_005ffile_005fstart"></a>
<dl>
<dt><a name="index-TARGET_005fASM_005fFILE_005fSTART"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_FILE_START</strong> <em>(void)</em></dt>
<dd><p>Output to <code>asm_out_file</code> any text which the assembler expects to
find at the beginning of a file.  The default behavior is controlled
by two flags, documented below.  Unless your target&rsquo;s assembler is
quite unusual, if you override the default, you should call
<code>default_file_start</code> at some point in your target hook.  This
lets other target files rely on these variables.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFILE_005fSTART_005fAPP_005fOFF"></a>Target Hook: <em>bool</em> <strong>TARGET_ASM_FILE_START_APP_OFF</strong></dt>
<dd><p>If this flag is true, the text of the macro <code>ASM_APP_OFF</code> will be
printed as the very first line in the assembly file, unless
<samp>-fverbose-asm</samp> is in effect.  (If that macro has been defined
to the empty string, this variable has no effect.)  With the normal
definition of <code>ASM_APP_OFF</code>, the effect is to notify the GNU
assembler that it need not bother stripping comments or extra
whitespace from its input.  This allows it to work a bit faster.
</p>
<p>The default is false.  You should not set it to true unless you have
verified that your port does not generate any extra whitespace or
comments that will cause GAS to issue errors in NO_APP mode.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFILE_005fSTART_005fFILE_005fDIRECTIVE"></a>Target Hook: <em>bool</em> <strong>TARGET_ASM_FILE_START_FILE_DIRECTIVE</strong></dt>
<dd><p>If this flag is true, <code>output_file_directive</code> will be called
for the primary source file, immediately after printing
<code>ASM_APP_OFF</code> (if that is enabled).  Most ELF assemblers expect
this to be done.  The default is false.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFILE_005fEND"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_FILE_END</strong> <em>(void)</em></dt>
<dd><p>Output to <code>asm_out_file</code> any text which the assembler expects
to find at the end of a file.  The default is to output nothing.
</p></dd></dl>

<dl>
<dt><a name="index-file_005fend_005findicate_005fexec_005fstack"></a>Function: <em>void</em> <strong>file_end_indicate_exec_stack</strong> <em>()</em></dt>
<dd><p>Some systems use a common convention, the &lsquo;<samp>.note.GNU-stack</samp>&rsquo;
special section, to indicate whether or not an object file relies on
the stack being executable.  If your system uses this convention, you
should define <code>TARGET_ASM_FILE_END</code> to this function.  If you
need to do other things in that hook, have your hook function call
this function.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fLTO_005fSTART"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_LTO_START</strong> <em>(void)</em></dt>
<dd><p>Output to <code>asm_out_file</code> any text which the assembler expects
to find at the start of an LTO section.  The default is to output
nothing.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fLTO_005fEND"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_LTO_END</strong> <em>(void)</em></dt>
<dd><p>Output to <code>asm_out_file</code> any text which the assembler expects
to find at the end of an LTO section.  The default is to output
nothing.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fCODE_005fEND"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_CODE_END</strong> <em>(void)</em></dt>
<dd><p>Output to <code>asm_out_file</code> any text which is needed before emitting
unwind info and debug info at the end of a file.  Some targets emit
here PIC setup thunks that cannot be emitted at the end of file,
because they couldn&rsquo;t have unwind info then.  The default is to output
nothing.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fCOMMENT_005fSTART"></a>Macro: <strong>ASM_COMMENT_START</strong></dt>
<dd><p>A C string constant describing how to begin a comment in the target
assembler language.  The compiler assumes that the comment will end at
the end of the line.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fAPP_005fON"></a>Macro: <strong>ASM_APP_ON</strong></dt>
<dd><p>A C string constant for text to be output before each <code>asm</code>
statement or group of consecutive ones.  Normally this is
<code>&quot;#APP&quot;</code>, which is a comment that has no effect on most
assemblers but tells the GNU assembler that it must check the lines
that follow for all valid assembler constructs.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fAPP_005fOFF"></a>Macro: <strong>ASM_APP_OFF</strong></dt>
<dd><p>A C string constant for text to be output after each <code>asm</code>
statement or group of consecutive ones.  Normally this is
<code>&quot;#NO_APP&quot;</code>, which tells the GNU assembler to resume making the
time-saving assumptions that are valid for ordinary compiler output.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fSOURCE_005fFILENAME"></a>Macro: <strong>ASM_OUTPUT_SOURCE_FILENAME</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
<dd><p>A C statement to output COFF information or DWARF debugging information
which indicates that filename <var>name</var> is the current source file to
the stdio stream <var>stream</var>.
</p>
<p>This macro need not be defined if the standard form of output
for the file format in use is appropriate.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fOUTPUT_005fSOURCE_005fFILENAME"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_OUTPUT_SOURCE_FILENAME</strong> <em>(FILE *<var>file</var>, const char *<var>name</var>)</em></dt>
<dd><p>Output COFF information or DWARF debugging information which indicates that filename <var>name</var> is the current source file to the stdio stream <var>file</var>.
</p> 
<p>This target hook need not be defined if the standard form of output for the file format in use is appropriate.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fOUTPUT_005fIDENT"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_OUTPUT_IDENT</strong> <em>(const char *<var>name</var>)</em></dt>
<dd><p>Output a string based on <var>name</var>, suitable for the &lsquo;<samp>#ident</samp>&rsquo;  directive, or the equivalent directive or pragma in non-C-family languages.  If this hook is not defined, nothing is output for the &lsquo;<samp>#ident</samp>&rsquo;  directive.
</p></dd></dl>

<dl>
<dt><a name="index-OUTPUT_005fQUOTED_005fSTRING"></a>Macro: <strong>OUTPUT_QUOTED_STRING</strong> <em>(<var>stream</var>, <var>string</var>)</em></dt>
<dd><p>A C statement to output the string <var>string</var> to the stdio stream
<var>stream</var>.  If you do not call the function <code>output_quoted_string</code>
in your config files, GCC will only call it to output filenames to
the assembler source.  So you can use it to canonicalize the format
of the filename using this macro.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fNAMED_005fSECTION"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_NAMED_SECTION</strong> <em>(const char *<var>name</var>, unsigned int <var>flags</var>, tree <var>decl</var>)</em></dt>
<dd><p>Output assembly directives to switch to section <var>name</var>.  The section
should have attributes as specified by <var>flags</var>, which is a bit mask
of the <code>SECTION_*</code> flags defined in <samp>output.h</samp>.  If <var>decl</var>
is non-NULL, it is the <code>VAR_DECL</code> or <code>FUNCTION_DECL</code> with which
this section is associated.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFUNCTION_005fSECTION"></a>Target Hook: <em>section *</em> <strong>TARGET_ASM_FUNCTION_SECTION</strong> <em>(tree <var>decl</var>, enum node_frequency <var>freq</var>, bool <var>startup</var>, bool <var>exit</var>)</em></dt>
<dd><p>Return preferred text (sub)section for function <var>decl</var>.
Main purpose of this function is to separate cold, normal and hot
functions. <var>startup</var> is true when function is known to be used only
at startup (from static constructors or it is <code>main()</code>).
<var>exit</var> is true when function is known to be used only at exit
(from static destructors).
Return NULL if function should go to default text section.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFUNCTION_005fSWITCHED_005fTEXT_005fSECTIONS"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS</strong> <em>(FILE *<var>file</var>, tree <var>decl</var>, bool <var>new_is_cold</var>)</em></dt>
<dd><p>Used by the target to emit any assembler directives or additional  labels needed when a function is partitioned between different  sections.  Output should be written to <var>file</var>.  The function  decl is available as <var>decl</var> and the new section is &lsquo;cold&rsquo; if  <var>new_is_cold</var> is <code>true</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fHAVE_005fNAMED_005fSECTIONS"></a>Common Target Hook: <em>bool</em> <strong>TARGET_HAVE_NAMED_SECTIONS</strong></dt>
<dd><p>This flag is true if the target supports <code>TARGET_ASM_NAMED_SECTION</code>.
It must not be modified by command-line option processing.
</p></dd></dl>

<a name="TARGET_005fHAVE_005fSWITCHABLE_005fBSS_005fSECTIONS"></a><dl>
<dt><a name="index-TARGET_005fHAVE_005fSWITCHABLE_005fBSS_005fSECTIONS"></a>Target Hook: <em>bool</em> <strong>TARGET_HAVE_SWITCHABLE_BSS_SECTIONS</strong></dt>
<dd><p>This flag is true if we can create zeroed data by switching to a BSS
section and then using <code>ASM_OUTPUT_SKIP</code> to allocate the space.
This is true on most ELF targets.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSECTION_005fTYPE_005fFLAGS"></a>Target Hook: <em>unsigned int</em> <strong>TARGET_SECTION_TYPE_FLAGS</strong> <em>(tree <var>decl</var>, const char *<var>name</var>, int <var>reloc</var>)</em></dt>
<dd><p>Choose a set of section attributes for use by <code>TARGET_ASM_NAMED_SECTION</code>
based on a variable or function decl, a section name, and whether or not the
declaration&rsquo;s initializer may contain runtime relocations.  <var>decl</var> may be
null, in which case read-write data should be assumed.
</p>
<p>The default version of this function handles choosing code vs data,
read-only vs read-write data, and <code>flag_pic</code>.  You should only
need to override this if your target has special flags that might be
set via <code>__attribute__</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fRECORD_005fGCC_005fSWITCHES"></a>Target Hook: <em>int</em> <strong>TARGET_ASM_RECORD_GCC_SWITCHES</strong> <em>(print_switch_type <var>type</var>, const char *<var>text</var>)</em></dt>
<dd><p>Provides the target with the ability to record the gcc command line
switches that have been passed to the compiler, and options that are
enabled.  The <var>type</var> argument specifies what is being recorded.
It can take the following values:
</p>
<dl compact="compact">
<dt><code>SWITCH_TYPE_PASSED</code></dt>
<dd><p><var>text</var> is a command line switch that has been set by the user.
</p>
</dd>
<dt><code>SWITCH_TYPE_ENABLED</code></dt>
<dd><p><var>text</var> is an option which has been enabled.  This might be as a
direct result of a command line switch, or because it is enabled by
default or because it has been enabled as a side effect of a different
command line switch.  For example, the <samp>-O2</samp> switch enables
various different individual optimization passes.
</p>
</dd>
<dt><code>SWITCH_TYPE_DESCRIPTIVE</code></dt>
<dd><p><var>text</var> is either NULL or some descriptive text which should be
ignored.  If <var>text</var> is NULL then it is being used to warn the
target hook that either recording is starting or ending.  The first
time <var>type</var> is SWITCH_TYPE_DESCRIPTIVE and <var>text</var> is NULL, the
warning is for start up and the second time the warning is for
wind down.  This feature is to allow the target hook to make any
necessary preparations before it starts to record switches and to
perform any necessary tidying up after it has finished recording
switches.
</p>
</dd>
<dt><code>SWITCH_TYPE_LINE_START</code></dt>
<dd><p>This option can be ignored by this target hook.
</p>
</dd>
<dt><code>SWITCH_TYPE_LINE_END</code></dt>
<dd><p>This option can be ignored by this target hook.
</p></dd>
</dl>

<p>The hook&rsquo;s return value must be zero.  Other return values may be
supported in the future.
</p>
<p>By default this hook is set to NULL, but an example implementation is
provided for ELF based targets.  Called <var>elf_record_gcc_switches</var>,
it records the switches as ASCII text inside a new, string mergeable
section in the assembler output file.  The name of the new section is
provided by the <code>TARGET_ASM_RECORD_GCC_SWITCHES_SECTION</code> target
hook.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fRECORD_005fGCC_005fSWITCHES_005fSECTION"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_RECORD_GCC_SWITCHES_SECTION</strong></dt>
<dd><p>This is the name of the section that will be created by the example
ELF implementation of the <code>TARGET_ASM_RECORD_GCC_SWITCHES</code> target
hook.
</p></dd></dl>

<hr>
<a name="Data-Output"></a>
<div class="header">
<p>
Next: <a href="#Uninitialized-Data" accesskey="n" rel="next">Uninitialized Data</a>, Previous: <a href="#File-Framework" accesskey="p" rel="prev">File Framework</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Output-of-Data"></a>
<h4 class="subsection">17.21.2 Output of Data</h4>


<dl>
<dt><a name="index-TARGET_005fASM_005fBYTE_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_BYTE_OP</strong></dt>
<dt><a name="index-TARGET_005fASM_005fALIGNED_005fHI_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_ALIGNED_HI_OP</strong></dt>
<dt><a name="index-TARGET_005fASM_005fALIGNED_005fSI_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_ALIGNED_SI_OP</strong></dt>
<dt><a name="index-TARGET_005fASM_005fALIGNED_005fDI_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_ALIGNED_DI_OP</strong></dt>
<dt><a name="index-TARGET_005fASM_005fALIGNED_005fTI_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_ALIGNED_TI_OP</strong></dt>
<dt><a name="index-TARGET_005fASM_005fUNALIGNED_005fHI_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_UNALIGNED_HI_OP</strong></dt>
<dt><a name="index-TARGET_005fASM_005fUNALIGNED_005fSI_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_UNALIGNED_SI_OP</strong></dt>
<dt><a name="index-TARGET_005fASM_005fUNALIGNED_005fDI_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_UNALIGNED_DI_OP</strong></dt>
<dt><a name="index-TARGET_005fASM_005fUNALIGNED_005fTI_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_UNALIGNED_TI_OP</strong></dt>
<dd><p>These hooks specify assembly directives for creating certain kinds
of integer object.  The <code>TARGET_ASM_BYTE_OP</code> directive creates a
byte-sized object, the <code>TARGET_ASM_ALIGNED_HI_OP</code> one creates an
aligned two-byte object, and so on.  Any of the hooks may be
<code>NULL</code>, indicating that no suitable directive is available.
</p>
<p>The compiler will print these strings at the start of a new line,
followed immediately by the object&rsquo;s initial value.  In most cases,
the string should contain a tab, a pseudo-op, and then another tab.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fINTEGER"></a>Target Hook: <em>bool</em> <strong>TARGET_ASM_INTEGER</strong> <em>(rtx <var>x</var>, unsigned int <var>size</var>, int <var>aligned_p</var>)</em></dt>
<dd><p>The <code>assemble_integer</code> function uses this hook to output an
integer object.  <var>x</var> is the object&rsquo;s value, <var>size</var> is its size
in bytes and <var>aligned_p</var> indicates whether it is aligned.  The
function should return <code>true</code> if it was able to output the
object.  If it returns false, <code>assemble_integer</code> will try to
split the object into smaller parts.
</p>
<p>The default implementation of this hook will use the
<code>TARGET_ASM_BYTE_OP</code> family of strings, returning <code>false</code>
when the relevant string is <code>NULL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fOUTPUT_005fADDR_005fCONST_005fEXTRA"></a>Target Hook: <em>bool</em> <strong>TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA</strong> <em>(FILE *<var>file</var>, rtx <var>x</var>)</em></dt>
<dd><p>A target hook to recognize <var>rtx</var> patterns that <code>output_addr_const</code>
can&rsquo;t deal with, and output assembly code to <var>file</var> corresponding to
the pattern <var>x</var>.  This may be used to allow machine-dependent
<code>UNSPEC</code>s to appear within constants.
</p>
<p>If target hook fails to recognize a pattern, it must return <code>false</code>,
so that a standard error message is printed.  If it prints an error message
itself, by calling, for example, <code>output_operand_lossage</code>, it may just
return <code>true</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fASCII"></a>Macro: <strong>ASM_OUTPUT_ASCII</strong> <em>(<var>stream</var>, <var>ptr</var>, <var>len</var>)</em></dt>
<dd><p>A C statement to output to the stdio stream <var>stream</var> an assembler
instruction to assemble a string constant containing the <var>len</var>
bytes at <var>ptr</var>.  <var>ptr</var> will be a C expression of type
<code>char *</code> and <var>len</var> a C expression of type <code>int</code>.
</p>
<p>If the assembler has a <code>.ascii</code> pseudo-op as found in the
Berkeley Unix assembler, do not define the macro
<code>ASM_OUTPUT_ASCII</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fFDESC"></a>Macro: <strong>ASM_OUTPUT_FDESC</strong> <em>(<var>stream</var>, <var>decl</var>, <var>n</var>)</em></dt>
<dd><p>A C statement to output word <var>n</var> of a function descriptor for
<var>decl</var>.  This must be defined if <code>TARGET_VTABLE_USES_DESCRIPTORS</code>
is defined, and is otherwise unused.
</p></dd></dl>

<dl>
<dt><a name="index-CONSTANT_005fPOOL_005fBEFORE_005fFUNCTION"></a>Macro: <strong>CONSTANT_POOL_BEFORE_FUNCTION</strong></dt>
<dd><p>You may define this macro as a C expression.  You should define the
expression to have a nonzero value if GCC should output the constant
pool for a function before the code for the function, or a zero value if
GCC should output the constant pool after the function.  If you do
not define this macro, the usual case, GCC will output the constant
pool before the function.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fPOOL_005fPROLOGUE"></a>Macro: <strong>ASM_OUTPUT_POOL_PROLOGUE</strong> <em>(<var>file</var>, <var>funname</var>, <var>fundecl</var>, <var>size</var>)</em></dt>
<dd><p>A C statement to output assembler commands to define the start of the
constant pool for a function.  <var>funname</var> is a string giving
the name of the function.  Should the return type of the function
be required, it can be obtained via <var>fundecl</var>.  <var>size</var>
is the size, in bytes, of the constant pool that will be written
immediately after this call.
</p>
<p>If no constant-pool prefix is required, the usual case, this macro need
not be defined.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fSPECIAL_005fPOOL_005fENTRY"></a>Macro: <strong>ASM_OUTPUT_SPECIAL_POOL_ENTRY</strong> <em>(<var>file</var>, <var>x</var>, <var>mode</var>, <var>align</var>, <var>labelno</var>, <var>jumpto</var>)</em></dt>
<dd><p>A C statement (with or without semicolon) to output a constant in the
constant pool, if it needs special treatment.  (This macro need not do
anything for RTL expressions that can be output normally.)
</p>
<p>The argument <var>file</var> is the standard I/O stream to output the
assembler code on.  <var>x</var> is the RTL expression for the constant to
output, and <var>mode</var> is the machine mode (in case <var>x</var> is a
&lsquo;<samp>const_int</samp>&rsquo;).  <var>align</var> is the required alignment for the value
<var>x</var>; you should output an assembler directive to force this much
alignment.
</p>
<p>The argument <var>labelno</var> is a number to use in an internal label for
the address of this pool entry.  The definition of this macro is
responsible for outputting the label definition at the proper place.
Here is how to do this:
</p>
<div class="smallexample">
<pre class="smallexample"><code>(*targetm.asm_out.internal_label)</code> (<var>file</var>, &quot;LC&quot;, <var>labelno</var>);
</pre></div>

<p>When you output a pool entry specially, you should end with a
<code>goto</code> to the label <var>jumpto</var>.  This will prevent the same pool
entry from being output a second time in the usual manner.
</p>
<p>You need not define this macro if it would do nothing.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fPOOL_005fEPILOGUE"></a>Macro: <strong>ASM_OUTPUT_POOL_EPILOGUE</strong> <em>(<var>file</var> <var>funname</var> <var>fundecl</var> <var>size</var>)</em></dt>
<dd><p>A C statement to output assembler commands to at the end of the constant
pool for a function.  <var>funname</var> is a string giving the name of the
function.  Should the return type of the function be required, you can
obtain it via <var>fundecl</var>.  <var>size</var> is the size, in bytes, of the
constant pool that GCC wrote immediately before this call.
</p>
<p>If no constant-pool epilogue is required, the usual case, you need not
define this macro.
</p></dd></dl>

<dl>
<dt><a name="index-IS_005fASM_005fLOGICAL_005fLINE_005fSEPARATOR"></a>Macro: <strong>IS_ASM_LOGICAL_LINE_SEPARATOR</strong> <em>(<var>C</var>, <var>STR</var>)</em></dt>
<dd><p>Define this macro as a C expression which is nonzero if <var>C</var> is
used as a logical line separator by the assembler.  <var>STR</var> points
to the position in the string where <var>C</var> was found; this can be used if
a line separator uses multiple characters.
</p>
<p>If you do not define this macro, the default is that only
the character &lsquo;<samp>;</samp>&rsquo; is treated as a logical line separator.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fOPEN_005fPAREN"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_OPEN_PAREN</strong></dt>
<dt><a name="index-TARGET_005fASM_005fCLOSE_005fPAREN"></a>Target Hook: <em>const char *</em> <strong>TARGET_ASM_CLOSE_PAREN</strong></dt>
<dd><p>These target hooks are C string constants, describing the syntax in the
assembler for grouping arithmetic expressions.  If not overridden, they
default to normal parentheses, which is correct for most assemblers.
</p></dd></dl>

<p>These macros are provided by <samp>real.h</samp> for writing the definitions
of <code>ASM_OUTPUT_DOUBLE</code> and the like:
</p>
<dl>
<dt><a name="index-REAL_005fVALUE_005fTO_005fTARGET_005fSINGLE"></a>Macro: <strong>REAL_VALUE_TO_TARGET_SINGLE</strong> <em>(<var>x</var>, <var>l</var>)</em></dt>
<dt><a name="index-REAL_005fVALUE_005fTO_005fTARGET_005fDOUBLE"></a>Macro: <strong>REAL_VALUE_TO_TARGET_DOUBLE</strong> <em>(<var>x</var>, <var>l</var>)</em></dt>
<dt><a name="index-REAL_005fVALUE_005fTO_005fTARGET_005fLONG_005fDOUBLE"></a>Macro: <strong>REAL_VALUE_TO_TARGET_LONG_DOUBLE</strong> <em>(<var>x</var>, <var>l</var>)</em></dt>
<dt><a name="index-REAL_005fVALUE_005fTO_005fTARGET_005fDECIMAL32"></a>Macro: <strong>REAL_VALUE_TO_TARGET_DECIMAL32</strong> <em>(<var>x</var>, <var>l</var>)</em></dt>
<dt><a name="index-REAL_005fVALUE_005fTO_005fTARGET_005fDECIMAL64"></a>Macro: <strong>REAL_VALUE_TO_TARGET_DECIMAL64</strong> <em>(<var>x</var>, <var>l</var>)</em></dt>
<dt><a name="index-REAL_005fVALUE_005fTO_005fTARGET_005fDECIMAL128"></a>Macro: <strong>REAL_VALUE_TO_TARGET_DECIMAL128</strong> <em>(<var>x</var>, <var>l</var>)</em></dt>
<dd><p>These translate <var>x</var>, of type <code>REAL_VALUE_TYPE</code>, to the
target&rsquo;s floating point representation, and store its bit pattern in
the variable <var>l</var>.  For <code>REAL_VALUE_TO_TARGET_SINGLE</code> and
<code>REAL_VALUE_TO_TARGET_DECIMAL32</code>, this variable should be a
simple <code>long int</code>.  For the others, it should be an array of
<code>long int</code>.  The number of elements in this array is determined
by the size of the desired target floating point data type: 32 bits of
it go in each <code>long int</code> array element.  Each array element holds
32 bits of the result, even if <code>long int</code> is wider than 32 bits
on the host machine.
</p>
<p>The array element values are designed so that you can print them out
using <code>fprintf</code> in the order they should appear in the target
machine&rsquo;s memory.
</p></dd></dl>

<hr>
<a name="Uninitialized-Data"></a>
<div class="header">
<p>
Next: <a href="#Label-Output" accesskey="n" rel="next">Label Output</a>, Previous: <a href="#Data-Output" accesskey="p" rel="prev">Data Output</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Output-of-Uninitialized-Variables"></a>
<h4 class="subsection">17.21.3 Output of Uninitialized Variables</h4>

<p>Each of the macros in this section is used to do the whole job of
outputting a single uninitialized variable.
</p>
<dl>
<dt><a name="index-ASM_005fOUTPUT_005fCOMMON"></a>Macro: <strong>ASM_OUTPUT_COMMON</strong> <em>(<var>stream</var>, <var>name</var>, <var>size</var>, <var>rounded</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> the assembler definition of a common-label named
<var>name</var> whose size is <var>size</var> bytes.  The variable <var>rounded</var>
is the size rounded up to whatever alignment the caller wants.  It is
possible that <var>size</var> may be zero, for instance if a struct with no
other member than a zero-length array is defined.  In this case, the
backend must output a symbol definition that allocates at least one
byte, both so that the address of the resulting object does not compare
equal to any other, and because some object formats cannot even express
the concept of a zero-sized common symbol, as that is how they represent
an ordinary undefined external.
</p>
<p>Use the expression <code>assemble_name (<var>stream</var>, <var>name</var>)</code> to
output the name itself; before and after that, output the additional
assembler syntax for defining the name, and a newline.
</p>
<p>This macro controls how the assembler definitions of uninitialized
common global variables are output.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fALIGNED_005fCOMMON"></a>Macro: <strong>ASM_OUTPUT_ALIGNED_COMMON</strong> <em>(<var>stream</var>, <var>name</var>, <var>size</var>, <var>alignment</var>)</em></dt>
<dd><p>Like <code>ASM_OUTPUT_COMMON</code> except takes the required alignment as a
separate, explicit argument.  If you define this macro, it is used in
place of <code>ASM_OUTPUT_COMMON</code>, and gives you more flexibility in
handling the required alignment of the variable.  The alignment is specified
as the number of bits.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fALIGNED_005fDECL_005fCOMMON"></a>Macro: <strong>ASM_OUTPUT_ALIGNED_DECL_COMMON</strong> <em>(<var>stream</var>, <var>decl</var>, <var>name</var>, <var>size</var>, <var>alignment</var>)</em></dt>
<dd><p>Like <code>ASM_OUTPUT_ALIGNED_COMMON</code> except that <var>decl</var> of the
variable to be output, if there is one, or <code>NULL_TREE</code> if there
is no corresponding variable.  If you define this macro, GCC will use it
in place of both <code>ASM_OUTPUT_COMMON</code> and
<code>ASM_OUTPUT_ALIGNED_COMMON</code>.  Define this macro when you need to see
the variable&rsquo;s decl in order to chose what to output.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fALIGNED_005fBSS"></a>Macro: <strong>ASM_OUTPUT_ALIGNED_BSS</strong> <em>(<var>stream</var>, <var>decl</var>, <var>name</var>, <var>size</var>, <var>alignment</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> the assembler definition of uninitialized global <var>decl</var> named
<var>name</var> whose size is <var>size</var> bytes.  The variable <var>alignment</var>
is the alignment specified as the number of bits.
</p>
<p>Try to use function <code>asm_output_aligned_bss</code> defined in file
<samp>varasm.c</samp> when defining this macro.  If unable, use the expression
<code>assemble_name (<var>stream</var>, <var>name</var>)</code> to output the name itself;
before and after that, output the additional assembler syntax for defining
the name, and a newline.
</p>
<p>There are two ways of handling global BSS.  One is to define this macro.
The other is to have <code>TARGET_ASM_SELECT_SECTION</code> return a
switchable BSS section (see <a href="#TARGET_005fHAVE_005fSWITCHABLE_005fBSS_005fSECTIONS">TARGET_HAVE_SWITCHABLE_BSS_SECTIONS</a>).
You do not need to do both.
</p>
<p>Some languages do not have <code>common</code> data, and require a
non-common form of global BSS in order to handle uninitialized globals
efficiently.  C++ is one example of this.  However, if the target does
not support global BSS, the front end may choose to make globals
common in order to save space in the object file.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fLOCAL"></a>Macro: <strong>ASM_OUTPUT_LOCAL</strong> <em>(<var>stream</var>, <var>name</var>, <var>size</var>, <var>rounded</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> the assembler definition of a local-common-label named
<var>name</var> whose size is <var>size</var> bytes.  The variable <var>rounded</var>
is the size rounded up to whatever alignment the caller wants.
</p>
<p>Use the expression <code>assemble_name (<var>stream</var>, <var>name</var>)</code> to
output the name itself; before and after that, output the additional
assembler syntax for defining the name, and a newline.
</p>
<p>This macro controls how the assembler definitions of uninitialized
static variables are output.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fALIGNED_005fLOCAL"></a>Macro: <strong>ASM_OUTPUT_ALIGNED_LOCAL</strong> <em>(<var>stream</var>, <var>name</var>, <var>size</var>, <var>alignment</var>)</em></dt>
<dd><p>Like <code>ASM_OUTPUT_LOCAL</code> except takes the required alignment as a
separate, explicit argument.  If you define this macro, it is used in
place of <code>ASM_OUTPUT_LOCAL</code>, and gives you more flexibility in
handling the required alignment of the variable.  The alignment is specified
as the number of bits.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fALIGNED_005fDECL_005fLOCAL"></a>Macro: <strong>ASM_OUTPUT_ALIGNED_DECL_LOCAL</strong> <em>(<var>stream</var>, <var>decl</var>, <var>name</var>, <var>size</var>, <var>alignment</var>)</em></dt>
<dd><p>Like <code>ASM_OUTPUT_ALIGNED_DECL</code> except that <var>decl</var> of the
variable to be output, if there is one, or <code>NULL_TREE</code> if there
is no corresponding variable.  If you define this macro, GCC will use it
in place of both <code>ASM_OUTPUT_DECL</code> and
<code>ASM_OUTPUT_ALIGNED_DECL</code>.  Define this macro when you need to see
the variable&rsquo;s decl in order to chose what to output.
</p></dd></dl>

<hr>
<a name="Label-Output"></a>
<div class="header">
<p>
Next: <a href="#Initialization" accesskey="n" rel="next">Initialization</a>, Previous: <a href="#Uninitialized-Data" accesskey="p" rel="prev">Uninitialized Data</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Output-and-Generation-of-Labels"></a>
<h4 class="subsection">17.21.4 Output and Generation of Labels</h4>

<p>This is about outputting labels.
</p>
<a name="index-assemble_005fname"></a>
<dl>
<dt><a name="index-ASM_005fOUTPUT_005fLABEL"></a>Macro: <strong>ASM_OUTPUT_LABEL</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> the assembler definition of a label named <var>name</var>.
Use the expression <code>assemble_name (<var>stream</var>, <var>name</var>)</code> to
output the name itself; before and after that, output the additional
assembler syntax for defining the name, and a newline.  A default
definition of this macro is provided which is correct for most systems.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fFUNCTION_005fLABEL"></a>Macro: <strong>ASM_OUTPUT_FUNCTION_LABEL</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> the assembler definition of a label named <var>name</var> of
a function.
Use the expression <code>assemble_name (<var>stream</var>, <var>name</var>)</code> to
output the name itself; before and after that, output the additional
assembler syntax for defining the name, and a newline.  A default
definition of this macro is provided which is correct for most systems.
</p>
<p>If this macro is not defined, then the function name is defined in the
usual manner as a label (by means of <code>ASM_OUTPUT_LABEL</code>).
</p></dd></dl>

<a name="index-assemble_005fname_005fraw"></a>
<dl>
<dt><a name="index-ASM_005fOUTPUT_005fINTERNAL_005fLABEL"></a>Macro: <strong>ASM_OUTPUT_INTERNAL_LABEL</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
<dd><p>Identical to <code>ASM_OUTPUT_LABEL</code>, except that <var>name</var> is known
to refer to a compiler-generated label.  The default definition uses
<code>assemble_name_raw</code>, which is like <code>assemble_name</code> except
that it is more efficient.
</p></dd></dl>

<dl>
<dt><a name="index-SIZE_005fASM_005fOP"></a>Macro: <strong>SIZE_ASM_OP</strong></dt>
<dd><p>A C string containing the appropriate assembler directive to specify the
size of a symbol, without any arguments.  On systems that use ELF, the
default (in <samp>config/elfos.h</samp>) is &lsquo;<samp>&quot;\t.size\t&quot;</samp>&rsquo;; on other
systems, the default is not to define this macro.
</p>
<p>Define this macro only if it is correct to use the default definitions
of <code>ASM_OUTPUT_SIZE_DIRECTIVE</code> and <code>ASM_OUTPUT_MEASURED_SIZE</code>
for your system.  If you need your own custom definitions of those
macros, or if you do not need explicit symbol sizes at all, do not
define this macro.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fSIZE_005fDIRECTIVE"></a>Macro: <strong>ASM_OUTPUT_SIZE_DIRECTIVE</strong> <em>(<var>stream</var>, <var>name</var>, <var>size</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> a directive telling the assembler that the size of the
symbol <var>name</var> is <var>size</var>.  <var>size</var> is a <code>HOST_WIDE_INT</code>.
If you define <code>SIZE_ASM_OP</code>, a default definition of this macro is
provided.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fMEASURED_005fSIZE"></a>Macro: <strong>ASM_OUTPUT_MEASURED_SIZE</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> a directive telling the assembler to calculate the size of
the symbol <var>name</var> by subtracting its address from the current
address.
</p>
<p>If you define <code>SIZE_ASM_OP</code>, a default definition of this macro is
provided.  The default assumes that the assembler recognizes a special
&lsquo;<samp>.</samp>&rsquo; symbol as referring to the current address, and can calculate
the difference between this and another symbol.  If your assembler does
not recognize &lsquo;<samp>.</samp>&rsquo; or cannot do calculations with it, you will need
to redefine <code>ASM_OUTPUT_MEASURED_SIZE</code> to use some other technique.
</p></dd></dl>

<dl>
<dt><a name="index-NO_005fDOLLAR_005fIN_005fLABEL"></a>Macro: <strong>NO_DOLLAR_IN_LABEL</strong></dt>
<dd><p>Define this macro if the assembler does not accept the character
&lsquo;<samp>$</samp>&rsquo; in label names.  By default constructors and destructors in
G++ have &lsquo;<samp>$</samp>&rsquo; in the identifiers.  If this macro is defined,
&lsquo;<samp>.</samp>&rsquo; is used instead.
</p></dd></dl>

<dl>
<dt><a name="index-NO_005fDOT_005fIN_005fLABEL"></a>Macro: <strong>NO_DOT_IN_LABEL</strong></dt>
<dd><p>Define this macro if the assembler does not accept the character
&lsquo;<samp>.</samp>&rsquo; in label names.  By default constructors and destructors in G++
have names that use &lsquo;<samp>.</samp>&rsquo;.  If this macro is defined, these names
are rewritten to avoid &lsquo;<samp>.</samp>&rsquo;.
</p></dd></dl>

<dl>
<dt><a name="index-TYPE_005fASM_005fOP"></a>Macro: <strong>TYPE_ASM_OP</strong></dt>
<dd><p>A C string containing the appropriate assembler directive to specify the
type of a symbol, without any arguments.  On systems that use ELF, the
default (in <samp>config/elfos.h</samp>) is &lsquo;<samp>&quot;\t.type\t&quot;</samp>&rsquo;; on other
systems, the default is not to define this macro.
</p>
<p>Define this macro only if it is correct to use the default definition of
<code>ASM_OUTPUT_TYPE_DIRECTIVE</code> for your system.  If you need your own
custom definition of this macro, or if you do not need explicit symbol
types at all, do not define this macro.
</p></dd></dl>

<dl>
<dt><a name="index-TYPE_005fOPERAND_005fFMT"></a>Macro: <strong>TYPE_OPERAND_FMT</strong></dt>
<dd><p>A C string which specifies (using <code>printf</code> syntax) the format of
the second operand to <code>TYPE_ASM_OP</code>.  On systems that use ELF, the
default (in <samp>config/elfos.h</samp>) is &lsquo;<samp>&quot;@%s&quot;</samp>&rsquo;; on other systems,
the default is not to define this macro.
</p>
<p>Define this macro only if it is correct to use the default definition of
<code>ASM_OUTPUT_TYPE_DIRECTIVE</code> for your system.  If you need your own
custom definition of this macro, or if you do not need explicit symbol
types at all, do not define this macro.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fTYPE_005fDIRECTIVE"></a>Macro: <strong>ASM_OUTPUT_TYPE_DIRECTIVE</strong> <em>(<var>stream</var>, <var>type</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> a directive telling the assembler that the type of the
symbol <var>name</var> is <var>type</var>.  <var>type</var> is a C string; currently,
that string is always either &lsquo;<samp>&quot;function&quot;</samp>&rsquo; or &lsquo;<samp>&quot;object&quot;</samp>&rsquo;, but
you should not count on this.
</p>
<p>If you define <code>TYPE_ASM_OP</code> and <code>TYPE_OPERAND_FMT</code>, a default
definition of this macro is provided.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fDECLARE_005fFUNCTION_005fNAME"></a>Macro: <strong>ASM_DECLARE_FUNCTION_NAME</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> any text necessary for declaring the name <var>name</var> of a
function which is being defined.  This macro is responsible for
outputting the label definition (perhaps using
<code>ASM_OUTPUT_FUNCTION_LABEL</code>).  The argument <var>decl</var> is the
<code>FUNCTION_DECL</code> tree node representing the function.
</p>
<p>If this macro is not defined, then the function name is defined in the
usual manner as a label (by means of <code>ASM_OUTPUT_FUNCTION_LABEL</code>).
</p>
<p>You may wish to use <code>ASM_OUTPUT_TYPE_DIRECTIVE</code> in the definition
of this macro.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fDECLARE_005fFUNCTION_005fSIZE"></a>Macro: <strong>ASM_DECLARE_FUNCTION_SIZE</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> any text necessary for declaring the size of a function
which is being defined.  The argument <var>name</var> is the name of the
function.  The argument <var>decl</var> is the <code>FUNCTION_DECL</code> tree node
representing the function.
</p>
<p>If this macro is not defined, then the function size is not defined.
</p>
<p>You may wish to use <code>ASM_OUTPUT_MEASURED_SIZE</code> in the definition
of this macro.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fDECLARE_005fOBJECT_005fNAME"></a>Macro: <strong>ASM_DECLARE_OBJECT_NAME</strong> <em>(<var>stream</var>, <var>name</var>, <var>decl</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> any text necessary for declaring the name <var>name</var> of an
initialized variable which is being defined.  This macro must output the
label definition (perhaps using <code>ASM_OUTPUT_LABEL</code>).  The argument
<var>decl</var> is the <code>VAR_DECL</code> tree node representing the variable.
</p>
<p>If this macro is not defined, then the variable name is defined in the
usual manner as a label (by means of <code>ASM_OUTPUT_LABEL</code>).
</p>
<p>You may wish to use <code>ASM_OUTPUT_TYPE_DIRECTIVE</code> and/or
<code>ASM_OUTPUT_SIZE_DIRECTIVE</code> in the definition of this macro.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fDECLARE_005fCONSTANT_005fNAME"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_DECLARE_CONSTANT_NAME</strong> <em>(FILE *<var>file</var>, const char *<var>name</var>, const_tree <var>expr</var>, HOST_WIDE_INT <var>size</var>)</em></dt>
<dd><p>A target hook to output to the stdio stream <var>file</var> any text necessary
for declaring the name <var>name</var> of a constant which is being defined.  This
target hook is responsible for outputting the label definition (perhaps using
<code>assemble_label</code>).  The argument <var>exp</var> is the value of the constant,
and <var>size</var> is the size of the constant in bytes.  The <var>name</var>
will be an internal label.
</p>
<p>The default version of this target hook, define the <var>name</var> in the
usual manner as a label (by means of <code>assemble_label</code>).
</p>
<p>You may wish to use <code>ASM_OUTPUT_TYPE_DIRECTIVE</code> in this target hook.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fDECLARE_005fREGISTER_005fGLOBAL"></a>Macro: <strong>ASM_DECLARE_REGISTER_GLOBAL</strong> <em>(<var>stream</var>, <var>decl</var>, <var>regno</var>, <var>name</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> any text necessary for claiming a register <var>regno</var>
for a global variable <var>decl</var> with name <var>name</var>.
</p>
<p>If you don&rsquo;t define this macro, that is equivalent to defining it to do
nothing.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fFINISH_005fDECLARE_005fOBJECT"></a>Macro: <strong>ASM_FINISH_DECLARE_OBJECT</strong> <em>(<var>stream</var>, <var>decl</var>, <var>toplevel</var>, <var>atend</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to finish up declaring a variable name
once the compiler has processed its initializer fully and thus has had a
chance to determine the size of an array when controlled by an
initializer.  This is used on systems where it&rsquo;s necessary to declare
something about the size of the object.
</p>
<p>If you don&rsquo;t define this macro, that is equivalent to defining it to do
nothing.
</p>
<p>You may wish to use <code>ASM_OUTPUT_SIZE_DIRECTIVE</code> and/or
<code>ASM_OUTPUT_MEASURED_SIZE</code> in the definition of this macro.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fGLOBALIZE_005fLABEL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_GLOBALIZE_LABEL</strong> <em>(FILE *<var>stream</var>, const char *<var>name</var>)</em></dt>
<dd><p>This target hook is a function to output to the stdio stream
<var>stream</var> some commands that will make the label <var>name</var> global;
that is, available for reference from other files.
</p>
<p>The default implementation relies on a proper definition of
<code>GLOBAL_ASM_OP</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fGLOBALIZE_005fDECL_005fNAME"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_GLOBALIZE_DECL_NAME</strong> <em>(FILE *<var>stream</var>, tree <var>decl</var>)</em></dt>
<dd><p>This target hook is a function to output to the stdio stream
<var>stream</var> some commands that will make the name associated with <var>decl</var>
global; that is, available for reference from other files.
</p>
<p>The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL target hook.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fWEAKEN_005fLABEL"></a>Macro: <strong>ASM_WEAKEN_LABEL</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> some commands that will make the label <var>name</var> weak;
that is, available for reference from other files but only used if
no other definition is available.  Use the expression
<code>assemble_name (<var>stream</var>, <var>name</var>)</code> to output the name
itself; before and after that, output the additional assembler syntax
for making that name weak, and a newline.
</p>
<p>If you don&rsquo;t define this macro or <code>ASM_WEAKEN_DECL</code>, GCC will not
support weak symbols and you should not define the <code>SUPPORTS_WEAK</code>
macro.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fWEAKEN_005fDECL"></a>Macro: <strong>ASM_WEAKEN_DECL</strong> <em>(<var>stream</var>, <var>decl</var>, <var>name</var>, <var>value</var>)</em></dt>
<dd><p>Combines (and replaces) the function of <code>ASM_WEAKEN_LABEL</code> and
<code>ASM_OUTPUT_WEAK_ALIAS</code>, allowing access to the associated function
or variable decl.  If <var>value</var> is not <code>NULL</code>, this C statement
should output to the stdio stream <var>stream</var> assembler code which
defines (equates) the weak symbol <var>name</var> to have the value
<var>value</var>.  If <var>value</var> is <code>NULL</code>, it should output commands
to make <var>name</var> weak.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fWEAKREF"></a>Macro: <strong>ASM_OUTPUT_WEAKREF</strong> <em>(<var>stream</var>, <var>decl</var>, <var>name</var>, <var>value</var>)</em></dt>
<dd><p>Outputs a directive that enables <var>name</var> to be used to refer to
symbol <var>value</var> with weak-symbol semantics.  <code>decl</code> is the
declaration of <code>name</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SUPPORTS_005fWEAK"></a>Macro: <strong>SUPPORTS_WEAK</strong></dt>
<dd><p>A preprocessor constant expression which evaluates to true if the target
supports weak symbols.
</p>
<p>If you don&rsquo;t define this macro, <samp>defaults.h</samp> provides a default
definition.  If either <code>ASM_WEAKEN_LABEL</code> or <code>ASM_WEAKEN_DECL</code>
is defined, the default definition is &lsquo;<samp>1</samp>&rsquo;; otherwise, it is &lsquo;<samp>0</samp>&rsquo;.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSUPPORTS_005fWEAK"></a>Macro: <strong>TARGET_SUPPORTS_WEAK</strong></dt>
<dd><p>A C expression which evaluates to true if the target supports weak symbols.
</p>
<p>If you don&rsquo;t define this macro, <samp>defaults.h</samp> provides a default
definition.  The default definition is &lsquo;<samp>(SUPPORTS_WEAK)</samp>&rsquo;.  Define
this macro if you want to control weak symbol support with a compiler
flag such as <samp>-melf</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-MAKE_005fDECL_005fONE_005fONLY"></a>Macro: <strong>MAKE_DECL_ONE_ONLY</strong> <em>(<var>decl</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to mark <var>decl</var> to be emitted as a
public symbol such that extra copies in multiple translation units will
be discarded by the linker.  Define this macro if your object file
format provides support for this concept, such as the &lsquo;<samp>COMDAT</samp>&rsquo;
section flags in the Microsoft Windows PE/COFF format, and this support
requires changes to <var>decl</var>, such as putting it in a separate section.
</p></dd></dl>

<dl>
<dt><a name="index-SUPPORTS_005fONE_005fONLY"></a>Macro: <strong>SUPPORTS_ONE_ONLY</strong></dt>
<dd><p>A C expression which evaluates to true if the target supports one-only
semantics.
</p>
<p>If you don&rsquo;t define this macro, <samp>varasm.c</samp> provides a default
definition.  If <code>MAKE_DECL_ONE_ONLY</code> is defined, the default
definition is &lsquo;<samp>1</samp>&rsquo;; otherwise, it is &lsquo;<samp>0</samp>&rsquo;.  Define this macro if
you want to control one-only symbol support with a compiler flag, or if
setting the <code>DECL_ONE_ONLY</code> flag is enough to mark a declaration to
be emitted as one-only.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fASSEMBLE_005fVISIBILITY"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_ASSEMBLE_VISIBILITY</strong> <em>(tree <var>decl</var>, int <var>visibility</var>)</em></dt>
<dd><p>This target hook is a function to output to <var>asm_out_file</var> some
commands that will make the symbol(s) associated with <var>decl</var> have
hidden, protected or internal visibility as specified by <var>visibility</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fWEAK_005fNOT_005fIN_005fARCHIVE_005fTOC"></a>Macro: <strong>TARGET_WEAK_NOT_IN_ARCHIVE_TOC</strong></dt>
<dd><p>A C expression that evaluates to true if the target&rsquo;s linker expects
that weak symbols do not appear in a static archive&rsquo;s table of contents.
The default is <code>0</code>.
</p>
<p>Leaving weak symbols out of an archive&rsquo;s table of contents means that,
if a symbol will only have a definition in one translation unit and
will have undefined references from other translation units, that
symbol should not be weak.  Defining this macro to be nonzero will
thus have the effect that certain symbols that would normally be weak
(explicit template instantiations, and vtables for polymorphic classes
with noninline key methods) will instead be nonweak.
</p>
<p>The C++ ABI requires this macro to be zero.  Define this macro for
targets where full C++ ABI compliance is impossible and where linker
restrictions require weak symbols to be left out of a static archive&rsquo;s
table of contents.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fEXTERNAL"></a>Macro: <strong>ASM_OUTPUT_EXTERNAL</strong> <em>(<var>stream</var>, <var>decl</var>, <var>name</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> any text necessary for declaring the name of an external
symbol named <var>name</var> which is referenced in this compilation but
not defined.  The value of <var>decl</var> is the tree node for the
declaration.
</p>
<p>This macro need not be defined if it does not need to output anything.
The GNU assembler and most Unix assemblers don&rsquo;t require anything.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fEXTERNAL_005fLIBCALL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_EXTERNAL_LIBCALL</strong> <em>(rtx <var>symref</var>)</em></dt>
<dd><p>This target hook is a function to output to <var>asm_out_file</var> an assembler
pseudo-op to declare a library function name external.  The name of the
library function is given by <var>symref</var>, which is a <code>symbol_ref</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fMARK_005fDECL_005fPRESERVED"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_MARK_DECL_PRESERVED</strong> <em>(const char *<var>symbol</var>)</em></dt>
<dd><p>This target hook is a function to output to <var>asm_out_file</var> an assembler
directive to annotate <var>symbol</var> as used.  The Darwin target uses the
.no_dead_code_strip directive.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fLABELREF"></a>Macro: <strong>ASM_OUTPUT_LABELREF</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output to the stdio stream
<var>stream</var> a reference in assembler syntax to a label named
<var>name</var>.  This should add &lsquo;<samp>_</samp>&rsquo; to the front of the name, if that
is customary on your operating system, as it is in most Berkeley Unix
systems.  This macro is used in <code>assemble_name</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMANGLE_005fASSEMBLER_005fNAME"></a>Target Hook: <em>tree</em> <strong>TARGET_MANGLE_ASSEMBLER_NAME</strong> <em>(const char *<var>name</var>)</em></dt>
<dd><p>Given a symbol <var>name</var>, perform same mangling as <code>varasm.c</code>&rsquo;s <code>assemble_name</code>, but in memory rather than to a file stream, returning result as an <code>IDENTIFIER_NODE</code>.  Required for correct LTO symtabs.  The default implementation calls the <code>TARGET_STRIP_NAME_ENCODING</code> hook and then prepends the <code>USER_LABEL_PREFIX</code>, if any.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fSYMBOL_005fREF"></a>Macro: <strong>ASM_OUTPUT_SYMBOL_REF</strong> <em>(<var>stream</var>, <var>sym</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output a reference to
<code>SYMBOL_REF</code> <var>sym</var>.  If not defined, <code>assemble_name</code>
will be used to output the name of the symbol.  This macro may be used
to modify the way a symbol is referenced depending on information
encoded by <code>TARGET_ENCODE_SECTION_INFO</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fLABEL_005fREF"></a>Macro: <strong>ASM_OUTPUT_LABEL_REF</strong> <em>(<var>stream</var>, <var>buf</var>)</em></dt>
<dd><p>A C statement (sans semicolon) to output a reference to <var>buf</var>, the
result of <code>ASM_GENERATE_INTERNAL_LABEL</code>.  If not defined,
<code>assemble_name</code> will be used to output the name of the symbol.
This macro is not used by <code>output_asm_label</code>, or the <code>%l</code>
specifier that calls it; the intention is that this macro should be set
when it is necessary to output a label differently when its address is
being taken.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fINTERNAL_005fLABEL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_INTERNAL_LABEL</strong> <em>(FILE *<var>stream</var>, const char *<var>prefix</var>, unsigned long <var>labelno</var>)</em></dt>
<dd><p>A function to output to the stdio stream <var>stream</var> a label whose
name is made from the string <var>prefix</var> and the number <var>labelno</var>.
</p>
<p>It is absolutely essential that these labels be distinct from the labels
used for user-level functions and variables.  Otherwise, certain programs
will have name conflicts with internal labels.
</p>
<p>It is desirable to exclude internal labels from the symbol table of the
object file.  Most assemblers have a naming convention for labels that
should be excluded; on many systems, the letter &lsquo;<samp>L</samp>&rsquo; at the
beginning of a label has this effect.  You should find out what
convention your system uses, and follow it.
</p>
<p>The default version of this function utilizes <code>ASM_GENERATE_INTERNAL_LABEL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fDEBUG_005fLABEL"></a>Macro: <strong>ASM_OUTPUT_DEBUG_LABEL</strong> <em>(<var>stream</var>, <var>prefix</var>, <var>num</var>)</em></dt>
<dd><p>A C statement to output to the stdio stream <var>stream</var> a debug info
label whose name is made from the string <var>prefix</var> and the number
<var>num</var>.  This is useful for VLIW targets, where debug info labels
may need to be treated differently than branch target labels.  On some
systems, branch target labels must be at the beginning of instruction
bundles, but debug info labels can occur in the middle of instruction
bundles.
</p>
<p>If this macro is not defined, then <code>(*targetm.asm_out.internal_label)</code> will be
used.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fGENERATE_005fINTERNAL_005fLABEL"></a>Macro: <strong>ASM_GENERATE_INTERNAL_LABEL</strong> <em>(<var>string</var>, <var>prefix</var>, <var>num</var>)</em></dt>
<dd><p>A C statement to store into the string <var>string</var> a label whose name
is made from the string <var>prefix</var> and the number <var>num</var>.
</p>
<p>This string, when output subsequently by <code>assemble_name</code>, should
produce the output that <code>(*targetm.asm_out.internal_label)</code> would produce
with the same <var>prefix</var> and <var>num</var>.
</p>
<p>If the string begins with &lsquo;<samp>*</samp>&rsquo;, then <code>assemble_name</code> will
output the rest of the string unchanged.  It is often convenient for
<code>ASM_GENERATE_INTERNAL_LABEL</code> to use &lsquo;<samp>*</samp>&rsquo; in this way.  If the
string doesn&rsquo;t start with &lsquo;<samp>*</samp>&rsquo;, then <code>ASM_OUTPUT_LABELREF</code> gets
to output the string, and may change it.  (Of course,
<code>ASM_OUTPUT_LABELREF</code> is also part of your machine description, so
you should know what it does on your machine.)
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fFORMAT_005fPRIVATE_005fNAME"></a>Macro: <strong>ASM_FORMAT_PRIVATE_NAME</strong> <em>(<var>outvar</var>, <var>name</var>, <var>number</var>)</em></dt>
<dd><p>A C expression to assign to <var>outvar</var> (which is a variable of type
<code>char *</code>) a newly allocated string made from the string
<var>name</var> and the number <var>number</var>, with some suitable punctuation
added.  Use <code>alloca</code> to get space for the string.
</p>
<p>The string will be used as an argument to <code>ASM_OUTPUT_LABELREF</code> to
produce an assembler label for an internal static variable whose name is
<var>name</var>.  Therefore, the string must be such as to result in valid
assembler code.  The argument <var>number</var> is different each time this
macro is executed; it prevents conflicts between similarly-named
internal static variables in different scopes.
</p>
<p>Ideally this string should not be a valid C identifier, to prevent any
conflict with the user&rsquo;s own symbols.  Most assemblers allow periods
or percent signs in assembler symbols; putting at least one of these
between the name and the number will suffice.
</p>
<p>If this macro is not defined, a default definition will be provided
which is correct for most systems.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fDEF"></a>Macro: <strong>ASM_OUTPUT_DEF</strong> <em>(<var>stream</var>, <var>name</var>, <var>value</var>)</em></dt>
<dd><p>A C statement to output to the stdio stream <var>stream</var> assembler code
which defines (equates) the symbol <var>name</var> to have the value <var>value</var>.
</p>
<a name="index-SET_005fASM_005fOP"></a>
<p>If <code>SET_ASM_OP</code> is defined, a default definition is provided which is
correct for most systems.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fDEF_005fFROM_005fDECLS"></a>Macro: <strong>ASM_OUTPUT_DEF_FROM_DECLS</strong> <em>(<var>stream</var>, <var>decl_of_name</var>, <var>decl_of_value</var>)</em></dt>
<dd><p>A C statement to output to the stdio stream <var>stream</var> assembler code
which defines (equates) the symbol whose tree node is <var>decl_of_name</var>
to have the value of the tree node <var>decl_of_value</var>.  This macro will
be used in preference to &lsquo;<samp>ASM_OUTPUT_DEF</samp>&rsquo; if it is defined and if
the tree nodes are available.
</p>
<a name="index-SET_005fASM_005fOP-1"></a>
<p>If <code>SET_ASM_OP</code> is defined, a default definition is provided which is
correct for most systems.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDEFERRED_005fOUTPUT_005fDEFS"></a>Macro: <strong>TARGET_DEFERRED_OUTPUT_DEFS</strong> <em>(<var>decl_of_name</var>, <var>decl_of_value</var>)</em></dt>
<dd><p>A C statement that evaluates to true if the assembler code which defines
(equates) the symbol whose tree node is <var>decl_of_name</var> to have the value
of the tree node <var>decl_of_value</var> should be emitted near the end of the
current compilation unit.  The default is to not defer output of defines.
This macro affects defines output by &lsquo;<samp>ASM_OUTPUT_DEF</samp>&rsquo; and
&lsquo;<samp>ASM_OUTPUT_DEF_FROM_DECLS</samp>&rsquo;.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fWEAK_005fALIAS"></a>Macro: <strong>ASM_OUTPUT_WEAK_ALIAS</strong> <em>(<var>stream</var>, <var>name</var>, <var>value</var>)</em></dt>
<dd><p>A C statement to output to the stdio stream <var>stream</var> assembler code
which defines (equates) the weak symbol <var>name</var> to have the value
<var>value</var>.  If <var>value</var> is <code>NULL</code>, it defines <var>name</var> as
an undefined weak symbol.
</p>
<p>Define this macro if the target only supports weak aliases; define
<code>ASM_OUTPUT_DEF</code> instead if possible.
</p></dd></dl>

<dl>
<dt><a name="index-OBJC_005fGEN_005fMETHOD_005fLABEL"></a>Macro: <strong>OBJC_GEN_METHOD_LABEL</strong> <em>(<var>buf</var>, <var>is_inst</var>, <var>class_name</var>, <var>cat_name</var>, <var>sel_name</var>)</em></dt>
<dd><p>Define this macro to override the default assembler names used for
Objective-C methods.
</p>
<p>The default name is a unique method number followed by the name of the
class (e.g. &lsquo;<samp>_1_Foo</samp>&rsquo;).  For methods in categories, the name of
the category is also included in the assembler name (e.g.
&lsquo;<samp>_1_Foo_Bar</samp>&rsquo;).
</p>
<p>These names are safe on most systems, but make debugging difficult since
the method&rsquo;s selector is not present in the name.  Therefore, particular
systems define other ways of computing names.
</p>
<p><var>buf</var> is an expression of type <code>char *</code> which gives you a
buffer in which to store the name; its length is as long as
<var>class_name</var>, <var>cat_name</var> and <var>sel_name</var> put together, plus
50 characters extra.
</p>
<p>The argument <var>is_inst</var> specifies whether the method is an instance
method or a class method; <var>class_name</var> is the name of the class;
<var>cat_name</var> is the name of the category (or <code>NULL</code> if the method is not
in a category); and <var>sel_name</var> is the name of the selector.
</p>
<p>On systems where the assembler can handle quoted names, you can use this
macro to provide more human-readable names.
</p></dd></dl>

<hr>
<a name="Initialization"></a>
<div class="header">
<p>
Next: <a href="#Macros-for-Initialization" accesskey="n" rel="next">Macros for Initialization</a>, Previous: <a href="#Label-Output" accesskey="p" rel="prev">Label Output</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="How-Initialization-Functions-Are-Handled"></a>
<h4 class="subsection">17.21.5 How Initialization Functions Are Handled</h4>
<a name="index-initialization-routines"></a>
<a name="index-termination-routines"></a>
<a name="index-constructors_002c-output-of"></a>
<a name="index-destructors_002c-output-of"></a>

<p>The compiled code for certain languages includes <em>constructors</em>
(also called <em>initialization routines</em>)&mdash;functions to initialize
data in the program when the program is started.  These functions need
to be called before the program is &ldquo;started&rdquo;&mdash;that is to say, before
<code>main</code> is called.
</p>
<p>Compiling some languages generates <em>destructors</em> (also called
<em>termination routines</em>) that should be called when the program
terminates.
</p>
<p>To make the initialization and termination functions work, the compiler
must output something in the assembler code to cause those functions to
be called at the appropriate time.  When you port the compiler to a new
system, you need to specify how to do this.
</p>
<p>There are two major ways that GCC currently supports the execution of
initialization and termination functions.  Each way has two variants.
Much of the structure is common to all four variations.
</p>
<a name="index-_005f_005fCTOR_005fLIST_005f_005f"></a>
<a name="index-_005f_005fDTOR_005fLIST_005f_005f"></a>
<p>The linker must build two lists of these functions&mdash;a list of
initialization functions, called <code>__CTOR_LIST__</code>, and a list of
termination functions, called <code>__DTOR_LIST__</code>.
</p>
<p>Each list always begins with an ignored function pointer (which may hold
0, -1, or a count of the function pointers after it, depending on
the environment).  This is followed by a series of zero or more function
pointers to constructors (or destructors), followed by a function
pointer containing zero.
</p>
<p>Depending on the operating system and its executable file format, either
<samp>crtstuff.c</samp> or <samp>libgcc2.c</samp> traverses these lists at startup
time and exit time.  Constructors are called in reverse order of the
list; destructors in forward order.
</p>
<p>The best way to handle static constructors works only for object file
formats which provide arbitrarily-named sections.  A section is set
aside for a list of constructors, and another for a list of destructors.
Traditionally these are called &lsquo;<samp>.ctors</samp>&rsquo; and &lsquo;<samp>.dtors</samp>&rsquo;.  Each
object file that defines an initialization function also puts a word in
the constructor section to point to that function.  The linker
accumulates all these words into one contiguous &lsquo;<samp>.ctors</samp>&rsquo; section.
Termination functions are handled similarly.
</p>
<p>This method will be chosen as the default by <samp>target-def.h</samp> if
<code>TARGET_ASM_NAMED_SECTION</code> is defined.  A target that does not
support arbitrary sections, but does support special designated
constructor and destructor sections may define <code>CTORS_SECTION_ASM_OP</code>
and <code>DTORS_SECTION_ASM_OP</code> to achieve the same effect.
</p>
<p>When arbitrary sections are available, there are two variants, depending
upon how the code in <samp>crtstuff.c</samp> is called.  On systems that
support a <em>.init</em> section which is executed at program startup,
parts of <samp>crtstuff.c</samp> are compiled into that section.  The
program is linked by the <code>gcc</code> driver like this:
</p>
<div class="smallexample">
<pre class="smallexample">ld -o <var>output_file</var> crti.o crtbegin.o &hellip; -lgcc crtend.o crtn.o
</pre></div>

<p>The prologue of a function (<code>__init</code>) appears in the <code>.init</code>
section of <samp>crti.o</samp>; the epilogue appears in <samp>crtn.o</samp>.  Likewise
for the function <code>__fini</code> in the <em>.fini</em> section.  Normally these
files are provided by the operating system or by the GNU C library, but
are provided by GCC for a few targets.
</p>
<p>The objects <samp>crtbegin.o</samp> and <samp>crtend.o</samp> are (for most targets)
compiled from <samp>crtstuff.c</samp>.  They contain, among other things, code
fragments within the <code>.init</code> and <code>.fini</code> sections that branch
to routines in the <code>.text</code> section.  The linker will pull all parts
of a section together, which results in a complete <code>__init</code> function
that invokes the routines we need at startup.
</p>
<p>To use this variant, you must define the <code>INIT_SECTION_ASM_OP</code>
macro properly.
</p>
<p>If no init section is available, when GCC compiles any function called
<code>main</code> (or more accurately, any function designated as a program
entry point by the language front end calling <code>expand_main_function</code>),
it inserts a procedure call to <code>__main</code> as the first executable code
after the function prologue.  The <code>__main</code> function is defined
in <samp>libgcc2.c</samp> and runs the global constructors.
</p>
<p>In file formats that don&rsquo;t support arbitrary sections, there are again
two variants.  In the simplest variant, the GNU linker (GNU <code>ld</code>)
and an &lsquo;a.out&rsquo; format must be used.  In this case,
<code>TARGET_ASM_CONSTRUCTOR</code> is defined to produce a <code>.stabs</code>
entry of type &lsquo;<samp>N_SETT</samp>&rsquo;, referencing the name <code>__CTOR_LIST__</code>,
and with the address of the void function containing the initialization
code as its value.  The GNU linker recognizes this as a request to add
the value to a <em>set</em>; the values are accumulated, and are eventually
placed in the executable as a vector in the format described above, with
a leading (ignored) count and a trailing zero element.
<code>TARGET_ASM_DESTRUCTOR</code> is handled similarly.  Since no init
section is available, the absence of <code>INIT_SECTION_ASM_OP</code> causes
the compilation of <code>main</code> to call <code>__main</code> as above, starting
the initialization process.
</p>
<p>The last variant uses neither arbitrary sections nor the GNU linker.
This is preferable when you want to do dynamic linking and when using
file formats which the GNU linker does not support, such as &lsquo;ECOFF&rsquo;.  In
this case, <code>TARGET_HAVE_CTORS_DTORS</code> is false, initialization and
termination functions are recognized simply by their names.  This requires
an extra program in the linkage step, called <code>collect2</code>.  This program
pretends to be the linker, for use with GCC; it does its job by running
the ordinary linker, but also arranges to include the vectors of
initialization and termination functions.  These functions are called
via <code>__main</code> as described above.  In order to use this method,
<code>use_collect2</code> must be defined in the target in <samp>config.gcc</samp>.
</p>

<hr>
<a name="Macros-for-Initialization"></a>
<div class="header">
<p>
Next: <a href="#Instruction-Output" accesskey="n" rel="next">Instruction Output</a>, Previous: <a href="#Initialization" accesskey="p" rel="prev">Initialization</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Macros-Controlling-Initialization-Routines"></a>
<h4 class="subsection">17.21.6 Macros Controlling Initialization Routines</h4>

<p>Here are the macros that control how the compiler handles initialization
and termination functions:
</p>
<dl>
<dt><a name="index-INIT_005fSECTION_005fASM_005fOP-1"></a>Macro: <strong>INIT_SECTION_ASM_OP</strong></dt>
<dd><p>If defined, a C string constant, including spacing, for the assembler
operation to identify the following data as initialization code.  If not
defined, GCC will assume such a section does not exist.  When you are
using special sections for initialization and termination functions, this
macro also controls how <samp>crtstuff.c</samp> and <samp>libgcc2.c</samp> arrange to
run the initialization functions.
</p></dd></dl>

<dl>
<dt><a name="index-HAS_005fINIT_005fSECTION"></a>Macro: <strong>HAS_INIT_SECTION</strong></dt>
<dd><p>If defined, <code>main</code> will not call <code>__main</code> as described above.
This macro should be defined for systems that control start-up code
on a symbol-by-symbol basis, such as OSF/1, and should not
be defined explicitly for systems that support <code>INIT_SECTION_ASM_OP</code>.
</p></dd></dl>

<dl>
<dt><a name="index-LD_005fINIT_005fSWITCH"></a>Macro: <strong>LD_INIT_SWITCH</strong></dt>
<dd><p>If defined, a C string constant for a switch that tells the linker that
the following symbol is an initialization routine.
</p></dd></dl>

<dl>
<dt><a name="index-LD_005fFINI_005fSWITCH"></a>Macro: <strong>LD_FINI_SWITCH</strong></dt>
<dd><p>If defined, a C string constant for a switch that tells the linker that
the following symbol is a finalization routine.
</p></dd></dl>

<dl>
<dt><a name="index-COLLECT_005fSHARED_005fINIT_005fFUNC"></a>Macro: <strong>COLLECT_SHARED_INIT_FUNC</strong> <em>(<var>stream</var>, <var>func</var>)</em></dt>
<dd><p>If defined, a C statement that will write a function that can be
automatically called when a shared library is loaded.  The function
should call <var>func</var>, which takes no arguments.  If not defined, and
the object format requires an explicit initialization function, then a
function called <code>_GLOBAL__DI</code> will be generated.
</p>
<p>This function and the following one are used by collect2 when linking a
shared library that needs constructors or destructors, or has DWARF2
exception tables embedded in the code.
</p></dd></dl>

<dl>
<dt><a name="index-COLLECT_005fSHARED_005fFINI_005fFUNC"></a>Macro: <strong>COLLECT_SHARED_FINI_FUNC</strong> <em>(<var>stream</var>, <var>func</var>)</em></dt>
<dd><p>If defined, a C statement that will write a function that can be
automatically called when a shared library is unloaded.  The function
should call <var>func</var>, which takes no arguments.  If not defined, and
the object format requires an explicit finalization function, then a
function called <code>_GLOBAL__DD</code> will be generated.
</p></dd></dl>

<dl>
<dt><a name="index-INVOKE_005f_005fmain"></a>Macro: <strong>INVOKE__main</strong></dt>
<dd><p>If defined, <code>main</code> will call <code>__main</code> despite the presence of
<code>INIT_SECTION_ASM_OP</code>.  This macro should be defined for systems
where the init section is not actually run automatically, but is still
useful for collecting the lists of constructors and destructors.
</p></dd></dl>

<dl>
<dt><a name="index-SUPPORTS_005fINIT_005fPRIORITY"></a>Macro: <strong>SUPPORTS_INIT_PRIORITY</strong></dt>
<dd><p>If nonzero, the C++ <code>init_priority</code> attribute is supported and the
compiler should emit instructions to control the order of initialization
of objects.  If zero, the compiler will issue an error message upon
encountering an <code>init_priority</code> attribute.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fHAVE_005fCTORS_005fDTORS"></a>Target Hook: <em>bool</em> <strong>TARGET_HAVE_CTORS_DTORS</strong></dt>
<dd><p>This value is true if the target supports some &ldquo;native&rdquo; method of
collecting constructors and destructors to be run at startup and exit.
It is false if we must use <code>collect2</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fCONSTRUCTOR"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_CONSTRUCTOR</strong> <em>(rtx <var>symbol</var>, int <var>priority</var>)</em></dt>
<dd><p>If defined, a function that outputs assembler code to arrange to call
the function referenced by <var>symbol</var> at initialization time.
</p>
<p>Assume that <var>symbol</var> is a <code>SYMBOL_REF</code> for a function taking
no arguments and with no return value.  If the target supports initialization
priorities, <var>priority</var> is a value between 0 and <code>MAX_INIT_PRIORITY</code>;
otherwise it must be <code>DEFAULT_INIT_PRIORITY</code>.
</p>
<p>If this macro is not defined by the target, a suitable default will
be chosen if (1) the target supports arbitrary section names, (2) the
target defines <code>CTORS_SECTION_ASM_OP</code>, or (3) <code>USE_COLLECT2</code>
is not defined.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fDESTRUCTOR"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_DESTRUCTOR</strong> <em>(rtx <var>symbol</var>, int <var>priority</var>)</em></dt>
<dd><p>This is like <code>TARGET_ASM_CONSTRUCTOR</code> but used for termination
functions rather than initialization functions.
</p></dd></dl>

<p>If <code>TARGET_HAVE_CTORS_DTORS</code> is true, the initialization routine
generated for the generated object file will have static linkage.
</p>
<p>If your system uses <code>collect2</code> as the means of processing
constructors, then that program normally uses <code>nm</code> to scan
an object file for constructor functions to be called.
</p>
<p>On certain kinds of systems, you can define this macro to make
<code>collect2</code> work faster (and, in some cases, make it work at all):
</p>
<dl>
<dt><a name="index-OBJECT_005fFORMAT_005fCOFF"></a>Macro: <strong>OBJECT_FORMAT_COFF</strong></dt>
<dd><p>Define this macro if the system uses COFF (Common Object File Format)
object files, so that <code>collect2</code> can assume this format and scan
object files directly for dynamic constructor/destructor functions.
</p>
<p>This macro is effective only in a native compiler; <code>collect2</code> as
part of a cross compiler always uses <code>nm</code> for the target machine.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fNM_005fFILE_005fNAME"></a>Macro: <strong>REAL_NM_FILE_NAME</strong></dt>
<dd><p>Define this macro as a C string constant containing the file name to use
to execute <code>nm</code>.  The default is to search the path normally for
<code>nm</code>.
</p></dd></dl>

<dl>
<dt><a name="index-NM_005fFLAGS"></a>Macro: <strong>NM_FLAGS</strong></dt>
<dd><p><code>collect2</code> calls <code>nm</code> to scan object files for static
constructors and destructors and LTO info.  By default, <samp>-n</samp> is
passed.  Define <code>NM_FLAGS</code> to a C string constant if other options
are needed to get the same output format as GNU <code>nm -n</code>
produces.
</p></dd></dl>

<p>If your system supports shared libraries and has a program to list the
dynamic dependencies of a given library or executable, you can define
these macros to enable support for running initialization and
termination functions in shared libraries:
</p>
<dl>
<dt><a name="index-LDD_005fSUFFIX"></a>Macro: <strong>LDD_SUFFIX</strong></dt>
<dd><p>Define this macro to a C string constant containing the name of the program
which lists dynamic dependencies, like <code>ldd</code> under SunOS 4.
</p></dd></dl>

<dl>
<dt><a name="index-PARSE_005fLDD_005fOUTPUT"></a>Macro: <strong>PARSE_LDD_OUTPUT</strong> <em>(<var>ptr</var>)</em></dt>
<dd><p>Define this macro to be C code that extracts filenames from the output
of the program denoted by <code>LDD_SUFFIX</code>.  <var>ptr</var> is a variable
of type <code>char *</code> that points to the beginning of a line of output
from <code>LDD_SUFFIX</code>.  If the line lists a dynamic dependency, the
code must advance <var>ptr</var> to the beginning of the filename on that
line.  Otherwise, it must set <var>ptr</var> to <code>NULL</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SHLIB_005fSUFFIX"></a>Macro: <strong>SHLIB_SUFFIX</strong></dt>
<dd><p>Define this macro to a C string constant containing the default shared
library extension of the target (e.g., &lsquo;<samp>&quot;.so&quot;</samp>&rsquo;).  <code>collect2</code>
strips version information after this suffix when generating global
constructor and destructor names.  This define is only needed on targets
that use <code>collect2</code> to process constructors and destructors.
</p></dd></dl>

<hr>
<a name="Instruction-Output"></a>
<div class="header">
<p>
Next: <a href="#Dispatch-Tables" accesskey="n" rel="next">Dispatch Tables</a>, Previous: <a href="#Macros-for-Initialization" accesskey="p" rel="prev">Macros for Initialization</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Output-of-Assembler-Instructions"></a>
<h4 class="subsection">17.21.7 Output of Assembler Instructions</h4>

<p>This describes assembler instruction output.
</p>
<dl>
<dt><a name="index-REGISTER_005fNAMES"></a>Macro: <strong>REGISTER_NAMES</strong></dt>
<dd><p>A C initializer containing the assembler&rsquo;s names for the machine
registers, each one as a C string constant.  This is what translates
register numbers in the compiler into assembler language.
</p></dd></dl>

<dl>
<dt><a name="index-ADDITIONAL_005fREGISTER_005fNAMES"></a>Macro: <strong>ADDITIONAL_REGISTER_NAMES</strong></dt>
<dd><p>If defined, a C initializer for an array of structures containing a name
and a register number.  This macro defines additional names for hard
registers, thus allowing the <code>asm</code> option in declarations to refer
to registers using alternate names.
</p></dd></dl>

<dl>
<dt><a name="index-OVERLAPPING_005fREGISTER_005fNAMES"></a>Macro: <strong>OVERLAPPING_REGISTER_NAMES</strong></dt>
<dd><p>If defined, a C initializer for an array of structures containing a
name, a register number and a count of the number of consecutive
machine registers the name overlaps.  This macro defines additional
names for hard registers, thus allowing the <code>asm</code> option in
declarations to refer to registers using alternate names.  Unlike
<code>ADDITIONAL_REGISTER_NAMES</code>, this macro should be used when the
register name implies multiple underlying registers.
</p>
<p>This macro should be used when it is important that a clobber in an
<code>asm</code> statement clobbers all the underlying values implied by the
register name.  For example, on ARM, clobbering the double-precision
VFP register &ldquo;d0&rdquo; implies clobbering both single-precision registers
&ldquo;s0&rdquo; and &ldquo;s1&rdquo;.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fOPCODE"></a>Macro: <strong>ASM_OUTPUT_OPCODE</strong> <em>(<var>stream</var>, <var>ptr</var>)</em></dt>
<dd><p>Define this macro if you are using an unusual assembler that
requires different names for the machine instructions.
</p>
<p>The definition is a C statement or statements which output an
assembler instruction opcode to the stdio stream <var>stream</var>.  The
macro-operand <var>ptr</var> is a variable of type <code>char *</code> which
points to the opcode name in its &ldquo;internal&rdquo; form&mdash;the form that is
written in the machine description.  The definition should output the
opcode name to <var>stream</var>, performing any translation you desire, and
increment the variable <var>ptr</var> to point at the end of the opcode
so that it will not be output twice.
</p>
<p>In fact, your macro definition may process less than the entire opcode
name, or more than the opcode name; but if you want to process text
that includes &lsquo;<samp>%</samp>&rsquo;-sequences to substitute operands, you must take
care of the substitution yourself.  Just be sure to increment
<var>ptr</var> over whatever text should not be output normally.
</p>
<a name="index-recog_005fdata_002eoperand"></a>
<p>If you need to look at the operand values, they can be found as the
elements of <code>recog_data.operand</code>.
</p>
<p>If the macro definition does nothing, the instruction is output
in the usual way.
</p></dd></dl>

<dl>
<dt><a name="index-FINAL_005fPRESCAN_005fINSN"></a>Macro: <strong>FINAL_PRESCAN_INSN</strong> <em>(<var>insn</var>, <var>opvec</var>, <var>noperands</var>)</em></dt>
<dd><p>If defined, a C statement to be executed just prior to the output of
assembler code for <var>insn</var>, to modify the extracted operands so
they will be output differently.
</p>
<p>Here the argument <var>opvec</var> is the vector containing the operands
extracted from <var>insn</var>, and <var>noperands</var> is the number of
elements of the vector which contain meaningful data for this insn.
The contents of this vector are what will be used to convert the insn
template into assembler code, so you can change the assembler output
by changing the contents of the vector.
</p>
<p>This macro is useful when various assembler syntaxes share a single
file of instruction patterns; by defining this macro differently, you
can cause a large class of instructions to be output differently (such
as with rearranged operands).  Naturally, variations in assembler
syntax affecting individual insn patterns ought to be handled by
writing conditional output routines in those patterns.
</p>
<p>If this macro is not defined, it is equivalent to a null statement.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fFINAL_005fPOSTSCAN_005fINSN"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_FINAL_POSTSCAN_INSN</strong> <em>(FILE *<var>file</var>, rtx <var>insn</var>, rtx *<var>opvec</var>, int <var>noperands</var>)</em></dt>
<dd><p>If defined, this target hook is a function which is executed just after the
output of assembler code for <var>insn</var>, to change the mode of the assembler
if necessary.
</p>
<p>Here the argument <var>opvec</var> is the vector containing the operands
extracted from <var>insn</var>, and <var>noperands</var> is the number of
elements of the vector which contain meaningful data for this insn.
The contents of this vector are what was used to convert the insn
template into assembler code, so you can change the assembler mode
by checking the contents of the vector.
</p></dd></dl>

<dl>
<dt><a name="index-PRINT_005fOPERAND"></a>Macro: <strong>PRINT_OPERAND</strong> <em>(<var>stream</var>, <var>x</var>, <var>code</var>)</em></dt>
<dd><p>A C compound statement to output to stdio stream <var>stream</var> the
assembler syntax for an instruction operand <var>x</var>.  <var>x</var> is an
RTL expression.
</p>
<p><var>code</var> is a value that can be used to specify one of several ways
of printing the operand.  It is used when identical operands must be
printed differently depending on the context.  <var>code</var> comes from
the &lsquo;<samp>%</samp>&rsquo; specification that was used to request printing of the
operand.  If the specification was just &lsquo;<samp>%<var>digit</var></samp>&rsquo; then
<var>code</var> is 0; if the specification was &lsquo;<samp>%<var>ltr</var>
<var>digit</var></samp>&rsquo; then <var>code</var> is the ASCII code for <var>ltr</var>.
</p>
<a name="index-reg_005fnames-1"></a>
<p>If <var>x</var> is a register, this macro should print the register&rsquo;s name.
The names can be found in an array <code>reg_names</code> whose type is
<code>char *[]</code>.  <code>reg_names</code> is initialized from
<code>REGISTER_NAMES</code>.
</p>
<p>When the machine description has a specification &lsquo;<samp>%<var>punct</var></samp>&rsquo;
(a &lsquo;<samp>%</samp>&rsquo; followed by a punctuation character), this macro is called
with a null pointer for <var>x</var> and the punctuation character for
<var>code</var>.
</p></dd></dl>

<dl>
<dt><a name="index-PRINT_005fOPERAND_005fPUNCT_005fVALID_005fP"></a>Macro: <strong>PRINT_OPERAND_PUNCT_VALID_P</strong> <em>(<var>code</var>)</em></dt>
<dd><p>A C expression which evaluates to true if <var>code</var> is a valid
punctuation character for use in the <code>PRINT_OPERAND</code> macro.  If
<code>PRINT_OPERAND_PUNCT_VALID_P</code> is not defined, it means that no
punctuation characters (except for the standard one, &lsquo;<samp>%</samp>&rsquo;) are used
in this way.
</p></dd></dl>

<dl>
<dt><a name="index-PRINT_005fOPERAND_005fADDRESS"></a>Macro: <strong>PRINT_OPERAND_ADDRESS</strong> <em>(<var>stream</var>, <var>x</var>)</em></dt>
<dd><p>A C compound statement to output to stdio stream <var>stream</var> the
assembler syntax for an instruction operand that is a memory reference
whose address is <var>x</var>.  <var>x</var> is an RTL expression.
</p>
<a name="index-TARGET_005fENCODE_005fSECTION_005fINFO-usage"></a>
<p>On some machines, the syntax for a symbolic address depends on the
section that the address refers to.  On these machines, define the hook
<code>TARGET_ENCODE_SECTION_INFO</code> to store the information into the
<code>symbol_ref</code>, and then check for it here.  See <a href="#Assembler-Format">Assembler Format</a>.
</p></dd></dl>

<a name="index-dbr_005fsequence_005flength"></a>
<dl>
<dt><a name="index-DBR_005fOUTPUT_005fSEQEND"></a>Macro: <strong>DBR_OUTPUT_SEQEND</strong> <em>(<var>file</var>)</em></dt>
<dd><p>A C statement, to be executed after all slot-filler instructions have
been output.  If necessary, call <code>dbr_sequence_length</code> to
determine the number of slots filled in a sequence (zero if not
currently outputting a sequence), to decide how many no-ops to output,
or whatever.
</p>
<p>Don&rsquo;t define this macro if it has nothing to do, but it is helpful in
reading assembly output if the extent of the delay sequence is made
explicit (e.g. with white space).
</p></dd></dl>

<a name="index-final_005fsequence"></a>
<p>Note that output routines for instructions with delay slots must be
prepared to deal with not being output as part of a sequence
(i.e. when the scheduling pass is not run, or when no slot fillers could be
found.)  The variable <code>final_sequence</code> is null when not
processing a sequence, otherwise it contains the <code>sequence</code> rtx
being output.
</p>
<a name="index-asm_005ffprintf"></a>
<dl>
<dt><a name="index-REGISTER_005fPREFIX"></a>Macro: <strong>REGISTER_PREFIX</strong></dt>
<dt><a name="index-LOCAL_005fLABEL_005fPREFIX"></a>Macro: <strong>LOCAL_LABEL_PREFIX</strong></dt>
<dt><a name="index-USER_005fLABEL_005fPREFIX"></a>Macro: <strong>USER_LABEL_PREFIX</strong></dt>
<dt><a name="index-IMMEDIATE_005fPREFIX"></a>Macro: <strong>IMMEDIATE_PREFIX</strong></dt>
<dd><p>If defined, C string expressions to be used for the &lsquo;<samp>%R</samp>&rsquo;, &lsquo;<samp>%L</samp>&rsquo;,
&lsquo;<samp>%U</samp>&rsquo;, and &lsquo;<samp>%I</samp>&rsquo; options of <code>asm_fprintf</code> (see
<samp>final.c</samp>).  These are useful when a single <samp>md</samp> file must
support multiple assembler formats.  In that case, the various <samp>tm.h</samp>
files can define these macros differently.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fFPRINTF_005fEXTENSIONS"></a>Macro: <strong>ASM_FPRINTF_EXTENSIONS</strong> <em>(<var>file</var>, <var>argptr</var>, <var>format</var>)</em></dt>
<dd><p>If defined this macro should expand to a series of <code>case</code>
statements which will be parsed inside the <code>switch</code> statement of
the <code>asm_fprintf</code> function.  This allows targets to define extra
printf formats which may useful when generating their assembler
statements.  Note that uppercase letters are reserved for future
generic extensions to asm_fprintf, and so are not available to target
specific code.  The output file is given by the parameter <var>file</var>.
The varargs input pointer is <var>argptr</var> and the rest of the format
string, starting the character after the one that is being switched
upon, is pointed to by <var>format</var>.
</p></dd></dl>

<dl>
<dt><a name="index-ASSEMBLER_005fDIALECT"></a>Macro: <strong>ASSEMBLER_DIALECT</strong></dt>
<dd><p>If your target supports multiple dialects of assembler language (such as
different opcodes), define this macro as a C expression that gives the
numeric index of the assembler language dialect to use, with zero as the
first variant.
</p>
<p>If this macro is defined, you may use constructs of the form
</p><div class="smallexample">
<pre class="smallexample">&lsquo;<samp>{option0|option1|option2&hellip;}</samp>&rsquo;
</pre></div>
<p>in the output templates of patterns (see <a href="#Output-Template">Output Template</a>) or in the
first argument of <code>asm_fprintf</code>.  This construct outputs
&lsquo;<samp>option0</samp>&rsquo;, &lsquo;<samp>option1</samp>&rsquo;, &lsquo;<samp>option2</samp>&rsquo;, etc., if the value of
<code>ASSEMBLER_DIALECT</code> is zero, one, two, etc.  Any special characters
within these strings retain their usual meaning.  If there are fewer
alternatives within the braces than the value of
<code>ASSEMBLER_DIALECT</code>, the construct outputs nothing.
</p>
<p>If you do not define this macro, the characters &lsquo;<samp>{</samp>&rsquo;, &lsquo;<samp>|</samp>&rsquo; and
&lsquo;<samp>}</samp>&rsquo; do not have any special meaning when used in templates or
operands to <code>asm_fprintf</code>.
</p>
<p>Define the macros <code>REGISTER_PREFIX</code>, <code>LOCAL_LABEL_PREFIX</code>,
<code>USER_LABEL_PREFIX</code> and <code>IMMEDIATE_PREFIX</code> if you can express
the variations in assembler language syntax with that mechanism.  Define
<code>ASSEMBLER_DIALECT</code> and use the &lsquo;<samp>{option0|option1}</samp>&rsquo; syntax
if the syntax variant are larger and involve such things as different
opcodes or operand order.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fREG_005fPUSH"></a>Macro: <strong>ASM_OUTPUT_REG_PUSH</strong> <em>(<var>stream</var>, <var>regno</var>)</em></dt>
<dd><p>A C expression to output to <var>stream</var> some assembler code
which will push hard register number <var>regno</var> onto the stack.
The code need not be optimal, since this macro is used only when
profiling.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fREG_005fPOP"></a>Macro: <strong>ASM_OUTPUT_REG_POP</strong> <em>(<var>stream</var>, <var>regno</var>)</em></dt>
<dd><p>A C expression to output to <var>stream</var> some assembler code
which will pop hard register number <var>regno</var> off of the stack.
The code need not be optimal, since this macro is used only when
profiling.
</p></dd></dl>

<hr>
<a name="Dispatch-Tables"></a>
<div class="header">
<p>
Next: <a href="#Exception-Region-Output" accesskey="n" rel="next">Exception Region Output</a>, Previous: <a href="#Instruction-Output" accesskey="p" rel="prev">Instruction Output</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Output-of-Dispatch-Tables"></a>
<h4 class="subsection">17.21.8 Output of Dispatch Tables</h4>

<p>This concerns dispatch tables.
</p>
<a name="index-dispatch-table"></a>
<dl>
<dt><a name="index-ASM_005fOUTPUT_005fADDR_005fDIFF_005fELT"></a>Macro: <strong>ASM_OUTPUT_ADDR_DIFF_ELT</strong> <em>(<var>stream</var>, <var>body</var>, <var>value</var>, <var>rel</var>)</em></dt>
<dd><p>A C statement to output to the stdio stream <var>stream</var> an assembler
pseudo-instruction to generate a difference between two labels.
<var>value</var> and <var>rel</var> are the numbers of two internal labels.  The
definitions of these labels are output using
<code>(*targetm.asm_out.internal_label)</code>, and they must be printed in the same
way here.  For example,
</p>
<div class="smallexample">
<pre class="smallexample">fprintf (<var>stream</var>, &quot;\t.word L%d-L%d\n&quot;,
         <var>value</var>, <var>rel</var>)
</pre></div>

<p>You must provide this macro on machines where the addresses in a
dispatch table are relative to the table&rsquo;s own address.  If defined, GCC
will also use this macro on all machines when producing PIC.
<var>body</var> is the body of the <code>ADDR_DIFF_VEC</code>; it is provided so that the
mode and flags can be read.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fADDR_005fVEC_005fELT"></a>Macro: <strong>ASM_OUTPUT_ADDR_VEC_ELT</strong> <em>(<var>stream</var>, <var>value</var>)</em></dt>
<dd><p>This macro should be provided on machines where the addresses
in a dispatch table are absolute.
</p>
<p>The definition should be a C statement to output to the stdio stream
<var>stream</var> an assembler pseudo-instruction to generate a reference to
a label.  <var>value</var> is the number of an internal label whose
definition is output using <code>(*targetm.asm_out.internal_label)</code>.
For example,
</p>
<div class="smallexample">
<pre class="smallexample">fprintf (<var>stream</var>, &quot;\t.word L%d\n&quot;, <var>value</var>)
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fCASE_005fLABEL"></a>Macro: <strong>ASM_OUTPUT_CASE_LABEL</strong> <em>(<var>stream</var>, <var>prefix</var>, <var>num</var>, <var>table</var>)</em></dt>
<dd><p>Define this if the label before a jump-table needs to be output
specially.  The first three arguments are the same as for
<code>(*targetm.asm_out.internal_label)</code>; the fourth argument is the
jump-table which follows (a <code>jump_insn</code> containing an
<code>addr_vec</code> or <code>addr_diff_vec</code>).
</p>
<p>This feature is used on system V to output a <code>swbeg</code> statement
for the table.
</p>
<p>If this macro is not defined, these labels are output with
<code>(*targetm.asm_out.internal_label)</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fCASE_005fEND"></a>Macro: <strong>ASM_OUTPUT_CASE_END</strong> <em>(<var>stream</var>, <var>num</var>, <var>table</var>)</em></dt>
<dd><p>Define this if something special must be output at the end of a
jump-table.  The definition should be a C statement to be executed
after the assembler code for the table is written.  It should write
the appropriate code to stdio stream <var>stream</var>.  The argument
<var>table</var> is the jump-table insn, and <var>num</var> is the label-number
of the preceding label.
</p>
<p>If this macro is not defined, nothing special is output at the end of
the jump-table.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fEMIT_005fUNWIND_005fLABEL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_EMIT_UNWIND_LABEL</strong> <em>(FILE *<var>stream</var>, tree <var>decl</var>, int <var>for_eh</var>, int <var>empty</var>)</em></dt>
<dd><p>This target hook emits a label at the beginning of each FDE.  It
should be defined on targets where FDEs need special labels, and it
should write the appropriate label, for the FDE associated with the
function declaration <var>decl</var>, to the stdio stream <var>stream</var>.
The third argument, <var>for_eh</var>, is a boolean: true if this is for an
exception table.  The fourth argument, <var>empty</var>, is a boolean:
true if this is a placeholder label for an omitted FDE.
</p>
<p>The default is that FDEs are not given nonlocal labels.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fEMIT_005fEXCEPT_005fTABLE_005fLABEL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL</strong> <em>(FILE *<var>stream</var>)</em></dt>
<dd><p>This target hook emits a label at the beginning of the exception table.
It should be defined on targets where it is desirable for the table
to be broken up according to function.
</p>
<p>The default is that no label is emitted.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fEMIT_005fEXCEPT_005fPERSONALITY"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_EMIT_EXCEPT_PERSONALITY</strong> <em>(rtx <var>personality</var>)</em></dt>
<dd><p>If the target implements <code>TARGET_ASM_UNWIND_EMIT</code>, this hook may be used to emit a directive to install a personality hook into the unwind info.  This hook should not be used if dwarf2 unwind info is used.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fUNWIND_005fEMIT"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_UNWIND_EMIT</strong> <em>(FILE *<var>stream</var>, rtx <var>insn</var>)</em></dt>
<dd><p>This target hook emits assembly directives required to unwind the
given instruction.  This is only used when <code>TARGET_EXCEPT_UNWIND_INFO</code>
returns <code>UI_TARGET</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fUNWIND_005fEMIT_005fBEFORE_005fINSN"></a>Target Hook: <em>bool</em> <strong>TARGET_ASM_UNWIND_EMIT_BEFORE_INSN</strong></dt>
<dd><p>True if the <code>TARGET_ASM_UNWIND_EMIT</code> hook should be called before the assembly for <var>insn</var> has been emitted, false if the hook should be called afterward.
</p></dd></dl>

<hr>
<a name="Exception-Region-Output"></a>
<div class="header">
<p>
Next: <a href="#Alignment-Output" accesskey="n" rel="next">Alignment Output</a>, Previous: <a href="#Dispatch-Tables" accesskey="p" rel="prev">Dispatch Tables</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Assembler-Commands-for-Exception-Regions"></a>
<h4 class="subsection">17.21.9 Assembler Commands for Exception Regions</h4>


<p>This describes commands marking the start and the end of an exception
region.
</p>
<dl>
<dt><a name="index-EH_005fFRAME_005fSECTION_005fNAME"></a>Macro: <strong>EH_FRAME_SECTION_NAME</strong></dt>
<dd><p>If defined, a C string constant for the name of the section containing
exception handling frame unwind information.  If not defined, GCC will
provide a default definition if the target supports named sections.
<samp>crtstuff.c</samp> uses this macro to switch to the appropriate section.
</p>
<p>You should define this symbol if your target supports DWARF 2 frame
unwind information and the default definition does not work.
</p></dd></dl>

<dl>
<dt><a name="index-EH_005fFRAME_005fIN_005fDATA_005fSECTION"></a>Macro: <strong>EH_FRAME_IN_DATA_SECTION</strong></dt>
<dd><p>If defined, DWARF 2 frame unwind information will be placed in the
data section even though the target supports named sections.  This
might be necessary, for instance, if the system linker does garbage
collection and sections cannot be marked as not to be collected.
</p>
<p>Do not define this macro unless <code>TARGET_ASM_NAMED_SECTION</code> is
also defined.
</p></dd></dl>

<dl>
<dt><a name="index-EH_005fTABLES_005fCAN_005fBE_005fREAD_005fONLY"></a>Macro: <strong>EH_TABLES_CAN_BE_READ_ONLY</strong></dt>
<dd><p>Define this macro to 1 if your target is such that no frame unwind
information encoding used with non-PIC code will ever require a
runtime relocation, but the linker may not support merging read-only
and read-write sections into a single read-write section.
</p></dd></dl>

<dl>
<dt><a name="index-MASK_005fRETURN_005fADDR"></a>Macro: <strong>MASK_RETURN_ADDR</strong></dt>
<dd><p>An rtx used to mask the return address found via <code>RETURN_ADDR_RTX</code>, so
that it does not contain any extraneous set bits in it.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF2_005fUNWIND_005fINFO"></a>Macro: <strong>DWARF2_UNWIND_INFO</strong></dt>
<dd><p>Define this macro to 0 if your target supports DWARF 2 frame unwind
information, but it does not yet work with exception handling.
Otherwise, if your target supports this information (if it defines
<code>INCOMING_RETURN_ADDR_RTX</code> and <code>OBJECT_FORMAT_ELF</code>),
GCC will provide a default definition of 1.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEXCEPT_005fUNWIND_005fINFO"></a>Common Target Hook: <em>enum unwind_info_type</em> <strong>TARGET_EXCEPT_UNWIND_INFO</strong> <em>(struct gcc_options *<var>opts</var>)</em></dt>
<dd><p>This hook defines the mechanism that will be used for exception handling
by the target.  If the target has ABI specified unwind tables, the hook
should return <code>UI_TARGET</code>.  If the target is to use the
<code>setjmp</code>/<code>longjmp</code>-based exception handling scheme, the hook
should return <code>UI_SJLJ</code>.  If the target supports DWARF 2 frame unwind
information, the hook should return <code>UI_DWARF2</code>.
</p>
<p>A target may, if exceptions are disabled, choose to return <code>UI_NONE</code>.
This may end up simplifying other parts of target-specific code.  The
default implementation of this hook never returns <code>UI_NONE</code>.
</p>
<p>Note that the value returned by this hook should be constant.  It should
not depend on anything except the command-line switches described by
<var>opts</var>.  In particular, the
setting <code>UI_SJLJ</code> must be fixed at compiler start-up as C pre-processor
macros and builtin functions related to exception handling are set up
depending on this setting.
</p>
<p>The default implementation of the hook first honors the
<samp>--enable-sjlj-exceptions</samp> configure option, then
<code>DWARF2_UNWIND_INFO</code>, and finally defaults to <code>UI_SJLJ</code>.  If
<code>DWARF2_UNWIND_INFO</code> depends on command-line options, the target
must define this hook so that <var>opts</var> is used correctly.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fUNWIND_005fTABLES_005fDEFAULT"></a>Common Target Hook: <em>bool</em> <strong>TARGET_UNWIND_TABLES_DEFAULT</strong></dt>
<dd><p>This variable should be set to <code>true</code> if the target ABI requires unwinding
tables even when exceptions are not used.  It must not be modified by
command-line option processing.
</p></dd></dl>

<dl>
<dt><a name="index-DONT_005fUSE_005fBUILTIN_005fSETJMP"></a>Macro: <strong>DONT_USE_BUILTIN_SETJMP</strong></dt>
<dd><p>Define this macro to 1 if the <code>setjmp</code>/<code>longjmp</code>-based scheme
should use the <code>setjmp</code>/<code>longjmp</code> functions from the C library
instead of the <code>__builtin_setjmp</code>/<code>__builtin_longjmp</code> machinery.
</p></dd></dl>

<dl>
<dt><a name="index-JMP_005fBUF_005fSIZE"></a>Macro: <strong>JMP_BUF_SIZE</strong></dt>
<dd><p>This macro has no effect unless <code>DONT_USE_BUILTIN_SETJMP</code> is also
defined.  Define this macro if the default size of <code>jmp_buf</code> buffer
for the <code>setjmp</code>/<code>longjmp</code>-based exception handling mechanism
is not large enough, or if it is much too large.
The default size is <code>FIRST_PSEUDO_REGISTER * sizeof(void *)</code>.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF_005fCIE_005fDATA_005fALIGNMENT"></a>Macro: <strong>DWARF_CIE_DATA_ALIGNMENT</strong></dt>
<dd><p>This macro need only be defined if the target might save registers in the
function prologue at an offset to the stack pointer that is not aligned to
<code>UNITS_PER_WORD</code>.  The definition should be the negative minimum
alignment if <code>STACK_GROWS_DOWNWARD</code> is defined, and the positive
minimum alignment otherwise.  See <a href="#SDB-and-DWARF">SDB and DWARF</a>.  Only applicable if
the target supports DWARF 2 frame unwind information.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fTERMINATE_005fDW2_005fEH_005fFRAME_005fINFO"></a>Target Hook: <em>bool</em> <strong>TARGET_TERMINATE_DW2_EH_FRAME_INFO</strong></dt>
<dd><p>Contains the value true if the target should add a zero word onto the
end of a Dwarf-2 frame info section when used for exception handling.
Default value is false if <code>EH_FRAME_SECTION_NAME</code> is defined, and
true otherwise.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDWARF_005fREGISTER_005fSPAN"></a>Target Hook: <em>rtx</em> <strong>TARGET_DWARF_REGISTER_SPAN</strong> <em>(rtx <var>reg</var>)</em></dt>
<dd><p>Given a register, this hook should return a parallel of registers to
represent where to find the register pieces.  Define this hook if the
register and its mode are represented in Dwarf in non-contiguous
locations, or if the register should be represented in more than one
register in Dwarf.  Otherwise, this hook should return <code>NULL_RTX</code>.
If not defined, the default is to return <code>NULL_RTX</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINIT_005fDWARF_005fREG_005fSIZES_005fEXTRA"></a>Target Hook: <em>void</em> <strong>TARGET_INIT_DWARF_REG_SIZES_EXTRA</strong> <em>(tree <var>address</var>)</em></dt>
<dd><p>If some registers are represented in Dwarf-2 unwind information in
multiple pieces, define this hook to fill in information about the
sizes of those pieces in the table used by the unwinder at runtime.
It will be called by <code>expand_builtin_init_dwarf_reg_sizes</code> after
filling in a single size corresponding to each hard register;
<var>address</var> is the address of the table.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fTTYPE"></a>Target Hook: <em>bool</em> <strong>TARGET_ASM_TTYPE</strong> <em>(rtx <var>sym</var>)</em></dt>
<dd><p>This hook is used to output a reference from a frame unwinding table to
the type_info object identified by <var>sym</var>.  It should return <code>true</code>
if the reference was output.  Returning <code>false</code> will cause the
reference to be output using the normal Dwarf2 routines.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fARM_005fEABI_005fUNWINDER"></a>Target Hook: <em>bool</em> <strong>TARGET_ARM_EABI_UNWINDER</strong></dt>
<dd><p>This flag should be set to <code>true</code> on targets that use an ARM EABI
based unwinding library, and <code>false</code> on other targets.  This effects
the format of unwinding tables, and how the unwinder in entered after
running a cleanup.  The default is <code>false</code>.
</p></dd></dl>

<hr>
<a name="Alignment-Output"></a>
<div class="header">
<p>
Previous: <a href="#Exception-Region-Output" accesskey="p" rel="prev">Exception Region Output</a>, Up: <a href="#Assembler-Format" accesskey="u" rel="up">Assembler Format</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Assembler-Commands-for-Alignment"></a>
<h4 class="subsection">17.21.10 Assembler Commands for Alignment</h4>

<p>This describes commands for alignment.
</p>
<dl>
<dt><a name="index-JUMP_005fALIGN"></a>Macro: <strong>JUMP_ALIGN</strong> <em>(<var>label</var>)</em></dt>
<dd><p>The alignment (log base 2) to put in front of <var>label</var>, which is
a common destination of jumps and has no fallthru incoming edge.
</p>
<p>This macro need not be defined if you don&rsquo;t want any special alignment
to be done at such a time.  Most machine descriptions do not currently
define the macro.
</p>
<p>Unless it&rsquo;s necessary to inspect the <var>label</var> parameter, it is better
to set the variable <var>align_jumps</var> in the target&rsquo;s
<code>TARGET_OPTION_OVERRIDE</code>.  Otherwise, you should try to honor the user&rsquo;s
selection in <var>align_jumps</var> in a <code>JUMP_ALIGN</code> implementation.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fJUMP_005fALIGN_005fMAX_005fSKIP"></a>Target Hook: <em>int</em> <strong>TARGET_ASM_JUMP_ALIGN_MAX_SKIP</strong> <em>(rtx <var>label</var>)</em></dt>
<dd><p>The maximum number of bytes to skip before <var>label</var> when applying
<code>JUMP_ALIGN</code>.  This works only if
<code>ASM_OUTPUT_MAX_SKIP_ALIGN</code> is defined.
</p></dd></dl>

<dl>
<dt><a name="index-LABEL_005fALIGN_005fAFTER_005fBARRIER"></a>Macro: <strong>LABEL_ALIGN_AFTER_BARRIER</strong> <em>(<var>label</var>)</em></dt>
<dd><p>The alignment (log base 2) to put in front of <var>label</var>, which follows
a <code>BARRIER</code>.
</p>
<p>This macro need not be defined if you don&rsquo;t want any special alignment
to be done at such a time.  Most machine descriptions do not currently
define the macro.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fLABEL_005fALIGN_005fAFTER_005fBARRIER_005fMAX_005fSKIP"></a>Target Hook: <em>int</em> <strong>TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP</strong> <em>(rtx <var>label</var>)</em></dt>
<dd><p>The maximum number of bytes to skip before <var>label</var> when applying
<code>LABEL_ALIGN_AFTER_BARRIER</code>.  This works only if
<code>ASM_OUTPUT_MAX_SKIP_ALIGN</code> is defined.
</p></dd></dl>

<dl>
<dt><a name="index-LOOP_005fALIGN"></a>Macro: <strong>LOOP_ALIGN</strong> <em>(<var>label</var>)</em></dt>
<dd><p>The alignment (log base 2) to put in front of <var>label</var>, which follows
a <code>NOTE_INSN_LOOP_BEG</code> note.
</p>
<p>This macro need not be defined if you don&rsquo;t want any special alignment
to be done at such a time.  Most machine descriptions do not currently
define the macro.
</p>
<p>Unless it&rsquo;s necessary to inspect the <var>label</var> parameter, it is better
to set the variable <code>align_loops</code> in the target&rsquo;s
<code>TARGET_OPTION_OVERRIDE</code>.  Otherwise, you should try to honor the user&rsquo;s
selection in <code>align_loops</code> in a <code>LOOP_ALIGN</code> implementation.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fLOOP_005fALIGN_005fMAX_005fSKIP"></a>Target Hook: <em>int</em> <strong>TARGET_ASM_LOOP_ALIGN_MAX_SKIP</strong> <em>(rtx <var>label</var>)</em></dt>
<dd><p>The maximum number of bytes to skip when applying <code>LOOP_ALIGN</code> to
<var>label</var>.  This works only if <code>ASM_OUTPUT_MAX_SKIP_ALIGN</code> is
defined.
</p></dd></dl>

<dl>
<dt><a name="index-LABEL_005fALIGN"></a>Macro: <strong>LABEL_ALIGN</strong> <em>(<var>label</var>)</em></dt>
<dd><p>The alignment (log base 2) to put in front of <var>label</var>.
If <code>LABEL_ALIGN_AFTER_BARRIER</code> / <code>LOOP_ALIGN</code> specify a different alignment,
the maximum of the specified values is used.
</p>
<p>Unless it&rsquo;s necessary to inspect the <var>label</var> parameter, it is better
to set the variable <code>align_labels</code> in the target&rsquo;s
<code>TARGET_OPTION_OVERRIDE</code>.  Otherwise, you should try to honor the user&rsquo;s
selection in <code>align_labels</code> in a <code>LABEL_ALIGN</code> implementation.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fLABEL_005fALIGN_005fMAX_005fSKIP"></a>Target Hook: <em>int</em> <strong>TARGET_ASM_LABEL_ALIGN_MAX_SKIP</strong> <em>(rtx <var>label</var>)</em></dt>
<dd><p>The maximum number of bytes to skip when applying <code>LABEL_ALIGN</code>
to <var>label</var>.  This works only if <code>ASM_OUTPUT_MAX_SKIP_ALIGN</code>
is defined.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fSKIP"></a>Macro: <strong>ASM_OUTPUT_SKIP</strong> <em>(<var>stream</var>, <var>nbytes</var>)</em></dt>
<dd><p>A C statement to output to the stdio stream <var>stream</var> an assembler
instruction to advance the location counter by <var>nbytes</var> bytes.
Those bytes should be zero when loaded.  <var>nbytes</var> will be a C
expression of type <code>unsigned HOST_WIDE_INT</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fNO_005fSKIP_005fIN_005fTEXT"></a>Macro: <strong>ASM_NO_SKIP_IN_TEXT</strong></dt>
<dd><p>Define this macro if <code>ASM_OUTPUT_SKIP</code> should not be used in the
text section because it fails to put zeros in the bytes that are skipped.
This is true on many Unix systems, where the pseudo&ndash;op to skip bytes
produces no-op instructions rather than zeros when used in the text
section.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fALIGN"></a>Macro: <strong>ASM_OUTPUT_ALIGN</strong> <em>(<var>stream</var>, <var>power</var>)</em></dt>
<dd><p>A C statement to output to the stdio stream <var>stream</var> an assembler
command to advance the location counter to a multiple of 2 to the
<var>power</var> bytes.  <var>power</var> will be a C expression of type <code>int</code>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fALIGN_005fWITH_005fNOP"></a>Macro: <strong>ASM_OUTPUT_ALIGN_WITH_NOP</strong> <em>(<var>stream</var>, <var>power</var>)</em></dt>
<dd><p>Like <code>ASM_OUTPUT_ALIGN</code>, except that the &ldquo;nop&rdquo; instruction is used
for padding, if necessary.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fMAX_005fSKIP_005fALIGN"></a>Macro: <strong>ASM_OUTPUT_MAX_SKIP_ALIGN</strong> <em>(<var>stream</var>, <var>power</var>, <var>max_skip</var>)</em></dt>
<dd><p>A C statement to output to the stdio stream <var>stream</var> an assembler
command to advance the location counter to a multiple of 2 to the
<var>power</var> bytes, but only if <var>max_skip</var> or fewer bytes are needed to
satisfy the alignment request.  <var>power</var> and <var>max_skip</var> will be
a C expression of type <code>int</code>.
</p></dd></dl>

<hr>
<a name="Debugging-Info"></a>
<div class="header">
<p>
Next: <a href="#Floating-Point" accesskey="n" rel="next">Floating Point</a>, Previous: <a href="#Assembler-Format" accesskey="p" rel="prev">Assembler Format</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Controlling-Debugging-Information-Format"></a>
<h3 class="section">17.22 Controlling Debugging Information Format</h3>

<p>This describes how to specify debugging information.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#All-Debuggers" accesskey="1">All Debuggers</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros that affect all debugging formats uniformly.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#DBX-Options" accesskey="2">DBX Options</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros enabling specific options in DBX format.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#DBX-Hooks" accesskey="3">DBX Hooks</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Hook macros for varying DBX format.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#File-Names-and-DBX" accesskey="4">File Names and DBX</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros controlling output of file names in DBX format.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#SDB-and-DWARF" accesskey="5">SDB and DWARF</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros for SDB (COFF) and DWARF formats.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#VMS-Debug" accesskey="6">VMS Debug</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Macros for VMS debug format.
</td></tr>
</table>

<hr>
<a name="All-Debuggers"></a>
<div class="header">
<p>
Next: <a href="#DBX-Options" accesskey="n" rel="next">DBX Options</a>, Up: <a href="#Debugging-Info" accesskey="u" rel="up">Debugging Info</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Macros-Affecting-All-Debugging-Formats"></a>
<h4 class="subsection">17.22.1 Macros Affecting All Debugging Formats</h4>

<p>These macros affect all debugging formats.
</p>
<dl>
<dt><a name="index-DBX_005fREGISTER_005fNUMBER"></a>Macro: <strong>DBX_REGISTER_NUMBER</strong> <em>(<var>regno</var>)</em></dt>
<dd><p>A C expression that returns the DBX register number for the compiler
register number <var>regno</var>.  In the default macro provided, the value
of this expression will be <var>regno</var> itself.  But sometimes there are
some registers that the compiler knows about and DBX does not, or vice
versa.  In such cases, some register may need to have one number in the
compiler and another for DBX.
</p>
<p>If two registers have consecutive numbers inside GCC, and they can be
used as a pair to hold a multiword value, then they <em>must</em> have
consecutive numbers after renumbering with <code>DBX_REGISTER_NUMBER</code>.
Otherwise, debuggers will be unable to access such a pair, because they
expect register pairs to be consecutive in their own numbering scheme.
</p>
<p>If you find yourself defining <code>DBX_REGISTER_NUMBER</code> in way that
does not preserve register pairs, then what you must do instead is
redefine the actual register numbering scheme.
</p></dd></dl>

<dl>
<dt><a name="index-DEBUGGER_005fAUTO_005fOFFSET"></a>Macro: <strong>DEBUGGER_AUTO_OFFSET</strong> <em>(<var>x</var>)</em></dt>
<dd><p>A C expression that returns the integer offset value for an automatic
variable having address <var>x</var> (an RTL expression).  The default
computation assumes that <var>x</var> is based on the frame-pointer and
gives the offset from the frame-pointer.  This is required for targets
that produce debugging output for DBX or COFF-style debugging output
for SDB and allow the frame-pointer to be eliminated when the
<samp>-g</samp> options is used.
</p></dd></dl>

<dl>
<dt><a name="index-DEBUGGER_005fARG_005fOFFSET"></a>Macro: <strong>DEBUGGER_ARG_OFFSET</strong> <em>(<var>offset</var>, <var>x</var>)</em></dt>
<dd><p>A C expression that returns the integer offset value for an argument
having address <var>x</var> (an RTL expression).  The nominal offset is
<var>offset</var>.
</p></dd></dl>

<dl>
<dt><a name="index-PREFERRED_005fDEBUGGING_005fTYPE"></a>Macro: <strong>PREFERRED_DEBUGGING_TYPE</strong></dt>
<dd><p>A C expression that returns the type of debugging output GCC should
produce when the user specifies just <samp>-g</samp>.  Define
this if you have arranged for GCC to support more than one format of
debugging output.  Currently, the allowable values are <code>DBX_DEBUG</code>,
<code>SDB_DEBUG</code>, <code>DWARF_DEBUG</code>, <code>DWARF2_DEBUG</code>,
<code>XCOFF_DEBUG</code>, <code>VMS_DEBUG</code>, and <code>VMS_AND_DWARF2_DEBUG</code>.
</p>
<p>When the user specifies <samp>-ggdb</samp>, GCC normally also uses the
value of this macro to select the debugging output format, but with two
exceptions.  If <code>DWARF2_DEBUGGING_INFO</code> is defined, GCC uses the
value <code>DWARF2_DEBUG</code>.  Otherwise, if <code>DBX_DEBUGGING_INFO</code> is
defined, GCC uses <code>DBX_DEBUG</code>.
</p>
<p>The value of this macro only affects the default debugging output; the
user can always get a specific type of output by using <samp>-gstabs</samp>,
<samp>-gcoff</samp>, <samp>-gdwarf-2</samp>, <samp>-gxcoff</samp>, or <samp>-gvms</samp>.
</p></dd></dl>

<hr>
<a name="DBX-Options"></a>
<div class="header">
<p>
Next: <a href="#DBX-Hooks" accesskey="n" rel="next">DBX Hooks</a>, Previous: <a href="#All-Debuggers" accesskey="p" rel="prev">All Debuggers</a>, Up: <a href="#Debugging-Info" accesskey="u" rel="up">Debugging Info</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Specific-Options-for-DBX-Output"></a>
<h4 class="subsection">17.22.2 Specific Options for DBX Output</h4>

<p>These are specific options for DBX output.
</p>
<dl>
<dt><a name="index-DBX_005fDEBUGGING_005fINFO"></a>Macro: <strong>DBX_DEBUGGING_INFO</strong></dt>
<dd><p>Define this macro if GCC should produce debugging output for DBX
in response to the <samp>-g</samp> option.
</p></dd></dl>

<dl>
<dt><a name="index-XCOFF_005fDEBUGGING_005fINFO"></a>Macro: <strong>XCOFF_DEBUGGING_INFO</strong></dt>
<dd><p>Define this macro if GCC should produce XCOFF format debugging output
in response to the <samp>-g</samp> option.  This is a variant of DBX format.
</p></dd></dl>

<dl>
<dt><a name="index-DEFAULT_005fGDB_005fEXTENSIONS"></a>Macro: <strong>DEFAULT_GDB_EXTENSIONS</strong></dt>
<dd><p>Define this macro to control whether GCC should by default generate
GDB&rsquo;s extended version of DBX debugging information (assuming DBX-format
debugging information is enabled at all).  If you don&rsquo;t define the
macro, the default is 1: always generate the extended information
if there is any occasion to.
</p></dd></dl>

<dl>
<dt><a name="index-DEBUG_005fSYMS_005fTEXT"></a>Macro: <strong>DEBUG_SYMS_TEXT</strong></dt>
<dd><p>Define this macro if all <code>.stabs</code> commands should be output while
in the text section.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fSTABS_005fOP"></a>Macro: <strong>ASM_STABS_OP</strong></dt>
<dd><p>A C string constant, including spacing, naming the assembler pseudo op to
use instead of <code>&quot;\t.stabs\t&quot;</code> to define an ordinary debugging symbol.
If you don&rsquo;t define this macro, <code>&quot;\t.stabs\t&quot;</code> is used.  This macro
applies only to DBX debugging information format.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fSTABD_005fOP"></a>Macro: <strong>ASM_STABD_OP</strong></dt>
<dd><p>A C string constant, including spacing, naming the assembler pseudo op to
use instead of <code>&quot;\t.stabd\t&quot;</code> to define a debugging symbol whose
value is the current location.  If you don&rsquo;t define this macro,
<code>&quot;\t.stabd\t&quot;</code> is used.  This macro applies only to DBX debugging
information format.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fSTABN_005fOP"></a>Macro: <strong>ASM_STABN_OP</strong></dt>
<dd><p>A C string constant, including spacing, naming the assembler pseudo op to
use instead of <code>&quot;\t.stabn\t&quot;</code> to define a debugging symbol with no
name.  If you don&rsquo;t define this macro, <code>&quot;\t.stabn\t&quot;</code> is used.  This
macro applies only to DBX debugging information format.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fNO_005fXREFS"></a>Macro: <strong>DBX_NO_XREFS</strong></dt>
<dd><p>Define this macro if DBX on your system does not support the construct
&lsquo;<samp>xs<var>tagname</var></samp>&rsquo;.  On some systems, this construct is used to
describe a forward reference to a structure named <var>tagname</var>.
On other systems, this construct is not supported at all.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fCONTIN_005fLENGTH"></a>Macro: <strong>DBX_CONTIN_LENGTH</strong></dt>
<dd><p>A symbol name in DBX-format debugging information is normally
continued (split into two separate <code>.stabs</code> directives) when it
exceeds a certain length (by default, 80 characters).  On some
operating systems, DBX requires this splitting; on others, splitting
must not be done.  You can inhibit splitting by defining this macro
with the value zero.  You can override the default splitting-length by
defining this macro as an expression for the length you desire.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fCONTIN_005fCHAR"></a>Macro: <strong>DBX_CONTIN_CHAR</strong></dt>
<dd><p>Normally continuation is indicated by adding a &lsquo;<samp>\</samp>&rsquo; character to
the end of a <code>.stabs</code> string when a continuation follows.  To use
a different character instead, define this macro as a character
constant for the character you want to use.  Do not define this macro
if backslash is correct for your system.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fSTATIC_005fSTAB_005fDATA_005fSECTION"></a>Macro: <strong>DBX_STATIC_STAB_DATA_SECTION</strong></dt>
<dd><p>Define this macro if it is necessary to go to the data section before
outputting the &lsquo;<samp>.stabs</samp>&rsquo; pseudo-op for a non-global static
variable.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fTYPE_005fDECL_005fSTABS_005fCODE"></a>Macro: <strong>DBX_TYPE_DECL_STABS_CODE</strong></dt>
<dd><p>The value to use in the &ldquo;code&rdquo; field of the <code>.stabs</code> directive
for a typedef.  The default is <code>N_LSYM</code>.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fSTATIC_005fCONST_005fVAR_005fCODE"></a>Macro: <strong>DBX_STATIC_CONST_VAR_CODE</strong></dt>
<dd><p>The value to use in the &ldquo;code&rdquo; field of the <code>.stabs</code> directive
for a static variable located in the text section.  DBX format does not
provide any &ldquo;right&rdquo; way to do this.  The default is <code>N_FUN</code>.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fREGPARM_005fSTABS_005fCODE"></a>Macro: <strong>DBX_REGPARM_STABS_CODE</strong></dt>
<dd><p>The value to use in the &ldquo;code&rdquo; field of the <code>.stabs</code> directive
for a parameter passed in registers.  DBX format does not provide any
&ldquo;right&rdquo; way to do this.  The default is <code>N_RSYM</code>.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fREGPARM_005fSTABS_005fLETTER"></a>Macro: <strong>DBX_REGPARM_STABS_LETTER</strong></dt>
<dd><p>The letter to use in DBX symbol data to identify a symbol as a parameter
passed in registers.  DBX format does not customarily provide any way to
do this.  The default is <code>'P'</code>.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fFUNCTION_005fFIRST"></a>Macro: <strong>DBX_FUNCTION_FIRST</strong></dt>
<dd><p>Define this macro if the DBX information for a function and its
arguments should precede the assembler code for the function.  Normally,
in DBX format, the debugging information entirely follows the assembler
code.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fBLOCKS_005fFUNCTION_005fRELATIVE"></a>Macro: <strong>DBX_BLOCKS_FUNCTION_RELATIVE</strong></dt>
<dd><p>Define this macro, with value 1, if the value of a symbol describing
the scope of a block (<code>N_LBRAC</code> or <code>N_RBRAC</code>) should be
relative to the start of the enclosing function.  Normally, GCC uses
an absolute address.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fLINES_005fFUNCTION_005fRELATIVE"></a>Macro: <strong>DBX_LINES_FUNCTION_RELATIVE</strong></dt>
<dd><p>Define this macro, with value 1, if the value of a symbol indicating
the current line number (<code>N_SLINE</code>) should be relative to the
start of the enclosing function.  Normally, GCC uses an absolute address.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fUSE_005fBINCL"></a>Macro: <strong>DBX_USE_BINCL</strong></dt>
<dd><p>Define this macro if GCC should generate <code>N_BINCL</code> and
<code>N_EINCL</code> stabs for included header files, as on Sun systems.  This
macro also directs GCC to output a type number as a pair of a file
number and a type number within the file.  Normally, GCC does not
generate <code>N_BINCL</code> or <code>N_EINCL</code> stabs, and it outputs a single
number for a type number.
</p></dd></dl>

<hr>
<a name="DBX-Hooks"></a>
<div class="header">
<p>
Next: <a href="#File-Names-and-DBX" accesskey="n" rel="next">File Names and DBX</a>, Previous: <a href="#DBX-Options" accesskey="p" rel="prev">DBX Options</a>, Up: <a href="#Debugging-Info" accesskey="u" rel="up">Debugging Info</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Open_002dEnded-Hooks-for-DBX-Format"></a>
<h4 class="subsection">17.22.3 Open-Ended Hooks for DBX Format</h4>

<p>These are hooks for DBX format.
</p>
<dl>
<dt><a name="index-DBX_005fOUTPUT_005fSOURCE_005fLINE"></a>Macro: <strong>DBX_OUTPUT_SOURCE_LINE</strong> <em>(<var>stream</var>, <var>line</var>, <var>counter</var>)</em></dt>
<dd><p>A C statement to output DBX debugging information before code for line
number <var>line</var> of the current source file to the stdio stream
<var>stream</var>.  <var>counter</var> is the number of time the macro was
invoked, including the current invocation; it is intended to generate
unique labels in the assembly output.
</p>
<p>This macro should not be defined if the default output is correct, or
if it can be made correct by defining <code>DBX_LINES_FUNCTION_RELATIVE</code>.
</p></dd></dl>

<dl>
<dt><a name="index-NO_005fDBX_005fFUNCTION_005fEND"></a>Macro: <strong>NO_DBX_FUNCTION_END</strong></dt>
<dd><p>Some stabs encapsulation formats (in particular ECOFF), cannot handle the
<code>.stabs &quot;&quot;,N_FUN,,0,0,Lscope-function-1</code> gdb dbx extension construct.
On those machines, define this macro to turn this feature off without
disturbing the rest of the gdb extensions.
</p></dd></dl>

<dl>
<dt><a name="index-NO_005fDBX_005fBNSYM_005fENSYM"></a>Macro: <strong>NO_DBX_BNSYM_ENSYM</strong></dt>
<dd><p>Some assemblers cannot handle the <code>.stabd BNSYM/ENSYM,0,0</code> gdb dbx
extension construct.  On those machines, define this macro to turn this
feature off without disturbing the rest of the gdb extensions.
</p></dd></dl>

<hr>
<a name="File-Names-and-DBX"></a>
<div class="header">
<p>
Next: <a href="#SDB-and-DWARF" accesskey="n" rel="next">SDB and DWARF</a>, Previous: <a href="#DBX-Hooks" accesskey="p" rel="prev">DBX Hooks</a>, Up: <a href="#Debugging-Info" accesskey="u" rel="up">Debugging Info</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="File-Names-in-DBX-Format"></a>
<h4 class="subsection">17.22.4 File Names in DBX Format</h4>

<p>This describes file names in DBX format.
</p>
<dl>
<dt><a name="index-DBX_005fOUTPUT_005fMAIN_005fSOURCE_005fFILENAME"></a>Macro: <strong>DBX_OUTPUT_MAIN_SOURCE_FILENAME</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
<dd><p>A C statement to output DBX debugging information to the stdio stream
<var>stream</var>, which indicates that file <var>name</var> is the main source
file&mdash;the file specified as the input file for compilation.
This macro is called only once, at the beginning of compilation.
</p>
<p>This macro need not be defined if the standard form of output
for DBX debugging information is appropriate.
</p>
<p>It may be necessary to refer to a label equal to the beginning of the
text section.  You can use &lsquo;<samp>assemble_name (stream, ltext_label_name)</samp>&rsquo;
to do so.  If you do this, you must also set the variable
<var>used_ltext_label_name</var> to <code>true</code>.
</p></dd></dl>

<dl>
<dt><a name="index-NO_005fDBX_005fMAIN_005fSOURCE_005fDIRECTORY"></a>Macro: <strong>NO_DBX_MAIN_SOURCE_DIRECTORY</strong></dt>
<dd><p>Define this macro, with value 1, if GCC should not emit an indication
of the current directory for compilation and current source language at
the beginning of the file.
</p></dd></dl>

<dl>
<dt><a name="index-NO_005fDBX_005fGCC_005fMARKER"></a>Macro: <strong>NO_DBX_GCC_MARKER</strong></dt>
<dd><p>Define this macro, with value 1, if GCC should not emit an indication
that this object file was compiled by GCC.  The default is to emit
an <code>N_OPT</code> stab at the beginning of every source file, with
&lsquo;<samp>gcc2_compiled.</samp>&rsquo; for the string and value 0.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fOUTPUT_005fMAIN_005fSOURCE_005fFILE_005fEND"></a>Macro: <strong>DBX_OUTPUT_MAIN_SOURCE_FILE_END</strong> <em>(<var>stream</var>, <var>name</var>)</em></dt>
<dd><p>A C statement to output DBX debugging information at the end of
compilation of the main source file <var>name</var>.  Output should be
written to the stdio stream <var>stream</var>.
</p>
<p>If you don&rsquo;t define this macro, nothing special is output at the end
of compilation, which is correct for most machines.
</p></dd></dl>

<dl>
<dt><a name="index-DBX_005fOUTPUT_005fNULL_005fN_005fSO_005fAT_005fMAIN_005fSOURCE_005fFILE_005fEND"></a>Macro: <strong>DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END</strong></dt>
<dd><p>Define this macro <em>instead of</em> defining
<code>DBX_OUTPUT_MAIN_SOURCE_FILE_END</code>, if what needs to be output at
the end of compilation is an <code>N_SO</code> stab with an empty string,
whose value is the highest absolute text address in the file.
</p></dd></dl>

<hr>
<a name="SDB-and-DWARF"></a>
<div class="header">
<p>
Next: <a href="#VMS-Debug" accesskey="n" rel="next">VMS Debug</a>, Previous: <a href="#File-Names-and-DBX" accesskey="p" rel="prev">File Names and DBX</a>, Up: <a href="#Debugging-Info" accesskey="u" rel="up">Debugging Info</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Macros-for-SDB-and-DWARF-Output"></a>
<h4 class="subsection">17.22.5 Macros for SDB and DWARF Output</h4>

<p>Here are macros for SDB and DWARF output.
</p>
<dl>
<dt><a name="index-SDB_005fDEBUGGING_005fINFO"></a>Macro: <strong>SDB_DEBUGGING_INFO</strong></dt>
<dd><p>Define this macro if GCC should produce COFF-style debugging output
for SDB in response to the <samp>-g</samp> option.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF2_005fDEBUGGING_005fINFO"></a>Macro: <strong>DWARF2_DEBUGGING_INFO</strong></dt>
<dd><p>Define this macro if GCC should produce dwarf version 2 format
debugging output in response to the <samp>-g</samp> option.
</p>
<dl>
<dt><a name="index-TARGET_005fDWARF_005fCALLING_005fCONVENTION"></a>Target Hook: <em>int</em> <strong>TARGET_DWARF_CALLING_CONVENTION</strong> <em>(const_tree <var>function</var>)</em></dt>
<dd><p>Define this to enable the dwarf attribute <code>DW_AT_calling_convention</code> to
be emitted for each function.  Instead of an integer return the enum
value for the <code>DW_CC_</code> tag.
</p></dd></dl>

<p>To support optional call frame debugging information, you must also
define <code>INCOMING_RETURN_ADDR_RTX</code> and either set
<code>RTX_FRAME_RELATED_P</code> on the prologue insns if you use RTL for the
prologue, or call <code>dwarf2out_def_cfa</code> and <code>dwarf2out_reg_save</code>
as appropriate from <code>TARGET_ASM_FUNCTION_PROLOGUE</code> if you don&rsquo;t.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF2_005fFRAME_005fINFO"></a>Macro: <strong>DWARF2_FRAME_INFO</strong></dt>
<dd><p>Define this macro to a nonzero value if GCC should always output
Dwarf 2 frame information.  If <code>TARGET_EXCEPT_UNWIND_INFO</code>
(see <a href="#Exception-Region-Output">Exception Region Output</a>) returns <code>UI_DWARF2</code>, and
exceptions are enabled, GCC will output this information not matter
how you define <code>DWARF2_FRAME_INFO</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDEBUG_005fUNWIND_005fINFO"></a>Target Hook: <em>enum unwind_info_type</em> <strong>TARGET_DEBUG_UNWIND_INFO</strong> <em>(void)</em></dt>
<dd><p>This hook defines the mechanism that will be used for describing frame
unwind information to the debugger.  Normally the hook will return
<code>UI_DWARF2</code> if DWARF 2 debug information is enabled, and
return <code>UI_NONE</code> otherwise.
</p>
<p>A target may return <code>UI_DWARF2</code> even when DWARF 2 debug information
is disabled in order to always output DWARF 2 frame information.
</p>
<p>A target may return <code>UI_TARGET</code> if it has ABI specified unwind tables.
This will suppress generation of the normal debug frame unwind information.
</p></dd></dl>

<dl>
<dt><a name="index-DWARF2_005fASM_005fLINE_005fDEBUG_005fINFO"></a>Macro: <strong>DWARF2_ASM_LINE_DEBUG_INFO</strong></dt>
<dd><p>Define this macro to be a nonzero value if the assembler can generate Dwarf 2
line debug info sections.  This will result in much more compact line number
tables, and hence is desirable if it works.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fWANT_005fDEBUG_005fPUB_005fSECTIONS"></a>Target Hook: <em>bool</em> <strong>TARGET_WANT_DEBUG_PUB_SECTIONS</strong></dt>
<dd><p>True if the <code>.debug_pubtypes</code> and <code>.debug_pubnames</code> sections should be emitted.  These sections are not used on most platforms, and in particular GDB does not use them.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFORCE_005fAT_005fCOMP_005fDIR"></a>Target Hook: <em>bool</em> <strong>TARGET_FORCE_AT_COMP_DIR</strong></dt>
<dd><p>True if the <code>DW_AT_comp_dir</code> attribute should be emitted for each  compilation unit.  This attribute is required for the darwin linker  to emit debug information.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDELAY_005fSCHED2"></a>Target Hook: <em>bool</em> <strong>TARGET_DELAY_SCHED2</strong></dt>
<dd><p>True if sched2 is not to be run at its normal place.  This usually means it will be run as part of machine-specific reorg.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDELAY_005fVARTRACK"></a>Target Hook: <em>bool</em> <strong>TARGET_DELAY_VARTRACK</strong></dt>
<dd><p>True if vartrack is not to be run at its normal place.  This usually means it will be run as part of machine-specific reorg.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fDWARF_005fDELTA"></a>Macro: <strong>ASM_OUTPUT_DWARF_DELTA</strong> <em>(<var>stream</var>, <var>size</var>, <var>label1</var>, <var>label2</var>)</em></dt>
<dd><p>A C statement to issue assembly directives that create a difference
<var>lab1</var> minus <var>lab2</var>, using an integer of the given <var>size</var>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fDWARF_005fVMS_005fDELTA"></a>Macro: <strong>ASM_OUTPUT_DWARF_VMS_DELTA</strong> <em>(<var>stream</var>, <var>size</var>, <var>label1</var>, <var>label2</var>)</em></dt>
<dd><p>A C statement to issue assembly directives that create a difference
between the two given labels in system defined units, e.g. instruction
slots on IA64 VMS, using an integer of the given size.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fDWARF_005fOFFSET"></a>Macro: <strong>ASM_OUTPUT_DWARF_OFFSET</strong> <em>(<var>stream</var>, <var>size</var>, <var>label</var>, <var>section</var>)</em></dt>
<dd><p>A C statement to issue assembly directives that create a
section-relative reference to the given <var>label</var>, using an integer of the
given <var>size</var>.  The label is known to be defined in the given <var>section</var>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fDWARF_005fPCREL"></a>Macro: <strong>ASM_OUTPUT_DWARF_PCREL</strong> <em>(<var>stream</var>, <var>size</var>, <var>label</var>)</em></dt>
<dd><p>A C statement to issue assembly directives that create a self-relative
reference to the given <var>label</var>, using an integer of the given <var>size</var>.
</p></dd></dl>

<dl>
<dt><a name="index-ASM_005fOUTPUT_005fDWARF_005fTABLE_005fREF"></a>Macro: <strong>ASM_OUTPUT_DWARF_TABLE_REF</strong> <em>(<var>label</var>)</em></dt>
<dd><p>A C statement to issue assembly directives that create a reference to
the DWARF table identifier <var>label</var> from the current section.  This
is used on some systems to avoid garbage collecting a DWARF table which
is referenced by a function.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASM_005fOUTPUT_005fDWARF_005fDTPREL"></a>Target Hook: <em>void</em> <strong>TARGET_ASM_OUTPUT_DWARF_DTPREL</strong> <em>(FILE *<var>file</var>, int <var>size</var>, rtx <var>x</var>)</em></dt>
<dd><p>If defined, this target hook is a function which outputs a DTP-relative
reference to the given TLS symbol of the specified size.
</p></dd></dl>

<dl>
<dt><a name="index-PUT_005fSDB_005f"></a>Macro: <strong>PUT_SDB_</strong> <em>&hellip;</em></dt>
<dd><p>Define these macros to override the assembler syntax for the special
SDB assembler directives.  See <samp>sdbout.c</samp> for a list of these
macros and their arguments.  If the standard syntax is used, you need
not define them yourself.
</p></dd></dl>

<dl>
<dt><a name="index-SDB_005fDELIM"></a>Macro: <strong>SDB_DELIM</strong></dt>
<dd><p>Some assemblers do not support a semicolon as a delimiter, even between
SDB assembler directives.  In that case, define this macro to be the
delimiter to use (usually &lsquo;<samp>\n</samp>&rsquo;).  It is not necessary to define
a new set of <code>PUT_SDB_<var>op</var></code> macros if this is the only change
required.
</p></dd></dl>

<dl>
<dt><a name="index-SDB_005fALLOW_005fUNKNOWN_005fREFERENCES"></a>Macro: <strong>SDB_ALLOW_UNKNOWN_REFERENCES</strong></dt>
<dd><p>Define this macro to allow references to unknown structure,
union, or enumeration tags to be emitted.  Standard COFF does not
allow handling of unknown references, MIPS ECOFF has support for
it.
</p></dd></dl>

<dl>
<dt><a name="index-SDB_005fALLOW_005fFORWARD_005fREFERENCES"></a>Macro: <strong>SDB_ALLOW_FORWARD_REFERENCES</strong></dt>
<dd><p>Define this macro to allow references to structure, union, or
enumeration tags that have not yet been seen to be handled.  Some
assemblers choke if forward tags are used, while some require it.
</p></dd></dl>

<dl>
<dt><a name="index-SDB_005fOUTPUT_005fSOURCE_005fLINE"></a>Macro: <strong>SDB_OUTPUT_SOURCE_LINE</strong> <em>(<var>stream</var>, <var>line</var>)</em></dt>
<dd><p>A C statement to output SDB debugging information before code for line
number <var>line</var> of the current source file to the stdio stream
<var>stream</var>.  The default is to emit an <code>.ln</code> directive.
</p></dd></dl>

<hr>
<a name="VMS-Debug"></a>
<div class="header">
<p>
Previous: <a href="#SDB-and-DWARF" accesskey="p" rel="prev">SDB and DWARF</a>, Up: <a href="#Debugging-Info" accesskey="u" rel="up">Debugging Info</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Macros-for-VMS-Debug-Format"></a>
<h4 class="subsection">17.22.6 Macros for VMS Debug Format</h4>

<p>Here are macros for VMS debug format.
</p>
<dl>
<dt><a name="index-VMS_005fDEBUGGING_005fINFO"></a>Macro: <strong>VMS_DEBUGGING_INFO</strong></dt>
<dd><p>Define this macro if GCC should produce debugging output for VMS
in response to the <samp>-g</samp> option.  The default behavior for VMS
is to generate minimal debug info for a traceback in the absence of
<samp>-g</samp> unless explicitly overridden with <samp>-g0</samp>.  This
behavior is controlled by <code>TARGET_OPTION_OPTIMIZATION</code> and
<code>TARGET_OPTION_OVERRIDE</code>.
</p></dd></dl>

<hr>
<a name="Floating-Point"></a>
<div class="header">
<p>
Next: <a href="#Mode-Switching" accesskey="n" rel="next">Mode Switching</a>, Previous: <a href="#Debugging-Info" accesskey="p" rel="prev">Debugging Info</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Cross-Compilation-and-Floating-Point"></a>
<h3 class="section">17.23 Cross Compilation and Floating Point</h3>
<a name="index-cross-compilation-and-floating-point"></a>
<a name="index-floating-point-and-cross-compilation"></a>

<p>While all modern machines use twos-complement representation for integers,
there are a variety of representations for floating point numbers.  This
means that in a cross-compiler the representation of floating point numbers
in the compiled program may be different from that used in the machine
doing the compilation.
</p>
<p>Because different representation systems may offer different amounts of
range and precision, all floating point constants must be represented in
the target machine&rsquo;s format.  Therefore, the cross compiler cannot
safely use the host machine&rsquo;s floating point arithmetic; it must emulate
the target&rsquo;s arithmetic.  To ensure consistency, GCC always uses
emulation to work with floating point values, even when the host and
target floating point formats are identical.
</p>
<p>The following macros are provided by <samp>real.h</samp> for the compiler to
use.  All parts of the compiler which generate or optimize
floating-point calculations must use these macros.  They may evaluate
their operands more than once, so operands must not have side effects.
</p>
<dl>
<dt><a name="index-REAL_005fVALUE_005fTYPE"></a>Macro: <strong>REAL_VALUE_TYPE</strong></dt>
<dd><p>The C data type to be used to hold a floating point value in the target
machine&rsquo;s format.  Typically this is a <code>struct</code> containing an
array of <code>HOST_WIDE_INT</code>, but all code should treat it as an opaque
quantity.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUES_005fEQUAL"></a>Macro: <em>int</em> <strong>REAL_VALUES_EQUAL</strong> <em>(REAL_VALUE_TYPE <var>x</var>, REAL_VALUE_TYPE <var>y</var>)</em></dt>
<dd><p>Compares for equality the two values, <var>x</var> and <var>y</var>.  If the target
floating point format supports negative zeroes and/or NaNs,
&lsquo;<samp>REAL_VALUES_EQUAL (-0.0, 0.0)</samp>&rsquo; is true, and
&lsquo;<samp>REAL_VALUES_EQUAL (NaN, NaN)</samp>&rsquo; is false.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUES_005fLESS"></a>Macro: <em>int</em> <strong>REAL_VALUES_LESS</strong> <em>(REAL_VALUE_TYPE <var>x</var>, REAL_VALUE_TYPE <var>y</var>)</em></dt>
<dd><p>Tests whether <var>x</var> is less than <var>y</var>.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fFIX"></a>Macro: <em>HOST_WIDE_INT</em> <strong>REAL_VALUE_FIX</strong> <em>(REAL_VALUE_TYPE <var>x</var>)</em></dt>
<dd><p>Truncates <var>x</var> to a signed integer, rounding toward zero.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fUNSIGNED_005fFIX"></a>Macro: <em>unsigned HOST_WIDE_INT</em> <strong>REAL_VALUE_UNSIGNED_FIX</strong> <em>(REAL_VALUE_TYPE <var>x</var>)</em></dt>
<dd><p>Truncates <var>x</var> to an unsigned integer, rounding toward zero.  If
<var>x</var> is negative, returns zero.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fATOF"></a>Macro: <em>REAL_VALUE_TYPE</em> <strong>REAL_VALUE_ATOF</strong> <em>(const char *<var>string</var>, enum machine_mode <var>mode</var>)</em></dt>
<dd><p>Converts <var>string</var> into a floating point number in the target machine&rsquo;s
representation for mode <var>mode</var>.  This routine can handle both
decimal and hexadecimal floating point constants, using the syntax
defined by the C language for both.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fNEGATIVE"></a>Macro: <em>int</em> <strong>REAL_VALUE_NEGATIVE</strong> <em>(REAL_VALUE_TYPE <var>x</var>)</em></dt>
<dd><p>Returns 1 if <var>x</var> is negative (including negative zero), 0 otherwise.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fISINF"></a>Macro: <em>int</em> <strong>REAL_VALUE_ISINF</strong> <em>(REAL_VALUE_TYPE <var>x</var>)</em></dt>
<dd><p>Determines whether <var>x</var> represents infinity (positive or negative).
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fISNAN"></a>Macro: <em>int</em> <strong>REAL_VALUE_ISNAN</strong> <em>(REAL_VALUE_TYPE <var>x</var>)</em></dt>
<dd><p>Determines whether <var>x</var> represents a &ldquo;NaN&rdquo; (not-a-number).
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fARITHMETIC"></a>Macro: <em>void</em> <strong>REAL_ARITHMETIC</strong> <em>(REAL_VALUE_TYPE <var>output</var>, enum tree_code <var>code</var>, REAL_VALUE_TYPE <var>x</var>, REAL_VALUE_TYPE <var>y</var>)</em></dt>
<dd><p>Calculates an arithmetic operation on the two floating point values
<var>x</var> and <var>y</var>, storing the result in <var>output</var> (which must be a
variable).
</p>
<p>The operation to be performed is specified by <var>code</var>.  Only the
following codes are supported: <code>PLUS_EXPR</code>, <code>MINUS_EXPR</code>,
<code>MULT_EXPR</code>, <code>RDIV_EXPR</code>, <code>MAX_EXPR</code>, <code>MIN_EXPR</code>.
</p>
<p>If <code>REAL_ARITHMETIC</code> is asked to evaluate division by zero and the
target&rsquo;s floating point format cannot represent infinity, it will call
<code>abort</code>.  Callers should check for this situation first, using
<code>MODE_HAS_INFINITIES</code>.  See <a href="#Storage-Layout">Storage Layout</a>.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fNEGATE"></a>Macro: <em>REAL_VALUE_TYPE</em> <strong>REAL_VALUE_NEGATE</strong> <em>(REAL_VALUE_TYPE <var>x</var>)</em></dt>
<dd><p>Returns the negative of the floating point value <var>x</var>.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fABS"></a>Macro: <em>REAL_VALUE_TYPE</em> <strong>REAL_VALUE_ABS</strong> <em>(REAL_VALUE_TYPE <var>x</var>)</em></dt>
<dd><p>Returns the absolute value of <var>x</var>.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fTO_005fINT"></a>Macro: <em>void</em> <strong>REAL_VALUE_TO_INT</strong> <em>(HOST_WIDE_INT <var>low</var>, HOST_WIDE_INT <var>high</var>, REAL_VALUE_TYPE <var>x</var>)</em></dt>
<dd><p>Converts a floating point value <var>x</var> into a double-precision integer
which is then stored into <var>low</var> and <var>high</var>.  If the value is not
integral, it is truncated.
</p></dd></dl>

<dl>
<dt><a name="index-REAL_005fVALUE_005fFROM_005fINT"></a>Macro: <em>void</em> <strong>REAL_VALUE_FROM_INT</strong> <em>(REAL_VALUE_TYPE <var>x</var>, HOST_WIDE_INT <var>low</var>, HOST_WIDE_INT <var>high</var>, enum machine_mode <var>mode</var>)</em></dt>
<dd><p>Converts a double-precision integer found in <var>low</var> and <var>high</var>,
into a floating point value which is then stored into <var>x</var>.  The
value is truncated to fit in mode <var>mode</var>.
</p></dd></dl>

<hr>
<a name="Mode-Switching"></a>
<div class="header">
<p>
Next: <a href="#Target-Attributes" accesskey="n" rel="next">Target Attributes</a>, Previous: <a href="#Floating-Point" accesskey="p" rel="prev">Floating Point</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Mode-Switching-Instructions"></a>
<h3 class="section">17.24 Mode Switching Instructions</h3>
<a name="index-mode-switching"></a>
<p>The following macros control mode switching optimizations:
</p>
<dl>
<dt><a name="index-OPTIMIZE_005fMODE_005fSWITCHING"></a>Macro: <strong>OPTIMIZE_MODE_SWITCHING</strong> <em>(<var>entity</var>)</em></dt>
<dd><p>Define this macro if the port needs extra instructions inserted for mode
switching in an optimizing compilation.
</p>
<p>For an example, the SH4 can perform both single and double precision
floating point operations, but to perform a single precision operation,
the FPSCR PR bit has to be cleared, while for a double precision
operation, this bit has to be set.  Changing the PR bit requires a general
purpose register as a scratch register, hence these FPSCR sets have to
be inserted before reload, i.e. you can&rsquo;t put this into instruction emitting
or <code>TARGET_MACHINE_DEPENDENT_REORG</code>.
</p>
<p>You can have multiple entities that are mode-switched, and select at run time
which entities actually need it.  <code>OPTIMIZE_MODE_SWITCHING</code> should
return nonzero for any <var>entity</var> that needs mode-switching.
If you define this macro, you also have to define
<code>NUM_MODES_FOR_MODE_SWITCHING</code>, <code>MODE_NEEDED</code>,
<code>MODE_PRIORITY_TO_MODE</code> and <code>EMIT_MODE_SET</code>.
<code>MODE_AFTER</code>, <code>MODE_ENTRY</code>, and <code>MODE_EXIT</code>
are optional.
</p></dd></dl>

<dl>
<dt><a name="index-NUM_005fMODES_005fFOR_005fMODE_005fSWITCHING"></a>Macro: <strong>NUM_MODES_FOR_MODE_SWITCHING</strong></dt>
<dd><p>If you define <code>OPTIMIZE_MODE_SWITCHING</code>, you have to define this as
initializer for an array of integers.  Each initializer element
N refers to an entity that needs mode switching, and specifies the number
of different modes that might need to be set for this entity.
The position of the initializer in the initializer&mdash;starting counting at
zero&mdash;determines the integer that is used to refer to the mode-switched
entity in question.
In macros that take mode arguments / yield a mode result, modes are
represented as numbers 0 &hellip; N - 1.  N is used to specify that no mode
switch is needed / supplied.
</p></dd></dl>

<dl>
<dt><a name="index-MODE_005fNEEDED"></a>Macro: <strong>MODE_NEEDED</strong> <em>(<var>entity</var>, <var>insn</var>)</em></dt>
<dd><p><var>entity</var> is an integer specifying a mode-switched entity.  If
<code>OPTIMIZE_MODE_SWITCHING</code> is defined, you must define this macro to
return an integer value not larger than the corresponding element in
<code>NUM_MODES_FOR_MODE_SWITCHING</code>, to denote the mode that <var>entity</var> must
be switched into prior to the execution of <var>insn</var>.
</p></dd></dl>

<dl>
<dt><a name="index-MODE_005fAFTER"></a>Macro: <strong>MODE_AFTER</strong> <em>(<var>entity</var>, <var>mode</var>, <var>insn</var>)</em></dt>
<dd><p><var>entity</var> is an integer specifying a mode-switched entity.  If
this macro is defined, it is evaluated for every <var>insn</var> during
mode switching.  It determines the mode that an insn results in (if
different from the incoming mode).
</p></dd></dl>

<dl>
<dt><a name="index-MODE_005fENTRY"></a>Macro: <strong>MODE_ENTRY</strong> <em>(<var>entity</var>)</em></dt>
<dd><p>If this macro is defined, it is evaluated for every <var>entity</var> that needs
mode switching.  It should evaluate to an integer, which is a mode that
<var>entity</var> is assumed to be switched to at function entry.  If <code>MODE_ENTRY</code>
is defined then <code>MODE_EXIT</code> must be defined.
</p></dd></dl>

<dl>
<dt><a name="index-MODE_005fEXIT"></a>Macro: <strong>MODE_EXIT</strong> <em>(<var>entity</var>)</em></dt>
<dd><p>If this macro is defined, it is evaluated for every <var>entity</var> that needs
mode switching.  It should evaluate to an integer, which is a mode that
<var>entity</var> is assumed to be switched to at function exit.  If <code>MODE_EXIT</code>
is defined then <code>MODE_ENTRY</code> must be defined.
</p></dd></dl>

<dl>
<dt><a name="index-MODE_005fPRIORITY_005fTO_005fMODE"></a>Macro: <strong>MODE_PRIORITY_TO_MODE</strong> <em>(<var>entity</var>, <var>n</var>)</em></dt>
<dd><p>This macro specifies the order in which modes for <var>entity</var> are processed.
0 is the highest priority, <code>NUM_MODES_FOR_MODE_SWITCHING[<var>entity</var>] - 1</code> the
lowest.  The value of the macro should be an integer designating a mode
for <var>entity</var>.  For any fixed <var>entity</var>, <code>mode_priority_to_mode</code>
(<var>entity</var>, <var>n</var>) shall be a bijection in 0 &hellip;
<code>num_modes_for_mode_switching[<var>entity</var>] - 1</code>.
</p></dd></dl>

<dl>
<dt><a name="index-EMIT_005fMODE_005fSET"></a>Macro: <strong>EMIT_MODE_SET</strong> <em>(<var>entity</var>, <var>mode</var>, <var>hard_regs_live</var>)</em></dt>
<dd><p>Generate one or more insns to set <var>entity</var> to <var>mode</var>.
<var>hard_reg_live</var> is the set of hard registers live at the point where
the insn(s) are to be inserted.
</p></dd></dl>

<hr>
<a name="Target-Attributes"></a>
<div class="header">
<p>
Next: <a href="#Emulated-TLS" accesskey="n" rel="next">Emulated TLS</a>, Previous: <a href="#Mode-Switching" accesskey="p" rel="prev">Mode Switching</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-target_002dspecific-uses-of-_005f_005fattribute_005f_005f"></a>
<h3 class="section">17.25 Defining target-specific uses of <code>__attribute__</code></h3>
<a name="index-target-attributes"></a>
<a name="index-machine-attributes"></a>
<a name="index-attributes_002c-target_002dspecific"></a>

<p>Target-specific attributes may be defined for functions, data and types.
These are described using the following target hooks; they also need to
be documented in <samp>extend.texi</samp>.
</p>
<dl>
<dt><a name="index-TARGET_005fATTRIBUTE_005fTABLE"></a>Target Hook: <em>const struct attribute_spec *</em> <strong>TARGET_ATTRIBUTE_TABLE</strong></dt>
<dd><p>If defined, this target hook points to an array of &lsquo;<samp>struct
attribute_spec</samp>&rsquo; (defined in <samp>tree.h</samp>) specifying the machine
specific attributes for this target and some of the restrictions on the
entities to which these attributes are applied and the arguments they
take.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fATTRIBUTE_005fTAKES_005fIDENTIFIER_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P</strong> <em>(const_tree <var>name</var>)</em></dt>
<dd><p>If defined, this target hook is a function which returns true if the
machine-specific attribute named <var>name</var> expects an identifier
given as its first argument to be passed on as a plain identifier, not
subjected to name lookup.  If this is not defined, the default is
false for all machine-specific attributes.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCOMP_005fTYPE_005fATTRIBUTES"></a>Target Hook: <em>int</em> <strong>TARGET_COMP_TYPE_ATTRIBUTES</strong> <em>(const_tree <var>type1</var>, const_tree <var>type2</var>)</em></dt>
<dd><p>If defined, this target hook is a function which returns zero if the attributes on
<var>type1</var> and <var>type2</var> are incompatible, one if they are compatible,
and two if they are nearly compatible (which causes a warning to be
generated).  If this is not defined, machine-specific attributes are
supposed always to be compatible.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSET_005fDEFAULT_005fTYPE_005fATTRIBUTES"></a>Target Hook: <em>void</em> <strong>TARGET_SET_DEFAULT_TYPE_ATTRIBUTES</strong> <em>(tree <var>type</var>)</em></dt>
<dd><p>If defined, this target hook is a function which assigns default attributes to
the newly defined <var>type</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMERGE_005fTYPE_005fATTRIBUTES"></a>Target Hook: <em>tree</em> <strong>TARGET_MERGE_TYPE_ATTRIBUTES</strong> <em>(tree <var>type1</var>, tree <var>type2</var>)</em></dt>
<dd><p>Define this target hook if the merging of type attributes needs special
handling.  If defined, the result is a list of the combined
<code>TYPE_ATTRIBUTES</code> of <var>type1</var> and <var>type2</var>.  It is assumed
that <code>comptypes</code> has already been called and returned 1.  This
function may call <code>merge_attributes</code> to handle machine-independent
merging.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMERGE_005fDECL_005fATTRIBUTES"></a>Target Hook: <em>tree</em> <strong>TARGET_MERGE_DECL_ATTRIBUTES</strong> <em>(tree <var>olddecl</var>, tree <var>newdecl</var>)</em></dt>
<dd><p>Define this target hook if the merging of decl attributes needs special
handling.  If defined, the result is a list of the combined
<code>DECL_ATTRIBUTES</code> of <var>olddecl</var> and <var>newdecl</var>.
<var>newdecl</var> is a duplicate declaration of <var>olddecl</var>.  Examples of
when this is needed are when one attribute overrides another, or when an
attribute is nullified by a subsequent definition.  This function may
call <code>merge_attributes</code> to handle machine-independent merging.
</p>
<a name="index-TARGET_005fDLLIMPORT_005fDECL_005fATTRIBUTES"></a>
<p>If the only target-specific handling you require is &lsquo;<samp>dllimport</samp>&rsquo;
for Microsoft Windows targets, you should define the macro
<code>TARGET_DLLIMPORT_DECL_ATTRIBUTES</code> to <code>1</code>.  The compiler
will then define a function called
<code>merge_dllimport_decl_attributes</code> which can then be defined as
the expansion of <code>TARGET_MERGE_DECL_ATTRIBUTES</code>.  You can also
add <code>handle_dll_attribute</code> in the attribute table for your port
to perform initial processing of the &lsquo;<samp>dllimport</samp>&rsquo; and
&lsquo;<samp>dllexport</samp>&rsquo; attributes.  This is done in <samp>i386/cygwin.h</samp> and
<samp>i386/i386.c</samp>, for example.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fVALID_005fDLLIMPORT_005fATTRIBUTE_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_VALID_DLLIMPORT_ATTRIBUTE_P</strong> <em>(const_tree <var>decl</var>)</em></dt>
<dd><p><var>decl</var> is a variable or function with <code>__attribute__((dllimport))</code> specified.  Use this hook if the target needs to add extra validation checks to <code>handle_dll_attribute</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDECLSPEC"></a>Macro: <strong>TARGET_DECLSPEC</strong></dt>
<dd><p>Define this macro to a nonzero value if you want to treat
<code>__declspec(X)</code> as equivalent to <code>__attribute((X))</code>.  By
default, this behavior is enabled only for targets that define
<code>TARGET_DLLIMPORT_DECL_ATTRIBUTES</code>.  The current implementation
of <code>__declspec</code> is via a built-in macro, but you should not rely
on this implementation detail.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINSERT_005fATTRIBUTES"></a>Target Hook: <em>void</em> <strong>TARGET_INSERT_ATTRIBUTES</strong> <em>(tree <var>node</var>, tree *<var>attr_ptr</var>)</em></dt>
<dd><p>Define this target hook if you want to be able to add attributes to a decl
when it is being created.  This is normally useful for back ends which
wish to implement a pragma by using the attributes which correspond to
the pragma&rsquo;s effect.  The <var>node</var> argument is the decl which is being
created.  The <var>attr_ptr</var> argument is a pointer to the attribute list
for this decl.  The list itself should not be modified, since it may be
shared with other decls, but attributes may be chained on the head of
the list and <code>*<var>attr_ptr</var></code> modified to point to the new
attributes, or a copy of the list may be made if further changes are
needed.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFUNCTION_005fATTRIBUTE_005fINLINABLE_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P</strong> <em>(const_tree <var>fndecl</var>)</em></dt>
<dd><a name="index-inlining"></a>
<p>This target hook returns <code>true</code> if it is ok to inline <var>fndecl</var>
into the current function, despite its having target-specific
attributes, <code>false</code> otherwise.  By default, if a function has a
target specific attribute attached to it, it will not be inlined.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fVALID_005fATTRIBUTE_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_OPTION_VALID_ATTRIBUTE_P</strong> <em>(tree <var>fndecl</var>, tree <var>name</var>, tree <var>args</var>, int <var>flags</var>)</em></dt>
<dd><p>This hook is called to parse <code>attribute(target(&quot;...&quot;))</code>, which
allows setting target-specific options on individual functions.
These function-specific options may differ
from the options specified on the command line.  The hook should return
<code>true</code> if the options are valid.
</p>
<p>The hook should set the <code>DECL_FUNCTION_SPECIFIC_TARGET</code> field in
the function declaration to hold a pointer to a target-specific
<code>struct cl_target_option</code> structure.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fSAVE"></a>Target Hook: <em>void</em> <strong>TARGET_OPTION_SAVE</strong> <em>(struct cl_target_option *<var>ptr</var>)</em></dt>
<dd><p>This hook is called to save any additional target-specific information
in the <code>struct cl_target_option</code> structure for function-specific
options.
See <a href="#Option-file-format">Option file format</a>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fRESTORE"></a>Target Hook: <em>void</em> <strong>TARGET_OPTION_RESTORE</strong> <em>(struct cl_target_option *<var>ptr</var>)</em></dt>
<dd><p>This hook is called to restore any additional target-specific
information in the <code>struct cl_target_option</code> structure for
function-specific options.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fPRINT"></a>Target Hook: <em>void</em> <strong>TARGET_OPTION_PRINT</strong> <em>(FILE *<var>file</var>, int <var>indent</var>, struct cl_target_option *<var>ptr</var>)</em></dt>
<dd><p>This hook is called to print any additional target-specific
information in the <code>struct cl_target_option</code> structure for
function-specific options.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fPRAGMA_005fPARSE"></a>Target Hook: <em>bool</em> <strong>TARGET_OPTION_PRAGMA_PARSE</strong> <em>(tree <var>args</var>, tree <var>pop_target</var>)</em></dt>
<dd><p>This target hook parses the options for <code>#pragma GCC target</code>, which
sets the target-specific options for functions that occur later in the
input stream.  The options accepted should be the same as those handled by the
<code>TARGET_OPTION_VALID_ATTRIBUTE_P</code> hook.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fOVERRIDE"></a>Target Hook: <em>void</em> <strong>TARGET_OPTION_OVERRIDE</strong> <em>(void)</em></dt>
<dd><p>Sometimes certain combinations of command options do not make sense on
a particular target machine.  You can override the hook
<code>TARGET_OPTION_OVERRIDE</code> to take account of this.  This hooks is called
once just after all the command options have been parsed.
</p>
<p>Don&rsquo;t use this hook to turn on various extra optimizations for
<samp>-O</samp>.  That is what <code>TARGET_OPTION_OPTIMIZATION</code> is for.
</p>
<p>If you need to do something whenever the optimization level is
changed via the optimize attribute or pragma, see
<code>TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE</code>
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTION_005fFUNCTION_005fVERSIONS"></a>Target Hook: <em>bool</em> <strong>TARGET_OPTION_FUNCTION_VERSIONS</strong> <em>(tree <var>decl1</var>, tree <var>decl2</var>)</em></dt>
<dd><p>This target hook returns <code>true</code> if <var>DECL1</var> and <var>DECL2</var> are
versions of the same function.  <var>DECL1</var> and <var>DECL2</var> are function
versions if and only if they have the same function signature and
different target specific attributes, that is, they are compiled for
different target machines.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCAN_005fINLINE_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_CAN_INLINE_P</strong> <em>(tree <var>caller</var>, tree <var>callee</var>)</em></dt>
<dd><p>This target hook returns <code>false</code> if the <var>caller</var> function
cannot inline <var>callee</var>, based on target specific information.  By
default, inlining is not allowed if the callee function has function
specific target options and the caller does not use the same options.
</p></dd></dl>

<hr>
<a name="Emulated-TLS"></a>
<div class="header">
<p>
Next: <a href="#MIPS-Coprocessors" accesskey="n" rel="next">MIPS Coprocessors</a>, Previous: <a href="#Target-Attributes" accesskey="p" rel="prev">Target Attributes</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Emulating-TLS"></a>
<h3 class="section">17.26 Emulating TLS</h3>
<a name="index-Emulated-TLS"></a>

<p>For targets whose psABI does not provide Thread Local Storage via
specific relocations and instruction sequences, an emulation layer is
used.  A set of target hooks allows this emulation layer to be
configured for the requirements of a particular target.  For instance
the psABI may in fact specify TLS support in terms of an emulation
layer.
</p>
<p>The emulation layer works by creating a control object for every TLS
object.  To access the TLS object, a lookup function is provided
which, when given the address of the control object, will return the
address of the current thread&rsquo;s instance of the TLS object.
</p>
<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fGET_005fADDRESS"></a>Target Hook: <em>const char *</em> <strong>TARGET_EMUTLS_GET_ADDRESS</strong></dt>
<dd><p>Contains the name of the helper function that uses a TLS control
object to locate a TLS instance.  The default causes libgcc&rsquo;s
emulated TLS helper function to be used.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fREGISTER_005fCOMMON"></a>Target Hook: <em>const char *</em> <strong>TARGET_EMUTLS_REGISTER_COMMON</strong></dt>
<dd><p>Contains the name of the helper function that should be used at
program startup to register TLS objects that are implicitly
initialized to zero.  If this is <code>NULL</code>, all TLS objects will
have explicit initializers.  The default causes libgcc&rsquo;s emulated TLS
registration function to be used.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fVAR_005fSECTION"></a>Target Hook: <em>const char *</em> <strong>TARGET_EMUTLS_VAR_SECTION</strong></dt>
<dd><p>Contains the name of the section in which TLS control variables should
be placed.  The default of <code>NULL</code> allows these to be placed in
any section.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fTMPL_005fSECTION"></a>Target Hook: <em>const char *</em> <strong>TARGET_EMUTLS_TMPL_SECTION</strong></dt>
<dd><p>Contains the name of the section in which TLS initializers should be
placed.  The default of <code>NULL</code> allows these to be placed in any
section.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fVAR_005fPREFIX"></a>Target Hook: <em>const char *</em> <strong>TARGET_EMUTLS_VAR_PREFIX</strong></dt>
<dd><p>Contains the prefix to be prepended to TLS control variable names.
The default of <code>NULL</code> uses a target-specific prefix.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fTMPL_005fPREFIX"></a>Target Hook: <em>const char *</em> <strong>TARGET_EMUTLS_TMPL_PREFIX</strong></dt>
<dd><p>Contains the prefix to be prepended to TLS initializer objects.  The
default of <code>NULL</code> uses a target-specific prefix.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fVAR_005fFIELDS"></a>Target Hook: <em>tree</em> <strong>TARGET_EMUTLS_VAR_FIELDS</strong> <em>(tree <var>type</var>, tree *<var>name</var>)</em></dt>
<dd><p>Specifies a function that generates the FIELD_DECLs for a TLS control
object type.  <var>type</var> is the RECORD_TYPE the fields are for and
<var>name</var> should be filled with the structure tag, if the default of
<code>__emutls_object</code> is unsuitable.  The default creates a type suitable
for libgcc&rsquo;s emulated TLS function.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fVAR_005fINIT"></a>Target Hook: <em>tree</em> <strong>TARGET_EMUTLS_VAR_INIT</strong> <em>(tree <var>var</var>, tree <var>decl</var>, tree <var>tmpl_addr</var>)</em></dt>
<dd><p>Specifies a function that generates the CONSTRUCTOR to initialize a
TLS control object.  <var>var</var> is the TLS control object, <var>decl</var>
is the TLS object and <var>tmpl_addr</var> is the address of the
initializer.  The default initializes libgcc&rsquo;s emulated TLS control object.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fVAR_005fALIGN_005fFIXED"></a>Target Hook: <em>bool</em> <strong>TARGET_EMUTLS_VAR_ALIGN_FIXED</strong></dt>
<dd><p>Specifies whether the alignment of TLS control variable objects is
fixed and should not be increased as some backends may do to optimize
single objects.  The default is false.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEMUTLS_005fDEBUG_005fFORM_005fTLS_005fADDRESS"></a>Target Hook: <em>bool</em> <strong>TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS</strong></dt>
<dd><p>Specifies whether a DWARF <code>DW_OP_form_tls_address</code> location descriptor
may be used to describe emulated TLS control objects.
</p></dd></dl>

<hr>
<a name="MIPS-Coprocessors"></a>
<div class="header">
<p>
Next: <a href="#PCH-Target" accesskey="n" rel="next">PCH Target</a>, Previous: <a href="#Emulated-TLS" accesskey="p" rel="prev">Emulated TLS</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Defining-coprocessor-specifics-for-MIPS-targets_002e"></a>
<h3 class="section">17.27 Defining coprocessor specifics for MIPS targets.</h3>
<a name="index-MIPS-coprocessor_002ddefinition-macros"></a>

<p>The MIPS specification allows MIPS implementations to have as many as 4
coprocessors, each with as many as 32 private registers.  GCC supports
accessing these registers and transferring values between the registers
and memory using asm-ized variables.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">  register unsigned int cp0count asm (&quot;c0r1&quot;);
  unsigned int d;

  d = cp0count + 3;
</pre></div>

<p>(&ldquo;c0r1&rdquo; is the default name of register 1 in coprocessor 0; alternate
names may be added as described below, or the default names may be
overridden entirely in <code>SUBTARGET_CONDITIONAL_REGISTER_USAGE</code>.)
</p>
<p>Coprocessor registers are assumed to be epilogue-used; sets to them will
be preserved even if it does not appear that the register is used again
later in the function.
</p>
<p>Another note: according to the MIPS spec, coprocessor 1 (if present) is
the FPU.  One accesses COP1 registers through standard mips
floating-point support; they are not included in this mechanism.
</p>
<p>There is one macro used in defining the MIPS coprocessor interface which
you may want to override in subtargets; it is described below.
</p>
<hr>
<a name="PCH-Target"></a>
<div class="header">
<p>
Next: <a href="#C_002b_002b-ABI" accesskey="n" rel="next">C++ ABI</a>, Previous: <a href="#MIPS-Coprocessors" accesskey="p" rel="prev">MIPS Coprocessors</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Parameters-for-Precompiled-Header-Validity-Checking"></a>
<h3 class="section">17.28 Parameters for Precompiled Header Validity Checking</h3>
<a name="index-parameters_002c-precompiled-headers"></a>

<dl>
<dt><a name="index-TARGET_005fGET_005fPCH_005fVALIDITY"></a>Target Hook: <em>void *</em> <strong>TARGET_GET_PCH_VALIDITY</strong> <em>(size_t *<var>sz</var>)</em></dt>
<dd><p>This hook returns a pointer to the data needed by
<code>TARGET_PCH_VALID_P</code> and sets
&lsquo;<samp>*<var>sz</var></samp>&rsquo; to the size of the data in bytes.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPCH_005fVALID_005fP"></a>Target Hook: <em>const char *</em> <strong>TARGET_PCH_VALID_P</strong> <em>(const void *<var>data</var>, size_t <var>sz</var>)</em></dt>
<dd><p>This hook checks whether the options used to create a PCH file are
compatible with the current settings.  It returns <code>NULL</code>
if so and a suitable error message if not.  Error messages will
be presented to the user and must be localized using &lsquo;<samp>_(<var>msg</var>)</samp>&rsquo;.
</p>
<p><var>data</var> is the data that was returned by <code>TARGET_GET_PCH_VALIDITY</code>
when the PCH file was created and <var>sz</var> is the size of that data in bytes.
It&rsquo;s safe to assume that the data was created by the same version of the
compiler, so no format checking is needed.
</p>
<p>The default definition of <code>default_pch_valid_p</code> should be
suitable for most targets.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCHECK_005fPCH_005fTARGET_005fFLAGS"></a>Target Hook: <em>const char *</em> <strong>TARGET_CHECK_PCH_TARGET_FLAGS</strong> <em>(int <var>pch_flags</var>)</em></dt>
<dd><p>If this hook is nonnull, the default implementation of
<code>TARGET_PCH_VALID_P</code> will use it to check for compatible values
of <code>target_flags</code>.  <var>pch_flags</var> specifies the value that
<code>target_flags</code> had when the PCH file was created.  The return
value is the same as for <code>TARGET_PCH_VALID_P</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPREPARE_005fPCH_005fSAVE"></a>Target Hook: <em>void</em> <strong>TARGET_PREPARE_PCH_SAVE</strong> <em>(void)</em></dt>
<dd><p>Called before writing out a PCH file.  If the target has some
garbage-collected data that needs to be in a particular state on PCH loads,
it can use this hook to enforce that state.  Very few targets need
to do anything here.
</p></dd></dl>

<hr>
<a name="C_002b_002b-ABI"></a>
<div class="header">
<p>
Next: <a href="#Named-Address-Spaces" accesskey="n" rel="next">Named Address Spaces</a>, Previous: <a href="#PCH-Target" accesskey="p" rel="prev">PCH Target</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="C_002b_002b-ABI-parameters"></a>
<h3 class="section">17.29 C++ ABI parameters</h3>
<a name="index-parameters_002c-c_002b_002b-abi"></a>

<dl>
<dt><a name="index-TARGET_005fCXX_005fGUARD_005fTYPE"></a>Target Hook: <em>tree</em> <strong>TARGET_CXX_GUARD_TYPE</strong> <em>(void)</em></dt>
<dd><p>Define this hook to override the integer type used for guard variables.
These are used to implement one-time construction of static objects.  The
default is long_long_integer_type_node.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fGUARD_005fMASK_005fBIT"></a>Target Hook: <em>bool</em> <strong>TARGET_CXX_GUARD_MASK_BIT</strong> <em>(void)</em></dt>
<dd><p>This hook determines how guard variables are used.  It should return
<code>false</code> (the default) if the first byte should be used.  A return value of
<code>true</code> indicates that only the least significant bit should be used.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fGET_005fCOOKIE_005fSIZE"></a>Target Hook: <em>tree</em> <strong>TARGET_CXX_GET_COOKIE_SIZE</strong> <em>(tree <var>type</var>)</em></dt>
<dd><p>This hook returns the size of the cookie to use when allocating an array
whose elements have the indicated <var>type</var>.  Assumes that it is already
known that a cookie is needed.  The default is
<code>max(sizeof (size_t), alignof(type))</code>, as defined in section 2.7 of the
IA64/Generic C++ ABI.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fCOOKIE_005fHAS_005fSIZE"></a>Target Hook: <em>bool</em> <strong>TARGET_CXX_COOKIE_HAS_SIZE</strong> <em>(void)</em></dt>
<dd><p>This hook should return <code>true</code> if the element size should be stored in
array cookies.  The default is to return <code>false</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fIMPORT_005fEXPORT_005fCLASS"></a>Target Hook: <em>int</em> <strong>TARGET_CXX_IMPORT_EXPORT_CLASS</strong> <em>(tree <var>type</var>, int <var>import_export</var>)</em></dt>
<dd><p>If defined by a backend this hook allows the decision made to export
class <var>type</var> to be overruled.  Upon entry <var>import_export</var>
will contain 1 if the class is going to be exported, -1 if it is going
to be imported and 0 otherwise.  This function should return the
modified value and perform any other actions necessary to support the
backend&rsquo;s targeted operating system.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fCDTOR_005fRETURNS_005fTHIS"></a>Target Hook: <em>bool</em> <strong>TARGET_CXX_CDTOR_RETURNS_THIS</strong> <em>(void)</em></dt>
<dd><p>This hook should return <code>true</code> if constructors and destructors return
the address of the object created/destroyed.  The default is to return
<code>false</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fKEY_005fMETHOD_005fMAY_005fBE_005fINLINE"></a>Target Hook: <em>bool</em> <strong>TARGET_CXX_KEY_METHOD_MAY_BE_INLINE</strong> <em>(void)</em></dt>
<dd><p>This hook returns true if the key method for a class (i.e., the method
which, if defined in the current translation unit, causes the virtual
table to be emitted) may be an inline function.  Under the standard
Itanium C++ ABI the key method may be an inline function so long as
the function is not declared inline in the class definition.  Under
some variants of the ABI, an inline function can never be the key
method.  The default is to return <code>true</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fDETERMINE_005fCLASS_005fDATA_005fVISIBILITY"></a>Target Hook: <em>void</em> <strong>TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY</strong> <em>(tree <var>decl</var>)</em></dt>
<dd><p><var>decl</var> is a virtual table, virtual table table, typeinfo object, or other similar implicit class data object that will be emitted with external linkage in this translation unit.  No ELF visibility has been explicitly specified.  If the target needs to specify a visibility other than that of the containing class, use this hook to set <code>DECL_VISIBILITY</code> and <code>DECL_VISIBILITY_SPECIFIED</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fCLASS_005fDATA_005fALWAYS_005fCOMDAT"></a>Target Hook: <em>bool</em> <strong>TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT</strong> <em>(void)</em></dt>
<dd><p>This hook returns true (the default) if virtual tables and other
similar implicit class data objects are always COMDAT if they have
external linkage.  If this hook returns false, then class data for
classes whose virtual table will be emitted in only one translation
unit will not be COMDAT.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fLIBRARY_005fRTTI_005fCOMDAT"></a>Target Hook: <em>bool</em> <strong>TARGET_CXX_LIBRARY_RTTI_COMDAT</strong> <em>(void)</em></dt>
<dd><p>This hook returns true (the default) if the RTTI information for
the basic types which is defined in the C++ runtime should always
be COMDAT, false if it should not be COMDAT.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fUSE_005fAEABI_005fATEXIT"></a>Target Hook: <em>bool</em> <strong>TARGET_CXX_USE_AEABI_ATEXIT</strong> <em>(void)</em></dt>
<dd><p>This hook returns true if <code>__aeabi_atexit</code> (as defined by the ARM EABI)
should be used to register static destructors when <samp>-fuse-cxa-atexit</samp>
is in effect.  The default is to return false to use <code>__cxa_atexit</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fUSE_005fATEXIT_005fFOR_005fCXA_005fATEXIT"></a>Target Hook: <em>bool</em> <strong>TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT</strong> <em>(void)</em></dt>
<dd><p>This hook returns true if the target <code>atexit</code> function can be used
in the same manner as <code>__cxa_atexit</code> to register C++ static
destructors. This requires that <code>atexit</code>-registered functions in
shared libraries are run in the correct order when the libraries are
unloaded. The default is to return false.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fADJUST_005fCLASS_005fAT_005fDEFINITION"></a>Target Hook: <em>void</em> <strong>TARGET_CXX_ADJUST_CLASS_AT_DEFINITION</strong> <em>(tree <var>type</var>)</em></dt>
<dd><p><var>type</var> is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just been defined.  Use this hook to make adjustments to the class (eg, tweak visibility or perform any other required target modifications).
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCXX_005fDECL_005fMANGLING_005fCONTEXT"></a>Target Hook: <em>tree</em> <strong>TARGET_CXX_DECL_MANGLING_CONTEXT</strong> <em>(const_tree <var>decl</var>)</em></dt>
<dd><p>Return target-specific mangling context of <var>decl</var> or <code>NULL_TREE</code>.
</p></dd></dl>

<hr>
<a name="Named-Address-Spaces"></a>
<div class="header">
<p>
Next: <a href="#Misc" accesskey="n" rel="next">Misc</a>, Previous: <a href="#C_002b_002b-ABI" accesskey="p" rel="prev">C++ ABI</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Adding-support-for-named-address-spaces"></a>
<h3 class="section">17.30 Adding support for named address spaces</h3>
<a name="index-named-address-spaces"></a>

<p>The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275
standards committee, <cite>Programming Languages - C - Extensions to
support embedded processors</cite>, specifies a syntax for embedded
processors to specify alternate address spaces.  You can configure a
GCC port to support section 5.1 of the draft report to add support for
address spaces other than the default address space.  These address
spaces are new keywords that are similar to the <code>volatile</code> and
<code>const</code> type attributes.
</p>
<p>Pointers to named address spaces can have a different size than
pointers to the generic address space.
</p>
<p>For example, the SPU port uses the <code>__ea</code> address space to refer
to memory in the host processor, rather than memory local to the SPU
processor.  Access to memory in the <code>__ea</code> address space involves
issuing DMA operations to move data between the host processor and the
local processor memory address space.  Pointers in the <code>__ea</code>
address space are either 32 bits or 64 bits based on the
<samp>-mea32</samp> or <samp>-mea64</samp> switches (native SPU pointers are
always 32 bits).
</p>
<p>Internally, address spaces are represented as a small integer in the
range 0 to 15 with address space 0 being reserved for the generic
address space.
</p>
<p>To register a named address space qualifier keyword with the C front end,
the target may call the <code>c_register_addr_space</code> routine.  For example,
the SPU port uses the following to declare <code>__ea</code> as the keyword for
named address space #1:
</p><div class="smallexample">
<pre class="smallexample">#define ADDR_SPACE_EA 1
c_register_addr_space (&quot;__ea&quot;, ADDR_SPACE_EA);
</pre></div>

<dl>
<dt><a name="index-TARGET_005fADDR_005fSPACE_005fPOINTER_005fMODE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_ADDR_SPACE_POINTER_MODE</strong> <em>(addr_space_t <var>address_space</var>)</em></dt>
<dd><p>Define this to return the machine mode to use for pointers to
<var>address_space</var> if the target supports named address spaces.
The default version of this hook returns <code>ptr_mode</code> for the
generic address space only.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fADDR_005fSPACE_005fADDRESS_005fMODE"></a>Target Hook: <em>enum machine_mode</em> <strong>TARGET_ADDR_SPACE_ADDRESS_MODE</strong> <em>(addr_space_t <var>address_space</var>)</em></dt>
<dd><p>Define this to return the machine mode to use for addresses in
<var>address_space</var> if the target supports named address spaces.
The default version of this hook returns <code>Pmode</code> for the
generic address space only.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fADDR_005fSPACE_005fVALID_005fPOINTER_005fMODE"></a>Target Hook: <em>bool</em> <strong>TARGET_ADDR_SPACE_VALID_POINTER_MODE</strong> <em>(enum machine_mode <var>mode</var>, addr_space_t <var>as</var>)</em></dt>
<dd><p>Define this to return nonzero if the port can handle pointers
with machine mode <var>mode</var> to address space <var>as</var>.  This target
hook is the same as the <code>TARGET_VALID_POINTER_MODE</code> target hook,
except that it includes explicit named address space support.  The default
version of this hook returns true for the modes returned by either the
<code>TARGET_ADDR_SPACE_POINTER_MODE</code> or <code>TARGET_ADDR_SPACE_ADDRESS_MODE</code>
target hooks for the given address space.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fADDR_005fSPACE_005fLEGITIMATE_005fADDRESS_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P</strong> <em>(enum machine_mode <var>mode</var>, rtx <var>exp</var>, bool <var>strict</var>, addr_space_t <var>as</var>)</em></dt>
<dd><p>Define this to return true if <var>exp</var> is a valid address for mode
<var>mode</var> in the named address space <var>as</var>.  The <var>strict</var>
parameter says whether strict addressing is in effect after reload has
finished.  This target hook is the same as the
<code>TARGET_LEGITIMATE_ADDRESS_P</code> target hook, except that it includes
explicit named address space support.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fADDR_005fSPACE_005fLEGITIMIZE_005fADDRESS"></a>Target Hook: <em>rtx</em> <strong>TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS</strong> <em>(rtx <var>x</var>, rtx <var>oldx</var>, enum machine_mode <var>mode</var>, addr_space_t <var>as</var>)</em></dt>
<dd><p>Define this to modify an invalid address <var>x</var> to be a valid address
with mode <var>mode</var> in the named address space <var>as</var>.  This target
hook is the same as the <code>TARGET_LEGITIMIZE_ADDRESS</code> target hook,
except that it includes explicit named address space support.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fADDR_005fSPACE_005fSUBSET_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_ADDR_SPACE_SUBSET_P</strong> <em>(addr_space_t <var>subset</var>, addr_space_t <var>superset</var>)</em></dt>
<dd><p>Define this to return whether the <var>subset</var> named address space is
contained within the <var>superset</var> named address space.  Pointers to
a named address space that is a subset of another named address space
will be converted automatically without a cast if used together in
arithmetic operations.  Pointers to a superset address space can be
converted to pointers to a subset address space via explicit casts.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fADDR_005fSPACE_005fCONVERT"></a>Target Hook: <em>rtx</em> <strong>TARGET_ADDR_SPACE_CONVERT</strong> <em>(rtx <var>op</var>, tree <var>from_type</var>, tree <var>to_type</var>)</em></dt>
<dd><p>Define this to convert the pointer expression represented by the RTL
<var>op</var> with type <var>from_type</var> that points to a named address
space to a new pointer expression with type <var>to_type</var> that points
to a different named address space.  When this hook it called, it is
guaranteed that one of the two address spaces is a subset of the other,
as determined by the <code>TARGET_ADDR_SPACE_SUBSET_P</code> target hook.
</p></dd></dl>

<hr>
<a name="Misc"></a>
<div class="header">
<p>
Previous: <a href="#Named-Address-Spaces" accesskey="p" rel="prev">Named Address Spaces</a>, Up: <a href="#Target-Macros" accesskey="u" rel="up">Target Macros</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Miscellaneous-Parameters"></a>
<h3 class="section">17.31 Miscellaneous Parameters</h3>
<a name="index-parameters_002c-miscellaneous"></a>

<p>Here are several miscellaneous parameters.
</p>
<dl>
<dt><a name="index-HAS_005fLONG_005fCOND_005fBRANCH"></a>Macro: <strong>HAS_LONG_COND_BRANCH</strong></dt>
<dd><p>Define this boolean macro to indicate whether or not your architecture
has conditional branches that can span all of memory.  It is used in
conjunction with an optimization that partitions hot and cold basic
blocks into separate sections of the executable.  If this macro is
set to false, gcc will convert any conditional branches that attempt
to cross between sections into unconditional branches or indirect jumps.
</p></dd></dl>

<dl>
<dt><a name="index-HAS_005fLONG_005fUNCOND_005fBRANCH"></a>Macro: <strong>HAS_LONG_UNCOND_BRANCH</strong></dt>
<dd><p>Define this boolean macro to indicate whether or not your architecture
has unconditional branches that can span all of memory.  It is used in
conjunction with an optimization that partitions hot and cold basic
blocks into separate sections of the executable.  If this macro is
set to false, gcc will convert any unconditional branches that attempt
to cross between sections into indirect jumps.
</p></dd></dl>

<dl>
<dt><a name="index-CASE_005fVECTOR_005fMODE"></a>Macro: <strong>CASE_VECTOR_MODE</strong></dt>
<dd><p>An alias for a machine mode name.  This is the machine mode that
elements of a jump-table should have.
</p></dd></dl>

<dl>
<dt><a name="index-CASE_005fVECTOR_005fSHORTEN_005fMODE"></a>Macro: <strong>CASE_VECTOR_SHORTEN_MODE</strong> <em>(<var>min_offset</var>, <var>max_offset</var>, <var>body</var>)</em></dt>
<dd><p>Optional: return the preferred mode for an <code>addr_diff_vec</code>
when the minimum and maximum offset are known.  If you define this,
it enables extra code in branch shortening to deal with <code>addr_diff_vec</code>.
To make this work, you also have to define <code>INSN_ALIGN</code> and
make the alignment for <code>addr_diff_vec</code> explicit.
The <var>body</var> argument is provided so that the offset_unsigned and scale
flags can be updated.
</p></dd></dl>

<dl>
<dt><a name="index-CASE_005fVECTOR_005fPC_005fRELATIVE"></a>Macro: <strong>CASE_VECTOR_PC_RELATIVE</strong></dt>
<dd><p>Define this macro to be a C expression to indicate when jump-tables
should contain relative addresses.  You need not define this macro if
jump-tables never contain relative addresses, or jump-tables should
contain relative addresses only when <samp>-fPIC</samp> or <samp>-fPIC</samp>
is in effect.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCASE_005fVALUES_005fTHRESHOLD"></a>Target Hook: <em>unsigned int</em> <strong>TARGET_CASE_VALUES_THRESHOLD</strong> <em>(void)</em></dt>
<dd><p>This function return the smallest number of different values for which it
is best to use a jump-table instead of a tree of conditional branches.
The default is four for machines with a <code>casesi</code> instruction and
five otherwise.  This is best for most machines.
</p></dd></dl>

<dl>
<dt><a name="index-WORD_005fREGISTER_005fOPERATIONS"></a>Macro: <strong>WORD_REGISTER_OPERATIONS</strong></dt>
<dd><p>Define this macro if operations between registers with integral mode
smaller than a word are always performed on the entire register.
Most RISC machines have this property and most CISC machines do not.
</p></dd></dl>

<dl>
<dt><a name="index-LOAD_005fEXTEND_005fOP"></a>Macro: <strong>LOAD_EXTEND_OP</strong> <em>(<var>mem_mode</var>)</em></dt>
<dd><p>Define this macro to be a C expression indicating when insns that read
memory in <var>mem_mode</var>, an integral mode narrower than a word, set the
bits outside of <var>mem_mode</var> to be either the sign-extension or the
zero-extension of the data read.  Return <code>SIGN_EXTEND</code> for values
of <var>mem_mode</var> for which the
insn sign-extends, <code>ZERO_EXTEND</code> for which it zero-extends, and
<code>UNKNOWN</code> for other modes.
</p>
<p>This macro is not called with <var>mem_mode</var> non-integral or with a width
greater than or equal to <code>BITS_PER_WORD</code>, so you may return any
value in this case.  Do not define this macro if it would always return
<code>UNKNOWN</code>.  On machines where this macro is defined, you will normally
define it as the constant <code>SIGN_EXTEND</code> or <code>ZERO_EXTEND</code>.
</p>
<p>You may return a non-<code>UNKNOWN</code> value even if for some hard registers
the sign extension is not performed, if for the <code>REGNO_REG_CLASS</code>
of these hard registers <code>CANNOT_CHANGE_MODE_CLASS</code> returns nonzero
when the <var>from</var> mode is <var>mem_mode</var> and the <var>to</var> mode is any
integral mode larger than this but not larger than <code>word_mode</code>.
</p>
<p>You must return <code>UNKNOWN</code> if for some hard registers that allow this
mode, <code>CANNOT_CHANGE_MODE_CLASS</code> says that they cannot change to
<code>word_mode</code>, but that they can change to another integral mode that
is larger then <var>mem_mode</var> but still smaller than <code>word_mode</code>.
</p></dd></dl>

<dl>
<dt><a name="index-SHORT_005fIMMEDIATES_005fSIGN_005fEXTEND"></a>Macro: <strong>SHORT_IMMEDIATES_SIGN_EXTEND</strong></dt>
<dd><p>Define this macro if loading short immediate values into registers sign
extends.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMIN_005fDIVISIONS_005fFOR_005fRECIP_005fMUL"></a>Target Hook: <em>unsigned int</em> <strong>TARGET_MIN_DIVISIONS_FOR_RECIP_MUL</strong> <em>(enum machine_mode <var>mode</var>)</em></dt>
<dd><p>When <samp>-ffast-math</samp> is in effect, GCC tries to optimize
divisions by the same divisor, by turning them into multiplications by
the reciprocal.  This target hook specifies the minimum number of divisions
that should be there for GCC to perform the optimization for a variable
of mode <var>mode</var>.  The default implementation returns 3 if the machine
has an instruction for the division, and 2 if it does not.
</p></dd></dl>

<dl>
<dt><a name="index-MOVE_005fMAX"></a>Macro: <strong>MOVE_MAX</strong></dt>
<dd><p>The maximum number of bytes that a single instruction can move quickly
between memory and registers or between two memory locations.
</p></dd></dl>

<dl>
<dt><a name="index-MAX_005fMOVE_005fMAX"></a>Macro: <strong>MAX_MOVE_MAX</strong></dt>
<dd><p>The maximum number of bytes that a single instruction can move quickly
between memory and registers or between two memory locations.  If this
is undefined, the default is <code>MOVE_MAX</code>.  Otherwise, it is the
constant value that is the largest value that <code>MOVE_MAX</code> can have
at run-time.
</p></dd></dl>

<dl>
<dt><a name="index-SHIFT_005fCOUNT_005fTRUNCATED"></a>Macro: <strong>SHIFT_COUNT_TRUNCATED</strong></dt>
<dd><p>A C expression that is nonzero if on this machine the number of bits
actually used for the count of a shift operation is equal to the number
of bits needed to represent the size of the object being shifted.  When
this macro is nonzero, the compiler will assume that it is safe to omit
a sign-extend, zero-extend, and certain bitwise &lsquo;and&rsquo; instructions that
truncates the count of a shift operation.  On machines that have
instructions that act on bit-fields at variable positions, which may
include &lsquo;bit test&rsquo; instructions, a nonzero <code>SHIFT_COUNT_TRUNCATED</code>
also enables deletion of truncations of the values that serve as
arguments to bit-field instructions.
</p>
<p>If both types of instructions truncate the count (for shifts) and
position (for bit-field operations), or if no variable-position bit-field
instructions exist, you should define this macro.
</p>
<p>However, on some machines, such as the 80386 and the 680x0, truncation
only applies to shift operations and not the (real or pretended)
bit-field operations.  Define <code>SHIFT_COUNT_TRUNCATED</code> to be zero on
such machines.  Instead, add patterns to the <samp>md</samp> file that include
the implied truncation of the shift instructions.
</p>
<p>You need not define this macro if it would always have the value of zero.
</p></dd></dl>

<a name="TARGET_005fSHIFT_005fTRUNCATION_005fMASK"></a><dl>
<dt><a name="index-TARGET_005fSHIFT_005fTRUNCATION_005fMASK"></a>Target Hook: <em>unsigned HOST_WIDE_INT</em> <strong>TARGET_SHIFT_TRUNCATION_MASK</strong> <em>(enum machine_mode <var>mode</var>)</em></dt>
<dd><p>This function describes how the standard shift patterns for <var>mode</var>
deal with shifts by negative amounts or by more than the width of the mode.
See <a href="#shift-patterns">shift patterns</a>.
</p>
<p>On many machines, the shift patterns will apply a mask <var>m</var> to the
shift count, meaning that a fixed-width shift of <var>x</var> by <var>y</var> is
equivalent to an arbitrary-width shift of <var>x</var> by <var>y &amp; m</var>.  If
this is true for mode <var>mode</var>, the function should return <var>m</var>,
otherwise it should return 0.  A return value of 0 indicates that no
particular behavior is guaranteed.
</p>
<p>Note that, unlike <code>SHIFT_COUNT_TRUNCATED</code>, this function does
<em>not</em> apply to general shift rtxes; it applies only to instructions
that are generated by the named shift patterns.
</p>
<p>The default implementation of this function returns
<code>GET_MODE_BITSIZE (<var>mode</var>) - 1</code> if <code>SHIFT_COUNT_TRUNCATED</code>
and 0 otherwise.  This definition is always safe, but if
<code>SHIFT_COUNT_TRUNCATED</code> is false, and some shift patterns
nevertheless truncate the shift count, you may get better code
by overriding it.
</p></dd></dl>

<dl>
<dt><a name="index-TRULY_005fNOOP_005fTRUNCATION"></a>Macro: <strong>TRULY_NOOP_TRUNCATION</strong> <em>(<var>outprec</var>, <var>inprec</var>)</em></dt>
<dd><p>A C expression which is nonzero if on this machine it is safe to
&ldquo;convert&rdquo; an integer of <var>inprec</var> bits to one of <var>outprec</var>
bits (where <var>outprec</var> is smaller than <var>inprec</var>) by merely
operating on it as if it had only <var>outprec</var> bits.
</p>
<p>On many machines, this expression can be 1.
</p>
<p>When <code>TRULY_NOOP_TRUNCATION</code> returns 1 for a pair of sizes for
modes for which <code>MODES_TIEABLE_P</code> is 0, suboptimal code can result.
If this is the case, making <code>TRULY_NOOP_TRUNCATION</code> return 0 in
such cases may improve things.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMODE_005fREP_005fEXTENDED"></a>Target Hook: <em>int</em> <strong>TARGET_MODE_REP_EXTENDED</strong> <em>(enum machine_mode <var>mode</var>, enum machine_mode <var>rep_mode</var>)</em></dt>
<dd><p>The representation of an integral mode can be such that the values
are always extended to a wider integral mode.  Return
<code>SIGN_EXTEND</code> if values of <var>mode</var> are represented in
sign-extended form to <var>rep_mode</var>.  Return <code>UNKNOWN</code>
otherwise.  (Currently, none of the targets use zero-extended
representation this way so unlike <code>LOAD_EXTEND_OP</code>,
<code>TARGET_MODE_REP_EXTENDED</code> is expected to return either
<code>SIGN_EXTEND</code> or <code>UNKNOWN</code>.  Also no target extends
<var>mode</var> to <var>rep_mode</var> so that <var>rep_mode</var> is not the next
widest integral mode and currently we take advantage of this fact.)
</p>
<p>Similarly to <code>LOAD_EXTEND_OP</code> you may return a non-<code>UNKNOWN</code>
value even if the extension is not performed on certain hard registers
as long as for the <code>REGNO_REG_CLASS</code> of these hard registers
<code>CANNOT_CHANGE_MODE_CLASS</code> returns nonzero.
</p>
<p>Note that <code>TARGET_MODE_REP_EXTENDED</code> and <code>LOAD_EXTEND_OP</code>
describe two related properties.  If you define
<code>TARGET_MODE_REP_EXTENDED (mode, word_mode)</code> you probably also want
to define <code>LOAD_EXTEND_OP (mode)</code> to return the same type of
extension.
</p>
<p>In order to enforce the representation of <code>mode</code>,
<code>TRULY_NOOP_TRUNCATION</code> should return false when truncating to
<code>mode</code>.
</p></dd></dl>

<dl>
<dt><a name="index-STORE_005fFLAG_005fVALUE"></a>Macro: <strong>STORE_FLAG_VALUE</strong></dt>
<dd><p>A C expression describing the value returned by a comparison operator
with an integral mode and stored by a store-flag instruction
(&lsquo;<samp>cstore<var>mode</var>4</samp>&rsquo;) when the condition is true.  This description must
apply to <em>all</em> the &lsquo;<samp>cstore<var>mode</var>4</samp>&rsquo; patterns and all the
comparison operators whose results have a <code>MODE_INT</code> mode.
</p>
<p>A value of 1 or -1 means that the instruction implementing the
comparison operator returns exactly 1 or -1 when the comparison is true
and 0 when the comparison is false.  Otherwise, the value indicates
which bits of the result are guaranteed to be 1 when the comparison is
true.  This value is interpreted in the mode of the comparison
operation, which is given by the mode of the first operand in the
&lsquo;<samp>cstore<var>mode</var>4</samp>&rsquo; pattern.  Either the low bit or the sign bit of
<code>STORE_FLAG_VALUE</code> be on.  Presently, only those bits are used by
the compiler.
</p>
<p>If <code>STORE_FLAG_VALUE</code> is neither 1 or -1, the compiler will
generate code that depends only on the specified bits.  It can also
replace comparison operators with equivalent operations if they cause
the required bits to be set, even if the remaining bits are undefined.
For example, on a machine whose comparison operators return an
<code>SImode</code> value and where <code>STORE_FLAG_VALUE</code> is defined as
&lsquo;<samp>0x80000000</samp>&rsquo;, saying that just the sign bit is relevant, the
expression
</p>
<div class="smallexample">
<pre class="smallexample">(ne:SI (and:SI <var>x</var> (const_int <var>power-of-2</var>)) (const_int 0))
</pre></div>

<p>can be converted to
</p>
<div class="smallexample">
<pre class="smallexample">(ashift:SI <var>x</var> (const_int <var>n</var>))
</pre></div>

<p>where <var>n</var> is the appropriate shift count to move the bit being
tested into the sign bit.
</p>
<p>There is no way to describe a machine that always sets the low-order bit
for a true value, but does not guarantee the value of any other bits,
but we do not know of any machine that has such an instruction.  If you
are trying to port GCC to such a machine, include an instruction to
perform a logical-and of the result with 1 in the pattern for the
comparison operators and let us know at <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>.
</p>
<p>Often, a machine will have multiple instructions that obtain a value
from a comparison (or the condition codes).  Here are rules to guide the
choice of value for <code>STORE_FLAG_VALUE</code>, and hence the instructions
to be used:
</p>
<ul>
<li> Use the shortest sequence that yields a valid definition for
<code>STORE_FLAG_VALUE</code>.  It is more efficient for the compiler to
&ldquo;normalize&rdquo; the value (convert it to, e.g., 1 or 0) than for the
comparison operators to do so because there may be opportunities to
combine the normalization with other operations.

</li><li> For equal-length sequences, use a value of 1 or -1, with -1 being
slightly preferred on machines with expensive jumps and 1 preferred on
other machines.

</li><li> As a second choice, choose a value of &lsquo;<samp>0x80000001</samp>&rsquo; if instructions
exist that set both the sign and low-order bits but do not define the
others.

</li><li> Otherwise, use a value of &lsquo;<samp>0x80000000</samp>&rsquo;.
</li></ul>

<p>Many machines can produce both the value chosen for
<code>STORE_FLAG_VALUE</code> and its negation in the same number of
instructions.  On those machines, you should also define a pattern for
those cases, e.g., one matching
</p>
<div class="smallexample">
<pre class="smallexample">(set <var>A</var> (neg:<var>m</var> (ne:<var>m</var> <var>B</var> <var>C</var>)))
</pre></div>

<p>Some machines can also perform <code>and</code> or <code>plus</code> operations on
condition code values with less instructions than the corresponding
&lsquo;<samp>cstore<var>mode</var>4</samp>&rsquo; insn followed by <code>and</code> or <code>plus</code>.  On those
machines, define the appropriate patterns.  Use the names <code>incscc</code>
and <code>decscc</code>, respectively, for the patterns which perform
<code>plus</code> or <code>minus</code> operations on condition code values.  See
<samp>rs6000.md</samp> for some examples.  The GNU Superoptimizer can be used to
find such instruction sequences on other machines.
</p>
<p>If this macro is not defined, the default value, 1, is used.  You need
not define <code>STORE_FLAG_VALUE</code> if the machine has no store-flag
instructions, or if the value generated by these instructions is 1.
</p></dd></dl>

<dl>
<dt><a name="index-FLOAT_005fSTORE_005fFLAG_005fVALUE"></a>Macro: <strong>FLOAT_STORE_FLAG_VALUE</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression that gives a nonzero <code>REAL_VALUE_TYPE</code> value that is
returned when comparison operators with floating-point results are true.
Define this macro on machines that have comparison operations that return
floating-point values.  If there are no such operations, do not define
this macro.
</p></dd></dl>

<dl>
<dt><a name="index-VECTOR_005fSTORE_005fFLAG_005fVALUE"></a>Macro: <strong>VECTOR_STORE_FLAG_VALUE</strong> <em>(<var>mode</var>)</em></dt>
<dd><p>A C expression that gives a rtx representing the nonzero true element
for vector comparisons.  The returned rtx should be valid for the inner
mode of <var>mode</var> which is guaranteed to be a vector mode.  Define
this macro on machines that have vector comparison operations that
return a vector result.  If there are no such operations, do not define
this macro.  Typically, this macro is defined as <code>const1_rtx</code> or
<code>constm1_rtx</code>.  This macro may return <code>NULL_RTX</code> to prevent
the compiler optimizing such vector comparison operations for the
given mode.
</p></dd></dl>

<dl>
<dt><a name="index-CLZ_005fDEFINED_005fVALUE_005fAT_005fZERO"></a>Macro: <strong>CLZ_DEFINED_VALUE_AT_ZERO</strong> <em>(<var>mode</var>, <var>value</var>)</em></dt>
<dt><a name="index-CTZ_005fDEFINED_005fVALUE_005fAT_005fZERO"></a>Macro: <strong>CTZ_DEFINED_VALUE_AT_ZERO</strong> <em>(<var>mode</var>, <var>value</var>)</em></dt>
<dd><p>A C expression that indicates whether the architecture defines a value
for <code>clz</code> or <code>ctz</code> with a zero operand.
A result of <code>0</code> indicates the value is undefined.
If the value is defined for only the RTL expression, the macro should
evaluate to <code>1</code>; if the value applies also to the corresponding optab
entry (which is normally the case if it expands directly into
the corresponding RTL), then the macro should evaluate to <code>2</code>.
In the cases where the value is defined, <var>value</var> should be set to
this value.
</p>
<p>If this macro is not defined, the value of <code>clz</code> or
<code>ctz</code> at zero is assumed to be undefined.
</p>
<p>This macro must be defined if the target&rsquo;s expansion for <code>ffs</code>
relies on a particular value to get correct results.  Otherwise it
is not necessary, though it may be used to optimize some corner cases, and
to provide a default expansion for the <code>ffs</code> optab.
</p>
<p>Note that regardless of this macro the &ldquo;definedness&rdquo; of <code>clz</code>
and <code>ctz</code> at zero do <em>not</em> extend to the builtin functions
visible to the user.  Thus one may be free to adjust the value at will
to match the target expansion of these operations without fear of
breaking the API.
</p></dd></dl>

<dl>
<dt><a name="index-Pmode"></a>Macro: <strong>Pmode</strong></dt>
<dd><p>An alias for the machine mode for pointers.  On most machines, define
this to be the integer mode corresponding to the width of a hardware
pointer; <code>SImode</code> on 32-bit machine or <code>DImode</code> on 64-bit machines.
On some machines you must define this to be one of the partial integer
modes, such as <code>PSImode</code>.
</p>
<p>The width of <code>Pmode</code> must be at least as large as the value of
<code>POINTER_SIZE</code>.  If it is not equal, you must define the macro
<code>POINTERS_EXTEND_UNSIGNED</code> to specify how pointers are extended
to <code>Pmode</code>.
</p></dd></dl>

<dl>
<dt><a name="index-FUNCTION_005fMODE"></a>Macro: <strong>FUNCTION_MODE</strong></dt>
<dd><p>An alias for the machine mode used for memory references to functions
being called, in <code>call</code> RTL expressions.  On most CISC machines,
where an instruction can begin at any byte address, this should be
<code>QImode</code>.  On most RISC machines, where all instructions have fixed
size and alignment, this should be a mode with the same size and alignment
as the machine instruction words - typically <code>SImode</code> or <code>HImode</code>.
</p></dd></dl>

<dl>
<dt><a name="index-STDC_005f0_005fIN_005fSYSTEM_005fHEADERS"></a>Macro: <strong>STDC_0_IN_SYSTEM_HEADERS</strong></dt>
<dd><p>In normal operation, the preprocessor expands <code>__STDC__</code> to the
constant 1, to signify that GCC conforms to ISO Standard C.  On some
hosts, like Solaris, the system compiler uses a different convention,
where <code>__STDC__</code> is normally 0, but is 1 if the user specifies
strict conformance to the C Standard.
</p>
<p>Defining <code>STDC_0_IN_SYSTEM_HEADERS</code> makes GNU CPP follows the host
convention when processing system header files, but when processing user
files <code>__STDC__</code> will always expand to 1.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fC_005fPREINCLUDE"></a>C Target Hook: <em>const char *</em> <strong>TARGET_C_PREINCLUDE</strong> <em>(void)</em></dt>
<dd><p>Define this hook to return the name of a header file to be included at the start of all compilations, as if it had been included with <code>#include &lt;<var>file</var>&gt;</code>.  If this hook returns <code>NULL</code>, or is not defined, or the header is not found, or if the user specifies <samp>-ffreestanding</samp> or <samp>-nostdinc</samp>, no header is included.
</p>
<p>This hook can be used together with a header provided by the system C library to implement ISO C requirements for certain macros to be predefined that describe properties of the whole implementation rather than just the compiler.
</p></dd></dl>

<dl>
<dt><a name="index-NO_005fIMPLICIT_005fEXTERN_005fC"></a>Macro: <strong>NO_IMPLICIT_EXTERN_C</strong></dt>
<dd><p>Define this macro if the system header files support C++ as well as C.
This macro inhibits the usual method of using system header files in
C++, which is to pretend that the file&rsquo;s contents are enclosed in
&lsquo;<samp>extern &quot;C&quot; {&hellip;}</samp>&rsquo;.
</p></dd></dl>

<a name="index-_0023pragma"></a>
<a name="index-pragma"></a>
<dl>
<dt><a name="index-REGISTER_005fTARGET_005fPRAGMAS"></a>Macro: <strong>REGISTER_TARGET_PRAGMAS</strong> <em>()</em></dt>
<dd><p>Define this macro if you want to implement any target-specific pragmas.
If defined, it is a C expression which makes a series of calls to
<code>c_register_pragma</code> or <code>c_register_pragma_with_expansion</code>
for each pragma.  The macro may also do any
setup required for the pragmas.
</p>
<p>The primary reason to define this macro is to provide compatibility with
other compilers for the same target.  In general, we discourage
definition of target-specific pragmas for GCC.
</p>
<p>If the pragma can be implemented by attributes then you should consider
defining the target hook &lsquo;<samp>TARGET_INSERT_ATTRIBUTES</samp>&rsquo; as well.
</p>
<p>Preprocessor macros that appear on pragma lines are not expanded.  All
&lsquo;<samp>#pragma</samp>&rsquo; directives that do not match any registered pragma are
silently ignored, unless the user specifies <samp>-Wunknown-pragmas</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-c_005fregister_005fpragma"></a>Function: <em>void</em> <strong>c_register_pragma</strong> <em>(const char *<var>space</var>, const char *<var>name</var>, void (*<var>callback</var>) (struct cpp_reader *))</em></dt>
<dt><a name="index-c_005fregister_005fpragma_005fwith_005fexpansion"></a>Function: <em>void</em> <strong>c_register_pragma_with_expansion</strong> <em>(const char *<var>space</var>, const char *<var>name</var>, void (*<var>callback</var>) (struct cpp_reader *))</em></dt>
<dd>
<p>Each call to <code>c_register_pragma</code> or
<code>c_register_pragma_with_expansion</code> establishes one pragma.  The
<var>callback</var> routine will be called when the preprocessor encounters a
pragma of the form
</p>
<div class="smallexample">
<pre class="smallexample">#pragma [<var>space</var>] <var>name</var> &hellip;
</pre></div>

<p><var>space</var> is the case-sensitive namespace of the pragma, or
<code>NULL</code> to put the pragma in the global namespace.  The callback
routine receives <var>pfile</var> as its first argument, which can be passed
on to cpplib&rsquo;s functions if necessary.  You can lex tokens after the
<var>name</var> by calling <code>pragma_lex</code>.  Tokens that are not read by the
callback will be silently ignored.  The end of the line is indicated by
a token of type <code>CPP_EOF</code>.  Macro expansion occurs on the
arguments of pragmas registered with
<code>c_register_pragma_with_expansion</code> but not on the arguments of
pragmas registered with <code>c_register_pragma</code>.
</p>
<p>Note that the use of <code>pragma_lex</code> is specific to the C and C++
compilers.  It will not work in the Java or Fortran compilers, or any
other language compilers for that matter.  Thus if <code>pragma_lex</code> is going
to be called from target-specific code, it must only be done so when
building the C and C++ compilers.  This can be done by defining the
variables <code>c_target_objs</code> and <code>cxx_target_objs</code> in the
target entry in the <samp>config.gcc</samp> file.  These variables should name
the target-specific, language-specific object file which contains the
code that uses <code>pragma_lex</code>.  Note it will also be necessary to add a
rule to the makefile fragment pointed to by <code>tmake_file</code> that shows
how to build this object file.
</p></dd></dl>

<dl>
<dt><a name="index-HANDLE_005fPRAGMA_005fPACK_005fWITH_005fEXPANSION"></a>Macro: <strong>HANDLE_PRAGMA_PACK_WITH_EXPANSION</strong></dt>
<dd><p>Define this macro if macros should be expanded in the
arguments of &lsquo;<samp>#pragma pack</samp>&rsquo;.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fDEFAULT_005fPACK_005fSTRUCT"></a>Macro: <strong>TARGET_DEFAULT_PACK_STRUCT</strong></dt>
<dd><p>If your target requires a structure packing default other than 0 (meaning
the machine default), define this macro to the necessary value (in bytes).
This must be a value that would also be valid to use with
&lsquo;<samp>#pragma pack()</samp>&rsquo; (that is, a small power of two).
</p></dd></dl>

<dl>
<dt><a name="index-DOLLARS_005fIN_005fIDENTIFIERS"></a>Macro: <strong>DOLLARS_IN_IDENTIFIERS</strong></dt>
<dd><p>Define this macro to control use of the character &lsquo;<samp>$</samp>&rsquo; in
identifier names for the C family of languages.  0 means &lsquo;<samp>$</samp>&rsquo; is
not allowed by default; 1 means it is allowed.  1 is the default;
there is no need to define this macro in that case.
</p></dd></dl>

<dl>
<dt><a name="index-INSN_005fSETS_005fARE_005fDELAYED"></a>Macro: <strong>INSN_SETS_ARE_DELAYED</strong> <em>(<var>insn</var>)</em></dt>
<dd><p>Define this macro as a C expression that is nonzero if it is safe for the
delay slot scheduler to place instructions in the delay slot of <var>insn</var>,
even if they appear to use a resource set or clobbered in <var>insn</var>.
<var>insn</var> is always a <code>jump_insn</code> or an <code>insn</code>; GCC knows that
every <code>call_insn</code> has this behavior.  On machines where some <code>insn</code>
or <code>jump_insn</code> is really a function call and hence has this behavior,
you should define this macro.
</p>
<p>You need not define this macro if it would always return zero.
</p></dd></dl>

<dl>
<dt><a name="index-INSN_005fREFERENCES_005fARE_005fDELAYED"></a>Macro: <strong>INSN_REFERENCES_ARE_DELAYED</strong> <em>(<var>insn</var>)</em></dt>
<dd><p>Define this macro as a C expression that is nonzero if it is safe for the
delay slot scheduler to place instructions in the delay slot of <var>insn</var>,
even if they appear to set or clobber a resource referenced in <var>insn</var>.
<var>insn</var> is always a <code>jump_insn</code> or an <code>insn</code>.  On machines where
some <code>insn</code> or <code>jump_insn</code> is really a function call and its operands
are registers whose use is actually in the subroutine it calls, you should
define this macro.  Doing so allows the delay slot scheduler to move
instructions which copy arguments into the argument registers into the delay
slot of <var>insn</var>.
</p>
<p>You need not define this macro if it would always return zero.
</p></dd></dl>

<dl>
<dt><a name="index-MULTIPLE_005fSYMBOL_005fSPACES"></a>Macro: <strong>MULTIPLE_SYMBOL_SPACES</strong></dt>
<dd><p>Define this macro as a C expression that is nonzero if, in some cases,
global symbols from one translation unit may not be bound to undefined
symbols in another translation unit without user intervention.  For
instance, under Microsoft Windows symbols must be explicitly imported
from shared libraries (DLLs).
</p>
<p>You need not define this macro if it would always evaluate to zero.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMD_005fASM_005fCLOBBERS"></a>Target Hook: <em>tree</em> <strong>TARGET_MD_ASM_CLOBBERS</strong> <em>(tree <var>outputs</var>, tree <var>inputs</var>, tree <var>clobbers</var>)</em></dt>
<dd><p>This target hook should add to <var>clobbers</var> <code>STRING_CST</code> trees for
any hard regs the port wishes to automatically clobber for an asm.
It should return the result of the last <code>tree_cons</code> used to add a
clobber.  The <var>outputs</var>, <var>inputs</var> and <var>clobber</var> lists are the
corresponding parameters to the asm and may be inspected to avoid
clobbering a register that is an input or output of the asm.  You can use
<code>tree_overlaps_hard_reg_set</code>, declared in <samp>tree.h</samp>, to test
for overlap with regards to asm-declared registers.
</p></dd></dl>

<dl>
<dt><a name="index-MATH_005fLIBRARY"></a>Macro: <strong>MATH_LIBRARY</strong></dt>
<dd><p>Define this macro as a C string constant for the linker argument to link
in the system math library, minus the initial &lsquo;<samp>&quot;-l&quot;</samp>&rsquo;, or
&lsquo;<samp>&quot;&quot;</samp>&rsquo; if the target does not have a
separate math library.
</p>
<p>You need only define this macro if the default of &lsquo;<samp>&quot;m&quot;</samp>&rsquo; is wrong.
</p></dd></dl>

<dl>
<dt><a name="index-LIBRARY_005fPATH_005fENV"></a>Macro: <strong>LIBRARY_PATH_ENV</strong></dt>
<dd><p>Define this macro as a C string constant for the environment variable that
specifies where the linker should look for libraries.
</p>
<p>You need only define this macro if the default of &lsquo;<samp>&quot;LIBRARY_PATH&quot;</samp>&rsquo;
is wrong.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPOSIX_005fIO"></a>Macro: <strong>TARGET_POSIX_IO</strong></dt>
<dd><p>Define this macro if the target supports the following POSIX&nbsp;file
functions, access, mkdir and  file locking with fcntl / F_SETLKW.
Defining <code>TARGET_POSIX_IO</code> will enable the test coverage code
to use file locking when exiting a program, which avoids race conditions
if the program has forked. It will also create directories at run-time
for cross-profiling.
</p></dd></dl>

<dl>
<dt><a name="index-MAX_005fCONDITIONAL_005fEXECUTE"></a>Macro: <strong>MAX_CONDITIONAL_EXECUTE</strong></dt>
<dd>
<p>A C expression for the maximum number of instructions to execute via
conditional execution instructions instead of a branch.  A value of
<code>BRANCH_COST</code>+1 is the default if the machine does not use cc0, and
1 if it does use cc0.
</p></dd></dl>

<dl>
<dt><a name="index-IFCVT_005fMODIFY_005fTESTS"></a>Macro: <strong>IFCVT_MODIFY_TESTS</strong> <em>(<var>ce_info</var>, <var>true_expr</var>, <var>false_expr</var>)</em></dt>
<dd><p>Used if the target needs to perform machine-dependent modifications on the
conditionals used for turning basic blocks into conditionally executed code.
<var>ce_info</var> points to a data structure, <code>struct ce_if_block</code>, which
contains information about the currently processed blocks.  <var>true_expr</var>
and <var>false_expr</var> are the tests that are used for converting the
then-block and the else-block, respectively.  Set either <var>true_expr</var> or
<var>false_expr</var> to a null pointer if the tests cannot be converted.
</p></dd></dl>

<dl>
<dt><a name="index-IFCVT_005fMODIFY_005fMULTIPLE_005fTESTS"></a>Macro: <strong>IFCVT_MODIFY_MULTIPLE_TESTS</strong> <em>(<var>ce_info</var>, <var>bb</var>, <var>true_expr</var>, <var>false_expr</var>)</em></dt>
<dd><p>Like <code>IFCVT_MODIFY_TESTS</code>, but used when converting more complicated
if-statements into conditions combined by <code>and</code> and <code>or</code> operations.
<var>bb</var> contains the basic block that contains the test that is currently
being processed and about to be turned into a condition.
</p></dd></dl>

<dl>
<dt><a name="index-IFCVT_005fMODIFY_005fINSN"></a>Macro: <strong>IFCVT_MODIFY_INSN</strong> <em>(<var>ce_info</var>, <var>pattern</var>, <var>insn</var>)</em></dt>
<dd><p>A C expression to modify the <var>PATTERN</var> of an <var>INSN</var> that is to
be converted to conditional execution format.  <var>ce_info</var> points to
a data structure, <code>struct ce_if_block</code>, which contains information
about the currently processed blocks.
</p></dd></dl>

<dl>
<dt><a name="index-IFCVT_005fMODIFY_005fFINAL"></a>Macro: <strong>IFCVT_MODIFY_FINAL</strong> <em>(<var>ce_info</var>)</em></dt>
<dd><p>A C expression to perform any final machine dependent modifications in
converting code to conditional execution.  The involved basic blocks
can be found in the <code>struct ce_if_block</code> structure that is pointed
to by <var>ce_info</var>.
</p></dd></dl>

<dl>
<dt><a name="index-IFCVT_005fMODIFY_005fCANCEL"></a>Macro: <strong>IFCVT_MODIFY_CANCEL</strong> <em>(<var>ce_info</var>)</em></dt>
<dd><p>A C expression to cancel any machine dependent modifications in
converting code to conditional execution.  The involved basic blocks
can be found in the <code>struct ce_if_block</code> structure that is pointed
to by <var>ce_info</var>.
</p></dd></dl>

<dl>
<dt><a name="index-IFCVT_005fMACHDEP_005fINIT"></a>Macro: <strong>IFCVT_MACHDEP_INIT</strong> <em>(<var>ce_info</var>)</em></dt>
<dd><p>A C expression to initialize any machine specific data for if-conversion
of the if-block in the <code>struct ce_if_block</code> structure that is pointed
to by <var>ce_info</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMACHINE_005fDEPENDENT_005fREORG"></a>Target Hook: <em>void</em> <strong>TARGET_MACHINE_DEPENDENT_REORG</strong> <em>(void)</em></dt>
<dd><p>If non-null, this hook performs a target-specific pass over the
instruction stream.  The compiler will run it at all optimization levels,
just before the point at which it normally does delayed-branch scheduling.
</p>
<p>The exact purpose of the hook varies from target to target.  Some use
it to do transformations that are necessary for correctness, such as
laying out in-function constant pools or avoiding hardware hazards.
Others use it as an opportunity to do some machine-dependent optimizations.
</p>
<p>You need not implement the hook if it has nothing to do.  The default
definition is null.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINIT_005fBUILTINS"></a>Target Hook: <em>void</em> <strong>TARGET_INIT_BUILTINS</strong> <em>(void)</em></dt>
<dd><p>Define this hook if you have any machine-specific built-in functions
that need to be defined.  It should be a function that performs the
necessary setup.
</p>
<p>Machine specific built-in functions can be useful to expand special machine
instructions that would otherwise not normally be generated because
they have no equivalent in the source language (for example, SIMD vector
instructions or prefetch instructions).
</p>
<p>To create a built-in function, call the function
<code>lang_hooks.builtin_function</code>
which is defined by the language front end.  You can use any type nodes set
up by <code>build_common_tree_nodes</code>;
only language front ends that use those two functions will call
&lsquo;<samp>TARGET_INIT_BUILTINS</samp>&rsquo;.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fBUILTIN_005fDECL"></a>Target Hook: <em>tree</em> <strong>TARGET_BUILTIN_DECL</strong> <em>(unsigned <var>code</var>, bool <var>initialize_p</var>)</em></dt>
<dd><p>Define this hook if you have any machine-specific built-in functions
that need to be defined.  It should be a function that returns the
builtin function declaration for the builtin function code <var>code</var>.
If there is no such builtin and it cannot be initialized at this time
if <var>initialize_p</var> is true the function should return <code>NULL_TREE</code>.
If <var>code</var> is out of range the function should return
<code>error_mark_node</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEXPAND_005fBUILTIN"></a>Target Hook: <em>rtx</em> <strong>TARGET_EXPAND_BUILTIN</strong> <em>(tree <var>exp</var>, rtx <var>target</var>, rtx <var>subtarget</var>, enum machine_mode <var>mode</var>, int <var>ignore</var>)</em></dt>
<dd>
<p>Expand a call to a machine specific built-in function that was set up by
&lsquo;<samp>TARGET_INIT_BUILTINS</samp>&rsquo;.  <var>exp</var> is the expression for the
function call; the result should go to <var>target</var> if that is
convenient, and have mode <var>mode</var> if that is convenient.
<var>subtarget</var> may be used as the target for computing one of
<var>exp</var>&rsquo;s operands.  <var>ignore</var> is nonzero if the value is to be
ignored.  This function should return the result of the call to the
built-in function.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fRESOLVE_005fOVERLOADED_005fBUILTIN"></a>Target Hook: <em>tree</em> <strong>TARGET_RESOLVE_OVERLOADED_BUILTIN</strong> <em>(unsigned int <var>loc</var>, tree <var>fndecl</var>, void *<var>arglist</var>)</em></dt>
<dd><p>Select a replacement for a machine specific built-in function that
was set up by &lsquo;<samp>TARGET_INIT_BUILTINS</samp>&rsquo;.  This is done
<em>before</em> regular type checking, and so allows the target to
implement a crude form of function overloading.  <var>fndecl</var> is the
declaration of the built-in function.  <var>arglist</var> is the list of
arguments passed to the built-in function.  The result is a
complete expression that implements the operation, usually
another <code>CALL_EXPR</code>.
<var>arglist</var> really has type &lsquo;<samp>VEC(tree,gc)*</samp>&rsquo;
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFOLD_005fBUILTIN"></a>Target Hook: <em>tree</em> <strong>TARGET_FOLD_BUILTIN</strong> <em>(tree <var>fndecl</var>, int <var>n_args</var>, tree *<var>argp</var>, bool <var>ignore</var>)</em></dt>
<dd><p>Fold a call to a machine specific built-in function that was set up by
&lsquo;<samp>TARGET_INIT_BUILTINS</samp>&rsquo;.  <var>fndecl</var> is the declaration of the
built-in function.  <var>n_args</var> is the number of arguments passed to
the function; the arguments themselves are pointed to by <var>argp</var>.
The result is another tree containing a simplified expression for the
call&rsquo;s result.  If <var>ignore</var> is true the value will be ignored.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCOMPARE_005fVERSION_005fPRIORITY"></a>Target Hook: <em>int</em> <strong>TARGET_COMPARE_VERSION_PRIORITY</strong> <em>(tree <var>decl1</var>, tree <var>decl2</var>)</em></dt>
<dd><p>This hook is used to compare the target attributes in two functions to
determine which function&rsquo;s features get higher priority.  This is used
during function multi-versioning to figure out the order in which two
versions must be dispatched.  A function version with a higher priority
is checked for dispatching earlier.  <var>decl1</var> and <var>decl2</var> are
 the two function decls that will be compared.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fGET_005fFUNCTION_005fVERSIONS_005fDISPATCHER"></a>Target Hook: <em>tree</em> <strong>TARGET_GET_FUNCTION_VERSIONS_DISPATCHER</strong> <em>(void *<var>decl</var>)</em></dt>
<dd><p>This hook is used to get the dispatcher function for a set of function
versions.  The dispatcher function is called to invoke the right function
version at run-time. <var>decl</var> is one version from a set of semantically
identical versions.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fGENERATE_005fVERSION_005fDISPATCHER_005fBODY"></a>Target Hook: <em>tree</em> <strong>TARGET_GENERATE_VERSION_DISPATCHER_BODY</strong> <em>(void *<var>arg</var>)</em></dt>
<dd><p>This hook is used to generate the dispatcher logic to invoke the right
function version at run-time for a given set of function versions.
<var>arg</var> points to the callgraph node of the dispatcher function whose
body must be generated.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINVALID_005fWITHIN_005fDOLOOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_INVALID_WITHIN_DOLOOP</strong> <em>(const_rtx <var>insn</var>)</em></dt>
<dd>
<p>Take an instruction in <var>insn</var> and return NULL if it is valid within a
low-overhead loop, otherwise return a string explaining why doloop
could not be applied.
</p>
<p>Many targets use special registers for low-overhead looping. For any
instruction that clobbers these this function should return a string indicating
the reason why the doloop could not be applied.
By default, the RTL loop optimizer does not use a present doloop pattern for
loops containing function calls or branch on table instructions.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLEGITIMATE_005fCOMBINED_005fINSN"></a>Target Hook: <em>bool</em> <strong>TARGET_LEGITIMATE_COMBINED_INSN</strong> <em>(rtx <var>insn</var>)</em></dt>
<dd><p>Take an instruction in <var>insn</var> and return <code>false</code> if the instruction is not appropriate as a combination of two or more instructions.  The default is to accept all instructions.
</p></dd></dl>

<dl>
<dt><a name="index-MD_005fCAN_005fREDIRECT_005fBRANCH"></a>Macro: <strong>MD_CAN_REDIRECT_BRANCH</strong> <em>(<var>branch1</var>, <var>branch2</var>)</em></dt>
<dd>
<p>Take a branch insn in <var>branch1</var> and another in <var>branch2</var>.
Return true if redirecting <var>branch1</var> to the destination of
<var>branch2</var> is possible.
</p>
<p>On some targets, branches may have a limited range.  Optimizing the
filling of delay slots can result in branches being redirected, and this
may in turn cause a branch offset to overflow.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCAN_005fFOLLOW_005fJUMP"></a>Target Hook: <em>bool</em> <strong>TARGET_CAN_FOLLOW_JUMP</strong> <em>(const_rtx <var>follower</var>, const_rtx <var>followee</var>)</em></dt>
<dd><p>FOLLOWER and FOLLOWEE are JUMP_INSN instructions;  return true if FOLLOWER may be modified to follow FOLLOWEE;  false, if it can&rsquo;t.  For example, on some targets, certain kinds of branches can&rsquo;t be made to  follow through a hot/cold partitioning.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCOMMUTATIVE_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_COMMUTATIVE_P</strong> <em>(const_rtx <var>x</var>, int <var>outer_code</var>)</em></dt>
<dd><p>This target hook returns <code>true</code> if <var>x</var> is considered to be commutative.
Usually, this is just COMMUTATIVE_P (<var>x</var>), but the HP PA doesn&rsquo;t consider
PLUS to be commutative inside a MEM.  <var>outer_code</var> is the rtx code
of the enclosing rtl, if known, otherwise it is UNKNOWN.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fALLOCATE_005fINITIAL_005fVALUE"></a>Target Hook: <em>rtx</em> <strong>TARGET_ALLOCATE_INITIAL_VALUE</strong> <em>(rtx <var>hard_reg</var>)</em></dt>
<dd>
<p>When the initial value of a hard register has been copied in a pseudo
register, it is often not necessary to actually allocate another register
to this pseudo register, because the original hard register or a stack slot
it has been saved into can be used.  <code>TARGET_ALLOCATE_INITIAL_VALUE</code>
is called at the start of register allocation once for each hard register
that had its initial value copied by using
<code>get_func_hard_reg_initial_val</code> or <code>get_hard_reg_initial_val</code>.
Possible values are <code>NULL_RTX</code>, if you don&rsquo;t want
to do any special allocation, a <code>REG</code> rtx&mdash;that would typically be
the hard register itself, if it is known not to be clobbered&mdash;or a
<code>MEM</code>.
If you are returning a <code>MEM</code>, this is only a hint for the allocator;
it might decide to use another register anyways.
You may use <code>current_function_is_leaf</code> or 
<code>REG_N_SETS</code> in the hook to determine if the hard
register in question will not be clobbered.
The default value of this hook is <code>NULL</code>, which disables any special
allocation.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fUNSPEC_005fMAY_005fTRAP_005fP"></a>Target Hook: <em>int</em> <strong>TARGET_UNSPEC_MAY_TRAP_P</strong> <em>(const_rtx <var>x</var>, unsigned <var>flags</var>)</em></dt>
<dd><p>This target hook returns nonzero if <var>x</var>, an <code>unspec</code> or
<code>unspec_volatile</code> operation, might cause a trap.  Targets can use
this hook to enhance precision of analysis for <code>unspec</code> and
<code>unspec_volatile</code> operations.  You may call <code>may_trap_p_1</code>
to analyze inner elements of <var>x</var> in which case <var>flags</var> should be
passed along.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fSET_005fCURRENT_005fFUNCTION"></a>Target Hook: <em>void</em> <strong>TARGET_SET_CURRENT_FUNCTION</strong> <em>(tree <var>decl</var>)</em></dt>
<dd><p>The compiler invokes this hook whenever it changes its current function
context (<code>cfun</code>).  You can define this function if
the back end needs to perform any initialization or reset actions on a
per-function basis.  For example, it may be used to implement function
attributes that affect register usage or code generation patterns.
The argument <var>decl</var> is the declaration for the new function context,
and may be null to indicate that the compiler has left a function context
and is returning to processing at the top level.
The default hook function does nothing.
</p>
<p>GCC sets <code>cfun</code> to a dummy function context during initialization of
some parts of the back end.  The hook function is not invoked in this
situation; you need not worry about the hook being invoked recursively,
or when the back end is in a partially-initialized state.
<code>cfun</code> might be <code>NULL</code> to indicate processing at top level,
outside of any function scope.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOBJECT_005fSUFFIX"></a>Macro: <strong>TARGET_OBJECT_SUFFIX</strong></dt>
<dd><p>Define this macro to be a C string representing the suffix for object
files on your target machine.  If you do not define this macro, GCC will
use &lsquo;<samp>.o</samp>&rsquo; as the suffix for object files.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEXECUTABLE_005fSUFFIX"></a>Macro: <strong>TARGET_EXECUTABLE_SUFFIX</strong></dt>
<dd><p>Define this macro to be a C string representing the suffix to be
automatically added to executable files on your target machine.  If you
do not define this macro, GCC will use the null string as the suffix for
executable files.
</p></dd></dl>

<dl>
<dt><a name="index-COLLECT_005fEXPORT_005fLIST"></a>Macro: <strong>COLLECT_EXPORT_LIST</strong></dt>
<dd><p>If defined, <code>collect2</code> will scan the individual object files
specified on its command line and create an export list for the linker.
Define this macro for systems like AIX, where the linker discards
object files that are not referenced from <code>main</code> and uses export
lists.
</p></dd></dl>

<dl>
<dt><a name="index-MODIFY_005fJNI_005fMETHOD_005fCALL"></a>Macro: <strong>MODIFY_JNI_METHOD_CALL</strong> <em>(<var>mdecl</var>)</em></dt>
<dd><p>Define this macro to a C expression representing a variant of the
method call <var>mdecl</var>, if Java Native Interface (JNI) methods
must be invoked differently from other methods on your target.
For example, on 32-bit Microsoft Windows, JNI methods must be invoked using
the <code>stdcall</code> calling convention and this macro is then
defined as this expression:
</p>
<div class="smallexample">
<pre class="smallexample">build_type_attribute_variant (<var>mdecl</var>,
                              build_tree_list
                              (get_identifier (&quot;stdcall&quot;),
                               NULL))
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-TARGET_005fCANNOT_005fMODIFY_005fJUMPS_005fP"></a>Target Hook: <em>bool</em> <strong>TARGET_CANNOT_MODIFY_JUMPS_P</strong> <em>(void)</em></dt>
<dd><p>This target hook returns <code>true</code> past the point in which new jump
instructions could be created.  On machines that require a register for
every jump such as the SHmedia ISA of SH5, this point would typically be
reload, so this target hook should be defined to a function such as:
</p>
<div class="smallexample">
<pre class="smallexample">static bool
cannot_modify_jumps_past_reload_p ()
{
  return (reload_completed || reload_in_progress);
}
</pre></div>
</dd></dl>

<dl>
<dt><a name="index-TARGET_005fBRANCH_005fTARGET_005fREGISTER_005fCLASS"></a>Target Hook: <em>reg_class_t</em> <strong>TARGET_BRANCH_TARGET_REGISTER_CLASS</strong> <em>(void)</em></dt>
<dd><p>This target hook returns a register class for which branch target register
optimizations should be applied.  All registers in this class should be
usable interchangeably.  After reload, registers in this class will be
re-allocated and loads will be hoisted out of loops and be subjected
to inter-block scheduling.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fBRANCH_005fTARGET_005fREGISTER_005fCALLEE_005fSAVED"></a>Target Hook: <em>bool</em> <strong>TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED</strong> <em>(bool <var>after_prologue_epilogue_gen</var>)</em></dt>
<dd><p>Branch target register optimization will by default exclude callee-saved
registers
that are not already live during the current function; if this target hook
returns true, they will be included.  The target code must than make sure
that all target registers in the class returned by
&lsquo;<samp>TARGET_BRANCH_TARGET_REGISTER_CLASS</samp>&rsquo; that might need saving are
saved.  <var>after_prologue_epilogue_gen</var> indicates if prologues and
epilogues have already been generated.  Note, even if you only return
true when <var>after_prologue_epilogue_gen</var> is false, you still are likely
to have to make special provisions in <code>INITIAL_ELIMINATION_OFFSET</code>
to reserve space for caller-saved target registers.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fHAVE_005fCONDITIONAL_005fEXECUTION"></a>Target Hook: <em>bool</em> <strong>TARGET_HAVE_CONDITIONAL_EXECUTION</strong> <em>(void)</em></dt>
<dd><p>This target hook returns true if the target supports conditional execution.
This target hook is required only when the target has several different
modes and they have different conditional execution capability, such as ARM.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fLOOP_005fUNROLL_005fADJUST"></a>Target Hook: <em>unsigned</em> <strong>TARGET_LOOP_UNROLL_ADJUST</strong> <em>(unsigned <var>nunroll</var>, struct loop *<var>loop</var>)</em></dt>
<dd><p>This target hook returns a new value for the number of times <var>loop</var>
should be unrolled. The parameter <var>nunroll</var> is the number of times
the loop is to be unrolled. The parameter <var>loop</var> is a pointer to
the loop, which is going to be checked for unrolling. This target hook
is required only when the target has special constraints like maximum
number of memory accesses.
</p></dd></dl>

<dl>
<dt><a name="index-POWI_005fMAX_005fMULTS"></a>Macro: <strong>POWI_MAX_MULTS</strong></dt>
<dd><p>If defined, this macro is interpreted as a signed integer C expression
that specifies the maximum number of floating point multiplications
that should be emitted when expanding exponentiation by an integer
constant inline.  When this value is defined, exponentiation requiring
more than this number of multiplications is implemented by calling the
system library&rsquo;s <code>pow</code>, <code>powf</code> or <code>powl</code> routines.
The default value places no upper bound on the multiplication count.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEXTRA_005fINCLUDES"></a>Macro: <em>void</em> <strong>TARGET_EXTRA_INCLUDES</strong> <em>(const char *<var>sysroot</var>, const char *<var>iprefix</var>, int <var>stdinc</var>)</em></dt>
<dd><p>This target hook should register any extra include files for the
target.  The parameter <var>stdinc</var> indicates if normal include files
are present.  The parameter <var>sysroot</var> is the system root directory.
The parameter <var>iprefix</var> is the prefix for the gcc directory.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fEXTRA_005fPRE_005fINCLUDES"></a>Macro: <em>void</em> <strong>TARGET_EXTRA_PRE_INCLUDES</strong> <em>(const char *<var>sysroot</var>, const char *<var>iprefix</var>, int <var>stdinc</var>)</em></dt>
<dd><p>This target hook should register any extra include files for the
target before any standard headers.  The parameter <var>stdinc</var>
indicates if normal include files are present.  The parameter
<var>sysroot</var> is the system root directory.  The parameter
<var>iprefix</var> is the prefix for the gcc directory.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOPTF"></a>Macro: <em>void</em> <strong>TARGET_OPTF</strong> <em>(char *<var>path</var>)</em></dt>
<dd><p>This target hook should register special include paths for the target.
The parameter <var>path</var> is the include to register.  On Darwin
systems, this is used for Framework includes, which have semantics
that are different from <samp>-I</samp>.
</p></dd></dl>

<dl>
<dt><a name="index-bool"></a>Macro: <strong>bool</strong> <em>TARGET_USE_LOCAL_THUNK_ALIAS_P (tree <var>fndecl</var>)</em></dt>
<dd><p>This target macro returns <code>true</code> if it is safe to use a local alias
for a virtual function <var>fndecl</var> when constructing thunks,
<code>false</code> otherwise.  By default, the macro returns <code>true</code> for all
functions, if a target supports aliases (i.e. defines
<code>ASM_OUTPUT_DEF</code>), <code>false</code> otherwise,
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fFORMAT_005fTYPES"></a>Macro: <strong>TARGET_FORMAT_TYPES</strong></dt>
<dd><p>If defined, this macro is the name of a global variable containing
target-specific format checking information for the <samp>-Wformat</samp>
option.  The default is to have no target-specific format checks.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fN_005fFORMAT_005fTYPES"></a>Macro: <strong>TARGET_N_FORMAT_TYPES</strong></dt>
<dd><p>If defined, this macro is the number of entries in
<code>TARGET_FORMAT_TYPES</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOVERRIDES_005fFORMAT_005fATTRIBUTES"></a>Macro: <strong>TARGET_OVERRIDES_FORMAT_ATTRIBUTES</strong></dt>
<dd><p>If defined, this macro is the name of a global variable containing
target-specific format overrides for the <samp>-Wformat</samp> option. The
default is to have no target-specific format overrides. If defined,
<code>TARGET_FORMAT_TYPES</code> must be defined, too.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOVERRIDES_005fFORMAT_005fATTRIBUTES_005fCOUNT"></a>Macro: <strong>TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT</strong></dt>
<dd><p>If defined, this macro specifies the number of entries in
<code>TARGET_OVERRIDES_FORMAT_ATTRIBUTES</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fOVERRIDES_005fFORMAT_005fINIT"></a>Macro: <strong>TARGET_OVERRIDES_FORMAT_INIT</strong></dt>
<dd><p>If defined, this macro specifies the optional initialization
routine for target specific customizations of the system printf
and scanf formatter settings.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fRELAXED_005fORDERING"></a>Target Hook: <em>bool</em> <strong>TARGET_RELAXED_ORDERING</strong></dt>
<dd><p>If set to <code>true</code>, means that the target&rsquo;s memory model does not
guarantee that loads which do not depend on one another will access
main memory in the order of the instruction stream; if ordering is
important, an explicit memory barrier must be used.  This is true of
many recent processors which implement a policy of &ldquo;relaxed,&rdquo;
&ldquo;weak,&rdquo; or &ldquo;release&rdquo; memory consistency, such as Alpha, PowerPC,
and ia64.  The default is <code>false</code>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINVALID_005fARG_005fFOR_005fUNPROTOTYPED_005fFN"></a>Target Hook: <em>const char *</em> <strong>TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN</strong> <em>(const_tree <var>typelist</var>, const_tree <var>funcdecl</var>, const_tree <var>val</var>)</em></dt>
<dd><p>If defined, this macro returns the diagnostic message when it is
illegal to pass argument <var>val</var> to function <var>funcdecl</var>
with prototype <var>typelist</var>.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINVALID_005fCONVERSION"></a>Target Hook: <em>const char *</em> <strong>TARGET_INVALID_CONVERSION</strong> <em>(const_tree <var>fromtype</var>, const_tree <var>totype</var>)</em></dt>
<dd><p>If defined, this macro returns the diagnostic message when it is
invalid to convert from <var>fromtype</var> to <var>totype</var>, or <code>NULL</code>
if validity should be determined by the front end.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINVALID_005fUNARY_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_INVALID_UNARY_OP</strong> <em>(int <var>op</var>, const_tree <var>type</var>)</em></dt>
<dd><p>If defined, this macro returns the diagnostic message when it is
invalid to apply operation <var>op</var> (where unary plus is denoted by
<code>CONVERT_EXPR</code>) to an operand of type <var>type</var>, or <code>NULL</code>
if validity should be determined by the front end.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINVALID_005fBINARY_005fOP"></a>Target Hook: <em>const char *</em> <strong>TARGET_INVALID_BINARY_OP</strong> <em>(int <var>op</var>, const_tree <var>type1</var>, const_tree <var>type2</var>)</em></dt>
<dd><p>If defined, this macro returns the diagnostic message when it is
invalid to apply operation <var>op</var> to operands of types <var>type1</var>
and <var>type2</var>, or <code>NULL</code> if validity should be determined by
the front end.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINVALID_005fPARAMETER_005fTYPE"></a>Target Hook: <em>const char *</em> <strong>TARGET_INVALID_PARAMETER_TYPE</strong> <em>(const_tree <var>type</var>)</em></dt>
<dd><p>If defined, this macro returns the diagnostic message when it is
invalid for functions to include parameters of type <var>type</var>,
or <code>NULL</code> if validity should be determined by
the front end.  This is currently used only by the C and C++ front ends.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fINVALID_005fRETURN_005fTYPE"></a>Target Hook: <em>const char *</em> <strong>TARGET_INVALID_RETURN_TYPE</strong> <em>(const_tree <var>type</var>)</em></dt>
<dd><p>If defined, this macro returns the diagnostic message when it is
invalid for functions to have return type <var>type</var>,
or <code>NULL</code> if validity should be determined by
the front end.  This is currently used only by the C and C++ front ends.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fPROMOTED_005fTYPE"></a>Target Hook: <em>tree</em> <strong>TARGET_PROMOTED_TYPE</strong> <em>(const_tree <var>type</var>)</em></dt>
<dd><p>If defined, this target hook returns the type to which values of
<var>type</var> should be promoted when they appear in expressions,
analogous to the integer promotions, or <code>NULL_TREE</code> to use the
front end&rsquo;s normal promotion rules.  This hook is useful when there are
target-specific types with special promotion rules.
This is currently used only by the C and C++ front ends.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCONVERT_005fTO_005fTYPE"></a>Target Hook: <em>tree</em> <strong>TARGET_CONVERT_TO_TYPE</strong> <em>(tree <var>type</var>, tree <var>expr</var>)</em></dt>
<dd><p>If defined, this hook returns the result of converting <var>expr</var> to
<var>type</var>.  It should return the converted expression,
or <code>NULL_TREE</code> to apply the front end&rsquo;s normal conversion rules.
This hook is useful when there are target-specific types with special
conversion rules.
This is currently used only by the C and C++ front ends.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fUSE_005fJCR_005fSECTION"></a>Macro: <strong>TARGET_USE_JCR_SECTION</strong></dt>
<dd><p>This macro determines whether to use the JCR section to register Java
classes. By default, TARGET_USE_JCR_SECTION is defined to 1 if both
SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, else 0.
</p></dd></dl>

<dl>
<dt><a name="index-OBJC_005fJBLEN"></a>Macro: <strong>OBJC_JBLEN</strong></dt>
<dd><p>This macro determines the size of the objective C jump buffer for the
NeXT runtime. By default, OBJC_JBLEN is defined to an innocuous value.
</p></dd></dl>

<dl>
<dt><a name="index-LIBGCC2_005fUNWIND_005fATTRIBUTE"></a>Macro: <strong>LIBGCC2_UNWIND_ATTRIBUTE</strong></dt>
<dd><p>Define this macro if any target-specific attributes need to be attached
to the functions in <samp>libgcc</samp> that provide low-level support for
call stack unwinding.  It is used in declarations in <samp>unwind-generic.h</samp>
and the associated definitions of those functions.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fUPDATE_005fSTACK_005fBOUNDARY"></a>Target Hook: <em>void</em> <strong>TARGET_UPDATE_STACK_BOUNDARY</strong> <em>(void)</em></dt>
<dd><p>Define this macro to update the current function stack boundary if
necessary.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fGET_005fDRAP_005fRTX"></a>Target Hook: <em>rtx</em> <strong>TARGET_GET_DRAP_RTX</strong> <em>(void)</em></dt>
<dd><p>This hook should return an rtx for Dynamic Realign Argument Pointer (DRAP) if a
different argument pointer register is needed to access the function&rsquo;s
argument list due to stack realignment.  Return <code>NULL</code> if no DRAP
is needed.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fALLOCATE_005fSTACK_005fSLOTS_005fFOR_005fARGS"></a>Target Hook: <em>bool</em> <strong>TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS</strong> <em>(void)</em></dt>
<dd><p>When optimization is disabled, this hook indicates whether or not
arguments should be allocated to stack slots.  Normally, GCC allocates
stacks slots for arguments when not optimizing in order to make
debugging easier.  However, when a function is declared with
<code>__attribute__((naked))</code>, there is no stack frame, and the compiler
cannot safely move arguments from the registers in which they are passed
to the stack.  Therefore, this hook should return true in general, but
false for naked functions.  The default implementation always returns true.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fCONST_005fANCHOR"></a>Target Hook: <em>unsigned HOST_WIDE_INT</em> <strong>TARGET_CONST_ANCHOR</strong></dt>
<dd><p>On some architectures it can take multiple instructions to synthesize
a constant.  If there is another constant already in a register that
is close enough in value then it is preferable that the new constant
is computed from this register using immediate addition or
subtraction.  We accomplish this through CSE.  Besides the value of
the constant we also add a lower and an upper constant anchor to the
available expressions.  These are then queried when encountering new
constants.  The anchors are computed by rounding the constant up and
down to a multiple of the value of <code>TARGET_CONST_ANCHOR</code>.
<code>TARGET_CONST_ANCHOR</code> should be the maximum positive value
accepted by immediate-add plus one.  We currently assume that the
value of <code>TARGET_CONST_ANCHOR</code> is a power of 2.  For example, on
MIPS, where add-immediate takes a 16-bit signed value,
<code>TARGET_CONST_ANCHOR</code> is set to &lsquo;<samp>0x8000</samp>&rsquo;.  The default value
is zero, which disables this optimization.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fASAN_005fSHADOW_005fOFFSET"></a>Target Hook: <em>unsigned HOST_WIDE_INT</em> <strong>TARGET_ASAN_SHADOW_OFFSET</strong> <em>(void)</em></dt>
<dd><p>Return the offset bitwise ored into shifted address to get corresponding
Address Sanitizer shadow memory address.  NULL if Address Sanitizer is not
supported by the target.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fMEMMODEL_005fCHECK"></a>Target Hook: <em>unsigned HOST_WIDE_INT</em> <strong>TARGET_MEMMODEL_CHECK</strong> <em>(unsigned HOST_WIDE_INT <var>val</var>)</em></dt>
<dd><p>Validate target specific memory model mask bits. When NULL no target specific
memory model bits are allowed.
</p></dd></dl>

<dl>
<dt><a name="index-TARGET_005fATOMIC_005fTEST_005fAND_005fSET_005fTRUEVAL"></a>Target Hook: <em>unsigned char</em> <strong>TARGET_ATOMIC_TEST_AND_SET_TRUEVAL</strong></dt>
<dd><p>This value should be set if the result written by <code>atomic_test_and_set</code> is not exactly 1, i.e. the <code>bool</code> <code>true</code>.
</p></dd></dl>

<hr>
<a name="Host-Config"></a>
<div class="header">
<p>
Next: <a href="#Fragments" accesskey="n" rel="next">Fragments</a>, Previous: <a href="#Target-Macros" accesskey="p" rel="prev">Target Macros</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Host-Configuration"></a>
<h2 class="chapter">18 Host Configuration</h2>
<a name="index-host-configuration"></a>

<p>Most details about the machine and system on which the compiler is
actually running are detected by the <code>configure</code> script.  Some
things are impossible for <code>configure</code> to detect; these are
described in two ways, either by macros defined in a file named
<samp>xm-<var>machine</var>.h</samp> or by hook functions in the file specified
by the <var>out_host_hook_obj</var> variable in <samp>config.gcc</samp>.  (The
intention is that very few hosts will need a header file but nearly
every fully supported host will need to override some hooks.)
</p>
<p>If you need to define only a few macros, and they have simple
definitions, consider using the <code>xm_defines</code> variable in your
<samp>config.gcc</samp> entry instead of creating a host configuration
header.  See <a href="#System-Config">System Config</a>.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Host-Common" accesskey="1">Host Common</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Things every host probably needs implemented.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Filesystem" accesskey="2">Filesystem</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Your host can&rsquo;t have the letter &lsquo;a&rsquo; in filenames?
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Host-Misc" accesskey="3">Host Misc</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Rare configuration options for hosts.
</td></tr>
</table>

<hr>
<a name="Host-Common"></a>
<div class="header">
<p>
Next: <a href="#Filesystem" accesskey="n" rel="next">Filesystem</a>, Up: <a href="#Host-Config" accesskey="u" rel="up">Host Config</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Host-Common-1"></a>
<h3 class="section">18.1 Host Common</h3>
<a name="index-host-hooks"></a>
<a name="index-host-functions"></a>

<p>Some things are just not portable, even between similar operating systems,
and are too difficult for autoconf to detect.  They get implemented using
hook functions in the file specified by the <var>host_hook_obj</var>
variable in <samp>config.gcc</samp>.
</p>
<dl>
<dt><a name="index-HOST_005fHOOKS_005fEXTRA_005fSIGNALS"></a>Host Hook: <em>void</em> <strong>HOST_HOOKS_EXTRA_SIGNALS</strong> <em>(void)</em></dt>
<dd><p>This host hook is used to set up handling for extra signals.  The most
common thing to do in this hook is to detect stack overflow.
</p></dd></dl>

<dl>
<dt><a name="index-HOST_005fHOOKS_005fGT_005fPCH_005fGET_005fADDRESS"></a>Host Hook: <em>void *</em> <strong>HOST_HOOKS_GT_PCH_GET_ADDRESS</strong> <em>(size_t   <var>size</var>, int <var>fd</var>)</em></dt>
<dd><p>This host hook returns the address of some space that is likely to be
free in some subsequent invocation of the compiler.  We intend to load
the PCH data at this address such that the data need not be relocated.
The area should be able to hold <var>size</var> bytes.  If the host uses
<code>mmap</code>, <var>fd</var> is an open file descriptor that can be used for
probing.
</p></dd></dl>

<dl>
<dt><a name="index-HOST_005fHOOKS_005fGT_005fPCH_005fUSE_005fADDRESS"></a>Host Hook: <em>int</em> <strong>HOST_HOOKS_GT_PCH_USE_ADDRESS</strong> <em>(void * <var>address</var>,   size_t <var>size</var>, int <var>fd</var>, size_t <var>offset</var>)</em></dt>
<dd><p>This host hook is called when a PCH file is about to be loaded.
We want to load <var>size</var> bytes from <var>fd</var> at <var>offset</var>
into memory at <var>address</var>.  The given address will be the result of
a previous invocation of <code>HOST_HOOKS_GT_PCH_GET_ADDRESS</code>.
Return -1 if we couldn&rsquo;t allocate <var>size</var> bytes at <var>address</var>.
Return 0 if the memory is allocated but the data is not loaded.  Return 1
if the hook has performed everything.
</p>
<p>If the implementation uses reserved address space, free any reserved
space beyond <var>size</var>, regardless of the return value.  If no PCH will
be loaded, this hook may be called with <var>size</var> zero, in which case
all reserved address space should be freed.
</p>
<p>Do not try to handle values of <var>address</var> that could not have been
returned by this executable; just return -1.  Such values usually
indicate an out-of-date PCH file (built by some other GCC executable),
and such a PCH file won&rsquo;t work.
</p></dd></dl>

<dl>
<dt><a name="index-HOST_005fHOOKS_005fGT_005fPCH_005fALLOC_005fGRANULARITY"></a>Host Hook: <em>size_t</em> <strong>HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY</strong> <em>(void);</em></dt>
<dd><p>This host hook returns the alignment required for allocating virtual
memory.  Usually this is the same as getpagesize, but on some hosts the
alignment for reserving memory differs from the pagesize for committing
memory.
</p></dd></dl>

<hr>
<a name="Filesystem"></a>
<div class="header">
<p>
Next: <a href="#Host-Misc" accesskey="n" rel="next">Host Misc</a>, Previous: <a href="#Host-Common" accesskey="p" rel="prev">Host Common</a>, Up: <a href="#Host-Config" accesskey="u" rel="up">Host Config</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Host-Filesystem"></a>
<h3 class="section">18.2 Host Filesystem</h3>
<a name="index-configuration-file"></a>
<a name="index-xm_002dmachine_002eh"></a>

<p>GCC needs to know a number of things about the semantics of the host
machine&rsquo;s filesystem.  Filesystems with Unix and MS-DOS semantics are
automatically detected.  For other systems, you can define the
following macros in <samp>xm-<var>machine</var>.h</samp>.
</p>
<dl compact="compact">
<dt><code>HAVE_DOS_BASED_FILE_SYSTEM</code>
<a name="index-HAVE_005fDOS_005fBASED_005fFILE_005fSYSTEM"></a>
</dt>
<dd><p>This macro is automatically defined by <samp>system.h</samp> if the host
file system obeys the semantics defined by MS-DOS instead of Unix.
DOS file systems are case insensitive, file specifications may begin
with a drive letter, and both forward slash and backslash (&lsquo;<samp>/</samp>&rsquo;
and &lsquo;<samp>\</samp>&rsquo;) are directory separators.
</p>
</dd>
<dt><code>DIR_SEPARATOR</code>
<a name="index-DIR_005fSEPARATOR"></a>
</dt>
<dt><code>DIR_SEPARATOR_2</code>
<a name="index-DIR_005fSEPARATOR_005f2"></a>
</dt>
<dd><p>If defined, these macros expand to character constants specifying
separators for directory names within a file specification.
<samp>system.h</samp> will automatically give them appropriate values on
Unix and MS-DOS file systems.  If your file system is neither of
these, define one or both appropriately in <samp>xm-<var>machine</var>.h</samp>.
</p>
<p>However, operating systems like VMS, where constructing a pathname is
more complicated than just stringing together directory names
separated by a special character, should not define either of these
macros.
</p>
</dd>
<dt><code>PATH_SEPARATOR</code>
<a name="index-PATH_005fSEPARATOR"></a>
</dt>
<dd><p>If defined, this macro should expand to a character constant
specifying the separator for elements of search paths.  The default
value is a colon (&lsquo;<samp>:</samp>&rsquo;).  DOS-based systems usually, but not
always, use semicolon (&lsquo;<samp>;</samp>&rsquo;).
</p>
</dd>
<dt><code>VMS</code>
<a name="index-VMS"></a>
</dt>
<dd><p>Define this macro if the host system is VMS.
</p>
</dd>
<dt><code>HOST_OBJECT_SUFFIX</code>
<a name="index-HOST_005fOBJECT_005fSUFFIX"></a>
</dt>
<dd><p>Define this macro to be a C string representing the suffix for object
files on your host machine.  If you do not define this macro, GCC will
use &lsquo;<samp>.o</samp>&rsquo; as the suffix for object files.
</p>
</dd>
<dt><code>HOST_EXECUTABLE_SUFFIX</code>
<a name="index-HOST_005fEXECUTABLE_005fSUFFIX"></a>
</dt>
<dd><p>Define this macro to be a C string representing the suffix for
executable files on your host machine.  If you do not define this macro,
GCC will use the null string as the suffix for executable files.
</p>
</dd>
<dt><code>HOST_BIT_BUCKET</code>
<a name="index-HOST_005fBIT_005fBUCKET"></a>
</dt>
<dd><p>A pathname defined by the host operating system, which can be opened as
a file and written to, but all the information written is discarded.
This is commonly known as a <em>bit bucket</em> or <em>null device</em>.  If
you do not define this macro, GCC will use &lsquo;<samp>/dev/null</samp>&rsquo; as the bit
bucket.  If the host does not support a bit bucket, define this macro to
an invalid filename.
</p>
</dd>
<dt><code>UPDATE_PATH_HOST_CANONICALIZE (<var>path</var>)</code>
<a name="index-UPDATE_005fPATH_005fHOST_005fCANONICALIZE-_0028path_0029"></a>
</dt>
<dd><p>If defined, a C statement (sans semicolon) that performs host-dependent
canonicalization when a path used in a compilation driver or
preprocessor is canonicalized.  <var>path</var> is a malloc-ed path to be
canonicalized.  If the C statement does canonicalize <var>path</var> into a
different buffer, the old path should be freed and the new buffer should
have been allocated with malloc.
</p>
</dd>
<dt><code>DUMPFILE_FORMAT</code>
<a name="index-DUMPFILE_005fFORMAT"></a>
</dt>
<dd><p>Define this macro to be a C string representing the format to use for
constructing the index part of debugging dump file names.  The resultant
string must fit in fifteen bytes.  The full filename will be the
concatenation of: the prefix of the assembler file name, the string
resulting from applying this format to an index number, and a string
unique to each dump file kind, e.g. &lsquo;<samp>rtl</samp>&rsquo;.
</p>
<p>If you do not define this macro, GCC will use &lsquo;<samp>.%02d.</samp>&rsquo;.  You should
define this macro if using the default will create an invalid file name.
</p>
</dd>
<dt><code>DELETE_IF_ORDINARY</code>
<a name="index-DELETE_005fIF_005fORDINARY"></a>
</dt>
<dd><p>Define this macro to be a C statement (sans semicolon) that performs
host-dependent removal of ordinary temp files in the compilation driver.
</p>
<p>If you do not define this macro, GCC will use the default version.  You
should define this macro if the default version does not reliably remove
the temp file as, for example, on VMS which allows multiple versions
of a file.
</p>
</dd>
<dt><code>HOST_LACKS_INODE_NUMBERS</code>
<a name="index-HOST_005fLACKS_005fINODE_005fNUMBERS"></a>
</dt>
<dd><p>Define this macro if the host filesystem does not report meaningful inode
numbers in struct stat.
</p></dd>
</dl>

<hr>
<a name="Host-Misc"></a>
<div class="header">
<p>
Previous: <a href="#Filesystem" accesskey="p" rel="prev">Filesystem</a>, Up: <a href="#Host-Config" accesskey="u" rel="up">Host Config</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Host-Misc-1"></a>
<h3 class="section">18.3 Host Misc</h3>
<a name="index-configuration-file-1"></a>
<a name="index-xm_002dmachine_002eh-1"></a>

<dl compact="compact">
<dt><code>FATAL_EXIT_CODE</code>
<a name="index-FATAL_005fEXIT_005fCODE"></a>
</dt>
<dd><p>A C expression for the status code to be returned when the compiler
exits after serious errors.  The default is the system-provided macro
&lsquo;<samp>EXIT_FAILURE</samp>&rsquo;, or &lsquo;<samp>1</samp>&rsquo; if the system doesn&rsquo;t define that
macro.  Define this macro only if these defaults are incorrect.
</p>
</dd>
<dt><code>SUCCESS_EXIT_CODE</code>
<a name="index-SUCCESS_005fEXIT_005fCODE"></a>
</dt>
<dd><p>A C expression for the status code to be returned when the compiler
exits without serious errors.  (Warnings are not serious errors.)  The
default is the system-provided macro &lsquo;<samp>EXIT_SUCCESS</samp>&rsquo;, or &lsquo;<samp>0</samp>&rsquo; if
the system doesn&rsquo;t define that macro.  Define this macro only if these
defaults are incorrect.
</p>
</dd>
<dt><code>USE_C_ALLOCA</code>
<a name="index-USE_005fC_005fALLOCA"></a>
</dt>
<dd><p>Define this macro if GCC should use the C implementation of <code>alloca</code>
provided by <samp>libiberty.a</samp>.  This only affects how some parts of the
compiler itself allocate memory.  It does not change code generation.
</p>
<p>When GCC is built with a compiler other than itself, the C <code>alloca</code>
is always used.  This is because most other implementations have serious
bugs.  You should define this macro only on a system where no
stack-based <code>alloca</code> can possibly work.  For instance, if a system
has a small limit on the size of the stack, GCC&rsquo;s builtin <code>alloca</code>
will not work reliably.
</p>
</dd>
<dt><code>COLLECT2_HOST_INITIALIZATION</code>
<a name="index-COLLECT2_005fHOST_005fINITIALIZATION"></a>
</dt>
<dd><p>If defined, a C statement (sans semicolon) that performs host-dependent
initialization when <code>collect2</code> is being initialized.
</p>
</dd>
<dt><code>GCC_DRIVER_HOST_INITIALIZATION</code>
<a name="index-GCC_005fDRIVER_005fHOST_005fINITIALIZATION"></a>
</dt>
<dd><p>If defined, a C statement (sans semicolon) that performs host-dependent
initialization when a compilation driver is being initialized.
</p>
</dd>
<dt><code>HOST_LONG_LONG_FORMAT</code>
<a name="index-HOST_005fLONG_005fLONG_005fFORMAT"></a>
</dt>
<dd><p>If defined, the string used to indicate an argument of type <code>long
long</code> to functions like <code>printf</code>.  The default value is
<code>&quot;ll&quot;</code>.
</p>
</dd>
<dt><code>HOST_LONG_FORMAT</code>
<a name="index-HOST_005fLONG_005fFORMAT"></a>
</dt>
<dd><p>If defined, the string used to indicate an argument of type <code>long</code>
to functions like <code>printf</code>.  The default value is <code>&quot;l&quot;</code>.
</p>
</dd>
<dt><code>HOST_PTR_PRINTF</code>
<a name="index-HOST_005fPTR_005fPRINTF"></a>
</dt>
<dd><p>If defined, the string used to indicate an argument of type <code>void *</code>
to functions like <code>printf</code>.  The default value is <code>&quot;%p&quot;</code>.
</p></dd>
</dl>

<p>In addition, if <code>configure</code> generates an incorrect definition of
any of the macros in <samp>auto-host.h</samp>, you can override that
definition in a host configuration header.  If you need to do this,
first see if it is possible to fix <code>configure</code>.
</p>
<hr>
<a name="Fragments"></a>
<div class="header">
<p>
Next: <a href="#Collect2" accesskey="n" rel="next">Collect2</a>, Previous: <a href="#Host-Config" accesskey="p" rel="prev">Host Config</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Makefile-Fragments"></a>
<h2 class="chapter">19 Makefile Fragments</h2>
<a name="index-makefile-fragment"></a>

<p>When you configure GCC using the <samp>configure</samp> script, it will
construct the file <samp>Makefile</samp> from the template file
<samp>Makefile.in</samp>.  When it does this, it can incorporate makefile
fragments from the <samp>config</samp> directory.  These are used to set
Makefile parameters that are not amenable to being calculated by
autoconf.  The list of fragments to incorporate is set by
<samp>config.gcc</samp> (and occasionally <samp>config.build</samp>
and <samp>config.host</samp>); See <a href="#System-Config">System Config</a>.
</p>
<p>Fragments are named either <samp>t-<var>target</var></samp> or <samp>x-<var>host</var></samp>,
depending on whether they are relevant to configuring GCC to produce
code for a particular target, or to configuring GCC to run on a
particular host.  Here <var>target</var> and <var>host</var> are mnemonics
which usually have some relationship to the canonical system name, but
no formal connection.
</p>
<p>If these files do not exist, it means nothing needs to be added for a
given target or host.  Most targets need a few <samp>t-<var>target</var></samp>
fragments, but needing <samp>x-<var>host</var></samp> fragments is rare.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Target-Fragment" accesskey="1">Target Fragment</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Writing <samp>t-<var>target</var></samp> files.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Host-Fragment" accesskey="2">Host Fragment</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Writing <samp>x-<var>host</var></samp> files.
</td></tr>
</table>

<hr>
<a name="Target-Fragment"></a>
<div class="header">
<p>
Next: <a href="#Host-Fragment" accesskey="n" rel="next">Host Fragment</a>, Up: <a href="#Fragments" accesskey="u" rel="up">Fragments</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Target-Makefile-Fragments"></a>
<h3 class="section">19.1 Target Makefile Fragments</h3>
<a name="index-target-makefile-fragment"></a>
<a name="index-t_002dtarget"></a>

<p>Target makefile fragments can set these Makefile variables.
</p>
<dl compact="compact">
<dd><a name="index-LIBGCC2_005fCFLAGS"></a>
</dd>
<dt><code>LIBGCC2_CFLAGS</code></dt>
<dd><p>Compiler flags to use when compiling <samp>libgcc2.c</samp>.
</p>
<a name="index-LIB2FUNCS_005fEXTRA"></a>
</dd>
<dt><code>LIB2FUNCS_EXTRA</code></dt>
<dd><p>A list of source file names to be compiled or assembled and inserted
into <samp>libgcc.a</samp>.
</p>
<a name="index-CRTSTUFF_005fT_005fCFLAGS"></a>
</dd>
<dt><code>CRTSTUFF_T_CFLAGS</code></dt>
<dd><p>Special flags used when compiling <samp>crtstuff.c</samp>.
See <a href="#Initialization">Initialization</a>.
</p>
<a name="index-CRTSTUFF_005fT_005fCFLAGS_005fS"></a>
</dd>
<dt><code>CRTSTUFF_T_CFLAGS_S</code></dt>
<dd><p>Special flags used when compiling <samp>crtstuff.c</samp> for shared
linking.  Used if you use <samp>crtbeginS.o</samp> and <samp>crtendS.o</samp>
in <code>EXTRA-PARTS</code>.
See <a href="#Initialization">Initialization</a>.
</p>
<a name="index-MULTILIB_005fOPTIONS"></a>
</dd>
<dt><code>MULTILIB_OPTIONS</code></dt>
<dd><p>For some targets, invoking GCC in different ways produces objects
that can not be linked together.  For example, for some targets GCC
produces both big and little endian code.  For these targets, you must
arrange for multiple versions of <samp>libgcc.a</samp> to be compiled, one for
each set of incompatible options.  When GCC invokes the linker, it
arranges to link in the right version of <samp>libgcc.a</samp>, based on
the command line options used.
</p>
<p>The <code>MULTILIB_OPTIONS</code> macro lists the set of options for which
special versions of <samp>libgcc.a</samp> must be built.  Write options that
are mutually incompatible side by side, separated by a slash.  Write
options that may be used together separated by a space.  The build
procedure will build all combinations of compatible options.
</p>
<p>For example, if you set <code>MULTILIB_OPTIONS</code> to &lsquo;<samp>m68000/m68020
msoft-float</samp>&rsquo;, <samp>Makefile</samp> will build special versions of
<samp>libgcc.a</samp> using the following sets of options:  <samp>-m68000</samp>,
<samp>-m68020</samp>, <samp>-msoft-float</samp>, &lsquo;<samp>-m68000 -msoft-float</samp>&rsquo;, and
&lsquo;<samp>-m68020 -msoft-float</samp>&rsquo;.
</p>
<a name="index-MULTILIB_005fDIRNAMES"></a>
</dd>
<dt><code>MULTILIB_DIRNAMES</code></dt>
<dd><p>If <code>MULTILIB_OPTIONS</code> is used, this variable specifies the
directory names that should be used to hold the various libraries.
Write one element in <code>MULTILIB_DIRNAMES</code> for each element in
<code>MULTILIB_OPTIONS</code>.  If <code>MULTILIB_DIRNAMES</code> is not used, the
default value will be <code>MULTILIB_OPTIONS</code>, with all slashes treated
as spaces.
</p>
<p><code>MULTILIB_DIRNAMES</code> describes the multilib directories using GCC
conventions and is applied to directories that are part of the GCC
installation.  When multilib-enabled, the compiler will add a
subdirectory of the form <var>prefix</var>/<var>multilib</var> before each
directory in the search path for libraries and crt files.
</p>
<p>For example, if <code>MULTILIB_OPTIONS</code> is set to &lsquo;<samp>m68000/m68020
msoft-float</samp>&rsquo;, then the default value of <code>MULTILIB_DIRNAMES</code> is
&lsquo;<samp>m68000 m68020 msoft-float</samp>&rsquo;.  You may specify a different value if
you desire a different set of directory names.
</p>
<a name="index-MULTILIB_005fMATCHES"></a>
</dd>
<dt><code>MULTILIB_MATCHES</code></dt>
<dd><p>Sometimes the same option may be written in two different ways.  If an
option is listed in <code>MULTILIB_OPTIONS</code>, GCC needs to know about
any synonyms.  In that case, set <code>MULTILIB_MATCHES</code> to a list of
items of the form &lsquo;<samp>option=option</samp>&rsquo; to describe all relevant
synonyms.  For example, &lsquo;<samp>m68000=mc68000 m68020=mc68020</samp>&rsquo;.
</p>
<a name="index-MULTILIB_005fEXCEPTIONS"></a>
</dd>
<dt><code>MULTILIB_EXCEPTIONS</code></dt>
<dd><p>Sometimes when there are multiple sets of <code>MULTILIB_OPTIONS</code> being
specified, there are combinations that should not be built.  In that
case, set <code>MULTILIB_EXCEPTIONS</code> to be all of the switch exceptions
in shell case syntax that should not be built.
</p>
<p>For example the ARM processor cannot execute both hardware floating
point instructions and the reduced size THUMB instructions at the same
time, so there is no need to build libraries with both of these
options enabled.  Therefore <code>MULTILIB_EXCEPTIONS</code> is set to:
</p><div class="smallexample">
<pre class="smallexample">*mthumb/*mhard-float*
</pre></div>

<a name="index-MULTILIB_005fREQUIRED"></a>
</dd>
<dt><code>MULTILIB_REQUIRED</code></dt>
<dd><p>Sometimes when there are only a few combinations are required, it would
be a big effort to come up with a <code>MULTILIB_EXCEPTIONS</code> list to
cover all undesired ones.  In such a case, just listing all the required
combinations in <code>MULTILIB_REQUIRED</code> would be more straightforward.
</p>
<p>The way to specify the entries in <code>MULTILIB_REQUIRED</code> is same with
the way used for <code>MULTILIB_EXCEPTIONS</code>, only this time what are
required will be specified.  Suppose there are multiple sets of
<code>MULTILIB_OPTIONS</code> and only two combinations are required, one
for ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU, the
<code>MULTILIB_REQUIRED</code> can be set to:
</p><div class="smallexample">
<pre class="smallexample"><code>MULTILIB_REQUIRED</code> =  mthumb/march=armv7-m
<code>MULTILIB_REQUIRED</code> += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16
</pre></div>

<p>The <code>MULTILIB_REQUIRED</code> can be used together with
<code>MULTILIB_EXCEPTIONS</code>.  The option combinations generated from
<code>MULTILIB_OPTIONS</code> will be filtered by <code>MULTILIB_EXCEPTIONS</code>
and then by <code>MULTILIB_REQUIRED</code>.
</p>
<a name="index-MULTILIB_005fREUSE"></a>
</dd>
<dt><code>MULTILIB_REUSE</code></dt>
<dd><p>Sometimes it is desirable to reuse one existing multilib for different
sets of options.  Such kind of reuse can minimize the number of multilib
variants.  And for some targets it is better to reuse an existing multilib
than to fall back to default multilib when there is no corresponding multilib.
This can be done by adding reuse rules to <code>MULTILIB_REUSE</code>.
</p>
<p>A reuse rule is comprised of two parts connected by equality sign.  The left part
is option set used to build multilib and the right part is option set that will
reuse this multilib.  The order of options in the left part matters and should be
same with those specified in <code>MULTILIB_REQUIRED</code> or aligned with order in
<code>MULTILIB_OPTIONS</code>.  There is no such limitation for options in right part
as we don&rsquo;t build multilib from them.  But the equality sign in both parts should
be replaced with period.
</p>
<p>The <code>MULTILIB_REUSE</code> is different from <code>MULTILIB_MATCHES</code> in that it
sets up relations between two option sets rather than two options.  Here is an
example to demo how we reuse libraries built in Thumb mode for applications built
in ARM mode:
</p><div class="smallexample">
<pre class="smallexample"><code>MULTILIB_REUSE</code> = mthumb/march.armv7-r=marm/march.armv7-r
</pre></div>

<p>Before the advent of <code>MULTILIB_REUSE</code>, GCC select multilib by comparing command
line options with options used to build multilib.  The <code>MULTILIB_REUSE</code> is
complementary to that way.  Only when the original comparison matches nothing it will
work to see if it is OK to reuse some existing multilib.
</p>
<a name="index-MULTILIB_005fEXTRA_005fOPTS"></a>
</dd>
<dt><code>MULTILIB_EXTRA_OPTS</code></dt>
<dd><p>Sometimes it is desirable that when building multiple versions of
<samp>libgcc.a</samp> certain options should always be passed on to the
compiler.  In that case, set <code>MULTILIB_EXTRA_OPTS</code> to be the list
of options to be used for all builds.  If you set this, you should
probably set <code>CRTSTUFF_T_CFLAGS</code> to a dash followed by it.
</p>
<a name="index-MULTILIB_005fOSDIRNAMES"></a>
</dd>
<dt><code>MULTILIB_OSDIRNAMES</code></dt>
<dd><p>If <code>MULTILIB_OPTIONS</code> is used, this variable specifies 
a list of subdirectory names, that are used to modify the search
path depending on the chosen multilib.  Unlike <code>MULTILIB_DIRNAMES</code>,
<code>MULTILIB_OSDIRNAMES</code> describes the multilib directories using
operating systems conventions, and is applied to the directories such as
<code>lib</code> or those in the <code>LIBRARY_PATH</code> environment variable.
The format is either the same as of
<code>MULTILIB_DIRNAMES</code>, or a set of mappings.  When it is the same
as <code>MULTILIB_DIRNAMES</code>, it describes the multilib directories
using operating system conventions, rather than GCC conventions.  When it is a set
of mappings of the form <var>gccdir</var>=<var>osdir</var>, the left side gives
the GCC convention and the right gives the equivalent OS defined
location.  If the <var>osdir</var> part begins with a &lsquo;<samp>!</samp>&rsquo;,
GCC will not search in the non-multilib directory and use
exclusively the multilib directory.  Otherwise, the compiler will
examine the search path for libraries and crt files twice; the first
time it will add <var>multilib</var> to each directory in the search path,
the second it will not.
</p>
<p>For configurations that support both multilib and multiarch,
<code>MULTILIB_OSDIRNAMES</code> also encodes the multiarch name, thus
subsuming <code>MULTIARCH_DIRNAME</code>.  The multiarch name is appended to
each directory name, separated by a colon (e.g.
&lsquo;<samp>../lib32:i386-linux-gnu</samp>&rsquo;).
</p>
<p>Each multiarch subdirectory will be searched before the corresponding OS
multilib directory, for example &lsquo;<samp>/lib/i386-linux-gnu</samp>&rsquo; before
&lsquo;<samp>/lib/../lib32</samp>&rsquo;.  The multiarch name will also be used to modify the
system header search path, as explained for <code>MULTIARCH_DIRNAME</code>.
</p>
<a name="index-MULTIARCH_005fDIRNAME"></a>
</dd>
<dt><code>MULTIARCH_DIRNAME</code></dt>
<dd><p>This variable specifies the multiarch name for configurations that are
multiarch-enabled but not multilibbed configurations.
</p>
<p>The multiarch name is used to augment the search path for libraries, crt
files and system header files with additional locations.  The compiler
will add a multiarch subdirectory of the form
<var>prefix</var>/<var>multiarch</var> before each directory in the library and
crt search path.  It will also add two directories
<code>LOCAL_INCLUDE_DIR</code>/<var>multiarch</var> and
<code>NATIVE_SYSTEM_HEADER_DIR</code>/<var>multiarch</var>) to the system header
search path, respectively before <code>LOCAL_INCLUDE_DIR</code> and
<code>NATIVE_SYSTEM_HEADER_DIR</code>.
</p>
<p><code>MULTIARCH_DIRNAME</code> is not used for configurations that support
both multilib and multiarch.  In that case, multiarch names are encoded
in <code>MULTILIB_OSDIRNAMES</code> instead.
</p>
<p>More documentation about multiarch can be found at
<a href="http://wiki.debian.org/Multiarch">http://wiki.debian.org/Multiarch</a>.
</p>
<a name="index-SPECS"></a>
</dd>
<dt><code>SPECS</code></dt>
<dd><p>Unfortunately, setting <code>MULTILIB_EXTRA_OPTS</code> is not enough, since
it does not affect the build of target libraries, at least not the
build of the default multilib.  One possible work-around is to use
<code>DRIVER_SELF_SPECS</code> to bring options from the <samp>specs</samp> file
as if they had been passed in the compiler driver command line.
However, you don&rsquo;t want to be adding these options after the toolchain
is installed, so you can instead tweak the <samp>specs</samp> file that will
be used during the toolchain build, while you still install the
original, built-in <samp>specs</samp>.  The trick is to set <code>SPECS</code> to
some other filename (say <samp>specs.install</samp>), that will then be
created out of the built-in specs, and introduce a <samp>Makefile</samp>
rule to generate the <samp>specs</samp> file that&rsquo;s going to be used at
build time out of your <samp>specs.install</samp>.
</p>
</dd>
<dt><code>T_CFLAGS</code></dt>
<dd><p>These are extra flags to pass to the C compiler.  They are used both
when building GCC, and when compiling things with the just-built GCC.
This variable is deprecated and should not be used.
</p></dd>
</dl>

<hr>
<a name="Host-Fragment"></a>
<div class="header">
<p>
Previous: <a href="#Target-Fragment" accesskey="p" rel="prev">Target Fragment</a>, Up: <a href="#Fragments" accesskey="u" rel="up">Fragments</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Host-Makefile-Fragments"></a>
<h3 class="section">19.2 Host Makefile Fragments</h3>
<a name="index-host-makefile-fragment"></a>
<a name="index-x_002dhost"></a>

<p>The use of <samp>x-<var>host</var></samp> fragments is discouraged.  You should only
use it for makefile dependencies.
</p>
<hr>
<a name="Collect2"></a>
<div class="header">
<p>
Next: <a href="#Header-Dirs" accesskey="n" rel="next">Header Dirs</a>, Previous: <a href="#Fragments" accesskey="p" rel="prev">Fragments</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="collect2"></a>
<h2 class="chapter">20 <code>collect2</code></h2>

<p>GCC uses a utility called <code>collect2</code> on nearly all systems to arrange
to call various initialization functions at start time.
</p>
<p>The program <code>collect2</code> works by linking the program once and
looking through the linker output file for symbols with particular names
indicating they are constructor functions.  If it finds any, it
creates a new temporary &lsquo;<samp>.c</samp>&rsquo; file containing a table of them,
compiles it, and links the program a second time including that file.
</p>
<a name="index-_005f_005fmain"></a>
<a name="index-constructors_002c-automatic-calls"></a>
<p>The actual calls to the constructors are carried out by a subroutine
called <code>__main</code>, which is called (automatically) at the beginning
of the body of <code>main</code> (provided <code>main</code> was compiled with GNU
CC).  Calling <code>__main</code> is necessary, even when compiling C code, to
allow linking C and C++ object code together.  (If you use
<samp>-nostdlib</samp>, you get an unresolved reference to <code>__main</code>,
since it&rsquo;s defined in the standard GCC library.  Include <samp>-lgcc</samp> at
the end of your compiler command line to resolve this reference.)
</p>
<p>The program <code>collect2</code> is installed as <code>ld</code> in the directory
where the passes of the compiler are installed.  When <code>collect2</code>
needs to find the <em>real</em> <code>ld</code>, it tries the following file
names:
</p>
<ul>
<li> a hard coded linker file name, if GCC was configured with the
<samp>--with-ld</samp> option.

</li><li> <samp>real-ld</samp> in the directories listed in the compiler&rsquo;s search
directories.

</li><li> <samp>real-ld</samp> in the directories listed in the environment variable
<code>PATH</code>.

</li><li> The file specified in the <code>REAL_LD_FILE_NAME</code> configuration macro,
if specified.

</li><li> <samp>ld</samp> in the compiler&rsquo;s search directories, except that
<code>collect2</code> will not execute itself recursively.

</li><li> <samp>ld</samp> in <code>PATH</code>.
</li></ul>

<p>&ldquo;The compiler&rsquo;s search directories&rdquo; means all the directories where
<code>gcc</code> searches for passes of the compiler.  This includes
directories that you specify with <samp>-B</samp>.
</p>
<p>Cross-compilers search a little differently:
</p>
<ul>
<li> <samp>real-ld</samp> in the compiler&rsquo;s search directories.

</li><li> <samp><var>target</var>-real-ld</samp> in <code>PATH</code>.

</li><li> The file specified in the <code>REAL_LD_FILE_NAME</code> configuration macro,
if specified.

</li><li> <samp>ld</samp> in the compiler&rsquo;s search directories.

</li><li> <samp><var>target</var>-ld</samp> in <code>PATH</code>.
</li></ul>

<p><code>collect2</code> explicitly avoids running <code>ld</code> using the file name
under which <code>collect2</code> itself was invoked.  In fact, it remembers
up a list of such names&mdash;in case one copy of <code>collect2</code> finds
another copy (or version) of <code>collect2</code> installed as <code>ld</code> in a
second place in the search path.
</p>
<p><code>collect2</code> searches for the utilities <code>nm</code> and <code>strip</code>
using the same algorithm as above for <code>ld</code>.
</p>
<hr>
<a name="Header-Dirs"></a>
<div class="header">
<p>
Next: <a href="#Type-Information" accesskey="n" rel="next">Type Information</a>, Previous: <a href="#Collect2" accesskey="p" rel="prev">Collect2</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Standard-Header-File-Directories"></a>
<h2 class="chapter">21 Standard Header File Directories</h2>

<p><code>GCC_INCLUDE_DIR</code> means the same thing for native and cross.  It is
where GCC stores its private include files, and also where GCC
stores the fixed include files.  A cross compiled GCC runs
<code>fixincludes</code> on the header files in <samp>$(tooldir)/include</samp>.
(If the cross compilation header files need to be fixed, they must be
installed before GCC is built.  If the cross compilation header files
are already suitable for GCC, nothing special need be done).
</p>
<p><code>GPLUSPLUS_INCLUDE_DIR</code> means the same thing for native and cross.  It
is where <code>g++</code> looks first for header files.  The C++ library
installs only target independent header files in that directory.
</p>
<p><code>LOCAL_INCLUDE_DIR</code> is used only by native compilers.  GCC
doesn&rsquo;t install anything there.  It is normally
<samp>/usr/local/include</samp>.  This is where local additions to a packaged
system should place header files.
</p>
<p><code>CROSS_INCLUDE_DIR</code> is used only by cross compilers.  GCC
doesn&rsquo;t install anything there.
</p>
<p><code>TOOL_INCLUDE_DIR</code> is used for both native and cross compilers.  It
is the place for other packages to install header files that GCC will
use.  For a cross-compiler, this is the equivalent of
<samp>/usr/include</samp>.  When you build a cross-compiler,
<code>fixincludes</code> processes any header files in this directory.
</p>
<hr>
<a name="Type-Information"></a>
<div class="header">
<p>
Next: <a href="#Plugins" accesskey="n" rel="next">Plugins</a>, Previous: <a href="#Header-Dirs" accesskey="p" rel="prev">Header Dirs</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Memory-Management-and-Type-Information"></a>
<h2 class="chapter">22 Memory Management and Type Information</h2>
<a name="index-GGC"></a>
<a name="index-GTY"></a>

<p>GCC uses some fairly sophisticated memory management techniques, which
involve determining information about GCC&rsquo;s data structures from GCC&rsquo;s
source code and using this information to perform garbage collection and
implement precompiled headers.
</p>
<p>A full C++ parser would be too complicated for this task, so a limited
subset of C++ is interpreted and special markers are used to determine
what parts of the source to look at.  All <code>struct</code>, <code>union</code>
and <code>template</code> structure declarations that define data structures
that are allocated under control of the garbage collector must be
marked.  All global variables that hold pointers to garbage-collected
memory must also be marked.  Finally, all global variables that need
to be saved and restored by a precompiled header must be marked.  (The
precompiled header mechanism can only save static variables if they&rsquo;re
scalar. Complex data structures must be allocated in garbage-collected
memory to be saved in a precompiled header.)
</p>
<p>The full format of a marker is
</p><div class="smallexample">
<pre class="smallexample">GTY (([<var>option</var>] [(<var>param</var>)], [<var>option</var>] [(<var>param</var>)] &hellip;))
</pre></div>
<p>but in most cases no options are needed.  The outer double parentheses
are still necessary, though: <code>GTY(())</code>.  Markers can appear:
</p>
<ul>
<li> In a structure definition, before the open brace;
</li><li> In a global variable declaration, after the keyword <code>static</code> or
<code>extern</code>; and
</li><li> In a structure field definition, before the name of the field.
</li></ul>

<p>Here are some examples of marking simple data structures and globals.
</p>
<div class="smallexample">
<pre class="smallexample">struct GTY(()) <var>tag</var>
{
  <var>fields</var>&hellip;
};

typedef struct GTY(()) <var>tag</var>
{
  <var>fields</var>&hellip;
} *<var>typename</var>;

static GTY(()) struct <var>tag</var> *<var>list</var>;   /* <span class="roman">points to GC memory</span> */
static GTY(()) int <var>counter</var>;        /* <span class="roman">save counter in a PCH</span> */
</pre></div>

<p>The parser understands simple typedefs such as
<code>typedef struct <var>tag</var> *<var>name</var>;</code> and
<code>typedef int <var>name</var>;</code>.
These don&rsquo;t need to be marked.
</p>
<p>Since <code>gengtype</code>&rsquo;s understanding of C++ is limited, there are
several constructs and declarations that are not supported inside
classes/structures marked for automatic GC code generation.  The
following C++ constructs produce a <code>gengtype</code> error on
structures/classes marked for automatic GC code generation:
</p>
<ul>
<li> Type definitions inside classes/structures are not supported.
</li><li> Enumerations inside classes/structures are not supported.
</li></ul>

<p>If you have a class or structure using any of the above constructs,
you need to mark that class as <code>GTY ((user))</code> and provide your
own marking routines (see section <a href="#User-GC">User GC</a> for details).
</p>
<p>It is always valid to include function definitions inside classes.
Those are always ignored by <code>gengtype</code>, as it only cares about
data members.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#GTY-Options" accesskey="1">GTY Options</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What goes inside a <code>GTY(())</code>.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#User-GC" accesskey="2">User GC</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Adding user-provided GC marking routines.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#GGC-Roots" accesskey="3">GGC Roots</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Making global variables GGC roots.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Files" accesskey="4">Files</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How the generated files work.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Invoking-the-garbage-collector" accesskey="5">Invoking the garbage collector</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to invoke the garbage collector.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Troubleshooting" accesskey="6">Troubleshooting</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">When something does not work as expected.
</td></tr>
</table>

<hr>
<a name="GTY-Options"></a>
<div class="header">
<p>
Next: <a href="#User-GC" accesskey="n" rel="next">User GC</a>, Up: <a href="#Type-Information" accesskey="u" rel="up">Type Information</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-Inside-of-a-GTY_0028_0028_0029_0029"></a>
<h3 class="section">22.1 The Inside of a <code>GTY(())</code></h3>

<p>Sometimes the C code is not enough to fully describe the type
structure.  Extra information can be provided with <code>GTY</code> options
and additional markers.  Some options take a parameter, which may be
either a string or a type name, depending on the parameter.  If an
option takes no parameter, it is acceptable either to omit the
parameter entirely, or to provide an empty string as a parameter.  For
example, <code>GTY&nbsp;((skip))<!-- /@w --></code> and <code>GTY&nbsp;((skip&nbsp;(&quot;&quot;)))<!-- /@w --></code> are
equivalent.
</p>
<p>When the parameter is a string, often it is a fragment of C code.  Four
special escapes may be used in these strings, to refer to pieces of
the data structure being marked:
</p>
<a name="index-_0025-in-GTY-option"></a>
<dl compact="compact">
<dt><code>%h</code></dt>
<dd><p>The current structure.
</p></dd>
<dt><code>%1</code></dt>
<dd><p>The structure that immediately contains the current structure.
</p></dd>
<dt><code>%0</code></dt>
<dd><p>The outermost structure that contains the current structure.
</p></dd>
<dt><code>%a</code></dt>
<dd><p>A partial expression of the form <code>[i1][i2]&hellip;</code> that indexes
the array item currently being marked.
</p></dd>
</dl>

<p>For instance, suppose that you have a structure of the form
</p><div class="smallexample">
<pre class="smallexample">struct A {
  &hellip;
};
struct B {
  struct A foo[12];
};
</pre></div>
<p>and <code>b</code> is a variable of type <code>struct B</code>.  When marking
&lsquo;<samp>b.foo[11]</samp>&rsquo;, <code>%h</code> would expand to &lsquo;<samp>b.foo[11]</samp>&rsquo;,
<code>%0</code> and <code>%1</code> would both expand to &lsquo;<samp>b</samp>&rsquo;, and <code>%a</code>
would expand to &lsquo;<samp>[11]</samp>&rsquo;.
</p>
<p>As in ordinary C, adjacent strings will be concatenated; this is
helpful when you have a complicated expression.
</p><div class="smallexample">
<pre class="smallexample">GTY ((chain_next (&quot;TREE_CODE (&amp;%h.generic) == INTEGER_TYPE&quot;
                  &quot; ? TYPE_NEXT_VARIANT (&amp;%h.generic)&quot;
                  &quot; : TREE_CHAIN (&amp;%h.generic)&quot;)))
</pre></div>

<p>The available options are:
</p>
<dl compact="compact">
<dd><a name="index-length"></a>
</dd>
<dt><code>length (&quot;<var>expression</var>&quot;)</code></dt>
<dd>
<p>There are two places the type machinery will need to be explicitly told
the length of an array of non-atomic objects.  The first case is when a
structure ends in a variable-length array, like this:
</p><div class="smallexample">
<pre class="smallexample">struct GTY(()) rtvec_def {
  int num_elem;         /* <span class="roman">number of elements</span> */
  rtx GTY ((length (&quot;%h.num_elem&quot;))) elem[1];
};
</pre></div>

<p>In this case, the <code>length</code> option is used to override the specified
array length (which should usually be <code>1</code>).  The parameter of the
option is a fragment of C code that calculates the length.
</p>
<p>The second case is when a structure or a global variable contains a
pointer to an array, like this:
</p><div class="smallexample">
<pre class="smallexample">struct gimple_omp_for_iter * GTY((length (&quot;%h.collapse&quot;))) iter;
</pre></div>
<p>In this case, <code>iter</code> has been allocated by writing something like
</p><div class="smallexample">
<pre class="smallexample">  x-&gt;iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
</pre></div>
<p>and the <code>collapse</code> provides the length of the field.
</p>
<p>This second use of <code>length</code> also works on global variables, like:
</p><pre class="verbatim">static GTY((length(&quot;reg_known_value_size&quot;))) rtx *reg_known_value;
</pre>
<p>Note that the <code>length</code> option is only meant for use with arrays of
non-atomic objects, that is, objects that contain pointers pointing to
other GTY-managed objects.  For other GC-allocated arrays and strings
you should use <code>atomic</code>.
</p>
<a name="index-skip"></a>
</dd>
<dt><code>skip</code></dt>
<dd>
<p>If <code>skip</code> is applied to a field, the type machinery will ignore it.
This is somewhat dangerous; the only safe use is in a union when one
field really isn&rsquo;t ever used.
</p>
<a name="index-desc"></a>
<a name="index-tag"></a>
<a name="index-default"></a>
</dd>
<dt><code>desc (&quot;<var>expression</var>&quot;)</code></dt>
<dt><code>tag (&quot;<var>constant</var>&quot;)</code></dt>
<dt><code>default</code></dt>
<dd>
<p>The type machinery needs to be told which field of a <code>union</code> is
currently active.  This is done by giving each field a constant
<code>tag</code> value, and then specifying a discriminator using <code>desc</code>.
The value of the expression given by <code>desc</code> is compared against
each <code>tag</code> value, each of which should be different.  If no
<code>tag</code> is matched, the field marked with <code>default</code> is used if
there is one, otherwise no field in the union will be marked.
</p>
<p>In the <code>desc</code> option, the &ldquo;current structure&rdquo; is the union that
it discriminates.  Use <code>%1</code> to mean the structure containing it.
There are no escapes available to the <code>tag</code> option, since it is a
constant.
</p>
<p>For example,
</p><div class="smallexample">
<pre class="smallexample">struct GTY(()) tree_binding
{
  struct tree_common common;
  union tree_binding_u {
    tree GTY ((tag (&quot;0&quot;))) scope;
    struct cp_binding_level * GTY ((tag (&quot;1&quot;))) level;
  } GTY ((desc (&quot;BINDING_HAS_LEVEL_P ((tree)&amp;%0)&quot;))) xscope;
  tree value;
};
</pre></div>

<p>In this example, the value of BINDING_HAS_LEVEL_P when applied to a
<code>struct tree_binding *</code> is presumed to be 0 or 1.  If 1, the type
mechanism will treat the field <code>level</code> as being present and if 0,
will treat the field <code>scope</code> as being present.
</p>
<a name="index-param_005fis"></a>
<a name="index-use_005fparam"></a>
</dd>
<dt><code>param_is (<var>type</var>)</code></dt>
<dt><code>use_param</code></dt>
<dd>
<p>Sometimes it&rsquo;s convenient to define some data structure to work on
generic pointers (that is, <code>PTR</code>) and then use it with a specific
type.  <code>param_is</code> specifies the real type pointed to, and
<code>use_param</code> says where in the generic data structure that type
should be put.
</p>
<p>For instance, to have a <code>htab_t</code> that points to trees, one would
write the definition of <code>htab_t</code> like this:
</p><div class="smallexample">
<pre class="smallexample">typedef struct GTY(()) {
  &hellip;
  void ** GTY ((use_param, &hellip;)) entries;
  &hellip;
} htab_t;
</pre></div>
<p>and then declare variables like this:
</p><div class="smallexample">
<pre class="smallexample">  static htab_t GTY ((param_is (union tree_node))) ict;
</pre></div>

<a name="index-paramn_005fis"></a>
<a name="index-use_005fparamn"></a>
</dd>
<dt><code>param<var>n</var>_is (<var>type</var>)</code></dt>
<dt><code>use_param<var>n</var></code></dt>
<dd>
<p>In more complicated cases, the data structure might need to work on
several different types, which might not necessarily all be pointers.
For this, <code>param1_is</code> through <code>param9_is</code> may be used to
specify the real type of a field identified by <code>use_param1</code> through
<code>use_param9</code>.
</p>
<a name="index-use_005fparams"></a>
</dd>
<dt><code>use_params</code></dt>
<dd>
<p>When a structure contains another structure that is parameterized,
there&rsquo;s no need to do anything special, the inner structure inherits the
parameters of the outer one.  When a structure contains a pointer to a
parameterized structure, the type machinery won&rsquo;t automatically detect
this (it could, it just doesn&rsquo;t yet), so it&rsquo;s necessary to tell it that
the pointed-to structure should use the same parameters as the outer
structure.  This is done by marking the pointer with the
<code>use_params</code> option.
</p>
<a name="index-deletable"></a>
</dd>
<dt><code>deletable</code></dt>
<dd>
<p><code>deletable</code>, when applied to a global variable, indicates that when
garbage collection runs, there&rsquo;s no need to mark anything pointed to
by this variable, it can just be set to <code>NULL</code> instead.  This is used
to keep a list of free structures around for re-use.
</p>
<a name="index-if_005fmarked"></a>
</dd>
<dt><code>if_marked (&quot;<var>expression</var>&quot;)</code></dt>
<dd>
<p>Suppose you want some kinds of object to be unique, and so you put them
in a hash table.  If garbage collection marks the hash table, these
objects will never be freed, even if the last other reference to them
goes away.  GGC has special handling to deal with this: if you use the
<code>if_marked</code> option on a global hash table, GGC will call the
routine whose name is the parameter to the option on each hash table
entry.  If the routine returns nonzero, the hash table entry will
be marked as usual.  If the routine returns zero, the hash table entry
will be deleted.
</p>
<p>The routine <code>ggc_marked_p</code> can be used to determine if an element
has been marked already; in fact, the usual case is to use
<code>if_marked (&quot;ggc_marked_p&quot;)</code>.
</p>
<a name="index-mark_005fhook"></a>
</dd>
<dt><code>mark_hook (&quot;<var>hook-routine-name</var>&quot;)</code></dt>
<dd>
<p>If provided for a structure or union type, the given
<var>hook-routine-name</var> (between double-quotes) is the name of a
routine called when the garbage collector has just marked the data as
reachable. This routine should not change the data, or call any ggc
routine. Its only argument is a pointer to the just marked (const)
structure or union.
</p>
<a name="index-maybe_005fundef"></a>
</dd>
<dt><code>maybe_undef</code></dt>
<dd>
<p>When applied to a field, <code>maybe_undef</code> indicates that it&rsquo;s OK if
the structure that this fields points to is never defined, so long as
this field is always <code>NULL</code>.  This is used to avoid requiring
backends to define certain optional structures.  It doesn&rsquo;t work with
language frontends.
</p>
<a name="index-nested_005fptr"></a>
</dd>
<dt><code>nested_ptr (<var>type</var>, &quot;<var>to expression</var>&quot;, &quot;<var>from expression</var>&quot;)</code></dt>
<dd>
<p>The type machinery expects all pointers to point to the start of an
object.  Sometimes for abstraction purposes it&rsquo;s convenient to have
a pointer which points inside an object.  So long as it&rsquo;s possible to
convert the original object to and from the pointer, such pointers
can still be used.  <var>type</var> is the type of the original object,
the <var>to expression</var> returns the pointer given the original object,
and the <var>from expression</var> returns the original object given
the pointer.  The pointer will be available using the <code>%h</code>
escape.
</p>
<a name="index-chain_005fnext"></a>
<a name="index-chain_005fprev"></a>
<a name="index-chain_005fcircular"></a>
</dd>
<dt><code>chain_next (&quot;<var>expression</var>&quot;)</code></dt>
<dt><code>chain_prev (&quot;<var>expression</var>&quot;)</code></dt>
<dt><code>chain_circular (&quot;<var>expression</var>&quot;)</code></dt>
<dd>
<p>It&rsquo;s helpful for the type machinery to know if objects are often
chained together in long lists; this lets it generate code that uses
less stack space by iterating along the list instead of recursing down
it.  <code>chain_next</code> is an expression for the next item in the list,
<code>chain_prev</code> is an expression for the previous item.  For singly
linked lists, use only <code>chain_next</code>; for doubly linked lists, use
both.  The machinery requires that taking the next item of the
previous item gives the original item.  <code>chain_circular</code> is similar
to <code>chain_next</code>, but can be used for circular single linked lists.
</p>
<a name="index-reorder"></a>
</dd>
<dt><code>reorder (&quot;<var>function name</var>&quot;)</code></dt>
<dd>
<p>Some data structures depend on the relative ordering of pointers.  If
the precompiled header machinery needs to change that ordering, it
will call the function referenced by the <code>reorder</code> option, before
changing the pointers in the object that&rsquo;s pointed to by the field the
option applies to.  The function must take four arguments, with the
signature &lsquo;<samp>void&nbsp;*,&nbsp;void&nbsp;*,&nbsp;<span class="nolinebreak">gt_pointer_operator,</span>&nbsp;void&nbsp;*<!-- /@w --></samp>&rsquo;.
The first parameter is a pointer to the structure that contains the
object being updated, or the object itself if there is no containing
structure.  The second parameter is a cookie that should be ignored.
The third parameter is a routine that, given a pointer, will update it
to its correct new value.  The fourth parameter is a cookie that must
be passed to the second parameter.
</p>
<p>PCH cannot handle data structures that depend on the absolute values
of pointers.  <code>reorder</code> functions can be expensive.  When
possible, it is better to depend on properties of the data, like an ID
number or the hash of a string instead.
</p>
<a name="index-variable_005fsize"></a>
</dd>
<dt><code>variable_size</code></dt>
<dd>
<p>The type machinery expects the types to be of constant size.  When this
is not true, for example, with structs that have array fields or unions,
the type machinery cannot tell how many bytes need to be allocated at
each allocation.  The <code>variable_size</code> is used to mark such types.
The type machinery then provides allocators that take a parameter
indicating an exact size of object being allocated.  Note that the size
must be provided in bytes whereas the <code>length</code> option works with
array lengths in number of elements.
</p>
<p>For example,
</p><div class="smallexample">
<pre class="smallexample">struct GTY((variable_size)) sorted_fields_type {
  int len;
  tree GTY((length (&quot;%h.len&quot;))) elts[1];
};
</pre></div>

<p>Then the objects of <code>struct sorted_fields_type</code> are allocated in GC
memory as follows:
</p><div class="smallexample">
<pre class="smallexample">  field_vec = ggc_alloc_sorted_fields_type (size);
</pre></div>

<p>If <var>field_vec-&gt;elts</var> stores <var>n</var> elements, then <var>size</var>
could be calculated as follows:
</p><div class="smallexample">
<pre class="smallexample">  size_t size = sizeof (struct sorted_fields_type) + n * sizeof (tree);
</pre></div>

<a name="index-atomic"></a>
</dd>
<dt><code>atomic</code></dt>
<dd>
<p>The <code>atomic</code> option can only be used with pointers.  It informs
the GC machinery that the memory that the pointer points to does not
contain any pointers, and hence it should be treated by the GC and PCH
machinery as an &ldquo;atomic&rdquo; block of memory that does not need to be
examined when scanning memory for pointers.  In particular, the
machinery will not scan that memory for pointers to mark them as
reachable (when marking pointers for GC) or to relocate them (when
writing a PCH file).
</p>
<p>The <code>atomic</code> option differs from the <code>skip</code> option.
<code>atomic</code> keeps the memory under Garbage Collection, but makes the
GC ignore the contents of the memory.  <code>skip</code> is more drastic in
that it causes the pointer and the memory to be completely ignored by
the Garbage Collector.  So, memory marked as <code>atomic</code> is
automatically freed when no longer reachable, while memory marked as
<code>skip</code> is not.
</p>
<p>The <code>atomic</code> option must be used with great care, because all
sorts of problem can occur if used incorrectly, that is, if the memory
the pointer points to does actually contain a pointer.
</p>
<p>Here is an example of how to use it:
</p><div class="smallexample">
<pre class="smallexample">struct GTY(()) my_struct {
  int number_of_elements;
  unsigned int * GTY ((atomic)) elements;
};
</pre></div>
<p>In this case, <code>elements</code> is a pointer under GC, and the memory it
points to needs to be allocated using the Garbage Collector, and will
be freed automatically by the Garbage Collector when it is no longer
referenced.  But the memory that the pointer points to is an array of
<code>unsigned int</code> elements, and the GC must not try to scan it to
find pointers to mark or relocate, which is why it is marked with the
<code>atomic</code> option.
</p>
<p>Note that, currently, global variables can not be marked with
<code>atomic</code>; only fields of a struct can.  This is a known
limitation.  It would be useful to be able to mark global pointers
with <code>atomic</code> to make the PCH machinery aware of them so that
they are saved and restored correctly to PCH files.
</p>
<a name="index-special"></a>
</dd>
<dt><code>special (&quot;<var>name</var>&quot;)</code></dt>
<dd>
<p>The <code>special</code> option is used to mark types that have to be dealt
with by special case machinery.  The parameter is the name of the
special case.  See <samp>gengtype.c</samp> for further details.  Avoid
adding new special cases unless there is no other alternative.
</p>
<a name="index-user"></a>
</dd>
<dt><code>user</code></dt>
<dd>
<p>The <code>user</code> option indicates that the code to mark structure
fields is completely handled by user-provided routines.  See section
<a href="#User-GC">User GC</a> for details on what functions need to be provided.
</p></dd>
</dl>

<hr>
<a name="User-GC"></a>
<div class="header">
<p>
Next: <a href="#GGC-Roots" accesskey="n" rel="next">GGC Roots</a>, Previous: <a href="#GTY-Options" accesskey="p" rel="prev">GTY Options</a>, Up: <a href="#Type-Information" accesskey="u" rel="up">Type Information</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Support-for-user_002dprovided-GC-marking-routines"></a>
<h3 class="section">22.2 Support for user-provided GC marking routines</h3>
<a name="index-user-gc"></a>
<p>The garbage collector supports types for which no automatic marking
code is generated.  For these types, the user is required to provide
three functions: one to act as a marker for garbage collection, and
two functions to act as marker and pointer walker for pre-compiled
headers.
</p>
<p>Given a structure <code>struct GTY((user)) my_struct</code>, the following functions
should be defined to mark <code>my_struct</code>:
</p>
<div class="smallexample">
<pre class="smallexample">void gt_ggc_mx (my_struct *p)
{
  /* This marks field 'fld'.  */
  gt_ggc_mx (p-&gt;fld);
}

void gt_pch_nx (my_struct *p)
{
  /* This marks field 'fld'.  */
  gt_pch_nx (tp-&gt;fld);
}

void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie)
{
  /* For every field 'fld', call the given pointer operator.  */
  op (&amp;(tp-&gt;fld), cookie);
}
</pre></div>

<p>In general, each marker <code>M</code> should call <code>M</code> for every
pointer field in the structure.  Fields that are not allocated in GC
or are not pointers must be ignored.
</p>
<p>For embedded lists (e.g., structures with a <code>next</code> or <code>prev</code>
pointer), the marker must follow the chain and mark every element in
it.
</p>
<p>Note that the rules for the pointer walker <code>gt_pch_nx (my_struct
*, gt_pointer_operator, void *)</code> are slightly different.  In this
case, the operation <code>op</code> must be applied to the <em>address</em> of
every pointer field.
</p>
<a name="User_002dprovided-marking-routines-for-template-types"></a>
<h4 class="subsection">22.2.1 User-provided marking routines for template types</h4>
<p>When a template type <code>TP</code> is marked with <code>GTY</code>, all
instances of that type are considered user-provided types.  This means
that the individual instances of <code>TP</code> do not need to be marked
with <code>GTY</code>.  The user needs to provide template functions to mark
all the fields of the type.
</p>
<p>The following code snippets represent all the functions that need to
be provided. Note that type <code>TP</code> may reference to more than one
type. In these snippets, there is only one type <code>T</code>, but there
could be more.
</p>
<div class="smallexample">
<pre class="smallexample">template&lt;typename T&gt;
void gt_ggc_mx (TP&lt;T&gt; *tp)
{
  extern void gt_ggc_mx (T&amp;);

  /* This marks field 'fld' of type 'T'.  */
  gt_ggc_mx (tp-&gt;fld);
}

template&lt;typename T&gt;
void gt_pch_nx (TP&lt;T&gt; *tp)
{
  extern void gt_pch_nx (T&amp;);

  /* This marks field 'fld' of type 'T'.  */
  gt_pch_nx (tp-&gt;fld);
}

template&lt;typename T&gt;
void gt_pch_nx (TP&lt;T *&gt; *tp, gt_pointer_operator op, void *cookie)
{
  /* For every field 'fld' of 'tp' with type 'T *', call the given
     pointer operator.  */
  op (&amp;(tp-&gt;fld), cookie);
}

template&lt;typename T&gt;
void gt_pch_nx (TP&lt;T&gt; *tp, gt_pointer_operator, void *cookie)
{
  extern void gt_pch_nx (T *, gt_pointer_operator, void *);

  /* For every field 'fld' of 'tp' with type 'T', call the pointer
     walker for all the fields of T.  */
  gt_pch_nx (&amp;(tp-&gt;fld), op, cookie);
}
</pre></div>

<p>Support for user-defined types is currently limited. The following
restrictions apply:
</p>
<ol>
<li> Type <code>TP</code> and all the argument types <code>T</code> must be
marked with <code>GTY</code>.

</li><li> Type <code>TP</code> can only have type names in its argument list.

</li><li> The pointer walker functions are different for <code>TP&lt;T&gt;</code> and
<code>TP&lt;T *&gt;</code>. In the case of <code>TP&lt;T&gt;</code>, references to
<code>T</code> must be handled by calling <code>gt_pch_nx</code> (which
will, in turn, walk all the pointers inside fields of <code>T</code>).
In the case of <code>TP&lt;T *&gt;</code>, references to <code>T *</code> must be
handled by calling the <code>op</code> function on the address of the
pointer (see the code snippets above).
</li></ol>

<hr>
<a name="GGC-Roots"></a>
<div class="header">
<p>
Next: <a href="#Files" accesskey="n" rel="next">Files</a>, Previous: <a href="#User-GC" accesskey="p" rel="prev">User GC</a>, Up: <a href="#Type-Information" accesskey="u" rel="up">Type Information</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Marking-Roots-for-the-Garbage-Collector"></a>
<h3 class="section">22.3 Marking Roots for the Garbage Collector</h3>
<a name="index-roots_002c-marking"></a>
<a name="index-marking-roots"></a>

<p>In addition to keeping track of types, the type machinery also locates
the global variables (<em>roots</em>) that the garbage collector starts
at.  Roots must be declared using one of the following syntaxes:
</p>
<ul>
<li> <code>extern GTY(([<var>options</var>])) <var>type</var> <var>name</var>;</code>
</li><li> <code>static GTY(([<var>options</var>])) <var>type</var> <var>name</var>;</code>
</li></ul>
<p>The syntax
</p><ul>
<li> <code>GTY(([<var>options</var>])) <var>type</var> <var>name</var>;</code>
</li></ul>
<p>is <em>not</em> accepted.  There should be an <code>extern</code> declaration
of such a variable in a header somewhere&mdash;mark that, not the
definition.  Or, if the variable is only used in one file, make it
<code>static</code>.
</p>
<hr>
<a name="Files"></a>
<div class="header">
<p>
Next: <a href="#Invoking-the-garbage-collector" accesskey="n" rel="next">Invoking the garbage collector</a>, Previous: <a href="#GGC-Roots" accesskey="p" rel="prev">GGC Roots</a>, Up: <a href="#Type-Information" accesskey="u" rel="up">Type Information</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Source-Files-Containing-Type-Information"></a>
<h3 class="section">22.4 Source Files Containing Type Information</h3>
<a name="index-generated-files"></a>
<a name="index-files_002c-generated"></a>

<p>Whenever you add <code>GTY</code> markers to a source file that previously
had none, or create a new source file containing <code>GTY</code> markers,
there are three things you need to do:
</p>
<ol>
<li> You need to add the file to the list of source files the type
machinery scans.  There are four cases:

<ol>
<li> For a back-end file, this is usually done
automatically; if not, you should add it to <code>target_gtfiles</code> in
the appropriate port&rsquo;s entries in <samp>config.gcc</samp>.

</li><li> For files shared by all front ends, add the filename to the
<code>GTFILES</code> variable in <samp>Makefile.in</samp>.

</li><li> For files that are part of one front end, add the filename to the
<code>gtfiles</code> variable defined in the appropriate
<samp>config-lang.in</samp>.
Headers should appear before non-headers in this list.

</li><li> For files that are part of some but not all front ends, add the
filename to the <code>gtfiles</code> variable of <em>all</em> the front ends
that use it.
</li></ol>

</li><li> If the file was a header file, you&rsquo;ll need to check that it&rsquo;s included
in the right place to be visible to the generated files.  For a back-end
header file, this should be done automatically.  For a front-end header
file, it needs to be included by the same file that includes
<samp>gtype-<var>lang</var>.h</samp>.  For other header files, it needs to be
included in <samp>gtype-desc.c</samp>, which is a generated file, so add it to
<code>ifiles</code> in <code>open_base_file</code> in <samp>gengtype.c</samp>.

<p>For source files that aren&rsquo;t header files, the machinery will generate a
header file that should be included in the source file you just changed.
The file will be called <samp>gt-<var>path</var>.h</samp> where <var>path</var> is the
pathname relative to the <samp>gcc</samp> directory with slashes replaced by
<tt>-</tt>, so for example the header file to be included in
<samp>cp/parser.c</samp> is called <samp>gt-cp-parser.c</samp>.  The
generated header file should be included after everything else in the
source file.  Don&rsquo;t forget to mention this file as a dependency in the
<samp>Makefile</samp>!
</p>
</li></ol>

<p>For language frontends, there is another file that needs to be included
somewhere.  It will be called <samp>gtype-<var>lang</var>.h</samp>, where
<var>lang</var> is the name of the subdirectory the language is contained in.
</p>
<p>Plugins can add additional root tables.  Run the <code>gengtype</code>
utility in plugin mode as <code>gengtype -P pluginout.h <var>source-dir</var>
<var>file-list</var> <var>plugin*.c</var></code> with your plugin files
<var>plugin*.c</var> using <code>GTY</code> to generate the <var>pluginout.h</var> file.
The GCC build tree is needed to be present in that mode.
</p>

<hr>
<a name="Invoking-the-garbage-collector"></a>
<div class="header">
<p>
Next: <a href="#Troubleshooting" accesskey="n" rel="next">Troubleshooting</a>, Previous: <a href="#Files" accesskey="p" rel="prev">Files</a>, Up: <a href="#Type-Information" accesskey="u" rel="up">Type Information</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="How-to-invoke-the-garbage-collector"></a>
<h3 class="section">22.5 How to invoke the garbage collector</h3>
<a name="index-garbage-collector_002c-invocation"></a>
<a name="index-ggc_005fcollect"></a>

<p>The GCC garbage collector GGC is only invoked explicitly. In contrast
with many other garbage collectors, it is not implicitly invoked by
allocation routines when a lot of memory has been consumed. So the
only way to have GGC reclaim storage is to call the <code>ggc_collect</code>
function explicitly.  This call is an expensive operation, as it may
have to scan the entire heap.  Beware that local variables (on the GCC
call stack) are not followed by such an invocation (as many other
garbage collectors do): you should reference all your data from static
or external <code>GTY</code>-ed variables, and it is advised to call
<code>ggc_collect</code> with a shallow call stack.  The GGC is an exact mark
and sweep garbage collector (so it does not scan the call stack for
pointers).  In practice GCC passes don&rsquo;t often call <code>ggc_collect</code>
themselves, because it is called by the pass manager between passes.
</p>
<p>At the time of the <code>ggc_collect</code> call all pointers in the GC-marked
structures must be valid or <code>NULL</code>.  In practice this means that
there should not be uninitialized pointer fields in the structures even
if your code never reads or writes those fields at a particular
instance.  One way to ensure this is to use cleared versions of
allocators unless all the fields are initialized manually immediately
after allocation.
</p>
<hr>
<a name="Troubleshooting"></a>
<div class="header">
<p>
Previous: <a href="#Invoking-the-garbage-collector" accesskey="p" rel="prev">Invoking the garbage collector</a>, Up: <a href="#Type-Information" accesskey="u" rel="up">Type Information</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Troubleshooting-the-garbage-collector"></a>
<h3 class="section">22.6 Troubleshooting the garbage collector</h3>
<a name="index-garbage-collector_002c-troubleshooting"></a>

<p>With the current garbage collector implementation, most issues should
show up as GCC compilation errors.  Some of the most commonly
encountered issues are described below.
</p>
<ul>
<li> Gengtype does not produce allocators for a <code>GTY</code>-marked type.
Gengtype checks if there is at least one possible path from GC roots to
at least one instance of each type before outputting allocators.  If
there is no such path, the <code>GTY</code> markers will be ignored and no
allocators will be output.  Solve this by making sure that there exists
at least one such path.  If creating it is unfeasible or raises a &ldquo;code
smell&rdquo;, consider if you really must use GC for allocating such type.

</li><li> Link-time errors about undefined <code>gt_ggc_r_foo_bar</code> and
similarly-named symbols.  Check if your <samp>foo_bar</samp> source file has
<code>#include &quot;gt-foo_bar.h&quot;</code> as its very last line.

</li></ul>

<hr>
<a name="Plugins"></a>
<div class="header">
<p>
Next: <a href="#LTO" accesskey="n" rel="next">LTO</a>, Previous: <a href="#Type-Information" accesskey="p" rel="prev">Type Information</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Plugins-1"></a>
<h2 class="chapter">23 Plugins</h2>
<a name="index-Plugins"></a>

<p>GCC plugin is a loadable module that provides extra
features to the compiler, which they can further pass
around as a shareable module.
</p>
<p>GCC plugins provide developers with a rich subset of
the GCC API to allow them to extend GCC as they see fit.
Whether it is writing an additional optimization pass,
transforming code, or analyzing information, plugins
can be quite useful.
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#Plugins-loading" accesskey="1">Plugins loading</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How can we load plugins.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugin-API" accesskey="2">Plugin API</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The APIs for plugins.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugins-pass" accesskey="3">Plugins pass</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How a plugin interact with the pass manager.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugins-GC" accesskey="4">Plugins GC</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How a plugin Interact with GCC Garbage Collector.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugins-description" accesskey="5">Plugins description</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Giving information about a plugin itself.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugins-attr" accesskey="6">Plugins attr</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Registering custom attributes or pragmas.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugins-recording" accesskey="7">Plugins recording</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Recording information about pass execution.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugins-gate" accesskey="8">Plugins gate</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Controlling which passes are being run.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugins-tracking" accesskey="9">Plugins tracking</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Keeping track of available passes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Plugins-building">Plugins building</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How can we build a plugin.
</td></tr>
</table>

<hr>
<a name="Plugins-loading"></a>
<div class="header">
<p>
Next: <a href="#Plugin-API" accesskey="n" rel="next">Plugin API</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Loading-Plugins"></a>
<h3 class="section">23.1 Loading Plugins</h3>

<p>Plugins are supported on platforms that support <samp>-ldl
-rdynamic</samp>.  They are loaded by the compiler using <code>dlopen</code>
and invoked at pre-determined locations in the compilation
process.
</p>
<p>Plugins are loaded with
</p>
<p><samp>-fplugin=/path/to/<var>name</var>.so</samp> <samp>-fplugin-arg-<var>name</var>-<var>key1</var>[=<var>value1</var>]</samp>
</p>
<p>The plugin arguments are parsed by GCC and passed to respective
plugins as key-value pairs. Multiple plugins can be invoked by
specifying multiple <samp>-fplugin</samp> arguments.
</p>
<p>A plugin can be simply given by its short name (no dots or
slashes). When simply passing <samp>-fplugin=<var>name</var></samp>, the plugin is
loaded from the <samp>plugin</samp> directory, so <samp>-fplugin=<var>name</var></samp> is
the same as <samp>-fplugin=`gcc -print-file-name=plugin`/<var>name</var>.so</samp>,
using backquote shell syntax to query the <samp>plugin</samp> directory.
</p>
<hr>
<a name="Plugin-API"></a>
<div class="header">
<p>
Next: <a href="#Plugins-pass" accesskey="n" rel="next">Plugins pass</a>, Previous: <a href="#Plugins-loading" accesskey="p" rel="prev">Plugins loading</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Plugin-API-1"></a>
<h3 class="section">23.2 Plugin API</h3>

<p>Plugins are activated by the compiler at specific events as defined in
<samp>gcc-plugin.h</samp>.  For each event of interest, the plugin should
call <code>register_callback</code> specifying the name of the event and
address of the callback function that will handle that event.
</p>
<p>The header <samp>gcc-plugin.h</samp> must be the first gcc header to be included.
</p>
<a name="Plugin-license-check"></a>
<h4 class="subsection">23.2.1 Plugin license check</h4>

<p>Every plugin should define the global symbol <code>plugin_is_GPL_compatible</code>
to assert that it has been licensed under a GPL-compatible license.
If this symbol does not exist, the compiler will emit a fatal error
and exit with the error message:
</p>
<div class="smallexample">
<pre class="smallexample">fatal error: plugin <var>name</var> is not licensed under a GPL-compatible license
<var>name</var>: undefined symbol: plugin_is_GPL_compatible
compilation terminated
</pre></div>

<p>The declared type of the symbol should be int, to match a forward declaration
in <samp>gcc-plugin.h</samp> that suppresses C++ mangling.  It does not need to be in
any allocated section, though.  The compiler merely asserts that
the symbol exists in the global scope.  Something like this is enough:
</p>
<div class="smallexample">
<pre class="smallexample">int plugin_is_GPL_compatible;
</pre></div>

<a name="Plugin-initialization"></a>
<h4 class="subsection">23.2.2 Plugin initialization</h4>

<p>Every plugin should export a function called <code>plugin_init</code> that
is called right after the plugin is loaded. This function is
responsible for registering all the callbacks required by the plugin
and do any other required initialization.
</p>
<p>This function is called from <code>compile_file</code> right before invoking
the parser.  The arguments to <code>plugin_init</code> are:
</p>
<ul>
<li> <code>plugin_info</code>: Plugin invocation information.
</li><li> <code>version</code>: GCC version.
</li></ul>

<p>The <code>plugin_info</code> struct is defined as follows:
</p>
<div class="smallexample">
<pre class="smallexample">struct plugin_name_args
{
  char *base_name;              /* Short name of the plugin
                                   (filename without .so suffix). */
  const char *full_name;        /* Path to the plugin as specified with
                                   -fplugin=. */
  int argc;                     /* Number of arguments specified with
                                   -fplugin-arg-.... */
  struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
  const char *version;          /* Version string provided by plugin. */
  const char *help;             /* Help string provided by plugin. */
}
</pre></div>

<p>If initialization fails, <code>plugin_init</code> must return a non-zero
value.  Otherwise, it should return 0.
</p>
<p>The version of the GCC compiler loading the plugin is described by the
following structure:
</p>
<div class="smallexample">
<pre class="smallexample">struct plugin_gcc_version
{
  const char *basever;
  const char *datestamp;
  const char *devphase;
  const char *revision;
  const char *configuration_arguments;
};
</pre></div>

<p>The function <code>plugin_default_version_check</code> takes two pointers to
such structure and compare them field by field. It can be used by the
plugin&rsquo;s <code>plugin_init</code> function.
</p>
<p>The version of GCC used to compile the plugin can be found in the symbol
<code>gcc_version</code> defined in the header <samp>plugin-version.h</samp>. The
recommended version check to perform looks like
</p>
<div class="smallexample">
<pre class="smallexample">#include &quot;plugin-version.h&quot;
...

int
plugin_init (struct plugin_name_args *plugin_info,
             struct plugin_gcc_version *version)
{
  if (!plugin_default_version_check (version, &amp;gcc_version))
    return 1;

}
</pre></div>

<p>but you can also check the individual fields if you want a less strict check.
</p>
<a name="Plugin-callbacks"></a>
<h4 class="subsection">23.2.3 Plugin callbacks</h4>

<p>Callback functions have the following prototype:
</p>
<div class="smallexample">
<pre class="smallexample">/* The prototype for a plugin callback function.
     gcc_data  - event-specific data provided by GCC
     user_data - plugin-specific data provided by the plug-in.  */
typedef void (*plugin_callback_func)(void *gcc_data, void *user_data);
</pre></div>

<p>Callbacks can be invoked at the following pre-determined events:
</p>

<div class="smallexample">
<pre class="smallexample">enum plugin_event
{
  PLUGIN_PASS_MANAGER_SETUP,    /* To hook into pass manager.  */
  PLUGIN_FINISH_TYPE,           /* After finishing parsing a type.  */
  PLUGIN_FINISH_DECL,           /* After finishing parsing a declaration. */
  PLUGIN_FINISH_UNIT,           /* Useful for summary processing.  */
  PLUGIN_PRE_GENERICIZE,        /* Allows to see low level AST in C and C++ frontends.  */
  PLUGIN_FINISH,                /* Called before GCC exits.  */
  PLUGIN_INFO,                  /* Information about the plugin. */
  PLUGIN_GGC_START,             /* Called at start of GCC Garbage Collection. */
  PLUGIN_GGC_MARKING,           /* Extend the GGC marking. */
  PLUGIN_GGC_END,               /* Called at end of GGC. */
  PLUGIN_REGISTER_GGC_ROOTS,    /* Register an extra GGC root table. */
  PLUGIN_REGISTER_GGC_CACHES,   /* Register an extra GGC cache table. */
  PLUGIN_ATTRIBUTES,            /* Called during attribute registration */
  PLUGIN_START_UNIT,            /* Called before processing a translation unit.  */
  PLUGIN_PRAGMAS,               /* Called during pragma registration. */
  /* Called before first pass from all_passes.  */
  PLUGIN_ALL_PASSES_START,
  /* Called after last pass from all_passes.  */
  PLUGIN_ALL_PASSES_END,
  /* Called before first ipa pass.  */
  PLUGIN_ALL_IPA_PASSES_START,
  /* Called after last ipa pass.  */
  PLUGIN_ALL_IPA_PASSES_END,
  /* Allows to override pass gate decision for current_pass.  */
  PLUGIN_OVERRIDE_GATE,
  /* Called before executing a pass.  */
  PLUGIN_PASS_EXECUTION,
  /* Called before executing subpasses of a GIMPLE_PASS in
     execute_ipa_pass_list.  */
  PLUGIN_EARLY_GIMPLE_PASSES_START,
  /* Called after executing subpasses of a GIMPLE_PASS in
     execute_ipa_pass_list.  */
  PLUGIN_EARLY_GIMPLE_PASSES_END,
  /* Called when a pass is first instantiated.  */
  PLUGIN_NEW_PASS,

  PLUGIN_EVENT_FIRST_DYNAMIC    /* Dummy event used for indexing callback
                                   array.  */
};
</pre></div>

<p>In addition, plugins can also look up the enumerator of a named event,
and / or generate new events dynamically, by calling the function
<code>get_named_event_id</code>.
</p>
<p>To register a callback, the plugin calls <code>register_callback</code> with
the arguments:
</p>
<ul>
<li> <code>char *name</code>: Plugin name.
</li><li> <code>int event</code>: The event code.
</li><li> <code>plugin_callback_func callback</code>: The function that handles <code>event</code>.
</li><li> <code>void *user_data</code>: Pointer to plugin-specific data.
</li></ul>

<p>For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, PLUGIN_REGISTER_GGC_ROOTS
and PLUGIN_REGISTER_GGC_CACHES pseudo-events the <code>callback</code> should be
null, and the <code>user_data</code> is specific.
</p>
<p>When the PLUGIN_PRAGMAS event is triggered (with a null
pointer as data from GCC), plugins may register their own pragmas
using functions like <code>c_register_pragma</code> or
<code>c_register_pragma_with_expansion</code>.
</p>
<hr>
<a name="Plugins-pass"></a>
<div class="header">
<p>
Next: <a href="#Plugins-GC" accesskey="n" rel="next">Plugins GC</a>, Previous: <a href="#Plugin-API" accesskey="p" rel="prev">Plugin API</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Interacting-with-the-pass-manager"></a>
<h3 class="section">23.3 Interacting with the pass manager</h3>

<p>There needs to be a way to add/reorder/remove passes dynamically. This
is useful for both analysis plugins (plugging in after a certain pass
such as CFG or an IPA pass) and optimization plugins.
</p>
<p>Basic support for inserting new passes or replacing existing passes is
provided. A plugin registers a new pass with GCC by calling
<code>register_callback</code> with the <code>PLUGIN_PASS_MANAGER_SETUP</code>
event and a pointer to a <code>struct register_pass_info</code> object defined as follows
</p>
<div class="smallexample">
<pre class="smallexample">enum pass_positioning_ops
{
  PASS_POS_INSERT_AFTER,  // Insert after the reference pass.
  PASS_POS_INSERT_BEFORE, // Insert before the reference pass.
  PASS_POS_REPLACE        // Replace the reference pass.
};

struct register_pass_info
{
  struct opt_pass *pass;            /* New pass provided by the plugin.  */
  const char *reference_pass_name;  /* Name of the reference pass for hooking
                                       up the new pass.  */
  int ref_pass_instance_number;     /* Insert the pass at the specified
                                       instance number of the reference pass.  */
                                    /* Do it for every instance if it is 0.  */
  enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
};


/* Sample plugin code that registers a new pass.  */
int
plugin_init (struct plugin_name_args *plugin_info,
             struct plugin_gcc_version *version)
{
  struct register_pass_info pass_info;

  ...

  /* Code to fill in the pass_info object with new pass information.  */

  ...

  /* Register the new pass.  */
  register_callback (plugin_info-&gt;base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &amp;pass_info);

  ...
}
</pre></div>


<hr>
<a name="Plugins-GC"></a>
<div class="header">
<p>
Next: <a href="#Plugins-description" accesskey="n" rel="next">Plugins description</a>, Previous: <a href="#Plugins-pass" accesskey="p" rel="prev">Plugins pass</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Interacting-with-the-GCC-Garbage-Collector"></a>
<h3 class="section">23.4 Interacting with the GCC Garbage Collector</h3>

<p>Some plugins may want to be informed when GGC (the GCC Garbage
Collector) is running. They can register callbacks for the
<code>PLUGIN_GGC_START</code> and <code>PLUGIN_GGC_END</code> events (for which
the callback is called with a null <code>gcc_data</code>) to be notified of
the start or end of the GCC garbage collection.
</p>
<p>Some plugins may need to have GGC mark additional data. This can be
done by registering a callback (called with a null <code>gcc_data</code>)
for the <code>PLUGIN_GGC_MARKING</code> event. Such callbacks can call the
<code>ggc_set_mark</code> routine, preferably through the <code>ggc_mark</code> macro
(and conversely, these routines should usually not be used in plugins
outside of the <code>PLUGIN_GGC_MARKING</code> event).
</p>
<p>Some plugins may need to add extra GGC root tables, e.g. to handle their own
<code>GTY</code>-ed data. This can be done with the <code>PLUGIN_REGISTER_GGC_ROOTS</code>
pseudo-event with a null callback and the extra root table (of type <code>struct
ggc_root_tab*</code>) as <code>user_data</code>.  Plugins that want to use the
<code>if_marked</code> hash table option can add the extra GGC cache tables generated
by <code>gengtype</code> using the <code>PLUGIN_REGISTER_GGC_CACHES</code> pseudo-event with
a null callback and the extra cache table (of type <code>struct ggc_cache_tab*</code>)
as <code>user_data</code>.  Running the <code>gengtype -p <var>source-dir</var>
<var>file-list</var> <var>plugin*.c</var> ...</code> utility generates these extra root tables.
</p>
<p>You should understand the details of memory management inside GCC
before using <code>PLUGIN_GGC_MARKING</code>, <code>PLUGIN_REGISTER_GGC_ROOTS</code>
or <code>PLUGIN_REGISTER_GGC_CACHES</code>.
</p>

<hr>
<a name="Plugins-description"></a>
<div class="header">
<p>
Next: <a href="#Plugins-attr" accesskey="n" rel="next">Plugins attr</a>, Previous: <a href="#Plugins-GC" accesskey="p" rel="prev">Plugins GC</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Giving-information-about-a-plugin"></a>
<h3 class="section">23.5 Giving information about a plugin</h3>

<p>A plugin should give some information to the user about itself. This
uses the following structure:
</p>
<div class="smallexample">
<pre class="smallexample">struct plugin_info
{
  const char *version;
  const char *help;
};
</pre></div>

<p>Such a structure is passed as the <code>user_data</code> by the plugin&rsquo;s
init routine using <code>register_callback</code> with the
<code>PLUGIN_INFO</code> pseudo-event and a null callback.
</p>
<hr>
<a name="Plugins-attr"></a>
<div class="header">
<p>
Next: <a href="#Plugins-recording" accesskey="n" rel="next">Plugins recording</a>, Previous: <a href="#Plugins-description" accesskey="p" rel="prev">Plugins description</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Registering-custom-attributes-or-pragmas"></a>
<h3 class="section">23.6 Registering custom attributes or pragmas</h3>

<p>For analysis (or other) purposes it is useful to be able to add custom
attributes or pragmas.
</p>
<p>The <code>PLUGIN_ATTRIBUTES</code> callback is called during attribute
registration. Use the <code>register_attribute</code> function to register
custom attributes.
</p>
<div class="smallexample">
<pre class="smallexample">/* Attribute handler callback */
static tree
handle_user_attribute (tree *node, tree name, tree args,
                       int flags, bool *no_add_attrs)
{
  return NULL_TREE;
}

/* Attribute definition */
static struct attribute_spec user_attr =
  { &quot;user&quot;, 1, 1, false,  false, false, handle_user_attribute, false };

/* Plugin callback called during attribute registration.
Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL)
*/
static void
register_attributes (void *event_data, void *data)
{
  warning (0, G_(&quot;Callback to register attributes&quot;));
  register_attribute (&amp;user_attr);
}

</pre></div>


<p>The <code>PLUGIN_PRAGMAS</code> callback is called during pragmas
registration. Use the <code>c_register_pragma</code> or
<code>c_register_pragma_with_expansion</code> functions to register custom
pragmas.
</p>
<div class="smallexample">
<pre class="smallexample">/* Plugin callback called during pragmas registration. Registered with
     register_callback (plugin_name, PLUGIN_PRAGMAS,
                        register_my_pragma, NULL);
*/
static void
register_my_pragma (void *event_data, void *data)
{
  warning (0, G_(&quot;Callback to register pragmas&quot;));
  c_register_pragma (&quot;GCCPLUGIN&quot;, &quot;sayhello&quot;, handle_pragma_sayhello);
}
</pre></div>

<p>It is suggested to pass <code>&quot;GCCPLUGIN&quot;</code> (or a short name identifying
your plugin) as the &ldquo;space&rdquo; argument of your pragma.
</p>

<hr>
<a name="Plugins-recording"></a>
<div class="header">
<p>
Next: <a href="#Plugins-gate" accesskey="n" rel="next">Plugins gate</a>, Previous: <a href="#Plugins-attr" accesskey="p" rel="prev">Plugins attr</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Recording-information-about-pass-execution"></a>
<h3 class="section">23.7 Recording information about pass execution</h3>

<p>The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass
(the same as current_pass) as <code>gcc_data</code> to the callback.  You can also
inspect cfun to find out about which function this pass is executed for.
Note that this event will only be invoked if the gate check (if
applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds.
You can use other hooks, like <code>PLUGIN_ALL_PASSES_START</code>,
<code>PLUGIN_ALL_PASSES_END</code>, <code>PLUGIN_ALL_IPA_PASSES_START</code>,
<code>PLUGIN_ALL_IPA_PASSES_END</code>, <code>PLUGIN_EARLY_GIMPLE_PASSES_START</code>,
and/or <code>PLUGIN_EARLY_GIMPLE_PASSES_END</code> to manipulate global state
in your plugin(s) in order to get context for the pass execution.
</p>

<hr>
<a name="Plugins-gate"></a>
<div class="header">
<p>
Next: <a href="#Plugins-tracking" accesskey="n" rel="next">Plugins tracking</a>, Previous: <a href="#Plugins-recording" accesskey="p" rel="prev">Plugins recording</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Controlling-which-passes-are-being-run"></a>
<h3 class="section">23.8 Controlling which passes are being run</h3>

<p>After the original gate function for a pass is called, its result
- the gate status - is stored as an integer.
Then the event <code>PLUGIN_OVERRIDE_GATE</code> is invoked, with a pointer
to the gate status in the <code>gcc_data</code> parameter to the callback function.
A nonzero value of the gate status means that the pass is to be executed.
You can both read and write the gate status via the passed pointer.
</p>

<hr>
<a name="Plugins-tracking"></a>
<div class="header">
<p>
Next: <a href="#Plugins-building" accesskey="n" rel="next">Plugins building</a>, Previous: <a href="#Plugins-gate" accesskey="p" rel="prev">Plugins gate</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Keeping-track-of-available-passes"></a>
<h3 class="section">23.9 Keeping track of available passes</h3>

<p>When your plugin is loaded, you can inspect the various
pass lists to determine what passes are available.  However, other
plugins might add new passes.  Also, future changes to GCC might cause
generic passes to be added after plugin loading.
When a pass is first added to one of the pass lists, the event
<code>PLUGIN_NEW_PASS</code> is invoked, with the callback parameter
<code>gcc_data</code> pointing to the new pass.
</p>

<hr>
<a name="Plugins-building"></a>
<div class="header">
<p>
Previous: <a href="#Plugins-tracking" accesskey="p" rel="prev">Plugins tracking</a>, Up: <a href="#Plugins" accesskey="u" rel="up">Plugins</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Building-GCC-plugins"></a>
<h3 class="section">23.10 Building GCC plugins</h3>

<p>If plugins are enabled, GCC installs the headers needed to build a
plugin (somewhere in the installation tree, e.g. under
<samp>/usr/local</samp>).  In particular a <samp>plugin/include</samp> directory
is installed, containing all the header files needed to build plugins.
</p>
<p>On most systems, you can query this <code>plugin</code> directory by
invoking <code>gcc -print-file-name=plugin</code> (replace if needed
<code>gcc</code> with the appropriate program path).
</p>
<p>Inside plugins, this <code>plugin</code> directory name can be queried by
calling <code>default_plugin_dir_name ()</code>.
</p>
<p>Plugins may know, when they are compiled, the GCC version for which
<samp>plugin-version.h</samp> is provided.  The constant macros
<code>GCCPLUGIN_VERSION_MAJOR</code>, <code>GCCPLUGIN_VERSION_MINOR</code>,
<code>GCCPLUGIN_VERSION_PATCHLEVEL</code>, <code>GCCPLUGIN_VERSION</code> are
integer numbers, so a plugin could ensure it is built for GCC 4.7 with 
</p><div class="smallexample">
<pre class="smallexample">#if GCCPLUGIN_VERSION != 4007
#error this GCC plugin is for GCC 4.7
#endif
</pre></div>

<p>The following GNU Makefile excerpt shows how to build a simple plugin:
</p>
<div class="smallexample">
<pre class="smallexample">GCC=gcc
PLUGIN_SOURCE_FILES= plugin1.c plugin2.c
PLUGIN_OBJECT_FILES= $(patsubst %.c,%.o,$(PLUGIN_SOURCE_FILES))
GCCPLUGINS_DIR:= $(shell $(GCC) -print-file-name=plugin)
CFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -O2

plugin.so: $(PLUGIN_OBJECT_FILES)
   $(GCC) -shared $^ -o $@
</pre></div>

<p>A single source file plugin may be built with <code>gcc -I`gcc
-print-file-name=plugin`/include -fPIC -shared -O2 plugin.c -o
plugin.so</code>, using backquote shell syntax to query the <samp>plugin</samp>
directory.
</p>
<p>When a plugin needs to use <code>gengtype</code>, be sure that both
<samp>gengtype</samp> and <samp>gtype.state</samp> have the same version as the
GCC for which the plugin is built.
</p>
<hr>
<a name="LTO"></a>
<div class="header">
<p>
Next: <a href="#Funding" accesskey="n" rel="next">Funding</a>, Previous: <a href="#Plugins" accesskey="p" rel="prev">Plugins</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Link-Time-Optimization"></a>
<h2 class="chapter">24 Link Time Optimization</h2>
<a name="index-lto"></a>
<a name="index-whopr"></a>
<a name="index-wpa"></a>
<a name="index-ltrans"></a>

<p>Link Time Optimization (LTO) gives GCC the capability of
dumping its internal representation (GIMPLE) to disk,
so that all the different compilation units that make up
a single executable can be optimized as a single module.
This expands the scope of inter-procedural optimizations
to encompass the whole program (or, rather, everything
that is visible at link time).
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="#LTO-Overview" accesskey="1">LTO Overview</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Overview of LTO.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#LTO-object-file-layout" accesskey="2">LTO object file layout</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">LTO file sections in ELF.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#IPA" accesskey="3">IPA</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Using summary information in IPA passes.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#WHOPR" accesskey="4">WHOPR</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Whole program assumptions,
                            linker plugin and symbol visibilities.
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="#Internal-flags" accesskey="5">Internal flags</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Internal flags controlling <code>lto1</code>.
</td></tr>
</table>

<hr>
<a name="LTO-Overview"></a>
<div class="header">
<p>
Next: <a href="#LTO-object-file-layout" accesskey="n" rel="next">LTO object file layout</a>, Up: <a href="#LTO" accesskey="u" rel="up">LTO</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Design-Overview"></a>
<h3 class="section">24.1 Design Overview</h3>

<p>Link time optimization is implemented as a GCC front end for a
bytecode representation of GIMPLE that is emitted in special sections
of <code>.o</code> files.  Currently, LTO support is enabled in most
ELF-based systems, as well as darwin, cygwin and mingw systems.
</p>
<p>Since GIMPLE bytecode is saved alongside final object code, object
files generated with LTO support are larger than regular object files.
This &ldquo;fat&rdquo; object format makes it easy to integrate LTO into
existing build systems, as one can, for instance, produce archives of
the files.  Additionally, one might be able to ship one set of fat
objects which could be used both for development and the production of
optimized builds.  A, perhaps surprising, side effect of this feature
is that any mistake in the toolchain that leads to LTO information not
being used (e.g. an older <code>libtool</code> calling <code>ld</code> directly).
This is both an advantage, as the system is more robust, and a
disadvantage, as the user is not informed that the optimization has
been disabled.
</p>
<p>The current implementation only produces &ldquo;fat&rdquo; objects, effectively
doubling compilation time and increasing file sizes up to 5x the
original size.  This hides the problem that some tools, such as
<code>ar</code> and <code>nm</code>, need to understand symbol tables of LTO
sections.  These tools were extended to use the plugin infrastructure,
and with these problems solved, GCC will also support &ldquo;slim&rdquo; objects
consisting of the intermediate code alone.
</p>
<p>At the highest level, LTO splits the compiler in two.  The first half
(the &ldquo;writer&rdquo;) produces a streaming representation of all the
internal data structures needed to optimize and generate code.  This
includes declarations, types, the callgraph and the GIMPLE representation
of function bodies.
</p>
<p>When <samp>-flto</samp> is given during compilation of a source file, the
pass manager executes all the passes in <code>all_lto_gen_passes</code>.
Currently, this phase is composed of two IPA passes:
</p>
<ul>
<li> <code>pass_ipa_lto_gimple_out</code>
This pass executes the function <code>lto_output</code> in
<samp>lto-streamer-out.c</samp>, which traverses the call graph encoding
every reachable declaration, type and function.  This generates a
memory representation of all the file sections described below.

</li><li> <code>pass_ipa_lto_finish_out</code>
This pass executes the function <code>produce_asm_for_decls</code> in
<samp>lto-streamer-out.c</samp>, which takes the memory image built in the
previous pass and encodes it in the corresponding ELF file sections.
</li></ul>

<p>The second half of LTO support is the &ldquo;reader&rdquo;.  This is implemented
as the GCC front end <samp>lto1</samp> in <samp>lto/lto.c</samp>.  When
<samp>collect2</samp> detects a link set of <code>.o</code>/<code>.a</code> files with
LTO information and the <samp>-flto</samp> is enabled, it invokes
<samp>lto1</samp> which reads the set of files and aggregates them into a
single translation unit for optimization.  The main entry point for
the reader is <samp>lto/lto.c</samp>:<code>lto_main</code>.
</p>
<a name="LTO-modes-of-operation"></a>
<h4 class="subsection">24.1.1 LTO modes of operation</h4>

<p>One of the main goals of the GCC link-time infrastructure was to allow
effective compilation of large programs.  For this reason GCC implements two
link-time compilation modes.
</p>
<ol>
<li> <em>LTO mode</em>, in which the whole program is read into the
compiler at link-time and optimized in a similar way as if it
were a single source-level compilation unit.

</li><li> <em>WHOPR or partitioned mode</em>, designed to utilize multiple
CPUs and/or a distributed compilation environment to quickly link
large applications.  WHOPR stands for WHOle Program optimizeR (not to
be confused with the semantics of <samp>-fwhole-program</samp>).  It
partitions the aggregated callgraph from many different <code>.o</code>
files and distributes the compilation of the sub-graphs to different
CPUs.

<p>Note that distributed compilation is not implemented yet, but since
the parallelism is facilitated via generating a <code>Makefile</code>, it
would be easy to implement.
</p></li></ol>

<p>WHOPR splits LTO into three main stages:
</p><ol>
<li> Local generation (LGEN)
This stage executes in parallel.  Every file in the program is compiled
into the intermediate language and packaged together with the local
call-graph and summary information.  This stage is the same for both
the LTO and WHOPR compilation mode.

</li><li> Whole Program Analysis (WPA)
WPA is performed sequentially.  The global call-graph is generated, and
a global analysis procedure makes transformation decisions.  The global
call-graph is partitioned to facilitate parallel optimization during
phase 3.  The results of the WPA stage are stored into new object files
which contain the partitions of program expressed in the intermediate
language and the optimization decisions.

</li><li> Local transformations (LTRANS)
This stage executes in parallel.  All the decisions made during phase 2
are implemented locally in each partitioned object file, and the final
object code is generated.  Optimizations which cannot be decided
efficiently during the phase 2 may be performed on the local
call-graph partitions.
</li></ol>

<p>WHOPR can be seen as an extension of the usual LTO mode of
compilation.  In LTO, WPA and LTRANS are executed within a single
execution of the compiler, after the whole program has been read into
memory.
</p>
<p>When compiling in WHOPR mode, the callgraph is partitioned during
the WPA stage.  The whole program is split into a given number of
partitions of roughly the same size.  The compiler tries to
minimize the number of references which cross partition boundaries.
The main advantage of WHOPR is to allow the parallel execution of
LTRANS stages, which are the most time-consuming part of the
compilation process.  Additionally, it avoids the need to load the
whole program into memory.
</p>

<hr>
<a name="LTO-object-file-layout"></a>
<div class="header">
<p>
Next: <a href="#IPA" accesskey="n" rel="next">IPA</a>, Previous: <a href="#LTO-Overview" accesskey="p" rel="prev">LTO Overview</a>, Up: <a href="#LTO" accesskey="u" rel="up">LTO</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="LTO-file-sections"></a>
<h3 class="section">24.2 LTO file sections</h3>

<p>LTO information is stored in several ELF sections inside object files.
Data structures and enum codes for sections are defined in
<samp>lto-streamer.h</samp>.
</p>
<p>These sections are emitted from <samp>lto-streamer-out.c</samp> and mapped
in all at once from <samp>lto/lto.c</samp>:<code>lto_file_read</code>.  The
individual functions dealing with the reading/writing of each section
are described below.
</p>
<ul>
<li> Command line options (<code>.gnu.lto_.opts</code>)

<p>This section contains the command line options used to generate the
object files.  This is used at link time to determine the optimization
level and other settings when they are not explicitly specified at the
linker command line.
</p>
<p>Currently, GCC does not support combining LTO object files compiled
with different set of the command line options into a single binary.
At link time, the options given on the command line and the options
saved on all the files in a link-time set are applied globally.  No
attempt is made at validating the combination of flags (other than the
usual validation done by option processing).  This is implemented in
<samp>lto/lto.c</samp>:<code>lto_read_all_file_options</code>.
</p>

</li><li> Symbol table (<code>.gnu.lto_.symtab</code>)

<p>This table replaces the ELF symbol table for functions and variables
represented in the LTO IL.  Symbols used and exported by the optimized
assembly code of &ldquo;fat&rdquo; objects might not match the ones used and
exported by the intermediate code.  This table is necessary because
the intermediate code is less optimized and thus requires a separate
symbol table.
</p>
<p>Additionally, the binary code in the &ldquo;fat&rdquo; object will lack a call
to a function, since the call was optimized out at compilation time
after the intermediate language was streamed out.  In some special
cases, the same optimization may not happen during link-time
optimization.  This would lead to an undefined symbol if only one
symbol table was used.
</p>
<p>The symbol table is emitted in
<samp>lto-streamer-out.c</samp>:<code>produce_symtab</code>.
</p>

</li><li> Global declarations and types (<code>.gnu.lto_.decls</code>)

<p>This section contains an intermediate language dump of all
declarations and types required to represent the callgraph, static
variables and top-level debug info.
</p>
<p>The contents of this section are emitted in
<samp>lto-streamer-out.c</samp>:<code>produce_asm_for_decls</code>.  Types and
symbols are emitted in a topological order that preserves the sharing
of pointers when the file is read back in
(<samp>lto.c</samp>:<code>read_cgraph_and_symbols</code>).
</p>

</li><li> The callgraph (<code>.gnu.lto_.cgraph</code>)

<p>This section contains the basic data structure used by the GCC
inter-procedural optimization infrastructure.  This section stores an
annotated multi-graph which represents the functions and call sites as
well as the variables, aliases and top-level <code>asm</code> statements.
</p>
<p>This section is emitted in
<samp>lto-streamer-out.c</samp>:<code>output_cgraph</code> and read in
<samp>lto-cgraph.c</samp>:<code>input_cgraph</code>.
</p>

</li><li> IPA references (<code>.gnu.lto_.refs</code>)

<p>This section contains references between function and static
variables.  It is emitted by <samp>lto-cgraph.c</samp>:<code>output_refs</code>
and read by <samp>lto-cgraph.c</samp>:<code>input_refs</code>.
</p>

</li><li> Function bodies (<code>.gnu.lto_.function_body.&lt;name&gt;</code>)

<p>This section contains function bodies in the intermediate language
representation.  Every function body is in a separate section to allow
copying of the section independently to different object files or
reading the function on demand.
</p>
<p>Functions are emitted in
<samp>lto-streamer-out.c</samp>:<code>output_function</code> and read in
<samp>lto-streamer-in.c</samp>:<code>input_function</code>.
</p>

</li><li> Static variable initializers (<code>.gnu.lto_.vars</code>)

<p>This section contains all the symbols in the global variable pool.  It
is emitted by <samp>lto-cgraph.c</samp>:<code>output_varpool</code> and read in
<samp>lto-cgraph.c</samp>:<code>input_cgraph</code>.
</p>
</li><li> Summaries and optimization summaries used by IPA passes
(<code>.gnu.lto_.&lt;xxx&gt;</code>, where <code>&lt;xxx&gt;</code> is one of <code>jmpfuncs</code>,
<code>pureconst</code> or <code>reference</code>)

<p>These sections are used by IPA passes that need to emit summary
information during LTO generation to be read and aggregated at
link time.  Each pass is responsible for implementing two pass manager
hooks: one for writing the summary and another for reading it in.  The
format of these sections is entirely up to each individual pass.  The
only requirement is that the writer and reader hooks agree on the
format.
</p></li></ul>


<hr>
<a name="IPA"></a>
<div class="header">
<p>
Next: <a href="#WHOPR" accesskey="n" rel="next">WHOPR</a>, Previous: <a href="#LTO-object-file-layout" accesskey="p" rel="prev">LTO object file layout</a>, Up: <a href="#LTO" accesskey="u" rel="up">LTO</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Using-summary-information-in-IPA-passes"></a>
<h3 class="section">24.3 Using summary information in IPA passes</h3>

<p>Programs are represented internally as a <em>callgraph</em> (a
multi-graph where nodes are functions and edges are call sites)
and a <em>varpool</em> (a list of static and external variables in
the program).
</p>
<p>The inter-procedural optimization is organized as a sequence of
individual passes, which operate on the callgraph and the
varpool.  To make the implementation of WHOPR possible, every
inter-procedural optimization pass is split into several stages
that are executed at different times during WHOPR compilation:
</p>
<ul>
<li> LGEN time
<ol>
<li> <em>Generate summary</em> (<code>generate_summary</code> in
<code>struct ipa_opt_pass_d</code>).  This stage analyzes every function
body and variable initializer is examined and stores relevant
information into a pass-specific data structure.

</li><li> <em>Write summary</em> (<code>write_summary</code> in
<code>struct ipa_opt_pass_d</code>).  This stage writes all the
pass-specific information generated by <code>generate_summary</code>.
Summaries go into their own <code>LTO_section_*</code> sections that
have to be declared in <samp>lto-streamer.h</samp>:<code>enum
lto_section_type</code>.  A new section is created by calling
<code>create_output_block</code> and data can be written using the
<code>lto_output_*</code> routines.
</li></ol>

</li><li> WPA time
<ol>
<li> <em>Read summary</em> (<code>read_summary</code> in
<code>struct ipa_opt_pass_d</code>).  This stage reads all the
pass-specific information in exactly the same order that it was
written by <code>write_summary</code>.

</li><li> <em>Execute</em> (<code>execute</code> in <code>struct
opt_pass</code>).  This performs inter-procedural propagation.  This
must be done without actual access to the individual function
bodies or variable initializers.  Typically, this results in a
transitive closure operation over the summary information of all
the nodes in the callgraph.

</li><li> <em>Write optimization summary</em>
(<code>write_optimization_summary</code> in <code>struct
ipa_opt_pass_d</code>).  This writes the result of the inter-procedural
propagation into the object file.  This can use the same data
structures and helper routines used in <code>write_summary</code>.
</li></ol>

</li><li> LTRANS time
<ol>
<li> <em>Read optimization summary</em>
(<code>read_optimization_summary</code> in <code>struct
ipa_opt_pass_d</code>).  The counterpart to
<code>write_optimization_summary</code>.  This reads the interprocedural
optimization decisions in exactly the same format emitted by
<code>write_optimization_summary</code>.

</li><li> <em>Transform</em> (<code>function_transform</code> and
<code>variable_transform</code> in <code>struct ipa_opt_pass_d</code>).
The actual function bodies and variable initializers are updated
based on the information passed down from the <em>Execute</em> stage.
</li></ol>
</li></ul>

<p>The implementation of the inter-procedural passes are shared
between LTO, WHOPR and classic non-LTO compilation.
</p>
<ul>
<li> During the traditional file-by-file mode every pass executes its
own <em>Generate summary</em>, <em>Execute</em>, and <em>Transform</em>
stages within the single execution context of the compiler.

</li><li> In LTO compilation mode, every pass uses <em>Generate
summary</em> and <em>Write summary</em> stages at compilation time,
while the <em>Read summary</em>, <em>Execute</em>, and
<em>Transform</em> stages are executed at link time.

</li><li> In WHOPR mode all stages are used.
</li></ul>

<p>To simplify development, the GCC pass manager differentiates
between normal inter-procedural passes and small inter-procedural
passes.  A <em>small inter-procedural pass</em>
(<code>SIMPLE_IPA_PASS</code>) is a pass that does
everything at once and thus it can not be executed during WPA in
WHOPR mode.  It defines only the <em>Execute</em> stage and during
this stage it accesses and modifies the function bodies.  Such
passes are useful for optimization at LGEN or LTRANS time and are
used, for example, to implement early optimization before writing
object files.  The simple inter-procedural passes can also be used
for easier prototyping and development of a new inter-procedural
pass.
</p>

<a name="Virtual-clones"></a>
<h4 class="subsection">24.3.1 Virtual clones</h4>

<p>One of the main challenges of introducing the WHOPR compilation
mode was addressing the interactions between optimization passes.
In LTO compilation mode, the passes are executed in a sequence,
each of which consists of analysis (or <em>Generate summary</em>),
propagation (or <em>Execute</em>) and <em>Transform</em> stages.
Once the work of one pass is finished, the next pass sees the
updated program representation and can execute.  This makes the
individual passes dependent on each other.
</p>
<p>In WHOPR mode all passes first execute their <em>Generate
summary</em> stage.  Then summary writing marks the end of the LGEN
stage.  At WPA time,
the summaries are read back into memory and all passes run the
<em>Execute</em> stage.  Optimization summaries are streamed and
sent to LTRANS, where all the passes execute the <em>Transform</em>
stage.
</p>
<p>Most optimization passes split naturally into analysis,
propagation and transformation stages.  But some do not.  The
main problem arises when one pass performs changes and the
following pass gets confused by seeing different callgraphs
between the <em>Transform</em> stage and the <em>Generate summary</em>
or <em>Execute</em> stage.  This means that the passes are required
to communicate their decisions with each other.
</p>
<p>To facilitate this communication, the GCC callgraph
infrastructure implements <em>virtual clones</em>, a method of
representing the changes performed by the optimization passes in
the callgraph without needing to update function bodies.
</p>
<p>A <em>virtual clone</em> in the callgraph is a function that has no
associated body, just a description of how to create its body based
on a different function (which itself may be a virtual clone).
</p>
<p>The description of function modifications includes adjustments to
the function&rsquo;s signature (which allows, for example, removing or
adding function arguments), substitutions to perform on the
function body, and, for inlined functions, a pointer to the
function that it will be inlined into.
</p>
<p>It is also possible to redirect any edge of the callgraph from a
function to its virtual clone.  This implies updating of the call
site to adjust for the new function signature.
</p>
<p>Most of the transformations performed by inter-procedural
optimizations can be represented via virtual clones.  For
instance, a constant propagation pass can produce a virtual clone
of the function which replaces one of its arguments by a
constant.  The inliner can represent its decisions by producing a
clone of a function whose body will be later integrated into
a given function.
</p>
<p>Using <em>virtual clones</em>, the program can be easily updated
during the <em>Execute</em> stage, solving most of pass interactions
problems that would otherwise occur during <em>Transform</em>.
</p>
<p>Virtual clones are later materialized in the LTRANS stage and
turned into real functions.  Passes executed after the virtual
clone were introduced also perform their <em>Transform</em> stage
on new functions, so for a pass there is no significant
difference between operating on a real function or a virtual
clone introduced before its <em>Execute</em> stage.
</p>
<p>Optimization passes then work on virtual clones introduced before
their <em>Execute</em> stage as if they were real functions.  The
only difference is that clones are not visible during the
<em>Generate Summary</em> stage.
</p>
<p>To keep function summaries updated, the callgraph interface
allows an optimizer to register a callback that is called every
time a new clone is introduced as well as when the actual
function or variable is generated or when a function or variable
is removed.  These hooks are registered in the <em>Generate
summary</em> stage and allow the pass to keep its information intact
until the <em>Execute</em> stage.  The same hooks can also be
registered during the <em>Execute</em> stage to keep the
optimization summaries updated for the <em>Transform</em> stage.
</p>
<a name="IPA-references"></a>
<h4 class="subsection">24.3.2 IPA references</h4>

<p>GCC represents IPA references in the callgraph.  For a function
or variable <code>A</code>, the <em>IPA reference</em> is a list of all
locations where the address of <code>A</code> is taken and, when
<code>A</code> is a variable, a list of all direct stores and reads
to/from <code>A</code>.  References represent an oriented multi-graph on
the union of nodes of the callgraph and the varpool.  See
<samp>ipa-reference.c</samp>:<code>ipa_reference_write_optimization_summary</code>
and
<samp>ipa-reference.c</samp>:<code>ipa_reference_read_optimization_summary</code>
for details.
</p>
<a name="Jump-functions"></a>
<h4 class="subsection">24.3.3 Jump functions</h4>
<p>Suppose that an optimization pass sees a function <code>A</code> and it
knows the values of (some of) its arguments.  The <em>jump
function</em> describes the value of a parameter of a given function
call in function <code>A</code> based on this knowledge.
</p>
<p>Jump functions are used by several optimizations, such as the
inter-procedural constant propagation pass and the
devirtualization pass.  The inliner also uses jump functions to
perform inlining of callbacks.
</p>
<hr>
<a name="WHOPR"></a>
<div class="header">
<p>
Next: <a href="#Internal-flags" accesskey="n" rel="next">Internal flags</a>, Previous: <a href="#IPA" accesskey="p" rel="prev">IPA</a>, Up: <a href="#LTO" accesskey="u" rel="up">LTO</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Whole-program-assumptions_002c-linker-plugin-and-symbol-visibilities"></a>
<h3 class="section">24.4 Whole program assumptions, linker plugin and symbol visibilities</h3>

<p>Link-time optimization gives relatively minor benefits when used
alone.  The problem is that propagation of inter-procedural
information does not work well across functions and variables
that are called or referenced by other compilation units (such as
from a dynamically linked library).  We say that such functions
and variables are <em>externally visible</em>.
</p>
<p>To make the situation even more difficult, many applications
organize themselves as a set of shared libraries, and the default
ELF visibility rules allow one to overwrite any externally
visible symbol with a different symbol at runtime.  This
basically disables any optimizations across such functions and
variables, because the compiler cannot be sure that the function
body it is seeing is the same function body that will be used at
runtime.  Any function or variable not declared <code>static</code> in
the sources degrades the quality of inter-procedural
optimization.
</p>
<p>To avoid this problem the compiler must assume that it sees the
whole program when doing link-time optimization.  Strictly
speaking, the whole program is rarely visible even at link-time.
Standard system libraries are usually linked dynamically or not
provided with the link-time information.  In GCC, the whole
program option (<samp>-fwhole-program</samp>) asserts that every
function and variable defined in the current compilation
unit is static, except for function <code>main</code> (note: at
link time, the current unit is the union of all objects compiled
with LTO).  Since some functions and variables need to
be referenced externally, for example by another DSO or from an
assembler file, GCC also provides the function and variable
attribute <code>externally_visible</code> which can be used to disable
the effect of <samp>-fwhole-program</samp> on a specific symbol.
</p>
<p>The whole program mode assumptions are slightly more complex in
C++, where inline functions in headers are put into <em>COMDAT</em>
sections.  COMDAT function and variables can be defined by
multiple object files and their bodies are unified at link-time
and dynamic link-time.  COMDAT functions are changed to local only
when their address is not taken and thus un-sharing them with a
library is not harmful.  COMDAT variables always remain externally
visible, however for readonly variables it is assumed that their
initializers cannot be overwritten by a different value.
</p>
<p>GCC provides the function and variable attribute
<code>visibility</code> that can be used to specify the visibility of
externally visible symbols (or alternatively an
<samp>-fdefault-visibility</samp> command line option).  ELF defines
the <code>default</code>, <code>protected</code>, <code>hidden</code> and
<code>internal</code> visibilities.
</p>
<p>The most commonly used is visibility is <code>hidden</code>.  It
specifies that the symbol cannot be referenced from outside of
the current shared library.  Unfortunately, this information
cannot be used directly by the link-time optimization in the
compiler since the whole shared library also might contain
non-LTO objects and those are not visible to the compiler.
</p>
<p>GCC solves this problem using linker plugins.  A <em>linker
plugin</em> is an interface to the linker that allows an external
program to claim the ownership of a given object file.  The linker
then performs the linking procedure by querying the plugin about
the symbol table of the claimed objects and once the linking
decisions are complete, the plugin is allowed to provide the
final object file before the actual linking is made.  The linker
plugin obtains the symbol resolution information which specifies
which symbols provided by the claimed objects are bound from the
rest of a binary being linked.
</p>
<p>Currently, the linker plugin  works only in combination
with the Gold linker, but a GNU ld implementation is under
development.
</p>
<p>GCC is designed to be independent of the rest of the toolchain
and aims to support linkers without plugin support.  For this
reason it does not use the linker plugin by default.  Instead,
the object files are examined by <code>collect2</code> before being
passed to the linker and objects found to have LTO sections are
passed to <code>lto1</code> first.  This mode does not work for
library archives.  The decision on what object files from the
archive are needed depends on the actual linking and thus GCC
would have to implement the linker itself.  The resolution
information is missing too and thus GCC needs to make an educated
guess based on <samp>-fwhole-program</samp>.  Without the linker
plugin GCC also assumes that symbols are declared <code>hidden</code>
and not referred by non-LTO code by default.
</p>
<hr>
<a name="Internal-flags"></a>
<div class="header">
<p>
Previous: <a href="#WHOPR" accesskey="p" rel="prev">WHOPR</a>, Up: <a href="#LTO" accesskey="u" rel="up">LTO</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Internal-flags-controlling-lto1"></a>
<h3 class="section">24.5 Internal flags controlling <code>lto1</code></h3>

<p>The following flags are passed into <code>lto1</code> and are not
meant to be used directly from the command line.
</p>
<ul>
<li> -fwpa
<a name="index-fwpa"></a>
This option runs the serial part of the link-time optimizer
performing the inter-procedural propagation (WPA mode).  The
compiler reads in summary information from all inputs and
performs an analysis based on summary information only.  It
generates object files for subsequent runs of the link-time
optimizer where individual object files are optimized using both
summary information from the WPA mode and the actual function
bodies.  It then drives the LTRANS phase.

</li><li> -fltrans
<a name="index-fltrans"></a>
This option runs the link-time optimizer in the
local-transformation (LTRANS) mode, which reads in output from a
previous run of the LTO in WPA mode.  In the LTRANS mode, LTO
optimizes an object and produces the final assembly.

</li><li> -fltrans-output-list=<var>file</var>
<a name="index-fltrans_002doutput_002dlist"></a>
This option specifies a file to which the names of LTRANS output
files are written.  This option is only meaningful in conjunction
with <samp>-fwpa</samp>.
</li></ul>

<hr>
<a name="Funding"></a>
<div class="header">
<p>
Next: <a href="#GNU-Project" accesskey="n" rel="next">GNU Project</a>, Previous: <a href="#LTO" accesskey="p" rel="prev">LTO</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Funding-Free-Software"></a>
<h2 class="unnumbered">Funding Free Software</h2>

<p>If you want to have more free software a few years from now, it makes
sense for you to help encourage people to contribute funds for its
development.  The most effective approach known is to encourage
commercial redistributors to donate.
</p>
<p>Users of free software systems can boost the pace of development by
encouraging for-a-fee distributors to donate part of their selling price
to free software developers&mdash;the Free Software Foundation, and others.
</p>
<p>The way to convince distributors to do this is to demand it and expect
it from them.  So when you compare distributors, judge them partly by
how much they give to free software development.  Show distributors
they must compete to be the one who gives the most.
</p>
<p>To make this approach work, you must insist on numbers that you can
compare, such as, &ldquo;We will donate ten dollars to the Frobnitz project
for each disk sold.&rdquo;  Don&rsquo;t be satisfied with a vague promise, such as
&ldquo;A portion of the profits are donated,&rdquo; since it doesn&rsquo;t give a basis
for comparison.
</p>
<p>Even a precise fraction &ldquo;of the profits from this disk&rdquo; is not very
meaningful, since creative accounting and unrelated business decisions
can greatly alter what fraction of the sales price counts as profit.
If the price you pay is $50, ten percent of the profit is probably
less than a dollar; it might be a few cents, or nothing at all.
</p>
<p>Some redistributors do development work themselves.  This is useful too;
but to keep everyone honest, you need to inquire how much they do, and
what kind.  Some kinds of development make much more long-term
difference than others.  For example, maintaining a separate version of
a program contributes very little; maintaining the standard version of a
program for the whole community contributes much.  Easy new ports
contribute little, since someone else would surely do them; difficult
ports such as adding a new CPU to the GNU Compiler Collection contribute more;
major new features or packages contribute the most.
</p>
<p>By establishing the idea that supporting further development is &ldquo;the
proper thing to do&rdquo; when distributing free software for a fee, we can
assure a steady flow of resources into making more free software.
</p>
<div class="display">
<pre class="display">Copyright &copy; 1994 Free Software Foundation, Inc.
Verbatim copying and redistribution of this section is permitted
without royalty; alteration is not permitted.
</pre></div>

<hr>
<a name="GNU-Project"></a>
<div class="header">
<p>
Next: <a href="#Copying" accesskey="n" rel="next">Copying</a>, Previous: <a href="#Funding" accesskey="p" rel="prev">Funding</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="The-GNU-Project-and-GNU_002fLinux"></a>
<h2 class="unnumbered">The GNU Project and GNU/Linux</h2>

<p>The GNU Project was launched in 1984 to develop a complete Unix-like
operating system which is free software: the GNU system.  (GNU is a
recursive acronym for &ldquo;GNU&rsquo;s Not Unix&rdquo;; it is pronounced
&ldquo;guh-NEW&rdquo;.)  Variants of the GNU operating system, which use the
kernel Linux, are now widely used; though these systems are often
referred to as &ldquo;Linux&rdquo;, they are more accurately called GNU/Linux
systems.
</p>
<p>For more information, see:
</p><div class="smallexample">
<pre class="smallexample"><a href="http://www.gnu.org/">http://www.gnu.org/</a>
<a href="http://www.gnu.org/gnu/linux-and-gnu.html">http://www.gnu.org/gnu/linux-and-gnu.html</a>
</pre></div>
<hr>
<a name="Copying"></a>
<div class="header">
<p>
Next: <a href="#GNU-Free-Documentation-License" accesskey="n" rel="next">GNU Free Documentation License</a>, Previous: <a href="#GNU-Project" accesskey="p" rel="prev">GNU Project</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GNU-General-Public-License"></a>
<h2 class="unnumbered">GNU General Public License</h2>
<div align="center">Version 3, 29 June 2007
</div>

<div class="display">
<pre class="display">Copyright &copy; 2007 Free Software Foundation, Inc. <a href="http://fsf.org/">http://fsf.org/</a>

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
</pre></div>

<a name="Preamble"></a>
<h3 class="heading">Preamble</h3>

<p>The GNU General Public License is a free, copyleft license for
software and other kinds of works.
</p>
<p>The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom
to share and change all versions of a program&ndash;to make sure it remains
free software for all its users.  We, the Free Software Foundation,
use the GNU General Public License for most of our software; it
applies also to any other work released this way by its authors.  You
can apply it to your programs, too.
</p>
<p>When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
</p>
<p>To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you
have certain responsibilities if you distribute copies of the
software, or if you modify it: responsibilities to respect the freedom
of others.
</p>
<p>For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too,
receive or can get the source code.  And you must show them these
terms so they know their rights.
</p>
<p>Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
</p>
<p>For the developers&rsquo; and authors&rsquo; protection, the GPL clearly explains
that there is no warranty for this free software.  For both users&rsquo; and
authors&rsquo; sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
</p>
<p>Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the
manufacturer can do so.  This is fundamentally incompatible with the
aim of protecting users&rsquo; freedom to change the software.  The
systematic pattern of such abuse occurs in the area of products for
individuals to use, which is precisely where it is most unacceptable.
Therefore, we have designed this version of the GPL to prohibit the
practice for those products.  If such problems arise substantially in
other domains, we stand ready to extend this provision to those
domains in future versions of the GPL, as needed to protect the
freedom of users.
</p>
<p>Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish
to avoid the special danger that patents applied to a free program
could make it effectively proprietary.  To prevent this, the GPL
assures that patents cannot be used to render the program non-free.
</p>
<p>The precise terms and conditions for copying, distribution and
modification follow.
</p>
<a name="TERMS-AND-CONDITIONS"></a>
<h3 class="heading">TERMS AND CONDITIONS</h3>

<ol>
<li> Definitions.

<p>&ldquo;This License&rdquo; refers to version 3 of the GNU General Public License.
</p>
<p>&ldquo;Copyright&rdquo; also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
</p>
<p>&ldquo;The Program&rdquo; refers to any copyrightable work licensed under this
License.  Each licensee is addressed as &ldquo;you&rdquo;.  &ldquo;Licensees&rdquo; and
&ldquo;recipients&rdquo; may be individuals or organizations.
</p>
<p>To &ldquo;modify&rdquo; a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of
an exact copy.  The resulting work is called a &ldquo;modified version&rdquo; of
the earlier work or a work &ldquo;based on&rdquo; the earlier work.
</p>
<p>A &ldquo;covered work&rdquo; means either the unmodified Program or a work based
on the Program.
</p>
<p>To &ldquo;propagate&rdquo; a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
</p>
<p>To &ldquo;convey&rdquo; a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user
through a computer network, with no transfer of a copy, is not
conveying.
</p>
<p>An interactive user interface displays &ldquo;Appropriate Legal Notices&rdquo; to
the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
</p>
</li><li> Source Code.

<p>The &ldquo;source code&rdquo; for a work means the preferred form of the work for
making modifications to it.  &ldquo;Object code&rdquo; means any non-source form
of a work.
</p>
<p>A &ldquo;Standard Interface&rdquo; means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
</p>
<p>The &ldquo;System Libraries&rdquo; of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
&ldquo;Major Component&rdquo;, in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
</p>
<p>The &ldquo;Corresponding Source&rdquo; for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work&rsquo;s
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
</p>
<p>The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
</p>
<p>The Corresponding Source for a work in source code form is that same
work.
</p>
</li><li> Basic Permissions.

<p>All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
</p>
<p>You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright.  Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
</p>
<p>Conveying under any other circumstances is permitted solely under the
conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.
</p>
</li><li> Protecting Users&rsquo; Legal Rights From Anti-Circumvention Law.

<p>No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
</p>
<p>When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against
the work&rsquo;s users, your or third parties&rsquo; legal rights to forbid
circumvention of technological measures.
</p>
</li><li> Conveying Verbatim Copies.

<p>You may convey verbatim copies of the Program&rsquo;s source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
</p>
<p>You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
</p>
</li><li> Conveying Modified Source Versions.

<p>You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:
</p>
<ol>
<li> The work must carry prominent notices stating that you modified it,
and giving a relevant date.

</li><li> The work must carry prominent notices stating that it is released
under this License and any conditions added under section 7.  This
requirement modifies the requirement in section 4 to &ldquo;keep intact all
notices&rdquo;.

</li><li> You must license the entire work, as a whole, under this License to
anyone who comes into possession of a copy.  This License will
therefore apply, along with any applicable section 7 additional terms,
to the whole of the work, and all its parts, regardless of how they
are packaged.  This License gives no permission to license the work in
any other way, but it does not invalidate such permission if you have
separately received it.

</li><li> If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your work
need not make them do so.
</li></ol>

<p>A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
&ldquo;aggregate&rdquo; if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation&rsquo;s users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
</p>
</li><li> Conveying Non-Source Forms.

<p>You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
</p>
<ol>
<li> Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium customarily
used for software interchange.

</li><li> Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a written
offer, valid for at least three years and valid for as long as you
offer spare parts or customer support for that product model, to give
anyone who possesses the object code either (1) a copy of the
Corresponding Source for all the software in the product that is
covered by this License, on a durable physical medium customarily used
for software interchange, for a price no more than your reasonable
cost of physically performing this conveying of source, or (2) access
to copy the Corresponding Source from a network server at no charge.

</li><li> Convey individual copies of the object code with a copy of the written
offer to provide the Corresponding Source.  This alternative is
allowed only occasionally and noncommercially, and only if you
received the object code with such an offer, in accord with subsection
6b.

</li><li> Convey the object code by offering access from a designated place
(gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge.  You need not require recipients to copy the
Corresponding Source along with the object code.  If the place to copy
the object code is a network server, the Corresponding Source may be
on a different server (operated by you or a third party) that supports
equivalent copying facilities, provided you maintain clear directions
next to the object code saying where to find the Corresponding Source.
Regardless of what server hosts the Corresponding Source, you remain
obligated to ensure that it is available for as long as needed to
satisfy these requirements.

</li><li> Convey the object code using peer-to-peer transmission, provided you
inform other peers where the object code and Corresponding Source of
the work are being offered to the general public at no charge under
subsection 6d.

</li></ol>

<p>A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
</p>
<p>A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer product&rdquo;, which means any
tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling.  In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of
coverage.  For a particular product received by a particular user,
&ldquo;normally used&rdquo; refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product.  A product is a consumer product regardless of
whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant
mode of use of the product.
</p>
<p>&ldquo;Installation Information&rdquo; for a User Product means any methods,
procedures, authorization keys, or other information required to
install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source.  The
information must suffice to ensure that the continued functioning of
the modified object code is in no case prevented or interfered with
solely because modification has been made.
</p>
<p>If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
</p>
<p>The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or
updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or
installed.  Access to a network may be denied when the modification
itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the
network.
</p>
<p>Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
</p>
</li><li> Additional Terms.

<p>&ldquo;Additional permissions&rdquo; are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
</p>
<p>When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
</p>
<p>Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
</p>
<ol>
<li> Disclaiming warranty or limiting liability differently from the terms
of sections 15 and 16 of this License; or

</li><li> Requiring preservation of specified reasonable legal notices or author
attributions in that material or in the Appropriate Legal Notices
displayed by works containing it; or

</li><li> Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or

</li><li> Limiting the use for publicity purposes of names of licensors or
authors of the material; or

</li><li> Declining to grant rights under trademark law for use of some trade
names, trademarks, or service marks; or

</li><li> Requiring indemnification of licensors and authors of that material by
anyone who conveys the material (or modified versions of it) with
contractual assumptions of liability to the recipient, for any
liability that these contractual assumptions directly impose on those
licensors and authors.
</li></ol>

<p>All other non-permissive additional terms are considered &ldquo;further
restrictions&rdquo; within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
</p>
<p>If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
</p>
<p>Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.
</p>
</li><li> Termination.

<p>You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
</p>
<p>However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
</p>
<p>Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
</p>
<p>Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
</p>
</li><li> Acceptance Not Required for Having Copies.

<p>You are not required to accept this License in order to receive or run
a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
</p>
</li><li> Automatic Licensing of Downstream Recipients.

<p>Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.
</p>
<p>An &ldquo;entity transaction&rdquo; is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party&rsquo;s predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
</p>
<p>You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
</p>
</li><li> Patents.

<p>A &ldquo;contributor&rdquo; is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor&rsquo;s &ldquo;contributor version&rdquo;.
</p>
<p>A contributor&rsquo;s &ldquo;essential patent claims&rdquo; are all patent claims owned
or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, &ldquo;control&rdquo; includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
</p>
<p>Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor&rsquo;s essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
</p>
<p>In the following three paragraphs, a &ldquo;patent license&rdquo; is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To &ldquo;grant&rdquo; such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
</p>
<p>If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  &ldquo;Knowingly relying&rdquo; means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient&rsquo;s use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
</p>
<p>If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
</p>
<p>A patent license is &ldquo;discriminatory&rdquo; if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License.  You may not convey a covered work if you
are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to the
third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties
who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by
you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.
</p>
<p>Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
</p>
</li><li> No Surrender of Others&rsquo; Freedom.

<p>If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey
a covered work so as to satisfy simultaneously your obligations under
this License and any other pertinent obligations, then as a
consequence you may not convey it at all.  For example, if you agree
to terms that obligate you to collect a royalty for further conveying
from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
</p>
</li><li> Use with the GNU Affero General Public License.

<p>Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
</p>
</li><li> Revised Versions of this License.

<p>The Free Software Foundation may publish revised and/or new versions
of the GNU General Public License from time to time.  Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
</p>
<p>Each version is given a distinguishing version number.  If the Program
specifies that a certain numbered version of the GNU General Public
License &ldquo;or any later version&rdquo; applies to it, you have the option of
following the terms and conditions either of that numbered version or
of any later version published by the Free Software Foundation.  If
the Program does not specify a version number of the GNU General
Public License, you may choose any version ever published by the Free
Software Foundation.
</p>
<p>If the Program specifies that a proxy can decide which future versions
of the GNU General Public License can be used, that proxy&rsquo;s public
statement of acceptance of a version permanently authorizes you to
choose that version for the Program.
</p>
<p>Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
</p>
</li><li> Disclaimer of Warranty.

<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
</p>
</li><li> Limitation of Liability.

<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
</p>
</li><li> Interpretation of Sections 15 and 16.

<p>If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
</p>
</li></ol>

<a name="END-OF-TERMS-AND-CONDITIONS"></a>
<h3 class="heading">END OF TERMS AND CONDITIONS</h3>

<a name="How-to-Apply-These-Terms-to-Your-New-Programs"></a>
<h3 class="heading">How to Apply These Terms to Your New Programs</h3>

<p>If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
</p>
<p>To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the &ldquo;copyright&rdquo; line and a pointer to where the full notice is found.
</p>
<div class="smallexample">
<pre class="smallexample"><var>one line to give the program's name and a brief idea of what it does.</var>  
Copyright (C) <var>year</var> <var>name of author</var>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
</pre></div>

<p>Also add information on how to contact you by electronic and paper mail.
</p>
<p>If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
</p>
<div class="smallexample">
<pre class="smallexample"><var>program</var> Copyright (C) <var>year</var> <var>name of author</var> 
This program comes with ABSOLUTELY NO WARRANTY; for details type &lsquo;<samp>show w</samp>&rsquo;.
This is free software, and you are welcome to redistribute it
under certain conditions; type &lsquo;<samp>show c</samp>&rsquo; for details.
</pre></div>

<p>The hypothetical commands &lsquo;<samp>show w</samp>&rsquo; and &lsquo;<samp>show c</samp>&rsquo; should show
the appropriate parts of the General Public License.  Of course, your
program&rsquo;s commands might be different; for a GUI interface, you would
use an &ldquo;about box&rdquo;.
</p>
<p>You should also get your employer (if you work as a programmer) or school,
if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
</p>
<p>The GNU General Public License does not permit incorporating your
program into proprietary programs.  If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library.  If this is what you want to do, use
the GNU Lesser General Public License instead of this License.  But
first, please read <a href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.
</p>

<hr>
<a name="GNU-Free-Documentation-License"></a>
<div class="header">
<p>
Next: <a href="#Contributors" accesskey="n" rel="next">Contributors</a>, Previous: <a href="#Copying" accesskey="p" rel="prev">Copying</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="GNU-Free-Documentation-License-1"></a>
<h2 class="unnumbered">GNU Free Documentation License</h2>

<a name="index-FDL_002c-GNU-Free-Documentation-License"></a>
<div align="center">Version 1.3, 3 November 2008
</div>
<div class="display">
<pre class="display">Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
<a href="http://fsf.org/">http://fsf.org/</a>

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
</pre></div>

<ol>
<li> PREAMBLE

<p>The purpose of this License is to make a manual, textbook, or other
functional and useful document <em>free</em> in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
</p>
<p>This License is a kind of &ldquo;copyleft&rdquo;, which means that derivative
works of the document must themselves be free in the same sense.  It
complements the GNU General Public License, which is a copyleft
license designed for free software.
</p>
<p>We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does.  But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book.  We recommend this License
principally for works whose purpose is instruction or reference.
</p>
</li><li> APPLICABILITY AND DEFINITIONS

<p>This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License.  Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein.  The &ldquo;Document&rdquo;, below,
refers to any such manual or work.  Any member of the public is a
licensee, and is addressed as &ldquo;you&rdquo;.  You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
</p>
<p>A &ldquo;Modified Version&rdquo; of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
</p>
<p>A &ldquo;Secondary Section&rdquo; is a named appendix or a front-matter section
of the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document&rsquo;s overall
subject (or to related matters) and contains nothing that could fall
directly within that overall subject.  (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain
any mathematics.)  The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
</p>
<p>The &ldquo;Invariant Sections&rdquo; are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License.  If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant.  The Document may contain zero
Invariant Sections.  If the Document does not identify any Invariant
Sections then there are none.
</p>
<p>The &ldquo;Cover Texts&rdquo; are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License.  A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
</p>
<p>A &ldquo;Transparent&rdquo; copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters.  A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text.  A copy that is not &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;.
</p>
<p>Examples of suitable formats for Transparent copies include plain
<small>ASCII</small> without markup, Texinfo input format, LaTeX input
format, <acronym>SGML</acronym> or <acronym>XML</acronym> using a publicly available
<acronym>DTD</acronym>, and standard-conforming simple <acronym>HTML</acronym>,
PostScript or <acronym>PDF</acronym> designed for human modification.  Examples
of transparent image formats include <acronym>PNG</acronym>, <acronym>XCF</acronym> and
<acronym>JPG</acronym>.  Opaque formats include proprietary formats that can be
read and edited only by proprietary word processors, <acronym>SGML</acronym> or
<acronym>XML</acronym> for which the <acronym>DTD</acronym> and/or processing tools are
not generally available, and the machine-generated <acronym>HTML</acronym>,
PostScript or <acronym>PDF</acronym> produced by some word processors for
output purposes only.
</p>
<p>The &ldquo;Title Page&rdquo; means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page.  For works in
formats which do not have any title page as such, &ldquo;Title Page&rdquo; means
the text near the most prominent appearance of the work&rsquo;s title,
preceding the beginning of the body of the text.
</p>
<p>The &ldquo;publisher&rdquo; means any person or entity that distributes copies
of the Document to the public.
</p>
<p>A section &ldquo;Entitled XYZ&rdquo; means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language.  (Here XYZ stands for a
specific section name mentioned below, such as &ldquo;Acknowledgements&rdquo;,
&ldquo;Dedications&rdquo;, &ldquo;Endorsements&rdquo;, or &ldquo;History&rdquo;.)  To &ldquo;Preserve the Title&rdquo;
of such a section when you modify the Document means that it remains a
section &ldquo;Entitled XYZ&rdquo; according to this definition.
</p>
<p>The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document.  These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
</p>
</li><li> VERBATIM COPYING

<p>You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License.  You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute.  However, you may accept
compensation in exchange for copies.  If you distribute a large enough
number of copies you must also follow the conditions in section 3.
</p>
<p>You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
</p>
</li><li> COPYING IN QUANTITY

<p>If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document&rsquo;s license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover.  Both covers must also clearly and legibly identify
you as the publisher of these copies.  The front cover must present
the full title with all words of the title equally prominent and
visible.  You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
</p>
<p>If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
</p>
<p>If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
</p>
<p>It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
</p>
</li><li> MODIFICATIONS

<p>You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it.  In addition, you must do these things in the Modified Version:
</p>
<ol>
<li> Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document).  You may use the same title as a previous version
if the original publisher of that version gives permission.

</li><li> List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.

</li><li> State on the Title page the name of the publisher of the
Modified Version, as the publisher.

</li><li> Preserve all the copyright notices of the Document.

</li><li> Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.

</li><li> Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.

</li><li> Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document&rsquo;s license notice.

</li><li> Include an unaltered copy of this License.

</li><li> Preserve the section Entitled &ldquo;History&rdquo;, Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page.  If
there is no section Entitled &ldquo;History&rdquo; in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.

</li><li> Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on.  These may be placed in the &ldquo;History&rdquo; section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.

</li><li> For any section Entitled &ldquo;Acknowledgements&rdquo; or &ldquo;Dedications&rdquo;, Preserve
the Title of the section, and preserve in the section all the
substance and tone of each of the contributor acknowledgements and/or
dedications given therein.

</li><li> Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles.  Section numbers
or the equivalent are not considered part of the section titles.

</li><li> Delete any section Entitled &ldquo;Endorsements&rdquo;.  Such a section
may not be included in the Modified Version.

</li><li> Do not retitle any existing section to be Entitled &ldquo;Endorsements&rdquo; or
to conflict in title with any Invariant Section.

</li><li> Preserve any Warranty Disclaimers.
</li></ol>

<p>If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant.  To do this, add their titles to the
list of Invariant Sections in the Modified Version&rsquo;s license notice.
These titles must be distinct from any other section titles.
</p>
<p>You may add a section Entitled &ldquo;Endorsements&rdquo;, provided it contains
nothing but endorsements of your Modified Version by various
parties&mdash;for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
</p>
<p>You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version.  Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity.  If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
</p>
<p>The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
</p>
</li><li> COMBINING DOCUMENTS

<p>You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
</p>
<p>The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy.  If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
</p>
<p>In the combination, you must combine any sections Entitled &ldquo;History&rdquo;
in the various original documents, forming one section Entitled
&ldquo;History&rdquo;; likewise combine any sections Entitled &ldquo;Acknowledgements&rdquo;,
and any sections Entitled &ldquo;Dedications&rdquo;.  You must delete all
sections Entitled &ldquo;Endorsements.&rdquo;
</p>
</li><li> COLLECTIONS OF DOCUMENTS

<p>You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
</p>
<p>You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
</p>
</li><li> AGGREGATION WITH INDEPENDENT WORKS

<p>A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an &ldquo;aggregate&rdquo; if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation&rsquo;s users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
</p>
<p>If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document&rsquo;s Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
</p>
</li><li> TRANSLATION

<p>Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections.  You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers.  In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
</p>
<p>If a section in the Document is Entitled &ldquo;Acknowledgements&rdquo;,
&ldquo;Dedications&rdquo;, or &ldquo;History&rdquo;, the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
</p>
</li><li> TERMINATION

<p>You may not copy, modify, sublicense, or distribute the Document
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense, or distribute it is void, and
will automatically terminate your rights under this License.
</p>
<p>However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
</p>
<p>Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
</p>
<p>Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, receipt of a copy of some or all of the same material does
not give you any rights to use it.
</p>
</li><li> FUTURE REVISIONS OF THIS LICENSE

<p>The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time.  Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.  See
<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.
</p>
<p>Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License &ldquo;or any later version&rdquo; applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation.  If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.  If the Document
specifies that a proxy can decide which future versions of this
License can be used, that proxy&rsquo;s public statement of acceptance of a
version permanently authorizes you to choose that version for the
Document.
</p>
</li><li> RELICENSING

<p>&ldquo;Massive Multiauthor Collaboration Site&rdquo; (or &ldquo;MMC Site&rdquo;) means any
World Wide Web server that publishes copyrightable works and also
provides prominent facilities for anybody to edit those works.  A
public wiki that anybody can edit is an example of such a server.  A
&ldquo;Massive Multiauthor Collaboration&rdquo; (or &ldquo;MMC&rdquo;) contained in the
site means any set of copyrightable works thus published on the MMC
site.
</p>
<p>&ldquo;CC-BY-SA&rdquo; means the Creative Commons Attribution-Share Alike 3.0
license published by Creative Commons Corporation, a not-for-profit
corporation with a principal place of business in San Francisco,
California, as well as future copyleft versions of that license
published by that same organization.
</p>
<p>&ldquo;Incorporate&rdquo; means to publish or republish a Document, in whole or
in part, as part of another Document.
</p>
<p>An MMC is &ldquo;eligible for relicensing&rdquo; if it is licensed under this
License, and if all works that were first published under this License
somewhere other than this MMC, and subsequently incorporated in whole
or in part into the MMC, (1) had no cover texts or invariant sections,
and (2) were thus incorporated prior to November 1, 2008.
</p>
<p>The operator of an MMC Site may republish an MMC contained in the site
under CC-BY-SA on the same site at any time before August 1, 2009,
provided the MMC is eligible for relicensing.
</p>
</li></ol>

<a name="ADDENDUM_003a-How-to-use-this-License-for-your-documents"></a>
<h3 class="unnumberedsec">ADDENDUM: How to use this License for your documents</h3>

<p>To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
</p>
<div class="smallexample">
<pre class="smallexample">  Copyright (C)  <var>year</var>  <var>your name</var>.
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
  Texts.  A copy of the license is included in the section entitled ``GNU
  Free Documentation License''.
</pre></div>

<p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the &ldquo;with...Texts.&rdquo; line with this:
</p>
<div class="smallexample">
<pre class="smallexample">    with the Invariant Sections being <var>list their titles</var>, with
    the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
    being <var>list</var>.
</pre></div>

<p>If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
</p>
<p>If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.
</p>



<hr>
<a name="Contributors"></a>
<div class="header">
<p>
Next: <a href="#Option-Index" accesskey="n" rel="next">Option Index</a>, Previous: <a href="#GNU-Free-Documentation-License" accesskey="p" rel="prev">GNU Free Documentation License</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Contributors-to-GCC"></a>
<h2 class="unnumbered">Contributors to GCC</h2>
<a name="index-contributors"></a>

<p>The GCC project would like to thank its many contributors.  Without them the
project would not have been nearly as successful as it has been.  Any omissions
in this list are accidental.  Feel free to contact
<a href="mailto:law@redhat.com">law@redhat.com</a> or <a href="mailto:gerald@pfeifer.com">gerald@pfeifer.com</a> if you have been left
out or some of your contributions are not listed.  Please keep this list in
alphabetical order.
</p>
<ul>
<li> Analog Devices helped implement the support for complex data types
and iterators.

</li><li> John David Anglin for threading-related fixes and improvements to
libstdc++-v3, and the HP-UX port.

</li><li> James van Artsdalen wrote the code that makes efficient use of
the Intel 80387 register stack.

</li><li> Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta Series
port.

</li><li> Alasdair Baird for various bug fixes.

</li><li> Giovanni Bajo for analyzing lots of complicated C++ problem reports.

</li><li> Peter Barada for his work to improve code generation for new
ColdFire cores.

</li><li> Gerald Baumgartner added the signature extension to the C++ front end.

</li><li> Godmar Back for his Java improvements and encouragement.

</li><li> Scott Bambrough for help porting the Java compiler.

</li><li> Wolfgang Bangerth for processing tons of bug reports.

</li><li> Jon Beniston for his Microsoft Windows port of Java and port to Lattice Mico32.

</li><li> Daniel Berlin for better DWARF2 support, faster/better optimizations,
improved alias analysis, plus migrating GCC to Bugzilla.

</li><li> Geoff Berry for his Java object serialization work and various patches.

</li><li> David Binderman tests weekly snapshots of GCC trunk against Fedora Rawhide
for several architectures.

</li><li> Uros Bizjak for the implementation of x87 math built-in functions and
for various middle end and i386 back end improvements and bug fixes.

</li><li> Eric Blake for helping to make GCJ and libgcj conform to the
specifications.

</li><li> Janne Blomqvist for contributions to GNU Fortran.

</li><li> Segher Boessenkool for various fixes.

</li><li> Hans-J. Boehm for his <a href="http://www.hpl.hp.com/personal/Hans_Boehm/gc/">garbage collector</a>, IA-64 libffi port, and other Java work.

</li><li> Neil Booth for work on cpplib, lang hooks, debug hooks and other
miscellaneous clean-ups.

</li><li> Steven Bosscher for integrating the GNU Fortran front end into GCC and for
contributing to the tree-ssa branch.

</li><li> Eric Botcazou for fixing middle- and backend bugs left and right.

</li><li> Per Bothner for his direction via the steering committee and various
improvements to the infrastructure for supporting new languages.  Chill
front end implementation.  Initial implementations of
cpplib, fix-header, config.guess, libio, and past C++ library (libg++)
maintainer.  Dreaming up, designing and implementing much of GCJ.

</li><li> Devon Bowen helped port GCC to the Tahoe.

</li><li> Don Bowman for mips-vxworks contributions.

</li><li> Dave Brolley for work on cpplib and Chill.

</li><li> Paul Brook for work on the ARM architecture and maintaining GNU Fortran.

</li><li> Robert Brown implemented the support for Encore 32000 systems.

</li><li> Christian Bruel for improvements to local store elimination.

</li><li> Herman A.J. ten Brugge for various fixes.

</li><li> Joerg Brunsmann for Java compiler hacking and help with the GCJ FAQ.

</li><li> Joe Buck for his direction via the steering committee.

</li><li> Craig Burley for leadership of the G77 Fortran effort.

</li><li> Stephan Buys for contributing Doxygen notes for libstdc++.

</li><li> Paolo Carlini for libstdc++ work: lots of efficiency improvements to
the C++ strings, streambufs and formatted I/O, hard detective work on
the frustrating localization issues, and keeping up with the problem reports.

</li><li> John Carr for his alias work, SPARC hacking, infrastructure improvements,
previous contributions to the steering committee, loop optimizations, etc.

</li><li> Stephane Carrez for 68HC11 and 68HC12 ports.

</li><li> Steve Chamberlain for support for the Renesas SH and H8 processors
and the PicoJava processor, and for GCJ config fixes.

</li><li> Glenn Chambers for help with the GCJ FAQ.

</li><li> John-Marc Chandonia for various libgcj patches.

</li><li> Denis Chertykov for contributing and maintaining the AVR port, the first GCC port
for an 8-bit architecture.

</li><li> Scott Christley for his Objective-C contributions.

</li><li> Eric Christopher for his Java porting help and clean-ups.

</li><li> Branko Cibej for more warning contributions.

</li><li> The <a href="http://www.gnu.org/software/classpath/">GNU Classpath project</a>
for all of their merged runtime code.

</li><li> Nick Clifton for arm, mcore, fr30, v850, m32r, rx work,
<samp>--help</samp>, and other random hacking.

</li><li> Michael Cook for libstdc++ cleanup patches to reduce warnings.

</li><li> R. Kelley Cook for making GCC buildable from a read-only directory as
well as other miscellaneous build process and documentation clean-ups.

</li><li> Ralf Corsepius for SH testing and minor bug fixing.

</li><li> Stan Cox for care and feeding of the x86 port and lots of behind
the scenes hacking.

</li><li> Alex Crain provided changes for the 3b1.

</li><li> Ian Dall for major improvements to the NS32k port.

</li><li> Paul Dale for his work to add uClinux platform support to the
m68k backend.

</li><li> Dario Dariol contributed the four varieties of sample programs
that print a copy of their source.

</li><li> Russell Davidson for fstream and stringstream fixes in libstdc++.

</li><li> Bud Davis for work on the G77 and GNU Fortran compilers.

</li><li> Mo DeJong for GCJ and libgcj bug fixes.

</li><li> DJ Delorie for the DJGPP port, build and libiberty maintenance,
various bug fixes, and the M32C, MeP, and RL78 ports.

</li><li> Arnaud Desitter for helping to debug GNU Fortran.

</li><li> Gabriel Dos Reis for contributions to G++, contributions and
maintenance of GCC diagnostics infrastructure, libstdc++-v3,
including <code>valarray&lt;&gt;</code>, <code>complex&lt;&gt;</code>, maintaining the numerics library
(including that pesky <code>&lt;limits&gt;</code> :-) and keeping up-to-date anything
to do with numbers.

</li><li> Ulrich Drepper for his work on glibc, testing of GCC using glibc, ISO C99
support, CFG dumping support, etc., plus support of the C++ runtime
libraries including for all kinds of C interface issues, contributing and
maintaining <code>complex&lt;&gt;</code>, sanity checking and disbursement, configuration
architecture, libio maintenance, and early math work.

</li><li> Zdenek Dvorak for a new loop unroller and various fixes.

</li><li> Michael Eager for his work on the Xilinx MicroBlaze port.

</li><li> Richard Earnshaw for his ongoing work with the ARM.

</li><li> David Edelsohn for his direction via the steering committee, ongoing work
with the RS6000/PowerPC port, help cleaning up Haifa loop changes,
doing the entire AIX port of libstdc++ with his bare hands, and for
ensuring GCC properly keeps working on AIX.

</li><li> Kevin Ediger for the floating point formatting of num_put::do_put in
libstdc++.

</li><li> Phil Edwards for libstdc++ work including configuration hackery,
documentation maintainer, chief breaker of the web pages, the occasional
iostream bug fix, and work on shared library symbol versioning.

</li><li> Paul Eggert for random hacking all over GCC.

</li><li> Mark Elbrecht for various DJGPP improvements, and for libstdc++
configuration support for locales and fstream-related fixes.

</li><li> Vadim Egorov for libstdc++ fixes in strings, streambufs, and iostreams.

</li><li> Christian Ehrhardt for dealing with bug reports.

</li><li> Ben Elliston for his work to move the Objective-C runtime into its
own subdirectory and for his work on autoconf.

</li><li> Revital Eres for work on the PowerPC 750CL port.

</li><li> Marc Espie for OpenBSD support.

</li><li> Doug Evans for much of the global optimization framework, arc, m32r,
and SPARC work.

</li><li> Christopher Faylor for his work on the Cygwin port and for caring and
feeding the gcc.gnu.org box and saving its users tons of spam.

</li><li> Fred Fish for BeOS support and Ada fixes.

</li><li> Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.

</li><li> Peter Gerwinski for various bug fixes and the Pascal front end.

</li><li> Kaveh R. Ghazi for his direction via the steering committee, amazing
work to make &lsquo;<samp>-W -Wall -W* -Werror</samp>&rsquo; useful, and 
testing GCC on a plethora of platforms.  Kaveh extends his gratitude to
the CAIP Center at Rutgers University for providing him with computing
resources to work on Free Software from the late 1980s to 2010.

</li><li> John Gilmore for a donation to the FSF earmarked improving GNU Java.

</li><li> Judy Goldberg for c++ contributions.

</li><li> Torbjorn Granlund for various fixes and the c-torture testsuite,
multiply- and divide-by-constant optimization, improved long long
support, improved leaf function register allocation, and his direction
via the steering committee.

</li><li> Anthony Green for his <samp>-Os</samp> contributions, the moxie port, and
Java front end work.

</li><li> Stu Grossman for gdb hacking, allowing GCJ developers to debug Java code.

</li><li> Michael K. Gschwind contributed the port to the PDP-11.

</li><li> Richard Guenther for his ongoing middle-end contributions and bug fixes
and for release management.

</li><li> Ron Guilmette implemented the <code>protoize</code> and <code>unprotoize</code>
tools, the support for Dwarf symbolic debugging information, and much of
the support for System V Release 4.  He has also worked heavily on the
Intel 386 and 860 support.

</li><li> Sumanth Gundapaneni for contributing the CR16 port.

</li><li> Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload GCSE.

</li><li> Bruno Haible for improvements in the runtime overhead for EH, new
warnings and assorted bug fixes.

</li><li> Andrew Haley for his amazing Java compiler and library efforts.

</li><li> Chris Hanson assisted in making GCC work on HP-UX for the 9000 series 300.

</li><li> Michael Hayes for various thankless work he&rsquo;s done trying to get
the c30/c40 ports functional.  Lots of loop and unroll improvements and
fixes.

</li><li> Dara Hazeghi for wading through myriads of target-specific bug reports.

</li><li> Kate Hedstrom for staking the G77 folks with an initial testsuite.

</li><li> Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 work, loop
opts, and generally fixing lots of old problems we&rsquo;ve ignored for
years, flow rewrite and lots of further stuff, including reviewing
tons of patches.

</li><li> Aldy Hernandez for working on the PowerPC port, SIMD support, and
various fixes.

</li><li> Nobuyuki Hikichi of Software Research Associates, Tokyo, contributed
the support for the Sony NEWS machine.

</li><li> Kazu Hirata for caring and feeding the Renesas H8/300 port and various fixes.

</li><li> Katherine Holcomb for work on GNU Fortran.

</li><li> Manfred Hollstein for his ongoing work to keep the m88k alive, lots
of testing and bug fixing, particularly of GCC configury code.

</li><li> Steve Holmgren for MachTen patches.

</li><li> Mat Hostetter for work on the TILE-Gx and TILEPro ports.

</li><li> Jan Hubicka for his x86 port improvements.

</li><li> Falk Hueffner for working on C and optimization bug reports.

</li><li> Bernardo Innocenti for his m68k work, including merging of
ColdFire improvements and uClinux support.

</li><li> Christian Iseli for various bug fixes.

</li><li> Kamil Iskra for general m68k hacking.

</li><li> Lee Iverson for random fixes and MIPS testing.

</li><li> Andreas Jaeger for testing and benchmarking of GCC and various bug fixes.

</li><li> Jakub Jelinek for his SPARC work and sibling call optimizations as well
as lots of bug fixes and test cases, and for improving the Java build
system.

</li><li> Janis Johnson for ia64 testing and fixes, her quality improvement
sidetracks, and web page maintenance.

</li><li> Kean Johnston for SCO OpenServer support and various fixes.

</li><li> Tim Josling for the sample language treelang based originally on Richard
Kenner&rsquo;s &ldquo;toy&rdquo; language.

</li><li> Nicolai Josuttis for additional libstdc++ documentation.

</li><li> Klaus Kaempf for his ongoing work to make alpha-vms a viable target.

</li><li> Steven G. Kargl for work on GNU Fortran.

</li><li> David Kashtan of SRI adapted GCC to VMS.

</li><li> Ryszard Kabatek for many, many libstdc++ bug fixes and optimizations of
strings, especially member functions, and for auto_ptr fixes.

</li><li> Geoffrey Keating for his ongoing work to make the PPC work for GNU/Linux
and his automatic regression tester.

</li><li> Brendan Kehoe for his ongoing work with G++ and for a lot of early work
in just about every part of libstdc++.

</li><li> Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
MIL-STD-1750A.

</li><li> Richard Kenner of the New York University Ultracomputer Research
Laboratory wrote the machine descriptions for the AMD 29000, the DEC
Alpha, the IBM RT PC, and the IBM RS/6000 as well as the support for
instruction attributes.  He also made changes to better support RISC
processors including changes to common subexpression elimination,
strength reduction, function calling sequence handling, and condition
code support, in addition to generalizing the code for frame pointer
elimination and delay slot scheduling.  Richard Kenner was also the
head maintainer of GCC for several years.

</li><li> Mumit Khan for various contributions to the Cygwin and Mingw32 ports and
maintaining binary releases for Microsoft Windows hosts, and for massive libstdc++
porting work to Cygwin/Mingw32.

</li><li> Robin Kirkham for cpu32 support.

</li><li> Mark Klein for PA improvements.

</li><li> Thomas Koenig for various bug fixes.

</li><li> Bruce Korb for the new and improved fixincludes code.

</li><li> Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 effort.

</li><li> Charles LaBrec contributed the support for the Integrated Solutions
68020 system.

</li><li> Asher Langton and Mike Kumbera for contributing Cray pointer support
to GNU Fortran, and for other GNU Fortran improvements.

</li><li> Jeff Law for his direction via the steering committee, coordinating the
entire egcs project and GCC 2.95, rolling out snapshots and releases,
handling merges from GCC2, reviewing tons of patches that might have
fallen through the cracks else, and random but extensive hacking.

</li><li> Walter Lee for work on the TILE-Gx and TILEPro ports.

</li><li> Marc Lehmann for his direction via the steering committee and helping
with analysis and improvements of x86 performance.

</li><li> Victor Leikehman for work on GNU Fortran.

</li><li> Ted Lemon wrote parts of the RTL reader and printer.

</li><li> Kriang Lerdsuwanakij for C++ improvements including template as template
parameter support, and many C++ fixes.

</li><li> Warren Levy for tremendous work on libgcj (Java Runtime Library) and
random work on the Java front end.

</li><li> Alain Lichnewsky ported GCC to the MIPS CPU.

</li><li> Oskar Liljeblad for hacking on AWT and his many Java bug reports and
patches.

</li><li> Robert Lipe for OpenServer support, new testsuites, testing, etc.

</li><li> Chen Liqin for various S+core related fixes/improvement, and for
maintaining the S+core port.

</li><li> Weiwen Liu for testing and various bug fixes.

</li><li> Manuel L&oacute;pez-Ib&aacute;&ntilde;ez for improving <samp>-Wconversion</samp> and
many other diagnostics fixes and improvements.

</li><li> Dave Love for his ongoing work with the Fortran front end and
runtime libraries.

</li><li> Martin von L&ouml;wis for internal consistency checking infrastructure,
various C++ improvements including namespace support, and tons of
assistance with libstdc++/compiler merges.

</li><li> H.J. Lu for his previous contributions to the steering committee, many x86
bug reports, prototype patches, and keeping the GNU/Linux ports working.

</li><li> Greg McGary for random fixes and (someday) bounded pointers.

</li><li> Andrew MacLeod for his ongoing work in building a real EH system,
various code generation improvements, work on the global optimizer, etc.

</li><li> Vladimir Makarov for hacking some ugly i960 problems, PowerPC hacking
improvements to compile-time performance, overall knowledge and
direction in the area of instruction scheduling, and design and
implementation of the automaton based instruction scheduler.

</li><li> Bob Manson for his behind the scenes work on dejagnu.

</li><li> Philip Martin for lots of libstdc++ string and vector iterator fixes and
improvements, and string clean up and testsuites.

</li><li> All of the Mauve project
<a href="http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/mauve/THANKS?rev=1.2&amp;cvsroot=mauve&amp;only_with_tag=HEAD">contributors</a>,
for Java test code.

</li><li> Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.

</li><li> Adam Megacz for his work on the Microsoft Windows port of GCJ.

</li><li> Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
powerpc, haifa, ECOFF debug support, and other assorted hacking.

</li><li> Jason Merrill for his direction via the steering committee and leading
the G++ effort.

</li><li> Martin Michlmayr for testing GCC on several architectures using the
entire Debian archive.

</li><li> David Miller for his direction via the steering committee, lots of
SPARC work, improvements in jump.c and interfacing with the Linux kernel
developers.

</li><li> Gary Miller ported GCC to Charles River Data Systems machines.

</li><li> Alfred Minarik for libstdc++ string and ios bug fixes, and turning the
entire libstdc++ testsuite namespace-compatible.

</li><li> Mark Mitchell for his direction via the steering committee, mountains of
C++ work, load/store hoisting out of loops, alias analysis improvements,
ISO C <code>restrict</code> support, and serving as release manager from 2000
to 2011.

</li><li> Alan Modra for various GNU/Linux bits and testing.

</li><li> Toon Moene for his direction via the steering committee, Fortran
maintenance, and his ongoing work to make us make Fortran run fast.

</li><li> Jason Molenda for major help in the care and feeding of all the services
on the gcc.gnu.org (formerly egcs.cygnus.com) machine&mdash;mail, web
services, ftp services, etc etc.  Doing all this work on scrap paper and
the backs of envelopes would have been&hellip; difficult.

</li><li> Catherine Moore for fixing various ugly problems we have sent her
way, including the haifa bug which was killing the Alpha &amp; PowerPC
Linux kernels.

</li><li> Mike Moreton for his various Java patches.

</li><li> David Mosberger-Tang for various Alpha improvements, and for the initial
IA-64 port.

</li><li> Stephen Moshier contributed the floating point emulator that assists in
cross-compilation and permits support for floating point numbers wider
than 64 bits and for ISO C99 support.

</li><li> Bill Moyer for his behind the scenes work on various issues.

</li><li> Philippe De Muyter for his work on the m68k port.

</li><li> Joseph S. Myers for his work on the PDP-11 port, format checking and ISO
C99 support, and continuous emphasis on (and contributions to) documentation.

</li><li> Nathan Myers for his work on libstdc++-v3: architecture and authorship
through the first three snapshots, including implementation of locale
infrastructure, string, shadow C headers, and the initial project
documentation (DESIGN, CHECKLIST, and so forth).  Later, more work on
MT-safe string and shadow headers.

</li><li> Felix Natter for documentation on porting libstdc++.

</li><li> Nathanael Nerode for cleaning up the configuration/build process.

</li><li> NeXT, Inc. donated the front end that supports the Objective-C
language.

</li><li> Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the search
engine setup, various documentation fixes and other small fixes.

</li><li> Geoff Noer for his work on getting cygwin native builds working.

</li><li> Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
tracking web pages, GIMPLE tuples, and assorted fixes.

</li><li> David O&rsquo;Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, FreeBSD/ARM,
FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related infrastructure
improvements.

</li><li> Alexandre Oliva for various build infrastructure improvements, scripts and
amazing testing work, including keeping libtool issues sane and happy.

</li><li> Stefan Olsson for work on mt_alloc.

</li><li> Melissa O&rsquo;Neill for various NeXT fixes.

</li><li> Rainer Orth for random MIPS work, including improvements to GCC&rsquo;s o32
ABI support, improvements to dejagnu&rsquo;s MIPS support, Java configuration
clean-ups and porting work, and maintaining the IRIX, Solaris 2, and
Tru64 UNIX ports.

</li><li> Hartmut Penner for work on the s390 port.

</li><li> Paul Petersen wrote the machine description for the Alliant FX/8.

</li><li> Alexandre Petit-Bianco for implementing much of the Java compiler and
continued Java maintainership.

</li><li> Matthias Pfaller for major improvements to the NS32k port.

</li><li> Gerald Pfeifer for his direction via the steering committee, pointing
out lots of problems we need to solve, maintenance of the web pages, and
taking care of documentation maintenance in general.

</li><li> Andrew Pinski for processing bug reports by the dozen.

</li><li> Ovidiu Predescu for his work on the Objective-C front end and runtime
libraries.

</li><li> Jerry Quinn for major performance improvements in C++ formatted I/O.

</li><li> Ken Raeburn for various improvements to checker, MIPS ports and various
cleanups in the compiler.

</li><li> Rolf W. Rasmussen for hacking on AWT.

</li><li> David Reese of Sun Microsystems contributed to the Solaris on PowerPC
port.

</li><li> Volker Reichelt for keeping up with the problem reports.

</li><li> Joern Rennecke for maintaining the sh port, loop, regmove &amp; reload
hacking and developing and maintaining the Epiphany port.

</li><li> Loren J. Rittle for improvements to libstdc++-v3 including the FreeBSD
port, threading fixes, thread-related configury changes, critical
threading documentation, and solutions to really tricky I/O problems,
as well as keeping GCC properly working on FreeBSD and continuous testing.

</li><li> Craig Rodrigues for processing tons of bug reports.

</li><li> Ola R&ouml;nnerup for work on mt_alloc.

</li><li> Gavin Romig-Koch for lots of behind the scenes MIPS work.

</li><li> David Ronis inspired and encouraged Craig to rewrite the G77
documentation in texinfo format by contributing a first pass at a
translation of the old <samp>g77-0.5.16/f/DOC</samp> file.

</li><li> Ken Rose for fixes to GCC&rsquo;s delay slot filling code.

</li><li> Paul Rubin wrote most of the preprocessor.

</li><li> P&eacute;tur Run&oacute;lfsson for major performance improvements in C++ formatted I/O and
large file support in C++ filebuf.

</li><li> Chip Salzenberg for libstdc++ patches and improvements to locales, traits,
Makefiles, libio, libtool hackery, and &ldquo;long long&rdquo; support.

</li><li> Juha Sarlin for improvements to the H8 code generator.

</li><li> Greg Satz assisted in making GCC work on HP-UX for the 9000 series 300.

</li><li> Roger Sayle for improvements to constant folding and GCC&rsquo;s RTL optimizers
as well as for fixing numerous bugs.

</li><li> Bradley Schatz for his work on the GCJ FAQ.

</li><li> Peter Schauer wrote the code to allow debugging to work on the Alpha.

</li><li> William Schelter did most of the work on the Intel 80386 support.

</li><li> Tobias Schl&uuml;ter for work on GNU Fortran.

</li><li> Bernd Schmidt for various code generation improvements and major
work in the reload pass, serving as release manager for
GCC 2.95.3, and work on the Blackfin and C6X ports.

</li><li> Peter Schmid for constant testing of libstdc++&mdash;especially application
testing, going above and beyond what was requested for the release
criteria&mdash;and libstdc++ header file tweaks.

</li><li> Jason Schroeder for jcf-dump patches.

</li><li> Andreas Schwab for his work on the m68k port.

</li><li> Lars Segerlund for work on GNU Fortran.

</li><li> Dodji Seketeli for numerous C++ bug fixes and debug info improvements.

</li><li> Joel Sherrill for his direction via the steering committee, RTEMS
contributions and RTEMS testing.

</li><li> Nathan Sidwell for many C++ fixes/improvements.

</li><li> Jeffrey Siegal for helping RMS with the original design of GCC, some
code which handles the parse tree and RTL data structures, constant
folding and help with the original VAX &amp; m68k ports.

</li><li> Kenny Simpson for prompting libstdc++ fixes due to defect reports from
the LWG (thereby keeping GCC in line with updates from the ISO).

</li><li> Franz Sirl for his ongoing work with making the PPC port stable
for GNU/Linux.

</li><li> Andrey Slepuhin for assorted AIX hacking.

</li><li> Trevor Smigiel for contributing the SPU port.

</li><li> Christopher Smith did the port for Convex machines.

</li><li> Danny Smith for his major efforts on the Mingw (and Cygwin) ports.

</li><li> Randy Smith finished the Sun FPA support.

</li><li> Scott Snyder for queue, iterator, istream, and string fixes and libstdc++
testsuite entries.  Also for providing the patch to G77 to add
rudimentary support for <code>INTEGER*1</code>, <code>INTEGER*2</code>, and
<code>LOGICAL*1</code>.

</li><li> Zdenek Sojka for running automated regression testing of GCC and reporting
numerous bugs.

</li><li> Jayant Sonar for contributing the CR16 port.

</li><li> Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.

</li><li> Richard Stallman, for writing the original GCC and launching the GNU project.

</li><li> Jan Stein of the Chalmers Computer Society provided support for
Genix, as well as part of the 32000 machine description.

</li><li> Nigel Stephens for various mips16 related fixes/improvements.

</li><li> Jonathan Stone wrote the machine description for the Pyramid computer.

</li><li> Graham Stott for various infrastructure improvements.

</li><li> John Stracke for his Java HTTP protocol fixes.

</li><li> Mike Stump for his Elxsi port, G++ contributions over the years and more
recently his vxworks contributions

</li><li> Jeff Sturm for Java porting help, bug fixes, and encouragement.

</li><li> Shigeya Suzuki for this fixes for the bsdi platforms.

</li><li> Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
support, general configury hacking, fixincludes, etc.

</li><li> Holger Teutsch provided the support for the Clipper CPU.

</li><li> Gary Thomas for his ongoing work to make the PPC work for GNU/Linux.

</li><li> Philipp Thomas for random bug fixes throughout the compiler

</li><li> Jason Thorpe for thread support in libstdc++ on NetBSD.

</li><li> Kresten Krab Thorup wrote the run time support for the Objective-C
language and the fantastic Java bytecode interpreter.

</li><li> Michael Tiemann for random bug fixes, the first instruction scheduler,
initial C++ support, function integration, NS32k, SPARC and M88k
machine description work, delay slot scheduling.

</li><li> Andreas Tobler for his work porting libgcj to Darwin.

</li><li> Teemu Torma for thread safe exception handling support.

</li><li> Leonard Tower wrote parts of the parser, RTL generator, and RTL
definitions, and of the VAX machine description.

</li><li> Daniel Towner and Hariharan Sandanagobalane contributed and
maintain the picoChip port.

</li><li> Tom Tromey for internationalization support and for his many Java
contributions and libgcj maintainership.

</li><li> Lassi Tuura for improvements to config.guess to determine HP processor
types.

</li><li> Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.

</li><li> Andy Vaught for the design and initial implementation of the GNU Fortran
front end.

</li><li> Brent Verner for work with the libstdc++ cshadow files and their
associated configure steps.

</li><li> Todd Vierling for contributions for NetBSD ports.

</li><li> Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
guidance.

</li><li> Dean Wakerley for converting the install documentation from HTML to texinfo
in time for GCC 3.0.

</li><li> Krister Walfridsson for random bug fixes.

</li><li> Feng Wang for contributions to GNU Fortran.

</li><li> Stephen M. Webb for time and effort on making libstdc++ shadow files
work with the tricky Solaris 8+ headers, and for pushing the build-time
header tree.

</li><li> John Wehle for various improvements for the x86 code generator,
related infrastructure improvements to help x86 code generation,
value range propagation and other work, WE32k port.

</li><li> Ulrich Weigand for work on the s390 port.

</li><li> Zack Weinberg for major work on cpplib and various other bug fixes.

</li><li> Matt Welsh for help with Linux Threads support in GCJ.

</li><li> Urban Widmark for help fixing java.io.

</li><li> Mark Wielaard for new Java library code and his work integrating with
Classpath.

</li><li> Dale Wiles helped port GCC to the Tahoe.

</li><li> Bob Wilson from Tensilica, Inc. for the Xtensa port.

</li><li> Jim Wilson for his direction via the steering committee, tackling hard
problems in various places that nobody else wanted to work on, strength
reduction and other loop optimizations.

</li><li> Paul Woegerer and Tal Agmon for the CRX port.

</li><li> Carlo Wood for various fixes.

</li><li> Tom Wood for work on the m88k port.

</li><li> Canqun Yang for work on GNU Fortran.

</li><li> Masanobu Yuhara of Fujitsu Laboratories implemented the machine
description for the Tron architecture (specifically, the Gmicro).

</li><li> Kevin Zachmann helped port GCC to the Tahoe.

</li><li> Ayal Zaks for Swing Modulo Scheduling (SMS).

</li><li> Xiaoqiang Zhang for work on GNU Fortran.

</li><li> Gilles Zunino for help porting Java to Irix.

</li></ul>

<p>The following people are recognized for their contributions to GNAT,
the Ada front end of GCC:
</p><ul>
<li> Bernard Banner

</li><li> Romain Berrendonner

</li><li> Geert Bosch

</li><li> Emmanuel Briot

</li><li> Joel Brobecker

</li><li> Ben Brosgol

</li><li> Vincent Celier

</li><li> Arnaud Charlet

</li><li> Chien Chieng

</li><li> Cyrille Comar

</li><li> Cyrille Crozes

</li><li> Robert Dewar

</li><li> Gary Dismukes

</li><li> Robert Duff

</li><li> Ed Falis

</li><li> Ramon Fernandez

</li><li> Sam Figueroa

</li><li> Vasiliy Fofanov

</li><li> Michael Friess

</li><li> Franco Gasperoni

</li><li> Ted Giering

</li><li> Matthew Gingell

</li><li> Laurent Guerby

</li><li> Jerome Guitton

</li><li> Olivier Hainque

</li><li> Jerome Hugues

</li><li> Hristian Kirtchev

</li><li> Jerome Lambourg

</li><li> Bruno Leclerc

</li><li> Albert Lee

</li><li> Sean McNeil

</li><li> Javier Miranda

</li><li> Laurent Nana

</li><li> Pascal Obry

</li><li> Dong-Ik Oh

</li><li> Laurent Pautet

</li><li> Brett Porter

</li><li> Thomas Quinot

</li><li> Nicolas Roche

</li><li> Pat Rogers

</li><li> Jose Ruiz

</li><li> Douglas Rupp

</li><li> Sergey Rybin

</li><li> Gail Schenker

</li><li> Ed Schonberg

</li><li> Nicolas Setton

</li><li> Samuel Tardieu

</li></ul>


<p>The following people are recognized for their contributions of new
features, bug reports, testing and integration of classpath/libgcj for
GCC version 4.1:
</p><ul>
<li> Lillian Angel for <code>JTree</code> implementation and lots Free Swing
additions and bug fixes.

</li><li> Wolfgang Baer for <code>GapContent</code> bug fixes.

</li><li> Anthony Balkissoon for <code>JList</code>, Free Swing 1.5 updates and mouse event
fixes, lots of Free Swing work including <code>JTable</code> editing.

</li><li> Stuart Ballard for RMI constant fixes.

</li><li> Goffredo Baroncelli for <code>HTTPURLConnection</code> fixes.

</li><li> Gary Benson for <code>MessageFormat</code> fixes.

</li><li> Daniel Bonniot for <code>Serialization</code> fixes.

</li><li> Chris Burdess for lots of gnu.xml and http protocol fixes, <code>StAX</code>
and <code>DOM xml:id</code> support.

</li><li> Ka-Hing Cheung for <code>TreePath</code> and <code>TreeSelection</code> fixes.

</li><li> Archie Cobbs for build fixes, VM interface updates,
<code>URLClassLoader</code> updates.

</li><li> Kelley Cook for build fixes.

</li><li> Martin Cordova for Suggestions for better <code>SocketTimeoutException</code>.

</li><li> David Daney for <code>BitSet</code> bug fixes, <code>HttpURLConnection</code>
rewrite and improvements.

</li><li> Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 2D
support. Lots of imageio framework additions, lots of AWT and Free
Swing bug fixes.

</li><li> Jeroen Frijters for <code>ClassLoader</code> and nio cleanups, serialization fixes,
better <code>Proxy</code> support, bug fixes and IKVM integration.

</li><li> Santiago Gala for <code>AccessControlContext</code> fixes.

</li><li> Nicolas Geoffray for <code>VMClassLoader</code> and <code>AccessController</code>
improvements.

</li><li> David Gilbert for <code>basic</code> and <code>metal</code> icon and plaf support
and lots of documenting, Lots of Free Swing and metal theme
additions. <code>MetalIconFactory</code> implementation.

</li><li> Anthony Green for <code>MIDI</code> framework, <code>ALSA</code> and <code>DSSI</code>
providers.

</li><li> Andrew Haley for <code>Serialization</code> and <code>URLClassLoader</code> fixes,
gcj build speedups.

</li><li> Kim Ho for <code>JFileChooser</code> implementation.

</li><li> Andrew John Hughes for <code>Locale</code> and net fixes, URI RFC2986
updates, <code>Serialization</code> fixes, <code>Properties</code> XML support and
generic branch work, VMIntegration guide update.

</li><li> Bastiaan Huisman for <code>TimeZone</code> bug fixing.

</li><li> Andreas Jaeger for mprec updates.

</li><li> Paul Jenner for better <samp>-Werror</samp> support.

</li><li> Ito Kazumitsu for <code>NetworkInterface</code> implementation and updates.

</li><li> Roman Kennke for <code>BoxLayout</code>, <code>GrayFilter</code> and
<code>SplitPane</code>, plus bug fixes all over. Lots of Free Swing work
including styled text.

</li><li> Simon Kitching for <code>String</code> cleanups and optimization suggestions.

</li><li> Michael Koch for configuration fixes, <code>Locale</code> updates, bug and
build fixes.

</li><li> Guilhem Lavaux for configuration, thread and channel fixes and Kaffe
integration. JCL native <code>Pointer</code> updates. Logger bug fixes.

</li><li> David Lichteblau for JCL support library global/local reference
cleanups.

</li><li> Aaron Luchko for JDWP updates and documentation fixes.

</li><li> Ziga Mahkovec for <code>Graphics2D</code> upgraded to Cairo 0.5 and new regex
features.

</li><li> Sven de Marothy for BMP imageio support, CSS and <code>TextLayout</code>
fixes. <code>GtkImage</code> rewrite, 2D, awt, free swing and date/time fixes and
implementing the Qt4 peers.

</li><li> Casey Marshall for crypto algorithm fixes, <code>FileChannel</code> lock,
<code>SystemLogger</code> and <code>FileHandler</code> rotate implementations, NIO
<code>FileChannel.map</code> support, security and policy updates.

</li><li> Bryce McKinlay for RMI work.

</li><li> Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
testing and documenting.

</li><li> Kalle Olavi Niemitalo for build fixes.

</li><li> Rainer Orth for build fixes.

</li><li> Andrew Overholt for <code>File</code> locking fixes.

</li><li> Ingo Proetel for <code>Image</code>, <code>Logger</code> and <code>URLClassLoader</code>
updates.

</li><li> Olga Rodimina for <code>MenuSelectionManager</code> implementation.

</li><li> Jan Roehrich for <code>BasicTreeUI</code> and <code>JTree</code> fixes.

</li><li> Julian Scheid for documentation updates and gjdoc support.

</li><li> Christian Schlichtherle for zip fixes and cleanups.

</li><li> Robert Schuster for documentation updates and beans fixes,
<code>TreeNode</code> enumerations and <code>ActionCommand</code> and various
fixes, XML and URL, AWT and Free Swing bug fixes.

</li><li> Keith Seitz for lots of JDWP work.

</li><li> Christian Thalinger for 64-bit cleanups, Configuration and VM
interface fixes and <code>CACAO</code> integration, <code>fdlibm</code> updates.

</li><li> Gael Thomas for <code>VMClassLoader</code> boot packages support suggestions.

</li><li> Andreas Tobler for Darwin and Solaris testing and fixing, <code>Qt4</code>
support for Darwin/OS X, <code>Graphics2D</code> support, <code>gtk+</code>
updates.

</li><li> Dalibor Topic for better <code>DEBUG</code> support, build cleanups and
Kaffe integration. <code>Qt4</code> build infrastructure, <code>SHA1PRNG</code>
and <code>GdkPixbugDecoder</code> updates.

</li><li> Tom Tromey for Eclipse integration, generics work, lots of bug fixes
and gcj integration including coordinating The Big Merge.

</li><li> Mark Wielaard for bug fixes, packaging and release management,
<code>Clipboard</code> implementation, system call interrupts and network
timeouts and <code>GdkPixpufDecoder</code> fixes.

</li></ul>


<p>In addition to the above, all of which also contributed time and energy in
testing GCC, we would like to thank the following for their contributions
to testing:
</p>
<ul>
<li> Michael Abd-El-Malek

</li><li> Thomas Arend

</li><li> Bonzo Armstrong

</li><li> Steven Ashe

</li><li> Chris Baldwin

</li><li> David Billinghurst

</li><li> Jim Blandy

</li><li> Stephane Bortzmeyer

</li><li> Horst von Brand

</li><li> Frank Braun

</li><li> Rodney Brown

</li><li> Sidney Cadot

</li><li> Bradford Castalia

</li><li> Robert Clark

</li><li> Jonathan Corbet

</li><li> Ralph Doncaster

</li><li> Richard Emberson

</li><li> Levente Farkas

</li><li> Graham Fawcett

</li><li> Mark Fernyhough

</li><li> Robert A. French

</li><li> J&ouml;rgen Freyh

</li><li> Mark K. Gardner

</li><li> Charles-Antoine Gauthier

</li><li> Yung Shing Gene

</li><li> David Gilbert

</li><li> Simon Gornall

</li><li> Fred Gray

</li><li> John Griffin

</li><li> Patrik Hagglund

</li><li> Phil Hargett

</li><li> Amancio Hasty

</li><li> Takafumi Hayashi

</li><li> Bryan W. Headley

</li><li> Kevin B. Hendricks

</li><li> Joep Jansen

</li><li> Christian Joensson

</li><li> Michel Kern

</li><li> David Kidd

</li><li> Tobias Kuipers

</li><li> Anand Krishnaswamy

</li><li> A. O. V. Le Blanc

</li><li> llewelly

</li><li> Damon Love

</li><li> Brad Lucier

</li><li> Matthias Klose

</li><li> Martin Knoblauch

</li><li> Rick Lutowski

</li><li> Jesse Macnish

</li><li> Stefan Morrell

</li><li> Anon A. Mous

</li><li> Matthias Mueller

</li><li> Pekka Nikander

</li><li> Rick Niles

</li><li> Jon Olson

</li><li> Magnus Persson

</li><li> Chris Pollard

</li><li> Richard Polton

</li><li> Derk Reefman

</li><li> David Rees

</li><li> Paul Reilly

</li><li> Tom Reilly

</li><li> Torsten Rueger

</li><li> Danny Sadinoff

</li><li> Marc Schifer

</li><li> Erik Schnetter

</li><li> Wayne K. Schroll

</li><li> David Schuler

</li><li> Vin Shelton

</li><li> Tim Souder

</li><li> Adam Sulmicki

</li><li> Bill Thorson

</li><li> George Talbot

</li><li> Pedro A. M. Vazquez

</li><li> Gregory Warnes

</li><li> Ian Watson

</li><li> David E. Young

</li><li> And many others
</li></ul>

<p>And finally we&rsquo;d like to thank everyone who uses the compiler, provides
feedback and generally reminds us why we&rsquo;re doing this work in the first
place.
</p>

<hr>
<a name="Option-Index"></a>
<div class="header">
<p>
Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previous: <a href="#Contributors" accesskey="p" rel="prev">Contributors</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Option-Index-1"></a>
<h2 class="unnumbered">Option Index</h2>

<p>GCC&rsquo;s command line options are indexed here without any initial &lsquo;<samp>-</samp>&rsquo;
or &lsquo;<samp>--</samp>&rsquo;.  Where an option has both positive and negative forms
(such as <samp>-f<var>option</var></samp> and <samp>-fno-<var>option</var></samp>),
relevant entries in the manual are indexed under the most appropriate
form; it may sometimes be useful to look up both forms.
</p>
<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Option-Index_op_letter-F"><b>F</b></a>
 &nbsp; 
<a class="summary-letter" href="#Option-Index_op_letter-M"><b>M</b></a>
 &nbsp; 
</td></tr></table>
<table class="index-op" border="0">
<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Option-Index_op_letter-F">F</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-fltrans"><code>fltrans</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Internal-flags">Internal flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fltrans_002doutput_002dlist"><code>fltrans-output-list</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Internal-flags">Internal flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fwpa"><code>fwpa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Internal-flags">Internal flags</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Option-Index_op_letter-M">M</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-msoft_002dfloat"><code>msoft-float</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
</table>
<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Option-Index_op_letter-F"><b>F</b></a>
 &nbsp; 
<a class="summary-letter" href="#Option-Index_op_letter-M"><b>M</b></a>
 &nbsp; 
</td></tr></table>

<hr>
<a name="Concept-Index"></a>
<div class="header">
<p>
Previous: <a href="#Option-Index" accesskey="p" rel="prev">Option Index</a>, Up: <a href="#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Concept-Index-1"></a>
<h2 class="unnumbered">Concept Index</h2>

<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Concept-Index_cp_symbol-1"><b>!</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-2"><b>#</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-3"><b>%</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-4"><b>&amp;</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-5"><b>(</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-6"><b>*</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-7"><b>+</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-8"><b>-</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-9"><b>/</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-10"><b>0</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-11"><b>&lt;</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-12"><b>=</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-13"><b>&gt;</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-14"><b>?</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-15"><b>\</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-16"><b>_</b></a>
 &nbsp; 
<br>
<a class="summary-letter" href="#Concept-Index_cp_letter-A"><b>A</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-B"><b>B</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-C"><b>C</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-D"><b>D</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-E"><b>E</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-F"><b>F</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-G"><b>G</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-H"><b>H</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-I"><b>I</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-J"><b>J</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-L"><b>L</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-M"><b>M</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-N"><b>N</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-O"><b>O</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-Q"><b>Q</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-R"><b>R</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-T"><b>T</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-U"><b>U</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-V"><b>V</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-W"><b>W</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-X"><b>X</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-Z"><b>Z</b></a>
 &nbsp; 
</td></tr></table>
<table class="index-cp" border="0">
<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-1">!</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_0021-in-constraint">&lsquo;<samp>!</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Multi_002dAlternative">Multi-Alternative</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-2">#</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_0023-in-constraint">&lsquo;<samp>#</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Modifiers">Modifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_0023-in-template"><code>#</code> in template</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Template">Output Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_0023pragma"><code>#pragma</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-3">%</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_0025-in-constraint">&lsquo;<samp>%</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Modifiers">Modifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_0025-in-GTY-option">% in GTY option</a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_0025-in-template">&lsquo;<samp>%</samp>&rsquo; in template</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Template">Output Template</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-4">&amp;</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_0026-in-constraint">&lsquo;<samp>&amp;</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Modifiers">Modifiers</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-5">(</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_0028nil_0029">(nil)</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-6">*</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002a-in-constraint">&lsquo;<samp>*</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Modifiers">Modifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002a-in-template"><code>*</code> in template</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Statement">Output Statement</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-7">+</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002b-in-constraint">&lsquo;<samp>+</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Modifiers">Modifiers</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-8">-</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002dfsection_002danchors"><samp>-fsection-anchors</samp></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002dfsection_002danchors-1"><samp>-fsection-anchors</samp></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Anchored-Addresses">Anchored Addresses</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-9">/</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002fc-in-RTL-dump">&lsquo;<samp>/c</samp>&rsquo; in RTL dump</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002ff-in-RTL-dump">&lsquo;<samp>/f</samp>&rsquo; in RTL dump</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002fi-in-RTL-dump">&lsquo;<samp>/i</samp>&rsquo; in RTL dump</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002fj-in-RTL-dump">&lsquo;<samp>/j</samp>&rsquo; in RTL dump</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002fs-in-RTL-dump">&lsquo;<samp>/s</samp>&rsquo; in RTL dump</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002fu-in-RTL-dump">&lsquo;<samp>/u</samp>&rsquo; in RTL dump</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_002fv-in-RTL-dump">&lsquo;<samp>/v</samp>&rsquo; in RTL dump</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-10">0</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-0-in-constraint">&lsquo;<samp>0</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-11">&lt;</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_003c-in-constraint">&lsquo;<samp>&lt;</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-12">=</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_003d-in-constraint">&lsquo;<samp>=</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Modifiers">Modifiers</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-13">&gt;</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_003e-in-constraint">&lsquo;<samp>&gt;</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-14">?</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_003f-in-constraint">&lsquo;<samp>?</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Multi_002dAlternative">Multi-Alternative</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-15">\</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005c">\</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Template">Output Template</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_symbol-16">_</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fabsvdi2"><code>__absvdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fabsvsi2"><code>__absvsi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddda3"><code>__addda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fadddf3"><code>__adddf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fadddq3"><code>__adddq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddha3"><code>__addha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddhq3"><code>__addhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddqq3"><code>__addqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddsa3"><code>__addsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddsf3"><code>__addsf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddsq3"><code>__addsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddta3"><code>__addta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddtf3"><code>__addtf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fadduda3"><code>__adduda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddudq3"><code>__addudq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fadduha3"><code>__adduha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fadduhq3"><code>__adduhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fadduqq3"><code>__adduqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddusa3"><code>__addusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddusq3"><code>__addusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fadduta3"><code>__adduta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddvdi3"><code>__addvdi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddvsi3"><code>__addvsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005faddxf3"><code>__addxf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlda3"><code>__ashlda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashldi3"><code>__ashldi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashldq3"><code>__ashldq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlha3"><code>__ashlha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlhq3"><code>__ashlhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlqq3"><code>__ashlqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlsa3"><code>__ashlsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlsi3"><code>__ashlsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlsq3"><code>__ashlsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlta3"><code>__ashlta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlti3"><code>__ashlti3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashluda3"><code>__ashluda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashludq3"><code>__ashludq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashluha3"><code>__ashluha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashluhq3"><code>__ashluhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashluqq3"><code>__ashluqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlusa3"><code>__ashlusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashlusq3"><code>__ashlusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashluta3"><code>__ashluta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrda3"><code>__ashrda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrdi3"><code>__ashrdi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrdq3"><code>__ashrdq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrha3"><code>__ashrha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrhq3"><code>__ashrhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrqq3"><code>__ashrqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrsa3"><code>__ashrsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrsi3"><code>__ashrsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrsq3"><code>__ashrsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrta3"><code>__ashrta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fashrti3"><code>__ashrti3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fadddd3"><code>__bid_adddd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005faddsd3"><code>__bid_addsd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005faddtd3"><code>__bid_addtd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fdivdd3"><code>__bid_divdd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fdivsd3"><code>__bid_divsd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fdivtd3"><code>__bid_divtd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005feqdd2"><code>__bid_eqdd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005feqsd2"><code>__bid_eqsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005feqtd2"><code>__bid_eqtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendddtd2"><code>__bid_extendddtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendddtf"><code>__bid_extendddtf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendddxf"><code>__bid_extendddxf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextenddfdd"><code>__bid_extenddfdd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextenddftd"><code>__bid_extenddftd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendsddd2"><code>__bid_extendsddd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendsddf"><code>__bid_extendsddf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendsdtd2"><code>__bid_extendsdtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendsdtf"><code>__bid_extendsdtf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendsdxf"><code>__bid_extendsdxf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendsfdd"><code>__bid_extendsfdd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendsfsd"><code>__bid_extendsfsd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendsftd"><code>__bid_extendsftd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendtftd"><code>__bid_extendtftd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fextendxftd"><code>__bid_extendxftd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixdddi"><code>__bid_fixdddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixddsi"><code>__bid_fixddsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixsddi"><code>__bid_fixsddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixsdsi"><code>__bid_fixsdsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixtddi"><code>__bid_fixtddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixtdsi"><code>__bid_fixtdsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixunsdddi"><code>__bid_fixunsdddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixunsddsi"><code>__bid_fixunsddsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixunssddi"><code>__bid_fixunssddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixunssdsi"><code>__bid_fixunssdsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixunstddi"><code>__bid_fixunstddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffixunstdsi"><code>__bid_fixunstdsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatdidd"><code>__bid_floatdidd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatdisd"><code>__bid_floatdisd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatditd"><code>__bid_floatditd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatsidd"><code>__bid_floatsidd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatsisd"><code>__bid_floatsisd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatsitd"><code>__bid_floatsitd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatunsdidd"><code>__bid_floatunsdidd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatunsdisd"><code>__bid_floatunsdisd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatunsditd"><code>__bid_floatunsditd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatunssidd"><code>__bid_floatunssidd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatunssisd"><code>__bid_floatunssisd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ffloatunssitd"><code>__bid_floatunssitd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fgedd2"><code>__bid_gedd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fgesd2"><code>__bid_gesd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fgetd2"><code>__bid_getd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fgtdd2"><code>__bid_gtdd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fgtsd2"><code>__bid_gtsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fgttd2"><code>__bid_gttd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fledd2"><code>__bid_ledd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005flesd2"><code>__bid_lesd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fletd2"><code>__bid_letd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fltdd2"><code>__bid_ltdd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fltsd2"><code>__bid_ltsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005flttd2"><code>__bid_lttd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fmuldd3"><code>__bid_muldd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fmulsd3"><code>__bid_mulsd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fmultd3"><code>__bid_multd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fnedd2"><code>__bid_nedd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fnegdd2"><code>__bid_negdd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fnegsd2"><code>__bid_negsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fnegtd2"><code>__bid_negtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fnesd2"><code>__bid_nesd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fnetd2"><code>__bid_netd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fsubdd3"><code>__bid_subdd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fsubsd3"><code>__bid_subsd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005fsubtd3"><code>__bid_subtd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftruncdddf"><code>__bid_truncdddf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftruncddsd2"><code>__bid_truncddsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftruncddsf"><code>__bid_truncddsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftruncdfsd"><code>__bid_truncdfsd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftruncsdsf"><code>__bid_truncsdsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftrunctddd2"><code>__bid_trunctddd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftrunctddf"><code>__bid_trunctddf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftrunctdsd2"><code>__bid_trunctdsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftrunctdsf"><code>__bid_trunctdsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftrunctdtf"><code>__bid_trunctdtf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftrunctdxf"><code>__bid_trunctdxf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftrunctfdd"><code>__bid_trunctfdd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftrunctfsd"><code>__bid_trunctfsd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftruncxfdd"><code>__bid_truncxfdd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005ftruncxfsd"><code>__bid_truncxfsd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005funorddd2"><code>__bid_unorddd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005funordsd2"><code>__bid_unordsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbid_005funordtd2"><code>__bid_unordtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbswapdi2"><code>__bswapdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbswapsi2"><code>__bswapsi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbuiltin_005fclassify_005ftype"><code>__builtin_classify_type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Varargs">Varargs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbuiltin_005fnext_005farg"><code>__builtin_next_arg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Varargs">Varargs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fbuiltin_005fsaveregs"><code>__builtin_saveregs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Varargs">Varargs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fclear_005fcache"><code>__clear_cache</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-routines">Miscellaneous routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fclzdi2"><code>__clzdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fclzsi2"><code>__clzsi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fclzti2"><code>__clzti2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpda2"><code>__cmpda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpdf2"><code>__cmpdf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpdi2"><code>__cmpdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpdq2"><code>__cmpdq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpha2"><code>__cmpha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmphq2"><code>__cmphq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpqq2"><code>__cmpqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpsa2"><code>__cmpsa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpsf2"><code>__cmpsf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpsq2"><code>__cmpsq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpta2"><code>__cmpta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmptf2"><code>__cmptf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpti2"><code>__cmpti2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpuda2"><code>__cmpuda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpudq2"><code>__cmpudq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpuha2"><code>__cmpuha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpuhq2"><code>__cmpuhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpuqq2"><code>__cmpuqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpusa2"><code>__cmpusa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmpusq2"><code>__cmpusq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fcmputa2"><code>__cmputa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fCTOR_005fLIST_005f_005f"><code>__CTOR_LIST__</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Initialization">Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fctzdi2"><code>__ctzdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fctzsi2"><code>__ctzsi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fctzti2"><code>__ctzti2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivda3"><code>__divda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivdc3"><code>__divdc3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivdf3"><code>__divdf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivdi3"><code>__divdi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivdq3"><code>__divdq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivha3"><code>__divha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivhq3"><code>__divhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivqq3"><code>__divqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivsa3"><code>__divsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivsc3"><code>__divsc3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivsf3"><code>__divsf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivsi3"><code>__divsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivsq3"><code>__divsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivta3"><code>__divta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivtc3"><code>__divtc3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivtf3"><code>__divtf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivti3"><code>__divti3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivxc3"><code>__divxc3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdivxf3"><code>__divxf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fadddd3"><code>__dpd_adddd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005faddsd3"><code>__dpd_addsd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005faddtd3"><code>__dpd_addtd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fdivdd3"><code>__dpd_divdd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fdivsd3"><code>__dpd_divsd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fdivtd3"><code>__dpd_divtd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005feqdd2"><code>__dpd_eqdd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005feqsd2"><code>__dpd_eqsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005feqtd2"><code>__dpd_eqtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendddtd2"><code>__dpd_extendddtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendddtf"><code>__dpd_extendddtf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendddxf"><code>__dpd_extendddxf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextenddfdd"><code>__dpd_extenddfdd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextenddftd"><code>__dpd_extenddftd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendsddd2"><code>__dpd_extendsddd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendsddf"><code>__dpd_extendsddf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendsdtd2"><code>__dpd_extendsdtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendsdtf"><code>__dpd_extendsdtf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendsdxf"><code>__dpd_extendsdxf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendsfdd"><code>__dpd_extendsfdd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendsfsd"><code>__dpd_extendsfsd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendsftd"><code>__dpd_extendsftd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendtftd"><code>__dpd_extendtftd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fextendxftd"><code>__dpd_extendxftd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixdddi"><code>__dpd_fixdddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixddsi"><code>__dpd_fixddsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixsddi"><code>__dpd_fixsddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixsdsi"><code>__dpd_fixsdsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixtddi"><code>__dpd_fixtddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixtdsi"><code>__dpd_fixtdsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixunsdddi"><code>__dpd_fixunsdddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixunsddsi"><code>__dpd_fixunsddsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixunssddi"><code>__dpd_fixunssddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixunssdsi"><code>__dpd_fixunssdsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixunstddi"><code>__dpd_fixunstddi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffixunstdsi"><code>__dpd_fixunstdsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatdidd"><code>__dpd_floatdidd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatdisd"><code>__dpd_floatdisd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatditd"><code>__dpd_floatditd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatsidd"><code>__dpd_floatsidd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatsisd"><code>__dpd_floatsisd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatsitd"><code>__dpd_floatsitd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatunsdidd"><code>__dpd_floatunsdidd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatunsdisd"><code>__dpd_floatunsdisd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatunsditd"><code>__dpd_floatunsditd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatunssidd"><code>__dpd_floatunssidd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatunssisd"><code>__dpd_floatunssisd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ffloatunssitd"><code>__dpd_floatunssitd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fgedd2"><code>__dpd_gedd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fgesd2"><code>__dpd_gesd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fgetd2"><code>__dpd_getd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fgtdd2"><code>__dpd_gtdd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fgtsd2"><code>__dpd_gtsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fgttd2"><code>__dpd_gttd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fledd2"><code>__dpd_ledd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005flesd2"><code>__dpd_lesd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fletd2"><code>__dpd_letd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fltdd2"><code>__dpd_ltdd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fltsd2"><code>__dpd_ltsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005flttd2"><code>__dpd_lttd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fmuldd3"><code>__dpd_muldd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fmulsd3"><code>__dpd_mulsd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fmultd3"><code>__dpd_multd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fnedd2"><code>__dpd_nedd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fnegdd2"><code>__dpd_negdd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fnegsd2"><code>__dpd_negsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fnegtd2"><code>__dpd_negtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fnesd2"><code>__dpd_nesd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fnetd2"><code>__dpd_netd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fsubdd3"><code>__dpd_subdd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fsubsd3"><code>__dpd_subsd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005fsubtd3"><code>__dpd_subtd3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftruncdddf"><code>__dpd_truncdddf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftruncddsd2"><code>__dpd_truncddsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftruncddsf"><code>__dpd_truncddsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftruncdfsd"><code>__dpd_truncdfsd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftruncsdsf"><code>__dpd_truncsdsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftrunctddd2"><code>__dpd_trunctddd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftrunctddf"><code>__dpd_trunctddf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftrunctdsd2"><code>__dpd_trunctdsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftrunctdsf"><code>__dpd_trunctdsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftrunctdtf"><code>__dpd_trunctdtf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftrunctdxf"><code>__dpd_trunctdxf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftrunctfdd"><code>__dpd_trunctfdd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftrunctfsd"><code>__dpd_trunctfsd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftruncxfdd"><code>__dpd_truncxfdd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005ftruncxfsd"><code>__dpd_truncxfsd</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005funorddd2"><code>__dpd_unorddd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005funordsd2"><code>__dpd_unordsd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fdpd_005funordtd2"><code>__dpd_unordtd2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fDTOR_005fLIST_005f_005f"><code>__DTOR_LIST__</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Initialization">Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005feqdf2"><code>__eqdf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005feqsf2"><code>__eqsf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005feqtf2"><code>__eqtf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fextenddftf2"><code>__extenddftf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fextenddfxf2"><code>__extenddfxf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fextendsfdf2"><code>__extendsfdf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fextendsftf2"><code>__extendsftf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fextendsfxf2"><code>__extendsfxf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fffsdi2"><code>__ffsdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fffsti2"><code>__ffsti2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixdfdi"><code>__fixdfdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixdfsi"><code>__fixdfsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixdfti"><code>__fixdfti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixsfdi"><code>__fixsfdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixsfsi"><code>__fixsfsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixsfti"><code>__fixsfti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixtfdi"><code>__fixtfdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixtfsi"><code>__fixtfsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixtfti"><code>__fixtfti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunsdfdi"><code>__fixunsdfdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunsdfsi"><code>__fixunsdfsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunsdfti"><code>__fixunsdfti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunssfdi"><code>__fixunssfdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunssfsi"><code>__fixunssfsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunssfti"><code>__fixunssfti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunstfdi"><code>__fixunstfdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunstfsi"><code>__fixunstfsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunstfti"><code>__fixunstfti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunsxfdi"><code>__fixunsxfdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunsxfsi"><code>__fixunsxfsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixunsxfti"><code>__fixunsxfti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixxfdi"><code>__fixxfdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixxfsi"><code>__fixxfsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffixxfti"><code>__fixxfti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatdidf"><code>__floatdidf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatdisf"><code>__floatdisf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatditf"><code>__floatditf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatdixf"><code>__floatdixf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatsidf"><code>__floatsidf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatsisf"><code>__floatsisf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatsitf"><code>__floatsitf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatsixf"><code>__floatsixf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloattidf"><code>__floattidf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloattisf"><code>__floattisf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloattitf"><code>__floattitf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloattixf"><code>__floattixf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatundidf"><code>__floatundidf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatundisf"><code>__floatundisf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatunditf"><code>__floatunditf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatundixf"><code>__floatundixf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatunsidf"><code>__floatunsidf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatunsisf"><code>__floatunsisf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatunsitf"><code>__floatunsitf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatunsixf"><code>__floatunsixf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatuntidf"><code>__floatuntidf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatuntisf"><code>__floatuntisf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatuntitf"><code>__floatuntitf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffloatuntixf"><code>__floatuntixf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdadf"><code>__fractdadf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdadi"><code>__fractdadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdadq"><code>__fractdadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdaha2"><code>__fractdaha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdahi"><code>__fractdahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdahq"><code>__fractdahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdaqi"><code>__fractdaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdaqq"><code>__fractdaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdasa2"><code>__fractdasa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdasf"><code>__fractdasf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdasi"><code>__fractdasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdasq"><code>__fractdasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdata2"><code>__fractdata2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdati"><code>__fractdati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdauda"><code>__fractdauda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdaudq"><code>__fractdaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdauha"><code>__fractdauha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdauhq"><code>__fractdauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdauqq"><code>__fractdauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdausa"><code>__fractdausa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdausq"><code>__fractdausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdauta"><code>__fractdauta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfda"><code>__fractdfda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfdq"><code>__fractdfdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfha"><code>__fractdfha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfhq"><code>__fractdfhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfqq"><code>__fractdfqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfsa"><code>__fractdfsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfsq"><code>__fractdfsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfta"><code>__fractdfta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfuda"><code>__fractdfuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfudq"><code>__fractdfudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfuha"><code>__fractdfuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfuhq"><code>__fractdfuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfuqq"><code>__fractdfuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfusa"><code>__fractdfusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfusq"><code>__fractdfusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdfuta"><code>__fractdfuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdida"><code>__fractdida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdidq"><code>__fractdidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiha"><code>__fractdiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdihq"><code>__fractdihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiqq"><code>__fractdiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdisa"><code>__fractdisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdisq"><code>__fractdisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdita"><code>__fractdita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiuda"><code>__fractdiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiudq"><code>__fractdiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiuha"><code>__fractdiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiuhq"><code>__fractdiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiuqq"><code>__fractdiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiusa"><code>__fractdiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiusq"><code>__fractdiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdiuta"><code>__fractdiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqda"><code>__fractdqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqdf"><code>__fractdqdf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqdi"><code>__fractdqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqha"><code>__fractdqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqhi"><code>__fractdqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqhq2"><code>__fractdqhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqqi"><code>__fractdqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqqq2"><code>__fractdqqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqsa"><code>__fractdqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqsf"><code>__fractdqsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqsi"><code>__fractdqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqsq2"><code>__fractdqsq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqta"><code>__fractdqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqti"><code>__fractdqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdquda"><code>__fractdquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqudq"><code>__fractdqudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdquha"><code>__fractdquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdquhq"><code>__fractdquhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdquqq"><code>__fractdquqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqusa"><code>__fractdqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdqusq"><code>__fractdqusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractdquta"><code>__fractdquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthada2"><code>__fracthada2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthadf"><code>__fracthadf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthadi"><code>__fracthadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthadq"><code>__fracthadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthahi"><code>__fracthahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthahq"><code>__fracthahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthaqi"><code>__fracthaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthaqq"><code>__fracthaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthasa2"><code>__fracthasa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthasf"><code>__fracthasf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthasi"><code>__fracthasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthasq"><code>__fracthasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthata2"><code>__fracthata2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthati"><code>__fracthati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthauda"><code>__fracthauda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthaudq"><code>__fracthaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthauha"><code>__fracthauha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthauhq"><code>__fracthauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthauqq"><code>__fracthauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthausa"><code>__fracthausa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthausq"><code>__fracthausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthauta"><code>__fracthauta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthida"><code>__fracthida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthidq"><code>__fracthidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiha"><code>__fracthiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthihq"><code>__fracthihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiqq"><code>__fracthiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthisa"><code>__fracthisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthisq"><code>__fracthisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthita"><code>__fracthita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiuda"><code>__fracthiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiudq"><code>__fracthiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiuha"><code>__fracthiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiuhq"><code>__fracthiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiuqq"><code>__fracthiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiusa"><code>__fracthiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiusq"><code>__fracthiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthiuta"><code>__fracthiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqda"><code>__fracthqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqdf"><code>__fracthqdf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqdi"><code>__fracthqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqdq2"><code>__fracthqdq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqha"><code>__fracthqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqhi"><code>__fracthqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqqi"><code>__fracthqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqqq2"><code>__fracthqqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqsa"><code>__fracthqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqsf"><code>__fracthqsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqsi"><code>__fracthqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqsq2"><code>__fracthqsq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqta"><code>__fracthqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqti"><code>__fracthqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthquda"><code>__fracthquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqudq"><code>__fracthqudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthquha"><code>__fracthquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthquhq"><code>__fracthquhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthquqq"><code>__fracthquqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqusa"><code>__fracthqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthqusq"><code>__fracthqusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracthquta"><code>__fracthquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqida"><code>__fractqida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqidq"><code>__fractqidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiha"><code>__fractqiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqihq"><code>__fractqihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiqq"><code>__fractqiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqisa"><code>__fractqisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqisq"><code>__fractqisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqita"><code>__fractqita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiuda"><code>__fractqiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiudq"><code>__fractqiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiuha"><code>__fractqiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiuhq"><code>__fractqiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiuqq"><code>__fractqiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiusa"><code>__fractqiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiusq"><code>__fractqiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqiuta"><code>__fractqiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqda"><code>__fractqqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqdf"><code>__fractqqdf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqdi"><code>__fractqqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqdq2"><code>__fractqqdq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqha"><code>__fractqqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqhi"><code>__fractqqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqhq2"><code>__fractqqhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqqi"><code>__fractqqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqsa"><code>__fractqqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqsf"><code>__fractqqsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqsi"><code>__fractqqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqsq2"><code>__fractqqsq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqta"><code>__fractqqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqti"><code>__fractqqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqquda"><code>__fractqquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqudq"><code>__fractqqudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqquha"><code>__fractqquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqquhq"><code>__fractqquhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqquqq"><code>__fractqquqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqusa"><code>__fractqqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqqusq"><code>__fractqqusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractqquta"><code>__fractqquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsada2"><code>__fractsada2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsadf"><code>__fractsadf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsadi"><code>__fractsadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsadq"><code>__fractsadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsaha2"><code>__fractsaha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsahi"><code>__fractsahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsahq"><code>__fractsahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsaqi"><code>__fractsaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsaqq"><code>__fractsaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsasf"><code>__fractsasf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsasi"><code>__fractsasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsasq"><code>__fractsasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsata2"><code>__fractsata2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsati"><code>__fractsati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsauda"><code>__fractsauda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsaudq"><code>__fractsaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsauha"><code>__fractsauha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsauhq"><code>__fractsauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsauqq"><code>__fractsauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsausa"><code>__fractsausa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsausq"><code>__fractsausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsauta"><code>__fractsauta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfda"><code>__fractsfda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfdq"><code>__fractsfdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfha"><code>__fractsfha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfhq"><code>__fractsfhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfqq"><code>__fractsfqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfsa"><code>__fractsfsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfsq"><code>__fractsfsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfta"><code>__fractsfta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfuda"><code>__fractsfuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfudq"><code>__fractsfudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfuha"><code>__fractsfuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfuhq"><code>__fractsfuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfuqq"><code>__fractsfuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfusa"><code>__fractsfusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfusq"><code>__fractsfusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsfuta"><code>__fractsfuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsida"><code>__fractsida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsidq"><code>__fractsidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiha"><code>__fractsiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsihq"><code>__fractsihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiqq"><code>__fractsiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsisa"><code>__fractsisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsisq"><code>__fractsisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsita"><code>__fractsita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiuda"><code>__fractsiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiudq"><code>__fractsiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiuha"><code>__fractsiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiuhq"><code>__fractsiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiuqq"><code>__fractsiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiusa"><code>__fractsiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiusq"><code>__fractsiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsiuta"><code>__fractsiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqda"><code>__fractsqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqdf"><code>__fractsqdf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqdi"><code>__fractsqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqdq2"><code>__fractsqdq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqha"><code>__fractsqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqhi"><code>__fractsqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqhq2"><code>__fractsqhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqqi"><code>__fractsqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqqq2"><code>__fractsqqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqsa"><code>__fractsqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqsf"><code>__fractsqsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqsi"><code>__fractsqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqta"><code>__fractsqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqti"><code>__fractsqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsquda"><code>__fractsquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqudq"><code>__fractsqudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsquha"><code>__fractsquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsquhq"><code>__fractsquhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsquqq"><code>__fractsquqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqusa"><code>__fractsqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsqusq"><code>__fractsqusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractsquta"><code>__fractsquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttada2"><code>__fracttada2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttadf"><code>__fracttadf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttadi"><code>__fracttadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttadq"><code>__fracttadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttaha2"><code>__fracttaha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttahi"><code>__fracttahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttahq"><code>__fracttahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttaqi"><code>__fracttaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttaqq"><code>__fracttaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttasa2"><code>__fracttasa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttasf"><code>__fracttasf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttasi"><code>__fracttasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttasq"><code>__fracttasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttati"><code>__fracttati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttauda"><code>__fracttauda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttaudq"><code>__fracttaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttauha"><code>__fracttauha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttauhq"><code>__fracttauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttauqq"><code>__fracttauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttausa"><code>__fracttausa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttausq"><code>__fracttausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttauta"><code>__fracttauta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttida"><code>__fracttida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttidq"><code>__fracttidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiha"><code>__fracttiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttihq"><code>__fracttihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiqq"><code>__fracttiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttisa"><code>__fracttisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttisq"><code>__fracttisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttita"><code>__fracttita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiuda"><code>__fracttiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiudq"><code>__fracttiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiuha"><code>__fracttiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiuhq"><code>__fracttiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiuqq"><code>__fracttiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiusa"><code>__fracttiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiusq"><code>__fracttiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffracttiuta"><code>__fracttiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudada"><code>__fractudada</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudadf"><code>__fractudadf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudadi"><code>__fractudadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudadq"><code>__fractudadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudaha"><code>__fractudaha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudahi"><code>__fractudahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudahq"><code>__fractudahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudaqi"><code>__fractudaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudaqq"><code>__fractudaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudasa"><code>__fractudasa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudasf"><code>__fractudasf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudasi"><code>__fractudasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudasq"><code>__fractudasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudata"><code>__fractudata</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudati"><code>__fractudati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudaudq"><code>__fractudaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudauha2"><code>__fractudauha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudauhq"><code>__fractudauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudauqq"><code>__fractudauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudausa2"><code>__fractudausa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudausq"><code>__fractudausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudauta2"><code>__fractudauta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqda"><code>__fractudqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqdf"><code>__fractudqdf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqdi"><code>__fractudqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqdq"><code>__fractudqdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqha"><code>__fractudqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqhi"><code>__fractudqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqhq"><code>__fractudqhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqqi"><code>__fractudqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqqq"><code>__fractudqqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqsa"><code>__fractudqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqsf"><code>__fractudqsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqsi"><code>__fractudqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqsq"><code>__fractudqsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqta"><code>__fractudqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqti"><code>__fractudqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudquda"><code>__fractudquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudquha"><code>__fractudquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudquhq2"><code>__fractudquhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudquqq2"><code>__fractudquqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqusa"><code>__fractudqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudqusq2"><code>__fractudqusq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractudquta"><code>__fractudquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhada"><code>__fractuhada</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhadf"><code>__fractuhadf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhadi"><code>__fractuhadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhadq"><code>__fractuhadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhaha"><code>__fractuhaha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhahi"><code>__fractuhahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhahq"><code>__fractuhahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhaqi"><code>__fractuhaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhaqq"><code>__fractuhaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhasa"><code>__fractuhasa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhasf"><code>__fractuhasf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhasi"><code>__fractuhasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhasq"><code>__fractuhasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhata"><code>__fractuhata</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhati"><code>__fractuhati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhauda2"><code>__fractuhauda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhaudq"><code>__fractuhaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhauhq"><code>__fractuhauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhauqq"><code>__fractuhauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhausa2"><code>__fractuhausa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhausq"><code>__fractuhausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhauta2"><code>__fractuhauta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqda"><code>__fractuhqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqdf"><code>__fractuhqdf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqdi"><code>__fractuhqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqdq"><code>__fractuhqdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqha"><code>__fractuhqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqhi"><code>__fractuhqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqhq"><code>__fractuhqhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqqi"><code>__fractuhqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqqq"><code>__fractuhqqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqsa"><code>__fractuhqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqsf"><code>__fractuhqsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqsi"><code>__fractuhqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqsq"><code>__fractuhqsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqta"><code>__fractuhqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqti"><code>__fractuhqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhquda"><code>__fractuhquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqudq2"><code>__fractuhqudq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhquha"><code>__fractuhquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhquqq2"><code>__fractuhquqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqusa"><code>__fractuhqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhqusq2"><code>__fractuhqusq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuhquta"><code>__fractuhquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdadi"><code>__fractunsdadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdahi"><code>__fractunsdahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdaqi"><code>__fractunsdaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdasi"><code>__fractunsdasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdati"><code>__fractunsdati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdida"><code>__fractunsdida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdidq"><code>__fractunsdidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiha"><code>__fractunsdiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdihq"><code>__fractunsdihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiqq"><code>__fractunsdiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdisa"><code>__fractunsdisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdisq"><code>__fractunsdisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdita"><code>__fractunsdita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiuda"><code>__fractunsdiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiudq"><code>__fractunsdiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiuha"><code>__fractunsdiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiuhq"><code>__fractunsdiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiuqq"><code>__fractunsdiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiusa"><code>__fractunsdiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiusq"><code>__fractunsdiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdiuta"><code>__fractunsdiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdqdi"><code>__fractunsdqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdqhi"><code>__fractunsdqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdqqi"><code>__fractunsdqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdqsi"><code>__fractunsdqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsdqti"><code>__fractunsdqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshadi"><code>__fractunshadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshahi"><code>__fractunshahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshaqi"><code>__fractunshaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshasi"><code>__fractunshasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshati"><code>__fractunshati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshida"><code>__fractunshida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshidq"><code>__fractunshidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiha"><code>__fractunshiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshihq"><code>__fractunshihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiqq"><code>__fractunshiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshisa"><code>__fractunshisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshisq"><code>__fractunshisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshita"><code>__fractunshita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiuda"><code>__fractunshiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiudq"><code>__fractunshiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiuha"><code>__fractunshiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiuhq"><code>__fractunshiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiuqq"><code>__fractunshiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiusa"><code>__fractunshiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiusq"><code>__fractunshiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshiuta"><code>__fractunshiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshqdi"><code>__fractunshqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshqhi"><code>__fractunshqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshqqi"><code>__fractunshqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshqsi"><code>__fractunshqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunshqti"><code>__fractunshqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqida"><code>__fractunsqida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqidq"><code>__fractunsqidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiha"><code>__fractunsqiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqihq"><code>__fractunsqihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiqq"><code>__fractunsqiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqisa"><code>__fractunsqisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqisq"><code>__fractunsqisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqita"><code>__fractunsqita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiuda"><code>__fractunsqiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiudq"><code>__fractunsqiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiuha"><code>__fractunsqiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiuhq"><code>__fractunsqiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiuqq"><code>__fractunsqiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiusa"><code>__fractunsqiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiusq"><code>__fractunsqiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqiuta"><code>__fractunsqiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqqdi"><code>__fractunsqqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqqhi"><code>__fractunsqqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqqqi"><code>__fractunsqqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqqsi"><code>__fractunsqqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsqqti"><code>__fractunsqqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssadi"><code>__fractunssadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssahi"><code>__fractunssahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssaqi"><code>__fractunssaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssasi"><code>__fractunssasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssati"><code>__fractunssati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssida"><code>__fractunssida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssidq"><code>__fractunssidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiha"><code>__fractunssiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssihq"><code>__fractunssihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiqq"><code>__fractunssiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssisa"><code>__fractunssisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssisq"><code>__fractunssisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssita"><code>__fractunssita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiuda"><code>__fractunssiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiudq"><code>__fractunssiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiuha"><code>__fractunssiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiuhq"><code>__fractunssiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiuqq"><code>__fractunssiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiusa"><code>__fractunssiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiusq"><code>__fractunssiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssiuta"><code>__fractunssiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssqdi"><code>__fractunssqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssqhi"><code>__fractunssqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssqqi"><code>__fractunssqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssqsi"><code>__fractunssqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunssqti"><code>__fractunssqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstadi"><code>__fractunstadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstahi"><code>__fractunstahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstaqi"><code>__fractunstaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstasi"><code>__fractunstasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstati"><code>__fractunstati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstida"><code>__fractunstida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstidq"><code>__fractunstidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiha"><code>__fractunstiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstihq"><code>__fractunstihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiqq"><code>__fractunstiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstisa"><code>__fractunstisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstisq"><code>__fractunstisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstita"><code>__fractunstita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiuda"><code>__fractunstiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiudq"><code>__fractunstiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiuha"><code>__fractunstiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiuhq"><code>__fractunstiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiuqq"><code>__fractunstiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiusa"><code>__fractunstiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiusq"><code>__fractunstiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunstiuta"><code>__fractunstiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudadi"><code>__fractunsudadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudahi"><code>__fractunsudahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudaqi"><code>__fractunsudaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudasi"><code>__fractunsudasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudati"><code>__fractunsudati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudqdi"><code>__fractunsudqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudqhi"><code>__fractunsudqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudqqi"><code>__fractunsudqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudqsi"><code>__fractunsudqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsudqti"><code>__fractunsudqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhadi"><code>__fractunsuhadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhahi"><code>__fractunsuhahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhaqi"><code>__fractunsuhaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhasi"><code>__fractunsuhasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhati"><code>__fractunsuhati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhqdi"><code>__fractunsuhqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhqhi"><code>__fractunsuhqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhqqi"><code>__fractunsuhqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhqsi"><code>__fractunsuhqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuhqti"><code>__fractunsuhqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuqqdi"><code>__fractunsuqqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuqqhi"><code>__fractunsuqqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuqqqi"><code>__fractunsuqqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuqqsi"><code>__fractunsuqqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsuqqti"><code>__fractunsuqqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusadi"><code>__fractunsusadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusahi"><code>__fractunsusahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusaqi"><code>__fractunsusaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusasi"><code>__fractunsusasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusati"><code>__fractunsusati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusqdi"><code>__fractunsusqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusqhi"><code>__fractunsusqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusqqi"><code>__fractunsusqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusqsi"><code>__fractunsusqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsusqti"><code>__fractunsusqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsutadi"><code>__fractunsutadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsutahi"><code>__fractunsutahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsutaqi"><code>__fractunsutaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsutasi"><code>__fractunsutasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractunsutati"><code>__fractunsutati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqda"><code>__fractuqqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqdf"><code>__fractuqqdf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqdi"><code>__fractuqqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqdq"><code>__fractuqqdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqha"><code>__fractuqqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqhi"><code>__fractuqqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqhq"><code>__fractuqqhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqqi"><code>__fractuqqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqqq"><code>__fractuqqqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqsa"><code>__fractuqqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqsf"><code>__fractuqqsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqsi"><code>__fractuqqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqsq"><code>__fractuqqsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqta"><code>__fractuqqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqti"><code>__fractuqqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqquda"><code>__fractuqquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqudq2"><code>__fractuqqudq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqquha"><code>__fractuqquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqquhq2"><code>__fractuqquhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqusa"><code>__fractuqqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqqusq2"><code>__fractuqqusq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractuqquta"><code>__fractuqquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusada"><code>__fractusada</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusadf"><code>__fractusadf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusadi"><code>__fractusadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusadq"><code>__fractusadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusaha"><code>__fractusaha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusahi"><code>__fractusahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusahq"><code>__fractusahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusaqi"><code>__fractusaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusaqq"><code>__fractusaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusasa"><code>__fractusasa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusasf"><code>__fractusasf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusasi"><code>__fractusasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusasq"><code>__fractusasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusata"><code>__fractusata</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusati"><code>__fractusati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusauda2"><code>__fractusauda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusaudq"><code>__fractusaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusauha2"><code>__fractusauha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusauhq"><code>__fractusauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusauqq"><code>__fractusauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusausq"><code>__fractusausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusauta2"><code>__fractusauta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqda"><code>__fractusqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqdf"><code>__fractusqdf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqdi"><code>__fractusqdi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqdq"><code>__fractusqdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqha"><code>__fractusqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqhi"><code>__fractusqhi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqhq"><code>__fractusqhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqqi"><code>__fractusqqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqqq"><code>__fractusqqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqsa"><code>__fractusqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqsf"><code>__fractusqsf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqsi"><code>__fractusqsi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqsq"><code>__fractusqsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqta"><code>__fractusqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqti"><code>__fractusqti</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusquda"><code>__fractusquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqudq2"><code>__fractusqudq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusquha"><code>__fractusquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusquhq2"><code>__fractusquhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusquqq2"><code>__fractusquqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusqusa"><code>__fractusqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractusquta"><code>__fractusquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutada"><code>__fractutada</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutadf"><code>__fractutadf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutadi"><code>__fractutadi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutadq"><code>__fractutadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutaha"><code>__fractutaha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutahi"><code>__fractutahi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutahq"><code>__fractutahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutaqi"><code>__fractutaqi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutaqq"><code>__fractutaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutasa"><code>__fractutasa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutasf"><code>__fractutasf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutasi"><code>__fractutasi</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutasq"><code>__fractutasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutata"><code>__fractutata</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutati"><code>__fractutati</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutauda2"><code>__fractutauda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutaudq"><code>__fractutaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutauha2"><code>__fractutauha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutauhq"><code>__fractutauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutauqq"><code>__fractutauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutausa2"><code>__fractutausa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ffractutausq"><code>__fractutausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fgedf2"><code>__gedf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fgesf2"><code>__gesf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fgetf2"><code>__getf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fgtdf2"><code>__gtdf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fgtsf2"><code>__gtsf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fgttf2"><code>__gttf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fledf2"><code>__ledf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flesf2"><code>__lesf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fletf2"><code>__letf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshrdi3"><code>__lshrdi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshrsi3"><code>__lshrsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshrti3"><code>__lshrti3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshruda3"><code>__lshruda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshrudq3"><code>__lshrudq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshruha3"><code>__lshruha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshruhq3"><code>__lshruhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshruqq3"><code>__lshruqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshrusa3"><code>__lshrusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshrusq3"><code>__lshrusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flshruta3"><code>__lshruta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fltdf2"><code>__ltdf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fltsf2"><code>__ltsf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005flttf2"><code>__lttf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmain"><code>__main</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Collect2">Collect2</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmoddi3"><code>__moddi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmodsi3"><code>__modsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmodti3"><code>__modti3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmorestack_005fcurrent_005fsegment"><code>__morestack_current_segment</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-routines">Miscellaneous routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmorestack_005finitial_005fsp"><code>__morestack_initial_sp</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-routines">Miscellaneous routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmorestack_005fsegments"><code>__morestack_segments</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-routines">Miscellaneous routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulda3"><code>__mulda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuldc3"><code>__muldc3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuldf3"><code>__muldf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuldi3"><code>__muldi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuldq3"><code>__muldq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulha3"><code>__mulha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulhq3"><code>__mulhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulqq3"><code>__mulqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulsa3"><code>__mulsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulsc3"><code>__mulsc3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulsf3"><code>__mulsf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulsi3"><code>__mulsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulsq3"><code>__mulsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulta3"><code>__multa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmultc3"><code>__multc3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmultf3"><code>__multf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulti3"><code>__multi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuluda3"><code>__muluda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuludq3"><code>__muludq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuluha3"><code>__muluha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuluhq3"><code>__muluhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuluqq3"><code>__muluqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulusa3"><code>__mulusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulusq3"><code>__mulusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmuluta3"><code>__muluta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulvdi3"><code>__mulvdi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulvsi3"><code>__mulvsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulxc3"><code>__mulxc3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fmulxf3"><code>__mulxf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnedf2"><code>__nedf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegda2"><code>__negda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegdf2"><code>__negdf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegdi2"><code>__negdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegdq2"><code>__negdq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegha2"><code>__negha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fneghq2"><code>__neghq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegqq2"><code>__negqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegsa2"><code>__negsa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegsf2"><code>__negsf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegsq2"><code>__negsq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegta2"><code>__negta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegtf2"><code>__negtf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegti2"><code>__negti2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fneguda2"><code>__neguda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegudq2"><code>__negudq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fneguha2"><code>__neguha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fneguhq2"><code>__neguhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fneguqq2"><code>__neguqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegusa2"><code>__negusa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegusq2"><code>__negusq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fneguta2"><code>__neguta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegvdi2"><code>__negvdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegvsi2"><code>__negvsi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnegxf2"><code>__negxf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnesf2"><code>__nesf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fnetf2"><code>__netf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fparitydi2"><code>__paritydi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fparitysi2"><code>__paritysi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fparityti2"><code>__parityti2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fpopcountdi2"><code>__popcountdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fpopcountsi2"><code>__popcountsi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fpopcountti2"><code>__popcountti2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fpowidf2"><code>__powidf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fpowisf2"><code>__powisf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fpowitf2"><code>__powitf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fpowixf2"><code>__powixf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdadq"><code>__satfractdadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdaha2"><code>__satfractdaha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdahq"><code>__satfractdahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdaqq"><code>__satfractdaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdasa2"><code>__satfractdasa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdasq"><code>__satfractdasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdata2"><code>__satfractdata2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdauda"><code>__satfractdauda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdaudq"><code>__satfractdaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdauha"><code>__satfractdauha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdauhq"><code>__satfractdauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdauqq"><code>__satfractdauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdausa"><code>__satfractdausa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdausq"><code>__satfractdausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdauta"><code>__satfractdauta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfda"><code>__satfractdfda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfdq"><code>__satfractdfdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfha"><code>__satfractdfha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfhq"><code>__satfractdfhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfqq"><code>__satfractdfqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfsa"><code>__satfractdfsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfsq"><code>__satfractdfsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfta"><code>__satfractdfta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfuda"><code>__satfractdfuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfudq"><code>__satfractdfudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfuha"><code>__satfractdfuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfuhq"><code>__satfractdfuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfuqq"><code>__satfractdfuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfusa"><code>__satfractdfusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfusq"><code>__satfractdfusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdfuta"><code>__satfractdfuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdida"><code>__satfractdida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdidq"><code>__satfractdidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiha"><code>__satfractdiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdihq"><code>__satfractdihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiqq"><code>__satfractdiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdisa"><code>__satfractdisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdisq"><code>__satfractdisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdita"><code>__satfractdita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiuda"><code>__satfractdiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiudq"><code>__satfractdiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiuha"><code>__satfractdiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiuhq"><code>__satfractdiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiuqq"><code>__satfractdiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiusa"><code>__satfractdiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiusq"><code>__satfractdiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdiuta"><code>__satfractdiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqda"><code>__satfractdqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqha"><code>__satfractdqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqhq2"><code>__satfractdqhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqqq2"><code>__satfractdqqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqsa"><code>__satfractdqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqsq2"><code>__satfractdqsq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqta"><code>__satfractdqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdquda"><code>__satfractdquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqudq"><code>__satfractdqudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdquha"><code>__satfractdquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdquhq"><code>__satfractdquhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdquqq"><code>__satfractdquqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqusa"><code>__satfractdqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdqusq"><code>__satfractdqusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractdquta"><code>__satfractdquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthada2"><code>__satfracthada2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthadq"><code>__satfracthadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthahq"><code>__satfracthahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthaqq"><code>__satfracthaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthasa2"><code>__satfracthasa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthasq"><code>__satfracthasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthata2"><code>__satfracthata2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthauda"><code>__satfracthauda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthaudq"><code>__satfracthaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthauha"><code>__satfracthauha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthauhq"><code>__satfracthauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthauqq"><code>__satfracthauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthausa"><code>__satfracthausa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthausq"><code>__satfracthausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthauta"><code>__satfracthauta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthida"><code>__satfracthida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthidq"><code>__satfracthidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiha"><code>__satfracthiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthihq"><code>__satfracthihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiqq"><code>__satfracthiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthisa"><code>__satfracthisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthisq"><code>__satfracthisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthita"><code>__satfracthita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiuda"><code>__satfracthiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiudq"><code>__satfracthiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiuha"><code>__satfracthiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiuhq"><code>__satfracthiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiuqq"><code>__satfracthiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiusa"><code>__satfracthiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiusq"><code>__satfracthiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthiuta"><code>__satfracthiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqda"><code>__satfracthqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqdq2"><code>__satfracthqdq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqha"><code>__satfracthqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqqq2"><code>__satfracthqqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqsa"><code>__satfracthqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqsq2"><code>__satfracthqsq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqta"><code>__satfracthqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthquda"><code>__satfracthquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqudq"><code>__satfracthqudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthquha"><code>__satfracthquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthquhq"><code>__satfracthquhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthquqq"><code>__satfracthquqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqusa"><code>__satfracthqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthqusq"><code>__satfracthqusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracthquta"><code>__satfracthquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqida"><code>__satfractqida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqidq"><code>__satfractqidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiha"><code>__satfractqiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqihq"><code>__satfractqihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiqq"><code>__satfractqiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqisa"><code>__satfractqisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqisq"><code>__satfractqisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqita"><code>__satfractqita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiuda"><code>__satfractqiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiudq"><code>__satfractqiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiuha"><code>__satfractqiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiuhq"><code>__satfractqiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiuqq"><code>__satfractqiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiusa"><code>__satfractqiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiusq"><code>__satfractqiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqiuta"><code>__satfractqiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqda"><code>__satfractqqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqdq2"><code>__satfractqqdq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqha"><code>__satfractqqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqhq2"><code>__satfractqqhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqsa"><code>__satfractqqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqsq2"><code>__satfractqqsq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqta"><code>__satfractqqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqquda"><code>__satfractqquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqudq"><code>__satfractqqudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqquha"><code>__satfractqquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqquhq"><code>__satfractqquhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqquqq"><code>__satfractqquqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqusa"><code>__satfractqqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqqusq"><code>__satfractqqusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractqquta"><code>__satfractqquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsada2"><code>__satfractsada2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsadq"><code>__satfractsadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsaha2"><code>__satfractsaha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsahq"><code>__satfractsahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsaqq"><code>__satfractsaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsasq"><code>__satfractsasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsata2"><code>__satfractsata2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsauda"><code>__satfractsauda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsaudq"><code>__satfractsaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsauha"><code>__satfractsauha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsauhq"><code>__satfractsauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsauqq"><code>__satfractsauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsausa"><code>__satfractsausa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsausq"><code>__satfractsausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsauta"><code>__satfractsauta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfda"><code>__satfractsfda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfdq"><code>__satfractsfdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfha"><code>__satfractsfha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfhq"><code>__satfractsfhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfqq"><code>__satfractsfqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfsa"><code>__satfractsfsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfsq"><code>__satfractsfsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfta"><code>__satfractsfta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfuda"><code>__satfractsfuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfudq"><code>__satfractsfudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfuha"><code>__satfractsfuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfuhq"><code>__satfractsfuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfuqq"><code>__satfractsfuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfusa"><code>__satfractsfusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfusq"><code>__satfractsfusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsfuta"><code>__satfractsfuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsida"><code>__satfractsida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsidq"><code>__satfractsidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiha"><code>__satfractsiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsihq"><code>__satfractsihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiqq"><code>__satfractsiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsisa"><code>__satfractsisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsisq"><code>__satfractsisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsita"><code>__satfractsita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiuda"><code>__satfractsiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiudq"><code>__satfractsiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiuha"><code>__satfractsiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiuhq"><code>__satfractsiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiuqq"><code>__satfractsiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiusa"><code>__satfractsiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiusq"><code>__satfractsiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsiuta"><code>__satfractsiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqda"><code>__satfractsqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqdq2"><code>__satfractsqdq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqha"><code>__satfractsqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqhq2"><code>__satfractsqhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqqq2"><code>__satfractsqqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqsa"><code>__satfractsqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqta"><code>__satfractsqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsquda"><code>__satfractsquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqudq"><code>__satfractsqudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsquha"><code>__satfractsquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsquhq"><code>__satfractsquhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsquqq"><code>__satfractsquqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqusa"><code>__satfractsqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsqusq"><code>__satfractsqusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractsquta"><code>__satfractsquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttada2"><code>__satfracttada2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttadq"><code>__satfracttadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttaha2"><code>__satfracttaha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttahq"><code>__satfracttahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttaqq"><code>__satfracttaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttasa2"><code>__satfracttasa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttasq"><code>__satfracttasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttauda"><code>__satfracttauda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttaudq"><code>__satfracttaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttauha"><code>__satfracttauha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttauhq"><code>__satfracttauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttauqq"><code>__satfracttauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttausa"><code>__satfracttausa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttausq"><code>__satfracttausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttauta"><code>__satfracttauta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttida"><code>__satfracttida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttidq"><code>__satfracttidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiha"><code>__satfracttiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttihq"><code>__satfracttihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiqq"><code>__satfracttiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttisa"><code>__satfracttisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttisq"><code>__satfracttisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttita"><code>__satfracttita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiuda"><code>__satfracttiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiudq"><code>__satfracttiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiuha"><code>__satfracttiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiuhq"><code>__satfracttiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiuqq"><code>__satfracttiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiusa"><code>__satfracttiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiusq"><code>__satfracttiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfracttiuta"><code>__satfracttiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudada"><code>__satfractudada</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudadq"><code>__satfractudadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudaha"><code>__satfractudaha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudahq"><code>__satfractudahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudaqq"><code>__satfractudaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudasa"><code>__satfractudasa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudasq"><code>__satfractudasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudata"><code>__satfractudata</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudaudq"><code>__satfractudaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudauha2"><code>__satfractudauha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudauhq"><code>__satfractudauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudauqq"><code>__satfractudauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudausa2"><code>__satfractudausa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudausq"><code>__satfractudausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudauta2"><code>__satfractudauta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqda"><code>__satfractudqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqdq"><code>__satfractudqdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqha"><code>__satfractudqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqhq"><code>__satfractudqhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqqq"><code>__satfractudqqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqsa"><code>__satfractudqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqsq"><code>__satfractudqsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqta"><code>__satfractudqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudquda"><code>__satfractudquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudquha"><code>__satfractudquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudquhq2"><code>__satfractudquhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudquqq2"><code>__satfractudquqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqusa"><code>__satfractudqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudqusq2"><code>__satfractudqusq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractudquta"><code>__satfractudquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhada"><code>__satfractuhada</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhadq"><code>__satfractuhadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhaha"><code>__satfractuhaha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhahq"><code>__satfractuhahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhaqq"><code>__satfractuhaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhasa"><code>__satfractuhasa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhasq"><code>__satfractuhasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhata"><code>__satfractuhata</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhauda2"><code>__satfractuhauda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhaudq"><code>__satfractuhaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhauhq"><code>__satfractuhauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhauqq"><code>__satfractuhauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhausa2"><code>__satfractuhausa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhausq"><code>__satfractuhausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhauta2"><code>__satfractuhauta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqda"><code>__satfractuhqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqdq"><code>__satfractuhqdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqha"><code>__satfractuhqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqhq"><code>__satfractuhqhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqqq"><code>__satfractuhqqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqsa"><code>__satfractuhqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqsq"><code>__satfractuhqsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqta"><code>__satfractuhqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhquda"><code>__satfractuhquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqudq2"><code>__satfractuhqudq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhquha"><code>__satfractuhquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhquqq2"><code>__satfractuhquqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqusa"><code>__satfractuhqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhqusq2"><code>__satfractuhqusq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuhquta"><code>__satfractuhquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdida"><code>__satfractunsdida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdidq"><code>__satfractunsdidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiha"><code>__satfractunsdiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdihq"><code>__satfractunsdihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiqq"><code>__satfractunsdiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdisa"><code>__satfractunsdisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdisq"><code>__satfractunsdisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdita"><code>__satfractunsdita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiuda"><code>__satfractunsdiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiudq"><code>__satfractunsdiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiuha"><code>__satfractunsdiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiuhq"><code>__satfractunsdiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiuqq"><code>__satfractunsdiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiusa"><code>__satfractunsdiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiusq"><code>__satfractunsdiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsdiuta"><code>__satfractunsdiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshida"><code>__satfractunshida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshidq"><code>__satfractunshidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiha"><code>__satfractunshiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshihq"><code>__satfractunshihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiqq"><code>__satfractunshiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshisa"><code>__satfractunshisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshisq"><code>__satfractunshisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshita"><code>__satfractunshita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiuda"><code>__satfractunshiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiudq"><code>__satfractunshiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiuha"><code>__satfractunshiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiuhq"><code>__satfractunshiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiuqq"><code>__satfractunshiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiusa"><code>__satfractunshiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiusq"><code>__satfractunshiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunshiuta"><code>__satfractunshiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqida"><code>__satfractunsqida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqidq"><code>__satfractunsqidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiha"><code>__satfractunsqiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqihq"><code>__satfractunsqihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiqq"><code>__satfractunsqiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqisa"><code>__satfractunsqisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqisq"><code>__satfractunsqisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqita"><code>__satfractunsqita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiuda"><code>__satfractunsqiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiudq"><code>__satfractunsqiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiuha"><code>__satfractunsqiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiuhq"><code>__satfractunsqiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiuqq"><code>__satfractunsqiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiusa"><code>__satfractunsqiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiusq"><code>__satfractunsqiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunsqiuta"><code>__satfractunsqiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssida"><code>__satfractunssida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssidq"><code>__satfractunssidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiha"><code>__satfractunssiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssihq"><code>__satfractunssihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiqq"><code>__satfractunssiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssisa"><code>__satfractunssisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssisq"><code>__satfractunssisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssita"><code>__satfractunssita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiuda"><code>__satfractunssiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiudq"><code>__satfractunssiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiuha"><code>__satfractunssiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiuhq"><code>__satfractunssiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiuqq"><code>__satfractunssiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiusa"><code>__satfractunssiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiusq"><code>__satfractunssiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunssiuta"><code>__satfractunssiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstida"><code>__satfractunstida</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstidq"><code>__satfractunstidq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiha"><code>__satfractunstiha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstihq"><code>__satfractunstihq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiqq"><code>__satfractunstiqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstisa"><code>__satfractunstisa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstisq"><code>__satfractunstisq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstita"><code>__satfractunstita</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiuda"><code>__satfractunstiuda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiudq"><code>__satfractunstiudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiuha"><code>__satfractunstiuha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiuhq"><code>__satfractunstiuhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiuqq"><code>__satfractunstiuqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiusa"><code>__satfractunstiusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiusq"><code>__satfractunstiusq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractunstiuta"><code>__satfractunstiuta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqda"><code>__satfractuqqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqdq"><code>__satfractuqqdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqha"><code>__satfractuqqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqhq"><code>__satfractuqqhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqqq"><code>__satfractuqqqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqsa"><code>__satfractuqqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqsq"><code>__satfractuqqsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqta"><code>__satfractuqqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqquda"><code>__satfractuqquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqudq2"><code>__satfractuqqudq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqquha"><code>__satfractuqquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqquhq2"><code>__satfractuqquhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqusa"><code>__satfractuqqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqqusq2"><code>__satfractuqqusq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractuqquta"><code>__satfractuqquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusada"><code>__satfractusada</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusadq"><code>__satfractusadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusaha"><code>__satfractusaha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusahq"><code>__satfractusahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusaqq"><code>__satfractusaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusasa"><code>__satfractusasa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusasq"><code>__satfractusasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusata"><code>__satfractusata</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusauda2"><code>__satfractusauda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusaudq"><code>__satfractusaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusauha2"><code>__satfractusauha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusauhq"><code>__satfractusauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusauqq"><code>__satfractusauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusausq"><code>__satfractusausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusauta2"><code>__satfractusauta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqda"><code>__satfractusqda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqdq"><code>__satfractusqdq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqha"><code>__satfractusqha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqhq"><code>__satfractusqhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqqq"><code>__satfractusqqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqsa"><code>__satfractusqsa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqsq"><code>__satfractusqsq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqta"><code>__satfractusqta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusquda"><code>__satfractusquda</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqudq2"><code>__satfractusqudq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusquha"><code>__satfractusquha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusquhq2"><code>__satfractusquhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusquqq2"><code>__satfractusquqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusqusa"><code>__satfractusqusa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractusquta"><code>__satfractusquta</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutada"><code>__satfractutada</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutadq"><code>__satfractutadq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutaha"><code>__satfractutaha</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutahq"><code>__satfractutahq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutaqq"><code>__satfractutaqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutasa"><code>__satfractutasa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutasq"><code>__satfractutasq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutata"><code>__satfractutata</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutauda2"><code>__satfractutauda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutaudq"><code>__satfractutaudq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutauha2"><code>__satfractutauha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutauhq"><code>__satfractutauhq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutauqq"><code>__satfractutauqq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutausa2"><code>__satfractutausa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsatfractutausq"><code>__satfractutausq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsplitstack_005ffind"><code>__splitstack_find</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Miscellaneous-routines">Miscellaneous routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssaddda3"><code>__ssaddda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssadddq3"><code>__ssadddq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssaddha3"><code>__ssaddha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssaddhq3"><code>__ssaddhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssaddqq3"><code>__ssaddqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssaddsa3"><code>__ssaddsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssaddsq3"><code>__ssaddsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssaddta3"><code>__ssaddta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssashlda3"><code>__ssashlda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssashldq3"><code>__ssashldq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssashlha3"><code>__ssashlha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssashlhq3"><code>__ssashlhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssashlsa3"><code>__ssashlsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssashlsq3"><code>__ssashlsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssashlta3"><code>__ssashlta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssdivda3"><code>__ssdivda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssdivdq3"><code>__ssdivdq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssdivha3"><code>__ssdivha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssdivhq3"><code>__ssdivhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssdivqq3"><code>__ssdivqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssdivsa3"><code>__ssdivsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssdivsq3"><code>__ssdivsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssdivta3"><code>__ssdivta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssmulda3"><code>__ssmulda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssmuldq3"><code>__ssmuldq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssmulha3"><code>__ssmulha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssmulhq3"><code>__ssmulhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssmulqq3"><code>__ssmulqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssmulsa3"><code>__ssmulsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssmulsq3"><code>__ssmulsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssmulta3"><code>__ssmulta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssnegda2"><code>__ssnegda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssnegdq2"><code>__ssnegdq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssnegha2"><code>__ssnegha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssneghq2"><code>__ssneghq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssnegqq2"><code>__ssnegqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssnegsa2"><code>__ssnegsa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssnegsq2"><code>__ssnegsq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fssnegta2"><code>__ssnegta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsssubda3"><code>__sssubda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsssubdq3"><code>__sssubdq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsssubha3"><code>__sssubha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsssubhq3"><code>__sssubhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsssubqq3"><code>__sssubqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsssubsa3"><code>__sssubsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsssubsq3"><code>__sssubsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsssubta3"><code>__sssubta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubda3"><code>__subda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubdf3"><code>__subdf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubdq3"><code>__subdq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubha3"><code>__subha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubhq3"><code>__subhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubqq3"><code>__subqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubsa3"><code>__subsa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubsf3"><code>__subsf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubsq3"><code>__subsq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubta3"><code>__subta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubtf3"><code>__subtf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubuda3"><code>__subuda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubudq3"><code>__subudq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubuha3"><code>__subuha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubuhq3"><code>__subuhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubuqq3"><code>__subuqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubusa3"><code>__subusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubusq3"><code>__subusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubuta3"><code>__subuta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubvdi3"><code>__subvdi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubvsi3"><code>__subvsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fsubxf3"><code>__subxf3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ftruncdfsf2"><code>__truncdfsf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ftrunctfdf2"><code>__trunctfdf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ftrunctfsf2"><code>__trunctfsf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ftruncxfdf2"><code>__truncxfdf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005ftruncxfsf2"><code>__truncxfsf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fucmpdi2"><code>__ucmpdi2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fucmpti2"><code>__ucmpti2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivdi3"><code>__udivdi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivmoddi4"><code>__udivmoddi4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivmodti4"><code>__udivmodti4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivsi3"><code>__udivsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivti3"><code>__udivti3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivuda3"><code>__udivuda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivudq3"><code>__udivudq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivuha3"><code>__udivuha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivuhq3"><code>__udivuhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivuqq3"><code>__udivuqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivusa3"><code>__udivusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivusq3"><code>__udivusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fudivuta3"><code>__udivuta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fumoddi3"><code>__umoddi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fumodsi3"><code>__umodsi3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fumodti3"><code>__umodti3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Integer-library-routines">Integer library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005funorddf2"><code>__unorddf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005funordsf2"><code>__unordsf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005funordtf2"><code>__unordtf2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusadduda3"><code>__usadduda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusaddudq3"><code>__usaddudq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusadduha3"><code>__usadduha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusadduhq3"><code>__usadduhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusadduqq3"><code>__usadduqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusaddusa3"><code>__usaddusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusaddusq3"><code>__usaddusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusadduta3"><code>__usadduta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusashluda3"><code>__usashluda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusashludq3"><code>__usashludq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusashluha3"><code>__usashluha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusashluhq3"><code>__usashluhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusashluqq3"><code>__usashluqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusashlusa3"><code>__usashlusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusashlusq3"><code>__usashlusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusashluta3"><code>__usashluta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusdivuda3"><code>__usdivuda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusdivudq3"><code>__usdivudq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusdivuha3"><code>__usdivuha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusdivuhq3"><code>__usdivuhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusdivuqq3"><code>__usdivuqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusdivusa3"><code>__usdivusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusdivusq3"><code>__usdivusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusdivuta3"><code>__usdivuta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusmuluda3"><code>__usmuluda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusmuludq3"><code>__usmuludq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusmuluha3"><code>__usmuluha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusmuluhq3"><code>__usmuluhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusmuluqq3"><code>__usmuluqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusmulusa3"><code>__usmulusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusmulusq3"><code>__usmulusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusmuluta3"><code>__usmuluta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusneguda2"><code>__usneguda2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusnegudq2"><code>__usnegudq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusneguha2"><code>__usneguha2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusneguhq2"><code>__usneguhq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusneguqq2"><code>__usneguqq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusnegusa2"><code>__usnegusa2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusnegusq2"><code>__usnegusq2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fusneguta2"><code>__usneguta2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fussubuda3"><code>__ussubuda3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fussubudq3"><code>__ussubudq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fussubuha3"><code>__ussubuha3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fussubuhq3"><code>__ussubuhq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fussubuqq3"><code>__ussubuqq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fussubusa3"><code>__ussubusa3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fussubusq3"><code>__ussubusq3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-_005f_005fussubuta3"><code>__ussubuta3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-A">A</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-abort"><code>abort</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Portability">Portability</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-abs"><code>abs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-abs-and-attributes"><code>abs</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-absence_005fset"><code>absence_set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-absm2-instruction-pattern"><code>abs<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-absolute-value">absolute value</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ABS_005fEXPR"><code>ABS_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-access-to-operands">access to operands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-access-to-special-operands">access to special operands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-accessors">accessors</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ACCUMULATE_005fOUTGOING_005fARGS"><code>ACCUMULATE_OUTGOING_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ACCUMULATE_005fOUTGOING_005fARGS-and-stack-frames"><code>ACCUMULATE_OUTGOING_ARGS</code> and stack frames</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ACCUM_005fTYPE_005fSIZE"><code>ACCUM_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ADA_005fLONG_005fTYPE_005fSIZE"><code>ADA_LONG_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Adding-a-new-GIMPLE-statement-code">Adding a new GIMPLE statement code</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Adding-a-new-GIMPLE-statement-code">Adding a new GIMPLE statement code</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ADDITIONAL_005fREGISTER_005fNAMES"><code>ADDITIONAL_REGISTER_NAMES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-addm3-instruction-pattern"><code>add<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-addmodecc-instruction-pattern"><code>add<var>mode</var>cc</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-address-constraints">address constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-addressing-modes">addressing modes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-address_005foperand"><code>address_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-address_005foperand-1"><code>address_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-addr_005fdiff_005fvec"><code>addr_diff_vec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-addr_005fdiff_005fvec_002c-length-of"><code>addr_diff_vec</code>, length of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Lengths">Insn Lengths</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ADDR_005fEXPR"><code>ADDR_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-References">Storage References</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-addr_005fvec"><code>addr_vec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-addr_005fvec_002c-length-of"><code>addr_vec</code>, length of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Lengths">Insn Lengths</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ADJUST_005fFIELD_005fALIGN"><code>ADJUST_FIELD_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ADJUST_005fINSN_005fLENGTH"><code>ADJUST_INSN_LENGTH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Lengths">Insn Lengths</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ADJUST_005fREG_005fALLOC_005fORDER"><code>ADJUST_REG_ALLOC_ORDER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Allocation-Order">Allocation Order</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-aggregates-as-return-values">aggregates as return values</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-alias">alias</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alias-analysis">Alias analysis</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-allocate_005fstack-instruction-pattern"><code>allocate_stack</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ALL_005fREGS"><code>ALL_REGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-alternate-entry-points">alternate entry points</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-anchored-addresses">anchored addresses</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Anchored-Addresses">Anchored Addresses</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-and"><code>and</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-and-and-attributes"><code>and</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-and_002c-canonicalization-of"><code>and</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-andm3-instruction-pattern"><code>and<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-annotations">annotations</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Annotations">Annotations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-APPLY_005fRESULT_005fSIZE"><code>APPLY_RESULT_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ARGS_005fGROW_005fDOWNWARD"><code>ARGS_GROW_DOWNWARD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-argument-passing">argument passing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-arguments-in-registers">arguments in registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-arguments-on-stack">arguments on stack</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ARG_005fPOINTER_005fCFA_005fOFFSET"><code>ARG_POINTER_CFA_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ARG_005fPOINTER_005fREGNUM"><code>ARG_POINTER_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ARG_005fPOINTER_005fREGNUM-and-virtual-registers"><code>ARG_POINTER_REGNUM</code> and virtual registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-arg_005fpointer_005frtx"><code>arg_pointer_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-arithmetic-library">arithmetic library</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-arithmetic-shift">arithmetic shift</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-arithmetic-shift-with-signed-saturation">arithmetic shift with signed saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-arithmetic-shift-with-unsigned-saturation">arithmetic shift with unsigned saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-arithmetic_002c-in-RTL">arithmetic, in RTL</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ARITHMETIC_005fTYPE_005fP"><code>ARITHMETIC_TYPE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-array">array</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ARRAY_005fRANGE_005fREF"><code>ARRAY_RANGE_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-References">Storage References</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ARRAY_005fREF"><code>ARRAY_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-References">Storage References</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ARRAY_005fTYPE"><code>ARRAY_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ashift"><code>ashift</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ashift-and-attributes"><code>ashift</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ashiftrt"><code>ashiftrt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ashiftrt-and-attributes"><code>ashiftrt</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ashlm3-instruction-pattern"><code>ashl<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ashrm3-instruction-pattern"><code>ashr<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fAPP_005fOFF"><code>ASM_APP_OFF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fAPP_005fON"><code>ASM_APP_ON</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fCOMMENT_005fSTART"><code>ASM_COMMENT_START</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fDECLARE_005fFUNCTION_005fNAME"><code>ASM_DECLARE_FUNCTION_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fDECLARE_005fFUNCTION_005fSIZE"><code>ASM_DECLARE_FUNCTION_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fDECLARE_005fOBJECT_005fNAME"><code>ASM_DECLARE_OBJECT_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fDECLARE_005fREGISTER_005fGLOBAL"><code>ASM_DECLARE_REGISTER_GLOBAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fFINAL_005fSPEC"><code>ASM_FINAL_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fFINISH_005fDECLARE_005fOBJECT"><code>ASM_FINISH_DECLARE_OBJECT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fFORMAT_005fPRIVATE_005fNAME"><code>ASM_FORMAT_PRIVATE_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-asm_005ffprintf"><code>asm_fprintf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fFPRINTF_005fEXTENSIONS"><code>ASM_FPRINTF_EXTENSIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fGENERATE_005fINTERNAL_005fLABEL"><code>ASM_GENERATE_INTERNAL_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-asm_005finput"><code>asm_input</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-asm_005finput-and-_002fv"><code>asm_input</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fMAYBE_005fOUTPUT_005fENCODED_005fADDR_005fRTX"><code>ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-asm_005fnoperands"><code>asm_noperands</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fNO_005fSKIP_005fIN_005fTEXT"><code>ASM_NO_SKIP_IN_TEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-asm_005foperands-and-_002fv"><code>asm_operands</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-asm_005foperands_002c-RTL-sharing"><code>asm_operands</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-asm_005foperands_002c-usage"><code>asm_operands</code>, usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Assembler">Assembler</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fADDR_005fDIFF_005fELT"><code>ASM_OUTPUT_ADDR_DIFF_ELT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fADDR_005fVEC_005fELT"><code>ASM_OUTPUT_ADDR_VEC_ELT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fALIGN"><code>ASM_OUTPUT_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fALIGNED_005fBSS"><code>ASM_OUTPUT_ALIGNED_BSS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Uninitialized-Data">Uninitialized Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fALIGNED_005fCOMMON"><code>ASM_OUTPUT_ALIGNED_COMMON</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Uninitialized-Data">Uninitialized Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fALIGNED_005fDECL_005fCOMMON"><code>ASM_OUTPUT_ALIGNED_DECL_COMMON</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Uninitialized-Data">Uninitialized Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fALIGNED_005fDECL_005fLOCAL"><code>ASM_OUTPUT_ALIGNED_DECL_LOCAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Uninitialized-Data">Uninitialized Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fALIGNED_005fLOCAL"><code>ASM_OUTPUT_ALIGNED_LOCAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Uninitialized-Data">Uninitialized Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fALIGN_005fWITH_005fNOP"><code>ASM_OUTPUT_ALIGN_WITH_NOP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fASCII"><code>ASM_OUTPUT_ASCII</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fCASE_005fEND"><code>ASM_OUTPUT_CASE_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fCASE_005fLABEL"><code>ASM_OUTPUT_CASE_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fCOMMON"><code>ASM_OUTPUT_COMMON</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Uninitialized-Data">Uninitialized Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fDEBUG_005fLABEL"><code>ASM_OUTPUT_DEBUG_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fDEF"><code>ASM_OUTPUT_DEF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fDEF_005fFROM_005fDECLS"><code>ASM_OUTPUT_DEF_FROM_DECLS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fDWARF_005fDELTA"><code>ASM_OUTPUT_DWARF_DELTA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fDWARF_005fOFFSET"><code>ASM_OUTPUT_DWARF_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fDWARF_005fPCREL"><code>ASM_OUTPUT_DWARF_PCREL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fDWARF_005fTABLE_005fREF"><code>ASM_OUTPUT_DWARF_TABLE_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fDWARF_005fVMS_005fDELTA"><code>ASM_OUTPUT_DWARF_VMS_DELTA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fEXTERNAL"><code>ASM_OUTPUT_EXTERNAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fFDESC"><code>ASM_OUTPUT_FDESC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fFUNCTION_005fLABEL"><code>ASM_OUTPUT_FUNCTION_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fINTERNAL_005fLABEL"><code>ASM_OUTPUT_INTERNAL_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fLABEL"><code>ASM_OUTPUT_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fLABELREF"><code>ASM_OUTPUT_LABELREF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fLABEL_005fREF"><code>ASM_OUTPUT_LABEL_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fLOCAL"><code>ASM_OUTPUT_LOCAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Uninitialized-Data">Uninitialized Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fMAX_005fSKIP_005fALIGN"><code>ASM_OUTPUT_MAX_SKIP_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fMEASURED_005fSIZE"><code>ASM_OUTPUT_MEASURED_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fOPCODE"><code>ASM_OUTPUT_OPCODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fPOOL_005fEPILOGUE"><code>ASM_OUTPUT_POOL_EPILOGUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fPOOL_005fPROLOGUE"><code>ASM_OUTPUT_POOL_PROLOGUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fREG_005fPOP"><code>ASM_OUTPUT_REG_POP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fREG_005fPUSH"><code>ASM_OUTPUT_REG_PUSH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fSIZE_005fDIRECTIVE"><code>ASM_OUTPUT_SIZE_DIRECTIVE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fSKIP"><code>ASM_OUTPUT_SKIP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fSOURCE_005fFILENAME"><code>ASM_OUTPUT_SOURCE_FILENAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fSPECIAL_005fPOOL_005fENTRY"><code>ASM_OUTPUT_SPECIAL_POOL_ENTRY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fSYMBOL_005fREF"><code>ASM_OUTPUT_SYMBOL_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fTYPE_005fDIRECTIVE"><code>ASM_OUTPUT_TYPE_DIRECTIVE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fWEAKREF"><code>ASM_OUTPUT_WEAKREF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fOUTPUT_005fWEAK_005fALIAS"><code>ASM_OUTPUT_WEAK_ALIAS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fPREFERRED_005fEH_005fDATA_005fFORMAT"><code>ASM_PREFERRED_EH_DATA_FORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fSPEC"><code>ASM_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fSTABD_005fOP"><code>ASM_STABD_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fSTABN_005fOP"><code>ASM_STABN_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fSTABS_005fOP"><code>ASM_STABS_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fWEAKEN_005fDECL"><code>ASM_WEAKEN_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASM_005fWEAKEN_005fLABEL"><code>ASM_WEAKEN_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-assembler-format">assembler format</a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-assembler-instructions-in-RTL">assembler instructions in RTL</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Assembler">Assembler</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASSEMBLER_005fDIALECT"><code>ASSEMBLER_DIALECT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-assemble_005fname"><code>assemble_name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-assemble_005fname_005fraw"><code>assemble_name_raw</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-assigning-attribute-values-to-insns">assigning attribute values to insns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tagging-Insns">Tagging Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ASSUME_005fEXTENDED_005fUNWIND_005fCONTEXT"><code>ASSUME_EXTENDED_UNWIND_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-asterisk-in-template">asterisk in template</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Statement">Output Statement</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-AS_005fNEEDS_005fDASH_005fFOR_005fPIPED_005fINPUT"><code>AS_NEEDS_DASH_FOR_PIPED_INPUT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atan2m3-instruction-pattern"><code>atan2<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic"><code>atomic</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005faddmode-instruction-pattern"><code>atomic_add<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fadd_005ffetchmode-instruction-pattern"><code>atomic_add_fetch<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fandmode-instruction-pattern"><code>atomic_and<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fand_005ffetchmode-instruction-pattern"><code>atomic_and_fetch<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fcompare_005fand_005fswapmode-instruction-pattern"><code>atomic_compare_and_swap<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fexchangemode-instruction-pattern"><code>atomic_exchange<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005ffetch_005faddmode-instruction-pattern"><code>atomic_fetch_add<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005ffetch_005fandmode-instruction-pattern"><code>atomic_fetch_and<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005ffetch_005fnandmode-instruction-pattern"><code>atomic_fetch_nand<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005ffetch_005formode-instruction-pattern"><code>atomic_fetch_or<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005ffetch_005fsubmode-instruction-pattern"><code>atomic_fetch_sub<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005ffetch_005fxormode-instruction-pattern"><code>atomic_fetch_xor<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005floadmode-instruction-pattern"><code>atomic_load<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fnandmode-instruction-pattern"><code>atomic_nand<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fnand_005ffetchmode-instruction-pattern"><code>atomic_nand_fetch<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005formode-instruction-pattern"><code>atomic_or<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005for_005ffetchmode-instruction-pattern"><code>atomic_or_fetch<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fstoremode-instruction-pattern"><code>atomic_store<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fsubmode-instruction-pattern"><code>atomic_sub<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fsub_005ffetchmode-instruction-pattern"><code>atomic_sub_fetch<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005ftest_005fand_005fset-instruction-pattern"><code>atomic_test_and_set</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fxormode-instruction-pattern"><code>atomic_xor<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-atomic_005fxor_005ffetchmode-instruction-pattern"><code>atomic_xor_fetch<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-attr"><code>attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-attr-1"><code>attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tagging-Insns">Tagging Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-attribute-expressions">attribute expressions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-attribute-specifications">attribute specifications</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Attr-Example">Attr Example</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-attribute-specifications-example">attribute specifications example</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Attr-Example">Attr Example</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-attributes">attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Attributes">Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-attributes_002c-defining">attributes, defining</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Defining-Attributes">Defining Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-attributes_002c-target_002dspecific">attributes, target-specific</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ATTRIBUTE_005fALIGNED_005fVALUE"><code>ATTRIBUTE_ALIGNED_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-attr_005fflag"><code>attr_flag</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-autoincrement-addressing_002c-availability">autoincrement addressing, availability</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Portability">Portability</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-autoincrement_002fdecrement-addressing">autoincrement/decrement addressing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-automata_005foption"><code>automata_option</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-automaton-based-pipeline-description">automaton based pipeline description</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-automaton-based-pipeline-description-1">automaton based pipeline description</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-automaton-based-scheduler">automaton based scheduler</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-AVOID_005fCCMODE_005fCOPIES"><code>AVOID_CCMODE_COPIES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-B">B</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-backslash">backslash</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Template">Output Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-barrier"><code>barrier</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-barrier-and-_002ff"><code>barrier</code> and &lsquo;<samp>/f</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-barrier-and-_002fv"><code>barrier</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BASE_005fREG_005fCLASS"><code>BASE_REG_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-basic-block">basic block</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Basic-Statements">Basic Statements</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Statements">Basic Statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-basic_002dblock_002eh"><code>basic-block.h</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Control-Flow">Control Flow</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-basic_005fblock"><code>basic_block</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BASIC_005fBLOCK"><code>BASIC_BLOCK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BB_005fHEAD_002c-BB_005fEND"><code>BB_HEAD, BB_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-bb_005fseq"><code>bb_seq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BIGGEST_005fALIGNMENT"><code>BIGGEST_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BIGGEST_005fFIELD_005fALIGNMENT"><code>BIGGEST_FIELD_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BImode"><code>BImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BIND_005fEXPR"><code>BIND_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BINFO_005fTYPE"><code>BINFO_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-bit_002dfields">bit-fields</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bit_002dFields">Bit-Fields</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BITFIELD_005fNBYTES_005fLIMITED"><code>BITFIELD_NBYTES_LIMITED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BITS_005fBIG_005fENDIAN"><code>BITS_BIG_ENDIAN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BITS_005fBIG_005fENDIAN_002c-effect-on-sign_005fextract"><code>BITS_BIG_ENDIAN</code>, effect on <code>sign_extract</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bit_002dFields">Bit-Fields</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BITS_005fPER_005fUNIT"><code>BITS_PER_UNIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BITS_005fPER_005fWORD"><code>BITS_PER_WORD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-bitwise-complement">bitwise complement</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-bitwise-exclusive_002dor">bitwise exclusive-or</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-bitwise-inclusive_002dor">bitwise inclusive-or</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-bitwise-logical_002dand">bitwise logical-and</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BIT_005fAND_005fEXPR"><code>BIT_AND_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BIT_005fIOR_005fEXPR"><code>BIT_IOR_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BIT_005fNOT_005fEXPR"><code>BIT_NOT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BIT_005fXOR_005fEXPR"><code>BIT_XOR_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BLKmode"><code>BLKmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BLKmode_002c-and-function-return-values"><code>BLKmode</code>, and function return values</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Calls">Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-blockage-instruction-pattern"><code>blockage</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Blocks">Blocks</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Blocks">Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BLOCK_005fFOR_005fINSN_002c-gimple_005fbb"><code>BLOCK_FOR_INSN, gimple_bb</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BLOCK_005fREG_005fPADDING"><code>BLOCK_REG_PADDING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-bool"><code>bool</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BOOLEAN_005fTYPE"><code>BOOLEAN_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BOOL_005fTYPE_005fSIZE"><code>BOOL_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-branch-prediction">branch prediction</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BRANCH_005fCOST"><code>BRANCH_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-break_005fout_005fmemory_005frefs"><code>break_out_memory_refs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BREAK_005fSTMT"><code>BREAK_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BSS_005fSECTION_005fASM_005fOP"><code>BSS_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-bswap"><code>bswap</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-bswapm2-instruction-pattern"><code>bswap<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-btruncm2-instruction-pattern"><code>btrunc<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-build0"><code>build0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-build1"><code>build1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-build2"><code>build2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-build3"><code>build3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-build4"><code>build4</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-build5"><code>build5</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-build6"><code>build6</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-builtin_005flongjmp-instruction-pattern"><code>builtin_longjmp</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-builtin_005fsetjmp_005freceiver-instruction-pattern"><code>builtin_setjmp_receiver</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-builtin_005fsetjmp_005fsetup-instruction-pattern"><code>builtin_setjmp_setup</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BYTES_005fBIG_005fENDIAN"><code>BYTES_BIG_ENDIAN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-BYTES_005fBIG_005fENDIAN_002c-effect-on-subreg"><code>BYTES_BIG_ENDIAN</code>, effect on <code>subreg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-byte_005fmode"><code>byte_mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-C">C</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-C-statements-for-assembler-output">C statements for assembler output</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Statement">Output Statement</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-C99-math-functions_002c-implicit-usage">C99 math functions, implicit usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call"><code>call</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call-1"><code>call</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call-instruction-pattern"><code>call</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call-usage"><code>call</code> usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Calls">Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002c-in-call_005finsn"><code>call</code>, in <code>call_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002c-in-mem"><code>call</code>, in <code>mem</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002dclobbered-register">call-clobbered register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002dclobbered-register-1">call-clobbered register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002dclobbered-register-2">call-clobbered register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002dsaved-register">call-saved register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002dsaved-register-1">call-saved register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002dsaved-register-2">call-saved register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002dused-register">call-used register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002dused-register-1">call-used register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_002dused-register-2">call-used register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CALLER_005fSAVE_005fPROFITABLE"><code>CALLER_SAVE_PROFITABLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Caller-Saves">Caller Saves</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-calling-conventions">calling conventions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-and-Calling">Stack and Calling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-calling-functions-in-RTL">calling functions in RTL</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Calls">Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CALL_005fEXPR"><code>CALL_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn"><code>call_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002fc"><code>call_insn</code> and &lsquo;<samp>/c</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002ff"><code>call_insn</code> and &lsquo;<samp>/f</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002fi"><code>call_insn</code> and &lsquo;<samp>/i</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002fj"><code>call_insn</code> and &lsquo;<samp>/j</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002fs"><code>call_insn</code> and &lsquo;<samp>/s</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002fs-1"><code>call_insn</code> and &lsquo;<samp>/s</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002fu"><code>call_insn</code> and &lsquo;<samp>/u</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002fu-1"><code>call_insn</code> and &lsquo;<samp>/u</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002fu-or-_002fi"><code>call_insn</code> and &lsquo;<samp>/u</samp>&rsquo; or &lsquo;<samp>/i</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005finsn-and-_002fv"><code>call_insn</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CALL_005fINSN_005fFUNCTION_005fUSAGE"><code>CALL_INSN_FUNCTION_USAGE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005fpop-instruction-pattern"><code>call_pop</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CALL_005fPOPS_005fARGS"><code>CALL_POPS_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CALL_005fREALLY_005fUSED_005fREGISTERS"><code>CALL_REALLY_USED_REGISTERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CALL_005fUSED_005fREGISTERS"><code>CALL_USED_REGISTERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005fused_005fregs"><code>call_used_regs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005fvalue-instruction-pattern"><code>call_value</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-call_005fvalue_005fpop-instruction-pattern"><code>call_value_pop</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-canadian">canadian</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Configure-Terms">Configure Terms</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CANNOT_005fCHANGE_005fMODE_005fCLASS"><code>CANNOT_CHANGE_MODE_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CANNOT_005fCHANGE_005fMODE_005fCLASS-and-subreg-semantics"><code>CANNOT_CHANGE_MODE_CLASS</code> and subreg semantics</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-canonicalization-of-instructions">canonicalization of instructions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-canonicalize_005ffuncptr_005ffor_005fcompare-instruction-pattern"><code>canonicalize_funcptr_for_compare</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-can_005fcreate_005fpseudo_005fp"><code>can_create_pseudo_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-can_005ffallthru"><code>can_fallthru</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-casesi-instruction-pattern"><code>casesi</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CASE_005fVECTOR_005fMODE"><code>CASE_VECTOR_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CASE_005fVECTOR_005fPC_005fRELATIVE"><code>CASE_VECTOR_PC_RELATIVE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CASE_005fVECTOR_005fSHORTEN_005fMODE"><code>CASE_VECTOR_SHORTEN_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cbranchmode4-instruction-pattern"><code>cbranch<var>mode</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cc0"><code>cc0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cc0-1"><code>cc0</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#CC0-Condition-Codes">CC0 Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cc0_002c-RTL-sharing"><code>cc0</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cc0_005frtx"><code>cc0_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CC1PLUS_005fSPEC"><code>CC1PLUS_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CC1_005fSPEC"><code>CC1_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CCmode"><code>CCmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CCmode-1"><code>CCmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#MODE_005fCC-Condition-Codes">MODE_CC Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cc_005fstatus"><code>cc_status</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#CC0-Condition-Codes">CC0 Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CC_005fSTATUS_005fMDEP"><code>CC_STATUS_MDEP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#CC0-Condition-Codes">CC0 Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CC_005fSTATUS_005fMDEP_005fINIT"><code>CC_STATUS_MDEP_INIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#CC0-Condition-Codes">CC0 Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CDImode"><code>CDImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ceilm2-instruction-pattern"><code>ceil<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CEIL_005fDIV_005fEXPR"><code>CEIL_DIV_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CEIL_005fMOD_005fEXPR"><code>CEIL_MOD_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CFA_005fFRAME_005fBASE_005fOFFSET"><code>CFA_FRAME_BASE_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CFG-verification">CFG verification</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CFG_002c-Control-Flow-Graph">CFG, Control Flow Graph</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Control-Flow">Control Flow</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cfghooks_002eh"><code>cfghooks.h</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cgraph_005ffinalize_005ffunction"><code>cgraph_finalize_function</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-chain_005fcircular"><code>chain_circular</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-chain_005fnext"><code>chain_next</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-chain_005fprev"><code>chain_prev</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-change_005faddress"><code>change_address</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CHAR_005fTYPE_005fSIZE"><code>CHAR_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-check_005fstack-instruction-pattern"><code>check_stack</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CHImode"><code>CHImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-class-definitions_002c-register">class definitions, register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-class-preference-constraints">class preference constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Class-Preferences">Class Preferences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-class_002c-scope">class, scope</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-classes-of-RTX-codes">classes of RTX codes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Classes">RTL Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLASSTYPE_005fDECLARED_005fCLASS"><code>CLASSTYPE_DECLARED_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLASSTYPE_005fHAS_005fMUTABLE"><code>CLASSTYPE_HAS_MUTABLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLASSTYPE_005fNON_005fPOD_005fP"><code>CLASSTYPE_NON_POD_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLASS_005fMAX_005fNREGS"><code>CLASS_MAX_NREGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLASS_005fTYPE_005fP"><code>CLASS_TYPE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Cleanups">Cleanups</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Cleanups">Cleanups</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLEANUP_005fDECL"><code>CLEANUP_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLEANUP_005fEXPR"><code>CLEANUP_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLEANUP_005fPOINT_005fEXPR"><code>CLEANUP_POINT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLEANUP_005fSTMT"><code>CLEANUP_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLEAR_005fBY_005fPIECES_005fP"><code>CLEAR_BY_PIECES_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-clear_005fcache-instruction-pattern"><code>clear_cache</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLEAR_005fINSN_005fCACHE"><code>CLEAR_INSN_CACHE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLEAR_005fRATIO"><code>CLEAR_RATIO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-clobber"><code>clobber</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-clrsb"><code>clrsb</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-clz"><code>clz</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-clzm2-instruction-pattern"><code>clz<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CLZ_005fDEFINED_005fVALUE_005fAT_005fZERO"><code>CLZ_DEFINED_VALUE_AT_ZERO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cmpmemm-instruction-pattern"><code>cmpmem<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cmpstrm-instruction-pattern"><code>cmpstr<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cmpstrnm-instruction-pattern"><code>cmpstrn<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-code-generation-RTL-sequences">code generation RTL sequences</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expander-Definitions">Expander Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-code-iterators-in-_002emd-files">code iterators in <samp>.md</samp> files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Code-Iterators">Code Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-codes_002c-RTL-expression">codes, RTL expression</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-code_005flabel"><code>code_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CODE_005fLABEL"><code>CODE_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-code_005flabel-and-_002fi"><code>code_label</code> and &lsquo;<samp>/i</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-code_005flabel-and-_002fv"><code>code_label</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CODE_005fLABEL_005fNUMBER"><code>CODE_LABEL_NUMBER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COImode"><code>COImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COLLECT2_005fHOST_005fINITIALIZATION"><code>COLLECT2_HOST_INITIALIZATION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COLLECT_005fEXPORT_005fLIST"><code>COLLECT_EXPORT_LIST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COLLECT_005fSHARED_005fFINI_005fFUNC"><code>COLLECT_SHARED_FINI_FUNC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COLLECT_005fSHARED_005fINIT_005fFUNC"><code>COLLECT_SHARED_INIT_FUNC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-commit_005fedge_005finsertions"><code>commit_edge_insertions</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-compare"><code>compare</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-compare_002c-canonicalization-of"><code>compare</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-comparison_005foperator"><code>comparison_operator</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-compiler-passes-and-files">compiler passes and files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Passes">Passes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-complement_002c-bitwise">complement, bitwise</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COMPLEX_005fCST"><code>COMPLEX_CST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COMPLEX_005fEXPR"><code>COMPLEX_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COMPLEX_005fTYPE"><code>COMPLEX_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COMPONENT_005fREF"><code>COMPONENT_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-References">Storage References</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Compound-Expressions">Compound Expressions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Compound-Expressions">Compound Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Compound-Lvalues">Compound Lvalues</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Compound-Lvalues">Compound Lvalues</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COMPOUND_005fEXPR"><code>COMPOUND_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COMPOUND_005fLITERAL_005fEXPR"><code>COMPOUND_LITERAL_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COMPOUND_005fLITERAL_005fEXPR_005fDECL"><code>COMPOUND_LITERAL_EXPR_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COMPOUND_005fLITERAL_005fEXPR_005fDECL_005fEXPR"><code>COMPOUND_LITERAL_EXPR_DECL_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-computed-jump">computed jump</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-computing-the-length-of-an-insn">computing the length of an insn</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Lengths">Insn Lengths</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-concat"><code>concat</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-concatn"><code>concatn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cond"><code>cond</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cond-and-attributes"><code>cond</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-condition-code-register">condition code register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-condition-code-status">condition code status</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Condition-Code">Condition Code</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-condition-codes">condition codes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-conditional-execution">conditional execution</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Execution">Conditional Execution</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Conditional-Expressions">Conditional Expressions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Expressions">Conditional Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-conditions_002c-in-patterns">conditions, in patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Patterns">Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cond_005fexec"><code>cond_exec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-COND_005fEXPR"><code>COND_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-configuration-file">configuration file</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-configuration-file-1">configuration file</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-configure-terms">configure terms</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Configure-Terms">Configure Terms</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONJ_005fEXPR"><code>CONJ_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const"><code>const</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const0_005frtx"><code>const0_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONST0_005fRTX"><code>CONST0_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const1_005frtx"><code>const1_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONST1_005fRTX"><code>CONST1_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const2_005frtx"><code>const2_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONST2_005fRTX"><code>CONST2_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constant-attributes">constant attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-Attributes">Constant Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constant-definitions">constant definitions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-Definitions">Constant Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constants-in-constraints">constants in constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONSTANT_005fADDRESS_005fP"><code>CONSTANT_ADDRESS_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONSTANT_005fALIGNMENT"><code>CONSTANT_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONSTANT_005fP"><code>CONSTANT_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONSTANT_005fPOOL_005fADDRESS_005fP"><code>CONSTANT_POOL_ADDRESS_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONSTANT_005fPOOL_005fBEFORE_005fFUNCTION"><code>CONSTANT_POOL_BEFORE_FUNCTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constm1_005frtx"><code>constm1_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constraint-modifier-characters">constraint modifier characters</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Modifiers">Modifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constraint_002c-matching">constraint, matching</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constraints">constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constraints">Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constraints_002c-defining">constraints, defining</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Constraints">Define Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constraints_002c-defining_002c-obsolete-method">constraints, defining, obsolete method</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constraints_002c-machine-specific">constraints, machine specific</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Constraints">Machine Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constraints_002c-testing">constraints, testing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#C-Constraint-Interface">C Constraint Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONSTRAINT_005fLEN"><code>CONSTRAINT_LEN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constraint_005fnum"><code>constraint_num</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C-Constraint-Interface">C Constraint Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constraint_005fsatisfied_005fp"><code>constraint_satisfied_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C-Constraint-Interface">C Constraint Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONSTRUCTOR"><code>CONSTRUCTOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constructors_002c-automatic-calls">constructors, automatic calls</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Collect2">Collect2</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-constructors_002c-output-of">constructors, output of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Initialization">Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONST_005fDECL"><code>CONST_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fdouble"><code>const_double</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fdouble_002c-RTL-sharing"><code>const_double</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONST_005fDOUBLE_005fLOW"><code>CONST_DOUBLE_LOW</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONST_005fDOUBLE_005fOK_005fFOR_005fCONSTRAINT_005fP"><code>CONST_DOUBLE_OK_FOR_CONSTRAINT_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONST_005fDOUBLE_005fOK_005fFOR_005fLETTER_005fP"><code>CONST_DOUBLE_OK_FOR_LETTER_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fdouble_005foperand"><code>const_double_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005ffixed"><code>const_fixed</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fint"><code>const_int</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fint-and-attribute-tests"><code>const_int</code> and attribute tests</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fint-and-attributes"><code>const_int</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fint_002c-RTL-sharing"><code>const_int</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fint_005foperand"><code>const_int_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONST_005fOK_005fFOR_005fCONSTRAINT_005fP"><code>CONST_OK_FOR_CONSTRAINT_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONST_005fOK_005fFOR_005fLETTER_005fP"><code>CONST_OK_FOR_LETTER_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fstring"><code>const_string</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fstring-and-attributes"><code>const_string</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005ftrue_005frtx"><code>const_true_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fvector"><code>const_vector</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-const_005fvector_002c-RTL-sharing"><code>const_vector</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-container">container</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Containers">Containers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONTINUE_005fSTMT"><code>CONTINUE_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-contributors">contributors</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Contributors">Contributors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-controlling-register-usage">controlling register usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-controlling-the-compilation-driver">controlling the compilation driver</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-conventions_002c-run_002dtime">conventions, run-time</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-conversions">conversions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CONVERT_005fEXPR"><code>CONVERT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-copysignm3-instruction-pattern"><code>copysign<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-copy_005frtx"><code>copy_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-copy_005frtx_005fif_005fshared"><code>copy_rtx_if_shared</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cosm2-instruction-pattern"><code>cos<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-costs-of-instructions">costs of instructions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CPLUSPLUS_005fCPP_005fSPEC"><code>CPLUSPLUS_CPP_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CPP_005fSPEC"><code>CPP_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CP_005fINTEGRAL_005fTYPE"><code>CP_INTEGRAL_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cp_005fnamespace_005fdecls"><code>cp_namespace_decls</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Namespaces">Namespaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CP_005fTYPE_005fCONST_005fNON_005fVOLATILE_005fP"><code>CP_TYPE_CONST_NON_VOLATILE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CP_005fTYPE_005fCONST_005fP"><code>CP_TYPE_CONST_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cp_005ftype_005fquals"><code>cp_type_quals</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cp_005ftype_005fquals-1"><code>cp_type_quals</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CP_005fTYPE_005fRESTRICT_005fP"><code>CP_TYPE_RESTRICT_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CP_005fTYPE_005fVOLATILE_005fP"><code>CP_TYPE_VOLATILE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CQImode"><code>CQImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cross-compilation-and-floating-point">cross compilation and floating point</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-crtl_002d_003eargs_002epops_005fargs"><code>crtl-&gt;args.pops_args</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-crtl_002d_003eargs_002epretend_005fargs_005fsize"><code>crtl-&gt;args.pretend_args_size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-crtl_002d_003eoutgoing_005fargs_005fsize"><code>crtl-&gt;outgoing_args_size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CRTSTUFF_005fT_005fCFLAGS"><code>CRTSTUFF_T_CFLAGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CRTSTUFF_005fT_005fCFLAGS_005fS"><code>CRTSTUFF_T_CFLAGS_S</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CRT_005fCALL_005fSTATIC_005fFUNCTION"><code>CRT_CALL_STATIC_FUNCTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CSImode"><code>CSImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-cstoremode4-instruction-pattern"><code>cstore<var>mode</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CTImode"><code>CTImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ctrapMM4-instruction-pattern"><code>ctrap<var>MM</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ctz"><code>ctz</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ctzm2-instruction-pattern"><code>ctz<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CTZ_005fDEFINED_005fVALUE_005fAT_005fZERO"><code>CTZ_DEFINED_VALUE_AT_ZERO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-CUMULATIVE_005fARGS"><code>CUMULATIVE_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-current_005ffunction_005fis_005fleaf"><code>current_function_is_leaf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Leaf-Functions">Leaf Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-current_005ffunction_005fuses_005fonly_005fleaf_005fregs"><code>current_function_uses_only_leaf_regs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Leaf-Functions">Leaf Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-current_005finsn_005fpredicate"><code>current_insn_predicate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Execution">Conditional Execution</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-C_005fCOMMON_005fOVERRIDE_005fOPTIONS"><code>C_COMMON_OVERRIDE_OPTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-c_005fregister_005fpragma"><code>c_register_pragma</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-c_005fregister_005fpragma_005fwith_005fexpansion"><code>c_register_pragma_with_expansion</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-D">D</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-DAmode"><code>DAmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-data-bypass">data bypass</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-data-bypass-1">data bypass</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-data-dependence-delays">data dependence delays</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Data-Dependency-Analysis">Data Dependency Analysis</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dependency-analysis">Dependency analysis</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-data-structures">data structures</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Per_002dFunction-Data">Per-Function Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DATA_005fALIGNMENT"><code>DATA_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DATA_005fSECTION_005fASM_005fOP"><code>DATA_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBR_005fOUTPUT_005fSEQEND"><code>DBR_OUTPUT_SEQEND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-dbr_005fsequence_005flength"><code>dbr_sequence_length</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fBLOCKS_005fFUNCTION_005fRELATIVE"><code>DBX_BLOCKS_FUNCTION_RELATIVE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fCONTIN_005fCHAR"><code>DBX_CONTIN_CHAR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fCONTIN_005fLENGTH"><code>DBX_CONTIN_LENGTH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fDEBUGGING_005fINFO"><code>DBX_DEBUGGING_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fFUNCTION_005fFIRST"><code>DBX_FUNCTION_FIRST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fLINES_005fFUNCTION_005fRELATIVE"><code>DBX_LINES_FUNCTION_RELATIVE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fNO_005fXREFS"><code>DBX_NO_XREFS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fOUTPUT_005fMAIN_005fSOURCE_005fFILENAME"><code>DBX_OUTPUT_MAIN_SOURCE_FILENAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Names-and-DBX">File Names and DBX</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fOUTPUT_005fMAIN_005fSOURCE_005fFILE_005fEND"><code>DBX_OUTPUT_MAIN_SOURCE_FILE_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Names-and-DBX">File Names and DBX</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fOUTPUT_005fNULL_005fN_005fSO_005fAT_005fMAIN_005fSOURCE_005fFILE_005fEND"><code>DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Names-and-DBX">File Names and DBX</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fOUTPUT_005fSOURCE_005fLINE"><code>DBX_OUTPUT_SOURCE_LINE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Hooks">DBX Hooks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fREGISTER_005fNUMBER"><code>DBX_REGISTER_NUMBER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#All-Debuggers">All Debuggers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fREGPARM_005fSTABS_005fCODE"><code>DBX_REGPARM_STABS_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fREGPARM_005fSTABS_005fLETTER"><code>DBX_REGPARM_STABS_LETTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fSTATIC_005fCONST_005fVAR_005fCODE"><code>DBX_STATIC_CONST_VAR_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fSTATIC_005fSTAB_005fDATA_005fSECTION"><code>DBX_STATIC_STAB_DATA_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fTYPE_005fDECL_005fSTABS_005fCODE"><code>DBX_TYPE_DECL_STABS_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DBX_005fUSE_005fBINCL"><code>DBX_USE_BINCL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DCmode"><code>DCmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DDmode"><code>DDmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-De-Morgan_0027s-law">De Morgan&rsquo;s law</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-dead_005for_005fset_005fp"><code>dead_or_set_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#define_005fpeephole">define_peephole</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DEBUGGER_005fARG_005fOFFSET"><code>DEBUGGER_ARG_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#All-Debuggers">All Debuggers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DEBUGGER_005fAUTO_005fOFFSET"><code>DEBUGGER_AUTO_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#All-Debuggers">All Debuggers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-debug_005fexpr"><code>debug_expr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Debug-Information">Debug Information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DEBUG_005fEXPR_005fDECL"><code>DEBUG_EXPR_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-debug_005finsn"><code>debug_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DEBUG_005fSYMS_005fTEXT"><code>DEBUG_SYMS_TEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-decimal-float-library">decimal float library</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-declaration">declaration</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-declarations_002c-RTL">declarations, RTL</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Declarations">RTL Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECLARE_005fLIBRARY_005fRENAMES"><code>DECLARE_LIBRARY_RENAMES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fALIGN"><code>DECL_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fANTICIPATED"><code>DECL_ANTICIPATED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fARGUMENTS"><code>DECL_ARGUMENTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fARRAY_005fDELETE_005fOPERATOR_005fP"><code>DECL_ARRAY_DELETE_OPERATOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fARTIFICIAL"><code>DECL_ARTIFICIAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Working-with-declarations">Working with declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fARTIFICIAL-1"><code>DECL_ARTIFICIAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fARTIFICIAL-2"><code>DECL_ARTIFICIAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fASSEMBLER_005fNAME"><code>DECL_ASSEMBLER_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fASSEMBLER_005fNAME-1"><code>DECL_ASSEMBLER_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fATTRIBUTES"><code>DECL_ATTRIBUTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Attributes">Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fBASE_005fCONSTRUCTOR_005fP"><code>DECL_BASE_CONSTRUCTOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fCOMPLETE_005fCONSTRUCTOR_005fP"><code>DECL_COMPLETE_CONSTRUCTOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fCOMPLETE_005fDESTRUCTOR_005fP"><code>DECL_COMPLETE_DESTRUCTOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fCONSTRUCTOR_005fP"><code>DECL_CONSTRUCTOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fCONST_005fMEMFUNC_005fP"><code>DECL_CONST_MEMFUNC_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fCONTEXT"><code>DECL_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Namespaces">Namespaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fCONV_005fFN_005fP"><code>DECL_CONV_FN_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fCOPY_005fCONSTRUCTOR_005fP"><code>DECL_COPY_CONSTRUCTOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fDESTRUCTOR_005fP"><code>DECL_DESTRUCTOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fEXTERNAL"><code>DECL_EXTERNAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fEXTERNAL-1"><code>DECL_EXTERNAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fEXTERN_005fC_005fFUNCTION_005fP"><code>DECL_EXTERN_C_FUNCTION_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fFUNCTION_005fMEMBER_005fP"><code>DECL_FUNCTION_MEMBER_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fFUNCTION_005fSPECIFIC_005fOPTIMIZATION"><code>DECL_FUNCTION_SPECIFIC_OPTIMIZATION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fFUNCTION_005fSPECIFIC_005fOPTIMIZATION-1"><code>DECL_FUNCTION_SPECIFIC_OPTIMIZATION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fFUNCTION_005fSPECIFIC_005fTARGET"><code>DECL_FUNCTION_SPECIFIC_TARGET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fFUNCTION_005fSPECIFIC_005fTARGET-1"><code>DECL_FUNCTION_SPECIFIC_TARGET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fGLOBAL_005fCTOR_005fP"><code>DECL_GLOBAL_CTOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fGLOBAL_005fDTOR_005fP"><code>DECL_GLOBAL_DTOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fINITIAL"><code>DECL_INITIAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fINITIAL-1"><code>DECL_INITIAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fLINKONCE_005fP"><code>DECL_LINKONCE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fLOCAL_005fFUNCTION_005fP"><code>DECL_LOCAL_FUNCTION_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fMAIN_005fP"><code>DECL_MAIN_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fNAME"><code>DECL_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Working-with-declarations">Working with declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fNAME-1"><code>DECL_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fNAME-2"><code>DECL_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fNAME-3"><code>DECL_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Namespaces">Namespaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fNAMESPACE_005fALIAS"><code>DECL_NAMESPACE_ALIAS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Namespaces">Namespaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fNAMESPACE_005fSTD_005fP"><code>DECL_NAMESPACE_STD_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Namespaces">Namespaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fNONCONVERTING_005fP"><code>DECL_NONCONVERTING_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fNONSTATIC_005fMEMBER_005fFUNCTION_005fP"><code>DECL_NONSTATIC_MEMBER_FUNCTION_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fNON_005fTHUNK_005fFUNCTION_005fP"><code>DECL_NON_THUNK_FUNCTION_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fOVERLOADED_005fOPERATOR_005fP"><code>DECL_OVERLOADED_OPERATOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fPURE_005fP"><code>DECL_PURE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fRESULT"><code>DECL_RESULT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fSAVED_005fTREE"><code>DECL_SAVED_TREE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fSIZE"><code>DECL_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fSTATIC_005fFUNCTION_005fP"><code>DECL_STATIC_FUNCTION_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fSTMT"><code>DECL_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fSTMT_005fDECL"><code>DECL_STMT_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fTHUNK_005fP"><code>DECL_THUNK_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fVIRTUAL_005fP"><code>DECL_VIRTUAL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DECL_005fVOLATILE_005fMEMFUNC_005fP"><code>DECL_VOLATILE_MEMFUNC_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-decrement_005fand_005fbranch_005funtil_005fzero-instruction-pattern"><code>decrement_and_branch_until_zero</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-default"><code>default</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-default_005ffile_005fstart"><code>default_file_start</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DEFAULT_005fGDB_005fEXTENSIONS"><code>DEFAULT_GDB_EXTENSIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DEFAULT_005fPCC_005fSTRUCT_005fRETURN"><code>DEFAULT_PCC_STRUCT_RETURN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DEFAULT_005fSIGNED_005fCHAR"><code>DEFAULT_SIGNED_CHAR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005faddress_005fconstraint"><code>define_address_constraint</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Constraints">Define Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fasm_005fattributes"><code>define_asm_attributes</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tagging-Insns">Tagging Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fattr"><code>define_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Defining-Attributes">Defining Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fautomaton"><code>define_automaton</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fbypass"><code>define_bypass</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fcode_005fattr"><code>define_code_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Code-Iterators">Code Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fcode_005fiterator"><code>define_code_iterator</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Code-Iterators">Code Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fcond_005fexec"><code>define_cond_exec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Execution">Conditional Execution</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fconstants"><code>define_constants</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-Definitions">Constant Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fconstraint"><code>define_constraint</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Constraints">Define Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fcpu_005funit"><code>define_cpu_unit</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fc_005fenum"><code>define_c_enum</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-Definitions">Constant Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fdelay"><code>define_delay</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Delay-Slots">Delay Slots</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fenum"><code>define_enum</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-Definitions">Constant Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fenum_005fattr"><code>define_enum_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Defining-Attributes">Defining Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fenum_005fattr-1"><code>define_enum_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-Definitions">Constant Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fexpand"><code>define_expand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expander-Definitions">Expander Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005finsn"><code>define_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Patterns">Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005finsn-example"><code>define_insn</code> example</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Example">Example</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005finsn_005fand_005fsplit"><code>define_insn_and_split</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Splitting">Insn Splitting</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005finsn_005freservation"><code>define_insn_reservation</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fint_005fattr"><code>define_int_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Int-Iterators">Int Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fint_005fiterator"><code>define_int_iterator</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Int-Iterators">Int Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fmemory_005fconstraint"><code>define_memory_constraint</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Constraints">Define Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fmode_005fattr"><code>define_mode_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Substitutions">Substitutions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fmode_005fiterator"><code>define_mode_iterator</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Defining-Mode-Iterators">Defining Mode Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fpeephole"><code>define_peephole</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#define_005fpeephole">define_peephole</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fpeephole2"><code>define_peephole2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#define_005fpeephole2">define_peephole2</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fpredicate"><code>define_predicate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Defining-Predicates">Defining Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fquery_005fcpu_005funit"><code>define_query_cpu_unit</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fregister_005fconstraint"><code>define_register_constraint</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Constraints">Define Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005freservation"><code>define_reservation</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fspecial_005fpredicate"><code>define_special_predicate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Defining-Predicates">Defining Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fsplit"><code>define_split</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Splitting">Insn Splitting</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fsubst">define_subst</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Subst">Define Subst</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fsubst-1">define_subst</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Subst-Example">Define Subst Example</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fsubst-2">define_subst</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Subst-Pattern-Matching">Define Subst Pattern Matching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fsubst-3">define_subst</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Subst-Output-Template">Define Subst Output Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fsubst-4"><code>define_subst</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Subst">Define Subst</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fsubst-5"><code>define_subst</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Subst-Iterators">Subst Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fsubst_005fattr"><code>define_subst_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Subst-Iterators">Subst Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-define_005fsubst_005fattr-1"><code>define_subst_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Subst-Iterators">Subst Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-defining-attributes-and-their-values">defining attributes and their values</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Defining-Attributes">Defining Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-defining-constraints">defining constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Define-Constraints">Define Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-defining-constraints_002c-obsolete-method">defining constraints, obsolete method</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-defining-jump-instruction-patterns">defining jump instruction patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Jump-Patterns">Jump Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-defining-looping-instruction-patterns">defining looping instruction patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Patterns">Looping Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-defining-peephole-optimizers">defining peephole optimizers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Peephole-Definitions">Peephole Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-defining-predicates">defining predicates</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Defining-Predicates">Defining Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-defining-RTL-sequences-for-code-generation">defining RTL sequences for code generation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expander-Definitions">Expander Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-delay-slots_002c-defining">delay slots, defining</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Delay-Slots">Delay Slots</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-deletable"><code>deletable</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DELETE_005fIF_005fORDINARY"><code>DELETE_IF_ORDINARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Dependent-Patterns">Dependent Patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dependent-Patterns">Dependent Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-desc"><code>desc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-destructors_002c-output-of">destructors, output of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Initialization">Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-deterministic-finite-state-automaton">deterministic finite state automaton</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-deterministic-finite-state-automaton-1">deterministic finite state automaton</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DFmode"><code>DFmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DF_005fSIZE"><code>DF_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-digits-in-constraint">digits in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DImode"><code>DImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-directory-options-_002emd">directory options .md</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Including-Patterns">Including Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DIR_005fSEPARATOR"><code>DIR_SEPARATOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DIR_005fSEPARATOR_005f2"><code>DIR_SEPARATOR_2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-disabling-certain-registers">disabling certain registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-dispatch-table">dispatch table</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-div"><code>div</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-div-and-attributes"><code>div</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-division">division</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-division-1">division</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-division-2">division</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-divm3-instruction-pattern"><code>div<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-divmodm4-instruction-pattern"><code>divmod<var>m</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DOLLARS_005fIN_005fIDENTIFIERS"><code>DOLLARS_IN_IDENTIFIERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-doloop_005fbegin-instruction-pattern"><code>doloop_begin</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-doloop_005fend-instruction-pattern"><code>doloop_end</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DONE"><code>DONE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expander-Definitions">Expander Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DONT_005fUSE_005fBUILTIN_005fSETJMP"><code>DONT_USE_BUILTIN_SETJMP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DOUBLE_005fTYPE_005fSIZE"><code>DOUBLE_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DO_005fBODY"><code>DO_BODY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DO_005fCOND"><code>DO_COND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DO_005fSTMT"><code>DO_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DQmode"><code>DQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-driver">driver</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DRIVER_005fSELF_005fSPECS"><code>DRIVER_SELF_SPECS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DUMPFILE_005fFORMAT"><code>DUMPFILE_FORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF2_005fASM_005fLINE_005fDEBUG_005fINFO"><code>DWARF2_ASM_LINE_DEBUG_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF2_005fDEBUGGING_005fINFO"><code>DWARF2_DEBUGGING_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF2_005fFRAME_005fINFO"><code>DWARF2_FRAME_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF2_005fFRAME_005fREG_005fOUT"><code>DWARF2_FRAME_REG_OUT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF2_005fUNWIND_005fINFO"><code>DWARF2_UNWIND_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF_005fALT_005fFRAME_005fRETURN_005fCOLUMN"><code>DWARF_ALT_FRAME_RETURN_COLUMN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF_005fCIE_005fDATA_005fALIGNMENT"><code>DWARF_CIE_DATA_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF_005fFRAME_005fREGISTERS"><code>DWARF_FRAME_REGISTERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF_005fFRAME_005fREGNUM"><code>DWARF_FRAME_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF_005fREG_005fTO_005fUNWIND_005fCOLUMN"><code>DWARF_REG_TO_UNWIND_COLUMN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DWARF_005fZERO_005fREG"><code>DWARF_ZERO_REG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-DYNAMIC_005fCHAIN_005fADDRESS"><code>DYNAMIC_CHAIN_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-E">E</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-E-in-constraint">&lsquo;<samp>E</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-earlyclobber-operand">earlyclobber operand</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Modifiers">Modifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-edge"><code>edge</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-edge-in-the-flow-graph">edge in the flow graph</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-edge-iterators">edge iterators</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-edge-splitting">edge splitting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EDGE_005fABNORMAL"><code>EDGE_ABNORMAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EDGE_005fABNORMAL_002c-EDGE_005fABNORMAL_005fCALL"><code>EDGE_ABNORMAL, EDGE_ABNORMAL_CALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EDGE_005fABNORMAL_002c-EDGE_005fEH"><code>EDGE_ABNORMAL, EDGE_EH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EDGE_005fABNORMAL_002c-EDGE_005fSIBCALL"><code>EDGE_ABNORMAL, EDGE_SIBCALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EDGE_005fFALLTHRU_002c-force_005fnonfallthru"><code>EDGE_FALLTHRU, force_nonfallthru</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EDOM_002c-implicit-usage"><code>EDOM</code>, implicit usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EH_005fFRAME_005fIN_005fDATA_005fSECTION"><code>EH_FRAME_IN_DATA_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EH_005fFRAME_005fSECTION_005fNAME"><code>EH_FRAME_SECTION_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-eh_005freturn-instruction-pattern"><code>eh_return</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EH_005fRETURN_005fDATA_005fREGNO"><code>EH_RETURN_DATA_REGNO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EH_005fRETURN_005fHANDLER_005fRTX"><code>EH_RETURN_HANDLER_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EH_005fRETURN_005fSTACKADJ_005fRTX"><code>EH_RETURN_STACKADJ_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EH_005fTABLES_005fCAN_005fBE_005fREAD_005fONLY"><code>EH_TABLES_CAN_BE_READ_ONLY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EH_005fUSES"><code>EH_USES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ei_005fedge"><code>ei_edge</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ei_005fend_005fp"><code>ei_end_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ei_005flast"><code>ei_last</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ei_005fnext"><code>ei_next</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ei_005fone_005fbefore_005fend_005fp"><code>ei_one_before_end_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ei_005fprev"><code>ei_prev</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ei_005fsafe_005fsafe"><code>ei_safe_safe</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ei_005fstart"><code>ei_start</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ELIMINABLE_005fREGS"><code>ELIMINABLE_REGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Elimination">Elimination</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ELSE_005fCLAUSE"><code>ELSE_CLAUSE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Embedded-C">Embedded C</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EMIT_005fMODE_005fSET"><code>EMIT_MODE_SET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Switching">Mode Switching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Empty-Statements">Empty Statements</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Empty-Statements">Empty Statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EMPTY_005fCLASS_005fEXPR"><code>EMPTY_CLASS_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EMPTY_005fFIELD_005fBOUNDARY"><code>EMPTY_FIELD_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Emulated-TLS">Emulated TLS</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-enabled">enabled</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Disable-Insn-Alternatives">Disable Insn Alternatives</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ENDFILE_005fSPEC"><code>ENDFILE_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-endianness">endianness</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Portability">Portability</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ENTRY_005fBLOCK_005fPTR_002c-EXIT_005fBLOCK_005fPTR"><code>ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-enum-machine_005fmode"><code>enum machine_mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-enum-reg_005fclass"><code>enum reg_class</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ENUMERAL_005fTYPE"><code>ENUMERAL_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-enumerations">enumerations</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-Definitions">Constant Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-epilogue">epilogue</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-epilogue-instruction-pattern"><code>epilogue</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EPILOGUE_005fUSES"><code>EPILOGUE_USES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-eq"><code>eq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-eq-and-attributes"><code>eq</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-equal">equal</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-eq_005fattr"><code>eq_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EQ_005fEXPR"><code>EQ_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-errno_002c-implicit-usage"><code>errno</code>, implicit usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXACT_005fDIV_005fEXPR"><code>EXACT_DIV_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-examining-SSA_005fNAMEs">examining SSA_NAMEs</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-exception-handling">exception handling</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-exception-handling-1">exception handling</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-exception_005freceiver-instruction-pattern"><code>exception_receiver</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-exclamation-point">exclamation point</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Multi_002dAlternative">Multi-Alternative</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-exclusion_005fset"><code>exclusion_set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-exclusive_002dor_002c-bitwise">exclusive-or, bitwise</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXIT_005fEXPR"><code>EXIT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXIT_005fIGNORE_005fSTACK"><code>EXIT_IGNORE_STACK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-expander-definitions">expander definitions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expander-Definitions">Expander Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-expm2-instruction-pattern"><code>exp<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-expression">expression</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expression-trees">Expression trees</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-expression-codes">expression codes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXPR_005fFILENAME"><code>EXPR_FILENAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Working-with-declarations">Working with declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXPR_005fLINENO"><code>EXPR_LINENO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Working-with-declarations">Working with declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-expr_005flist"><code>expr_list</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXPR_005fSTMT"><code>EXPR_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXPR_005fSTMT_005fEXPR"><code>EXPR_STMT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-extendmn2-instruction-pattern"><code>extend<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-extensible-constraints">extensible constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXTRA_005fADDRESS_005fCONSTRAINT"><code>EXTRA_ADDRESS_CONSTRAINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXTRA_005fCONSTRAINT"><code>EXTRA_CONSTRAINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXTRA_005fCONSTRAINT_005fSTR"><code>EXTRA_CONSTRAINT_STR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXTRA_005fMEMORY_005fCONSTRAINT"><code>EXTRA_MEMORY_CONSTRAINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-EXTRA_005fSPECS"><code>EXTRA_SPECS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-extv-instruction-pattern"><code>extv</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-extvm-instruction-pattern"><code>extv<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-extvmisalignm-instruction-pattern"><code>extvmisalign<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-extzv-instruction-pattern"><code>extzv</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-extzvm-instruction-pattern"><code>extzv<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-extzvmisalignm-instruction-pattern"><code>extzvmisalign<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-F">F</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-F-in-constraint">&lsquo;<samp>F</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FAIL"><code>FAIL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expander-Definitions">Expander Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fall_002dthru"><code>fall-thru</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FATAL_005fEXIT_005fCODE"><code>FATAL_EXIT_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FDL_002c-GNU-Free-Documentation-License">FDL, GNU Free Documentation License</a>:</td><td>&nbsp;</td><td valign="top"><a href="#GNU-Free-Documentation-License">GNU Free Documentation License</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-features_002c-optional_002c-in-system-conventions">features, optional, in system conventions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ffs"><code>ffs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ffsm2-instruction-pattern"><code>ffs<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIELD_005fDECL"><code>FIELD_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-files-and-passes-of-the-compiler">files and passes of the compiler</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Passes">Passes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-files_002c-generated">files, generated</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Files">Files</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-file_005fend_005findicate_005fexec_005fstack"><code>file_end_indicate_exec_stack</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-final_005fabsence_005fset"><code>final_absence_set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FINAL_005fPRESCAN_005fINSN"><code>FINAL_PRESCAN_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-final_005fpresence_005fset"><code>final_presence_set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-final_005fsequence"><code>final_sequence</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIND_005fBASE_005fTERM"><code>FIND_BASE_TERM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-finite-state-automaton-minimization">finite state automaton minimization</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FINI_005fARRAY_005fSECTION_005fASM_005fOP"><code>FINI_ARRAY_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FINI_005fSECTION_005fASM_005fOP"><code>FINI_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIRST_005fPARM_005fOFFSET"><code>FIRST_PARM_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIRST_005fPARM_005fOFFSET-and-virtual-registers"><code>FIRST_PARM_OFFSET</code> and virtual registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIRST_005fPSEUDO_005fREGISTER"><code>FIRST_PSEUDO_REGISTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIRST_005fSTACK_005fREG"><code>FIRST_STACK_REG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Registers">Stack Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIRST_005fVIRTUAL_005fREGISTER"><code>FIRST_VIRTUAL_REGISTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fix"><code>fix</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fixed-register">fixed register</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fixed_002dpoint-fractional-library">fixed-point fractional library</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIXED_005fCONVERT_005fEXPR"><code>FIXED_CONVERT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIXED_005fCST"><code>FIXED_CST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIXED_005fPOINT_005fTYPE"><code>FIXED_POINT_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIXED_005fREGISTERS"><code>FIXED_REGISTERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fixed_005fregs"><code>fixed_regs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fixmn2-instruction-pattern"><code>fix<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fixunsmn2-instruction-pattern"><code>fixuns<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fixuns_005ftruncmn2-instruction-pattern"><code>fixuns_trunc<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fix_005ftruncmn2-instruction-pattern"><code>fix_trunc<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FIX_005fTRUNC_005fEXPR"><code>FIX_TRUNC_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-flags-in-RTL-expression">flags in RTL expression</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-float"><code>float</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-floating-point-and-cross-compilation">floating point and cross compilation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-floatmn2-instruction-pattern"><code>float<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-floatunsmn2-instruction-pattern"><code>floatuns<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FLOAT_005fEXPR"><code>FLOAT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-float_005fextend"><code>float_extend</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FLOAT_005fLIB_005fCOMPARE_005fRETURNS_005fBOOL"><code>FLOAT_LIB_COMPARE_RETURNS_BOOL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FLOAT_005fSTORE_005fFLAG_005fVALUE"><code>FLOAT_STORE_FLAG_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-float_005ftruncate"><code>float_truncate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FLOAT_005fTYPE_005fSIZE"><code>FLOAT_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FLOAT_005fWORDS_005fBIG_005fENDIAN"><code>FLOAT_WORDS_BIG_ENDIAN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FLOAT_005fWORDS_005fBIG_005fENDIAN_002c-_0028lack-of_0029-effect-on-subreg"><code>FLOAT_WORDS_BIG_ENDIAN</code>, (lack of) effect on <code>subreg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-floorm2-instruction-pattern"><code>floor<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FLOOR_005fDIV_005fEXPR"><code>FLOOR_DIV_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FLOOR_005fMOD_005fEXPR"><code>FLOOR_MOD_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-flow_002dinsensitive-alias-analysis">flow-insensitive alias analysis</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alias-analysis">Alias analysis</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-flow_002dsensitive-alias-analysis">flow-sensitive alias analysis</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alias-analysis">Alias analysis</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fma"><code>fma</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fmam4-instruction-pattern"><code>fma<var>m</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fmodm3-instruction-pattern"><code>fmod<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fmsm4-instruction-pattern"><code>fms<var>m</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fnmam4-instruction-pattern"><code>fnma<var>m</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fnmsm4-instruction-pattern"><code>fnms<var>m</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FORCE_005fCODE_005fSECTION_005fALIGN"><code>FORCE_CODE_SECTION_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-force_005freg"><code>force_reg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FOR_005fBODY"><code>FOR_BODY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FOR_005fCOND"><code>FOR_COND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FOR_005fEXPR"><code>FOR_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FOR_005fINIT_005fSTMT"><code>FOR_INIT_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FOR_005fSTMT"><code>FOR_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fractional-types">fractional types</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fixed_002dpoint-fractional-library-routines">Fixed-point fractional library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fractmn2-instruction-pattern"><code>fract<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fractunsmn2-instruction-pattern"><code>fractuns<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fract_005fconvert"><code>fract_convert</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FRACT_005fTYPE_005fSIZE"><code>FRACT_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-frame-layout">frame layout</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FRAME_005fADDR_005fRTX"><code>FRAME_ADDR_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FRAME_005fGROWS_005fDOWNWARD"><code>FRAME_GROWS_DOWNWARD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FRAME_005fGROWS_005fDOWNWARD-and-virtual-registers"><code>FRAME_GROWS_DOWNWARD</code> and virtual registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FRAME_005fPOINTER_005fCFA_005fOFFSET"><code>FRAME_POINTER_CFA_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-frame_005fpointer_005fneeded"><code>frame_pointer_needed</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FRAME_005fPOINTER_005fREGNUM"><code>FRAME_POINTER_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FRAME_005fPOINTER_005fREGNUM-and-virtual-registers"><code>FRAME_POINTER_REGNUM</code> and virtual registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-frame_005fpointer_005frtx"><code>frame_pointer_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-frame_005frelated"><code>frame_related</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-frame_005frelated_002c-in-insn_002c-call_005finsn_002c-jump_005finsn_002c-barrier_002c-and-set"><code>frame_related</code>, in <code>insn</code>, <code>call_insn</code>, <code>jump_insn</code>, <code>barrier</code>, and <code>set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-frame_005frelated_002c-in-mem"><code>frame_related</code>, in <code>mem</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-frame_005frelated_002c-in-reg"><code>frame_related</code>, in <code>reg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-frame_005frelated_002c-in-symbol_005fref"><code>frame_related</code>, in <code>symbol_ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-frequency_002c-count_002c-BB_005fFREQ_005fBASE"><code>frequency, count, BB_FREQ_BASE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ftruncm2-instruction-pattern"><code>ftrunc<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-function">function</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions">Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-function-1">function</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-function-call-conventions">function call conventions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-function-entry-and-exit">function entry and exit</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-function-entry-point_002c-alternate-function-entry-point">function entry point, alternate function entry point</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-function-properties">function properties</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-function_002dcall-insns">function-call insns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Calls">Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-functions_002c-leaf">functions, leaf</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Leaf-Functions">Leaf Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fARG_005fOFFSET"><code>FUNCTION_ARG_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fARG_005fPADDING"><code>FUNCTION_ARG_PADDING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fARG_005fREGNO_005fP"><code>FUNCTION_ARG_REGNO_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fBOUNDARY"><code>FUNCTION_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fDECL"><code>FUNCTION_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions">Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fDECL-1"><code>FUNCTION_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fMODE"><code>FUNCTION_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fPROFILER"><code>FUNCTION_PROFILER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profiling">Profiling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fTYPE"><code>FUNCTION_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fVALUE"><code>FUNCTION_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-FUNCTION_005fVALUE_005fREGNO_005fP"><code>FUNCTION_VALUE_REGNO_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-fundamental-type">fundamental type</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-G">G</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-G-in-constraint">&lsquo;<samp>G</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-g-in-constraint">&lsquo;<samp>g</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-garbage-collector_002c-invocation">garbage collector, invocation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Invoking-the-garbage-collector">Invoking the garbage collector</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-garbage-collector_002c-troubleshooting">garbage collector, troubleshooting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Troubleshooting">Troubleshooting</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GCC-and-portability">GCC and portability</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Portability">Portability</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GCC_005fDRIVER_005fHOST_005fINITIALIZATION"><code>GCC_DRIVER_HOST_INITIALIZATION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gcov_005ftype"><code>gcov_type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ge"><code>ge</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ge-and-attributes"><code>ge</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gencodes"><code>gencodes</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-passes">RTL passes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-general_005foperand"><code>general_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GENERAL_005fREGS"><code>GENERAL_REGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-generated-files">generated files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Files">Files</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-generating-assembler-output">generating assembler output</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Statement">Output Statement</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-generating-insns">generating insns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GENERIC">GENERIC</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GENERIC-1">GENERIC</a>:</td><td>&nbsp;</td><td valign="top"><a href="#GENERIC">GENERIC</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-generic-predicates">generic predicates</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-genflags"><code>genflags</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-passes">RTL passes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GEN_005fERRNO_005fRTX"><code>GEN_ERRNO_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-get_005fattr"><code>get_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-get_005fattr_005flength"><code>get_attr_length</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Lengths">Insn Lengths</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fCLASS_005fNARROWEST_005fMODE"><code>GET_CLASS_NARROWEST_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fCODE"><code>GET_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-get_005fframe_005fsize"><code>get_frame_size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Elimination">Elimination</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-get_005finsns"><code>get_insns</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-get_005flast_005finsn"><code>get_last_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE"><code>GET_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fALIGNMENT"><code>GET_MODE_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fBITSIZE"><code>GET_MODE_BITSIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fCLASS"><code>GET_MODE_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fFBIT"><code>GET_MODE_FBIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fIBIT"><code>GET_MODE_IBIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fMASK"><code>GET_MODE_MASK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fNAME"><code>GET_MODE_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fNUNITS"><code>GET_MODE_NUNITS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fSIZE"><code>GET_MODE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fUNIT_005fSIZE"><code>GET_MODE_UNIT_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fMODE_005fWIDER_005fMODE"><code>GET_MODE_WIDER_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fRTX_005fCLASS"><code>GET_RTX_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Classes">RTL Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fRTX_005fFORMAT"><code>GET_RTX_FORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Classes">RTL Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GET_005fRTX_005fLENGTH"><code>GET_RTX_LENGTH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Classes">RTL Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-get_005fthread_005fpointermode-instruction-pattern"><code>get_thread_pointer<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-geu"><code>geu</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-geu-and-attributes"><code>geu</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GE_005fEXPR"><code>GE_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GGC">GGC</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Information">Type Information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ggc_005fcollect"><code>ggc_collect</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Invoking-the-garbage-collector">Invoking the garbage collector</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE">GIMPLE</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE-1">GIMPLE</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Gimplification-pass">Gimplification pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE-2">GIMPLE</a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE">GIMPLE</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE-Exception-Handling">GIMPLE Exception Handling</a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-Exception-Handling">GIMPLE Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE-instruction-set">GIMPLE instruction set</a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-instruction-set">GIMPLE instruction set</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE-sequences">GIMPLE sequences</a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE-statement-iterators">GIMPLE statement iterators</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE-statement-iterators-1">GIMPLE statement iterators</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005faddresses_005ftaken"><code>gimple_addresses_taken</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fASM"><code>GIMPLE_ASM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fclear_005fvolatile"><code>gimple_asm_clear_volatile</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fclobber_005fop"><code>gimple_asm_clobber_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005finput_005fop"><code>gimple_asm_input_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fnclobbers"><code>gimple_asm_nclobbers</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fninputs"><code>gimple_asm_ninputs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fnoutputs"><code>gimple_asm_noutputs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005foutput_005fop"><code>gimple_asm_output_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fset_005fclobber_005fop"><code>gimple_asm_set_clobber_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fset_005finput_005fop"><code>gimple_asm_set_input_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fset_005foutput_005fop"><code>gimple_asm_set_output_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fset_005fvolatile"><code>gimple_asm_set_volatile</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fstring"><code>gimple_asm_string</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fasm_005fvolatile_005fp"><code>gimple_asm_volatile_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005fcast_005fp"><code>gimple_assign_cast_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005fcast_005fp-1"><code>gimple_assign_cast_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005flhs"><code>gimple_assign_lhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005flhs_005fptr"><code>gimple_assign_lhs_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005frhs1"><code>gimple_assign_rhs1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005frhs1_005fptr"><code>gimple_assign_rhs1_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005frhs2"><code>gimple_assign_rhs2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005frhs2_005fptr"><code>gimple_assign_rhs2_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005frhs3"><code>gimple_assign_rhs3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005frhs3_005fptr"><code>gimple_assign_rhs3_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005frhs_005fclass"><code>gimple_assign_rhs_class</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005frhs_005fcode"><code>gimple_assign_rhs_code</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005fset_005flhs"><code>gimple_assign_set_lhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005fset_005frhs1"><code>gimple_assign_set_rhs1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005fset_005frhs2"><code>gimple_assign_set_rhs2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fassign_005fset_005frhs3"><code>gimple_assign_set_rhs3</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbb"><code>gimple_bb</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbind_005fadd_005fseq"><code>gimple_bind_add_seq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbind_005fadd_005fstmt"><code>gimple_bind_add_stmt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbind_005fappend_005fvars"><code>gimple_bind_append_vars</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbind_005fblock"><code>gimple_bind_block</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbind_005fbody"><code>gimple_bind_body</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbind_005fset_005fblock"><code>gimple_bind_set_block</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbind_005fset_005fbody"><code>gimple_bind_set_body</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbind_005fset_005fvars"><code>gimple_bind_set_vars</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbind_005fvars"><code>gimple_bind_vars</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fblock"><code>gimple_block</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fasm"><code>gimple_build_asm</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fasm_005fvec"><code>gimple_build_asm_vec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASM"><code>GIMPLE_ASM</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fassign"><code>gimple_build_assign</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fassign_005fwith_005fops"><code>gimple_build_assign_with_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fbind"><code>gimple_build_bind</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fBIND"><code>GIMPLE_BIND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fcall"><code>gimple_build_call</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fcall_005ffrom_005ftree"><code>gimple_build_call_from_tree</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fcall_005fvec"><code>gimple_build_call_vec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fcatch"><code>gimple_build_catch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCATCH"><code>GIMPLE_CATCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fcond"><code>gimple_build_cond</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fcond_005ffrom_005ftree"><code>gimple_build_cond_from_tree</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fdebug_005fbind"><code>gimple_build_debug_bind</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005feh_005ffilter"><code>gimple_build_eh_filter</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fgoto"><code>gimple_build_goto</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fLABEL"><code>GIMPLE_LABEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005flabel"><code>gimple_build_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fLABEL"><code>GIMPLE_LABEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fnop"><code>gimple_build_nop</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fNOP"><code>GIMPLE_NOP</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fatomic_005fload"><code>gimple_build_omp_atomic_load</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fatomic_005fstore"><code>gimple_build_omp_atomic_store</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fSTORE"><code>GIMPLE_OMP_ATOMIC_STORE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fcontinue"><code>gimple_build_omp_continue</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fcritical"><code>gimple_build_omp_critical</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCRITICAL"><code>GIMPLE_OMP_CRITICAL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005ffor"><code>gimple_build_omp_for</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fmaster"><code>gimple_build_omp_master</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fMASTER"><code>GIMPLE_OMP_MASTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fordered"><code>gimple_build_omp_ordered</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fORDERED"><code>GIMPLE_OMP_ORDERED</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fparallel"><code>gimple_build_omp_parallel</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005freturn"><code>gimple_build_omp_return</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fRETURN"><code>GIMPLE_OMP_RETURN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fsection"><code>gimple_build_omp_section</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTION"><code>GIMPLE_OMP_SECTION</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fsections"><code>gimple_build_omp_sections</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fsections_005fswitch"><code>gimple_build_omp_sections_switch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fomp_005fsingle"><code>gimple_build_omp_single</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSINGLE"><code>GIMPLE_OMP_SINGLE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fresx"><code>gimple_build_resx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fRESX"><code>GIMPLE_RESX</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005freturn"><code>gimple_build_return</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fRETURN"><code>GIMPLE_RETURN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fswitch"><code>gimple_build_switch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005ftry"><code>gimple_build_try</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fbuild_005fwce"><code>gimple_build_wce</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fWITH_005fCLEANUP_005fEXPR"><code>GIMPLE_WITH_CLEANUP_EXPR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005farg"><code>gimple_call_arg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005farg_005fptr"><code>gimple_call_arg_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fcannot_005finline_005fp"><code>gimple_call_cannot_inline_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fchain"><code>gimple_call_chain</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fcopy_005fskip_005fargs"><code>gimple_call_copy_skip_args</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005ffn"><code>gimple_call_fn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005ffndecl"><code>gimple_call_fndecl</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005flhs"><code>gimple_call_lhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005flhs_005fptr"><code>gimple_call_lhs_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fmark_005funinlinable"><code>gimple_call_mark_uninlinable</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fnoreturn_005fp"><code>gimple_call_noreturn_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fnum_005fargs"><code>gimple_call_num_args</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005freturn_005ftype"><code>gimple_call_return_type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fset_005farg"><code>gimple_call_set_arg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fset_005fchain"><code>gimple_call_set_chain</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fset_005ffn"><code>gimple_call_set_fn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fset_005ffndecl"><code>gimple_call_set_fndecl</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fset_005flhs"><code>gimple_call_set_lhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005fset_005ftail"><code>gimple_call_set_tail</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcall_005ftail_005fp"><code>gimple_call_tail_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCALL"><code>GIMPLE_CALL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fCATCH"><code>GIMPLE_CATCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCATCH"><code>GIMPLE_CATCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcatch_005fhandler"><code>gimple_catch_handler</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCATCH"><code>GIMPLE_CATCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcatch_005fset_005fhandler"><code>gimple_catch_set_handler</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCATCH"><code>GIMPLE_CATCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcatch_005fset_005ftypes"><code>gimple_catch_set_types</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCATCH"><code>GIMPLE_CATCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcatch_005ftypes"><code>gimple_catch_types</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCATCH"><code>GIMPLE_CATCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcatch_005ftypes_005fptr"><code>gimple_catch_types_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCATCH"><code>GIMPLE_CATCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcode"><code>gimple_code</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fCOND"><code>GIMPLE_COND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005fcode"><code>gimple_cond_code</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005ffalse_005flabel"><code>gimple_cond_false_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005flhs"><code>gimple_cond_lhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005fmake_005ffalse"><code>gimple_cond_make_false</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005fmake_005ftrue"><code>gimple_cond_make_true</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005frhs"><code>gimple_cond_rhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005fset_005fcode"><code>gimple_cond_set_code</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005fset_005ffalse_005flabel"><code>gimple_cond_set_false_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005fset_005flhs"><code>gimple_cond_set_lhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005fset_005frhs"><code>gimple_cond_set_rhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005fset_005ftrue_005flabel"><code>gimple_cond_set_true_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcond_005ftrue_005flabel"><code>gimple_cond_true_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fCOND"><code>GIMPLE_COND</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fcopy"><code>gimple_copy</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fDEBUG_005fBIND"><code>GIMPLE_DEBUG_BIND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fdebug_005fbind_005fget_005fvalue"><code>gimple_debug_bind_get_value</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fdebug_005fbind_005fget_005fvalue_005fptr"><code>gimple_debug_bind_get_value_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fdebug_005fbind_005fget_005fvar"><code>gimple_debug_bind_get_var</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fdebug_005fbind_005fhas_005fvalue_005fp"><code>gimple_debug_bind_has_value_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fdebug_005fbind_005fp"><code>gimple_debug_bind_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fdebug_005fbind_005freset_005fvalue"><code>gimple_debug_bind_reset_value</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fdebug_005fbind_005fset_005fvalue"><code>gimple_debug_bind_set_value</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fdebug_005fbind_005fset_005fvar"><code>gimple_debug_bind_set_var</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fDEBUG"><code>GIMPLE_DEBUG</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fdef_005fops"><code>gimple_def_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005feh_005ffilter_005ffailure"><code>gimple_eh_filter_failure</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005feh_005ffilter_005fmust_005fnot_005fthrow"><code>gimple_eh_filter_must_not_throw</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005feh_005ffilter_005fset_005ffailure"><code>gimple_eh_filter_set_failure</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005feh_005ffilter_005fset_005fmust_005fnot_005fthrow"><code>gimple_eh_filter_set_must_not_throw</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005feh_005ffilter_005fset_005ftypes"><code>gimple_eh_filter_set_types</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005feh_005ffilter_005ftypes"><code>gimple_eh_filter_types</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005feh_005ffilter_005ftypes_005fptr"><code>gimple_eh_filter_types_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fEH_005fFILTER"><code>GIMPLE_EH_FILTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fexpr_005fcode"><code>gimple_expr_code</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fexpr_005ftype"><code>gimple_expr_type</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fgoto_005fdest"><code>gimple_goto_dest</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fLABEL"><code>GIMPLE_LABEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fgoto_005fset_005fdest"><code>gimple_goto_set_dest</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fLABEL"><code>GIMPLE_LABEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fhas_005fmem_005fops"><code>gimple_has_mem_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fhas_005fops"><code>gimple_has_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fhas_005fvolatile_005fops"><code>gimple_has_volatile_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fLABEL"><code>GIMPLE_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fLABEL"><code>GIMPLE_LABEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005flabel_005flabel"><code>gimple_label_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fLABEL"><code>GIMPLE_LABEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005flabel_005fset_005flabel"><code>gimple_label_set_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fLABEL"><code>GIMPLE_LABEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005floaded_005fsyms"><code>gimple_loaded_syms</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005flocus"><code>gimple_locus</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005flocus_005fempty_005fp"><code>gimple_locus_empty_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fmodified_005fp"><code>gimple_modified_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fNOP"><code>GIMPLE_NOP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fNOP"><code>GIMPLE_NOP</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fnop_005fp"><code>gimple_nop_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fNOP"><code>GIMPLE_NOP</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fno_005fwarning_005fp"><code>gimple_no_warning_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fnum_005fops"><code>gimple_num_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fnum_005fops-1"><code>gimple_num_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fATOMIC_005fLOAD"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fatomic_005fload_005flhs"><code>gimple_omp_atomic_load_lhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fatomic_005fload_005frhs"><code>gimple_omp_atomic_load_rhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fatomic_005fload_005fset_005flhs"><code>gimple_omp_atomic_load_set_lhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fatomic_005fload_005fset_005frhs"><code>gimple_omp_atomic_load_set_rhs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fLOAD"><code>GIMPLE_OMP_ATOMIC_LOAD</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fATOMIC_005fSTORE"><code>GIMPLE_OMP_ATOMIC_STORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fSTORE"><code>GIMPLE_OMP_ATOMIC_STORE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fatomic_005fstore_005fset_005fval"><code>gimple_omp_atomic_store_set_val</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fSTORE"><code>GIMPLE_OMP_ATOMIC_STORE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fatomic_005fstore_005fval"><code>gimple_omp_atomic_store_val</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fATOMIC_005fSTORE"><code>GIMPLE_OMP_ATOMIC_STORE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fbody"><code>gimple_omp_body</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fcontinue_005fcontrol_005fdef"><code>gimple_omp_continue_control_def</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fcontinue_005fcontrol_005fdef_005fptr"><code>gimple_omp_continue_control_def_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fcontinue_005fcontrol_005fuse"><code>gimple_omp_continue_control_use</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fcontinue_005fcontrol_005fuse_005fptr"><code>gimple_omp_continue_control_use_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fcontinue_005fset_005fcontrol_005fdef"><code>gimple_omp_continue_set_control_def</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fcontinue_005fset_005fcontrol_005fuse"><code>gimple_omp_continue_set_control_use</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCONTINUE"><code>GIMPLE_OMP_CONTINUE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fCRITICAL"><code>GIMPLE_OMP_CRITICAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCRITICAL"><code>GIMPLE_OMP_CRITICAL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fcritical_005fname"><code>gimple_omp_critical_name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCRITICAL"><code>GIMPLE_OMP_CRITICAL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fcritical_005fname_005fptr"><code>gimple_omp_critical_name_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCRITICAL"><code>GIMPLE_OMP_CRITICAL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fcritical_005fset_005fname"><code>gimple_omp_critical_set_name</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fCRITICAL"><code>GIMPLE_OMP_CRITICAL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fclauses"><code>gimple_omp_for_clauses</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fclauses_005fptr"><code>gimple_omp_for_clauses_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fcond"><code>gimple_omp_for_cond</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005ffinal"><code>gimple_omp_for_final</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005ffinal_005fptr"><code>gimple_omp_for_final_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fincr"><code>gimple_omp_for_incr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fincr_005fptr"><code>gimple_omp_for_incr_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005findex"><code>gimple_omp_for_index</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005findex_005fptr"><code>gimple_omp_for_index_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005finitial"><code>gimple_omp_for_initial</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005finitial_005fptr"><code>gimple_omp_for_initial_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fpre_005fbody"><code>gimple_omp_for_pre_body</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fset_005fclauses"><code>gimple_omp_for_set_clauses</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fset_005fcond"><code>gimple_omp_for_set_cond</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fset_005ffinal"><code>gimple_omp_for_set_final</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fset_005fincr"><code>gimple_omp_for_set_incr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fset_005findex"><code>gimple_omp_for_set_index</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fset_005finitial"><code>gimple_omp_for_set_initial</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005ffor_005fset_005fpre_005fbody"><code>gimple_omp_for_set_pre_body</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fFOR"><code>GIMPLE_OMP_FOR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fMASTER"><code>GIMPLE_OMP_MASTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fMASTER"><code>GIMPLE_OMP_MASTER</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fORDERED"><code>GIMPLE_OMP_ORDERED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fORDERED"><code>GIMPLE_OMP_ORDERED</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fchild_005ffn"><code>gimple_omp_parallel_child_fn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fchild_005ffn_005fptr"><code>gimple_omp_parallel_child_fn_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fclauses"><code>gimple_omp_parallel_clauses</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fclauses_005fptr"><code>gimple_omp_parallel_clauses_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fcombined_005fp"><code>gimple_omp_parallel_combined_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fdata_005farg"><code>gimple_omp_parallel_data_arg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fdata_005farg_005fptr"><code>gimple_omp_parallel_data_arg_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fset_005fchild_005ffn"><code>gimple_omp_parallel_set_child_fn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fset_005fclauses"><code>gimple_omp_parallel_set_clauses</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fset_005fcombined_005fp"><code>gimple_omp_parallel_set_combined_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fparallel_005fset_005fdata_005farg"><code>gimple_omp_parallel_set_data_arg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fRETURN"><code>GIMPLE_OMP_RETURN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fRETURN"><code>GIMPLE_OMP_RETURN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005freturn_005fnowait_005fp"><code>gimple_omp_return_nowait_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fRETURN"><code>GIMPLE_OMP_RETURN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005freturn_005fset_005fnowait"><code>gimple_omp_return_set_nowait</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fRETURN"><code>GIMPLE_OMP_RETURN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fSECTION"><code>GIMPLE_OMP_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTION"><code>GIMPLE_OMP_SECTION</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsections_005fclauses"><code>gimple_omp_sections_clauses</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsections_005fclauses_005fptr"><code>gimple_omp_sections_clauses_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsections_005fcontrol"><code>gimple_omp_sections_control</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsections_005fcontrol_005fptr"><code>gimple_omp_sections_control_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsections_005fset_005fclauses"><code>gimple_omp_sections_set_clauses</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsections_005fset_005fcontrol"><code>gimple_omp_sections_set_control</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTIONS"><code>GIMPLE_OMP_SECTIONS</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsection_005flast_005fp"><code>gimple_omp_section_last_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTION"><code>GIMPLE_OMP_SECTION</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsection_005fset_005flast"><code>gimple_omp_section_set_last</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSECTION"><code>GIMPLE_OMP_SECTION</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fset_005fbody"><code>gimple_omp_set_body</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fOMP_005fSINGLE"><code>GIMPLE_OMP_SINGLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSINGLE"><code>GIMPLE_OMP_SINGLE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsingle_005fclauses"><code>gimple_omp_single_clauses</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSINGLE"><code>GIMPLE_OMP_SINGLE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsingle_005fclauses_005fptr"><code>gimple_omp_single_clauses_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSINGLE"><code>GIMPLE_OMP_SINGLE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fomp_005fsingle_005fset_005fclauses"><code>gimple_omp_single_set_clauses</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fSINGLE"><code>GIMPLE_OMP_SINGLE</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fop"><code>gimple_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fop-1"><code>gimple_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fops"><code>gimple_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fops-1"><code>gimple_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fop_005fptr"><code>gimple_op_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fphi_005farg"><code>gimple_phi_arg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fphi_005fcapacity"><code>gimple_phi_capacity</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fphi_005fnum_005fargs"><code>gimple_phi_num_args</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fphi_005fresult"><code>gimple_phi_result</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fphi_005fresult_005fptr"><code>gimple_phi_result_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fphi_005fset_005farg"><code>gimple_phi_set_arg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fphi_005fset_005fresult"><code>gimple_phi_set_result</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fPHI"><code>GIMPLE_PHI</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fplf"><code>gimple_plf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fRESX"><code>GIMPLE_RESX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fRESX"><code>GIMPLE_RESX</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fresx_005fregion"><code>gimple_resx_region</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fRESX"><code>GIMPLE_RESX</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fresx_005fset_005fregion"><code>gimple_resx_set_region</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fRESX"><code>GIMPLE_RESX</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fRETURN"><code>GIMPLE_RETURN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fRETURN"><code>GIMPLE_RETURN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005freturn_005fretval"><code>gimple_return_retval</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fRETURN"><code>GIMPLE_RETURN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005freturn_005fset_005fretval"><code>gimple_return_set_retval</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fRETURN"><code>GIMPLE_RETURN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005fadd_005fseq"><code>gimple_seq_add_seq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005fadd_005fstmt"><code>gimple_seq_add_stmt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005falloc"><code>gimple_seq_alloc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005fcopy"><code>gimple_seq_copy</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005fdeep_005fcopy"><code>gimple_seq_deep_copy</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005fempty_005fp"><code>gimple_seq_empty_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005ffirst"><code>gimple_seq_first</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005finit"><code>gimple_seq_init</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005flast"><code>gimple_seq_last</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005freverse"><code>gimple_seq_reverse</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005fset_005ffirst"><code>gimple_seq_set_first</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005fset_005flast"><code>gimple_seq_set_last</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fseq_005fsingleton_005fp"><code>gimple_seq_singleton_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005fblock"><code>gimple_set_block</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005fdef_005fops"><code>gimple_set_def_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005fhas_005fvolatile_005fops"><code>gimple_set_has_volatile_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005flocus"><code>gimple_set_locus</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005fop"><code>gimple_set_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005fplf"><code>gimple_set_plf</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005fuse_005fops"><code>gimple_set_use_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005fvdef_005fops"><code>gimple_set_vdef_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005fvisited"><code>gimple_set_visited</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fset_005fvuse_005fops"><code>gimple_set_vuse_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fstatement_005fbase">gimple_statement_base</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tuple-representation">Tuple representation</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fstatement_005fwith_005fops">gimple_statement_with_ops</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tuple-representation">Tuple representation</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fstored_005fsyms"><code>gimple_stored_syms</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fswitch_005fdefault_005flabel"><code>gimple_switch_default_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fswitch_005findex"><code>gimple_switch_index</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fswitch_005flabel"><code>gimple_switch_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fswitch_005fnum_005flabels"><code>gimple_switch_num_labels</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fswitch_005fset_005fdefault_005flabel"><code>gimple_switch_set_default_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fswitch_005fset_005findex"><code>gimple_switch_set_index</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fswitch_005fset_005flabel"><code>gimple_switch_set_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fswitch_005fset_005fnum_005flabels"><code>gimple_switch_set_num_labels</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fSWITCH"><code>GIMPLE_SWITCH</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005ftry_005fcatch_005fis_005fcleanup"><code>gimple_try_catch_is_cleanup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005ftry_005fcleanup"><code>gimple_try_cleanup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005ftry_005feval"><code>gimple_try_eval</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005ftry_005fkind"><code>gimple_try_kind</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005ftry_005fset_005fcatch_005fis_005fcleanup"><code>gimple_try_set_catch_is_cleanup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005ftry_005fset_005fcleanup"><code>gimple_try_set_cleanup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005ftry_005fset_005feval"><code>gimple_try_set_eval</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fTRY"><code>GIMPLE_TRY</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fuse_005fops"><code>gimple_use_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fvdef_005fops"><code>gimple_vdef_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fvisited_005fp"><code>gimple_visited_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fvuse_005fops"><code>gimple_vuse_ops</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fwce_005fcleanup"><code>gimple_wce_cleanup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fWITH_005fCLEANUP_005fEXPR"><code>GIMPLE_WITH_CLEANUP_EXPR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fwce_005fcleanup_005feh_005fonly"><code>gimple_wce_cleanup_eh_only</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fWITH_005fCLEANUP_005fEXPR"><code>GIMPLE_WITH_CLEANUP_EXPR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fwce_005fset_005fcleanup"><code>gimple_wce_set_cleanup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fWITH_005fCLEANUP_005fEXPR"><code>GIMPLE_WITH_CLEANUP_EXPR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimple_005fwce_005fset_005fcleanup_005feh_005fonly"><code>gimple_wce_set_cleanup_eh_only</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fWITH_005fCLEANUP_005fEXPR"><code>GIMPLE_WITH_CLEANUP_EXPR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GIMPLE_005fWITH_005fCLEANUP_005fEXPR"><code>GIMPLE_WITH_CLEANUP_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fWITH_005fCLEANUP_005fEXPR"><code>GIMPLE_WITH_CLEANUP_EXPR</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimplification">gimplification</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimplification-1">gimplification</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Gimplification-pass">Gimplification pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimplifier">gimplifier</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimplify_005fassign"><code>gimplify_assign</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fASSIGN"><code>GIMPLE_ASSIGN</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimplify_005fexpr"><code>gimplify_expr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Gimplification-pass">Gimplification pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gimplify_005ffunction_005ftree"><code>gimplify_function_tree</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Gimplification-pass">Gimplification pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GLOBAL_005fINIT_005fPRIORITY"><code>GLOBAL_INIT_PRIORITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-global_005fregs"><code>global_regs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GO_005fIF_005fLEGITIMATE_005fADDRESS"><code>GO_IF_LEGITIMATE_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-greater-than">greater than</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-greater-than-1">greater than</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-greater-than-2">greater than</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fafter_005flabels"><code>gsi_after_labels</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fbb"><code>gsi_bb</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fcommit_005fedge_005finserts"><code>gsi_commit_edge_inserts</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fcommit_005fedge_005finserts-1"><code>gsi_commit_edge_inserts</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fcommit_005fone_005fedge_005finsert"><code>gsi_commit_one_edge_insert</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fend_005fp"><code>gsi_end_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fend_005fp-1"><code>gsi_end_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005ffor_005fstmt"><code>gsi_for_stmt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fafter"><code>gsi_insert_after</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fafter-1"><code>gsi_insert_after</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fbefore"><code>gsi_insert_before</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fbefore-1"><code>gsi_insert_before</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fon_005fedge"><code>gsi_insert_on_edge</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fon_005fedge-1"><code>gsi_insert_on_edge</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fon_005fedge_005fimmediate"><code>gsi_insert_on_edge_immediate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fseq_005fafter"><code>gsi_insert_seq_after</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fseq_005fbefore"><code>gsi_insert_seq_before</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005finsert_005fseq_005fon_005fedge"><code>gsi_insert_seq_on_edge</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005flast"><code>gsi_last</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005flast-1"><code>gsi_last</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005flast_005fbb"><code>gsi_last_bb</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005flink_005fafter"><code>gsi_link_after</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005flink_005fbefore"><code>gsi_link_before</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005flink_005fseq_005fafter"><code>gsi_link_seq_after</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005flink_005fseq_005fbefore"><code>gsi_link_seq_before</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fmove_005fafter"><code>gsi_move_after</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fmove_005fbefore"><code>gsi_move_before</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fmove_005fto_005fbb_005fend"><code>gsi_move_to_bb_end</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fnext"><code>gsi_next</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fnext-1"><code>gsi_next</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fone_005fbefore_005fend_005fp"><code>gsi_one_before_end_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fprev"><code>gsi_prev</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fprev-1"><code>gsi_prev</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fremove"><code>gsi_remove</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fremove-1"><code>gsi_remove</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005freplace"><code>gsi_replace</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fseq"><code>gsi_seq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fsplit_005fseq_005fafter"><code>gsi_split_seq_after</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fsplit_005fseq_005fbefore"><code>gsi_split_seq_before</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fstart"><code>gsi_start</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fstart-1"><code>gsi_start</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fstart_005fbb"><code>gsi_start_bb</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fstmt"><code>gsi_stmt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gsi_005fstmt_005fptr"><code>gsi_stmt_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gt"><code>gt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gt-and-attributes"><code>gt</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gtu"><code>gtu</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-gtu-and-attributes"><code>gtu</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GTY"><code>GTY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Information">Type Information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-GT_005fEXPR"><code>GT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-H">H</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-H-in-constraint">&lsquo;<samp>H</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAmode"><code>HAmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HANDLER"><code>HANDLER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HANDLER_005fBODY"><code>HANDLER_BODY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HANDLER_005fPARMS"><code>HANDLER_PARMS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HANDLE_005fPRAGMA_005fPACK_005fWITH_005fEXPANSION"><code>HANDLE_PRAGMA_PACK_WITH_EXPANSION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-hard-registers">hard registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fFRAME_005fPOINTER_005fIS_005fARG_005fPOINTER"><code>HARD_FRAME_POINTER_IS_ARG_POINTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fFRAME_005fPOINTER_005fIS_005fFRAME_005fPOINTER"><code>HARD_FRAME_POINTER_IS_FRAME_POINTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fFRAME_005fPOINTER_005fREGNUM"><code>HARD_FRAME_POINTER_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fREGNO_005fCALLER_005fSAVE_005fMODE"><code>HARD_REGNO_CALLER_SAVE_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Caller-Saves">Caller Saves</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fREGNO_005fCALL_005fPART_005fCLOBBERED"><code>HARD_REGNO_CALL_PART_CLOBBERED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fREGNO_005fMODE_005fOK"><code>HARD_REGNO_MODE_OK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fREGNO_005fNREGS"><code>HARD_REGNO_NREGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fREGNO_005fNREGS_005fHAS_005fPADDING"><code>HARD_REGNO_NREGS_HAS_PADDING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fREGNO_005fNREGS_005fWITH_005fPADDING"><code>HARD_REGNO_NREGS_WITH_PADDING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HARD_005fREGNO_005fRENAME_005fOK"><code>HARD_REGNO_RENAME_OK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAS_005fINIT_005fSECTION"><code>HAS_INIT_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAS_005fLONG_005fCOND_005fBRANCH"><code>HAS_LONG_COND_BRANCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAS_005fLONG_005fUNCOND_005fBRANCH"><code>HAS_LONG_UNCOND_BRANCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAVE_005fDOS_005fBASED_005fFILE_005fSYSTEM"><code>HAVE_DOS_BASED_FILE_SYSTEM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAVE_005fPOST_005fDECREMENT"><code>HAVE_POST_DECREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAVE_005fPOST_005fINCREMENT"><code>HAVE_POST_INCREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAVE_005fPOST_005fMODIFY_005fDISP"><code>HAVE_POST_MODIFY_DISP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAVE_005fPOST_005fMODIFY_005fREG"><code>HAVE_POST_MODIFY_REG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAVE_005fPRE_005fDECREMENT"><code>HAVE_PRE_DECREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAVE_005fPRE_005fINCREMENT"><code>HAVE_PRE_INCREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAVE_005fPRE_005fMODIFY_005fDISP"><code>HAVE_PRE_MODIFY_DISP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HAVE_005fPRE_005fMODIFY_005fREG"><code>HAVE_PRE_MODIFY_REG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HCmode"><code>HCmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HFmode"><code>HFmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-high"><code>high</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HImode"><code>HImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HImode_002c-in-insn"><code>HImode</code>, in <code>insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HONOR_005fREG_005fALLOC_005fORDER"><code>HONOR_REG_ALLOC_ORDER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Allocation-Order">Allocation Order</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-host-configuration">host configuration</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Config">Host Config</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-host-functions">host functions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Common">Host Common</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-host-hooks">host hooks</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Common">Host Common</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-host-makefile-fragment">host makefile fragment</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Fragment">Host Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fBIT_005fBUCKET"><code>HOST_BIT_BUCKET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fEXECUTABLE_005fSUFFIX"><code>HOST_EXECUTABLE_SUFFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fHOOKS_005fEXTRA_005fSIGNALS"><code>HOST_HOOKS_EXTRA_SIGNALS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Common">Host Common</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fHOOKS_005fGT_005fPCH_005fALLOC_005fGRANULARITY"><code>HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Common">Host Common</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fHOOKS_005fGT_005fPCH_005fGET_005fADDRESS"><code>HOST_HOOKS_GT_PCH_GET_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Common">Host Common</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fHOOKS_005fGT_005fPCH_005fUSE_005fADDRESS"><code>HOST_HOOKS_GT_PCH_USE_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Common">Host Common</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fLACKS_005fINODE_005fNUMBERS"><code>HOST_LACKS_INODE_NUMBERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fLONG_005fFORMAT"><code>HOST_LONG_FORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fLONG_005fLONG_005fFORMAT"><code>HOST_LONG_LONG_FORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fOBJECT_005fSUFFIX"><code>HOST_OBJECT_SUFFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOST_005fPTR_005fPRINTF"><code>HOST_PTR_PRINTF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HOT_005fTEXT_005fSECTION_005fNAME"><code>HOT_TEXT_SECTION_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-HQmode"><code>HQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-I">I</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-i-in-constraint">&lsquo;<samp>i</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-I-in-constraint">&lsquo;<samp>I</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-identifier">identifier</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Identifiers">Identifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IDENTIFIER_005fLENGTH"><code>IDENTIFIER_LENGTH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Identifiers">Identifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IDENTIFIER_005fNODE"><code>IDENTIFIER_NODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Identifiers">Identifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IDENTIFIER_005fOPNAME_005fP"><code>IDENTIFIER_OPNAME_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Identifiers">Identifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IDENTIFIER_005fPOINTER"><code>IDENTIFIER_POINTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Identifiers">Identifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IDENTIFIER_005fTYPENAME_005fP"><code>IDENTIFIER_TYPENAME_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Identifiers">Identifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IEEE-754_002d2008">IEEE 754-2008</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Decimal-float-library-routines">Decimal float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IFCVT_005fMACHDEP_005fINIT"><code>IFCVT_MACHDEP_INIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IFCVT_005fMODIFY_005fCANCEL"><code>IFCVT_MODIFY_CANCEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IFCVT_005fMODIFY_005fFINAL"><code>IFCVT_MODIFY_FINAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IFCVT_005fMODIFY_005fINSN"><code>IFCVT_MODIFY_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IFCVT_005fMODIFY_005fMULTIPLE_005fTESTS"><code>IFCVT_MODIFY_MULTIPLE_TESTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IFCVT_005fMODIFY_005fTESTS"><code>IFCVT_MODIFY_TESTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IF_005fCOND"><code>IF_COND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-if_005fmarked"><code>if_marked</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IF_005fSTMT"><code>IF_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-if_005fthen_005felse"><code>if_then_else</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-if_005fthen_005felse-and-attributes"><code>if_then_else</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-if_005fthen_005felse-usage"><code>if_then_else</code> usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IMAGPART_005fEXPR"><code>IMAGPART_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Immediate-Uses">Immediate Uses</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA-Operands">SSA Operands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-immediate_005foperand"><code>immediate_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IMMEDIATE_005fPREFIX"><code>IMMEDIATE_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-include"><code>include</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Including-Patterns">Including Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INCLUDE_005fDEFAULTS"><code>INCLUDE_DEFAULTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-inclusive_002dor_002c-bitwise">inclusive-or, bitwise</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INCOMING_005fFRAME_005fSP_005fOFFSET"><code>INCOMING_FRAME_SP_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INCOMING_005fREGNO"><code>INCOMING_REGNO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INCOMING_005fREG_005fPARM_005fSTACK_005fSPACE"><code>INCOMING_REG_PARM_STACK_SPACE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INCOMING_005fRETURN_005fADDR_005fRTX"><code>INCOMING_RETURN_ADDR_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INCOMING_005fSTACK_005fBOUNDARY"><code>INCOMING_STACK_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INDEX_005fREG_005fCLASS"><code>INDEX_REG_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-indirect_005fjump-instruction-pattern"><code>indirect_jump</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-indirect_005foperand"><code>indirect_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INDIRECT_005fREF"><code>INDIRECT_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-References">Storage References</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-initialization-routines">initialization routines</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Initialization">Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INITIAL_005fELIMINATION_005fOFFSET"><code>INITIAL_ELIMINATION_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Elimination">Elimination</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INITIAL_005fFRAME_005fADDRESS_005fRTX"><code>INITIAL_FRAME_ADDRESS_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INITIAL_005fFRAME_005fPOINTER_005fOFFSET"><code>INITIAL_FRAME_POINTER_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Elimination">Elimination</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INIT_005fARRAY_005fSECTION_005fASM_005fOP"><code>INIT_ARRAY_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INIT_005fCUMULATIVE_005fARGS"><code>INIT_CUMULATIVE_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INIT_005fCUMULATIVE_005fINCOMING_005fARGS"><code>INIT_CUMULATIVE_INCOMING_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INIT_005fCUMULATIVE_005fLIBCALL_005fARGS"><code>INIT_CUMULATIVE_LIBCALL_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INIT_005fENVIRONMENT"><code>INIT_ENVIRONMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INIT_005fEXPANDERS"><code>INIT_EXPANDERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Per_002dFunction-Data">Per-Function Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INIT_005fEXPR"><code>INIT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-init_005fmachine_005fstatus"><code>init_machine_status</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Per_002dFunction-Data">Per-Function Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-init_005fone_005flibfunc"><code>init_one_libfunc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INIT_005fSECTION_005fASM_005fOP"><code>INIT_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INIT_005fSECTION_005fASM_005fOP-1"><code>INIT_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-inlining">inlining</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insert_005finsn_005fon_005fedge"><code>insert_insn_on_edge</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn"><code>insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-and-_002ff"><code>insn</code> and &lsquo;<samp>/f</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-and-_002fj"><code>insn</code> and &lsquo;<samp>/j</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-and-_002fs"><code>insn</code> and &lsquo;<samp>/s</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-and-_002fs-1"><code>insn</code> and &lsquo;<samp>/s</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-and-_002fu"><code>insn</code> and &lsquo;<samp>/u</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-and-_002fv"><code>insn</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-attributes">insn attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Attributes">Insn Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-canonicalization">insn canonicalization</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-includes">insn includes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Including-Patterns">Including Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-lengths_002c-computing">insn lengths, computing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Lengths">Insn Lengths</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-notes_002c-notes">insn notes, notes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn-splitting">insn splitting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Splitting">Insn Splitting</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn_002dattr_002eh"><code>insn-attr.h</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Defining-Attributes">Defining Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insns">insns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insns_002c-generating">insns, generating</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insns_002c-recognizing">insns, recognizing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INSN_005fANNULLED_005fBRANCH_005fP"><code>INSN_ANNULLED_BRANCH_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INSN_005fCODE"><code>INSN_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INSN_005fDELETED_005fP"><code>INSN_DELETED_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INSN_005fFROM_005fTARGET_005fP"><code>INSN_FROM_TARGET_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insn_005flist"><code>insn_list</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INSN_005fREFERENCES_005fARE_005fDELAYED"><code>INSN_REFERENCES_ARE_DELAYED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INSN_005fSETS_005fARE_005fDELAYED"><code>INSN_SETS_ARE_DELAYED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INSN_005fUID"><code>INSN_UID</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INSN_005fVAR_005fLOCATION"><code>INSN_VAR_LOCATION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-instruction-attributes">instruction attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Attributes">Insn Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-instruction-latency-time">instruction latency time</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-instruction-latency-time-1">instruction latency time</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-instruction-latency-time-2">instruction latency time</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-instruction-patterns">instruction patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Patterns">Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-instruction-splitting">instruction splitting</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Splitting">Insn Splitting</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insv-instruction-pattern"><code>insv</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insvm-instruction-pattern"><code>insv<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-insvmisalignm-instruction-pattern"><code>insvmisalign<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-int-iterators-in-_002emd-files">int iterators in <samp>.md</samp> files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Int-Iterators">Int Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT16_005fTYPE"><code>INT16_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT32_005fTYPE"><code>INT32_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT64_005fTYPE"><code>INT64_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT8_005fTYPE"><code>INT8_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INTEGER_005fCST"><code>INTEGER_CST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INTEGER_005fTYPE"><code>INTEGER_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Interdependence-of-Patterns">Interdependence of Patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dependent-Patterns">Dependent Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-interfacing-to-GCC-output">interfacing to GCC output</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-interlock-delays">interlock delays</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-intermediate-representation-lowering">intermediate representation lowering</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INTMAX_005fTYPE"><code>INTMAX_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INTPTR_005fTYPE"><code>INTPTR_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-introduction">introduction</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Top">Top</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT_005fFAST16_005fTYPE"><code>INT_FAST16_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT_005fFAST32_005fTYPE"><code>INT_FAST32_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT_005fFAST64_005fTYPE"><code>INT_FAST64_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT_005fFAST8_005fTYPE"><code>INT_FAST8_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT_005fLEAST16_005fTYPE"><code>INT_LEAST16_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT_005fLEAST32_005fTYPE"><code>INT_LEAST32_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT_005fLEAST64_005fTYPE"><code>INT_LEAST64_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT_005fLEAST8_005fTYPE"><code>INT_LEAST8_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INT_005fTYPE_005fSIZE"><code>INT_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-INVOKE_005f_005fmain"><code>INVOKE__main</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-in_005fstruct"><code>in_struct</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-in_005fstruct_002c-in-code_005flabel-and-note"><code>in_struct</code>, in <code>code_label</code> and <code>note</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-in_005fstruct_002c-in-insn-and-jump_005finsn-and-call_005finsn"><code>in_struct</code>, in <code>insn</code> and <code>jump_insn</code> and <code>call_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-in_005fstruct_002c-in-insn_002c-jump_005finsn-and-call_005finsn"><code>in_struct</code>, in <code>insn</code>, <code>jump_insn</code> and <code>call_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-in_005fstruct_002c-in-subreg"><code>in_struct</code>, in <code>subreg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ior"><code>ior</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ior-and-attributes"><code>ior</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ior_002c-canonicalization-of"><code>ior</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-iorm3-instruction-pattern"><code>ior<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IRA_005fHARD_005fREGNO_005fADD_005fCOST_005fMULTIPLIER"><code>IRA_HARD_REGNO_ADD_COST_MULTIPLIER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Allocation-Order">Allocation Order</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IS_005fASM_005fLOGICAL_005fLINE_005fSEPARATOR"><code>IS_ASM_LOGICAL_LINE_SEPARATOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005faddressable"><code>is_gimple_addressable</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fasm_005fval"><code>is_gimple_asm_val</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fassign"><code>is_gimple_assign</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fcall"><code>is_gimple_call</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fcall_005faddr"><code>is_gimple_call_addr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fconstant"><code>is_gimple_constant</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fdebug"><code>is_gimple_debug</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fip_005finvariant"><code>is_gimple_ip_invariant</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fip_005finvariant_005faddress"><code>is_gimple_ip_invariant_address</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fmem_005fref_005faddr"><code>is_gimple_mem_ref_addr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fmin_005finvariant"><code>is_gimple_min_invariant</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fomp"><code>is_gimple_omp</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE_005fOMP_005fPARALLEL"><code>GIMPLE_OMP_PARALLEL</code></a></td></tr>
<tr><td></td><td valign="top"><a href="#index-is_005fgimple_005fval"><code>is_gimple_val</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-iterators-in-_002emd-files">iterators in <samp>.md</samp> files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Iterators">Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IV-analysis-on-GIMPLE">IV analysis on GIMPLE</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-evolutions">Scalar evolutions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-IV-analysis-on-RTL">IV analysis on RTL</a>:</td><td>&nbsp;</td><td valign="top"><a href="#loop_002div">loop-iv</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-J">J</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-JMP_005fBUF_005fSIZE"><code>JMP_BUF_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump"><code>jump</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump-instruction-pattern"><code>jump</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump-instruction-patterns">jump instruction patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Jump-Patterns">Jump Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump-instructions-and-set">jump instructions and <code>set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump_002c-in-call_005finsn"><code>jump</code>, in <code>call_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump_002c-in-insn"><code>jump</code>, in <code>insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump_002c-in-mem"><code>jump</code>, in <code>mem</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Jumps">Jumps</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Jumps">Jumps</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-JUMP_005fALIGN"><code>JUMP_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump_005finsn"><code>jump_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump_005finsn-and-_002ff"><code>jump_insn</code> and &lsquo;<samp>/f</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump_005finsn-and-_002fs"><code>jump_insn</code> and &lsquo;<samp>/s</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump_005finsn-and-_002fs-1"><code>jump_insn</code> and &lsquo;<samp>/s</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump_005finsn-and-_002fu"><code>jump_insn</code> and &lsquo;<samp>/u</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-jump_005finsn-and-_002fv"><code>jump_insn</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-JUMP_005fLABEL"><code>JUMP_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-JUMP_005fTABLES_005fIN_005fTEXT_005fSECTION"><code>JUMP_TABLES_IN_TEXT_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-L">L</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-LABEL_005fALIGN"><code>LABEL_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LABEL_005fALIGN_005fAFTER_005fBARRIER"><code>LABEL_ALIGN_AFTER_BARRIER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LABEL_005fALTERNATE_005fNAME"><code>LABEL_ALTERNATE_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LABEL_005fALT_005fENTRY_005fP"><code>LABEL_ALT_ENTRY_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LABEL_005fDECL"><code>LABEL_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LABEL_005fKIND"><code>LABEL_KIND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LABEL_005fNUSES"><code>LABEL_NUSES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LABEL_005fPRESERVE_005fP"><code>LABEL_PRESERVE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-label_005fref"><code>label_ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-label_005fref-and-_002fv"><code>label_ref</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-label_005fref_002c-RTL-sharing"><code>label_ref</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LABEL_005fREF_005fNONLOCAL_005fP"><code>LABEL_REF_NONLOCAL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-language_002ddependent-trees">language-dependent trees</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Language_002ddependent-trees">Language-dependent trees</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-language_002dindependent-intermediate-representation">language-independent intermediate representation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lang_005fhooks_002egimplify_005fexpr"><code>lang_hooks.gimplify_expr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Gimplification-pass">Gimplification pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lang_005fhooks_002eparse_005ffile"><code>lang_hooks.parse_file</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-large-return-values">large return values</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LARGEST_005fEXPONENT_005fIS_005fNORMAL"><code>LARGEST_EXPONENT_IS_NORMAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LAST_005fSTACK_005fREG"><code>LAST_STACK_REG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Registers">Stack Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LAST_005fVIRTUAL_005fREGISTER"><code>LAST_VIRTUAL_REGISTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lceilmn2"><code>lceil<var>m</var><var>n</var>2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LCSSA">LCSSA</a>:</td><td>&nbsp;</td><td valign="top"><a href="#LCSSA">LCSSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LDD_005fSUFFIX"><code>LDD_SUFFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LD_005fFINI_005fSWITCH"><code>LD_FINI_SWITCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LD_005fINIT_005fSWITCH"><code>LD_INIT_SWITCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-le"><code>le</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-le-and-attributes"><code>le</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-leaf-functions">leaf functions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Leaf-Functions">Leaf Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-leaf_005ffunction_005fp"><code>leaf_function_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LEAF_005fREGISTERS"><code>LEAF_REGISTERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Leaf-Functions">Leaf Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LEAF_005fREG_005fREMAP"><code>LEAF_REG_REMAP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Leaf-Functions">Leaf Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-left-rotate">left rotate</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-left-shift">left shift</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LEGITIMATE_005fPIC_005fOPERAND_005fP"><code>LEGITIMATE_PIC_OPERAND_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#PIC">PIC</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LEGITIMIZE_005fRELOAD_005fADDRESS"><code>LEGITIMIZE_RELOAD_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-length"><code>length</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-less-than">less than</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-less-than-or-equal">less than or equal</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-leu"><code>leu</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-leu-and-attributes"><code>leu</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LE_005fEXPR"><code>LE_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lfloormn2"><code>lfloor<var>m</var><var>n</var>2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIB2FUNCS_005fEXTRA"><code>LIB2FUNCS_EXTRA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBCALL_005fVALUE"><code>LIBCALL_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-libgcc_002ea"><samp>libgcc.a</samp></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBGCC2_005fCFLAGS"><code>LIBGCC2_CFLAGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBGCC2_005fGNU_005fPREFIX"><code>LIBGCC2_GNU_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBGCC2_005fHAS_005fDF_005fMODE"><code>LIBGCC2_HAS_DF_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBGCC2_005fHAS_005fTF_005fMODE"><code>LIBGCC2_HAS_TF_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBGCC2_005fHAS_005fXF_005fMODE"><code>LIBGCC2_HAS_XF_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBGCC2_005fLONG_005fDOUBLE_005fTYPE_005fSIZE"><code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBGCC2_005fUNWIND_005fATTRIBUTE"><code>LIBGCC2_UNWIND_ATTRIBUTE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBGCC_005fSPEC"><code>LIBGCC_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-library-subroutine-names">library subroutine names</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIBRARY_005fPATH_005fENV"><code>LIBRARY_PATH_ENV</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIB_005fSPEC"><code>LIB_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LIMIT_005fRELOAD_005fCLASS"><code>LIMIT_RELOAD_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Linear-loop-transformations-framework">Linear loop transformations framework</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Lambda">Lambda</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LINK_005fCOMMAND_005fSPEC"><code>LINK_COMMAND_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LINK_005fEH_005fSPEC"><code>LINK_EH_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LINK_005fGCC_005fC_005fSEQUENCE_005fSPEC"><code>LINK_GCC_C_SEQUENCE_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LINK_005fLIBGCC_005fSPECIAL_005f1"><code>LINK_LIBGCC_SPECIAL_1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LINK_005fSPEC"><code>LINK_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-list">list</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Containers">Containers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Liveness-representation">Liveness representation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Liveness-information">Liveness information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-load-address-instruction">load address instruction</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOAD_005fEXTEND_005fOP"><code>LOAD_EXTEND_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-load_005fmultiple-instruction-pattern"><code>load_multiple</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Local-Register-Allocator-_0028LRA_0029">Local Register Allocator (LRA)</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-passes">RTL passes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOCAL_005fALIGNMENT"><code>LOCAL_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOCAL_005fCLASS_005fP"><code>LOCAL_CLASS_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOCAL_005fDECL_005fALIGNMENT"><code>LOCAL_DECL_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOCAL_005fINCLUDE_005fDIR"><code>LOCAL_INCLUDE_DIR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOCAL_005fLABEL_005fPREFIX"><code>LOCAL_LABEL_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOCAL_005fREGNO"><code>LOCAL_REGNO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Logical-Operators">Logical Operators</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Logical-Operators">Logical Operators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-logical_002dand_002c-bitwise">logical-and, bitwise</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOGICAL_005fOP_005fNON_005fSHORT_005fCIRCUIT"><code>LOGICAL_OP_NON_SHORT_CIRCUIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-logm2-instruction-pattern"><code>log<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOG_005fLINKS"><code>LOG_LINKS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-longjmp-and-automatic-variables"><code>longjmp</code> and automatic variables</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LONG_005fACCUM_005fTYPE_005fSIZE"><code>LONG_ACCUM_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LONG_005fDOUBLE_005fTYPE_005fSIZE"><code>LONG_DOUBLE_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LONG_005fFRACT_005fTYPE_005fSIZE"><code>LONG_FRACT_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LONG_005fLONG_005fACCUM_005fTYPE_005fSIZE"><code>LONG_LONG_ACCUM_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LONG_005fLONG_005fFRACT_005fTYPE_005fSIZE"><code>LONG_LONG_FRACT_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LONG_005fLONG_005fTYPE_005fSIZE"><code>LONG_LONG_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LONG_005fTYPE_005fSIZE"><code>LONG_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Loop-analysis">Loop analysis</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Loop-representation">Loop representation</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Loop-manipulation">Loop manipulation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Loop-manipulation">Loop manipulation</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Loop-querying">Loop querying</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Loop-querying">Loop querying</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Loop-representation">Loop representation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Loop-representation">Loop representation</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Loop_002dclosed-SSA-form">Loop-closed SSA form</a>:</td><td>&nbsp;</td><td valign="top"><a href="#LCSSA">LCSSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-looping-instruction-patterns">looping instruction patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Looping-Patterns">Looping Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOOP_005fALIGN"><code>LOOP_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LOOP_005fEXPR"><code>LOOP_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lowering_002c-language_002ddependent-intermediate-representation">lowering, language-dependent intermediate representation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lo_005fsum"><code>lo_sum</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lrintmn2"><code>lrint<var>m</var><var>n</var>2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lroundmn2"><code>lround<var>m</var><var>n</var>2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lshiftrt"><code>lshiftrt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lshiftrt-and-attributes"><code>lshiftrt</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LSHIFT_005fEXPR"><code>LSHIFT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lshrm3-instruction-pattern"><code>lshr<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lt"><code>lt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lt-and-attributes"><code>lt</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LTGT_005fEXPR"><code>LTGT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-lto">lto</a>:</td><td>&nbsp;</td><td valign="top"><a href="#LTO">LTO</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ltrans">ltrans</a>:</td><td>&nbsp;</td><td valign="top"><a href="#LTO">LTO</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ltu"><code>ltu</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-LT_005fEXPR"><code>LT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-M">M</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-m-in-constraint">&lsquo;<samp>m</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-machine-attributes">machine attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-machine-description-macros">machine description macros</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Macros">Target Macros</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-machine-descriptions">machine descriptions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Desc">Machine Desc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-machine-mode-conversions">machine mode conversions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-machine-modes">machine modes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-machine-specific-constraints">machine specific constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Constraints">Machine Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-machine_002dindependent-predicates">machine-independent predicates</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-macros_002c-target-description">macros, target description</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Macros">Target Macros</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-maddmn4-instruction-pattern"><code>madd<var>m</var><var>n</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-makefile-fragment">makefile fragment</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Fragments">Fragments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-makefile-targets">makefile targets</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Makefile">Makefile</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MAKE_005fDECL_005fONE_005fONLY"><code>MAKE_DECL_ONE_ONLY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-make_005fsafe_005ffrom"><code>make_safe_from</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expander-Definitions">Expander Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MALLOC_005fABI_005fALIGNMENT"><code>MALLOC_ABI_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-marking-roots">marking roots</a>:</td><td>&nbsp;</td><td valign="top"><a href="#GGC-Roots">GGC Roots</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mark_005fhook"><code>mark_hook</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MASK_005fRETURN_005fADDR"><code>MASK_RETURN_ADDR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-matching-constraint">matching constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-matching-operands">matching operands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Template">Output Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005fdup"><code>match_dup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005fdup-1"><code>match_dup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#define_005fpeephole2">define_peephole2</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005fdup-and-attributes"><code>match_dup</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Lengths">Insn Lengths</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005foperand"><code>match_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005foperand-and-attributes"><code>match_operand</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005foperator"><code>match_operator</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005fop_005fdup"><code>match_op_dup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005fparallel"><code>match_parallel</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005fpar_005fdup"><code>match_par_dup</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005fscratch"><code>match_scratch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005fscratch-1"><code>match_scratch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#define_005fpeephole2">define_peephole2</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-match_005ftest-and-attributes"><code>match_test</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-math-library">math library</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-math_002c-in-RTL">math, in RTL</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-matherr"><code>matherr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MATH_005fLIBRARY"><code>MATH_LIBRARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-maxm3-instruction-pattern"><code>max<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MAX_005fBITS_005fPER_005fWORD"><code>MAX_BITS_PER_WORD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MAX_005fCONDITIONAL_005fEXECUTE"><code>MAX_CONDITIONAL_EXECUTE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MAX_005fFIXED_005fMODE_005fSIZE"><code>MAX_FIXED_MODE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MAX_005fMOVE_005fMAX"><code>MAX_MOVE_MAX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MAX_005fOFILE_005fALIGNMENT"><code>MAX_OFILE_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MAX_005fREGS_005fPER_005fADDRESS"><code>MAX_REGS_PER_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MAX_005fSTACK_005fALIGNMENT"><code>MAX_STACK_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-maybe_005fundef"><code>maybe_undef</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-may_005ftrap_005fp_002c-tree_005fcould_005ftrap_005fp"><code>may_trap_p, tree_could_trap_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mcount"><code>mcount</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profiling">Profiling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MD_005fCAN_005fREDIRECT_005fBRANCH"><code>MD_CAN_REDIRECT_BRANCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MD_005fEXEC_005fPREFIX"><code>MD_EXEC_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MD_005fFALLBACK_005fFRAME_005fSTATE_005fFOR"><code>MD_FALLBACK_FRAME_STATE_FOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MD_005fHANDLE_005fUNWABI"><code>MD_HANDLE_UNWABI</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MD_005fSTARTFILE_005fPREFIX"><code>MD_STARTFILE_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MD_005fSTARTFILE_005fPREFIX_005f1"><code>MD_STARTFILE_PREFIX_1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mem"><code>mem</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mem-and-_002fc"><code>mem</code> and &lsquo;<samp>/c</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mem-and-_002ff"><code>mem</code> and &lsquo;<samp>/f</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mem-and-_002fj"><code>mem</code> and &lsquo;<samp>/j</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mem-and-_002fu"><code>mem</code> and &lsquo;<samp>/u</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mem-and-_002fv"><code>mem</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mem_002c-RTL-sharing"><code>mem</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-memory-model">memory model</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Memory-model">Memory model</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-memory-reference_002c-nonoffsettable">memory reference, nonoffsettable</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-memory-references-in-constraints">memory references in constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-memory_005fbarrier-instruction-pattern"><code>memory_barrier</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEMORY_005fMOVE_005fCOST"><code>MEMORY_MOVE_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-memory_005foperand"><code>memory_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fADDR_005fSPACE"><code>MEM_ADDR_SPACE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fALIAS_005fSET"><code>MEM_ALIAS_SET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fALIGN"><code>MEM_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fEXPR"><code>MEM_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fKEEP_005fALIAS_005fSET_005fP"><code>MEM_KEEP_ALIAS_SET_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fNOTRAP_005fP"><code>MEM_NOTRAP_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fOFFSET"><code>MEM_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fOFFSET_005fKNOWN_005fP"><code>MEM_OFFSET_KNOWN_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fPOINTER"><code>MEM_POINTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fREADONLY_005fP"><code>MEM_READONLY_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fREF"><code>MEM_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-References">Storage References</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mem_005fsignal_005ffencemode-instruction-pattern"><code>mem_signal_fence<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fSIZE"><code>MEM_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fSIZE_005fKNOWN_005fP"><code>MEM_SIZE_KNOWN_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mem_005fthread_005ffencemode-instruction-pattern"><code>mem_thread_fence<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MEM_005fVOLATILE_005fP"><code>MEM_VOLATILE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-METHOD_005fTYPE"><code>METHOD_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MINIMUM_005fALIGNMENT"><code>MINIMUM_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MINIMUM_005fATOMIC_005fALIGNMENT"><code>MINIMUM_ATOMIC_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-minm3-instruction-pattern"><code>min<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-minus"><code>minus</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-minus-and-attributes"><code>minus</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-minus_002c-canonicalization-of"><code>minus</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MINUS_005fEXPR"><code>MINUS_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MIN_005fUNITS_005fPER_005fWORD"><code>MIN_UNITS_PER_WORD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MIPS-coprocessor_002ddefinition-macros">MIPS coprocessor-definition macros</a>:</td><td>&nbsp;</td><td valign="top"><a href="#MIPS-Coprocessors">MIPS Coprocessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mod"><code>mod</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mod-and-attributes"><code>mod</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mode-classes">mode classes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mode-iterators-in-_002emd-files">mode iterators in <samp>.md</samp> files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Iterators">Mode Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mode-switching">mode switching</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Switching">Mode Switching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODES_005fTIEABLE_005fP"><code>MODES_TIEABLE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fACCUM"><code>MODE_ACCUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fAFTER"><code>MODE_AFTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Switching">Mode Switching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fBASE_005fREG_005fCLASS"><code>MODE_BASE_REG_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fBASE_005fREG_005fREG_005fCLASS"><code>MODE_BASE_REG_REG_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fCC"><code>MODE_CC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fCC-1"><code>MODE_CC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#MODE_005fCC-Condition-Codes">MODE_CC Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fCODE_005fBASE_005fREG_005fCLASS"><code>MODE_CODE_BASE_REG_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fCOMPLEX_005fFLOAT"><code>MODE_COMPLEX_FLOAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fCOMPLEX_005fINT"><code>MODE_COMPLEX_INT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fDECIMAL_005fFLOAT"><code>MODE_DECIMAL_FLOAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fENTRY"><code>MODE_ENTRY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Switching">Mode Switching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fEXIT"><code>MODE_EXIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Switching">Mode Switching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fFLOAT"><code>MODE_FLOAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fFRACT"><code>MODE_FRACT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fFUNCTION"><code>MODE_FUNCTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fINT"><code>MODE_INT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fNEEDED"><code>MODE_NEEDED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Switching">Mode Switching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fPARTIAL_005fINT"><code>MODE_PARTIAL_INT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fPRIORITY_005fTO_005fMODE"><code>MODE_PRIORITY_TO_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Switching">Mode Switching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fRANDOM"><code>MODE_RANDOM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fUACCUM"><code>MODE_UACCUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODE_005fUFRACT"><code>MODE_UFRACT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-modifiers-in-constraints">modifiers in constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Modifiers">Modifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODIFY_005fEXPR"><code>MODIFY_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MODIFY_005fJNI_005fMETHOD_005fCALL"><code>MODIFY_JNI_METHOD_CALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-modm3-instruction-pattern"><code>mod<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-modulo-scheduling">modulo scheduling</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-passes">RTL passes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MOVE_005fBY_005fPIECES_005fP"><code>MOVE_BY_PIECES_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MOVE_005fMAX"><code>MOVE_MAX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MOVE_005fMAX_005fPIECES"><code>MOVE_MAX_PIECES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MOVE_005fRATIO"><code>MOVE_RATIO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-movm-instruction-pattern"><code>mov<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-movmemm-instruction-pattern"><code>movmem<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-movmisalignm-instruction-pattern"><code>movmisalign<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-movmodecc-instruction-pattern"><code>mov<var>mode</var>cc</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-movstr-instruction-pattern"><code>movstr</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-movstrictm-instruction-pattern"><code>movstrict<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-msubmn4-instruction-pattern"><code>msub<var>m</var><var>n</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mulhisi3-instruction-pattern"><code>mulhisi3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mulm3-instruction-pattern"><code>mul<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mulqihi3-instruction-pattern"><code>mulqihi3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mulsidi3-instruction-pattern"><code>mulsidi3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mult"><code>mult</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mult-and-attributes"><code>mult</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mult_002c-canonicalization-of"><code>mult</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-mult_002c-canonicalization-of-1"><code>mult</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTIARCH_005fDIRNAME"><code>MULTIARCH_DIRNAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTILIB_005fDEFAULTS"><code>MULTILIB_DEFAULTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTILIB_005fDIRNAMES"><code>MULTILIB_DIRNAMES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTILIB_005fEXCEPTIONS"><code>MULTILIB_EXCEPTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTILIB_005fEXTRA_005fOPTS"><code>MULTILIB_EXTRA_OPTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTILIB_005fMATCHES"><code>MULTILIB_MATCHES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTILIB_005fOPTIONS"><code>MULTILIB_OPTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTILIB_005fOSDIRNAMES"><code>MULTILIB_OSDIRNAMES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTILIB_005fREQUIRED"><code>MULTILIB_REQUIRED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTILIB_005fREUSE"><code>MULTILIB_REUSE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-multiple-alternative-constraints">multiple alternative constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Multi_002dAlternative">Multi-Alternative</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULTIPLE_005fSYMBOL_005fSPACES"><code>MULTIPLE_SYMBOL_SPACES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-multiplication">multiplication</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-multiplication-with-signed-saturation">multiplication with signed saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-multiplication-with-unsigned-saturation">multiplication with unsigned saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULT_005fEXPR"><code>MULT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-MULT_005fHIGHPART_005fEXPR"><code>MULT_HIGHPART_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-N">N</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-n-in-constraint">&lsquo;<samp>n</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-name">name</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Identifiers">Identifiers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-named-address-spaces">named address spaces</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Named-Address-Spaces">Named Address Spaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-named-patterns-and-conditions">named patterns and conditions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Patterns">Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-names_002c-pattern">names, pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-namespace_002c-scope">namespace, scope</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Namespaces">Namespaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NAMESPACE_005fDECL"><code>NAMESPACE_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NAMESPACE_005fDECL-1"><code>NAMESPACE_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Namespaces">Namespaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NATIVE_005fSYSTEM_005fHEADER_005fCOMPONENT"><code>NATIVE_SYSTEM_HEADER_COMPONENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ne"><code>ne</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ne-and-attributes"><code>ne</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nearbyintm2-instruction-pattern"><code>nearbyint<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-neg"><code>neg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-neg-and-attributes"><code>neg</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-neg_002c-canonicalization-of"><code>neg</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NEGATE_005fEXPR"><code>NEGATE_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-negation">negation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-negation-with-signed-saturation">negation with signed saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-negation-with-unsigned-saturation">negation with unsigned saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-negm2-instruction-pattern"><code>neg<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nested-functions_002c-trampolines-for">nested functions, trampolines for</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nested_005fptr"><code>nested_ptr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-next_005fbb_002c-prev_005fbb_002c-FOR_005fEACH_005fBB_002c-FOR_005fALL_005fBB"><code>next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NEXT_005fINSN"><code>NEXT_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NEXT_005fOBJC_005fRUNTIME"><code>NEXT_OBJC_RUNTIME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NE_005fEXPR"><code>NE_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nil">nil</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NM_005fFLAGS"><code>NM_FLAGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nondeterministic-finite-state-automaton">nondeterministic finite state automaton</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nonimmediate_005foperand"><code>nonimmediate_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nonlocal-goto-handler">nonlocal goto handler</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nonlocal_005fgoto-instruction-pattern"><code>nonlocal_goto</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nonlocal_005fgoto_005freceiver-instruction-pattern"><code>nonlocal_goto_receiver</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nonmemory_005foperand"><code>nonmemory_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nonoffsettable-memory-reference">nonoffsettable memory reference</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NON_005fLVALUE_005fEXPR"><code>NON_LVALUE_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-nop-instruction-pattern"><code>nop</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOP_005fEXPR"><code>NOP_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-normal-predicates">normal predicates</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Predicates">Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-not"><code>not</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-not-and-attributes"><code>not</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-not-equal">not equal</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-not_002c-canonicalization-of"><code>not</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-note"><code>note</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-note-and-_002fi"><code>note</code> and &lsquo;<samp>/i</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-note-and-_002fv"><code>note</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fBASIC_005fBLOCK"><code>NOTE_INSN_BASIC_BLOCK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fBASIC_005fBLOCK-1"><code>NOTE_INSN_BASIC_BLOCK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fBLOCK_005fBEG"><code>NOTE_INSN_BLOCK_BEG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fBLOCK_005fEND"><code>NOTE_INSN_BLOCK_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fDELETED"><code>NOTE_INSN_DELETED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fDELETED_005fLABEL"><code>NOTE_INSN_DELETED_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fEH_005fREGION_005fBEG"><code>NOTE_INSN_EH_REGION_BEG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fEH_005fREGION_005fEND"><code>NOTE_INSN_EH_REGION_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fFUNCTION_005fBEG"><code>NOTE_INSN_FUNCTION_BEG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fLOOP_005fBEG"><code>NOTE_INSN_LOOP_BEG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fLOOP_005fCONT"><code>NOTE_INSN_LOOP_CONT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fLOOP_005fEND"><code>NOTE_INSN_LOOP_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fLOOP_005fVTOP"><code>NOTE_INSN_LOOP_VTOP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fINSN_005fVAR_005fLOCATION"><code>NOTE_INSN_VAR_LOCATION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fLINE_005fNUMBER"><code>NOTE_LINE_NUMBER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fSOURCE_005fFILE"><code>NOTE_SOURCE_FILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTE_005fVAR_005fLOCATION"><code>NOTE_VAR_LOCATION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NOTICE_005fUPDATE_005fCC"><code>NOTICE_UPDATE_CC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#CC0-Condition-Codes">CC0 Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fDBX_005fBNSYM_005fENSYM"><code>NO_DBX_BNSYM_ENSYM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Hooks">DBX Hooks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fDBX_005fFUNCTION_005fEND"><code>NO_DBX_FUNCTION_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Hooks">DBX Hooks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fDBX_005fGCC_005fMARKER"><code>NO_DBX_GCC_MARKER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Names-and-DBX">File Names and DBX</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fDBX_005fMAIN_005fSOURCE_005fDIRECTORY"><code>NO_DBX_MAIN_SOURCE_DIRECTORY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Names-and-DBX">File Names and DBX</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fDOLLAR_005fIN_005fLABEL"><code>NO_DOLLAR_IN_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fDOT_005fIN_005fLABEL"><code>NO_DOT_IN_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fFUNCTION_005fCSE"><code>NO_FUNCTION_CSE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fIMPLICIT_005fEXTERN_005fC"><code>NO_IMPLICIT_EXTERN_C</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fPROFILE_005fCOUNTERS"><code>NO_PROFILE_COUNTERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profiling">Profiling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NO_005fREGS"><code>NO_REGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Number-of-iterations-analysis">Number of iterations analysis</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Number-of-iterations">Number of iterations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NUM_005fMACHINE_005fMODES"><code>NUM_MACHINE_MODES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-NUM_005fMODES_005fFOR_005fMODE_005fSWITCHING"><code>NUM_MODES_FOR_MODE_SWITCHING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Switching">Mode Switching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-N_005fREG_005fCLASSES"><code>N_REG_CLASSES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-O">O</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-o-in-constraint">&lsquo;<samp>o</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OBJC_005fGEN_005fMETHOD_005fLABEL"><code>OBJC_GEN_METHOD_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OBJC_005fJBLEN"><code>OBJC_JBLEN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OBJECT_005fFORMAT_005fCOFF"><code>OBJECT_FORMAT_COFF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-offsettable-address">offsettable address</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OFFSET_005fTYPE"><code>OFFSET_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OImode"><code>OImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Omega-a-solver-for-linear-programming-problems">Omega a solver for linear programming problems</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Omega">Omega</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fATOMIC"><code>OMP_ATOMIC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fCLAUSE"><code>OMP_CLAUSE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fCONTINUE"><code>OMP_CONTINUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fCRITICAL"><code>OMP_CRITICAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fFOR"><code>OMP_FOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fMASTER"><code>OMP_MASTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fORDERED"><code>OMP_ORDERED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fPARALLEL"><code>OMP_PARALLEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fRETURN"><code>OMP_RETURN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fSECTION"><code>OMP_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fSECTIONS"><code>OMP_SECTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OMP_005fSINGLE"><code>OMP_SINGLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#OpenMP">OpenMP</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-one_005fcmplm2-instruction-pattern"><code>one_cmpl<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-operand-access">operand access</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Operand-Access-Routines">Operand Access Routines</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA-Operands">SSA Operands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-operand-constraints">operand constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constraints">Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Operand-Iterators">Operand Iterators</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA-Operands">SSA Operands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-operand-predicates">operand predicates</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Predicates">Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-operand-substitution">operand substitution</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Template">Output Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Operands">Operands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Operands">Operands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-operands">operands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA-Operands">SSA Operands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-operands-1"><code>operands</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Patterns">Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-operator-predicates">operator predicates</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Predicates">Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-optc_002dgen_002eawk">&lsquo;<samp>optc-gen.awk</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Options">Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Optimization-infrastructure-for-GIMPLE">Optimization infrastructure for GIMPLE</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tree-SSA">Tree SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OPTIMIZE_005fMODE_005fSWITCHING"><code>OPTIMIZE_MODE_SWITCHING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Mode-Switching">Mode Switching</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-option-specification-files">option specification files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Options">Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-optional-hardware-or-system-features">optional hardware or system features</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-options_002c-directory-search">options, directory search</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Including-Patterns">Including Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OPTION_005fDEFAULT_005fSPECS"><code>OPTION_DEFAULT_SPECS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-order-of-register-allocation">order of register allocation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Allocation-Order">Allocation Order</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ordered_005fcomparison_005foperator"><code>ordered_comparison_operator</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ORDERED_005fEXPR"><code>ORDERED_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Ordering-of-Patterns">Ordering of Patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pattern-Ordering">Pattern Ordering</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ORIGINAL_005fREGNO"><code>ORIGINAL_REGNO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-other-register-constraints">other register constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-outgoing_005fargs_005fsize"><code>outgoing_args_size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OUTGOING_005fREGNO"><code>OUTGOING_REGNO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OUTGOING_005fREG_005fPARM_005fSTACK_005fSPACE"><code>OUTGOING_REG_PARM_STACK_SPACE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-output-of-assembler-code">output of assembler code</a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-output-statements">output statements</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Statement">Output Statement</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-output-templates">output templates</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Template">Output Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-output_005fasm_005finsn"><code>output_asm_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Statement">Output Statement</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OUTPUT_005fQUOTED_005fSTRING"><code>OUTPUT_QUOTED_STRING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OVERLAPPING_005fREGISTER_005fNAMES"><code>OVERLAPPING_REGISTER_NAMES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OVERLOAD"><code>OVERLOAD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OVERRIDE_005fABI_005fFORMAT"><code>OVERRIDE_ABI_FORMAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OVL_005fCURRENT"><code>OVL_CURRENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-OVL_005fNEXT"><code>OVL_NEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-P">P</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-p-in-constraint">&lsquo;<samp>p</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PAD_005fVARARGS_005fDOWN"><code>PAD_VARARGS_DOWN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-parallel"><code>parallel</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-parameters_002c-c_002b_002b-abi">parameters, c++ abi</a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-parameters_002c-miscellaneous">parameters, miscellaneous</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-parameters_002c-precompiled-headers">parameters, precompiled headers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#PCH-Target">PCH Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-paramn_005fis"><code>param<var>n</var>_is</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-param_005fis"><code>param_is</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-parity"><code>parity</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-paritym2-instruction-pattern"><code>parity<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PARM_005fBOUNDARY"><code>PARM_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PARM_005fDECL"><code>PARM_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PARSE_005fLDD_005fOUTPUT"><code>PARSE_LDD_OUTPUT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-passes-and-files-of-the-compiler">passes and files of the compiler</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Passes">Passes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-passing-arguments">passing arguments</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pass_005fduplicate_005fcomputed_005fgotos"><code>pass_duplicate_computed_gotos</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PATH_005fSEPARATOR"><code>PATH_SEPARATOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PATTERN"><code>PATTERN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pattern-conditions">pattern conditions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Patterns">Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pattern-names">pattern names</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Pattern-Ordering">Pattern Ordering</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Pattern-Ordering">Pattern Ordering</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-patterns">patterns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Patterns">Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pc"><code>pc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pc-and-attributes"><code>pc</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Lengths">Insn Lengths</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pc_002c-RTL-sharing"><code>pc</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PCC_005fBITFIELD_005fTYPE_005fMATTERS"><code>PCC_BITFIELD_TYPE_MATTERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PCC_005fSTATIC_005fSTRUCT_005fRETURN"><code>PCC_STATIC_STRUCT_RETURN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PC_005fREGNUM"><code>PC_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pc_005frtx"><code>pc_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PDImode"><code>PDImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-peephole-optimization_002c-RTL-representation">peephole optimization, RTL representation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-peephole-optimizer-definitions">peephole optimizer definitions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Peephole-Definitions">Peephole Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-per_002dfunction-data">per-function data</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Per_002dFunction-Data">Per-Function Data</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-percent-sign">percent sign</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Template">Output Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PHI-nodes">PHI nodes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PHI_005fARG_005fDEF"><code>PHI_ARG_DEF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PHI_005fARG_005fEDGE"><code>PHI_ARG_EDGE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PHI_005fARG_005fELT"><code>PHI_ARG_ELT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PHI_005fNUM_005fARGS"><code>PHI_NUM_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PHI_005fRESULT"><code>PHI_RESULT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PIC">PIC</a>:</td><td>&nbsp;</td><td valign="top"><a href="#PIC">PIC</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PIC_005fOFFSET_005fTABLE_005fREGNUM"><code>PIC_OFFSET_TABLE_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#PIC">PIC</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PIC_005fOFFSET_005fTABLE_005fREG_005fCALL_005fCLOBBERED"><code>PIC_OFFSET_TABLE_REG_CALL_CLOBBERED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#PIC">PIC</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pipeline-hazard-recognizer">pipeline hazard recognizer</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pipeline-hazard-recognizer-1">pipeline hazard recognizer</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Plugins">Plugins</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Plugins">Plugins</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-plus"><code>plus</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-plus-and-attributes"><code>plus</code> and attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expressions">Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-plus_002c-canonicalization-of"><code>plus</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PLUS_005fEXPR"><code>PLUS_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Pmode"><code>Pmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pmode_005fregister_005foperand"><code>pmode_register_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pointer">pointer</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-POINTERS_005fEXTEND_005fUNSIGNED"><code>POINTERS_EXTEND_UNSIGNED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-POINTER_005fPLUS_005fEXPR"><code>POINTER_PLUS_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-POINTER_005fSIZE"><code>POINTER_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-POINTER_005fTYPE"><code>POINTER_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-popcount"><code>popcount</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-popcountm2-instruction-pattern"><code>popcount<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pops_005fargs"><code>pops_args</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pop_005foperand"><code>pop_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-portability">portability</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Portability">Portability</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-position-independent-code">position independent code</a>:</td><td>&nbsp;</td><td valign="top"><a href="#PIC">PIC</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-POSTDECREMENT_005fEXPR"><code>POSTDECREMENT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-POSTINCREMENT_005fEXPR"><code>POSTINCREMENT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-post_005fdec"><code>post_dec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-post_005finc"><code>post_inc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-post_005fmodify"><code>post_modify</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-post_005forder_005fcompute_002c-inverted_005fpost_005forder_005fcompute_002c-walk_005fdominator_005ftree"><code>post_order_compute, inverted_post_order_compute, walk_dominator_tree</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-POWI_005fMAX_005fMULTS"><code>POWI_MAX_MULTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-powm3-instruction-pattern"><code>pow<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pragma"><code>pragma</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PREDECREMENT_005fEXPR"><code>PREDECREMENT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-predefined-macros">predefined macros</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-predicates">predicates</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Predicates">Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-predicates-and-machine-modes">predicates and machine modes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Predicates">Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-predication">predication</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conditional-Execution">Conditional Execution</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-predict_002edef"><code>predict.def</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PREFERRED_005fDEBUGGING_005fTYPE"><code>PREFERRED_DEBUGGING_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#All-Debuggers">All Debuggers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PREFERRED_005fRELOAD_005fCLASS"><code>PREFERRED_RELOAD_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PREFERRED_005fSTACK_005fBOUNDARY"><code>PREFERRED_STACK_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-prefetch"><code>prefetch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-prefetch-and-_002fv"><code>prefetch</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-prefetch-instruction-pattern"><code>prefetch</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PREFETCH_005fSCHEDULE_005fBARRIER_005fP"><code>PREFETCH_SCHEDULE_BARRIER_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PREINCREMENT_005fEXPR"><code>PREINCREMENT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-presence_005fset"><code>presence_set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-preserving-SSA-form">preserving SSA form</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-preserving-virtual-SSA-form">preserving virtual SSA form</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pretend_005fargs_005fsize"><code>pretend_args_size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-prev_005factive_005finsn"><code>prev_active_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#define_005fpeephole">define_peephole</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PREV_005fINSN"><code>PREV_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pre_005fdec"><code>pre_dec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PRE_005fGCC3_005fDWARF_005fFRAME_005fREGISTERS"><code>PRE_GCC3_DWARF_FRAME_REGISTERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pre_005finc"><code>pre_inc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pre_005fmodify"><code>pre_modify</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PRINT_005fOPERAND"><code>PRINT_OPERAND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PRINT_005fOPERAND_005fADDRESS"><code>PRINT_OPERAND_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PRINT_005fOPERAND_005fPUNCT_005fVALID_005fP"><code>PRINT_OPERAND_PUNCT_VALID_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-probe_005fstack-instruction-pattern"><code>probe_stack</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-probe_005fstack_005faddress-instruction-pattern"><code>probe_stack_address</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-processor-functional-units">processor functional units</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-processor-functional-units-1">processor functional units</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-processor-pipeline-description">processor pipeline description</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-product">product</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-profile-feedback">profile feedback</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-profile-representation">profile representation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PROFILE_005fBEFORE_005fPROLOGUE"><code>PROFILE_BEFORE_PROLOGUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profiling">Profiling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PROFILE_005fHOOK"><code>PROFILE_HOOK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profiling">Profiling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-profiling_002c-code-generation">profiling, code generation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profiling">Profiling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-program-counter">program counter</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-prologue">prologue</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-prologue-instruction-pattern"><code>prologue</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PROMOTE_005fMODE"><code>PROMOTE_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pseudo-registers">pseudo registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PSImode"><code>PSImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PTRDIFF_005fTYPE"><code>PTRDIFF_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-purge_005fdead_005fedges"><code>purge_dead_edges</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-purge_005fdead_005fedges-1"><code>purge_dead_edges</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-push-address-instruction">push address instruction</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-pushm1-instruction-pattern"><code>push<var>m</var>1</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PUSH_005fARGS"><code>PUSH_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PUSH_005fARGS_005fREVERSED"><code>PUSH_ARGS_REVERSED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-push_005foperand"><code>push_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-push_005freload"><code>push_reload</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PUSH_005fROUNDING"><code>PUSH_ROUNDING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PUT_005fCODE"><code>PUT_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PUT_005fMODE"><code>PUT_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PUT_005fREG_005fNOTE_005fKIND"><code>PUT_REG_NOTE_KIND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-PUT_005fSDB_005f"><code>PUT_SDB_</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-Q">Q</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-QCmode"><code>QCmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-QFmode"><code>QFmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-QImode"><code>QImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-QImode_002c-in-insn"><code>QImode</code>, in <code>insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-QQmode"><code>QQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-qualified-type">qualified type</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-qualified-type-1">qualified type</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-querying-function-unit-reservations">querying function unit reservations</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-question-mark">question mark</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Multi_002dAlternative">Multi-Alternative</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-quotient">quotient</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-R">R</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-r-in-constraint">&lsquo;<samp>r</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RDIV_005fEXPR"><code>RDIV_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-READONLY_005fDATA_005fSECTION_005fASM_005fOP"><code>READONLY_DATA_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-real-operands">real operands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA-Operands">SSA Operands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REALPART_005fEXPR"><code>REALPART_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fARITHMETIC"><code>REAL_ARITHMETIC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fCST"><code>REAL_CST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fLIBGCC_005fSPEC"><code>REAL_LIBGCC_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fNM_005fFILE_005fNAME"><code>REAL_NM_FILE_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fTYPE"><code>REAL_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUES_005fEQUAL"><code>REAL_VALUES_EQUAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUES_005fLESS"><code>REAL_VALUES_LESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fABS"><code>REAL_VALUE_ABS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fATOF"><code>REAL_VALUE_ATOF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fFIX"><code>REAL_VALUE_FIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fFROM_005fINT"><code>REAL_VALUE_FROM_INT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fISINF"><code>REAL_VALUE_ISINF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fISNAN"><code>REAL_VALUE_ISNAN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fNEGATE"><code>REAL_VALUE_NEGATE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fNEGATIVE"><code>REAL_VALUE_NEGATIVE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fTO_005fINT"><code>REAL_VALUE_TO_INT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fTO_005fTARGET_005fDECIMAL128"><code>REAL_VALUE_TO_TARGET_DECIMAL128</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fTO_005fTARGET_005fDECIMAL32"><code>REAL_VALUE_TO_TARGET_DECIMAL32</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fTO_005fTARGET_005fDECIMAL64"><code>REAL_VALUE_TO_TARGET_DECIMAL64</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fTO_005fTARGET_005fDOUBLE"><code>REAL_VALUE_TO_TARGET_DOUBLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fTO_005fTARGET_005fLONG_005fDOUBLE"><code>REAL_VALUE_TO_TARGET_LONG_DOUBLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fTO_005fTARGET_005fSINGLE"><code>REAL_VALUE_TO_TARGET_SINGLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fTYPE"><code>REAL_VALUE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REAL_005fVALUE_005fUNSIGNED_005fFIX"><code>REAL_VALUE_UNSIGNED_FIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Floating-Point">Floating Point</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-recognizing-insns">recognizing insns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-recog_005fdata_002eoperand"><code>recog_data.operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RECORD_005fTYPE"><code>RECORD_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RECORD_005fTYPE-1"><code>RECORD_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-redirect_005fedge_005fand_005fbranch"><code>redirect_edge_and_branch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-redirect_005fedge_005fand_005fbranch_002c-redirect_005fjump"><code>redirect_edge_and_branch, redirect_jump</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reduc_005fsmax_005fm-instruction-pattern"><code>reduc_smax_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reduc_005fsmin_005fm-instruction-pattern"><code>reduc_smin_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reduc_005fsplus_005fm-instruction-pattern"><code>reduc_splus_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reduc_005fumax_005fm-instruction-pattern"><code>reduc_umax_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reduc_005fumin_005fm-instruction-pattern"><code>reduc_umin_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reduc_005fuplus_005fm-instruction-pattern"><code>reduc_uplus_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reference">reference</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REFERENCE_005fTYPE"><code>REFERENCE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reg"><code>reg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reg-and-_002ff"><code>reg</code> and &lsquo;<samp>/f</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reg-and-_002fi"><code>reg</code> and &lsquo;<samp>/i</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reg-and-_002fv"><code>reg</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reg_002c-RTL-sharing"><code>reg</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-regclass_005ffor_005fconstraint"><code>regclass_for_constraint</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C-Constraint-Interface">C Constraint Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-register-allocation-order">register allocation order</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Allocation-Order">Allocation Order</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-register-class-definitions">register class definitions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-register-class-preference-constraints">register class preference constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Class-Preferences">Class Preferences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-register-pairs">register pairs</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Register-Transfer-Language-_0028RTL_0029">Register Transfer Language (RTL)</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL">RTL</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-register-usage">register usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Registers">Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-registers-arguments">registers arguments</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-registers-in-constraints">registers in constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGISTER_005fMOVE_005fCOST"><code>REGISTER_MOVE_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGISTER_005fNAMES"><code>REGISTER_NAMES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-register_005foperand"><code>register_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGISTER_005fPREFIX"><code>REGISTER_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGISTER_005fTARGET_005fPRAGMAS"><code>REGISTER_TARGET_PRAGMAS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGMODE_005fNATURAL_005fSIZE"><code>REGMODE_NATURAL_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGNO_005fMODE_005fCODE_005fOK_005fFOR_005fBASE_005fP"><code>REGNO_MODE_CODE_OK_FOR_BASE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGNO_005fMODE_005fOK_005fFOR_005fBASE_005fP"><code>REGNO_MODE_OK_FOR_BASE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGNO_005fMODE_005fOK_005fFOR_005fREG_005fBASE_005fP"><code>REGNO_MODE_OK_FOR_REG_BASE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGNO_005fOK_005fFOR_005fBASE_005fP"><code>REGNO_OK_FOR_BASE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGNO_005fOK_005fFOR_005fINDEX_005fP"><code>REGNO_OK_FOR_INDEX_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REGNO_005fREG_005fCLASS"><code>REGNO_REG_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-regs_005fever_005flive"><code>regs_ever_live</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-regular-expressions">regular expressions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-regular-expressions-1">regular expressions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fALLOC_005fORDER"><code>REG_ALLOC_ORDER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Allocation-Order">Allocation Order</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fBR_005fPRED"><code>REG_BR_PRED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fBR_005fPROB"><code>REG_BR_PROB</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fBR_005fPROB_005fBASE_002c-BB_005fFREQ_005fBASE_002c-count"><code>REG_BR_PROB_BASE, BB_FREQ_BASE, count</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fBR_005fPROB_005fBASE_002c-EDGE_005fFREQUENCY"><code>REG_BR_PROB_BASE, EDGE_FREQUENCY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fCC_005fSETTER"><code>REG_CC_SETTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fCC_005fUSER"><code>REG_CC_USER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reg_005fclass_005fcontents"><code>reg_class_contents</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fCLASS_005fCONTENTS"><code>REG_CLASS_CONTENTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fCLASS_005fFROM_005fCONSTRAINT"><code>REG_CLASS_FROM_CONSTRAINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fCLASS_005fFROM_005fLETTER"><code>REG_CLASS_FROM_LETTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Old-Constraints">Old Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fCLASS_005fNAMES"><code>REG_CLASS_NAMES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fCROSSING_005fJUMP"><code>REG_CROSSING_JUMP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fDEAD"><code>REG_DEAD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fDEAD_002c-REG_005fUNUSED"><code>REG_DEAD, REG_UNUSED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Liveness-information">Liveness information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fDEP_005fANTI"><code>REG_DEP_ANTI</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fDEP_005fOUTPUT"><code>REG_DEP_OUTPUT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fDEP_005fTRUE"><code>REG_DEP_TRUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fEH_005fREGION_002c-EDGE_005fABNORMAL_005fCALL"><code>REG_EH_REGION, EDGE_ABNORMAL_CALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fEQUAL"><code>REG_EQUAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fEQUIV"><code>REG_EQUIV</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fEXPR"><code>REG_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fFRAME_005fRELATED_005fEXPR"><code>REG_FRAME_RELATED_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fFUNCTION_005fVALUE_005fP"><code>REG_FUNCTION_VALUE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fINC"><code>REG_INC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reg_005flabel-and-_002fv"><code>reg_label</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fLABEL_005fOPERAND"><code>REG_LABEL_OPERAND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fLABEL_005fTARGET"><code>REG_LABEL_TARGET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reg_005fnames"><code>reg_names</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reg_005fnames-1"><code>reg_names</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fNONNEG"><code>REG_NONNEG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fNOTES"><code>REG_NOTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fNOTE_005fKIND"><code>REG_NOTE_KIND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fOFFSET"><code>REG_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fOK_005fSTRICT"><code>REG_OK_STRICT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fPARM_005fSTACK_005fSPACE"><code>REG_PARM_STACK_SPACE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fPARM_005fSTACK_005fSPACE_002c-and-TARGET_005fFUNCTION_005fARG"><code>REG_PARM_STACK_SPACE</code>, and <code>TARGET_FUNCTION_ARG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fPOINTER"><code>REG_POINTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fSETJMP"><code>REG_SETJMP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fUNUSED"><code>REG_UNUSED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fUSERVAR_005fP"><code>REG_USERVAR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fVALUE_005fIN_005fUNWIND_005fCONTEXT"><code>REG_VALUE_IN_UNWIND_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REG_005fWORDS_005fBIG_005fENDIAN"><code>REG_WORDS_BIG_ENDIAN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-relative-costs">relative costs</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RELATIVE_005fPREFIX_005fNOT_005fLINKDIR"><code>RELATIVE_PREFIX_NOT_LINKDIR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reloading">reloading</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-passes">RTL passes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reload_005fcompleted"><code>reload_completed</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reload_005fin-instruction-pattern"><code>reload_in</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reload_005fin_005fprogress"><code>reload_in_progress</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reload_005fout-instruction-pattern"><code>reload_out</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-remainder">remainder</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-remainderm3-instruction-pattern"><code>remainder<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reorder"><code>reorder</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-representation-of-RTL">representation of RTL</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL">RTL</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reservation-delays">reservation delays</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-restore_005fstack_005fblock-instruction-pattern"><code>restore_stack_block</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-restore_005fstack_005ffunction-instruction-pattern"><code>restore_stack_function</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-restore_005fstack_005fnonlocal-instruction-pattern"><code>restore_stack_nonlocal</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-rest_005fof_005fdecl_005fcompilation"><code>rest_of_decl_compilation</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-rest_005fof_005ftype_005fcompilation"><code>rest_of_type_compilation</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Parsing-pass">Parsing pass</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RESULT_005fDECL"><code>RESULT_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-return"><code>return</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-return-instruction-pattern"><code>return</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-return-values-in-registers">return values in registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-returning-aggregate-values">returning aggregate values</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-returning-structures-and-unions">returning structures and unions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RETURN_005fADDRESS_005fPOINTER_005fREGNUM"><code>RETURN_ADDRESS_POINTER_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RETURN_005fADDR_005fIN_005fPREVIOUS_005fFRAME"><code>RETURN_ADDR_IN_PREVIOUS_FRAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RETURN_005fADDR_005fOFFSET"><code>RETURN_ADDR_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RETURN_005fADDR_005fRTX"><code>RETURN_ADDR_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RETURN_005fEXPR"><code>RETURN_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RETURN_005fSTMT"><code>RETURN_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-return_005fval"><code>return_val</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-return_005fval_002c-in-call_005finsn"><code>return_val</code>, in <code>call_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-return_005fval_002c-in-reg"><code>return_val</code>, in <code>reg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-return_005fval_002c-in-symbol_005fref"><code>return_val</code>, in <code>symbol_ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-reverse-probability">reverse probability</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REVERSE_005fCONDITION"><code>REVERSE_CONDITION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#MODE_005fCC-Condition-Codes">MODE_CC Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-REVERSIBLE_005fCC_005fMODE"><code>REVERSIBLE_CC_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#MODE_005fCC-Condition-Codes">MODE_CC Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-right-rotate">right rotate</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-right-shift">right shift</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-rintm2-instruction-pattern"><code>rint<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RISC">RISC</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RISC-1">RISC</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-roots_002c-marking">roots, marking</a>:</td><td>&nbsp;</td><td valign="top"><a href="#GGC-Roots">GGC Roots</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-rotate">rotate</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-rotate-1"><code>rotate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-rotatert"><code>rotatert</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-rotlm3-instruction-pattern"><code>rotl<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-rotrm3-instruction-pattern"><code>rotr<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-roundm2-instruction-pattern"><code>round<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ROUND_005fDIV_005fEXPR"><code>ROUND_DIV_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ROUND_005fMOD_005fEXPR"><code>ROUND_MOD_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ROUND_005fTOWARDS_005fZERO"><code>ROUND_TOWARDS_ZERO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ROUND_005fTYPE_005fALIGN"><code>ROUND_TYPE_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RSHIFT_005fEXPR"><code>RSHIFT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-addition">RTL addition</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-addition-with-signed-saturation">RTL addition with signed saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-addition-with-unsigned-saturation">RTL addition with unsigned saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-classes">RTL classes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Classes">RTL Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-comparison">RTL comparison</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-comparison-operations">RTL comparison operations</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-constant-expression-types">RTL constant expression types</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-constants">RTL constants</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-declarations">RTL declarations</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Declarations">RTL Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-difference">RTL difference</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-expression">RTL expression</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-expressions-for-arithmetic">RTL expressions for arithmetic</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-format">RTL format</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Classes">RTL Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-format-characters">RTL format characters</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Classes">RTL Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-function_002dcall-insns">RTL function-call insns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Calls">Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-insn-template">RTL insn template</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Template">RTL Template</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-integers">RTL integers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-memory-expressions">RTL memory expressions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-object-types">RTL object types</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-postdecrement">RTL postdecrement</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-postincrement">RTL postincrement</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-predecrement">RTL predecrement</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-preincrement">RTL preincrement</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Incdec">Incdec</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-register-expressions">RTL register expressions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-representation">RTL representation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL">RTL</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-side-effect-expressions">RTL side effect expressions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-strings">RTL strings</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-structure-sharing-assumptions">RTL structure sharing assumptions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-subtraction">RTL subtraction</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-subtraction-with-signed-saturation">RTL subtraction with signed saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-subtraction-with-unsigned-saturation">RTL subtraction with unsigned saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-sum">RTL sum</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL-vectors">RTL vectors</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL_005fCONST_005fCALL_005fP"><code>RTL_CONST_CALL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL_005fCONST_005fOR_005fPURE_005fCALL_005fP"><code>RTL_CONST_OR_PURE_CALL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL_005fLOOPING_005fCONST_005fOR_005fPURE_005fCALL_005fP"><code>RTL_LOOPING_CONST_OR_PURE_CALL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTL_005fPURE_005fCALL_005fP"><code>RTL_PURE_CALL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTX-_0028See-RTL_0029">RTX (See RTL)</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Objects">RTL Objects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTX-codes_002c-classes-of">RTX codes, classes of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Classes">RTL Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-RTX_005fFRAME_005fRELATED_005fP"><code>RTX_FRAME_RELATED_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-run_002dtime-conventions">run-time conventions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-run_002dtime-target-specification">run-time target specification</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-S">S</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-s-in-constraint">&lsquo;<samp>s</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-same_005ftype_005fp"><code>same_type_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SAmode"><code>SAmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-satfractmn2-instruction-pattern"><code>satfract<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-satfractunsmn2-instruction-pattern"><code>satfractuns<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-satisfies_005fconstraint_005f"><code>satisfies_constraint_</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C-Constraint-Interface">C Constraint Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sat_005ffract"><code>sat_fract</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SAVE_005fEXPR"><code>SAVE_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-save_005fstack_005fblock-instruction-pattern"><code>save_stack_block</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-save_005fstack_005ffunction-instruction-pattern"><code>save_stack_function</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-save_005fstack_005fnonlocal-instruction-pattern"><code>save_stack_nonlocal</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SBSS_005fSECTION_005fASM_005fOP"><code>SBSS_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Scalar-evolutions">Scalar evolutions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-evolutions">Scalar evolutions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-scalars_002c-returned-as-values">scalars, returned as values</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SCHED_005fGROUP_005fP"><code>SCHED_GROUP_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SCmode"><code>SCmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-scratch"><code>scratch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-scratch-operands">scratch operands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-scratch_002c-RTL-sharing"><code>scratch</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-scratch_005foperand"><code>scratch_operand</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine_002dIndependent-Predicates">Machine-Independent Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SDATA_005fSECTION_005fASM_005fOP"><code>SDATA_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SDB_005fALLOW_005fFORWARD_005fREFERENCES"><code>SDB_ALLOW_FORWARD_REFERENCES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SDB_005fALLOW_005fUNKNOWN_005fREFERENCES"><code>SDB_ALLOW_UNKNOWN_REFERENCES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SDB_005fDEBUGGING_005fINFO"><code>SDB_DEBUGGING_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SDB_005fDELIM"><code>SDB_DELIM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SDB_005fOUTPUT_005fSOURCE_005fLINE"><code>SDB_OUTPUT_SOURCE_LINE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SDmode"><code>SDmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sdot_005fprodm-instruction-pattern"><code>sdot_prod<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-search-options">search options</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Including-Patterns">Including Patterns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SECONDARY_005fINPUT_005fRELOAD_005fCLASS"><code>SECONDARY_INPUT_RELOAD_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SECONDARY_005fMEMORY_005fNEEDED"><code>SECONDARY_MEMORY_NEEDED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SECONDARY_005fMEMORY_005fNEEDED_005fMODE"><code>SECONDARY_MEMORY_NEEDED_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SECONDARY_005fMEMORY_005fNEEDED_005fRTX"><code>SECONDARY_MEMORY_NEEDED_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SECONDARY_005fOUTPUT_005fRELOAD_005fCLASS"><code>SECONDARY_OUTPUT_RELOAD_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SECONDARY_005fRELOAD_005fCLASS"><code>SECONDARY_RELOAD_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SELECT_005fCC_005fMODE"><code>SELECT_CC_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#MODE_005fCC-Condition-Codes">MODE_CC Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sequence"><code>sequence</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Sequence-iterators">Sequence iterators</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sequence-iterators">Sequence iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-set"><code>set</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-set-and-_002ff"><code>set</code> and &lsquo;<samp>/f</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-setmemm-instruction-pattern"><code>setmem<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SETUP_005fFRAME_005fADDRESSES"><code>SETUP_FRAME_ADDRESSES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fASM_005fOP"><code>SET_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fASM_005fOP-1"><code>SET_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-set_005fattr"><code>set_attr</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tagging-Insns">Tagging Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-set_005fattr_005falternative"><code>set_attr_alternative</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tagging-Insns">Tagging Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-set_005fbb_005fseq"><code>set_bb_seq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GIMPLE-sequences">GIMPLE sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fBY_005fPIECES_005fP"><code>SET_BY_PIECES_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fDEST"><code>SET_DEST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fIS_005fRETURN_005fP"><code>SET_IS_RETURN_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fLABEL_005fKIND"><code>SET_LABEL_KIND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-set_005foptab_005flibfunc"><code>set_optab_libfunc</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fRATIO"><code>SET_RATIO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fSRC"><code>SET_SRC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-set_005fthread_005fpointermode-instruction-pattern"><code>set_thread_pointer<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fTYPE_005fSTRUCTURAL_005fEQUALITY"><code>SET_TYPE_STRUCTURAL_EQUALITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SET_005fTYPE_005fSTRUCTURAL_005fEQUALITY-1"><code>SET_TYPE_STRUCTURAL_EQUALITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SFmode"><code>SFmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SF_005fSIZE"><code>SF_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sharing-of-RTL-components">sharing of RTL components</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-shift">shift</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SHIFT_005fCOUNT_005fTRUNCATED"><code>SHIFT_COUNT_TRUNCATED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SHLIB_005fSUFFIX"><code>SHLIB_SUFFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SHORT_005fACCUM_005fTYPE_005fSIZE"><code>SHORT_ACCUM_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SHORT_005fFRACT_005fTYPE_005fSIZE"><code>SHORT_FRACT_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SHORT_005fIMMEDIATES_005fSIGN_005fEXTEND"><code>SHORT_IMMEDIATES_SIGN_EXTEND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SHORT_005fTYPE_005fSIZE"><code>SHORT_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sibcall_005fepilogue-instruction-pattern"><code>sibcall_epilogue</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sibling-call">sibling call</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Edges">Edges</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SIBLING_005fCALL_005fP"><code>SIBLING_CALL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-signed-division">signed division</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-signed-division-with-signed-saturation">signed division with signed saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-signed-maximum">signed maximum</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-signed-minimum">signed minimum</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sign_005fextend"><code>sign_extend</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sign_005fextract"><code>sign_extract</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bit_002dFields">Bit-Fields</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sign_005fextract_002c-canonicalization-of"><code>sign_extract</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SIG_005fATOMIC_005fTYPE"><code>SIG_ATOMIC_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SImode"><code>SImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-simple-constraints">simple constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-simple_005freturn"><code>simple_return</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-simple_005freturn-instruction-pattern"><code>simple_return</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sincos-math-function_002c-implicit-usage">sincos math function, implicit usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sincosm3-instruction-pattern"><code>sincos<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sinm2-instruction-pattern"><code>sin<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SIZETYPE"><code>SIZETYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SIZE_005fASM_005fOP"><code>SIZE_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SIZE_005fTYPE"><code>SIZE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-skip"><code>skip</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SLOW_005fBYTE_005fACCESS"><code>SLOW_BYTE_ACCESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SLOW_005fUNALIGNED_005fACCESS"><code>SLOW_UNALIGNED_ACCESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-smax"><code>smax</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-smin"><code>smin</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sms_002c-swing_002c-software-pipelining">sms, swing, software pipelining</a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-passes">RTL passes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-smulm3_005fhighpart-instruction-pattern"><code>smul<var>m</var>3_highpart</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-soft-float-library">soft float library</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Soft-float-library-routines">Soft float library routines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-special"><code>special</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-special-predicates">special predicates</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Predicates">Predicates</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SPECS"><code>SPECS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-speed-of-instructions">speed of instructions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-splitting-instructions">splitting instructions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Splitting">Insn Splitting</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-split_005fblock"><code>split_block</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SQmode"><code>SQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sqrt"><code>sqrt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sqrtm2-instruction-pattern"><code>sqrt<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-square-root">square root</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SSA">SSA</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ssaddm3-instruction-pattern"><code>ssadd<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ssashlm3-instruction-pattern"><code>ssashl<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SSA_005fNAME_005fDEF_005fSTMT"><code>SSA_NAME_DEF_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SSA_005fNAME_005fVERSION"><code>SSA_NAME_VERSION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ssdivm3-instruction-pattern"><code>ssdiv<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ssmaddmn4-instruction-pattern"><code>ssmadd<var>m</var><var>n</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ssmsubmn4-instruction-pattern"><code>ssmsub<var>m</var><var>n</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ssmulm3-instruction-pattern"><code>ssmul<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ssnegm2-instruction-pattern"><code>ssneg<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sssubm3-instruction-pattern"><code>sssub<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ssum_005fwidenm3-instruction-pattern"><code>ssum_widen<var>m3</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ss_005fabs"><code>ss_abs</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ss_005fashift"><code>ss_ashift</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ss_005fdiv"><code>ss_div</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ss_005fminus"><code>ss_minus</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ss_005fmult"><code>ss_mult</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ss_005fneg"><code>ss_neg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ss_005fplus"><code>ss_plus</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ss_005ftruncate"><code>ss_truncate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-stack-arguments">stack arguments</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-stack-frame-layout">stack frame layout</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-stack-smashing-protection">stack smashing protection</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Smashing-Protection">Stack Smashing Protection</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fALIGNMENT_005fNEEDED"><code>STACK_ALIGNMENT_NEEDED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fBOUNDARY"><code>STACK_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fCHECK_005fBUILTIN"><code>STACK_CHECK_BUILTIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Checking">Stack Checking</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fCHECK_005fFIXED_005fFRAME_005fSIZE"><code>STACK_CHECK_FIXED_FRAME_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Checking">Stack Checking</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fCHECK_005fMAX_005fFRAME_005fSIZE"><code>STACK_CHECK_MAX_FRAME_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Checking">Stack Checking</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fCHECK_005fMAX_005fVAR_005fSIZE"><code>STACK_CHECK_MAX_VAR_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Checking">Stack Checking</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fCHECK_005fMOVING_005fSP"><code>STACK_CHECK_MOVING_SP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Checking">Stack Checking</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fCHECK_005fPROBE_005fINTERVAL_005fEXP"><code>STACK_CHECK_PROBE_INTERVAL_EXP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Checking">Stack Checking</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fCHECK_005fPROTECT"><code>STACK_CHECK_PROTECT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Checking">Stack Checking</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fCHECK_005fSTATIC_005fBUILTIN"><code>STACK_CHECK_STATIC_BUILTIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Checking">Stack Checking</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fDYNAMIC_005fOFFSET"><code>STACK_DYNAMIC_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fDYNAMIC_005fOFFSET-and-virtual-registers"><code>STACK_DYNAMIC_OFFSET</code> and virtual registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fGROWS_005fDOWNWARD"><code>STACK_GROWS_DOWNWARD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fPARMS_005fIN_005fREG_005fPARM_005fAREA"><code>STACK_PARMS_IN_REG_PARM_AREA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fPOINTER_005fOFFSET"><code>STACK_POINTER_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fPOINTER_005fOFFSET-and-virtual-registers"><code>STACK_POINTER_OFFSET</code> and virtual registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fPOINTER_005fREGNUM"><code>STACK_POINTER_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fPOINTER_005fREGNUM-and-virtual-registers"><code>STACK_POINTER_REGNUM</code> and virtual registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-stack_005fpointer_005frtx"><code>stack_pointer_rtx</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-stack_005fprotect_005fset-instruction-pattern"><code>stack_protect_set</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-stack_005fprotect_005ftest-instruction-pattern"><code>stack_protect_test</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fPUSH_005fCODE"><code>STACK_PUSH_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fREGS"><code>STACK_REGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Registers">Stack Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fREG_005fCOVER_005fCLASS"><code>STACK_REG_COVER_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Registers">Stack Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fSAVEAREA_005fMODE"><code>STACK_SAVEAREA_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fSIZE_005fMODE"><code>STACK_SIZE_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STACK_005fSLOT_005fALIGNMENT"><code>STACK_SLOT_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-standard-pattern-names">standard pattern names</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STANDARD_005fSTARTFILE_005fPREFIX"><code>STANDARD_STARTFILE_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STANDARD_005fSTARTFILE_005fPREFIX_005f1"><code>STANDARD_STARTFILE_PREFIX_1</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STANDARD_005fSTARTFILE_005fPREFIX_005f2"><code>STANDARD_STARTFILE_PREFIX_2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STARTFILE_005fSPEC"><code>STARTFILE_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STARTING_005fFRAME_005fOFFSET"><code>STARTING_FRAME_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STARTING_005fFRAME_005fOFFSET-and-virtual-registers"><code>STARTING_FRAME_OFFSET</code> and virtual registers</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Statement-and-operand-traversals">Statement and operand traversals</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statement-and-operand-traversals">Statement and operand traversals</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Statement-Sequences">Statement Sequences</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statement-Sequences">Statement Sequences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Statements">Statements</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements">Statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-statements">statements</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-statements-1">statements</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Static-profile-estimation">Static profile estimation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Profile-information">Profile information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-static-single-assignment">static single assignment</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STATIC_005fCHAIN_005fINCOMING_005fREGNUM"><code>STATIC_CHAIN_INCOMING_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STATIC_005fCHAIN_005fREGNUM"><code>STATIC_CHAIN_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-stdarg_002eh-and-register-arguments"><samp>stdarg.h</samp> and register arguments</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STDC_005f0_005fIN_005fSYSTEM_005fHEADERS"><code>STDC_0_IN_SYSTEM_HEADERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STMT_005fEXPR"><code>STMT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STMT_005fIS_005fFULL_005fEXPR_005fP"><code>STMT_IS_FULL_EXPR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-storage-layout">storage layout</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STORE_005fBY_005fPIECES_005fP"><code>STORE_BY_PIECES_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STORE_005fFLAG_005fVALUE"><code>STORE_FLAG_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-store_005fmultiple-instruction-pattern">&lsquo;<samp>store_multiple</samp>&rsquo; instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-strcpy"><code>strcpy</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STRICT_005fALIGNMENT"><code>STRICT_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-strict_005flow_005fpart"><code>strict_low_part</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Declarations">RTL Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-strict_005fmemory_005faddress_005fp"><code>strict_memory_address_p</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STRING_005fCST"><code>STRING_CST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STRING_005fPOOL_005fADDRESS_005fP"><code>STRING_POOL_ADDRESS_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-strlenm-instruction-pattern"><code>strlen<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-structure-value-address">structure value address</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-structures_002c-returning">structures, returning</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-STRUCTURE_005fSIZE_005fBOUNDARY"><code>STRUCTURE_SIZE_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-subm3-instruction-pattern"><code>sub<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUBOBJECT"><code>SUBOBJECT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUBOBJECT_005fCLEANUP"><code>SUBOBJECT_CLEANUP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-subreg"><code>subreg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-subreg-and-_002fs"><code>subreg</code> and &lsquo;<samp>/s</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-subreg-and-_002fu"><code>subreg</code> and &lsquo;<samp>/u</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-subreg-and-_002fu-and-_002fv"><code>subreg</code> and &lsquo;<samp>/u</samp>&rsquo; and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-subreg_002c-in-strict_005flow_005fpart"><code>subreg</code>, in <code>strict_low_part</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#RTL-Declarations">RTL Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUBREG_005fBYTE"><code>SUBREG_BYTE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUBREG_005fPROMOTED_005fUNSIGNED_005fP"><code>SUBREG_PROMOTED_UNSIGNED_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUBREG_005fPROMOTED_005fUNSIGNED_005fSET"><code>SUBREG_PROMOTED_UNSIGNED_SET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUBREG_005fPROMOTED_005fVAR_005fP"><code>SUBREG_PROMOTED_VAR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUBREG_005fREG"><code>SUBREG_REG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-subst-iterators-in-_002emd-files">subst iterators in <samp>.md</samp> files</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Subst-Iterators">Subst Iterators</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUCCESS_005fEXIT_005fCODE"><code>SUCCESS_EXIT_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUPPORTS_005fINIT_005fPRIORITY"><code>SUPPORTS_INIT_PRIORITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUPPORTS_005fONE_005fONLY"><code>SUPPORTS_ONE_ONLY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SUPPORTS_005fWEAK"><code>SUPPORTS_WEAK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SWITCHABLE_005fTARGET"><code>SWITCHABLE_TARGET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SWITCH_005fBODY"><code>SWITCH_BODY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SWITCH_005fCOND"><code>SWITCH_COND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SWITCH_005fSTMT"><code>SWITCH_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-symbolic-label">symbolic label</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fFLAG_005fANCHOR"><code>SYMBOL_FLAG_ANCHOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fFLAG_005fEXTERNAL"><code>SYMBOL_FLAG_EXTERNAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fFLAG_005fFUNCTION"><code>SYMBOL_FLAG_FUNCTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fFLAG_005fHAS_005fBLOCK_005fINFO"><code>SYMBOL_FLAG_HAS_BLOCK_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fFLAG_005fLOCAL"><code>SYMBOL_FLAG_LOCAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fFLAG_005fSMALL"><code>SYMBOL_FLAG_SMALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fFLAG_005fTLS_005fSHIFT"><code>SYMBOL_FLAG_TLS_SHIFT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-symbol_005fref"><code>symbol_ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constants">Constants</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-symbol_005fref-and-_002ff"><code>symbol_ref</code> and &lsquo;<samp>/f</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-symbol_005fref-and-_002fi"><code>symbol_ref</code> and &lsquo;<samp>/i</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-symbol_005fref-and-_002fu"><code>symbol_ref</code> and &lsquo;<samp>/u</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-symbol_005fref-and-_002fv"><code>symbol_ref</code> and &lsquo;<samp>/v</samp>&rsquo;</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-symbol_005fref_002c-RTL-sharing"><code>symbol_ref</code>, RTL sharing</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fANCHOR_005fP"><code>SYMBOL_REF_ANCHOR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fBLOCK"><code>SYMBOL_REF_BLOCK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fBLOCK_005fOFFSET"><code>SYMBOL_REF_BLOCK_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fCONSTANT"><code>SYMBOL_REF_CONSTANT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fDATA"><code>SYMBOL_REF_DATA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fDECL"><code>SYMBOL_REF_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fEXTERNAL_005fP"><code>SYMBOL_REF_EXTERNAL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fFLAG"><code>SYMBOL_REF_FLAG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fFLAG_002c-in-TARGET_005fENCODE_005fSECTION_005fINFO"><code>SYMBOL_REF_FLAG</code>, in <code>TARGET_ENCODE_SECTION_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fFLAGS"><code>SYMBOL_REF_FLAGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fFUNCTION_005fP"><code>SYMBOL_REF_FUNCTION_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fHAS_005fBLOCK_005fINFO_005fP"><code>SYMBOL_REF_HAS_BLOCK_INFO_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fLOCAL_005fP"><code>SYMBOL_REF_LOCAL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fSMALL_005fP"><code>SYMBOL_REF_SMALL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fTLS_005fMODEL"><code>SYMBOL_REF_TLS_MODEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Special-Accessors">Special Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fUSED"><code>SYMBOL_REF_USED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYMBOL_005fREF_005fWEAK"><code>SYMBOL_REF_WEAK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005faddmode-instruction-pattern"><code>sync_add<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fandmode-instruction-pattern"><code>sync_and<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fcompare_005fand_005fswapmode-instruction-pattern"><code>sync_compare_and_swap<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fiormode-instruction-pattern"><code>sync_ior<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005flock_005freleasemode-instruction-pattern"><code>sync_lock_release<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005flock_005ftest_005fand_005fsetmode-instruction-pattern"><code>sync_lock_test_and_set<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fnandmode-instruction-pattern"><code>sync_nand<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fnew_005faddmode-instruction-pattern"><code>sync_new_add<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fnew_005fandmode-instruction-pattern"><code>sync_new_and<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fnew_005fiormode-instruction-pattern"><code>sync_new_ior<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fnew_005fnandmode-instruction-pattern"><code>sync_new_nand<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fnew_005fsubmode-instruction-pattern"><code>sync_new_sub<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fnew_005fxormode-instruction-pattern"><code>sync_new_xor<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fold_005faddmode-instruction-pattern"><code>sync_old_add<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fold_005fandmode-instruction-pattern"><code>sync_old_and<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fold_005fiormode-instruction-pattern"><code>sync_old_ior<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fold_005fnandmode-instruction-pattern"><code>sync_old_nand<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fold_005fsubmode-instruction-pattern"><code>sync_old_sub<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fold_005fxormode-instruction-pattern"><code>sync_old_xor<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fsubmode-instruction-pattern"><code>sync_sub<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-sync_005fxormode-instruction-pattern"><code>sync_xor<var>mode</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYSROOT_005fHEADERS_005fSUFFIX_005fSPEC"><code>SYSROOT_HEADERS_SUFFIX_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-SYSROOT_005fSUFFIX_005fSPEC"><code>SYSROOT_SUFFIX_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-T">T</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-t_002dtarget"><samp>t-<var>target</var></samp></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-table-jump">table jump</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Blocks">Basic Blocks</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tablejump-instruction-pattern"><code>tablejump</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tag"><code>tag</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tagging-insns">tagging insns</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tagging-Insns">Tagging Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tail-calls">tail calls</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tail-Calls">Tail Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TAmode"><code>TAmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-target-attributes">target attributes</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-target-description-macros">target description macros</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Macros">Target Macros</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-target-functions">target functions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Structure">Target Structure</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-target-hooks">target hooks</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Structure">Target Structure</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-target-makefile-fragment">target makefile fragment</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Fragment">Target Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-target-specifications">target specifications</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-targetm"><code>targetm</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Structure">Target Structure</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-targets_002c-makefile">targets, makefile</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Makefile">Makefile</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fADDRESS_005fCOST"><code>TARGET_ADDRESS_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fADDR_005fSPACE_005fADDRESS_005fMODE"><code>TARGET_ADDR_SPACE_ADDRESS_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Named-Address-Spaces">Named Address Spaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fADDR_005fSPACE_005fCONVERT"><code>TARGET_ADDR_SPACE_CONVERT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Named-Address-Spaces">Named Address Spaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fADDR_005fSPACE_005fLEGITIMATE_005fADDRESS_005fP"><code>TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Named-Address-Spaces">Named Address Spaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fADDR_005fSPACE_005fLEGITIMIZE_005fADDRESS"><code>TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Named-Address-Spaces">Named Address Spaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fADDR_005fSPACE_005fPOINTER_005fMODE"><code>TARGET_ADDR_SPACE_POINTER_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Named-Address-Spaces">Named Address Spaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fADDR_005fSPACE_005fSUBSET_005fP"><code>TARGET_ADDR_SPACE_SUBSET_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Named-Address-Spaces">Named Address Spaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fADDR_005fSPACE_005fVALID_005fPOINTER_005fMODE"><code>TARGET_ADDR_SPACE_VALID_POINTER_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Named-Address-Spaces">Named Address Spaces</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fALIGN_005fANON_005fBITFIELD"><code>TARGET_ALIGN_ANON_BITFIELD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fALLOCATE_005fINITIAL_005fVALUE"><code>TARGET_ALLOCATE_INITIAL_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fALLOCATE_005fSTACK_005fSLOTS_005fFOR_005fARGS"><code>TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fALWAYS_005fSTRIP_005fDOTDOT"><code>TARGET_ALWAYS_STRIP_DOTDOT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fARG_005fPARTIAL_005fBYTES"><code>TARGET_ARG_PARTIAL_BYTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fARM_005fEABI_005fUNWINDER"><code>TARGET_ARM_EABI_UNWINDER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fARRAY_005fMODE_005fSUPPORTED_005fP"><code>TARGET_ARRAY_MODE_SUPPORTED_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASAN_005fSHADOW_005fOFFSET"><code>TARGET_ASAN_SHADOW_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fALIGNED_005fDI_005fOP"><code>TARGET_ASM_ALIGNED_DI_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fALIGNED_005fHI_005fOP"><code>TARGET_ASM_ALIGNED_HI_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fALIGNED_005fSI_005fOP"><code>TARGET_ASM_ALIGNED_SI_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fALIGNED_005fTI_005fOP"><code>TARGET_ASM_ALIGNED_TI_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fASSEMBLE_005fVISIBILITY"><code>TARGET_ASM_ASSEMBLE_VISIBILITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fBYTE_005fOP"><code>TARGET_ASM_BYTE_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fCAN_005fOUTPUT_005fMI_005fTHUNK"><code>TARGET_ASM_CAN_OUTPUT_MI_THUNK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fCLOSE_005fPAREN"><code>TARGET_ASM_CLOSE_PAREN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fCODE_005fEND"><code>TARGET_ASM_CODE_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fCONSTRUCTOR"><code>TARGET_ASM_CONSTRUCTOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fDECLARE_005fCONSTANT_005fNAME"><code>TARGET_ASM_DECLARE_CONSTANT_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fDESTRUCTOR"><code>TARGET_ASM_DESTRUCTOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fEMIT_005fEXCEPT_005fPERSONALITY"><code>TARGET_ASM_EMIT_EXCEPT_PERSONALITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fEMIT_005fEXCEPT_005fTABLE_005fLABEL"><code>TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fEMIT_005fUNWIND_005fLABEL"><code>TARGET_ASM_EMIT_UNWIND_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fEXTERNAL_005fLIBCALL"><code>TARGET_ASM_EXTERNAL_LIBCALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFILE_005fEND"><code>TARGET_ASM_FILE_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFILE_005fSTART"><code>TARGET_ASM_FILE_START</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFILE_005fSTART_005fAPP_005fOFF"><code>TARGET_ASM_FILE_START_APP_OFF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFILE_005fSTART_005fFILE_005fDIRECTIVE"><code>TARGET_ASM_FILE_START_FILE_DIRECTIVE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFINAL_005fPOSTSCAN_005fINSN"><code>TARGET_ASM_FINAL_POSTSCAN_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFUNCTION_005fBEGIN_005fEPILOGUE"><code>TARGET_ASM_FUNCTION_BEGIN_EPILOGUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFUNCTION_005fEND_005fPROLOGUE"><code>TARGET_ASM_FUNCTION_END_PROLOGUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFUNCTION_005fEPILOGUE"><code>TARGET_ASM_FUNCTION_EPILOGUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFUNCTION_005fPROLOGUE"><code>TARGET_ASM_FUNCTION_PROLOGUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFUNCTION_005fRODATA_005fSECTION"><code>TARGET_ASM_FUNCTION_RODATA_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFUNCTION_005fSECTION"><code>TARGET_ASM_FUNCTION_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fFUNCTION_005fSWITCHED_005fTEXT_005fSECTIONS"><code>TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fGLOBALIZE_005fDECL_005fNAME"><code>TARGET_ASM_GLOBALIZE_DECL_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fGLOBALIZE_005fLABEL"><code>TARGET_ASM_GLOBALIZE_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fINIT_005fSECTIONS"><code>TARGET_ASM_INIT_SECTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fINTEGER"><code>TARGET_ASM_INTEGER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fINTERNAL_005fLABEL"><code>TARGET_ASM_INTERNAL_LABEL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fJUMP_005fALIGN_005fMAX_005fSKIP"><code>TARGET_ASM_JUMP_ALIGN_MAX_SKIP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fLABEL_005fALIGN_005fAFTER_005fBARRIER_005fMAX_005fSKIP"><code>TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fLABEL_005fALIGN_005fMAX_005fSKIP"><code>TARGET_ASM_LABEL_ALIGN_MAX_SKIP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fLOOP_005fALIGN_005fMAX_005fSKIP"><code>TARGET_ASM_LOOP_ALIGN_MAX_SKIP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Alignment-Output">Alignment Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fLTO_005fEND"><code>TARGET_ASM_LTO_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fLTO_005fSTART"><code>TARGET_ASM_LTO_START</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fMARK_005fDECL_005fPRESERVED"><code>TARGET_ASM_MARK_DECL_PRESERVED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fMERGEABLE_005fRODATA_005fPREFIX"><code>TARGET_ASM_MERGEABLE_RODATA_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fNAMED_005fSECTION"><code>TARGET_ASM_NAMED_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fOPEN_005fPAREN"><code>TARGET_ASM_OPEN_PAREN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fOUTPUT_005fADDR_005fCONST_005fEXTRA"><code>TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fOUTPUT_005fANCHOR"><code>TARGET_ASM_OUTPUT_ANCHOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Anchored-Addresses">Anchored Addresses</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fOUTPUT_005fDWARF_005fDTPREL"><code>TARGET_ASM_OUTPUT_DWARF_DTPREL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fOUTPUT_005fIDENT"><code>TARGET_ASM_OUTPUT_IDENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fOUTPUT_005fMI_005fTHUNK"><code>TARGET_ASM_OUTPUT_MI_THUNK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Entry">Function Entry</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fOUTPUT_005fSOURCE_005fFILENAME"><code>TARGET_ASM_OUTPUT_SOURCE_FILENAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fRECORD_005fGCC_005fSWITCHES"><code>TARGET_ASM_RECORD_GCC_SWITCHES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fRECORD_005fGCC_005fSWITCHES_005fSECTION"><code>TARGET_ASM_RECORD_GCC_SWITCHES_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fRELOC_005fRW_005fMASK"><code>TARGET_ASM_RELOC_RW_MASK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fSELECT_005fRTX_005fSECTION"><code>TARGET_ASM_SELECT_RTX_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fSELECT_005fSECTION"><code>TARGET_ASM_SELECT_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fTM_005fCLONE_005fTABLE_005fSECTION"><code>TARGET_ASM_TM_CLONE_TABLE_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fTRAMPOLINE_005fTEMPLATE"><code>TARGET_ASM_TRAMPOLINE_TEMPLATE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fTTYPE"><code>TARGET_ASM_TTYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fUNALIGNED_005fDI_005fOP"><code>TARGET_ASM_UNALIGNED_DI_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fUNALIGNED_005fHI_005fOP"><code>TARGET_ASM_UNALIGNED_HI_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fUNALIGNED_005fSI_005fOP"><code>TARGET_ASM_UNALIGNED_SI_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fUNALIGNED_005fTI_005fOP"><code>TARGET_ASM_UNALIGNED_TI_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Data-Output">Data Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fUNIQUE_005fSECTION"><code>TARGET_ASM_UNIQUE_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fUNWIND_005fEMIT"><code>TARGET_ASM_UNWIND_EMIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fASM_005fUNWIND_005fEMIT_005fBEFORE_005fINSN"><code>TARGET_ASM_UNWIND_EMIT_BEFORE_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dispatch-Tables">Dispatch Tables</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fATOMIC_005fTEST_005fAND_005fSET_005fTRUEVAL"><code>TARGET_ATOMIC_TEST_AND_SET_TRUEVAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fATTRIBUTE_005fTABLE"><code>TARGET_ATTRIBUTE_TABLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fATTRIBUTE_005fTAKES_005fIDENTIFIER_005fP"><code>TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fBINDS_005fLOCAL_005fP"><code>TARGET_BINDS_LOCAL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fBRANCH_005fTARGET_005fREGISTER_005fCALLEE_005fSAVED"><code>TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fBRANCH_005fTARGET_005fREGISTER_005fCLASS"><code>TARGET_BRANCH_TARGET_REGISTER_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fBUILD_005fBUILTIN_005fVA_005fLIST"><code>TARGET_BUILD_BUILTIN_VA_LIST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fBUILTIN_005fDECL"><code>TARGET_BUILTIN_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fBUILTIN_005fRECIPROCAL"><code>TARGET_BUILTIN_RECIPROCAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fBUILTIN_005fSETJMP_005fFRAME_005fVALUE"><code>TARGET_BUILTIN_SETJMP_FRAME_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fC99_005fFUNCTIONS"><code>TARGET_C99_FUNCTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCALLEE_005fCOPIES"><code>TARGET_CALLEE_COPIES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCANNOT_005fFORCE_005fCONST_005fMEM"><code>TARGET_CANNOT_FORCE_CONST_MEM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCANNOT_005fMODIFY_005fJUMPS_005fP"><code>TARGET_CANNOT_MODIFY_JUMPS_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCANONICALIZE_005fCOMPARISON"><code>TARGET_CANONICALIZE_COMPARISON</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#MODE_005fCC-Condition-Codes">MODE_CC Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCANONICAL_005fVA_005fLIST_005fTYPE"><code>TARGET_CANONICAL_VA_LIST_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCAN_005fELIMINATE"><code>TARGET_CAN_ELIMINATE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Elimination">Elimination</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCAN_005fFOLLOW_005fJUMP"><code>TARGET_CAN_FOLLOW_JUMP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCAN_005fINLINE_005fP"><code>TARGET_CAN_INLINE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCASE_005fVALUES_005fTHRESHOLD"><code>TARGET_CASE_VALUES_THRESHOLD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCC_005fMODES_005fCOMPATIBLE"><code>TARGET_CC_MODES_COMPATIBLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#MODE_005fCC-Condition-Codes">MODE_CC Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCHECK_005fPCH_005fTARGET_005fFLAGS"><code>TARGET_CHECK_PCH_TARGET_FLAGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#PCH-Target">PCH Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCHECK_005fSTRING_005fOBJECT_005fFORMAT_005fARG"><code>TARGET_CHECK_STRING_OBJECT_FORMAT_ARG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCLASS_005fLIKELY_005fSPILLED_005fP"><code>TARGET_CLASS_LIKELY_SPILLED_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCLASS_005fMAX_005fNREGS"><code>TARGET_CLASS_MAX_NREGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCOMMUTATIVE_005fP"><code>TARGET_COMMUTATIVE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCOMPARE_005fVERSION_005fPRIORITY"><code>TARGET_COMPARE_VERSION_PRIORITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCOMP_005fTYPE_005fATTRIBUTES"><code>TARGET_COMP_TYPE_ATTRIBUTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCONDITIONAL_005fREGISTER_005fUSAGE"><code>TARGET_CONDITIONAL_REGISTER_USAGE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Basics">Register Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCONST_005fANCHOR"><code>TARGET_CONST_ANCHOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCONST_005fNOT_005fOK_005fFOR_005fDEBUG_005fP"><code>TARGET_CONST_NOT_OK_FOR_DEBUG_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCONVERT_005fTO_005fTYPE"><code>TARGET_CONVERT_TO_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCPU_005fCPP_005fBUILTINS"><code>TARGET_CPU_CPP_BUILTINS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fADJUST_005fCLASS_005fAT_005fDEFINITION"><code>TARGET_CXX_ADJUST_CLASS_AT_DEFINITION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fCDTOR_005fRETURNS_005fTHIS"><code>TARGET_CXX_CDTOR_RETURNS_THIS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fCLASS_005fDATA_005fALWAYS_005fCOMDAT"><code>TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fCOOKIE_005fHAS_005fSIZE"><code>TARGET_CXX_COOKIE_HAS_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fDECL_005fMANGLING_005fCONTEXT"><code>TARGET_CXX_DECL_MANGLING_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fDETERMINE_005fCLASS_005fDATA_005fVISIBILITY"><code>TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fGET_005fCOOKIE_005fSIZE"><code>TARGET_CXX_GET_COOKIE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fGUARD_005fMASK_005fBIT"><code>TARGET_CXX_GUARD_MASK_BIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fGUARD_005fTYPE"><code>TARGET_CXX_GUARD_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fIMPORT_005fEXPORT_005fCLASS"><code>TARGET_CXX_IMPORT_EXPORT_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fKEY_005fMETHOD_005fMAY_005fBE_005fINLINE"><code>TARGET_CXX_KEY_METHOD_MAY_BE_INLINE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fLIBRARY_005fRTTI_005fCOMDAT"><code>TARGET_CXX_LIBRARY_RTTI_COMDAT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fUSE_005fAEABI_005fATEXIT"><code>TARGET_CXX_USE_AEABI_ATEXIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fCXX_005fUSE_005fATEXIT_005fFOR_005fCXA_005fATEXIT"><code>TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#C_002b_002b-ABI">C++ ABI</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fC_005fPREINCLUDE"><code>TARGET_C_PREINCLUDE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDEBUG_005fUNWIND_005fINFO"><code>TARGET_DEBUG_UNWIND_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDECIMAL_005fFLOAT_005fSUPPORTED_005fP"><code>TARGET_DECIMAL_FLOAT_SUPPORTED_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDECLSPEC"><code>TARGET_DECLSPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDEFAULT_005fPACK_005fSTRUCT"><code>TARGET_DEFAULT_PACK_STRUCT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDEFAULT_005fSHORT_005fENUMS"><code>TARGET_DEFAULT_SHORT_ENUMS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDEFAULT_005fTARGET_005fFLAGS"><code>TARGET_DEFAULT_TARGET_FLAGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDEFERRED_005fOUTPUT_005fDEFS"><code>TARGET_DEFERRED_OUTPUT_DEFS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDELAY_005fSCHED2"><code>TARGET_DELAY_SCHED2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDELAY_005fVARTRACK"><code>TARGET_DELAY_VARTRACK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDELEGITIMIZE_005fADDRESS"><code>TARGET_DELEGITIMIZE_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDIFFERENT_005fADDR_005fDISPLACEMENT_005fP"><code>TARGET_DIFFERENT_ADDR_DISPLACEMENT_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDLLIMPORT_005fDECL_005fATTRIBUTES"><code>TARGET_DLLIMPORT_DECL_ATTRIBUTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDWARF_005fCALLING_005fCONVENTION"><code>TARGET_DWARF_CALLING_CONVENTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDWARF_005fHANDLE_005fFRAME_005fUNSPEC"><code>TARGET_DWARF_HANDLE_FRAME_UNSPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Layout">Frame Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fDWARF_005fREGISTER_005fSPAN"><code>TARGET_DWARF_REGISTER_SPAN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEDOM"><code>TARGET_EDOM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fDEBUG_005fFORM_005fTLS_005fADDRESS"><code>TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fGET_005fADDRESS"><code>TARGET_EMUTLS_GET_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fREGISTER_005fCOMMON"><code>TARGET_EMUTLS_REGISTER_COMMON</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fTMPL_005fPREFIX"><code>TARGET_EMUTLS_TMPL_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fTMPL_005fSECTION"><code>TARGET_EMUTLS_TMPL_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fVAR_005fALIGN_005fFIXED"><code>TARGET_EMUTLS_VAR_ALIGN_FIXED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fVAR_005fFIELDS"><code>TARGET_EMUTLS_VAR_FIELDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fVAR_005fINIT"><code>TARGET_EMUTLS_VAR_INIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fVAR_005fPREFIX"><code>TARGET_EMUTLS_VAR_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEMUTLS_005fVAR_005fSECTION"><code>TARGET_EMUTLS_VAR_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Emulated-TLS">Emulated TLS</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fENCODE_005fSECTION_005fINFO"><code>TARGET_ENCODE_SECTION_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fENCODE_005fSECTION_005fINFO-and-address-validation"><code>TARGET_ENCODE_SECTION_INFO</code> and address validation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fENCODE_005fSECTION_005fINFO-usage"><code>TARGET_ENCODE_SECTION_INFO</code> usage</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fENUM_005fVA_005fLIST_005fP"><code>TARGET_ENUM_VA_LIST_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEXCEPT_005fUNWIND_005fINFO"><code>TARGET_EXCEPT_UNWIND_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEXECUTABLE_005fSUFFIX"><code>TARGET_EXECUTABLE_SUFFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEXPAND_005fBUILTIN"><code>TARGET_EXPAND_BUILTIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEXPAND_005fBUILTIN_005fSAVEREGS"><code>TARGET_EXPAND_BUILTIN_SAVEREGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Varargs">Varargs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEXPAND_005fTO_005fRTL_005fHOOK"><code>TARGET_EXPAND_TO_RTL_HOOK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEXPR"><code>TARGET_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEXTRA_005fINCLUDES"><code>TARGET_EXTRA_INCLUDES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEXTRA_005fLIVE_005fON_005fENTRY"><code>TARGET_EXTRA_LIVE_ON_ENTRY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tail-Calls">Tail Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fEXTRA_005fPRE_005fINCLUDES"><code>TARGET_EXTRA_PRE_INCLUDES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFIXED_005fCONDITION_005fCODE_005fREGS"><code>TARGET_FIXED_CONDITION_CODE_REGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#MODE_005fCC-Condition-Codes">MODE_CC Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFIXED_005fPOINT_005fSUPPORTED_005fP"><code>TARGET_FIXED_POINT_SUPPORTED_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-target_005fflags"><code>target_flags</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFLAGS_005fREGNUM"><code>TARGET_FLAGS_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#MODE_005fCC-Condition-Codes">MODE_CC Condition Codes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFLT_005fEVAL_005fMETHOD"><code>TARGET_FLT_EVAL_METHOD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFN_005fABI_005fVA_005fLIST"><code>TARGET_FN_ABI_VA_LIST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFOLD_005fBUILTIN"><code>TARGET_FOLD_BUILTIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFORCE_005fAT_005fCOMP_005fDIR"><code>TARGET_FORCE_AT_COMP_DIR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFORMAT_005fTYPES"><code>TARGET_FORMAT_TYPES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFRAME_005fPOINTER_005fREQUIRED"><code>TARGET_FRAME_POINTER_REQUIRED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Elimination">Elimination</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFUNCTION_005fARG"><code>TARGET_FUNCTION_ARG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFUNCTION_005fARG_005fADVANCE"><code>TARGET_FUNCTION_ARG_ADVANCE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFUNCTION_005fARG_005fBOUNDARY"><code>TARGET_FUNCTION_ARG_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFUNCTION_005fARG_005fROUND_005fBOUNDARY"><code>TARGET_FUNCTION_ARG_ROUND_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFUNCTION_005fATTRIBUTE_005fINLINABLE_005fP"><code>TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFUNCTION_005fINCOMING_005fARG"><code>TARGET_FUNCTION_INCOMING_ARG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFUNCTION_005fOK_005fFOR_005fSIBCALL"><code>TARGET_FUNCTION_OK_FOR_SIBCALL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tail-Calls">Tail Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFUNCTION_005fVALUE"><code>TARGET_FUNCTION_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fFUNCTION_005fVALUE_005fREGNO_005fP"><code>TARGET_FUNCTION_VALUE_REGNO_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fGENERATE_005fVERSION_005fDISPATCHER_005fBODY"><code>TARGET_GENERATE_VERSION_DISPATCHER_BODY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fGET_005fDRAP_005fRTX"><code>TARGET_GET_DRAP_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fGET_005fFUNCTION_005fVERSIONS_005fDISPATCHER"><code>TARGET_GET_FUNCTION_VERSIONS_DISPATCHER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fGET_005fPCH_005fVALIDITY"><code>TARGET_GET_PCH_VALIDITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#PCH-Target">PCH Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fGET_005fRAW_005fARG_005fMODE"><code>TARGET_GET_RAW_ARG_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fGET_005fRAW_005fRESULT_005fMODE"><code>TARGET_GET_RAW_RESULT_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fGIMPLIFY_005fVA_005fARG_005fEXPR"><code>TARGET_GIMPLIFY_VA_ARG_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHANDLE_005fC_005fOPTION"><code>TARGET_HANDLE_C_OPTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHANDLE_005fOPTION"><code>TARGET_HANDLE_OPTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHARD_005fREGNO_005fSCRATCH_005fOK"><code>TARGET_HARD_REGNO_SCRATCH_OK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Values-in-Registers">Values in Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHAS_005fSINCOS"><code>TARGET_HAS_SINCOS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHAVE_005fCONDITIONAL_005fEXECUTION"><code>TARGET_HAVE_CONDITIONAL_EXECUTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHAVE_005fCTORS_005fDTORS"><code>TARGET_HAVE_CTORS_DTORS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-for-Initialization">Macros for Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHAVE_005fNAMED_005fSECTIONS"><code>TARGET_HAVE_NAMED_SECTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHAVE_005fSRODATA_005fSECTION"><code>TARGET_HAVE_SRODATA_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHAVE_005fSWITCHABLE_005fBSS_005fSECTIONS"><code>TARGET_HAVE_SWITCHABLE_BSS_SECTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fHAVE_005fTLS"><code>TARGET_HAVE_TLS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINIT_005fBUILTINS"><code>TARGET_INIT_BUILTINS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINIT_005fDWARF_005fREG_005fSIZES_005fEXTRA"><code>TARGET_INIT_DWARF_REG_SIZES_EXTRA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINIT_005fLIBFUNCS"><code>TARGET_INIT_LIBFUNCS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINSERT_005fATTRIBUTES"><code>TARGET_INSERT_ATTRIBUTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINSTANTIATE_005fDECLS"><code>TARGET_INSTANTIATE_DECLS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINVALID_005fARG_005fFOR_005fUNPROTOTYPED_005fFN"><code>TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINVALID_005fBINARY_005fOP"><code>TARGET_INVALID_BINARY_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINVALID_005fCONVERSION"><code>TARGET_INVALID_CONVERSION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINVALID_005fPARAMETER_005fTYPE"><code>TARGET_INVALID_PARAMETER_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINVALID_005fRETURN_005fTYPE"><code>TARGET_INVALID_RETURN_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINVALID_005fUNARY_005fOP"><code>TARGET_INVALID_UNARY_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fINVALID_005fWITHIN_005fDOLOOP"><code>TARGET_INVALID_WITHIN_DOLOOP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fIN_005fSMALL_005fDATA_005fP"><code>TARGET_IN_SMALL_DATA_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLEGITIMATE_005fADDRESS_005fP"><code>TARGET_LEGITIMATE_ADDRESS_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLEGITIMATE_005fCOMBINED_005fINSN"><code>TARGET_LEGITIMATE_COMBINED_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLEGITIMATE_005fCONSTANT_005fP"><code>TARGET_LEGITIMATE_CONSTANT_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLEGITIMIZE_005fADDRESS"><code>TARGET_LEGITIMIZE_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLIBCALL_005fVALUE"><code>TARGET_LIBCALL_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLIBFUNC_005fGNU_005fPREFIX"><code>TARGET_LIBFUNC_GNU_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLIBGCC_005fCMP_005fRETURN_005fMODE"><code>TARGET_LIBGCC_CMP_RETURN_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLIBGCC_005fSDATA_005fSECTION"><code>TARGET_LIBGCC_SDATA_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLIBGCC_005fSHIFT_005fCOUNT_005fMODE"><code>TARGET_LIBGCC_SHIFT_COUNT_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLIB_005fINT_005fCMP_005fBIASED"><code>TARGET_LIB_INT_CMP_BIASED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Library-Calls">Library Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLOOP_005fUNROLL_005fADJUST"><code>TARGET_LOOP_UNROLL_ADJUST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fLRA_005fP"><code>TARGET_LRA_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMACHINE_005fDEPENDENT_005fREORG"><code>TARGET_MACHINE_DEPENDENT_REORG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMANGLE_005fASSEMBLER_005fNAME"><code>TARGET_MANGLE_ASSEMBLER_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMANGLE_005fDECL_005fASSEMBLER_005fNAME"><code>TARGET_MANGLE_DECL_ASSEMBLER_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMANGLE_005fTYPE"><code>TARGET_MANGLE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMAX_005fANCHOR_005fOFFSET"><code>TARGET_MAX_ANCHOR_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Anchored-Addresses">Anchored Addresses</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMD_005fASM_005fCLOBBERS"><code>TARGET_MD_ASM_CLOBBERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMEMBER_005fTYPE_005fFORCES_005fBLK"><code>TARGET_MEMBER_TYPE_FORCES_BLK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMEMMODEL_005fCHECK"><code>TARGET_MEMMODEL_CHECK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMEMORY_005fMOVE_005fCOST"><code>TARGET_MEMORY_MOVE_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMEM_005fCONSTRAINT"><code>TARGET_MEM_CONSTRAINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMEM_005fREF"><code>TARGET_MEM_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-References">Storage References</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMERGE_005fDECL_005fATTRIBUTES"><code>TARGET_MERGE_DECL_ATTRIBUTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMERGE_005fTYPE_005fATTRIBUTES"><code>TARGET_MERGE_TYPE_ATTRIBUTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMIN_005fANCHOR_005fOFFSET"><code>TARGET_MIN_ANCHOR_OFFSET</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Anchored-Addresses">Anchored Addresses</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMIN_005fDIVISIONS_005fFOR_005fRECIP_005fMUL"><code>TARGET_MIN_DIVISIONS_FOR_RECIP_MUL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMODE_005fDEPENDENT_005fADDRESS_005fP"><code>TARGET_MODE_DEPENDENT_ADDRESS_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMODE_005fREP_005fEXTENDED"><code>TARGET_MODE_REP_EXTENDED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMS_005fBITFIELD_005fLAYOUT_005fP"><code>TARGET_MS_BITFIELD_LAYOUT_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMUST_005fPASS_005fIN_005fSTACK"><code>TARGET_MUST_PASS_IN_STACK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fMUST_005fPASS_005fIN_005fSTACK_002c-and-TARGET_005fFUNCTION_005fARG"><code>TARGET_MUST_PASS_IN_STACK</code>, and <code>TARGET_FUNCTION_ARG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fNARROW_005fVOLATILE_005fBITFIELD"><code>TARGET_NARROW_VOLATILE_BITFIELD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fN_005fFORMAT_005fTYPES"><code>TARGET_N_FORMAT_TYPES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOBJC_005fCONSTRUCT_005fSTRING_005fOBJECT"><code>TARGET_OBJC_CONSTRUCT_STRING_OBJECT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOBJC_005fDECLARE_005fCLASS_005fDEFINITION"><code>TARGET_OBJC_DECLARE_CLASS_DEFINITION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOBJC_005fDECLARE_005fUNRESOLVED_005fCLASS_005fREFERENCE"><code>TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOBJECT_005fSUFFIX"><code>TARGET_OBJECT_SUFFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOBJFMT_005fCPP_005fBUILTINS"><code>TARGET_OBJFMT_CPP_BUILTINS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTF"><code>TARGET_OPTF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fDEFAULT_005fPARAMS"><code>TARGET_OPTION_DEFAULT_PARAMS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fFUNCTION_005fVERSIONS"><code>TARGET_OPTION_FUNCTION_VERSIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fINIT_005fSTRUCT"><code>TARGET_OPTION_INIT_STRUCT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fOPTIMIZATION_005fTABLE"><code>TARGET_OPTION_OPTIMIZATION_TABLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fOVERRIDE"><code>TARGET_OPTION_OVERRIDE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fPRAGMA_005fPARSE"><code>TARGET_OPTION_PRAGMA_PARSE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fPRINT"><code>TARGET_OPTION_PRINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fRESTORE"><code>TARGET_OPTION_RESTORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fSAVE"><code>TARGET_OPTION_SAVE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOPTION_005fVALID_005fATTRIBUTE_005fP"><code>TARGET_OPTION_VALID_ATTRIBUTE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOS_005fCPP_005fBUILTINS"><code>TARGET_OS_CPP_BUILTINS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOVERRIDES_005fFORMAT_005fATTRIBUTES"><code>TARGET_OVERRIDES_FORMAT_ATTRIBUTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOVERRIDES_005fFORMAT_005fATTRIBUTES_005fCOUNT"><code>TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOVERRIDES_005fFORMAT_005fINIT"><code>TARGET_OVERRIDES_FORMAT_INIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fOVERRIDE_005fOPTIONS_005fAFTER_005fCHANGE"><code>TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPASS_005fBY_005fREFERENCE"><code>TARGET_PASS_BY_REFERENCE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPCH_005fVALID_005fP"><code>TARGET_PCH_VALID_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#PCH-Target">PCH Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPOSIX_005fIO"><code>TARGET_POSIX_IO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPREFERRED_005fOUTPUT_005fRELOAD_005fCLASS"><code>TARGET_PREFERRED_OUTPUT_RELOAD_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPREFERRED_005fRELOAD_005fCLASS"><code>TARGET_PREFERRED_RELOAD_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPREFERRED_005fRENAME_005fCLASS"><code>TARGET_PREFERRED_RENAME_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPREPARE_005fPCH_005fSAVE"><code>TARGET_PREPARE_PCH_SAVE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#PCH-Target">PCH Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPRETEND_005fOUTGOING_005fVARARGS_005fNAMED"><code>TARGET_PRETEND_OUTGOING_VARARGS_NAMED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Varargs">Varargs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPROFILE_005fBEFORE_005fPROLOGUE"><code>TARGET_PROFILE_BEFORE_PROLOGUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPROMOTED_005fTYPE"><code>TARGET_PROMOTED_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPROMOTE_005fFUNCTION_005fMODE"><code>TARGET_PROMOTE_FUNCTION_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPROMOTE_005fPROTOTYPES"><code>TARGET_PROMOTE_PROTOTYPES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fPTRMEMFUNC_005fVBIT_005fLOCATION"><code>TARGET_PTRMEMFUNC_VBIT_LOCATION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fREF_005fMAY_005fALIAS_005fERRNO"><code>TARGET_REF_MAY_ALIAS_ERRNO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fREGISTER_005fMOVE_005fCOST"><code>TARGET_REGISTER_MOVE_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fREGISTER_005fPRIORITY"><code>TARGET_REGISTER_PRIORITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fRELAXED_005fORDERING"><code>TARGET_RELAXED_ORDERING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fRESOLVE_005fOVERLOADED_005fBUILTIN"><code>TARGET_RESOLVE_OVERLOADED_BUILTIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fRETURN_005fIN_005fMEMORY"><code>TARGET_RETURN_IN_MEMORY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fRETURN_005fIN_005fMSB"><code>TARGET_RETURN_IN_MSB</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fRETURN_005fPOPS_005fARGS"><code>TARGET_RETURN_POPS_ARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Arguments">Stack Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fRTX_005fCOSTS"><code>TARGET_RTX_COSTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCALAR_005fMODE_005fSUPPORTED_005fP"><code>TARGET_SCALAR_MODE_SUPPORTED_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fADJUST_005fCOST"><code>TARGET_SCHED_ADJUST_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fADJUST_005fPRIORITY"><code>TARGET_SCHED_ADJUST_PRIORITY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fALLOC_005fSCHED_005fCONTEXT"><code>TARGET_SCHED_ALLOC_SCHED_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fCLEAR_005fSCHED_005fCONTEXT"><code>TARGET_SCHED_CLEAR_SCHED_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fDEPENDENCIES_005fEVALUATION_005fHOOK"><code>TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fDFA_005fNEW_005fCYCLE"><code>TARGET_SCHED_DFA_NEW_CYCLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fDFA_005fPOST_005fADVANCE_005fCYCLE"><code>TARGET_SCHED_DFA_POST_ADVANCE_CYCLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fDFA_005fPOST_005fCYCLE_005fINSN"><code>TARGET_SCHED_DFA_POST_CYCLE_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fDFA_005fPRE_005fADVANCE_005fCYCLE"><code>TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fDFA_005fPRE_005fCYCLE_005fINSN"><code>TARGET_SCHED_DFA_PRE_CYCLE_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fDISPATCH"><code>TARGET_SCHED_DISPATCH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fDISPATCH_005fDO"><code>TARGET_SCHED_DISPATCH_DO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fEXPOSED_005fPIPELINE"><code>TARGET_SCHED_EXPOSED_PIPELINE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFINISH"><code>TARGET_SCHED_FINISH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFINISH_005fGLOBAL"><code>TARGET_SCHED_FINISH_GLOBAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fBACKTRACK"><code>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fBEGIN"><code>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fDFA_005fLOOKAHEAD"><code>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fDFA_005fLOOKAHEAD_005fGUARD"><code>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fDFA_005fLOOKAHEAD_005fGUARD_005fSPEC"><code>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fEND"><code>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fFINI"><code>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fINIT"><code>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFIRST_005fCYCLE_005fMULTIPASS_005fISSUE"><code>TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fFREE_005fSCHED_005fCONTEXT"><code>TARGET_SCHED_FREE_SCHED_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fGEN_005fSPEC_005fCHECK"><code>TARGET_SCHED_GEN_SPEC_CHECK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fH_005fI_005fD_005fEXTENDED"><code>TARGET_SCHED_H_I_D_EXTENDED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fINIT"><code>TARGET_SCHED_INIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fINIT_005fDFA_005fPOST_005fCYCLE_005fINSN"><code>TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fINIT_005fDFA_005fPRE_005fCYCLE_005fINSN"><code>TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fINIT_005fGLOBAL"><code>TARGET_SCHED_INIT_GLOBAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fINIT_005fSCHED_005fCONTEXT"><code>TARGET_SCHED_INIT_SCHED_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fISSUE_005fRATE"><code>TARGET_SCHED_ISSUE_RATE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fIS_005fCOSTLY_005fDEPENDENCE"><code>TARGET_SCHED_IS_COSTLY_DEPENDENCE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fNEEDS_005fBLOCK_005fP"><code>TARGET_SCHED_NEEDS_BLOCK_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fREASSOCIATION_005fWIDTH"><code>TARGET_SCHED_REASSOCIATION_WIDTH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fREORDER"><code>TARGET_SCHED_REORDER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fREORDER2"><code>TARGET_SCHED_REORDER2</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fSET_005fSCHED_005fCONTEXT"><code>TARGET_SCHED_SET_SCHED_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fSET_005fSCHED_005fFLAGS"><code>TARGET_SCHED_SET_SCHED_FLAGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fSMS_005fRES_005fMII"><code>TARGET_SCHED_SMS_RES_MII</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fSPECULATE_005fINSN"><code>TARGET_SCHED_SPECULATE_INSN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSCHED_005fVARIABLE_005fISSUE"><code>TARGET_SCHED_VARIABLE_ISSUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scheduling">Scheduling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSECONDARY_005fRELOAD"><code>TARGET_SECONDARY_RELOAD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSECTION_005fTYPE_005fFLAGS"><code>TARGET_SECTION_TYPE_FLAGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#File-Framework">File Framework</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSETUP_005fINCOMING_005fVARARGS"><code>TARGET_SETUP_INCOMING_VARARGS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Varargs">Varargs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSET_005fCURRENT_005fFUNCTION"><code>TARGET_SET_CURRENT_FUNCTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSET_005fDEFAULT_005fTYPE_005fATTRIBUTES"><code>TARGET_SET_DEFAULT_TYPE_ATTRIBUTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSET_005fUP_005fBY_005fPROLOGUE"><code>TARGET_SET_UP_BY_PROLOGUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tail-Calls">Tail Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSHIFT_005fTRUNCATION_005fMASK"><code>TARGET_SHIFT_TRUNCATION_MASK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSMALL_005fREGISTER_005fCLASSES_005fFOR_005fMODE_005fP"><code>TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSPILL_005fCLASS"><code>TARGET_SPILL_CLASS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Classes">Register Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSPLIT_005fCOMPLEX_005fARG"><code>TARGET_SPLIT_COMPLEX_ARG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSTACK_005fPROTECT_005fFAIL"><code>TARGET_STACK_PROTECT_FAIL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Smashing-Protection">Stack Smashing Protection</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSTACK_005fPROTECT_005fGUARD"><code>TARGET_STACK_PROTECT_GUARD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Smashing-Protection">Stack Smashing Protection</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSTATIC_005fCHAIN"><code>TARGET_STATIC_CHAIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Frame-Registers">Frame Registers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSTRICT_005fARGUMENT_005fNAMING"><code>TARGET_STRICT_ARGUMENT_NAMING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Varargs">Varargs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSTRING_005fOBJECT_005fREF_005fTYPE_005fP"><code>TARGET_STRING_OBJECT_REF_TYPE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Run_002dtime-Target">Run-time Target</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSTRIP_005fNAME_005fENCODING"><code>TARGET_STRIP_NAME_ENCODING</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSTRUCT_005fVALUE_005fRTX"><code>TARGET_STRUCT_VALUE_RTX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Aggregate-Return">Aggregate Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSUPPORTS_005fSPLIT_005fSTACK"><code>TARGET_SUPPORTS_SPLIT_STACK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Stack-Smashing-Protection">Stack Smashing Protection</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fSUPPORTS_005fWEAK"><code>TARGET_SUPPORTS_WEAK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fTERMINATE_005fDW2_005fEH_005fFRAME_005fINFO"><code>TARGET_TERMINATE_DW2_EH_FRAME_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fTRAMPOLINE_005fADJUST_005fADDRESS"><code>TARGET_TRAMPOLINE_ADJUST_ADDRESS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fTRAMPOLINE_005fINIT"><code>TARGET_TRAMPOLINE_INIT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fUNSPEC_005fMAY_005fTRAP_005fP"><code>TARGET_UNSPEC_MAY_TRAP_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fUNWIND_005fTABLES_005fDEFAULT"><code>TARGET_UNWIND_TABLES_DEFAULT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Region-Output">Exception Region Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fUNWIND_005fWORD_005fMODE"><code>TARGET_UNWIND_WORD_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fUPDATE_005fSTACK_005fBOUNDARY"><code>TARGET_UPDATE_STACK_BOUNDARY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fUSES_005fWEAK_005fUNWIND_005fINFO"><code>TARGET_USES_WEAK_UNWIND_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Exception-Handling">Exception Handling</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fUSE_005fANCHORS_005fFOR_005fSYMBOL_005fP"><code>TARGET_USE_ANCHORS_FOR_SYMBOL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Anchored-Addresses">Anchored Addresses</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fUSE_005fBLOCKS_005fFOR_005fCONSTANT_005fP"><code>TARGET_USE_BLOCKS_FOR_CONSTANT_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fUSE_005fBLOCKS_005fFOR_005fDECL_005fP"><code>TARGET_USE_BLOCKS_FOR_DECL_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fUSE_005fJCR_005fSECTION"><code>TARGET_USE_JCR_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVALID_005fDLLIMPORT_005fATTRIBUTE_005fP"><code>TARGET_VALID_DLLIMPORT_ATTRIBUTE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Attributes">Target Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVALID_005fPOINTER_005fMODE"><code>TARGET_VALID_POINTER_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fADD_005fSTMT_005fCOST"><code>TARGET_VECTORIZE_ADD_STMT_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fAUTOVECTORIZE_005fVECTOR_005fSIZES"><code>TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fBUILTIN_005fCONVERSION"><code>TARGET_VECTORIZE_BUILTIN_CONVERSION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fBUILTIN_005fGATHER"><code>TARGET_VECTORIZE_BUILTIN_GATHER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fBUILTIN_005fMASK_005fFOR_005fLOAD"><code>TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fBUILTIN_005fTM_005fLOAD"><code>TARGET_VECTORIZE_BUILTIN_TM_LOAD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fBUILTIN_005fTM_005fSTORE"><code>TARGET_VECTORIZE_BUILTIN_TM_STORE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fBUILTIN_005fVECTORIZATION_005fCOST"><code>TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fBUILTIN_005fVECTORIZED_005fFUNCTION"><code>TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fDESTROY_005fCOST_005fDATA"><code>TARGET_VECTORIZE_DESTROY_COST_DATA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fFINISH_005fCOST"><code>TARGET_VECTORIZE_FINISH_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fINIT_005fCOST"><code>TARGET_VECTORIZE_INIT_COST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fPREFERRED_005fSIMD_005fMODE"><code>TARGET_VECTORIZE_PREFERRED_SIMD_MODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fSUPPORT_005fVECTOR_005fMISALIGNMENT"><code>TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fVECTOR_005fALIGNMENT_005fREACHABLE"><code>TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTORIZE_005fVEC_005fPERM_005fCONST_005fOK"><code>TARGET_VECTORIZE_VEC_PERM_CONST_OK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Addressing-Modes">Addressing Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTOR_005fALIGNMENT"><code>TARGET_VECTOR_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVECTOR_005fMODE_005fSUPPORTED_005fP"><code>TARGET_VECTOR_MODE_SUPPORTED_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Register-Arguments">Register Arguments</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVTABLE_005fDATA_005fENTRY_005fDISTANCE"><code>TARGET_VTABLE_DATA_ENTRY_DISTANCE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVTABLE_005fENTRY_005fALIGN"><code>TARGET_VTABLE_ENTRY_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fVTABLE_005fUSES_005fDESCRIPTORS"><code>TARGET_VTABLE_USES_DESCRIPTORS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fWANT_005fDEBUG_005fPUB_005fSECTIONS"><code>TARGET_WANT_DEBUG_PUB_SECTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SDB-and-DWARF">SDB and DWARF</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fWARN_005fFUNC_005fRETURN"><code>TARGET_WARN_FUNC_RETURN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tail-Calls">Tail Calls</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TARGET_005fWEAK_005fNOT_005fIN_005fARCHIVE_005fTOC"><code>TARGET_WEAK_NOT_IN_ARCHIVE_TOC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TCmode"><code>TCmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TDmode"><code>TDmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TEMPLATE_005fDECL"><code>TEMPLATE_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Temporaries">Temporaries</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Temporaries">Temporaries</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-termination-routines">termination routines</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Initialization">Initialization</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-testing-constraints">testing constraints</a>:</td><td>&nbsp;</td><td valign="top"><a href="#C-Constraint-Interface">C Constraint Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TEXT_005fSECTION_005fASM_005fOP"><code>TEXT_SECTION_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TFmode"><code>TFmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TF_005fSIZE"><code>TF_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-THEN_005fCLAUSE"><code>THEN_CLAUSE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-THREAD_005fMODEL_005fSPEC"><code>THREAD_MODEL_SPEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-THROW_005fEXPR"><code>THROW_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-THUNK_005fDECL"><code>THUNK_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-THUNK_005fDELTA"><code>THUNK_DELTA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TImode"><code>TImode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TImode_002c-in-insn"><code>TImode</code>, in <code>insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insns">Insns</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TLS_005fCOMMON_005fASM_005fOP"><code>TLS_COMMON_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TLS_005fSECTION_005fASM_005fFLAG"><code>TLS_SECTION_ASM_FLAG</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tm_002eh-macros"><samp>tm.h</samp> macros</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Target-Macros">Target Macros</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TQFmode"><code>TQFmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TQmode"><code>TQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-trampolines-for-nested-functions">trampolines for nested functions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRAMPOLINE_005fALIGNMENT"><code>TRAMPOLINE_ALIGNMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRAMPOLINE_005fSECTION"><code>TRAMPOLINE_SECTION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRAMPOLINE_005fSIZE"><code>TRAMPOLINE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRANSFER_005fFROM_005fTRAMPOLINE"><code>TRANSFER_FROM_TRAMPOLINE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Trampolines">Trampolines</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-trap-instruction-pattern"><code>trap</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tree">tree</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tree-overview">Tree overview</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tree-1">tree</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Tree-SSA">Tree SSA</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tree-SSA">Tree SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fCHAIN"><code>TREE_CHAIN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fCODE"><code>TREE_CODE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tree-overview">Tree overview</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tree_005fint_005fcst_005fequal"><code>tree_int_cst_equal</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fINT_005fCST_005fHIGH"><code>TREE_INT_CST_HIGH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fINT_005fCST_005fLOW"><code>TREE_INT_CST_LOW</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tree_005fint_005fcst_005flt"><code>tree_int_cst_lt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fLIST"><code>TREE_LIST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Containers">Containers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fOPERAND"><code>TREE_OPERAND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expression-trees">Expression trees</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fPUBLIC"><code>TREE_PUBLIC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fPUBLIC-1"><code>TREE_PUBLIC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fPURPOSE"><code>TREE_PURPOSE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Containers">Containers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fREADONLY"><code>TREE_READONLY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tree_005fsize"><code>tree_size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fSTATIC"><code>TREE_STATIC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fSTRING_005fLENGTH"><code>TREE_STRING_LENGTH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fSTRING_005fPOINTER"><code>TREE_STRING_POINTER</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fTHIS_005fVOLATILE"><code>TREE_THIS_VOLATILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Properties">Function Properties</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fTYPE"><code>TREE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Macros-and-Functions">Macros and Functions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fTYPE-1"><code>TREE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fTYPE-2"><code>TREE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Working-with-declarations">Working with declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fTYPE-3"><code>TREE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expression-trees">Expression trees</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fTYPE-4"><code>TREE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Expression-trees">Expression trees</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fTYPE-5"><code>TREE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Basics">Function Basics</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fTYPE-6"><code>TREE_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fVALUE"><code>TREE_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Containers">Containers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fVEC"><code>TREE_VEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Containers">Containers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fVEC_005fELT"><code>TREE_VEC_ELT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Containers">Containers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TREE_005fVEC_005fLENGTH"><code>TREE_VEC_LENGTH</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Containers">Containers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRULY_005fNOOP_005fTRUNCATION"><code>TRULY_NOOP_TRUNCATION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-truncate"><code>truncate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-truncmn2-instruction-pattern"><code>trunc<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRUNC_005fDIV_005fEXPR"><code>TRUNC_DIV_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRUNC_005fMOD_005fEXPR"><code>TRUNC_MOD_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRUTH_005fANDIF_005fEXPR"><code>TRUTH_ANDIF_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRUTH_005fAND_005fEXPR"><code>TRUTH_AND_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRUTH_005fNOT_005fEXPR"><code>TRUTH_NOT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRUTH_005fORIF_005fEXPR"><code>TRUTH_ORIF_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRUTH_005fOR_005fEXPR"><code>TRUTH_OR_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRUTH_005fXOR_005fEXPR"><code>TRUTH_XOR_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRY_005fBLOCK"><code>TRY_BLOCK</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRY_005fHANDLERS"><code>TRY_HANDLERS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TRY_005fSTMTS"><code>TRY_STMTS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Tuple-specific-accessors">Tuple specific accessors</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tuple-specific-accessors">Tuple specific accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-tuples">tuples</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Tuple-representation">Tuple representation</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-type">type</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-type-declaration">type declaration</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPENAME_005fTYPE"><code>TYPENAME_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPENAME_005fTYPE_005fFULLNAME"><code>TYPENAME_TYPE_FULLNAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPENAME_005fTYPE_005fFULLNAME-1"><code>TYPENAME_TYPE_FULLNAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPEOF_005fTYPE"><code>TYPEOF_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fALIGN"><code>TYPE_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fALIGN-1"><code>TYPE_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fALIGN-2"><code>TYPE_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fALIGN-3"><code>TYPE_ALIGN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fARG_005fTYPES"><code>TYPE_ARG_TYPES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fARG_005fTYPES-1"><code>TYPE_ARG_TYPES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fASM_005fOP"><code>TYPE_ASM_OP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fATTRIBUTES"><code>TYPE_ATTRIBUTES</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Attributes">Attributes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fBINFO"><code>TYPE_BINFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fBUILT_005fIN"><code>TYPE_BUILT_IN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fCANONICAL"><code>TYPE_CANONICAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fCANONICAL-1"><code>TYPE_CANONICAL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fCONTEXT"><code>TYPE_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fCONTEXT-1"><code>TYPE_CONTEXT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fDECL"><code>TYPE_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fFIELDS"><code>TYPE_FIELDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fFIELDS-1"><code>TYPE_FIELDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fFIELDS-2"><code>TYPE_FIELDS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fHAS_005fARRAY_005fNEW_005fOPERATOR"><code>TYPE_HAS_ARRAY_NEW_OPERATOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fHAS_005fDEFAULT_005fCONSTRUCTOR"><code>TYPE_HAS_DEFAULT_CONSTRUCTOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fHAS_005fMUTABLE_005fP"><code>TYPE_HAS_MUTABLE_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fHAS_005fNEW_005fOPERATOR"><code>TYPE_HAS_NEW_OPERATOR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fMAIN_005fVARIANT"><code>TYPE_MAIN_VARIANT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fMAIN_005fVARIANT-1"><code>TYPE_MAIN_VARIANT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fMAIN_005fVARIANT-2"><code>TYPE_MAIN_VARIANT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fMAX_005fVALUE"><code>TYPE_MAX_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fMETHODS"><code>TYPE_METHODS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fMETHOD_005fBASETYPE"><code>TYPE_METHOD_BASETYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fMETHOD_005fBASETYPE-1"><code>TYPE_METHOD_BASETYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fMIN_005fVALUE"><code>TYPE_MIN_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fNAME"><code>TYPE_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fNAME-1"><code>TYPE_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fNAME-2"><code>TYPE_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fNAME-3"><code>TYPE_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fNOTHROW_005fP"><code>TYPE_NOTHROW_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fOFFSET_005fBASETYPE"><code>TYPE_OFFSET_BASETYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fOFFSET_005fBASETYPE-1"><code>TYPE_OFFSET_BASETYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fOPERAND_005fFMT"><code>TYPE_OPERAND_FMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Label-Output">Label Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fOVERLOADS_005fARRAY_005fREF"><code>TYPE_OVERLOADS_ARRAY_REF</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fOVERLOADS_005fARROW"><code>TYPE_OVERLOADS_ARROW</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fOVERLOADS_005fCALL_005fEXPR"><code>TYPE_OVERLOADS_CALL_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fPOLYMORPHIC_005fP"><code>TYPE_POLYMORPHIC_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fPRECISION"><code>TYPE_PRECISION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fPRECISION-1"><code>TYPE_PRECISION</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fPTRDATAMEM_005fP"><code>TYPE_PTRDATAMEM_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fPTRDATAMEM_005fP-1"><code>TYPE_PTRDATAMEM_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fPTRFN_005fP"><code>TYPE_PTRFN_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fPTROBV_005fP"><code>TYPE_PTROBV_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fPTROB_005fP"><code>TYPE_PTROB_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fPTR_005fP"><code>TYPE_PTR_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fQUAL_005fCONST"><code>TYPE_QUAL_CONST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fQUAL_005fCONST-1"><code>TYPE_QUAL_CONST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fQUAL_005fRESTRICT"><code>TYPE_QUAL_RESTRICT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fQUAL_005fRESTRICT-1"><code>TYPE_QUAL_RESTRICT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fQUAL_005fVOLATILE"><code>TYPE_QUAL_VOLATILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fQUAL_005fVOLATILE-1"><code>TYPE_QUAL_VOLATILE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fRAISES_005fEXCEPTIONS"><code>TYPE_RAISES_EXCEPTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Functions-for-C_002b_002b">Functions for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fSIZE"><code>TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fSIZE-1"><code>TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fSIZE-2"><code>TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fSIZE-3"><code>TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fSTRUCTURAL_005fEQUALITY_005fP"><code>TYPE_STRUCTURAL_EQUALITY_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fSTRUCTURAL_005fEQUALITY_005fP-1"><code>TYPE_STRUCTURAL_EQUALITY_P</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fUNQUALIFIED"><code>TYPE_UNQUALIFIED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fUNQUALIFIED-1"><code>TYPE_UNQUALIFIED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-TYPE_005fVFIELD"><code>TYPE_VFIELD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-U">U</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-UDAmode"><code>UDAmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-udiv"><code>udiv</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-udivm3-instruction-pattern"><code>udiv<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-udivmodm4-instruction-pattern"><code>udivmod<var>m</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-udot_005fprodm-instruction-pattern"><code>udot_prod<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UDQmode"><code>UDQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UHAmode"><code>UHAmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UHQmode"><code>UHQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT16_005fTYPE"><code>UINT16_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT32_005fTYPE"><code>UINT32_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT64_005fTYPE"><code>UINT64_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT8_005fTYPE"><code>UINT8_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINTMAX_005fTYPE"><code>UINTMAX_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINTPTR_005fTYPE"><code>UINTPTR_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT_005fFAST16_005fTYPE"><code>UINT_FAST16_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT_005fFAST32_005fTYPE"><code>UINT_FAST32_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT_005fFAST64_005fTYPE"><code>UINT_FAST64_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT_005fFAST8_005fTYPE"><code>UINT_FAST8_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT_005fLEAST16_005fTYPE"><code>UINT_LEAST16_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT_005fLEAST32_005fTYPE"><code>UINT_LEAST32_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT_005fLEAST64_005fTYPE"><code>UINT_LEAST64_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UINT_005fLEAST8_005fTYPE"><code>UINT_LEAST8_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umaddmn4-instruction-pattern"><code>umadd<var>m</var><var>n</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umax"><code>umax</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umaxm3-instruction-pattern"><code>umax<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umin"><code>umin</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-uminm3-instruction-pattern"><code>umin<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umod"><code>umod</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umodm3-instruction-pattern"><code>umod<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umsubmn4-instruction-pattern"><code>umsub<var>m</var><var>n</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umulhisi3-instruction-pattern"><code>umulhisi3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umulm3_005fhighpart-instruction-pattern"><code>umul<var>m</var>3_highpart</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umulqihi3-instruction-pattern"><code>umulqihi3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-umulsidi3-instruction-pattern"><code>umulsidi3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unchanging"><code>unchanging</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unchanging_002c-in-call_005finsn"><code>unchanging</code>, in <code>call_insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unchanging_002c-in-jump_005finsn_002c-call_005finsn-and-insn"><code>unchanging</code>, in <code>jump_insn</code>, <code>call_insn</code> and <code>insn</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unchanging_002c-in-mem"><code>unchanging</code>, in <code>mem</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unchanging_002c-in-subreg"><code>unchanging</code>, in <code>subreg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unchanging_002c-in-subreg-1"><code>unchanging</code>, in <code>subreg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unchanging_002c-in-symbol_005fref"><code>unchanging</code>, in <code>symbol_ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNEQ_005fEXPR"><code>UNEQ_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNGE_005fEXPR"><code>UNGE_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNGT_005fEXPR"><code>UNGT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unions_002c-returning">unions, returning</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Interface">Interface</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNION_005fTYPE"><code>UNION_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNION_005fTYPE-1"><code>UNION_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Classes">Classes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNITS_005fPER_005fWORD"><code>UNITS_PER_WORD</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNKNOWN_005fTYPE"><code>UNKNOWN_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNKNOWN_005fTYPE-1"><code>UNKNOWN_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types-for-C_002b_002b">Types for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNLE_005fEXPR"><code>UNLE_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNLIKELY_005fEXECUTED_005fTEXT_005fSECTION_005fNAME"><code>UNLIKELY_EXECUTED_TEXT_SECTION_NAME</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNLT_005fEXPR"><code>UNLT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UNORDERED_005fEXPR"><code>UNORDERED_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unshare_005fall_005frtl"><code>unshare_all_rtl</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sharing">Sharing</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned-division">unsigned division</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned-division-with-unsigned-saturation">unsigned division with unsigned saturation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned-greater-than">unsigned greater than</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned-greater-than-1">unsigned greater than</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned-less-than">unsigned less than</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned-less-than-1">unsigned less than</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Comparisons">Comparisons</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned-minimum-and-maximum">unsigned minimum and maximum</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned_005ffix"><code>unsigned_fix</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned_005ffloat"><code>unsigned_float</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned_005ffract_005fconvert"><code>unsigned_fract_convert</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unsigned_005fsat_005ffract"><code>unsigned_sat_fract</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unspec"><code>unspec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unspec-1"><code>unspec</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-Definitions">Constant Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unspec_005fvolatile"><code>unspec_volatile</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-unspec_005fvolatile-1"><code>unspec_volatile</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-Definitions">Constant Definitions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-untyped_005fcall-instruction-pattern"><code>untyped_call</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-untyped_005freturn-instruction-pattern"><code>untyped_return</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UPDATE_005fPATH_005fHOST_005fCANONICALIZE-_0028path_0029"><code>UPDATE_PATH_HOST_CANONICALIZE (<var>path</var>)</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-update_005fssa"><code>update_ssa</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-update_005fstmt"><code>update_stmt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-update_005fstmt-1"><code>update_stmt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA-Operands">SSA Operands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-update_005fstmt_005fif_005fmodified"><code>update_stmt_if_modified</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manipulating-GIMPLE-statements">Manipulating GIMPLE statements</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UQQmode"><code>UQQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usaddm3-instruction-pattern"><code>usadd<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USAmode"><code>USAmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usashlm3-instruction-pattern"><code>usashl<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usdivm3-instruction-pattern"><code>usdiv<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-use"><code>use</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Side-Effects">Side Effects</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-used"><code>used</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-used_002c-in-symbol_005fref"><code>used</code>, in <code>symbol_ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-user"><code>user</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-user-gc">user gc</a>:</td><td>&nbsp;</td><td valign="top"><a href="#User-GC">User GC</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USER_005fLABEL_005fPREFIX"><code>USER_LABEL_PREFIX</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Instruction-Output">Instruction Output</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fC_005fALLOCA"><code>USE_C_ALLOCA</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fLD_005fAS_005fNEEDED"><code>USE_LD_AS_NEEDED</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Driver">Driver</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fLOAD_005fPOST_005fDECREMENT"><code>USE_LOAD_POST_DECREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fLOAD_005fPOST_005fINCREMENT"><code>USE_LOAD_POST_INCREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fLOAD_005fPRE_005fDECREMENT"><code>USE_LOAD_PRE_DECREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fLOAD_005fPRE_005fINCREMENT"><code>USE_LOAD_PRE_INCREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-use_005fparam"><code>use_param</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-use_005fparamn"><code>use_param<var>n</var></code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-use_005fparams"><code>use_params</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fSELECT_005fSECTION_005fFOR_005fFUNCTIONS"><code>USE_SELECT_SECTION_FOR_FUNCTIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Sections">Sections</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fSTORE_005fPOST_005fDECREMENT"><code>USE_STORE_POST_DECREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fSTORE_005fPOST_005fINCREMENT"><code>USE_STORE_POST_INCREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fSTORE_005fPRE_005fDECREMENT"><code>USE_STORE_PRE_DECREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USE_005fSTORE_005fPRE_005fINCREMENT"><code>USE_STORE_PRE_INCREMENT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Costs">Costs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USING_005fSTMT"><code>USING_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usmaddmn4-instruction-pattern"><code>usmadd<var>m</var><var>n</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usmsubmn4-instruction-pattern"><code>usmsub<var>m</var><var>n</var>4</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usmulhisi3-instruction-pattern"><code>usmulhisi3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usmulm3-instruction-pattern"><code>usmul<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usmulqihi3-instruction-pattern"><code>usmulqihi3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usmulsidi3-instruction-pattern"><code>usmulsidi3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usnegm2-instruction-pattern"><code>usneg<var>m</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-USQmode"><code>USQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-ussubm3-instruction-pattern"><code>ussub<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-usum_005fwidenm3-instruction-pattern"><code>usum_widen<var>m3</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-us_005fashift"><code>us_ashift</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-us_005fminus"><code>us_minus</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-us_005fmult"><code>us_mult</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-us_005fneg"><code>us_neg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-us_005fplus"><code>us_plus</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-us_005ftruncate"><code>us_truncate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UTAmode"><code>UTAmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-UTQmode"><code>UTQmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-V">V</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-V-in-constraint">&lsquo;<samp>V</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-values_002c-returned-by-functions">values, returned by functions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Scalar-Return">Scalar Return</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-varargs-implementation">varargs implementation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Varargs">Varargs</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-variable">variable</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-Variable-Location-Debug-Information-in-RTL">Variable Location Debug Information in RTL</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Debug-Information">Debug Information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-variable_005fsize"><code>variable_size</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#GTY-Options">GTY Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VAR_005fDECL"><code>VAR_DECL</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Declarations">Declarations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-var_005flocation"><code>var_location</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Debug-Information">Debug Information</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vashlm3-instruction-pattern"><code>vashl<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vashrm3-instruction-pattern"><code>vashr<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VA_005fARG_005fEXPR"><code>VA_ARG_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Unary-and-Binary-Expressions">Unary and Binary Expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vcondmn-instruction-pattern"><code>vcond<var>m</var><var>n</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vector">vector</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Containers">Containers</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vector-operations">vector operations</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vector-Operations">Vector Operations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VECTOR_005fCST"><code>VECTOR_CST</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Constant-expressions">Constant expressions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VECTOR_005fSTORE_005fFLAG_005fVALUE"><code>VECTOR_STORE_FLAG_VALUE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fconcat"><code>vec_concat</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vector-Operations">Vector Operations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fduplicate"><code>vec_duplicate</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vector-Operations">Vector Operations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fextractm-instruction-pattern"><code>vec_extract<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005finitm-instruction-pattern"><code>vec_init<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fload_005flanesmn-instruction-pattern"><code>vec_load_lanes<var>m</var><var>n</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fLSHIFT_005fEXPR"><code>VEC_LSHIFT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fmerge"><code>vec_merge</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vector-Operations">Vector Operations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fPACK_005fFIX_005fTRUNC_005fEXPR"><code>VEC_PACK_FIX_TRUNC_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fPACK_005fSAT_005fEXPR"><code>VEC_PACK_SAT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fpack_005fsfix_005ftrunc_005fm-instruction-pattern"><code>vec_pack_sfix_trunc_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fpack_005fssat_005fm-instruction-pattern"><code>vec_pack_ssat_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fPACK_005fTRUNC_005fEXPR"><code>VEC_PACK_TRUNC_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fpack_005ftrunc_005fm-instruction-pattern"><code>vec_pack_trunc_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fpack_005fufix_005ftrunc_005fm-instruction-pattern"><code>vec_pack_ufix_trunc_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fpack_005fusat_005fm-instruction-pattern"><code>vec_pack_usat_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fpermm-instruction-pattern"><code>vec_perm<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fperm_005fconstm-instruction-pattern"><code>vec_perm_const<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fRSHIFT_005fEXPR"><code>VEC_RSHIFT_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fselect"><code>vec_select</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vector-Operations">Vector Operations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fsetm-instruction-pattern"><code>vec_set<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fshl_005fm-instruction-pattern"><code>vec_shl_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fshr_005fm-instruction-pattern"><code>vec_shr_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fstore_005flanesmn-instruction-pattern"><code>vec_store_lanes<var>m</var><var>n</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005funpacks_005ffloat_005fhi_005fm-instruction-pattern"><code>vec_unpacks_float_hi_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005funpacks_005ffloat_005flo_005fm-instruction-pattern"><code>vec_unpacks_float_lo_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005funpacks_005fhi_005fm-instruction-pattern"><code>vec_unpacks_hi_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005funpacks_005flo_005fm-instruction-pattern"><code>vec_unpacks_lo_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005funpacku_005ffloat_005fhi_005fm-instruction-pattern"><code>vec_unpacku_float_hi_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005funpacku_005ffloat_005flo_005fm-instruction-pattern"><code>vec_unpacku_float_lo_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005funpacku_005fhi_005fm-instruction-pattern"><code>vec_unpacku_hi_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005funpacku_005flo_005fm-instruction-pattern"><code>vec_unpacku_lo_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fUNPACK_005fFLOAT_005fHI_005fEXPR"><code>VEC_UNPACK_FLOAT_HI_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fUNPACK_005fFLOAT_005fLO_005fEXPR"><code>VEC_UNPACK_FLOAT_LO_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fUNPACK_005fHI_005fEXPR"><code>VEC_UNPACK_HI_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fUNPACK_005fLO_005fEXPR"><code>VEC_UNPACK_LO_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fWIDEN_005fMULT_005fHI_005fEXPR"><code>VEC_WIDEN_MULT_HI_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VEC_005fWIDEN_005fMULT_005fLO_005fEXPR"><code>VEC_WIDEN_MULT_LO_EXPR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Vectors">Vectors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fsmult_005feven_005fm-instruction-pattern"><code>vec_widen_smult_even_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fsmult_005fhi_005fm-instruction-pattern"><code>vec_widen_smult_hi_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fsmult_005flo_005fm-instruction-pattern"><code>vec_widen_smult_lo_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fsmult_005fodd_005fm-instruction-pattern"><code>vec_widen_smult_odd_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fsshiftl_005fhi_005fm-instruction-pattern"><code>vec_widen_sshiftl_hi_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fsshiftl_005flo_005fm-instruction-pattern"><code>vec_widen_sshiftl_lo_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fumult_005feven_005fm-instruction-pattern"><code>vec_widen_umult_even_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fumult_005fhi_005fm-instruction-pattern"><code>vec_widen_umult_hi_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fumult_005flo_005fm-instruction-pattern"><code>vec_widen_umult_lo_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fumult_005fodd_005fm-instruction-pattern"><code>vec_widen_umult_odd_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fushiftl_005fhi_005fm-instruction-pattern"><code>vec_widen_ushiftl_hi_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vec_005fwiden_005fushiftl_005flo_005fm-instruction-pattern"><code>vec_widen_ushiftl_lo_<var>m</var></code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-verify_005fflow_005finfo"><code>verify_flow_info</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Maintaining-the-CFG">Maintaining the CFG</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-virtual-operands">virtual operands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA-Operands">SSA Operands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VIRTUAL_005fINCOMING_005fARGS_005fREGNUM"><code>VIRTUAL_INCOMING_ARGS_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VIRTUAL_005fOUTGOING_005fARGS_005fREGNUM"><code>VIRTUAL_OUTGOING_ARGS_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VIRTUAL_005fSTACK_005fDYNAMIC_005fREGNUM"><code>VIRTUAL_STACK_DYNAMIC_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VIRTUAL_005fSTACK_005fVARS_005fREGNUM"><code>VIRTUAL_STACK_VARS_REGNUM</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VLIW">VLIW</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VLIW-1">VLIW</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Processor-pipeline-description">Processor pipeline description</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vlshrm3-instruction-pattern"><code>vlshr<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VMS"><code>VMS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VMS_005fDEBUGGING_005fINFO"><code>VMS_DEBUGGING_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#VMS-Debug">VMS Debug</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VOIDmode"><code>VOIDmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-VOID_005fTYPE"><code>VOID_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Types">Types</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatil"><code>volatil</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatil_002c-in-insn_002c-call_005finsn_002c-jump_005finsn_002c-code_005flabel_002c-barrier_002c-and-note"><code>volatil</code>, in <code>insn</code>, <code>call_insn</code>, <code>jump_insn</code>, <code>code_label</code>, <code>barrier</code>, and <code>note</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatil_002c-in-label_005fref-and-reg_005flabel"><code>volatil</code>, in <code>label_ref</code> and <code>reg_label</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatil_002c-in-mem_002c-asm_005foperands_002c-and-asm_005finput"><code>volatil</code>, in <code>mem</code>, <code>asm_operands</code>, and <code>asm_input</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatil_002c-in-reg"><code>volatil</code>, in <code>reg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatil_002c-in-subreg"><code>volatil</code>, in <code>subreg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatil_002c-in-subreg-1"><code>volatil</code>, in <code>subreg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatil_002c-in-symbol_005fref"><code>volatil</code>, in <code>symbol_ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatile-memory-references">volatile memory references</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-volatile_002c-in-prefetch"><code>volatile</code>, in <code>prefetch</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Flags">Flags</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-voting-between-constraint-alternatives">voting between constraint alternatives</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Class-Preferences">Class Preferences</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vrotlm3-instruction-pattern"><code>vrotl<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-vrotrm3-instruction-pattern"><code>vrotr<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-W">W</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-walk_005fdominator_005ftree"><code>walk_dominator_tree</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-walk_005fgimple_005fop"><code>walk_gimple_op</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statement-and-operand-traversals">Statement and operand traversals</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-walk_005fgimple_005fseq"><code>walk_gimple_seq</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statement-and-operand-traversals">Statement and operand traversals</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-walk_005fgimple_005fstmt"><code>walk_gimple_stmt</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statement-and-operand-traversals">Statement and operand traversals</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-walk_005fuse_005fdef_005fchains"><code>walk_use_def_chains</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#SSA">SSA</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WCHAR_005fTYPE"><code>WCHAR_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WCHAR_005fTYPE_005fSIZE"><code>WCHAR_TYPE_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-which_005falternative"><code>which_alternative</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Output-Statement">Output Statement</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WHILE_005fBODY"><code>WHILE_BODY</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WHILE_005fCOND"><code>WHILE_COND</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WHILE_005fSTMT"><code>WHILE_STMT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Statements-for-C_002b_002b">Statements for C++</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-whopr">whopr</a>:</td><td>&nbsp;</td><td valign="top"><a href="#LTO">LTO</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WIDEST_005fHARDWARE_005fFP_005fSIZE"><code>WIDEST_HARDWARE_FP_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-window_005fsave-instruction-pattern"><code>window_save</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WINT_005fTYPE"><code>WINT_TYPE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WORDS_005fBIG_005fENDIAN"><code>WORDS_BIG_ENDIAN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Storage-Layout">Storage Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WORDS_005fBIG_005fENDIAN_002c-effect-on-subreg"><code>WORDS_BIG_ENDIAN</code>, effect on <code>subreg</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Regs-and-Memory">Regs and Memory</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-word_005fmode"><code>word_mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-WORD_005fREGISTER_005fOPERATIONS"><code>WORD_REGISTER_OPERATIONS</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Misc">Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-wpa">wpa</a>:</td><td>&nbsp;</td><td valign="top"><a href="#LTO">LTO</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-X">X</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-X-in-constraint">&lsquo;<samp>X</samp>&rsquo; in constraint</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Simple-Constraints">Simple Constraints</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-x_002dhost"><samp>x-<var>host</var></samp></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Fragment">Host Fragment</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XCmode"><code>XCmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XCOFF_005fDEBUGGING_005fINFO"><code>XCOFF_DEBUGGING_INFO</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#DBX-Options">DBX Options</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XEXP"><code>XEXP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XFmode"><code>XFmode</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Machine-Modes">Machine Modes</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XF_005fSIZE"><code>XF_SIZE</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Type-Layout">Type Layout</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XINT"><code>XINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-xm_002dmachine_002eh"><samp>xm-<var>machine</var>.h</samp></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Filesystem">Filesystem</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-xm_002dmachine_002eh-1"><samp>xm-<var>machine</var>.h</samp></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Host-Misc">Host Misc</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-xor"><code>xor</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Arithmetic">Arithmetic</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-xor_002c-canonicalization-of"><code>xor</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-xorm3-instruction-pattern"><code>xor<var>m</var>3</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XSTR"><code>XSTR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XVEC"><code>XVEC</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XVECEXP"><code>XVECEXP</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XVECLEN"><code>XVECLEN</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-XWINT"><code>XWINT</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Accessors">Accessors</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th><a name="Concept-Index_cp_letter-Z">Z</a></th><td></td><td></td></tr>
<tr><td></td><td valign="top"><a href="#index-zero_005fextend"><code>zero_extend</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Conversions">Conversions</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-zero_005fextendmn2-instruction-pattern"><code>zero_extend<var>m</var><var>n</var>2</code> instruction pattern</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Standard-Names">Standard Names</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-zero_005fextract"><code>zero_extract</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Bit_002dFields">Bit-Fields</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-zero_005fextract_002c-canonicalization-of"><code>zero_extract</code>, canonicalization of</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Insn-Canonicalizations">Insn Canonicalizations</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
</table>
<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Concept-Index_cp_symbol-1"><b>!</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-2"><b>#</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-3"><b>%</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-4"><b>&amp;</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-5"><b>(</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-6"><b>*</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-7"><b>+</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-8"><b>-</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-9"><b>/</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-10"><b>0</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-11"><b>&lt;</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-12"><b>=</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-13"><b>&gt;</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-14"><b>?</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-15"><b>\</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_symbol-16"><b>_</b></a>
 &nbsp; 
<br>
<a class="summary-letter" href="#Concept-Index_cp_letter-A"><b>A</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-B"><b>B</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-C"><b>C</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-D"><b>D</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-E"><b>E</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-F"><b>F</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-G"><b>G</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-H"><b>H</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-I"><b>I</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-J"><b>J</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-L"><b>L</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-M"><b>M</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-N"><b>N</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-O"><b>O</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-Q"><b>Q</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-R"><b>R</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-T"><b>T</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-U"><b>U</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-V"><b>V</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-W"><b>W</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-X"><b>X</b></a>
 &nbsp; 
<a class="summary-letter" href="#Concept-Index_cp_letter-Z"><b>Z</b></a>
 &nbsp; 
</td></tr></table>


<div class="footnote">
<hr>
<h4 class="footnotes-heading">Footnotes</h4>

<h3><a name="FOOT1" href="#DOCF1">(1)</a></h3>
<p>Except if the compiler was buggy and miscompiled
some of the files that were not modified.  In this case, it&rsquo;s best
to use <code>make restrap</code>.</p>
<h3><a name="FOOT2" href="#DOCF2">(2)</a></h3>
<p>Customarily, the system compiler
is also termed the <samp>stage0</samp> GCC.</p>
<h3><a name="FOOT3" href="#DOCF3">(3)</a></h3>
<p>These restrictions are derived
from those in Morgan 4.8.</p>
<h3><a name="FOOT4" href="#DOCF4">(4)</a></h3>
<p><code>note</code> insns can separate them, though.</p>
<h3><a name="FOOT5" href="#DOCF5">(5)</a></h3>
<p>However, the size of the automaton depends on
processor complexity.  To limit this effect, machine descriptions
can split orthogonal parts of the machine description among several
automata: but then, since each of these must be stepped independently,
this does cause a small decrease in the algorithm&rsquo;s performance.</p>
</div>
<hr>



</body>
</html>