XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
xwaop.h
浏览该文件的文档.
1
13#ifndef __xwos_lib_xwaop_h__
14#define __xwos_lib_xwaop_h__
15
16#include <xwos/standard.h>
17#include <xwos/lib/xwbop.h>
18
25#include <xwos/ospl/soc/xwaop.h>
26
35#define xwmoaop(type, op, a, memorder, ...) \
36 xwaop__##type##__##op(a, memorder, ##__VA_ARGS__)
37
45#define xwaop_load(type, a, memorder) \
46 xwmoaop(type, load, (a), memorder)
47
56#define xwaop_store(type, a, memorder, v) \
57 xwmoaop(type, store, (a), memorder, (v))
58
66#define xwaop(type, op, a, ...) \
67 xwaop__##type##__##op(a, ##__VA_ARGS__)
68
77#define xwaop_read(type, a, ov) \
78 xwaop(type, read, (a), (type *)(ov))
79
91#define xwaop_write(type, a, v, ov) \
92 xwaop(type, write, (a), (v), (type *)(ov))
93
113#define xwaop_teq_then_write(type, a, t, v, ov) \
114 xwaop(type, teq_then_write, (a), (t), (v), (type *)(ov))
115
135#define xwaop_tne_then_write(type, a, t, v, ov) \
136 xwaop(type, tne_then_write, (a), (t), (v), (type *)(ov))
137
157#define xwaop_tgt_then_write(type, a, t, v, ov) \
158 xwaop(type, tgt_then_write, (a), (t), (v), (type *)(ov))
159
179#define xwaop_tge_then_write(type, a, t, v, ov) \
180 xwaop(type, tge_then_write, (a), (t), (v), (type *)(ov))
181
201#define xwaop_tlt_then_write(type, a, t, v, ov) \
202 xwaop(type, tlt_then_write, (a), (t), (v), (type *)(ov))
203
223#define xwaop_tle_then_write(type, a, t, v, ov) \
224 xwaop(type, tle_then_write, (a), (t), (v), (type *)(ov))
225
246#define xwaop_tgtlt_then_write(type, a, l, r, v, ov) \
247 xwaop(type, tgtlt_then_write, (a), (l), (r), (v), (type *)(ov))
248
269#define xwaop_tgelt_then_write(type, a, l, r, v, ov) \
270 xwaop(type, tgelt_then_write, (a), (l), (r), (v), (type *)(ov))
271
292#define xwaop_tgtle_then_write(type, a, l, r, v, ov) \
293 xwaop(type, tgtle_then_write, (a), (l), (r), (v), (type *)(ov))
294
315#define xwaop_tgele_then_write(type, a, l, r, v, ov) \
316 xwaop(type, tgele_then_write, (a), (l), (r), (v), (type *)(ov))
317
330#define xwaop_add(type, a, v, nv, ov) \
331 xwaop(type, add, (a), (v), (type *)(nv), (type *)(ov))
332
355#define xwaop_teq_then_add(type, a, t, v, nv, ov) \
356 xwaop(type, teq_then_add, (a), (t), (v), (type *)(nv), (type *)(ov))
357
380#define xwaop_tne_then_add(type, a, t, v, nv, ov) \
381 xwaop(type, tne_then_add, (a), (t), (v), (type *)(nv), (type *)(ov))
382
405#define xwaop_tgt_then_add(type, a, t, v, nv, ov) \
406 xwaop(type, tgt_then_add, (a), (t), (v), (type *)(nv), (type *)(ov))
407
430#define xwaop_tge_then_add(type, a, t, v, nv, ov) \
431 xwaop(type, tge_then_add, (a), (t), (v), (type *)(nv), (type *)(ov))
432
455#define xwaop_tlt_then_add(type, a, t, v, nv, ov) \
456 xwaop(type, tlt_then_add, (a), (t), (v), (type *)(nv), (type *)(ov))
457
480#define xwaop_tle_then_add(type, a, t, v, nv, ov) \
481 xwaop(type, tle_then_add, (a), (t), (v), (type *)(nv), (type *)(ov))
482
506#define xwaop_tgtlt_then_add(type, a, l, r, v, nv, ov) \
507 xwaop(type, tgtlt_then_add, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
508
532#define xwaop_tgelt_then_add(type, a, l, r, v, nv, ov) \
533 xwaop(type, tgelt_then_add, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
534
558#define xwaop_tgtle_then_add(type, a, l, r, v, nv, ov) \
559 xwaop(type, tgtle_then_add, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
560
584#define xwaop_tgele_then_add(type, a, l, r, v, nv, ov) \
585 xwaop(type, tgele_then_add, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
586
598#define xwaop_sub(type, a, v, nv, ov) \
599 xwaop(type, sub, (a), (v), (type *)(nv), (type *)(ov))
600
623#define xwaop_teq_then_sub(type, a, t, v, nv, ov) \
624 xwaop(type, teq_then_sub, (a), (t), (v), (type *)(nv), (type *)(ov))
625
648#define xwaop_tne_then_sub(type, a, t, v, nv, ov) \
649 xwaop(type, tne_then_sub, (a), (t), (v), (type *)(nv), (type *)(ov))
650
673#define xwaop_tgt_then_sub(type, a, t, v, nv, ov) \
674 xwaop(type, tgt_then_sub, (a), (t), (v), (type *)(nv), (type *)(ov))
675
698#define xwaop_tge_then_sub(type, a, t, v, nv, ov) \
699 xwaop(type, tge_then_sub, (a), (t), (v), (type *)(nv), (type *)(ov))
700
723#define xwaop_tlt_then_sub(type, a, t, v, nv, ov) \
724 xwaop(type, tlt_then_sub, (a), (t), (v), (type *)(nv), (type *)(ov))
725
748#define xwaop_tle_then_sub(type, a, t, v, nv, ov) \
749 xwaop(type, tle_then_sub, (a), (t), (v), (type *)(nv), (type *)(ov))
750
774#define xwaop_tgtlt_then_sub(type, a, l, r, v, nv, ov) \
775 xwaop(type, tgtlt_then_sub, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
776
800#define xwaop_tgelt_then_sub(type, a, l, r, v, nv, ov) \
801 xwaop(type, tgelt_then_sub, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
802
826#define xwaop_tgtle_then_sub(type, a, l, r, v, nv, ov) \
827 xwaop(type, tgtle_then_sub, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
828
852#define xwaop_tgele_then_sub(type, a, l, r, v, nv, ov) \
853 xwaop(type, tgele_then_sub, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
854
866#define xwaop_rsb(type, a, v, nv, ov) \
867 xwaop(type, rsb, (a), (v), (type *)(nv), (type *)(ov))
868
891#define xwaop_teq_then_rsb(type, a, t, v, nv, ov) \
892 xwaop(type, teq_then_rsb, (a), (t), (v), (type *)(nv), (type *)(ov))
893
916#define xwaop_tne_then_rsb(type, a, t, v, nv, ov) \
917 xwaop(type, tne_then_rsb, (a), (t), (v), (type *)(nv), (type *)(ov))
918
941#define xwaop_tgt_then_rsb(type, a, t, v, nv, ov) \
942 xwaop(type, tgt_then_rsb, (a), (t), (v), (type *)(nv), (type *)(ov))
943
966#define xwaop_tge_then_rsb(type, a, t, v, nv, ov) \
967 xwaop(type, tge_then_rsb, (a), (t), (v), (type *)(nv), (type *)(ov))
968
991#define xwaop_tlt_then_rsb(type, a, t, v, nv, ov) \
992 xwaop(type, tlt_then_rsb, (a), (t), (v), (type *)(nv), (type *)(ov))
993
1016#define xwaop_tle_then_rsb(type, a, t, v, nv, ov) \
1017 xwaop(type, tle_then_rsb, (a), (t), (v), (type *)(nv), (type *)(ov))
1018
1042#define xwaop_tgtlt_then_rsb(type, a, l, r, v, nv, ov) \
1043 xwaop(type, tgtlt_then_rsb, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
1044
1068#define xwaop_tgelt_then_rsb(type, a, l, r, v, nv, ov) \
1069 xwaop(type, tgelt_then_rsb, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
1070
1094#define xwaop_tgtle_then_rsb(type, a, l, r, v, nv, ov) \
1095 xwaop(type, tgtle_then_rsb, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
1096
1120#define xwaop_tgele_then_rsb(type, a, l, r, v, nv, ov) \
1121 xwaop(type, tgele_then_rsb, (a), (l), (r), (v), (type *)(nv), (type *)(ov))
1122
1134#define xwaop_and(type, a, v, nv, ov) \
1135 xwaop(type, and, (a), (v), (type *)(nv), (type *)(ov))
1136
1148#define xwaop_or(type, a, v, nv, ov) \
1149 xwaop(type, or, (a), (v), (type *)(nv), (type *)(ov))
1150
1162#define xwaop_xor(type, a, v, nv, ov) \
1163 xwaop(type, xor, (a), (v), (type *)(nv), (type *)(ov))
1164
1176#define xwaop_s1m(type, a, m, nv, ov) \
1177 xwaop(type, or, (a), (m), (type *)(nv), (type *)(ov))
1178
1190#define xwaop_c0m(type, a, m, nv, ov) \
1191 xwaop(type, c0m, (a), (m), (type *)(nv), (type *)(ov))
1192
1204#define xwaop_x1m(type, a, m, nv, ov) \
1205 xwaop(type, xor, (a), (m), (type *)(nv), (type *)(ov))
1206
1207
1229#define xwaop_t1ma_then_c0m(type, a, m, nv, ov) \
1230 xwaop(type, t1ma_then_c0m, (a), (m), (type *)(nv), (type *)(ov))
1231
1253#define xwaop_t1mo_then_c0m(type, a, m, nv, ov) \
1254 xwaop(type, t1mo_then_c0m, (a), (m), (type *)(nv), (type *)(ov))
1255
1277#define xwaop_t0ma_then_s1m(type, a, m, nv, ov) \
1278 xwaop(type, t0ma_then_s1m, (a), (m), (type *)(nv), (type *)(ov))
1279
1301#define xwaop_t0mo_then_s1m(type, a, m, nv, ov) \
1302 xwaop(type, t0mo_then_s1m, (a), (m), (type *)(nv), (type *)(ov))
1303
1328#define xwaop_tst_then_op(type, a, tf, tfarg, of, ofarg, nv, ov) \
1329 xwaop(type, tst_then_op, (a), (tf), (tfarg), (of), (ofarg), \
1330 (type *)(nv), (type *)(ov))
1331
1332/******** ******** load ******** ********/
1338#define DEFINE_XWAOP_LOAD(type, btype) \
1339static __xwlib_inline \
1340type xwaop__##type##__load(atomic_##type * a, \
1341 const enum xwaop_memory_order_em mo) \
1342{ \
1343 return (type)xwaop__##btype##__load((atomic_##btype *)a, mo); \
1344}
1345
1346/******** ******** store ******** ********/
1352#define DEFINE_XWAOP_STORE(type, btype) \
1353static __xwlib_inline \
1354type xwaop__##type##__store(atomic_##type * a, \
1355 const enum xwaop_memory_order_em mo, \
1356 type v) \
1357{ \
1358 return (type)xwaop__##btype##__store((atomic_##btype *)a, mo, (btype)v); \
1359}
1360
1361/******** ******** read ******** ********/
1367#define DEFINE_XWAOP_READ(type, btype) \
1368static __xwlib_inline \
1369void xwaop__##type##__read(atomic_##type * a, type * ov) \
1370{ \
1371 xwaop__##btype##__read((atomic_##btype *)a, \
1372 (btype *)ov); \
1373}
1374
1375/******** ******** write ******** ********/
1381#define DEFINE_XWAOP_WRITE(type, btype) \
1382static __xwlib_inline \
1383void xwaop__##type##__write(atomic_##type * a, type v, type * ov) \
1384{ \
1385 xwaop__##btype##__write((atomic_##btype *)a, \
1386 (btype)v, \
1387 (btype *)ov); \
1388}
1389
1395#define DEFINE_XWAOP_TEQ_THEN_WRITE(type, btype) \
1396static __xwlib_inline \
1397xwer_t xwaop__##type##__teq_then_write(atomic_##type * a, type t, type v, type * ov) \
1398{ \
1399 return xwaop__##btype##__teq_then_write((atomic_##btype *)a, \
1400 (btype)t, \
1401 (btype)v, \
1402 (btype *)ov); \
1403}
1404
1410#define DEFINE_XWAOP_TNE_THEN_WRITE(type, btype) \
1411static __xwlib_inline \
1412xwer_t xwaop__##type##__tne_then_write(atomic_##type * a, \
1413 type t, \
1414 type v, \
1415 type * ov) \
1416{ \
1417 return xwaop__##btype##__tne_then_write((atomic_##btype *)a, \
1418 (btype)t, \
1419 (btype)v, \
1420 (btype *)ov); \
1421}
1422
1428#define DEFINE_XWAOP_TGT_THEN_WRITE(type, btype) \
1429static __xwlib_inline \
1430xwer_t xwaop__##type##__tgt_then_write(atomic_##type * a, \
1431 type t, \
1432 type v, \
1433 type * ov) \
1434{ \
1435 return xwaop__##btype##__tgt_then_write((atomic_##btype *)a, \
1436 (btype)t, \
1437 (btype)v, \
1438 (btype *)ov); \
1439}
1440
1446#define DEFINE_XWAOP_TGE_THEN_WRITE(type, btype) \
1447static __xwlib_inline \
1448xwer_t xwaop__##type##__tge_then_write(atomic_##type * a, \
1449 type t, \
1450 type v, \
1451 type * ov) \
1452{ \
1453 return xwaop__##btype##__tge_then_write((atomic_##btype *)a, \
1454 (btype)t, \
1455 (btype)v, \
1456 (btype *)ov); \
1457}
1458
1464#define DEFINE_XWAOP_TLT_THEN_WRITE(type, btype) \
1465static __xwlib_inline \
1466xwer_t xwaop__##type##__tlt_then_write(atomic_##type * a, \
1467 type t, \
1468 type v, \
1469 type * ov) \
1470{ \
1471 return xwaop__##btype##__tlt_then_write((atomic_##btype *)a, \
1472 (btype)t, \
1473 (btype)v, \
1474 (btype *)ov); \
1475}
1476
1482#define DEFINE_XWAOP_TLE_THEN_WRITE(type, btype) \
1483static __xwlib_inline \
1484xwer_t xwaop__##type##__tle_then_write(atomic_##type * a, \
1485 type t, \
1486 type v, \
1487 type * ov) \
1488{ \
1489 return xwaop__##btype##__tle_then_write((atomic_##btype *)a, \
1490 (btype)t, \
1491 (btype)v, \
1492 (btype *)ov); \
1493}
1494
1500#define DEFINE_XWAOP_TGTLT_THEN_WRITE(type, btype) \
1501static __xwlib_inline \
1502xwer_t xwaop__##type##__tgtlt_then_write(atomic_##type * a, \
1503 type l, type r, \
1504 type v, \
1505 type * ov) \
1506{ \
1507 return xwaop__##btype##__tgtlt_then_write((atomic_##btype *)a, \
1508 (btype)l, (btype)r, \
1509 (btype)v, \
1510 (btype *)ov); \
1511}
1512
1518#define DEFINE_XWAOP_TGELT_THEN_WRITE(type, btype) \
1519static __xwlib_inline \
1520xwer_t xwaop__##type##__tgelt_then_write(atomic_##type * a, \
1521 type l, type r, \
1522 type v, \
1523 type * ov) \
1524{ \
1525 return xwaop__##btype##__tgelt_then_write((atomic_##btype *)a, \
1526 (btype)l, (btype)r, \
1527 (btype)v, \
1528 (btype *)ov); \
1529}
1530
1536#define DEFINE_XWAOP_TGTLE_THEN_WRITE(type, btype) \
1537static __xwlib_inline \
1538xwer_t xwaop__##type##__tgtle_then_write(atomic_##type * a, \
1539 type l, type r, \
1540 type v, \
1541 type * ov) \
1542{ \
1543 return xwaop__##btype##__tgtle_then_write((atomic_##btype *)a, \
1544 (btype)l, (btype)r, \
1545 (btype)v, \
1546 (btype *)ov); \
1547}
1548
1554#define DEFINE_XWAOP_TGELE_THEN_WRITE(type, btype) \
1555static __xwlib_inline \
1556xwer_t xwaop__##type##__tgele_then_write(atomic_##type * a, \
1557 type l, type r, \
1558 type v, \
1559 type * ov) \
1560{ \
1561 return xwaop__##btype##__tgele_then_write((atomic_##btype *)a, \
1562 (btype)l, (btype)r, \
1563 (btype)v, \
1564 (btype *)ov); \
1565}
1566
1567/******** ******** add ******** ********/
1573#define DEFINE_XWAOP_ADD(type, btype) \
1574static __xwlib_inline \
1575void xwaop__##type##__add(atomic_##type * a, \
1576 type v, \
1577 type * nv, type * ov) \
1578{ \
1579 xwaop__##btype##__add((atomic_##btype *)a, \
1580 (btype)v, \
1581 (btype *)nv, (btype *)ov); \
1582}
1583
1589#define DEFINE_XWAOP_TEQ_THEN_ADD(type, btype) \
1590static __xwlib_inline \
1591xwer_t xwaop__##type##__teq_then_add(atomic_##type * a, \
1592 type t, \
1593 type v, \
1594 type * nv, type * ov) \
1595{ \
1596 return xwaop__##btype##__teq_then_add((atomic_##btype *)a, \
1597 (btype)t, (btype)v, \
1598 (btype *)nv, (btype *)ov); \
1599}
1600
1606#define DEFINE_XWAOP_TNE_THEN_ADD(type, btype) \
1607static __xwlib_inline \
1608xwer_t xwaop__##type##__tne_then_add(atomic_##type * a, \
1609 type t, \
1610 type v, \
1611 type * nv, type * ov) \
1612{ \
1613 return xwaop__##btype##__tne_then_add((atomic_##btype *)a, \
1614 (btype)t, \
1615 (btype)v, \
1616 (btype *)nv, (btype *)ov); \
1617}
1618
1624#define DEFINE_XWAOP_TGT_THEN_ADD(type, btype) \
1625static __xwlib_inline \
1626xwer_t xwaop__##type##__tgt_then_add(atomic_##type * a, \
1627 type t, \
1628 type v, \
1629 type * nv, type * ov) \
1630{ \
1631 return xwaop__##btype##__tgt_then_add((atomic_##btype *)a, \
1632 (btype)t, \
1633 (btype)v, \
1634 (btype *)nv, (btype *)ov); \
1635}
1636
1642#define DEFINE_XWAOP_TGE_THEN_ADD(type, btype) \
1643static __xwlib_inline \
1644xwer_t xwaop__##type##__tge_then_add(atomic_##type * a, \
1645 type t, \
1646 type v, \
1647 type * nv, type * ov) \
1648{ \
1649 return xwaop__##btype##__tge_then_add((atomic_##btype *)a, \
1650 (btype)t, \
1651 (btype)v, \
1652 (btype *)nv, (btype *)ov); \
1653}
1654
1660#define DEFINE_XWAOP_TLT_THEN_ADD(type, btype) \
1661static __xwlib_inline \
1662xwer_t xwaop__##type##__tlt_then_add(atomic_##type * a, \
1663 type t, \
1664 type v, \
1665 type * nv, type * ov) \
1666{ \
1667 return xwaop__##btype##__tlt_then_add((atomic_##btype *)a, \
1668 (btype)t, \
1669 (btype)v, \
1670 (btype *)nv, (btype *)ov); \
1671}
1672
1678#define DEFINE_XWAOP_TLE_THEN_ADD(type, btype) \
1679static __xwlib_inline \
1680xwer_t xwaop__##type##__tle_then_add(atomic_##type * a, \
1681 type t, \
1682 type v, \
1683 type * nv, type * ov) \
1684{ \
1685 return xwaop__##btype##__tle_then_add((atomic_##btype *)a, \
1686 (btype)t, \
1687 (btype)v, \
1688 (btype *)nv, (btype *)ov); \
1689}
1690
1696#define DEFINE_XWAOP_TGTLT_THEN_ADD(type, btype) \
1697static __xwlib_inline \
1698xwer_t xwaop__##type##__tgtlt_then_add(atomic_##type * a, \
1699 type l, type r, \
1700 type v, \
1701 type * nv, type * ov) \
1702{ \
1703 return xwaop__##btype##__tgtlt_then_add((atomic_##btype *)a, \
1704 (btype)l, (btype)r, \
1705 (btype)v, \
1706 (btype *)nv, (btype *)ov); \
1707}
1708
1714#define DEFINE_XWAOP_TGELT_THEN_ADD(type, btype) \
1715static __xwlib_inline \
1716xwer_t xwaop__##type##__tgelt_then_add(atomic_##type * a, \
1717 type l, type r, \
1718 type v, \
1719 type * nv, type * ov) \
1720{ \
1721 return xwaop__##btype##__tgelt_then_add((atomic_##btype *)a, \
1722 (btype)l, (btype)r, \
1723 (btype)v, \
1724 (btype *)nv, (btype *)ov); \
1725}
1726
1732#define DEFINE_XWAOP_TGTLE_THEN_ADD(type, btype) \
1733static __xwlib_inline \
1734xwer_t xwaop__##type##__tgtle_then_add(atomic_##type * a, \
1735 type l, type r, \
1736 type v, \
1737 type * nv, type * ov) \
1738{ \
1739 return xwaop__##btype##__tgtle_then_add((atomic_##btype *)a, \
1740 (btype)l, (btype)r, \
1741 (btype)v, \
1742 (btype *)nv, (btype *)ov); \
1743}
1744
1750#define DEFINE_XWAOP_TGELE_THEN_ADD(type, btype) \
1751static __xwlib_inline \
1752xwer_t xwaop__##type##__tgele_then_add(atomic_##type * a, \
1753 type l, type r, \
1754 type v, \
1755 type * nv, type * ov) \
1756{ \
1757 return xwaop__##btype##__tgele_then_add((atomic_##btype *)a, \
1758 (btype)l, (btype)r, \
1759 (btype)v, \
1760 (btype *)nv, (btype *)ov); \
1761}
1762
1763/******** ******** subtract ******** ********/
1769#define DEFINE_XWAOP_SUB(type, btype) \
1770static __xwlib_inline \
1771void xwaop__##type##__sub(atomic_##type * a, \
1772 type v, \
1773 type * nv, type * ov) \
1774{ \
1775 xwaop__##btype##__sub((atomic_##btype *)a, \
1776 (btype)v, \
1777 (btype *)nv, (btype *)ov); \
1778}
1779
1785#define DEFINE_XWAOP_TEQ_THEN_SUB(type, btype) \
1786static __xwlib_inline \
1787xwer_t xwaop__##type##__teq_then_sub(atomic_##type * a, \
1788 type t, \
1789 type v, \
1790 type * nv, type * ov) \
1791{ \
1792 return xwaop__##btype##__teq_then_sub((atomic_##btype *)a, \
1793 (btype)t, \
1794 (btype)v, \
1795 (btype *)nv, (btype *)ov); \
1796}
1797
1803#define DEFINE_XWAOP_TNE_THEN_SUB(type, btype) \
1804static __xwlib_inline \
1805xwer_t xwaop__##type##__tne_then_sub(atomic_##type * a, \
1806 type t, \
1807 type v, \
1808 type * nv, type * ov) \
1809{ \
1810 return xwaop__##btype##__tne_then_sub((atomic_##btype *)a, \
1811 (btype)t, \
1812 (btype)v, \
1813 (btype *)nv, (btype *)ov); \
1814}
1815
1821#define DEFINE_XWAOP_TGT_THEN_SUB(type, btype) \
1822static __xwlib_inline \
1823xwer_t xwaop__##type##__tgt_then_sub(atomic_##type * a, \
1824 type t, \
1825 type v, \
1826 type * nv, type * ov) \
1827{ \
1828 return xwaop__##btype##__tgt_then_sub((atomic_##btype *)a, \
1829 (btype)t, \
1830 (btype)v, \
1831 (btype *)nv, (btype *)ov); \
1832}
1833
1839#define DEFINE_XWAOP_TGE_THEN_SUB(type, btype) \
1840static __xwlib_inline \
1841xwer_t xwaop__##type##__tge_then_sub(atomic_##type * a, \
1842 type t, \
1843 type v, \
1844 type * nv, type * ov) \
1845{ \
1846 return xwaop__##btype##__tge_then_sub((atomic_##btype *)a, \
1847 (btype)t, \
1848 (btype)v, \
1849 (btype *)nv, (btype *)ov); \
1850}
1851
1857#define DEFINE_XWAOP_TLT_THEN_SUB(type, btype) \
1858static __xwlib_inline \
1859xwer_t xwaop__##type##__tlt_then_sub(atomic_##type * a, \
1860 type t, \
1861 type v, \
1862 type * nv, type * ov) \
1863{ \
1864 return xwaop__##btype##__tlt_then_sub((atomic_##btype *)a, \
1865 (btype)t, \
1866 (btype)v, \
1867 (btype *)nv, (btype *)ov); \
1868}
1869
1875#define DEFINE_XWAOP_TLE_THEN_SUB(type, btype) \
1876static __xwlib_inline \
1877xwer_t xwaop__##type##__tle_then_sub(atomic_##type * a, \
1878 type t, \
1879 type v, \
1880 type * nv, type * ov) \
1881{ \
1882 return xwaop__##btype##__tle_then_sub((atomic_##btype *)a, \
1883 (btype)t, \
1884 (btype)v, \
1885 (btype *)nv, (btype *)ov); \
1886}
1887
1893#define DEFINE_XWAOP_TGTLT_THEN_SUB(type, btype) \
1894static __xwlib_inline \
1895xwer_t xwaop__##type##__tgtlt_then_sub(atomic_##type * a, \
1896 type l, type r, \
1897 type v, \
1898 type * nv, type * ov) \
1899{ \
1900 return xwaop__##btype##__tgtlt_then_sub((atomic_##btype *)a, \
1901 (btype)l, (btype)r, \
1902 (btype)v, \
1903 (btype *)nv, (btype *)ov); \
1904}
1905
1911#define DEFINE_XWAOP_TGELT_THEN_SUB(type, btype) \
1912static __xwlib_inline \
1913xwer_t xwaop__##type##__tgelt_then_sub(atomic_##type * a, \
1914 type l, type r, \
1915 type v, \
1916 type * nv, type * ov) \
1917{ \
1918 return xwaop__##btype##__tgelt_then_sub((atomic_##btype *)a, \
1919 (btype)l, (btype)r, \
1920 (btype)v, \
1921 (btype *)nv, (btype *)ov); \
1922}
1923
1929#define DEFINE_XWAOP_TGTLE_THEN_SUB(type, btype) \
1930static __xwlib_inline \
1931xwer_t xwaop__##type##__tgtle_then_sub(atomic_##type * a, \
1932 type l, type r, \
1933 type v, \
1934 type * nv, type * ov) \
1935{ \
1936 return xwaop__##btype##__tgtle_then_sub((atomic_##btype *)a, \
1937 (btype)l, (btype)r, \
1938 (btype)v, \
1939 (btype *)nv, (btype *)ov); \
1940}
1941
1947#define DEFINE_XWAOP_TGELE_THEN_SUB(type, btype) \
1948static __xwlib_inline \
1949xwer_t xwaop__##type##__tgele_then_sub(atomic_##type * a, \
1950 type l, type r, \
1951 type v, \
1952 type * nv, type * ov) \
1953{ \
1954 return xwaop__##btype##__tgele_then_sub((atomic_##btype *)a, \
1955 (btype)l, (btype)r, \
1956 (btype)v, \
1957 (btype *)nv, (btype *)ov); \
1958}
1959
1960/******** ******** reverse subtract ******** ********/
1966#define DEFINE_XWAOP_RSB(type, btype) \
1967static __xwlib_inline \
1968void xwaop__##type##__rsb(atomic_##type * a, \
1969 type v, \
1970 type * nv, type * ov) \
1971{ \
1972 xwaop__##btype##__rsb((atomic_##btype *)a, \
1973 (btype)v, \
1974 (btype *)nv, (btype *)ov); \
1975}
1976
1982#define DEFINE_XWAOP_TEQ_THEN_RSB(type, btype) \
1983static __xwlib_inline \
1984xwer_t xwaop__##type##__teq_then_rsb(atomic_##type * a, \
1985 type t, \
1986 type v, \
1987 type * nv, type * ov) \
1988{ \
1989 return xwaop__##btype##__teq_then_rsb((atomic_##btype *)a, \
1990 (btype)t, \
1991 (btype)v, \
1992 (btype *)nv, (btype *)ov); \
1993}
1994
2000#define DEFINE_XWAOP_TNE_THEN_RSB(type, btype) \
2001static __xwlib_inline \
2002xwer_t xwaop__##type##__tne_then_rsb(atomic_##type * a, \
2003 type t, \
2004 type v, \
2005 type * nv, type * ov) \
2006{ \
2007 return xwaop__##btype##__tne_then_rsb((atomic_##btype *)a, \
2008 (btype)t, \
2009 (btype)v, \
2010 (btype *)nv, (btype *)ov); \
2011}
2012
2018#define DEFINE_XWAOP_TGT_THEN_RSB(type, btype) \
2019static __xwlib_inline \
2020xwer_t xwaop__##type##__tgt_then_rsb(atomic_##type * a, \
2021 type t, \
2022 type v, \
2023 type * nv, type * ov) \
2024{ \
2025 return xwaop__##btype##__tgt_then_rsb((atomic_##btype *)a, \
2026 (btype)t, \
2027 (btype)v, \
2028 (btype *)nv, (btype *)ov); \
2029}
2030
2036#define DEFINE_XWAOP_TGE_THEN_RSB(type, btype) \
2037static __xwlib_inline \
2038xwer_t xwaop__##type##__tge_then_rsb(atomic_##type * a, \
2039 type t, \
2040 type v, \
2041 type * nv, type * ov) \
2042{ \
2043 return xwaop__##btype##__tge_then_rsb((atomic_##btype *)a, \
2044 (btype)t, \
2045 (btype)v, \
2046 (btype *)nv, (btype *)ov); \
2047}
2048
2054#define DEFINE_XWAOP_TLT_THEN_RSB(type, btype) \
2055static __xwlib_inline \
2056xwer_t xwaop__##type##__tlt_then_rsb(atomic_##type * a, \
2057 type t, \
2058 type v, \
2059 type * nv, type * ov) \
2060{ \
2061 return xwaop__##btype##__tlt_then_rsb((atomic_##btype *)a, \
2062 (btype)t, \
2063 (btype)v, \
2064 (btype *)nv, (btype *)ov); \
2065}
2066
2072#define DEFINE_XWAOP_TLE_THEN_RSB(type, btype) \
2073static __xwlib_inline \
2074xwer_t xwaop__##type##__tle_then_rsb(atomic_##type * a, \
2075 type t, \
2076 type v, \
2077 type * nv, type * ov) \
2078{ \
2079 return xwaop__##btype##__tle_then_rsb((atomic_##btype *)a, \
2080 (btype)t, \
2081 (btype)v, \
2082 (btype *)nv, (btype *)ov); \
2083}
2084
2090#define DEFINE_XWAOP_TGTLT_THEN_RSB(type, btype) \
2091static __xwlib_inline \
2092xwer_t xwaop__##type##__tgtlt_then_rsb(atomic_##type * a, \
2093 type l, type r, \
2094 type v, \
2095 type * nv, type * ov) \
2096{ \
2097 return xwaop__##btype##__tgtlt_then_rsb((atomic_##btype *)a, \
2098 (btype)l, (btype)r, \
2099 (btype)v, \
2100 (btype *)nv, (btype *)ov); \
2101}
2102
2108#define DEFINE_XWAOP_TGELT_THEN_RSB(type, btype) \
2109static __xwlib_inline \
2110xwer_t xwaop__##type##__tgelt_then_rsb(atomic_##type * a, \
2111 type l, type r, \
2112 type v, \
2113 type * nv, type * ov) \
2114{ \
2115 return xwaop__##btype##__tgelt_then_rsb((atomic_##btype *)a, \
2116 (btype)l, (btype)r, \
2117 (btype)v, \
2118 (btype *)nv, (btype *)ov); \
2119}
2120
2126#define DEFINE_XWAOP_TGTLE_THEN_RSB(type, btype) \
2127static __xwlib_inline \
2128xwer_t xwaop__##type##__tgtle_then_rsb(atomic_##type * a, \
2129 type l, type r, \
2130 type v, \
2131 type * nv, type * ov) \
2132{ \
2133 return xwaop__##btype##__tgtle_then_rsb((atomic_##btype *)a, \
2134 (btype)l, (btype)r, \
2135 (btype)v, \
2136 (btype *)nv, (btype *)ov); \
2137}
2138
2144#define DEFINE_XWAOP_TGELE_THEN_RSB(type, btype) \
2145static __xwlib_inline \
2146xwer_t xwaop__##type##__tgele_then_rsb(atomic_##type * a, \
2147 type l, type r, \
2148 type v, \
2149 type * nv, type * ov) \
2150{ \
2151 return xwaop__##btype##__tgele_then_rsb((atomic_##btype *)a, \
2152 (btype)l, (btype)r, \
2153 (btype)v, \
2154 (btype *)nv, (btype *)ov); \
2155}
2156
2157/******** ******** bit operations ******** ********/
2163#define DEFINE_XWAOP_OR(type, btype) \
2164static __xwlib_inline \
2165void xwaop__##type##__or(atomic_##type * a, \
2166 type v, \
2167 type * nv, type * ov) \
2168{ \
2169 xwaop__##btype##__or((atomic_##btype *)a, \
2170 (btype)v, \
2171 (btype *)nv, (btype *)ov); \
2172}
2173
2179#define DEFINE_XWAOP_AND(type, btype) \
2180static __xwlib_inline \
2181void xwaop__##type##__and(atomic_##type * a, \
2182 type v, \
2183 type * nv, type * ov) \
2184{ \
2185 xwaop__##btype##__and((atomic_##btype *)a, \
2186 (btype)v, \
2187 (btype *)nv, (btype *)ov); \
2188}
2189
2195#define DEFINE_XWAOP_XOR(type, btype) \
2196static __xwlib_inline \
2197void xwaop__##type##__xor(atomic_##type * a, \
2198 type v, \
2199 type * nv, type * ov) \
2200{ \
2201 xwaop__##btype##__xor((atomic_##btype *)a, \
2202 (btype)v, \
2203 (btype *)nv, (btype *)ov); \
2204}
2205
2211#define DEFINE_XWAOP_C0M(type, btype) \
2212static __xwlib_inline \
2213void xwaop__##type##__c0m(atomic_##type * a, \
2214 type m, \
2215 type * nv, type * ov) \
2216{ \
2217 xwaop__##btype##__c0m((atomic_##btype *)a, \
2218 (btype)m, \
2219 (btype *)nv, (btype *)ov); \
2220}
2221
2227#define DEFINE_XWAOP_T1MA_THEN_C0M(type, btype) \
2228static __xwlib_inline \
2229xwer_t xwaop__##type##__t1ma_then_c0m(atomic_##type * a, \
2230 type m, \
2231 type * nv, type * ov) \
2232{ \
2233 return xwaop__##btype##__t1ma_then_c0m((atomic_##btype *)a, \
2234 (btype)m, \
2235 (btype *)nv, (btype *)ov); \
2236}
2237
2243#define DEFINE_XWAOP_T1MO_THEN_C0M(type, btype) \
2244static __xwlib_inline \
2245xwer_t xwaop__##type##__t1mo_then_c0m(atomic_##type * a, \
2246 type m, \
2247 type * nv, type * ov) \
2248{ \
2249 return xwaop__##btype##__t1mo_then_c0m((atomic_##btype *)a, \
2250 (btype)m, \
2251 (btype *)nv, (btype *)ov); \
2252}
2253
2259#define DEFINE_XWAOP_T0MA_THEN_S1M(type, btype) \
2260static __xwlib_inline \
2261xwer_t xwaop__##type##__t0ma_then_s1m(atomic_##type * a, \
2262 type m, \
2263 type * nv, type * ov) \
2264{ \
2265 return xwaop__##btype##__t0ma_then_s1m((atomic_##btype *)a, \
2266 (btype)m, \
2267 (btype *)nv, (btype *)ov); \
2268}
2269
2275#define DEFINE_XWAOP_T0MO_THEN_S1M(type, btype) \
2276static __xwlib_inline \
2277xwer_t xwaop__##type##__t0mo_then_s1m(atomic_##type * a, \
2278 type m, \
2279 type * nv, type * ov) \
2280{ \
2281 return xwaop__##btype##__t0mo_then_s1m((atomic_##btype *)a, \
2282 (btype)m, \
2283 (btype *)nv, (btype *)ov); \
2284}
2285
2286/******** ******** test and operation ******** ********/
2292#define DEFINE_XWAOP_TST_THEN_OP(type, btype) \
2293static __xwlib_inline \
2294xwer_t xwaop__##type##__tst_then_op(atomic_##type * a, \
2295 xwaop_tst_f tst, void * tst_args, \
2296 xwaop_op_f op, void * op_args, \
2297 type * nv, type * ov) \
2298{ \
2299 return xwaop__##btype##__tst_then_op((atomic_##btype *)a, \
2300 tst, tst_args, \
2301 op, op_args, \
2302 (btype *)nv, (btype *)ov); \
2303}
2304
2310#define DEFINE_XWAOP(type, btype) \
2311 DEFINE_XWAOP_LOAD(type, btype) \
2312 DEFINE_XWAOP_STORE(type, btype) \
2313 DEFINE_XWAOP_READ(type, btype) \
2314 DEFINE_XWAOP_WRITE(type, btype) \
2315 DEFINE_XWAOP_TEQ_THEN_WRITE(type, btype) \
2316 DEFINE_XWAOP_TNE_THEN_WRITE(type, btype) \
2317 DEFINE_XWAOP_TGT_THEN_WRITE(type, btype) \
2318 DEFINE_XWAOP_TGE_THEN_WRITE(type, btype) \
2319 DEFINE_XWAOP_TLT_THEN_WRITE(type, btype) \
2320 DEFINE_XWAOP_TLE_THEN_WRITE(type, btype) \
2321 DEFINE_XWAOP_TGTLT_THEN_WRITE(type, btype) \
2322 DEFINE_XWAOP_TGELT_THEN_WRITE(type, btype) \
2323 DEFINE_XWAOP_TGTLE_THEN_WRITE(type, btype) \
2324 DEFINE_XWAOP_TGELE_THEN_WRITE(type, btype) \
2325 DEFINE_XWAOP_ADD(type, btype) \
2326 DEFINE_XWAOP_TEQ_THEN_ADD(type, btype) \
2327 DEFINE_XWAOP_TNE_THEN_ADD(type, btype) \
2328 DEFINE_XWAOP_TGT_THEN_ADD(type, btype) \
2329 DEFINE_XWAOP_TGE_THEN_ADD(type, btype) \
2330 DEFINE_XWAOP_TLT_THEN_ADD(type, btype) \
2331 DEFINE_XWAOP_TLE_THEN_ADD(type, btype) \
2332 DEFINE_XWAOP_TGTLT_THEN_ADD(type, btype) \
2333 DEFINE_XWAOP_TGELT_THEN_ADD(type, btype) \
2334 DEFINE_XWAOP_TGTLE_THEN_ADD(type, btype) \
2335 DEFINE_XWAOP_TGELE_THEN_ADD(type, btype) \
2336 DEFINE_XWAOP_SUB(type, btype) \
2337 DEFINE_XWAOP_TEQ_THEN_SUB(type, btype) \
2338 DEFINE_XWAOP_TNE_THEN_SUB(type, btype) \
2339 DEFINE_XWAOP_TGT_THEN_SUB(type, btype) \
2340 DEFINE_XWAOP_TGE_THEN_SUB(type, btype) \
2341 DEFINE_XWAOP_TLT_THEN_SUB(type, btype) \
2342 DEFINE_XWAOP_TLE_THEN_SUB(type, btype) \
2343 DEFINE_XWAOP_TGTLT_THEN_SUB(type, btype) \
2344 DEFINE_XWAOP_TGELT_THEN_SUB(type, btype) \
2345 DEFINE_XWAOP_TGTLE_THEN_SUB(type, btype) \
2346 DEFINE_XWAOP_TGELE_THEN_SUB(type, btype) \
2347 DEFINE_XWAOP_RSB(type, btype) \
2348 DEFINE_XWAOP_TEQ_THEN_RSB(type, btype) \
2349 DEFINE_XWAOP_TNE_THEN_RSB(type, btype) \
2350 DEFINE_XWAOP_TGT_THEN_RSB(type, btype) \
2351 DEFINE_XWAOP_TGE_THEN_RSB(type, btype) \
2352 DEFINE_XWAOP_TLT_THEN_RSB(type, btype) \
2353 DEFINE_XWAOP_TLE_THEN_RSB(type, btype) \
2354 DEFINE_XWAOP_TGTLT_THEN_RSB(type, btype) \
2355 DEFINE_XWAOP_TGELT_THEN_RSB(type, btype) \
2356 DEFINE_XWAOP_TGTLE_THEN_RSB(type, btype) \
2357 DEFINE_XWAOP_TGELE_THEN_RSB(type, btype) \
2358 DEFINE_XWAOP_OR(type, btype) \
2359 DEFINE_XWAOP_AND(type, btype) \
2360 DEFINE_XWAOP_XOR(type, btype) \
2361 DEFINE_XWAOP_C0M(type, btype) \
2362 DEFINE_XWAOP_T1MA_THEN_C0M(type, btype) \
2363 DEFINE_XWAOP_T1MO_THEN_C0M(type, btype) \
2364 DEFINE_XWAOP_T0MA_THEN_S1M(type, btype) \
2365 DEFINE_XWAOP_T0MO_THEN_S1M(type, btype) \
2366 DEFINE_XWAOP_TST_THEN_OP(type, btype)
2367
2368
2369#if (16 == BITS_PER_XWSZ_T)
2371#elif (32 == BITS_PER_XWSZ_T)
2373#elif (64 == BITS_PER_XWSZ_T)
2375#endif
2376
2377#if (16 == BITS_PER_XWSSZ_T)
2379#elif (32 == BITS_PER_XWSSZ_T)
2381#elif (64 == BITS_PER_XWSSZ_T)
2383#endif
2384
2385#if (16 == BITS_PER_XWPTR_T)
2388#elif (32 == BITS_PER_XWPTR_T)
2391#elif (64 == BITS_PER_XWPTR_T)
2394#endif
2395
2396#if (16 == BITS_PER_XWER_T)
2398#elif (32 == BITS_PER_XWER_T)
2400#elif (64 == BITS_PER_XWER_T)
2402#endif
2403
2404#if (8 == BITS_PER_XWID_T)
2406#elif (16 == BITS_PER_XWID_T)
2408#elif (32 == BITS_PER_XWID_T)
2410#elif (64 == BITS_PER_XWID_T)
2412#endif
2413
2414#if (8 == BITS_PER_XWSID_T)
2416#elif (16 == BITS_PER_XWSID_T)
2418#elif (32 == BITS_PER_XWSID_T)
2420#elif (64 == BITS_PER_XWSID_T)
2422#endif
2423
2424#if (16 == BITS_PER_XWREG_T)
2426#elif (32 == BITS_PER_XWREG_T)
2428#elif (64 == BITS_PER_XWREG_T)
2430#endif
2431
2432#if (16 == BITS_PER_XWSREG_T)
2434#elif (32 == BITS_PER_XWSREG_T)
2436#elif (64 == BITS_PER_XWSREG_T)
2438#endif
2439
2440#if (16 == BITS_PER_XWSQ_T)
2442#elif (32 == BITS_PER_XWSQ_T)
2444#elif (64 == BITS_PER_XWSQ_T)
2446#endif
2447
2448#if (16 == BITS_PER_XWSSQ_T)
2450#elif (32 == BITS_PER_XWSSQ_T)
2452#elif (64 == BITS_PER_XWSSQ_T)
2454#endif
2455
2456#if (8 == BITS_PER_XWBMP_T)
2458#elif (16 == BITS_PER_XWBMP_T)
2460#elif (32 == BITS_PER_XWBMP_T)
2462#elif (64 == BITS_PER_XWBMP_T)
2464#endif
2465
2468
2473#endif /* xwos/lib/xwaop.h */
xws64_t xwtm_t
XWOS系统时间 (有符号)
Definition type.h:742
xwu64_t xwtk_t
XWOS系统滴答计数 (无符号)
Definition type.h:710
signed long xwer_t
Definition type.h:554
unsigned long xwid_t
Definition type.h:481
unsigned long xwsz_t
Definition type.h:339
uint8_t xwu8_t
Definition type.h:194
unsigned long xwsq_t
Definition type.h:445
int64_t xws64_t
Definition type.h:319
ptrdiff_t xwsreg_t
Definition type.h:425
uint64_t xwu64_t
Definition type.h:303
xwptr_t xwlfq_t
Definition type.h:591
signed long xwssq_t
Definition type.h:461
signed long xwsid_t
Definition type.h:497
signed long xwssz_t
Definition type.h:355
unsigned long xwptr_t
Definition type.h:375
xwptr_t xwreg_t
Definition type.h:409
uint16_t xwu16_t
Definition type.h:230
uint32_t xwu32_t
Definition type.h:266
int16_t xws16_t
Definition type.h:246
int8_t xws8_t
Definition type.h:210
xwu32_t xwbmp_t
Definition type.h:574
int32_t xws32_t
Definition type.h:283
#define DEFINE_XWAOP(type, btype)
使用模板为某一类型定义原子操作函数集合
Definition xwaop.h:2310
XWOS通用库:位操作
XWOS的标准头文件