Mercurial > pub > dyncall > dyncall
comparison doc/disas_examples/ppc.sysv.disas @ 497:cb19b2fe2422
- more disas examples to check behaviour of passing C++ non-trivial aggregates by value; they all behave the same, calling the copy ctor first, passing a pointer then
author | Tassilo Philipp |
---|---|
date | Wed, 23 Mar 2022 15:24:31 +0100 |
parents | ead041d93e36 |
children | fc614cb865c6 |
comparison
equal
deleted
inserted
replaced
496:da5232da6270 | 497:cb19b2fe2422 |
---|---|
1112 100: 7d 61 5b 78 mr r1,r11 | 1112 100: 7d 61 5b 78 mr r1,r11 |
1113 104: 4e 80 00 20 blr | 1113 104: 4e 80 00 20 blr |
1114 | 1114 |
1115 | 1115 |
1116 | 1116 |
1117 ; ---------- C++ trivial and non-trivial aggrs passed to C funcs ----------> | |
1118 ; | |
1119 ; struct Trivial { int a; }; | |
1120 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } }; | |
1121 ; | |
1122 ; extern "C" { | |
1123 ; | |
1124 ; void f1(struct Trivial s) { } | |
1125 ; void f2(struct NonTrivial s) { } | |
1126 ; | |
1127 ; void f() | |
1128 ; { | |
1129 ; struct Trivial t; | |
1130 ; struct NonTrivial n; | |
1131 ; int a=1; | |
1132 ; a += 123; | |
1133 ; f1(t); | |
1134 ; a -= 123; | |
1135 ; f2(n); | |
1136 ; a -= 12; | |
1137 ; } | |
1138 ; } | |
1139 | |
1140 | |
1141 | |
1142 ; output from debian-4.1.1-21-ppc w/ gcc 4.1.2 | |
1143 | |
1144 100003e0 <f1>: | |
1145 100003e0: 94 21 ff f0 stwu r1,-16(r1) | |
1146 100003e4: 93 e1 00 0c stw r31,12(r1) | |
1147 100003e8: 7c 3f 0b 78 mr r31,r1 | |
1148 100003ec: 81 61 00 00 lwz r11,0(r1) | |
1149 100003f0: 83 eb ff fc lwz r31,-4(r11) | |
1150 100003f4: 7d 61 5b 78 mr r1,r11 | |
1151 100003f8: 4e 80 00 20 blr | |
1152 | |
1153 100003fc <f2>: | |
1154 100003fc: 94 21 ff e0 stwu r1,-32(r1) | |
1155 10000400: 93 e1 00 1c stw r31,28(r1) | |
1156 10000404: 7c 3f 0b 78 mr r31,r1 | |
1157 10000408: 90 7f 00 08 stw r3,8(r31) | |
1158 1000040c: 81 61 00 00 lwz r11,0(r1) | |
1159 10000410: 83 eb ff fc lwz r31,-4(r11) | |
1160 10000414: 7d 61 5b 78 mr r1,r11 | |
1161 10000418: 4e 80 00 20 blr | |
1162 | |
1163 1000041c <f>: | |
1164 1000041c: 94 21 ff d0 stwu r1,-48(r1) ; | |
1165 10000420: 7c 08 02 a6 mflr r0 ; | |
1166 10000424: 93 e1 00 2c stw r31,44(r1) ; | |
1167 10000428: 90 01 00 34 stw r0,52(r1) ; | |
1168 1000042c: 7c 3f 0b 78 mr r31,r1 ; | |
1169 10000430: 38 1f 00 14 addi r0,r31,20 ; | |
1170 10000434: 7c 03 03 78 mr r3,r0 ; | |
1171 10000438: 48 00 00 a1 bl 100004d8 <_ZN10NonTrivialC1Ev> ; NonTrivial::NonTrivial() / ctor | |
1172 1000043c: 38 00 00 01 li r0,1 ; | |
1173 10000440: 90 1f 00 08 stw r0,8(r31) ; | |
1174 10000444: 81 3f 00 08 lwz r9,8(r31) ; | |
1175 10000448: 38 09 00 7b addi r0,r9,123 ; | |
1176 1000044c: 90 1f 00 08 stw r0,8(r31) ; | |
1177 10000450: 80 1f 00 10 lwz r0,16(r31) ; | |
1178 10000454: 90 1f 00 18 stw r0,24(r31) ; | |
1179 10000458: 38 1f 00 18 addi r0,r31,24 ; | |
1180 1000045c: 7c 03 03 78 mr r3,r0 ; | |
1181 10000460: 4b ff ff 81 bl 100003e0 <f1> ; call f1(struct Trivial) | |
1182 10000464: 81 3f 00 08 lwz r9,8(r31) ; | |
1183 10000468: 38 09 ff 85 addi r0,r9,-123 ; | |
1184 1000046c: 90 1f 00 08 stw r0,8(r31) ; | |
1185 10000470: 38 1f 00 0c addi r0,r31,12 ; | |
1186 10000474: 39 3f 00 14 addi r9,r31,20 ; | |
1187 10000478: 7c 03 03 78 mr r3,r0 ; | ptr to dest of copy of n | |
1188 1000047c: 7d 24 4b 78 mr r4,r9 ; | copy n ptr to n | |
1189 10000480: 48 00 00 85 bl 10000504 <_ZN10NonTrivialC1ERKS_> ; / NonTrivial::NonTrivial(const NonTrivial&) / copy ctor | |
1190 10000484: 38 1f 00 0c addi r0,r31,12 ; \ | |
1191 10000488: 7c 03 03 78 mr r3,r0 ; | f2 arg 0 (ptr to copy of struct NonTrivial), via ptr as non-trivial | |
1192 1000048c: 4b ff ff 71 bl 100003fc <f2> ; call f2(struct NonTrivial) | |
1193 10000490: 81 3f 00 08 lwz r9,8(r31) ; | |
1194 10000494: 38 09 ff f4 addi r0,r9,-12 ; | |
1195 10000498: 90 1f 00 08 stw r0,8(r31) ; | |
1196 1000049c: 81 61 00 00 lwz r11,0(r1) ; | |
1197 100004a0: 80 0b 00 04 lwz r0,4(r11) ; | |
1198 100004a4: 7c 08 03 a6 mtlr r0 ; | |
1199 100004a8: 83 eb ff fc lwz r31,-4(r11) ; | |
1200 100004ac: 7d 61 5b 78 mr r1,r11 ; | |
1201 100004b0: 4e 80 00 20 blr ; | |
1202 | |
1203 ; ... snip, removed code of ctor and copy ctor ... | |
1204 | |
1205 | |
1206 | |
1117 ; vim: ft=asm68k | 1207 ; vim: ft=asm68k |
1118 | 1208 |