5 #define NO_MIPS_JIT_DEBUG
7 #include "mips-codegen.h"
8 #include "mono/metadata/class.h"
10 /* don't run the resulting program, it will destroy your computer,
11 * just objdump -d it to inspect we generated the correct assembler.
14 int main (int argc
, char *argv
[]) {
17 code
= p
= (guint32
*) malloc (sizeof (guint32
) * 1024);
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);
37 mips_dmultu (p
, 6, 7);
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);
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);
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);
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);
87 mips_jump (p
, 0xff1f);
88 mips_jumpl (p
, 0xff1f);
89 mips_jalr (p
, 12, mips_ra
);
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);
117 mips_move (p
, 15, 16);
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);
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);
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);
155 mips_fmovd (p
, 20, 22);
156 printf ("size: %d\n", p
- code
);