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