annotate doc/disas_examples/x86.plan9call.disas @ 473:ead041d93e36

- ppc doc and disas examples related to aggregates
author Tassilo Philipp
date Wed, 16 Feb 2022 16:44:11 +0100
parents e5820b7a3fbc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
1 ; void leaf_call(int a, int b, int c, int d, int e, int f)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
2 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
3 ; }
447
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
4 ;
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
5 ; int nonleaf_call(int a, int b, int c, int d, int e, int f, int g)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
6 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
7 ; leaf_call(b,c,d,e,f,g);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
8 ; return 'x';
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
9 ; }
447
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
10 ;
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
11 ; int main()
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
12 ; {
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
13 ; nonleaf_call(0,1,2,3,4,5,6);
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
14 ; return 0;
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
15 ; }
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
16
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
17
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
18
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
19 ; output from plan9-4th_edition-x86 w/ 8c x.c && 8l -a x.8
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
20
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
21 001020 (1) TEXT leaf_call+0(SB),$0
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
22 001020 c3 (3) RET ,
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
23
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
24 001021 (5) TEXT nonleaf_call+0(SB),$28
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
25 001021 83ec1c (5) SUBL $28,SP ; prolog (note, there is no register save area at all)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
26 001024 8b442424 (7) MOVL b+36(FP),AX ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
27 001028 890424 (7) MOVL AX,(SP) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
28 00102b 8b442428 (7) MOVL c+40(FP),AX ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
29 00102f 89442404 (7) MOVL AX,4(SP) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
30 001033 8b44242c (7) MOVL d+44(FP),AX ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
31 001037 89442408 (7) MOVL AX,8(SP) ; | fetch in args from prev frame's param area ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
32 00103b 8b442430 (7) MOVL e+48(FP),AX ; | ... and "push" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
33 00103f 8944240c (7) MOVL AX,12(SP) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
34 001043 8b442434 (7) MOVL f+52(FP),AX ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
35 001047 89442410 (7) MOVL AX,16(SP) ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
36 00104b 8b442438 (7) MOVL g+56(FP),AX ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
37 00104f 89442414 (7) MOVL AX,20(SP) ; |
447
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
38 001053 e8c8ffffff (7) CALL ,1020+leaf_call ; push return address and call
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
39 001058 b878000000 (8) MOVL $120,AX ; return value: 'x' -> eax
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
40 00105d 83c41c (8) ADDL $28,SP ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
41 001060 c3 (8) RET , ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
42
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
43 001061 (11) TEXT main+0(SB),$32
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
44 001061 83ec20 (11) SUBL $32,SP ; prolog (note, there is no register save area at all)
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
45 001064 c7042400000000 (13) MOVL $0,(SP) ; arg 0 -> "push" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
46 00106b b801000000 (13) MOVL $1,AX ; arg 1 -> eax, then ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
47 001070 89442404 (13) MOVL AX,4(SP) ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
48 001074 b802000000 (13) MOVL $2,AX ; arg 2 -> eax, then ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
49 001079 89442408 (13) MOVL AX,8(SP) ; ... "pushed" onto stack
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
50 00107d b803000000 (13) MOVL $3,AX ; .
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
51 001082 8944240c (13) MOVL AX,12(SP) ; .
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
52 001086 b804000000 (13) MOVL $4,AX ; .
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
53 00108b 89442410 (13) MOVL AX,16(SP) ; .
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
54 00108f b805000000 (13) MOVL $5,AX ; .
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
55 001094 89442414 (13) MOVL AX,20(SP) ; .
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
56 001098 b806000000 (13) MOVL $6,AX ; arg 6 -> eax, then ...
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
57 00109d 89442418 (13) MOVL AX,24(SP) ; ... "pushed" onto stack
447
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
58 0010a1 e87bffffff (13) CALL ,1021+nonleaf_call ; push return address and call
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
59 0010a6 31c0 (14) MOVL $0,AX ; return value
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
60 0010a8 83c420 (14) ADDL $32,SP ; |
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
61 0010ab c3 (14) RET , ; | epilog
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
62
447
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
63
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
64
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
65 ; ---------- structs by value ---------->
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
66 ;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
67 ; struct A { int i, j; long long l; };
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
68 ;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
69 ; void leaf_call(int b, int c, int d, int e, struct A f, int g, int h)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
70 ; {
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
71 ; }
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
72 ;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
73 ; void nonleaf_call(int a, int b, int c, int d, int e, struct A f, int g, int h)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
74 ; {
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
75 ; /* use some local data */
473
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 472
diff changeset
76 ; char l[100] = { 'L' };
447
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
77 ; leaf_call(b, c, d, e, f, g, h);
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
78 ; }
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
79 ;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
80 ; int main()
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
81 ; {
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
82 ; nonleaf_call(0, 1, 2, 3, 4, (struct A){5, 6, 7ll}, 8, 9);
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
83 ; return 0;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
84 ; }
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
85
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
86
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
87
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
88 ; output from plan9-4th_edition-x86 w/ 8c x.c && 8l -a x.8
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
89
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
90 001020 (3) TEXT leaf_call+0(SB),$0
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
91 001020 c3 (5) RET ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
92
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
93 001021 (7) TEXT nonleaf_call+0(SB),$148
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
94 001021 81ec94000000 (7) SUBL $148,SP ; prolog (note, there is no register save area at all)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
95 001027 8d842494000000 (10) LEAL l+148(SP),AX ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
96 00102e 89442430 (10) MOVL AX,l+48(SP) ; | loop's write ptr (stored at beginning of char[100] space)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
97 001032 83442430fc (10) ADDL $-4,l+48(SP) ; | decr loop ptr in memory
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
98 001037 8b442430 (10) MOVL l+48(SP),AX ; | ptr -> eax
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
99 00103b c70000000000 (10) MOVL $0,(AX) ; | zero-init char[100] space write a 0
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
100 001041 837c243000 (10) CMPL l+48(SP),$0 ; | cmp if done
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
101 001046 75ea (10) JNE ,1032 ; | loop
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
102 001048 c64424304c (10) MOVB $76,l+48(SP) ; 'L' -> local area (beginning of char[100] space)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
103 00104d 8b84249c000000 (11) MOVL b+156(FP),AX ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
104 001054 890424 (11) MOVL AX,(SP) ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
105 001057 8b8424a0000000 (11) MOVL c+160(FP),AX ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
106 00105e 89442404 (11) MOVL AX,4(SP) ; | fetch in args (ints before struct) from prev frame's param area ...
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
107 001062 8b8424a4000000 (11) MOVL d+164(FP),AX ; | ... and "push" onto stack
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
108 001069 89442408 (11) MOVL AX,8(SP) ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
109 00106d 8b8424a8000000 (11) MOVL e+168(FP),AX ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
110 001074 8944240c (11) MOVL AX,12(SP) ; /
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
111 001078 8d7c2410 (11) LEAL 16(SP),DI ; \ dst ptr
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
112 00107c 8db424ac000000 (11) LEAL f+172(FP),SI ; | src ptr
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
113 001083 b904000000 (11) MOVL $4,CX ; | rep counter (4, for dwords = 16b = sizeof(struct A))
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
114 001088 fc (11) CLD , ; | copy struct to next call's stack
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
115 001089 f3 (11) REP , ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
116 00108a a5 (11) MOVSL , ; /
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
117 00108b 8b8424bc000000 (11) MOVL g+188(FP),AX ; \
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
118 001092 89442420 (11) MOVL AX,32(SP) ; | fetch remaining in args (ints after struct) from prev frame's param area ...
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
119 001096 8b8424c0000000 (11) MOVL h+192(FP),AX ; | ... and "push" onto stack
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
120 00109d 89442424 (11) MOVL AX,36(SP) ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
121 0010a1 e87affffff (11) CALL ,1020+leaf_call ; push return address and call
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
122 0010a6 81c494000000 (11) ADDL $148,SP ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
123 0010ac c3 (11) RET , ; | epilog
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
124
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
125 0010ad (14) TEXT main+0(SB),$52
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
126 0010ad 83ec34 (14) SUBL $52,SP ; prolog (note, there is no register save area at all)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
127 0010b0 c7042400000000 (16) MOVL $0,(SP) ; arg 0 -> "push" onto stack
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
128 0010b7 b801000000 (16) MOVL $1,AX ; arg 1 -> eax, then ...
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
129 0010bc 89442404 (16) MOVL AX,4(SP) ; ... "pushed" onto stack
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
130 0010c0 b802000000 (16) MOVL $2,AX ; arg 2 -> eax, then ...
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
131 0010c5 89442408 (16) MOVL AX,8(SP) ; ... "pushed" onto stack
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
132 0010c9 b803000000 (16) MOVL $3,AX ; .
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
133 0010ce 8944240c (16) MOVL AX,12(SP) ; .
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
134 0010d2 b804000000 (16) MOVL $4,AX ; .
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
135 0010d7 89442410 (16) MOVL AX,16(SP) ; .
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
136 0010db 8d442414 (16) LEAL 20(SP),AX ; get ptr to next (unused) stack bytes -> eax ...
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
137 0010df 89442430 (16) MOVL AX,.safe+48(SP) ; ... and write it to very top of stack (seems aligned and not adjacent to last arg) | looks like callconv keeps a ptr to
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
138 0010e3 8b442430 (16) MOVL .safe+48(SP),AX ; regetting of same ptr into eax (pointless as same as in eax) | each struct params in local area
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
139 0010e7 c70005000000 (16) MOVL $5,(AX) ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
140 0010ed 8b442430 (16) MOVL .safe+48(SP),AX ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
141 0010f1 c7400406000000 (16) MOVL $6,4(AX) ; | copy struct linearly to stack, adjacent to other args
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
142 0010f8 8b442430 (16) MOVL .safe+48(SP),AX ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
143 0010fc c7400807000000 (16) MOVL $7,8(AX) ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
144 001103 c7400c00000000 (16) MOVL $0,12(AX) ; | msbytes of long long
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
145 00110a b808000000 (16) MOVL $8,AX ; arg 6 -> eax, then ...
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
146 00110f 89442424 (16) MOVL AX,36(SP) ; ... "pushed" onto stack
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
147 001113 b809000000 (16) MOVL $9,AX ; arg 7 -> eax, then ...
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
148 001118 89442428 (16) MOVL AX,40(SP) ; ... "pushed" onto stack
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
149 00111c e800ffffff (16) CALL ,1021+nonleaf_call ; push return address and call
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
150 001121 31c0 (17) MOVL $0,AX ; return value
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
151 001123 83c434 (17) ADDL $52,SP ; |
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
152 001126 c3 (17) RET , ; | epilog
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
153
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
154
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
155
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
156 ; ---------- structs by value, complex example (multiple structs) ---------->
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
157 ;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
158 ; struct A { int i, j; float f; };
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
159 ; struct B { double d; long long l; };
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
160 ;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
161 ; 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)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
162 ; {
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
163 ; }
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
164 ;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
165 ; 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)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
166 ; {
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
167 ; /* use some local data */
473
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 472
diff changeset
168 ; char l[100] = { 'L' };
447
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
169 ; leaf_call(b, c, d, e, f, g, h, i, j);
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
170 ; }
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
171 ;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
172 ; int main()
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
173 ; {
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
174 ; 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);
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
175 ; return 0;
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
176 ; }
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
177
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
178
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
179
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
180 ; output from plan9-4th_edition-x86 w/ 8c x.c && 8l -a x.8
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
181
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
182 001020 (4) TEXT leaf_call+0(SB),$0
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
183 001020 c3 (6) RET ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
184
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
185 001021 (8) TEXT nonleaf_call+0(SB),$184
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
186 001021 81ecb8000000 (8) SUBL $184,SP
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
187 001027 8d8424b8000000 (11) LEAL l+184(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
188 00102e 89442454 (11) MOVL AX,l+84(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
189 001032 83442454fc (11) ADDL $-4,l+84(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
190 001037 8b442454 (11) MOVL l+84(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
191 00103b c70000000000 (11) MOVL $0,(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
192 001041 837c245400 (11) CMPL l+84(SP),$0
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
193 001046 75ea (11) JNE ,1032
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
194 001048 c64424544c (11) MOVB $76,l+84(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
195 00104d 8b8424c0000000 (12) MOVL b+192(FP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
196 001054 890424 (12) MOVL AX,(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
197 001057 8d7c2404 (12) LEAL 4(SP),DI
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
198 00105b 8db424c4000000 (12) LEAL c+196(FP),SI
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
199 001062 b903000000 (12) MOVL $3,CX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
200 001067 fc (12) CLD ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
201 001068 f3 (12) REP ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
202 001069 a5 (12) MOVSL ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
203 00106a 8d7c2410 (12) LEAL 16(SP),DI
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
204 00106e 8db424d0000000 (12) LEAL d+208(FP),SI
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
205 001075 b904000000 (12) MOVL $4,CX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
206 00107a fc (12) CLD ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
207 00107b f3 (12) REP ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
208 00107c a5 (12) MOVSL ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
209 00107d 8b8424e0000000 (12) MOVL e+224(FP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
210 001084 89442420 (12) MOVL AX,32(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
211 001088 8b8424e4000000 (12) MOVL f+228(FP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
212 00108f 89442424 (12) MOVL AX,36(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
213 001093 8d7c2428 (12) LEAL 40(SP),DI
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
214 001097 8db424e8000000 (12) LEAL g+232(FP),SI
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
215 00109e b903000000 (12) MOVL $3,CX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
216 0010a3 fc (12) CLD ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
217 0010a4 f3 (12) REP ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
218 0010a5 a5 (12) MOVSL ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
219 0010a6 8d7c2434 (12) LEAL 52(SP),DI
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
220 0010aa 8db424f4000000 (12) LEAL h+244(FP),SI
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
221 0010b1 b904000000 (12) MOVL $4,CX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
222 0010b6 fc (12) CLD ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
223 0010b7 f3 (12) REP ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
224 0010b8 a5 (12) MOVSL ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
225 0010b9 8b842404010000 (12) MOVL i+260(FP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
226 0010c0 89442444 (12) MOVL AX,68(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
227 0010c4 8b842408010000 (12) MOVL j+264(FP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
228 0010cb 89442448 (12) MOVL AX,72(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
229 0010cf e84cffffff (12) CALL ,1020+leaf_call
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
230 0010d4 81c4b8000000 (12) ADDL $184,SP
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
231 0010da c3 (12) RET ,
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
232
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
233 0010db (15) TEXT main+0(SB),$100
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
234 0010db 83ec64 (15) SUBL $100,SP
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
235 0010de c7042400000000 (17) MOVL $0,(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
236 0010e5 b801000000 (17) MOVL $1,AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
237 0010ea 89442404 (17) MOVL AX,4(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
238 0010ee 8d442408 (17) LEAL 8(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
239 0010f2 89442460 (17) MOVL AX,.safe+96(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
240 0010f6 8b442460 (17) MOVL .safe+96(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
241 0010fa c70002000000 (17) MOVL $2,(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
242 001100 8b442460 (17) MOVL .safe+96(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
243 001104 c7400403000000 (17) MOVL $3,4(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
244 00110b dd0500200000 (17) FMOVD $0.40100000+0(SB),F0
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
245 001111 8b442460 (17) MOVL .safe+96(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
246 001115 d95808 (17) FMOVFP F0,8(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
247 001118 8d442414 (17) LEAL 20(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
248 00111c 8944245c (17) MOVL AX,.safe+92(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
249 001120 dd0508200000 (17) FMOVD $0.40140000+0(SB),F0
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
250 001126 8b44245c (17) MOVL .safe+92(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
251 00112a dd18 (17) FMOVDP F0,(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
252 00112c 8b44245c (17) MOVL .safe+92(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
253 001130 c7400806000000 (17) MOVL $6,8(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
254 001137 c7400c00000000 (17) MOVL $0,12(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
255 00113e b807000000 (17) MOVL $7,AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
256 001143 89442424 (17) MOVL AX,36(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
257 001147 b808000000 (17) MOVL $8,AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
258 00114c 89442428 (17) MOVL AX,40(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
259 001150 8d44242c (17) LEAL 44(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
260 001154 89442458 (17) MOVL AX,.safe+88(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
261 001158 8b442458 (17) MOVL .safe+88(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
262 00115c c70009000000 (17) MOVL $9,(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
263 001162 8b442458 (17) MOVL .safe+88(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
264 001166 c740040a000000 (17) MOVL $10,4(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
265 00116d dd0510200000 (17) FMOVD $0.40260000+0(SB),F0
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
266 001173 8b442458 (17) MOVL .safe+88(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
267 001177 d95808 (17) FMOVFP F0,8(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
268 00117a 8d442438 (17) LEAL 56(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
269 00117e 89442454 (17) MOVL AX,.safe+84(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
270 001182 dd0518200000 (17) FMOVD $0.40280000+0(SB),F0
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
271 001188 8b442454 (17) MOVL .safe+84(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
272 00118c dd18 (17) FMOVDP F0,(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
273 00118e 8b442454 (17) MOVL .safe+84(SP),AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
274 001192 c740080d000000 (17) MOVL $13,8(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
275 001199 c7400c00000000 (17) MOVL $0,12(AX)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
276 0011a0 b80e000000 (17) MOVL $14,AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
277 0011a5 89442448 (17) MOVL AX,72(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
278 0011a9 b80f000000 (17) MOVL $15,AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
279 0011ae 8944244c (17) MOVL AX,76(SP)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
280 0011b2 e86afeffff (17) CALL ,1021+nonleaf_call
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
281 0011b7 31c0 (18) MOVL $0,AX
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
282 0011b9 83c464 (18) ADDL $100,SP
472
Tassilo Philipp
parents: 447
diff changeset
283 0011bc c3 (18) RET ,
447
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
284
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
285 002000 0000000000001040 (17) DATA $0.40100000+0(SB)/8,$(40100000,00000000)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
286 002008 0000000000001440 (17) DATA $0.40140000+0(SB)/8,$(40140000,00000000)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
287 002010 0000000000002640 (17) DATA $0.40260000+0(SB)/8,$(40260000,00000000)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
288 002018 0000000000002840 (17) DATA $0.40280000+0(SB)/8,$(40280000,00000000)
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
289
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
290
97fff5d9cea1 - plan9/x86 struct by value passing disas example
Tassilo Philipp
parents: 327
diff changeset
291
472
Tassilo Philipp
parents: 447
diff changeset
292 ; ---------- returning qwords ---------->
Tassilo Philipp
parents: 447
diff changeset
293 ;
Tassilo Philipp
parents: 447
diff changeset
294 ; long long f()
Tassilo Philipp
parents: 447
diff changeset
295 ; {
Tassilo Philipp
parents: 447
diff changeset
296 ; return 7171LL;
Tassilo Philipp
parents: 447
diff changeset
297 ; }
Tassilo Philipp
parents: 447
diff changeset
298 ;
Tassilo Philipp
parents: 447
diff changeset
299 ; int main()
Tassilo Philipp
parents: 447
diff changeset
300 ; {
Tassilo Philipp
parents: 447
diff changeset
301 ; return (int)f();
Tassilo Philipp
parents: 447
diff changeset
302 ; }
Tassilo Philipp
parents: 447
diff changeset
303
473
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 472
diff changeset
304
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 472
diff changeset
305
472
Tassilo Philipp
parents: 447
diff changeset
306 ; output from plan9-4th_edition-x86 w/ 8c x.c && 8l -a x.8
Tassilo Philipp
parents: 447
diff changeset
307
Tassilo Philipp
parents: 447
diff changeset
308 001020 (2) TEXT f1+0(SB),$0
Tassilo Philipp
parents: 447
diff changeset
309 001020 8b442404 (4) MOVL .ret+4(FP),AX ; ptr to retval space -> eax
Tassilo Philipp
parents: 447
diff changeset
310 001024 c700031c0000 (4) MOVL $7171,(AX) ; |
Tassilo Philipp
parents: 447
diff changeset
311 00102a c7400400000000 (4) MOVL $0,4(AX) ; | return value
Tassilo Philipp
parents: 447
diff changeset
312 001031 c3 (4) RET ,
Tassilo Philipp
parents: 447
diff changeset
313
Tassilo Philipp
parents: 447
diff changeset
314 001032 (7) TEXT main+0(SB),$16
Tassilo Philipp
parents: 447
diff changeset
315 001032 83ec10 (7) SUBL $16,SP ; prolog
Tassilo Philipp
parents: 447
diff changeset
316 001035 8d4c2408 (9) LEAL .safe+8(SP),CX ; | ptr to space for return value ...
Tassilo Philipp
parents: 447
diff changeset
317 001039 890c24 (9) MOVL CX,(SP) ; | ... pushed as implicit first arg
Tassilo Philipp
parents: 447
diff changeset
318 00103c e8dfffffff (9) CALL ,1020+f1 ; push return address and call
Tassilo Philipp
parents: 447
diff changeset
319 001041 8b442408 (9) MOVL .safe+8(SP),AX ; return value
Tassilo Philipp
parents: 447
diff changeset
320 001045 8b54240c (9) MOVL .safe+12(SP),DX ; @@@ unsure, b/c we have a cast
Tassilo Philipp
parents: 447
diff changeset
321 001049 83c410 (9) ADDL $16,SP ; |
Tassilo Philipp
parents: 447
diff changeset
322 00104c c3 (9) RET , ; | epilog
Tassilo Philipp
parents: 447
diff changeset
323
Tassilo Philipp
parents: 447
diff changeset
324
Tassilo Philipp
parents: 447
diff changeset
325
Tassilo Philipp
parents: 447
diff changeset
326 ; ---------- returning structs by value ---------->
Tassilo Philipp
parents: 447
diff changeset
327 ;
Tassilo Philipp
parents: 447
diff changeset
328 ; struct Small { char x; };
Tassilo Philipp
parents: 447
diff changeset
329 ; struct Big { long long i; long j; };
Tassilo Philipp
parents: 447
diff changeset
330 ;
Tassilo Philipp
parents: 447
diff changeset
331 ; struct Small f0()
Tassilo Philipp
parents: 447
diff changeset
332 ; {
Tassilo Philipp
parents: 447
diff changeset
333 ; struct Small s = { 132 };
Tassilo Philipp
parents: 447
diff changeset
334 ; return s;
Tassilo Philipp
parents: 447
diff changeset
335 ; }
Tassilo Philipp
parents: 447
diff changeset
336 ;
Tassilo Philipp
parents: 447
diff changeset
337 ; struct Big f1()
Tassilo Philipp
parents: 447
diff changeset
338 ; {
Tassilo Philipp
parents: 447
diff changeset
339 ; struct Big b = { 7171LL, 232 };
Tassilo Philipp
parents: 447
diff changeset
340 ; return b;
Tassilo Philipp
parents: 447
diff changeset
341 ; }
Tassilo Philipp
parents: 447
diff changeset
342 ;
Tassilo Philipp
parents: 447
diff changeset
343 ; int main()
Tassilo Philipp
parents: 447
diff changeset
344 ; {
Tassilo Philipp
parents: 447
diff changeset
345 ; struct Small s = f0();
Tassilo Philipp
parents: 447
diff changeset
346 ; struct Big b = f1();
Tassilo Philipp
parents: 447
diff changeset
347 ; return b.j + s.x;
Tassilo Philipp
parents: 447
diff changeset
348 ; }
Tassilo Philipp
parents: 447
diff changeset
349
473
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 472
diff changeset
350
ead041d93e36 - ppc doc and disas examples related to aggregates
Tassilo Philipp
parents: 472
diff changeset
351
472
Tassilo Philipp
parents: 447
diff changeset
352 ; output from plan9-4th_edition-x86 w/ 8c x.c && 8l -a x.8
Tassilo Philipp
parents: 447
diff changeset
353
Tassilo Philipp
parents: 447
diff changeset
354 001020 (5) TEXT f0+0 (SB),$16
Tassilo Philipp
parents: 447
diff changeset
355 001020 83ec08 (5) SUBL $8,SP ; prolog
Tassilo Philipp
parents: 447
diff changeset
356 001023 c644240484 (7) MOVB $-124,s+4(SP) ; struct data in local area (s.x)
Tassilo Philipp
parents: 447
diff changeset
357 001028 8b7c240c (8) MOVL .ret+12(FP),DI ; \
Tassilo Philipp
parents: 447
diff changeset
358 00102c 8d742404 (8) LEAL s+4(SP),SI ; |
Tassilo Philipp
parents: 447
diff changeset
359 001030 b901000000 (8) MOVL $1,CX ; | copy struct in local area to return
Tassilo Philipp
parents: 447
diff changeset
360 001035 fc (8) CLD , ; | value (pointed to by implicit first arg)
Tassilo Philipp
parents: 447
diff changeset
361 001036 f3 (8) REP , ; |
Tassilo Philipp
parents: 447
diff changeset
362 001037 a5 (8) MOVSL , ; /
Tassilo Philipp
parents: 447
diff changeset
363 001038 83c408 (8) ADDL $8,SP ; \
Tassilo Philipp
parents: 447
diff changeset
364 00103b c3 (8) RET , ; | epilog
Tassilo Philipp
parents: 447
diff changeset
365
Tassilo Philipp
parents: 447
diff changeset
366 00103c (11) TEXT f1+0(SB),$16
Tassilo Philipp
parents: 447
diff changeset
367 00103c 83ec10 (11) SUBL $16,SP ; prolog
Tassilo Philipp
parents: 447
diff changeset
368 00103f c7442404031c0000 (13) MOVL $7171,b+4(SP) ; | |
Tassilo Philipp
parents: 447
diff changeset
369 001047 c744240800000000 (13) MOVL $0,b+8(SP) ; | struct data in local area | b.i
Tassilo Philipp
parents: 447
diff changeset
370 00104f c744240ce8000000 (13) MOVL $232,b+12(SP) ; / b.j
Tassilo Philipp
parents: 447
diff changeset
371 001057 8b7c2414 (14) MOVL .ret+20(FP),DI ; \
Tassilo Philipp
parents: 447
diff changeset
372 00105b 8d742404 (14) LEAL b+4(SP),SI ; |
Tassilo Philipp
parents: 447
diff changeset
373 00105f b903000000 (14) MOVL $3,CX ; | copy struct in local area to return
Tassilo Philipp
parents: 447
diff changeset
374 001064 fc (14) CLD , ; | value (pointed to by implicit first arg)
Tassilo Philipp
parents: 447
diff changeset
375 001065 f3 (14) REP , ; |
Tassilo Philipp
parents: 447
diff changeset
376 001066 a5 (14) MOVSL , ; /
Tassilo Philipp
parents: 447
diff changeset
377 001067 83c410 (14) ADDL $16,SP ; \
Tassilo Philipp
parents: 447
diff changeset
378 00106a c3 (14) RET , ; | epilog
Tassilo Philipp
parents: 447
diff changeset
379
Tassilo Philipp
parents: 447
diff changeset
380 00106b (17) TEXT main+0(SB),$28
Tassilo Philipp
parents: 447
diff changeset
381 00106b 83ec1c (17) SUBL $28,SP ; prolog
Tassilo Philipp
parents: 447
diff changeset
382 00106e 8d442418 (19) LEAL s+24(SP),AX ; | ptr to space for return value ...
Tassilo Philipp
parents: 447
diff changeset
383 001072 890424 (19) MOVL AX,(SP) ; | ... pushed as implicit first arg
Tassilo Philipp
parents: 447
diff changeset
384 001075 e8a6ffffff (19) CALL ,1020+f0 ; push return address and call
Tassilo Philipp
parents: 447
diff changeset
385 00107a 8d44240c (20) LEAL b+12(SP),AX ; | ptr to space for return value ...
Tassilo Philipp
parents: 447
diff changeset
386 00107e 890424 (20) MOVL AX,(SP) ; | ... pushed as implicit first arg
Tassilo Philipp
parents: 447
diff changeset
387 001081 e8b6ffffff (20) CALL ,103c+f1 ; push return address and call
Tassilo Philipp
parents: 447
diff changeset
388 001086 0fbe442418 (21) MOVBLSX s+24(SP),AX ; |
Tassilo Philipp
parents: 447
diff changeset
389 00108b 03442414 (21) ADDL b+20(SP),AX ; / return value
Tassilo Philipp
parents: 447
diff changeset
390 00108f 83c41c (21) ADDL $28,SP ; \
Tassilo Philipp
parents: 447
diff changeset
391 001092 c3 (21) RET , ; | epilog
Tassilo Philipp
parents: 447
diff changeset
392
Tassilo Philipp
parents: 447
diff changeset
393
Tassilo Philipp
parents: 447
diff changeset
394
327
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
395 ; vim: ft=asm
c0390dc85a07 - doc: added disassembly examples for many platforms and calling conventions, for reference
Tassilo Philipp
parents:
diff changeset
396