2010-05-11 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / arch / sparc / test.c
blob0d4ad1869b99ee241a9d3c4e451c799b5ec8fad6
1 #include <glib.h>
2 #include "sparc-codegen.h"
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 */
8 int
9 main ()
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;
18 p = code_buffer;
20 printf (".text\n.align 4\n.globl main\n.type main,@function\nmain:\n");
23 * Standard function prolog.
25 sparc_save_imm (p, sparc_sp, -112-stack_size, sparc_sp);
26 cur_out_reg = sparc_o0;
27 arg_pos = 0;
29 if (1) {
30 sparc_mov_reg_reg (p, sparc_i2, cur_out_reg);
31 ++cur_out_reg;
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
41 sparc_jmpl (p, sparc_i0, 0, sparc_callsite);
42 sparc_nop (p);
44 sparc_jmpl_imm (p, sparc_i7, 8, sparc_zero);
45 sparc_restore (p, sparc_zero, sparc_zero, sparc_zero);
47 sparc_ldsb (p, sparc_i3, sparc_l0, sparc_o5);
48 sparc_ldsb_imm (p, sparc_i3, 2, sparc_o5);
50 sparc_ldsh (p, sparc_i3, sparc_l0, sparc_o5);
51 sparc_ldsh_imm (p, sparc_i3, 2, sparc_o5);
53 sparc_ldub (p, sparc_i3, sparc_l0, sparc_o5);
54 sparc_ldub_imm (p, sparc_i3, 2, sparc_o5);
56 sparc_lduh (p, sparc_i3, sparc_l0, sparc_o5);
57 sparc_lduh_imm (p, sparc_i3, 2, sparc_o5);
59 sparc_ldf (p, sparc_i3, sparc_l0, sparc_o5);
60 sparc_ldf_imm (p, sparc_i3, 2, sparc_o5);
62 sparc_stb (p, sparc_i3, sparc_l0, sparc_l2);
63 sparc_stb_imm (p, sparc_i3, sparc_o5, 2);
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);
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);
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);
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);
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);
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);
108 sparc_set (p, 0xff000000, sparc_l7);
109 sparc_set (p, 1, sparc_l7);
110 sparc_set (p, 0xff0000ff, sparc_l7);
112 sparc_not (p, sparc_g2);
113 sparc_neg (p, sparc_g3);
114 sparc_clr_reg (p, sparc_g4);
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;