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