diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/disas_examples/arm.darwin_thumb.disas	Fri Nov 22 23:08:59 2019 +0100
@@ -0,0 +1,235 @@
+; 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
+