comparison doc/disas_examples/mips64.n64.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 fd9ba3a6d348
children
comparison
equal deleted inserted replaced
498:fd9ba3a6d348 499:fc614cb865c6
3344 3344
3345 ; ... snip, removed code of ctor and copy ctor ... 3345 ; ... snip, removed code of ctor and copy ctor ...
3346 3346
3347 3347
3348 3348
3349 ; ---------- C++ trivial and non-trivial aggrs as return values ---------->
3350 ;
3351 ; struct Trivial { int a; };
3352 ; struct NonTrivial { int a; NonTrivial() : a(0) {} NonTrivial(const NonTrivial& rhs) : a(rhs.a) { } };
3353 ;
3354 ; extern "C" {
3355 ; struct Trivial f1() { return Trivial(); }
3356 ; }
3357 ;
3358 ; struct NonTrivial f2() { return NonTrivial(); }
3359 ;
3360 ; extern "C" {
3361 ; void f()
3362 ; {
3363 ; int a=1;
3364 ; a += 123;
3365 ; struct Trivial t = f1();
3366 ; a -= 123;
3367 ; struct NonTrivial n = f2();
3368 ; a -= 12;
3369 ; }
3370 ; }
3371
3372
3373
3374 ; output from freebsd-12.0_r333647-malta_mips64ebhf w/ gcc 4.2.1
3375
3376 0000000120000b60 <f1>:
3377 120000b60: 67bdfff0 daddiu sp,sp,-16
3378 120000b64: ffbe0008 sd s8,8(sp)
3379 120000b68: ffbc0000 sd gp,0(sp)
3380 120000b6c: 03a0f02d move s8,sp
3381 120000b70: 3c1c0002 lui gp,0x2
3382 120000b74: 0399e02d daddu gp,gp,t9
3383 120000b78: 679c8320 daddiu gp,gp,-31968
3384 120000b7c: 0000102d move v0,zero
3385 120000b80: 0002103c dsll32 v0,v0,0x0
3386 120000b84: 03c0e82d move sp,s8
3387 120000b88: dfbe0008 ld s8,8(sp)
3388 120000b8c: dfbc0000 ld gp,0(sp)
3389 120000b90: 03e00008 jr ra
3390 120000b94: 67bd0010 daddiu sp,sp,16
3391
3392 0000000120000b98 <_Z2f2v>:
3393 120000b98: 67bdffe0 daddiu sp,sp,-32
3394 120000b9c: ffbf0018 sd ra,24(sp)
3395 120000ba0: ffbe0010 sd s8,16(sp)
3396 120000ba4: ffbc0008 sd gp,8(sp)
3397 120000ba8: ffb00000 sd s0,0(sp)
3398 120000bac: 03a0f02d move s8,sp
3399 120000bb0: 3c1c0002 lui gp,0x2
3400 120000bb4: 0399e02d daddu gp,gp,t9
3401 120000bb8: 679c82e8 daddiu gp,gp,-32024
3402 120000bbc: 0080802d move s0,a0
3403 120000bc0: 0200102d move v0,s0
3404 120000bc4: 0040202d move a0,v0
3405 120000bc8: df9980e0 ld t9,-32544(gp)
3406 120000bcc: 0320f809 jalr t9
3407 120000bd0: 00000000 nop
3408 120000bd4: 0200102d move v0,s0 ; ptr to retval space -> v0
3409 120000bd8: 03c0e82d move sp,s8
3410 120000bdc: dfbf0018 ld ra,24(sp)
3411 120000be0: dfbe0010 ld s8,16(sp)
3412 120000be4: dfbc0008 ld gp,8(sp)
3413 120000be8: dfb00000 ld s0,0(sp)
3414 120000bec: 03e00008 jr ra
3415 120000bf0: 67bd0020 daddiu sp,sp,32
3416 120000bf4: 00000000 nop
3417
3418 0000000120000bf8 <f>:
3419 120000bf8: 67bdffd0 daddiu sp,sp,-48 ;
3420 120000bfc: ffbf0020 sd ra,32(sp) ;
3421 120000c00: ffbe0018 sd s8,24(sp) ;
3422 120000c04: ffbc0010 sd gp,16(sp) ;
3423 120000c08: 03a0f02d move s8,sp ;
3424 120000c0c: 3c1c0002 lui gp,0x2 ;
3425 120000c10: 0399e02d daddu gp,gp,t9 ;
3426 120000c14: 679c8288 daddiu gp,gp,-32120 ;
3427 120000c18: 24020001 li v0,1 ;
3428 120000c1c: afc20000 sw v0,0(s8) ;
3429 120000c20: 8fc20000 lw v0,0(s8) ;
3430 120000c24: 2442007b addiu v0,v0,123 ;
3431 120000c28: afc20000 sw v0,0(s8) ;
3432 120000c2c: df9980d8 ld t9,-32552(gp) ; | call f1()
3433 120000c30: 0320f809 jalr t9 ; |
3434 120000c34: 00000000 nop ;
3435 120000c38: 0002103f dsra32 v0,v0,0x0 ; | returned via reg v0, as small and trivial
3436 120000c3c: afc20004 sw v0,4(s8) ; |
3437 120000c40: 8fc20000 lw v0,0(s8) ;
3438 120000c44: 2442ff85 addiu v0,v0,-123 ;
3439 120000c48: afc20000 sw v0,0(s8) ;
3440 120000c4c: 67c20008 daddiu v0,s8,8 ;
3441 120000c50: 0040202d move a0,v0 ; hidden first arg (ptr to space for ret val)
3442 120000c54: df9980e8 ld t9,-32536(gp) ; | call f2()
3443 120000c58: 0320f809 jalr t9 ; |
3444 120000c5c: 00000000 nop ;
3445 120000c60: 8fc20000 lw v0,0(s8) ;
3446 120000c64: 2442fff4 addiu v0,v0,-12 ;
3447 120000c68: afc20000 sw v0,0(s8) ;
3448 120000c6c: 03c0e82d move sp,s8 ;
3449 120000c70: dfbf0020 ld ra,32(sp) ;
3450 120000c74: dfbe0018 ld s8,24(sp) ;
3451 120000c78: dfbc0010 ld gp,16(sp) ;
3452 120000c7c: 03e00008 jr ra ;
3453 120000c80: 67bd0030 daddiu sp,sp,48 ;
3454 120000c84: 00000000 nop ;
3455
3456
3457
3349 ; vim: ft=asm 3458 ; vim: ft=asm
3350 3459