Commit | Line | Data |
---|---|---|
ef44eed1 SS |
1 | /* Tests regarding examination of prologues. */ |
2 | ||
3 | int | |
4 | inner (z) | |
5 | int z; | |
6 | { | |
7 | return 2 * z; | |
8 | } | |
9 | ||
10 | /* The native compiler seems to lack asm(). */ | |
11 | ||
12 | #if defined (__GNUC__) && defined (__mips__) | |
13 | /* This is the verbatim output corresponding to the function middle. | |
14 | Label names have been changed to avoid conflicts. It is here as | |
15 | asm() so we don't have to worry that (a) the compiler might change | |
16 | how it does things, and (b) we'd have to insure it gets compiled | |
17 | with gcc -O2. */ | |
18 | ||
19 | asm ("\n\ | |
20 | .text \n\ | |
21 | .align 2 \n\ | |
22 | .globl middle \n\ | |
23 | .loc 1 22 \n\ | |
24 | \n\ | |
25 | .loc 1 21 \n\ | |
26 | .ent middle \n\ | |
27 | middle: \n\ | |
28 | .frame $sp,24,$31 # vars= 0, regs= 1/0, args = 16, extra= 0 \n\ | |
29 | .mask 0x80000000,-8 \n\ | |
30 | .fmask 0x00000000,0 \n\ | |
31 | subu $sp,$sp,24 \n\ | |
32 | \n\ | |
33 | .loc 1 23 \n\ | |
34 | .set noreorder \n\ | |
35 | .set nomacro \n\ | |
36 | beq $4,$0,middle_lab0 \n\ | |
37 | sw $31,16($sp) \n\ | |
38 | .set macro \n\ | |
39 | .set reorder \n\ | |
40 | \n\ | |
41 | \n\ | |
42 | .loc 1 26 \n\ | |
43 | .set noreorder \n\ | |
44 | .set nomacro \n\ | |
45 | jal inner \n\ | |
46 | li $4,0x00000006 # 6 \n\ | |
47 | .set macro \n\ | |
48 | .set reorder \n\ | |
49 | \n\ | |
50 | j middle_lab1 \n\ | |
51 | middle_lab0: \n\ | |
52 | \n\ | |
53 | .loc 1 24 \n\ | |
54 | .set noreorder \n\ | |
55 | .set nomacro \n\ | |
56 | jal inner \n\ | |
57 | li $4,0x00000005 # 5 \n\ | |
58 | .set macro \n\ | |
59 | .set reorder \n\ | |
60 | \n\ | |
61 | middle_lab1: \n\ | |
62 | .set noreorder \n\ | |
63 | lw $31,16($sp) \n\ | |
64 | nop \n\ | |
65 | j $31 \n\ | |
66 | addu $sp,$sp,24 \n\ | |
67 | .set reorder \n\ | |
68 | .end middle \n\ | |
69 | "); | |
70 | #if 0 | |
71 | /* Not necessary, and loses if gcc is not using stabs. */ | |
72 | asm (".stabs \"middle:F1\",36,0,13,middle"); | |
73 | asm (".stabs \"x:p1\",160,0,13,0"); | |
74 | #endif | |
75 | #else | |
76 | int | |
77 | middle (x) | |
78 | int x; | |
79 | { | |
80 | if (x == 0) | |
81 | return inner (5); | |
82 | else | |
83 | return inner (6); | |
84 | } | |
85 | #endif | |
86 | ||
87 | int | |
88 | top (y) | |
89 | int y; | |
90 | { | |
91 | return middle (y + 1); | |
92 | } | |
93 | ||
94 | int | |
95 | main (argc, argv) | |
96 | { | |
97 | return top (-1) + top (1); | |
98 | } |