Merge pull request #2821 from lambdageek/dev/monoerror-assembly
[mono.git] / mono / arch / mips / test.c
1 #include "config.h"
2 #include <stdlib.h>
3 #include <string.h>
4
5 #define NO_MIPS_JIT_DEBUG
6
7 #include "mips-codegen.h"
8 #include "mono/metadata/class.h"
9
10 /* don't run the resulting program, it will destroy your computer,
11  * just objdump -d it to inspect we generated the correct assembler.
12  */
13
14 int main (int argc, char *argv[]) {
15         guint32 *code, * p;
16
17         code = p = (guint32 *) malloc (sizeof (guint32) * 1024);
18         
19         mips_add (p, 3, 4, 5);
20         mips_addi (p, 3, 4, 5);
21         mips_addu (p, 3, 4, 5);
22         mips_addiu (p, 3, 4, 5);
23         mips_sub (p, 3, 4, 5);
24         mips_subu (p, 3, 4, 5);
25         mips_dadd (p, 3, 4, 5);
26         mips_daddi (p, 3, 4, 5);
27         mips_daddu (p, 3, 4, 5);
28         mips_daddiu (p, 3, 4, 5);
29         mips_dsub (p, 3, 4, 5);
30         mips_dsubu (p, 3, 4, 5);
31
32         mips_mult (p, 6, 7);
33         mips_multu (p, 6, 7);
34         mips_div (p, 6, 7);
35         mips_divu (p, 6, 7);
36         mips_dmult (p, 6, 7);
37         mips_dmultu (p, 6, 7);
38         mips_ddiv (p, 6, 7);
39         mips_ddivu (p, 6, 7);
40
41         mips_sll (p, 3, 4, 5);
42         mips_sllv (p, 3, 4, 5);
43         mips_sra (p, 3, 4, 5);
44         mips_srav (p, 3, 4, 5);
45         mips_srl (p, 3, 4, 5);
46         mips_srlv (p, 3, 4, 5);
47         mips_dsll (p, 3, 4, 5);
48         mips_dsll32 (p, 3, 4, 5);
49         mips_dsllv (p, 3, 4, 5);
50         mips_dsra (p, 3, 4, 5);
51         mips_dsra32 (p, 3, 4, 5);
52         mips_dsrav (p, 3, 4, 5);
53         mips_dsrl (p, 3, 4, 5);
54         mips_dsrl32 (p, 3, 4, 5);
55         mips_dsrlv (p, 3, 4, 5);
56
57         mips_and (p, 8, 9, 10);
58         mips_andi (p, 8, 9, 10);
59         mips_nor (p, 8, 9, 10);
60         mips_or (p, 8, 9, 10);
61         mips_ori (p, 8, 9, 10);
62         mips_xor (p, 8, 9, 10);
63         mips_xori (p, 8, 9, 10);
64
65         mips_slt (p, 8, 9, 10);
66         mips_slti (p, 8, 9, 10);
67         mips_sltu (p, 8, 9, 10);
68         mips_sltiu (p, 8, 9, 10);
69
70         mips_beq (p, 8, 9, 0xff1f);
71         mips_beql (p, 8, 9, 0xff1f);
72         mips_bne (p, 8, 9, 0xff1f);
73         mips_bnel (p, 8, 9, 0xff1f);
74         mips_bgez (p, 11, 0xff1f);
75         mips_bgezal (p, 11, 0xff1f);
76         mips_bgezall (p, 11, 0xff1f);
77         mips_bgezl (p, 11, 0xff1f);
78         mips_bgtz (p, 11, 0xff1f);
79         mips_bgtzl (p, 11, 0xff1f);
80         mips_blez (p, 11, 0xff1f);
81         mips_blezl (p, 11, 0xff1f);
82         mips_bltz (p, 11, 0xff1f);
83         mips_bltzal (p, 11, 0xff1f);
84         mips_bltzall (p, 11, 0xff1f);
85         mips_bltzl (p, 11, 0xff1f);
86
87         mips_jump (p, 0xff1f);
88         mips_jumpl (p, 0xff1f);
89         mips_jalr (p, 12, mips_ra);
90         mips_jr (p, 12);
91
92         mips_lb (p, 13, 14, 128);
93         mips_lbu (p, 13, 14, 128);
94         mips_ld (p, 13, 14, 128);
95         mips_ldl (p, 13, 14, 128);
96         mips_ldr (p, 13, 14, 128);
97         mips_lh (p, 13, 14, 128);
98         mips_lhu (p, 13, 14, 128);
99         mips_ll (p, 13, 14, 128);
100         mips_lld (p, 13, 14, 128);
101         mips_lui (p, 13, 14, 128);
102         mips_lw (p, 13, 14, 128);
103         mips_lwl (p, 13, 14, 128);
104         mips_lwr (p, 13, 14, 128);
105         mips_lwu (p, 13, 14, 128);
106         mips_sb (p, 13, 14, 128);
107         mips_sc (p, 13, 14, 128);
108         mips_scd (p, 13, 14, 128);
109         mips_sd (p, 13, 14, 128);
110         mips_sdl (p, 13, 14, 128);
111         mips_sdr (p, 13, 14, 128);
112         mips_sh (p, 13, 14, 128);
113         mips_sw (p, 13, 14, 128);
114         mips_swl (p, 13, 14, 128);
115         mips_swr (p, 13, 14, 128);
116
117         mips_move (p, 15, 16);
118         mips_nop (p);
119         mips_break (p, 0);
120         mips_sync (p, 0);
121         mips_mfhi (p, 17);
122         mips_mflo (p, 17);
123         mips_mthi (p, 17);
124         mips_mtlo (p, 17);
125
126         mips_fabsd (p, 16, 18);
127         mips_fnegd (p, 16, 18);
128         mips_fsqrtd (p, 16, 18);
129         mips_faddd (p, 16, 18, 20);
130         mips_fdivd (p, 16, 18, 20);
131         mips_fmuld (p, 16, 18, 20);
132         mips_fsubd (p, 16, 18, 20);
133
134         mips_fcmpd (p, MIPS_FPU_EQ, 18, 20);
135         mips_fbfalse (p, 0xff1f);
136         mips_fbfalsel (p, 0xff1f);
137         mips_fbtrue (p, 0xff1f);
138         mips_fbtruel (p, 0xff1f);
139
140         mips_ceilwd (p, 20, 22);
141         mips_ceilld (p, 20, 22);
142         mips_floorwd (p, 20, 22);
143         mips_floorld (p, 20, 22);
144         mips_roundwd (p, 20, 22);
145         mips_roundld (p, 20, 22);
146         mips_truncwd (p, 20, 22);
147         mips_truncld (p, 20, 22);
148         mips_cvtdw (p, 20, 22);
149         mips_cvtds (p, 20, 22);
150         mips_cvtdl (p, 20, 22);
151         mips_cvtld (p, 20, 22);
152         mips_cvtsd (p, 20, 22);
153         mips_cvtwd (p, 20, 22);
154
155         mips_fmovd (p, 20, 22);
156         printf ("size: %d\n", p - code);
157
158         return 0;
159 }