2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mono / mini / emullong.brg
1 %%
2
3 #
4 # emullong.brg: emulate 64 bit instructions with 32bit instructions
5 #
6 # we dont use this, its just a prototype!
7 #
8 # Author:
9 #   Dietmar Maurer (dietmar@ximian.com)
10 #
11 # (C) 2002 Ximian, Inc.
12 #
13
14 lreg: OP_I8CONST {
15         MonoInst *inst;
16
17         MONO_INST_NEW (s, inst, OP_ICONST);
18         inst->dreg = state->reg1;
19         inst->inst_c0 = tree->inst_c0;
20         mono_bblock_add_inst (s->cbb, inst);
21
22         tree->opcode = OP_ICONST;
23         tree->dreg = state->reg2;
24         tree->inst_c0 = tree->inst_c1;
25         mono_bblock_add_inst (s->cbb, tree);
26 }
27
28 lreg: CEE_CONV_I8 (OP_ICONST) {
29         MonoInst *inst;
30
31         inst = state->left->tree;
32         inst->dreg = state->reg1;
33         mono_bblock_add_inst (s->cbb, inst);
34         
35         tree->opcode = OP_ICONST;
36         tree->dreg = state->reg2;
37
38         if (inst->inst_c0 >= 0)
39                 tree->inst_c0 = 0;
40         else
41                 tree->inst_c0 = -1;
42
43         mono_bblock_add_inst (s->cbb, inst);
44 }
45
46 lreg: CEE_CONV_U8 (OP_ICONST) {
47         MonoInst *inst;
48
49         inst = state->left->tree;
50         inst->dreg = state->reg1;
51         mono_bblock_add_inst (s->cbb, inst);
52
53         tree->opcode = OP_ICONST;
54         tree->dreg = state->reg2;
55         tree->inst_c0 = 0;
56         mono_bblock_add_inst (s->cbb, tree);
57 }
58
59 lreg: CEE_CONV_U8 (reg) {
60         MonoInst *inst;
61         
62         if (state->reg1 != state->left->reg1) {
63                 MONO_INST_NEW (s, inst, OP_MOVE);
64                 inst->dreg = state->reg1;
65                 inst->sreg1 = state->left->reg1;
66                 mono_bblock_add_inst (s->cbb, inst);
67         }
68
69         tree->opcode = OP_ICONST;
70         tree->dreg = state->reg2;
71         tree->inst_c0 = 0;
72         mono_bblock_add_inst (s->cbb, tree);
73 }
74
75 lreg: CONV_OVF_I8_UN (OP_ICONST) {
76         state->left->tree->dreg = state->reg1;
77         mono_bblock_add_inst (s->cbb, state->left->tree);
78
79         tree->opcode = OP_ICONST;
80         tree->dreg = state->reg2;
81         tree->inst_c0 = 0;
82         mono_bblock_add_inst (s->cbb, tree);
83 }
84
85
86 %%