Merge pull request #3355 from ludovic-henry/process-fix-exited
[mono.git] / mono / arch / sparc / test.c
1 #include <glib.h>
2 #include "sparc-codegen.h"
3
4 /* don't run the resulting program, it will destroy your computer,
5  * just objdump -d it to inspect we generated the correct assembler.
6  */
7
8 int
9 main ()
10 {
11         guint32 *p;
12         guint32 code_buffer [500];
13         guint32 local_size = 0, stack_size = 0, code_size = 6;
14         guint32 arg_pos, simpletype;
15         unsigned char *ins;
16         int i, stringp, cur_out_reg, size;
17
18         p = code_buffer;
19
20         printf (".text\n.align 4\n.globl main\n.type main,@function\nmain:\n");
21
22         /*
23          * Standard function prolog.
24          */
25         sparc_save_imm (p, sparc_sp, -112-stack_size, sparc_sp);
26         cur_out_reg = sparc_o0;
27         arg_pos = 0;
28
29         if (1) {
30                 sparc_mov_reg_reg (p, sparc_i2, cur_out_reg);
31                 ++cur_out_reg;
32         }
33
34         sparc_ld_imm (p, sparc_i3, arg_pos, cur_out_reg);
35         ++cur_out_reg;
36         sparc_ld_imm (p, sparc_i3, arg_pos+4, cur_out_reg);
37         ++cur_out_reg;
38         /* 
39          * Insert call to function 
40          */
41         sparc_jmpl (p, sparc_i0, 0, sparc_callsite);
42         sparc_nop (p);
43
44         sparc_jmpl_imm (p, sparc_i7, 8, sparc_zero);
45         sparc_restore (p, sparc_zero, sparc_zero, sparc_zero);
46
47         sparc_ldsb (p, sparc_i3, sparc_l0, sparc_o5);
48         sparc_ldsb_imm (p, sparc_i3, 2, sparc_o5);
49
50         sparc_ldsh (p, sparc_i3, sparc_l0, sparc_o5);
51         sparc_ldsh_imm (p, sparc_i3, 2, sparc_o5);
52
53         sparc_ldub (p, sparc_i3, sparc_l0, sparc_o5);
54         sparc_ldub_imm (p, sparc_i3, 2, sparc_o5);
55
56         sparc_lduh (p, sparc_i3, sparc_l0, sparc_o5);
57         sparc_lduh_imm (p, sparc_i3, 2, sparc_o5);
58
59         sparc_ldf (p, sparc_i3, sparc_l0, sparc_o5);
60         sparc_ldf_imm (p, sparc_i3, 2, sparc_o5);
61
62         sparc_stb (p, sparc_i3, sparc_l0, sparc_l2);
63         sparc_stb_imm (p, sparc_i3, sparc_o5, 2);
64
65         sparc_sethi (p, 0xff000000, sparc_o2);
66         sparc_rdy (p, sparc_l0);
67         sparc_wry (p, sparc_l0, sparc_l1);
68         sparc_wry_imm (p, sparc_l0, 16);
69         sparc_stbar (p);
70         sparc_unimp (p, 24);
71         sparc_flush (p, sparc_l4, 0);
72
73         sparc_and (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
74         sparc_and_imm (p, FALSE, sparc_l0, 0xff, sparc_o1);
75         sparc_andn (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
76         sparc_or (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
77         sparc_orn (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
78         sparc_xor (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
79         sparc_xnor (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
80
81         sparc_sll (p, sparc_l0, sparc_l1, sparc_o1);
82         sparc_sll_imm (p, sparc_l0, 2, sparc_o1);
83         sparc_srl (p, sparc_l0, sparc_l1, sparc_o1);
84         sparc_srl_imm (p, sparc_l0, 2, sparc_o1);
85         sparc_sra (p, sparc_l0, sparc_l1, sparc_o1);
86         sparc_sra_imm (p, sparc_l0, 2, sparc_o1);
87
88         sparc_add (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
89         sparc_add_imm (p, FALSE, sparc_l0, 0xff, sparc_o1);
90         sparc_addx (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
91         sparc_sub (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
92         sparc_subx (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
93
94         sparc_muls (p, sparc_l0, sparc_l1, sparc_o1);
95         sparc_umul (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
96         sparc_smul (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
97         sparc_udiv (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
98         sparc_sdiv (p, sparc_cc, sparc_l0, sparc_l1, sparc_o1);
99
100         sparc_branch (p, FALSE, sparc_bne, -12);
101         sparc_ret (p);
102         sparc_retl (p);
103         sparc_test (p, sparc_l4);
104         sparc_cmp (p, sparc_l4, sparc_l6);
105         sparc_cmp_imm (p, sparc_l4, 4);
106         sparc_restore_simple (p);
107
108         sparc_set (p, 0xff000000, sparc_l7);
109         sparc_set (p, 1, sparc_l7);
110         sparc_set (p, 0xff0000ff, sparc_l7);
111
112         sparc_not (p, sparc_g2);
113         sparc_neg (p, sparc_g3);
114         sparc_clr_reg (p, sparc_g4);
115
116
117         size = (p-code_buffer)*4;
118         ins = (gchar*)code_buffer;
119         for (i = 0; i < size; ++i)
120                 printf (".byte %d\n", (unsigned int) ins [i]);
121         return 0;
122 }
123