Mercurial > pub > dyncall > dyncall
comparison doc/disas_examples/sparc64.sparc64.disas @ 499:fc614cb865c6
- doc and disasexample additions specific to non-trivial C++ aggregates as return values (incl. fixes to doc and additional LSB specific PPC32 section)
author | Tassilo Philipp |
---|---|
date | Mon, 04 Apr 2022 15:50:52 +0200 |
parents | cb19b2fe2422 |
children |
comparison
equal
deleted
inserted
replaced
498:fd9ba3a6d348 | 499:fc614cb865c6 |
---|---|
1720 | 1720 |
1721 ; ... snip, removed code of ctor and copy ctor ... | 1721 ; ... snip, removed code of ctor and copy ctor ... |
1722 | 1722 |
1723 | 1723 |
1724 | 1724 |
1725 ; ---------- C++ trivial and non-trivial aggrs as return values ----------> | |
1726 ; | |
1727 ; struct Trivial { int a; }; | |
1728 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } }; | |
1729 ; | |
1730 ; extern "C" { | |
1731 ; struct Trivial f1() { return Trivial(); } | |
1732 ; } | |
1733 ; | |
1734 ; struct NonTrivial f2() { return NonTrivial(); } | |
1735 ; | |
1736 ; extern "C" { | |
1737 ; void f() | |
1738 ; { | |
1739 ; int a=1; | |
1740 ; a += 123; | |
1741 ; struct Trivial t = f1(); | |
1742 ; a -= 123; | |
1743 ; struct NonTrivial n = f2(); | |
1744 ; a -= 12; | |
1745 ; } | |
1746 ; } | |
1747 | |
1748 | |
1749 | |
1750 ; output from openbsd-6.0-sparc64 w/ gcc 4.2.1 | |
1751 | |
1752 0000000000000d60 <f1>: | |
1753 d60: 9d e3 bf 30 save %sp, -208, %sp | |
1754 d64: 82 10 20 00 clr %g1 | |
1755 d68: 83 30 60 00 srl %g1, 0, %g1 | |
1756 d6c: 83 28 70 20 sllx %g1, 0x20, %g1 | |
1757 d70: b0 10 00 01 mov %g1, %i0 | |
1758 d74: 81 cf e0 08 rett %i7 + 8 | |
1759 d78: 01 00 00 00 nop | |
1760 | |
1761 0000000000000d7c <_Z2f2v>: | |
1762 d7c: 9d e3 bf 30 save %sp, -208, %sp | |
1763 d80: a0 10 00 18 mov %i0, %l0 | |
1764 d84: 82 10 00 10 mov %l0, %g1 | |
1765 d88: 90 10 00 01 mov %g1, %o0 | |
1766 d8c: 40 14 01 1d call 501200 <_ZN10NonTrivialC1Ev@plt> | |
1767 d90: 01 00 00 00 nop | |
1768 d94: b0 10 00 10 mov %l0, %i0 | |
1769 d98: 81 cf e0 08 rett %i7 + 8 | |
1770 d9c: 01 00 00 00 nop | |
1771 da0: ae 03 c0 17 add %o7, %l7, %l7 | |
1772 da4: 81 c3 e0 08 retl | |
1773 da8: 01 00 00 00 nop | |
1774 | |
1775 0000000000000dac <f>: | |
1776 dac: 9d e3 bf 10 save %sp, -240, %sp ; | |
1777 db0: 2f 00 0c 00 sethi %hi(0x300000), %l7 ; | |
1778 db4: ae 05 e2 a0 add %l7, 0x2a0, %l7 ; | |
1779 db8: 7f ff ff fa call da0 <_Z2f2v+0x24> ; | |
1780 dbc: 01 00 00 00 nop ; | |
1781 dc0: 03 00 00 00 sethi %hi(0), %g1 ; | |
1782 dc4: 82 10 60 48 or %g1, 0x48, %g1 ; | |
1783 dc8: c2 5d c0 01 ldx [ %l7 + %g1 ], %g1 ; | |
1784 dcc: c4 58 40 00 ldx [ %g1 ], %g2 ; | |
1785 dd0: c4 77 a7 e7 stx %g2, [ %fp + 0x7e7 ] ; | |
1786 dd4: 84 10 20 00 clr %g2 ; | |
1787 dd8: 82 10 20 01 mov 1, %g1 ; | |
1788 ddc: c2 27 a7 e3 st %g1, [ %fp + 0x7e3 ] ; | |
1789 de0: c2 07 a7 e3 ld [ %fp + 0x7e3 ], %g1 ; | |
1790 de4: 82 00 60 7b add %g1, 0x7b, %g1 ; | |
1791 de8: c2 27 a7 e3 st %g1, [ %fp + 0x7e3 ] ; | |
1792 dec: 40 14 01 25 call 501280 <f1@plt> ; call f1() | |
1793 df0: 01 00 00 00 nop ; | |
1794 df4: 82 10 00 08 mov %o0, %g1 ; | |
1795 df8: c0 27 a7 cb clr [ %fp + 0x7cb ] ; | |
1796 dfc: 83 38 70 20 srax %g1, 0x20, %g1 ; | |
1797 e00: c6 07 a7 cb ld [ %fp + 0x7cb ], %g3 ; | |
1798 e04: 84 08 e0 00 and %g3, 0, %g2 ; | |
1799 e08: 82 10 80 01 or %g2, %g1, %g1 ; | |
1800 e0c: c2 27 a7 cb st %g1, [ %fp + 0x7cb ] ; | |
1801 e10: c2 07 a7 cb ld [ %fp + 0x7cb ], %g1 ; | |
1802 e14: c2 27 a7 df st %g1, [ %fp + 0x7df ] ; | |
1803 e18: c2 07 a7 e3 ld [ %fp + 0x7e3 ], %g1 ; | |
1804 e1c: 82 00 7f 85 add %g1, -123, %g1 ; | |
1805 e20: c2 27 a7 e3 st %g1, [ %fp + 0x7e3 ] ; | |
1806 e24: 82 07 a7 db add %fp, 0x7db, %g1 ; | |
1807 e28: 90 10 00 01 mov %g1, %o0 ; hidden first arg (ptr to space to hold NonTrivial retval), via ptr as non-trivial | |
1808 e2c: 40 14 00 e5 call 5011c0 <_Z2f2v@plt> ; call f2() | |
1809 e30: 01 00 00 00 nop ; | |
1810 e34: c2 07 a7 e3 ld [ %fp + 0x7e3 ], %g1 ; | |
1811 e38: 82 00 7f f4 add %g1, -12, %g1 ; | |
1812 e3c: c2 27 a7 e3 st %g1, [ %fp + 0x7e3 ] ; | |
1813 e40: 03 00 00 00 sethi %hi(0), %g1 ; | |
1814 e44: 82 10 60 48 or %g1, 0x48, %g1 ; | |
1815 e48: c2 5d c0 01 ldx [ %l7 + %g1 ], %g1 ; | |
1816 e4c: c4 5f a7 e7 ldx [ %fp + 0x7e7 ], %g2 ; | |
1817 e50: c6 58 40 00 ldx [ %g1 ], %g3 ; | |
1818 e54: 84 18 80 03 xor %g2, %g3, %g2 ; | |
1819 e58: 86 10 20 00 clr %g3 ; | |
1820 e5c: 82 10 00 02 mov %g2, %g1 ; | |
1821 e60: 02 c8 40 08 brz %g1, e80 <f+0xd4> ; | |
1822 e64: 01 00 00 00 nop ; | |
1823 e68: 03 00 00 00 sethi %hi(0), %g1 ; | |
1824 e6c: 82 10 60 40 or %g1, 0x40, %g1 ; | |
1825 e70: c2 5d c0 01 ldx [ %l7 + %g1 ], %g1 ; | |
1826 e74: 90 10 00 01 mov %g1, %o0 ; | |
1827 e78: 40 14 00 ca call 5011a0 <__stack_smash_handler@plt> ; | |
1828 e7c: 01 00 00 00 nop ; | |
1829 e80: 81 cf e0 08 rett %i7 + 8 ; | |
1830 e84: 01 00 00 00 nop ; | |
1831 | |
1832 | |
1833 | |
1725 ; vim: ft=asm | 1834 ; vim: ft=asm |
1726 | 1835 |