view doc/disas_examples/arm.darwin_thumb.disas @ 327:c0390dc85a07

- doc: added disassembly examples for many platforms and calling conventions, for reference
author Tassilo Philipp
date Fri, 22 Nov 2019 23:08:59 +0100
parents
children
line wrap: on
line source

; void leaf_call(int b, int c, int d, int e, int f, int g, int h)
; {
; }
; 
; void nonleaf_call(int a, int b, int c, int d, int e, int f, int g, int h)
; {
; 	/* use some local data */
; 	char x = 'L';
; 	leaf_call(b, c, d, e, f, g, h);
; }
; 
; int main()
; {
; 	nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
; 	return 0;
; }



; output from iOS 6 w/ clang 3.7.1, dumped with llvm-objdump -triple thumbv7-unknown-unknown-macho ...

_leaf_call:
       0:       80 b5           push    {r7, lr}
       2:       6f 46           mov     r7, sp
       4:       87 b0           sub     sp, #28
       6:       d7 f8 10 90     ldr.w   r9, [r7, #16]
       a:       d7 f8 0c c0     ldr.w   r12, [r7, #12]
       e:       d7 f8 08 e0     ldr.w   lr, [r7, #8]
      12:       06 90           str     r0, [sp, #24]
      14:       05 91           str     r1, [sp, #20]
      16:       04 92           str     r2, [sp, #16]
      18:       03 93           str     r3, [sp, #12]
      1a:       cd f8 08 e0     str.w   lr, [sp, #8]
      1e:       cd f8 04 c0     str.w   r12, [sp, #4]
      22:       cd f8 00 90     str.w   r9, [sp]
      26:       07 b0           add     sp, #28
      28:       80 bd           pop     {r7, pc}

_nonleaf_call:
      2a:       b0 b5           push    {r4, r5, r7, lr}
      2c:       02 af           add     r7, sp, #8
      2e:       8c b0           sub     sp, #48
      30:       d7 f8 14 90     ldr.w   r9, [r7, #20]
      34:       d7 f8 10 c0     ldr.w   r12, [r7, #16]
      38:       d7 f8 0c e0     ldr.w   lr, [r7, #12]
      3c:       bc 68           ldr     r4, [r7, #8]
      3e:       4c 25           movs    r5, #76
      40:       0b 90           str     r0, [sp, #44]
      42:       0a 91           str     r1, [sp, #40]
      44:       09 92           str     r2, [sp, #36]
      46:       08 93           str     r3, [sp, #32]
      48:       07 94           str     r4, [sp, #28]
      4a:       cd f8 18 e0     str.w   lr, [sp, #24]
      4e:       cd f8 14 c0     str.w   r12, [sp, #20]
      52:       cd f8 10 90     str.w   r9, [sp, #16]
      56:       07 f8 29 5c     strb    r5, [r7, #-41]
      5a:       0a 98           ldr     r0, [sp, #40]
      5c:       09 99           ldr     r1, [sp, #36]
      5e:       08 9a           ldr     r2, [sp, #32]
      60:       07 9b           ldr     r3, [sp, #28]
      62:       dd f8 18 90     ldr.w   r9, [sp, #24]
      66:       dd f8 14 c0     ldr.w   r12, [sp, #20]
      6a:       dd f8 10 e0     ldr.w   lr, [sp, #16]
      6e:       cd f8 00 90     str.w   r9, [sp]
      72:       cd f8 04 c0     str.w   r12, [sp, #4]
      76:       cd f8 08 e0     str.w   lr, [sp, #8]
      7a:       ff f7 c1 ff     bl      #-126
      7e:       0c b0           add     sp, #48
      80:       b0 bd           pop     {r4, r5, r7, pc}

_main:
      82:       90 b5           push    {r4, r7, lr}
      84:       01 af           add     r7, sp, #4
      86:       85 b0           sub     sp, #20
      88:       00 20           movs    r0, #0
      8a:       01 21           movs    r1, #1
      8c:       02 22           movs    r2, #2
      8e:       03 23           movs    r3, #3
      90:       40 f2 04 09     movw    r9, #4
      94:       40 f2 05 0c     movw    r12, #5
      98:       40 f2 06 0e     movw    lr, #6
      9c:       07 24           movs    r4, #7
      9e:       04 90           str     r0, [sp, #16]
      a0:       cd f8 00 90     str.w   r9, [sp]
      a4:       cd f8 04 c0     str.w   r12, [sp, #4]
      a8:       cd f8 08 e0     str.w   lr, [sp, #8]
      ac:       03 94           str     r4, [sp, #12]
      ae:       ff f7 bc ff     bl      #-136
      b2:       00 20           movs    r0, #0
      b4:       05 b0           add     sp, #20
      b6:       90 bd           pop     {r4, r7, pc}



; ----------------- with spilling ------------->

; #include <stdarg.h>
;
; void leaf_call(int b, int c, int d, int e, int f, int g, int h)
; {
; }
;
; void nonleaf_call(int a, ...)
; {
; 	int b,c,d,e,f,g,h;
; 	va_list ap;
; 	va_start(ap,a);
; 	b = va_arg(ap,int);
; 	c = va_arg(ap,int);
; 	d = va_arg(ap,int);
; 	e = va_arg(ap,int);
; 	f = va_arg(ap,int);
; 	g = va_arg(ap,int);
; 	h = va_arg(ap,int);
; 	/* use some local data */
; 	char x = 'L';
; 	leaf_call(b,c,d,e,f,g,h);
; }
;
; int main()
; {
; 	nonleaf_call(0, 1, 2, 3, 4, 5, 6, 7);
; 	return 0;
; }



; output from iOS 6 w/ clang 3.7.1, dumped with llvm-objdump -triple thumbv7-unknown-unknown-macho ...

_leaf_call:
       0:       80 b5           push    {r7, lr}
       2:       6f 46           mov     r7, sp
       4:       87 b0           sub     sp, #28
       6:       d7 f8 10 90     ldr.w   r9, [r7, #16]
       a:       d7 f8 0c c0     ldr.w   r12, [r7, #12]
       e:       d7 f8 08 e0     ldr.w   lr, [r7, #8]
      12:       06 90           str     r0, [sp, #24]
      14:       05 91           str     r1, [sp, #20]
      16:       04 92           str     r2, [sp, #16]
      18:       03 93           str     r3, [sp, #12]
      1a:       cd f8 08 e0     str.w   lr, [sp, #8]
      1e:       cd f8 04 c0     str.w   r12, [sp, #4]
      22:       cd f8 00 90     str.w   r9, [sp]
      26:       07 b0           add     sp, #28
      28:       80 bd           pop     {r7, pc}

_nonleaf_call:
      2a:       83 b0           sub     sp, #12        ; |        space for spill area (b/c pushing was apparently too easy)
      2c:       80 b5           push    {r7, lr}       ; |
      2e:       6f 46           mov     r7, sp         ; |
      30:       8d b0           sub     sp, #52        ; | prolog
      32:       3b 61           str     r3, [r7, #16]  ; |        |
      34:       fa 60           str     r2, [r7, #12]  ; |        | spill (before reg save area)
      36:       b9 60           str     r1, [r7, #8]   ; |        |
      38:       4c 21           movs    r1, #76
      3a:       0b aa           add     r2, sp, #44
      3c:       0c 90           str     r0, [sp, #48]
      3e:       07 f1 08 00     add.w   r0, r7, #8
      42:       10 60           str     r0, [r2]
      44:       0b 98           ldr     r0, [sp, #44]
      46:       02 1d           adds    r2, r0, #4
      48:       0b 92           str     r2, [sp, #44]
      4a:       00 68           ldr     r0, [r0]
      4c:       0a 90           str     r0, [sp, #40]
      4e:       0b 98           ldr     r0, [sp, #44]
      50:       02 1d           adds    r2, r0, #4
      52:       0b 92           str     r2, [sp, #44]
      54:       00 68           ldr     r0, [r0]
      56:       09 90           str     r0, [sp, #36]
      58:       0b 98           ldr     r0, [sp, #44]
      5a:       02 1d           adds    r2, r0, #4
      5c:       0b 92           str     r2, [sp, #44]
      5e:       00 68           ldr     r0, [r0]
      60:       08 90           str     r0, [sp, #32]
      62:       0b 98           ldr     r0, [sp, #44]
      64:       02 1d           adds    r2, r0, #4
      66:       0b 92           str     r2, [sp, #44]
      68:       00 68           ldr     r0, [r0]
      6a:       07 90           str     r0, [sp, #28]
      6c:       0b 98           ldr     r0, [sp, #44]
      6e:       02 1d           adds    r2, r0, #4
      70:       0b 92           str     r2, [sp, #44]
      72:       00 68           ldr     r0, [r0]
      74:       06 90           str     r0, [sp, #24]
      76:       0b 98           ldr     r0, [sp, #44]
      78:       02 1d           adds    r2, r0, #4
      7a:       0b 92           str     r2, [sp, #44]
      7c:       00 68           ldr     r0, [r0]
      7e:       05 90           str     r0, [sp, #20]
      80:       0b 98           ldr     r0, [sp, #44]
      82:       02 1d           adds    r2, r0, #4
      84:       0b 92           str     r2, [sp, #44]
      86:       00 68           ldr     r0, [r0]
      88:       04 90           str     r0, [sp, #16]
      8a:       07 f8 25 1c     strb    r1, [r7, #-37]
      8e:       0a 98           ldr     r0, [sp, #40]
      90:       09 99           ldr     r1, [sp, #36]
      92:       08 9a           ldr     r2, [sp, #32]
      94:       07 9b           ldr     r3, [sp, #28]
      96:       dd f8 18 90     ldr.w   r9, [sp, #24]
      9a:       dd f8 14 c0     ldr.w   r12, [sp, #20]
      9e:       dd f8 10 e0     ldr.w   lr, [sp, #16]
      a2:       cd f8 00 90     str.w   r9, [sp]
      a6:       cd f8 04 c0     str.w   r12, [sp, #4]
      aa:       cd f8 08 e0     str.w   lr, [sp, #8]
      ae:       ff f7 a7 ff     bl      #-178
      b2:       0d b0           add     sp, #52
      b4:       bd e8 80 40     pop.w   {r7, lr}
      b8:       03 b0           add     sp, #12
      ba:       70 47           bx      lr

_main:
      bc:       90 b5           push    {r4, r7, lr}
      be:       01 af           add     r7, sp, #4
      c0:       85 b0           sub     sp, #20
      c2:       00 20           movs    r0, #0
      c4:       01 21           movs    r1, #1
      c6:       02 22           movs    r2, #2
      c8:       03 23           movs    r3, #3
      ca:       40 f2 04 09     movw    r9, #4
      ce:       40 f2 05 0c     movw    r12, #5
      d2:       40 f2 06 0e     movw    lr, #6
      d6:       07 24           movs    r4, #7
      d8:       04 90           str     r0, [sp, #16]
      da:       cd f8 00 90     str.w   r9, [sp]
      de:       cd f8 04 c0     str.w   r12, [sp, #4]
      e2:       cd f8 08 e0     str.w   lr, [sp, #8]
      e6:       03 94           str     r4, [sp, #12]
      e8:       ff f7 9f ff     bl      #-194
      ec:       00 20           movs    r0, #0
      ee:       05 b0           add     sp, #20
      f0:       90 bd           pop     {r4, r7, pc}

; vim: ft=asm68k