Mercurial > pub > dyncall > dyncall
comparison doc/disas_examples/ppc64.elfabi.disas @ 473:ead041d93e36
- ppc doc and disas examples related to aggregates
author | Tassilo Philipp |
---|---|
date | Wed, 16 Feb 2022 16:44:11 +0100 |
parents | 74c056b597b7 |
children | cb19b2fe2422 |
comparison
equal
deleted
inserted
replaced
472:e5820b7a3fbc | 473:ead041d93e36 |
---|---|
267 178: 4e 80 00 20 blr ; | | 267 178: 4e 80 00 20 blr ; | |
268 17c: 00 00 00 00 .long 0x0 ; data | 268 17c: 00 00 00 00 .long 0x0 ; data |
269 180: 00 00 00 01 .long 0x1 ; data | 269 180: 00 00 00 01 .long 0x1 ; data |
270 184: 80 01 00 01 lwz r0,1(r1) ; unsure@@@. data? | 270 184: 80 01 00 01 lwz r0,1(r1) ; unsure@@@. data? |
271 | 271 |
272 | |
273 | |
274 ; ---------- structs by value ----------> | |
275 ; | |
276 ; struct A { int i, j; long long l; }; | |
277 ; | |
278 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h) | |
279 ; { | |
280 ; } | |
281 ; | |
282 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h) | |
283 ; { | |
284 ; /* use some local data */ | |
285 ; char l[100] = { 'L' }; | |
286 ; leaf_call(b, c, d, e, f, g, h); | |
287 ; } | |
288 ; | |
289 ; int main() | |
290 ; { | |
291 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9); | |
292 ; return 0; | |
293 ; } | |
294 | |
295 | |
296 | |
297 ; output from freebsd-11.0-ppc64 w/ gcc 4.2.1 | |
298 | |
299 0000000000000000 <.leaf_call>: | |
300 0: fb e1 ff f8 std r31,-8(r1) | |
301 4: f8 21 ff c1 stdu r1,-64(r1) | |
302 8: 7c 3f 0b 78 mr r31,r1 | |
303 c: 7c 60 1b 78 mr r0,r3 | |
304 10: 39 7f 00 90 addi r11,r31,144 | |
305 14: f8 eb 00 00 std r7,0(r11) | |
306 18: f9 0b 00 08 std r8,8(r11) | |
307 1c: 7d 4b 53 78 mr r11,r10 | |
308 20: 90 1f 00 70 stw r0,112(r31) | |
309 24: 90 9f 00 78 stw r4,120(r31) | |
310 28: 90 bf 00 80 stw r5,128(r31) | |
311 2c: 90 df 00 88 stw r6,136(r31) | |
312 30: 91 3f 00 a0 stw r9,160(r31) | |
313 34: 91 7f 00 a8 stw r11,168(r31) | |
314 38: e8 21 00 00 ld r1,0(r1) | |
315 3c: eb e1 ff f8 ld r31,-8(r1) | |
316 40: 4e 80 00 20 blr | |
317 ... | |
318 4c: 80 01 00 01 lwz r0,1(r1) | |
319 | |
320 0000000000000050 <.nonleaf_call>: | |
321 50: 7c 08 02 a6 mflr r0 | |
322 54: fb a1 ff e8 std r29,-24(r1) | |
323 58: fb e1 ff f8 std r31,-8(r1) | |
324 5c: f8 01 00 10 std r0,16(r1) | |
325 60: f8 21 ff 01 stdu r1,-256(r1) | |
326 64: 7c 3f 0b 78 mr r31,r1 | |
327 68: 7c 60 1b 78 mr r0,r3 | |
328 6c: 39 7f 01 58 addi r11,r31,344 | |
329 70: f9 0b 00 00 std r8,0(r11) | |
330 74: f9 2b 00 08 std r9,8(r11) | |
331 78: 7d 49 53 78 mr r9,r10 | |
332 7c: 90 1f 01 30 stw r0,304(r31) | |
333 80: 90 9f 01 38 stw r4,312(r31) | |
334 84: 90 bf 01 40 stw r5,320(r31) | |
335 88: 90 df 01 48 stw r6,328(r31) | |
336 8c: 90 ff 01 50 stw r7,336(r31) | |
337 90: 91 3f 01 68 stw r9,360(r31) | |
338 94: 38 1f 00 70 addi r0,r31,112 | |
339 98: 39 20 00 64 li r9,100 | |
340 9c: 7c 03 03 78 mr r3,r0 | |
341 a0: 38 80 00 00 li r4,0 | |
342 a4: 7d 25 4b 78 mr r5,r9 | |
343 a8: 48 00 00 01 bl a8 <.nonleaf_call+0x58> | |
344 ac: 4f ff fb 82 crmove 4*cr7+so,4*cr7+so | |
345 b0: 38 00 00 4c li r0,76 | |
346 b4: 98 1f 00 70 stb r0,112(r31) | |
347 b8: 80 1f 01 38 lwz r0,312(r31) | |
348 bc: 7c 08 07 b4 extsw r8,r0 | |
349 c0: 80 1f 01 40 lwz r0,320(r31) | |
350 c4: 7c 09 07 b4 extsw r9,r0 | |
351 c8: 80 1f 01 48 lwz r0,328(r31) | |
352 cc: 7c 0b 07 b4 extsw r11,r0 | |
353 d0: 80 1f 01 50 lwz r0,336(r31) | |
354 d4: 7c 0a 07 b4 extsw r10,r0 | |
355 d8: 80 1f 01 68 lwz r0,360(r31) | |
356 dc: 7c 1d 07 b4 extsw r29,r0 | |
357 e0: 80 1f 01 74 lwz r0,372(r31) | |
358 e4: 7c 00 07 b4 extsw r0,r0 | |
359 e8: 7d 03 43 78 mr r3,r8 | |
360 ec: 7d 24 4b 78 mr r4,r9 | |
361 f0: 7d 65 5b 78 mr r5,r11 | |
362 f4: 7d 46 53 78 mr r6,r10 | |
363 f8: 39 3f 01 58 addi r9,r31,344 | |
364 fc: e8 e9 00 00 ld r7,0(r9) | |
365 100: e9 09 00 08 ld r8,8(r9) | |
366 104: 7f a9 eb 78 mr r9,r29 | |
367 108: 7c 0a 03 78 mr r10,r0 | |
368 10c: 48 00 00 01 bl 10c <.nonleaf_call+0xbc> | |
369 110: e8 21 00 00 ld r1,0(r1) | |
370 114: e8 01 00 10 ld r0,16(r1) | |
371 118: 7c 08 03 a6 mtlr r0 | |
372 11c: eb a1 ff e8 ld r29,-24(r1) | |
373 120: eb e1 ff f8 ld r31,-8(r1) | |
374 124: 4e 80 00 20 blr | |
375 128: 00 00 00 00 .long 0x0 | |
376 12c: 00 00 00 01 .long 0x1 | |
377 130: 80 03 00 01 lwz r0,1(r3) | |
378 | |
379 0000000000000134 <.main>: | |
380 134: 7c 08 02 a6 mflr r0 ; | lr -> gpr0 | |
381 138: fb e1 ff f8 std r31,-8(r1) ; | preseve gpr31 (as used in func as helper addr) | |
382 13c: f8 01 00 10 std r0,16(r1) ; | prolog store lr | |
383 140: f8 21 ff 61 stdu r1,-160(r1) ; | open frame | |
384 144: 7c 3f 0b 78 mr r31,r1 ; use gpr31 as sort of frame pointer, below | |
385 148: e9 22 00 00 ld r9,0(r2) ; | | |
386 14c: e9 49 00 08 ld r10,8(r9) ; | fetch local struct data's 2 doublewords (r2 = TOC ptr) -> r9/r10, and ... | |
387 150: e9 29 00 00 ld r9,0(r9) ; | | |
388 154: f9 3f 00 80 std r9,128(r31) ; | ... write to local area on stack | |
389 158: f9 5f 00 88 std r10,136(r31) ; / | |
390 15c: 38 00 00 09 li r0,9 ; \ arg 7, ... | |
391 160: f8 01 00 70 std r0,112(r1) ; | ... "pushed" onto stack | |
392 164: 38 60 00 00 li r3,0 ; arg 0 | |
393 168: 38 80 00 01 li r4,1 ; arg 1 | |
394 16c: 38 a0 00 02 li r5,2 ; arg 2 | |
395 170: 38 c0 00 03 li r6,3 ; arg 3 | |
396 174: 38 e0 00 04 li r7,4 ; arg 4 | |
397 178: e9 1f 00 80 ld r8,128(r31) ; | | |
398 17c: e9 3f 00 88 ld r9,136(r31) ; | arg 5 (struct, fetch from local area, pass as 2 doublewords) | |
399 180: 39 40 00 08 li r10,8 ; arg 6 | |
400 184: 48 00 00 01 bl 184 <.main+0x50> ; call and put return address -> lr | |
401 188: 38 00 00 00 li r0,0 ; return value ... | |
402 18c: 7c 03 03 78 mr r3,r0 ; ... in gpr3 | |
403 190: e8 21 00 00 ld r1,0(r1) ; | | |
404 194: e8 01 00 10 ld r0,16(r1) ; | | |
405 198: 7c 08 03 a6 mtlr r0 ; | epilog | |
406 19c: eb e1 ff f8 ld r31,-8(r1) ; | | |
407 1a0: 4e 80 00 20 blr ; | | |
408 1a4: 00 00 00 00 .long 0x0 ; data | |
409 1a8: 00 00 00 01 .long 0x1 ; data | |
410 1ac: 80 01 00 01 lwz r0,1(r1) ; unsure@@@. data? | |
411 | |
412 | |
413 | |
414 ; ---------- structs by value, complex example (multiple structs) ----------> | |
415 ; | |
416 ; struct A { int i, j; float f; }; | |
417 ; struct B { double d; long long l; }; | |
418 ; | |
419 ; void leaf_call(int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j) | |
420 ; { | |
421 ; } | |
422 ; | |
423 ; void nonleaf_call(int a, int b, struct A c, struct B d, int e, int f, struct A g, struct B h, int i, int j) | |
424 ; { | |
425 ; /* use some local data */ | |
426 ; char l[100] = { 'L' }; | |
427 ; leaf_call(b, c, d, e, f, g, h, i, j); | |
428 ; } | |
429 ; | |
430 ; int main() | |
431 ; { | |
432 ; nonleaf_call(0, 1, (struct A){2, 3, 4.f}, (struct B){5., 6ll}, 7, 8, (struct A){9, 10, 11.f}, (struct B){12., 13ll}, 14, 15); | |
433 ; return 0; | |
434 ; } | |
435 | |
436 | |
437 | |
438 ; output from freebsd-11.0-ppc64 w/ gcc 4.2.1 | |
439 | |
440 0000000000000000 <.leaf_call>: | |
441 0: fb e1 ff f8 std r31,-8(r1) | |
442 4: f8 21 ff c1 stdu r1,-64(r1) | |
443 8: 7c 3f 0b 78 mr r31,r1 | |
444 c: f8 9f 00 78 std r4,120(r31) | |
445 10: f8 bf 00 80 std r5,128(r31) | |
446 14: 39 7f 00 88 addi r11,r31,136 | |
447 18: f8 cb 00 00 std r6,0(r11) | |
448 1c: f8 eb 00 08 std r7,8(r11) | |
449 20: 7d 00 43 78 mr r0,r8 | |
450 24: f9 5f 00 a8 std r10,168(r31) | |
451 28: 90 7f 00 70 stw r3,112(r31) | |
452 2c: 90 1f 00 98 stw r0,152(r31) | |
453 30: 91 3f 00 a0 stw r9,160(r31) | |
454 34: e8 21 00 00 ld r1,0(r1) | |
455 38: eb e1 ff f8 ld r31,-8(r1) | |
456 3c: 4e 80 00 20 blr | |
457 ... | |
458 48: 80 01 00 01 lwz r0,1(r1) | |
459 | |
460 000000000000004c <.nonleaf_call>: | |
461 4c: 7c 08 02 a6 mflr r0 | |
462 50: fb 81 ff e0 std r28,-32(r1) | |
463 54: fb a1 ff e8 std r29,-24(r1) | |
464 58: fb e1 ff f8 std r31,-8(r1) | |
465 5c: f8 01 00 10 std r0,16(r1) | |
466 60: f8 21 fe d1 stdu r1,-304(r1) | |
467 64: 7c 3f 0b 78 mr r31,r1 | |
468 68: f8 bf 01 70 std r5,368(r31) | |
469 6c: f8 df 01 78 std r6,376(r31) | |
470 70: 39 7f 01 80 addi r11,r31,384 | |
471 74: f8 eb 00 00 std r7,0(r11) | |
472 78: f9 0b 00 08 std r8,8(r11) | |
473 7c: 7d 20 4b 78 mr r0,r9 | |
474 80: 7d 49 53 78 mr r9,r10 | |
475 84: 90 7f 01 60 stw r3,352(r31) | |
476 88: 90 9f 01 68 stw r4,360(r31) | |
477 8c: 90 1f 01 90 stw r0,400(r31) | |
478 90: 91 3f 01 98 stw r9,408(r31) | |
479 94: 38 1f 00 a0 addi r0,r31,160 | |
480 98: 39 20 00 64 li r9,100 | |
481 9c: 7c 03 03 78 mr r3,r0 | |
482 a0: 38 80 00 00 li r4,0 | |
483 a4: 7d 25 4b 78 mr r5,r9 | |
484 a8: 48 00 00 01 bl a8 <.nonleaf_call+0x5c> | |
485 ac: 4f ff fb 82 crmove 4*cr7+so,4*cr7+so | |
486 b0: 38 00 00 4c li r0,76 | |
487 b4: 98 1f 00 a0 stb r0,160(r31) | |
488 b8: 80 1f 01 68 lwz r0,360(r31) | |
489 bc: 7c 08 07 b4 extsw r8,r0 | |
490 c0: 80 1f 01 90 lwz r0,400(r31) | |
491 c4: 7c 1d 07 b4 extsw r29,r0 | |
492 c8: 80 1f 01 98 lwz r0,408(r31) | |
493 cc: 7c 1c 07 b4 extsw r28,r0 | |
494 d0: 39 3f 01 b0 addi r9,r31,432 | |
495 d4: e9 49 00 08 ld r10,8(r9) | |
496 d8: e9 29 00 00 ld r9,0(r9) | |
497 dc: 39 61 00 78 addi r11,r1,120 | |
498 e0: f9 2b 00 00 std r9,0(r11) | |
499 e4: f9 4b 00 08 std r10,8(r11) | |
500 e8: 80 1f 01 c4 lwz r0,452(r31) | |
501 ec: 7c 00 07 b4 extsw r0,r0 | |
502 f0: f8 01 00 88 std r0,136(r1) | |
503 f4: 80 1f 01 cc lwz r0,460(r31) | |
504 f8: 7c 00 07 b4 extsw r0,r0 | |
505 fc: f8 01 00 90 std r0,144(r1) | |
506 100: 80 1f 01 a8 lwz r0,424(r31) | |
507 104: 90 01 00 70 stw r0,112(r1) | |
508 108: e9 5f 01 a0 ld r10,416(r31) | |
509 10c: 7d 03 43 78 mr r3,r8 | |
510 110: e8 9f 01 70 ld r4,368(r31) | |
511 114: e8 bf 01 78 ld r5,376(r31) | |
512 118: 39 3f 01 80 addi r9,r31,384 | |
513 11c: e8 c9 00 00 ld r6,0(r9) | |
514 120: e8 e9 00 08 ld r7,8(r9) | |
515 124: 7f a8 eb 78 mr r8,r29 | |
516 128: 7f 89 e3 78 mr r9,r28 | |
517 12c: 48 00 00 01 bl 12c <.nonleaf_call+0xe0> | |
518 130: e8 21 00 00 ld r1,0(r1) | |
519 134: e8 01 00 10 ld r0,16(r1) | |
520 138: 7c 08 03 a6 mtlr r0 | |
521 13c: eb 81 ff e0 ld r28,-32(r1) | |
522 140: eb a1 ff e8 ld r29,-24(r1) | |
523 144: eb e1 ff f8 ld r31,-8(r1) | |
524 148: 4e 80 00 20 blr | |
525 14c: 00 00 00 00 .long 0x0 | |
526 150: 00 00 00 01 .long 0x1 | |
527 154: 80 04 00 01 lwz r0,1(r4) | |
528 | |
529 0000000000000158 <.main>: | |
530 158: 7c 08 02 a6 mflr r0 ; | lr -> gpr0 | |
531 15c: fb e1 ff f8 std r31,-8(r1) ; | preseve gpr31 (as used in func as helper addr) | |
532 160: f8 01 00 10 std r0,16(r1) ; | prolog store lr | |
533 164: f8 21 ff 11 stdu r1,-240(r1) ; | open frame | |
534 168: 7c 3f 0b 78 mr r31,r1 ; use gpr31 as sort of frame pointer, below | |
535 16c: e9 22 00 00 ld r9,0(r2) ; | | |
536 170: e8 09 00 00 ld r0,0(r9) ; | fetch local first struct A data's 2 doublewords (r2 = TOC ptr) -> r9/r10, and ... | |
537 174: 81 29 00 08 lwz r9,8(r9) ; | | |
538 178: f8 1f 00 d0 std r0,208(r31) ; | ... write to local area on stack | |
539 17c: 91 3f 00 d8 stw r9,216(r31) ; / | |
540 180: e9 22 00 08 ld r9,8(r2) ; \ | |
541 184: e9 49 00 08 ld r10,8(r9) ; | fetch local first struct B data's 2 doublewords (r2 = TOC ptr) -> r9/r10, and ... | |
542 188: e9 29 00 00 ld r9,0(r9) ; | | |
543 18c: 39 7f 00 c0 addi r11,r31,192 ; | ... write to local area on stack | |
544 190: f9 2b 00 00 std r9,0(r11) ; | | |
545 194: f9 4b 00 08 std r10,8(r11) ; / | |
546 198: e9 22 00 10 ld r9,16(r2) ; \ | |
547 19c: e8 09 00 00 ld r0,0(r9) ; | fetch local second struct A data's 2 doublewords (r2 = TOC ptr) -> r9/r10, and ... | |
548 1a0: 81 29 00 08 lwz r9,8(r9) ; | | |
549 1a4: f8 1f 00 b0 std r0,176(r31) ; | ... write to local area on stack | |
550 1a8: 91 3f 00 b8 stw r9,184(r31) ; / | |
551 1ac: e9 22 00 18 ld r9,24(r2) ; \ | |
552 1b0: e9 49 00 08 ld r10,8(r9) ; | fetch local second struct B data's 2 doublewords (r2 = TOC ptr) -> r9/r10, and ... | |
553 1b4: e9 29 00 00 ld r9,0(r9) ; | | |
554 1b8: f9 3f 00 a0 std r9,160(r31) ; | ... write to local area on stack | |
555 1bc: f9 5f 00 a8 std r10,168(r31) ; / | |
556 1c0: e8 1f 00 b0 ld r0,176(r31) ; \ | |
557 1c4: 81 3f 00 b8 lwz r9,184(r31) ; | arg 6 (second struct A, fetch from local area, pushed onto stack, pass as 2 doublewords) | |
558 1c8: f8 01 00 70 std r0,112(r1) ; | | |
559 1cc: 91 21 00 78 stw r9,120(r1) ; / | |
560 1d0: e9 3f 00 a0 ld r9,160(r31) ; \ | |
561 1d4: e9 5f 00 a8 ld r10,168(r31) ; | | |
562 1d8: 39 61 00 80 addi r11,r1,128 ; | arg 7 (second struct A, fetch from local area, pushed onto stack, pass as 2 doublewords) | |
563 1dc: f9 2b 00 00 std r9,0(r11) ; | | |
564 1e0: f9 4b 00 08 std r10,8(r11) ; / | |
565 1e4: 38 00 00 0e li r0,14 ; arg 8, ... | |
566 1e8: f8 01 00 90 std r0,144(r1) ; ... "pushed" onto stack | |
567 1ec: 38 00 00 0f li r0,15 ; arg 9, ... | |
568 1f0: f8 01 00 98 std r0,152(r1) ; ... "pushed" onto stack | |
569 1f4: 38 60 00 00 li r3,0 ; arg 0 | |
570 1f8: 38 80 00 01 li r4,1 ; arg 1 | |
571 1fc: e8 bf 00 d0 ld r5,208(r31) ; | arg 2 (first struct A, fetch from local area, pass as 2 doublewords) | |
572 200: e8 df 00 d8 ld r6,216(r31) ; / | |
573 204: 39 3f 00 c0 addi r9,r31,192 ; \ | |
574 208: e8 e9 00 00 ld r7,0(r9) ; | arg 3 (first struct B, fetch from local area, pass as 2 doublewords) | |
575 20c: e9 09 00 08 ld r8,8(r9) ; | | |
576 210: 39 20 00 07 li r9,7 ; arg 4 | |
577 214: 39 40 00 08 li r10,8 ; arg 5 | |
578 218: 48 00 00 01 bl 218 <.main+0xc0> ; call and put return address -> lr | |
579 21c: 38 00 00 00 li r0,0 ; return value ... | |
580 220: 7c 03 03 78 mr r3,r0 ; ... in gpr3 | |
581 224: e8 21 00 00 ld r1,0(r1) ; | | |
582 228: e8 01 00 10 ld r0,16(r1) ; | | |
583 22c: 7c 08 03 a6 mtlr r0 ; | epilog | |
584 230: eb e1 ff f8 ld r31,-8(r1) ; | | |
585 234: 4e 80 00 20 blr ; | | |
586 238: 00 00 00 00 .long 0x0 ; data | |
587 23c: 00 00 00 01 .long 0x1 ; data | |
588 240: 80 01 00 01 lwz r0,1(r1) ; unsure@@@. data? | |
589 | |
590 | |
591 | |
592 ; ---------- returning qwords ----------> | |
593 ; | |
594 ; long long f() | |
595 ; { | |
596 ; return 7171LL; | |
597 ; } | |
598 ; | |
599 ; int main() | |
600 ; { | |
601 ; return (int)f(); | |
602 ; } | |
603 | |
604 | |
605 | |
606 ; output from freebsd-11.0-ppc64 w/ gcc 4.2.1 | |
607 | |
608 0000000000000000 <.f>: | |
609 0: fb e1 ff f8 std r31,-8(r1) | |
610 4: f8 21 ff c1 stdu r1,-64(r1) | |
611 8: 7c 3f 0b 78 mr r31,r1 | |
612 c: 38 00 1c 03 li r0,7171 | |
613 10: 7c 03 03 78 mr r3,r0 | |
614 14: e8 21 00 00 ld r1,0(r1) | |
615 18: eb e1 ff f8 ld r31,-8(r1) | |
616 1c: 4e 80 00 20 blr | |
617 ... | |
618 28: 80 01 00 01 lwz r0,1(r1) | |
619 | |
620 000000000000002c <.main>: | |
621 2c: 7c 08 02 a6 mflr r0 | |
622 30: fb e1 ff f8 std r31,-8(r1) | |
623 34: f8 01 00 10 std r0,16(r1) | |
624 38: f8 21 ff 81 stdu r1,-128(r1) | |
625 3c: 7c 3f 0b 78 mr r31,r1 | |
626 40: 48 00 00 01 bl 40 <.main+0x14> | |
627 44: 7c 60 1b 78 mr r0,r3 | |
628 48: 7c 00 07 b4 extsw r0,r0 | |
629 4c: 7c 03 03 78 mr r3,r0 | |
630 50: e8 21 00 00 ld r1,0(r1) | |
631 54: e8 01 00 10 ld r0,16(r1) | |
632 58: 7c 08 03 a6 mtlr r0 | |
633 5c: eb e1 ff f8 ld r31,-8(r1) | |
634 60: 4e 80 00 20 blr | |
635 64: 00 00 00 00 .long 0x0 | |
636 68: 00 00 00 01 .long 0x1 | |
637 6c: 80 01 00 01 lwz r0,1(r1) | |
638 | |
639 | |
640 | |
641 ; ---------- returning structs by value ----------> | |
642 ; | |
643 ; struct Small { char x; }; | |
644 ; struct Big { long long i; long j; }; | |
645 ; | |
646 ; struct Small f0() | |
647 ; { | |
648 ; struct Small s = { 132 }; | |
649 ; return s; | |
650 ; } | |
651 ; | |
652 ; struct Big f1() | |
653 ; { | |
654 ; struct Big b = { 7171LL, 232 }; | |
655 ; return b; | |
656 ; } | |
657 ; | |
658 ; int main() | |
659 ; { | |
660 ; struct Small s = f0(); | |
661 ; struct Big b = f1(); | |
662 ; return b.j + s.x; | |
663 ; } | |
664 | |
665 | |
666 | |
667 ; output from freebsd-11.0-ppc64 w/ gcc 4.2.1 | |
668 | |
669 0000000000000000 <.f0>: | |
670 0: fb e1 ff f8 std r31,-8(r1) | |
671 4: f8 21 ff b1 stdu r1,-80(r1) | |
672 8: 7c 3f 0b 78 mr r31,r1 | |
673 c: 7c 69 1b 78 mr r9,r3 | |
674 10: 38 00 ff 84 li r0,-124 | |
675 14: 98 1f 00 30 stb r0,48(r31) | |
676 18: 88 1f 00 30 lbz r0,48(r31) | |
677 1c: 98 09 00 00 stb r0,0(r9) | |
678 20: 7d 23 4b 78 mr r3,r9 | |
679 24: e8 21 00 00 ld r1,0(r1) | |
680 28: eb e1 ff f8 ld r31,-8(r1) | |
681 2c: 4e 80 00 20 blr | |
682 ... | |
683 38: 80 01 00 01 lwz r0,1(r1) | |
684 | |
685 000000000000003c <.f1>: | |
686 3c: fb e1 ff f8 std r31,-8(r1) | |
687 40: f8 21 ff b1 stdu r1,-80(r1) | |
688 44: 7c 3f 0b 78 mr r31,r1 | |
689 48: 7c 6b 1b 78 mr r11,r3 | |
690 4c: e9 22 00 00 ld r9,0(r2) | |
691 50: e9 49 00 08 ld r10,8(r9) | |
692 54: e9 29 00 00 ld r9,0(r9) | |
693 58: f9 3f 00 30 std r9,48(r31) | |
694 5c: f9 5f 00 38 std r10,56(r31) | |
695 60: e9 3f 00 30 ld r9,48(r31) | |
696 64: e9 5f 00 38 ld r10,56(r31) | |
697 68: f9 2b 00 00 std r9,0(r11) | |
698 6c: f9 4b 00 08 std r10,8(r11) | |
699 70: 7d 63 5b 78 mr r3,r11 | |
700 74: e8 21 00 00 ld r1,0(r1) | |
701 78: eb e1 ff f8 ld r31,-8(r1) | |
702 7c: 4e 80 00 20 blr | |
703 ... | |
704 88: 80 01 00 01 lwz r0,1(r1) | |
705 | |
706 000000000000008c <.main>: | |
707 8c: 7c 08 02 a6 mflr r0 | |
708 90: fb e1 ff f8 std r31,-8(r1) | |
709 94: f8 01 00 10 std r0,16(r1) | |
710 98: f8 21 ff 61 stdu r1,-160(r1) | |
711 9c: 7c 3f 0b 78 mr r31,r1 | |
712 a0: 38 1f 00 70 addi r0,r31,112 | |
713 a4: 7c 03 03 78 mr r3,r0 | |
714 a8: 48 00 00 01 bl a8 <.main+0x1c> | |
715 ac: 38 1f 00 78 addi r0,r31,120 | |
716 b0: 7c 03 03 78 mr r3,r0 | |
717 b4: 48 00 00 01 bl b4 <.main+0x28> | |
718 b8: e8 1f 00 80 ld r0,128(r31) | |
719 bc: 78 09 00 20 clrldi r9,r0,32 | |
720 c0: 88 1f 00 70 lbz r0,112(r31) | |
721 c4: 78 00 06 20 clrldi r0,r0,56 | |
722 c8: 7c 09 02 14 add r0,r9,r0 | |
723 cc: 78 00 00 20 clrldi r0,r0,32 | |
724 d0: 7c 00 07 b4 extsw r0,r0 | |
725 d4: 7c 03 03 78 mr r3,r0 | |
726 d8: e8 21 00 00 ld r1,0(r1) | |
727 dc: e8 01 00 10 ld r0,16(r1) | |
728 e0: 7c 08 03 a6 mtlr r0 | |
729 e4: eb e1 ff f8 ld r31,-8(r1) | |
730 e8: 4e 80 00 20 blr | |
731 ec: 00 00 00 00 .long 0x0 | |
732 f0: 00 00 00 01 .long 0x1 | |
733 f4: 80 01 00 01 lwz r0,1(r1) | |
734 | |
735 | |
736 | |
272 ; vim: ft=asm | 737 ; vim: ft=asm |
273 | 738 |