view doc/disas_examples/arm.darwin_thumb.disas @ 357:d982a00c2177

- PPC64 asm syntax fix, specifying explicitly comparison mode for cmpi (newer toolchains complain, older ones took optional field of instruction which happened to be same value)
author Tassilo Philipp
date Tue, 25 Feb 2020 18:16:13 +0100
parents c0390dc85a07
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