blob: 99a8d7d9a5e7ba70aead46c4bff506111732190a [file] [log] [blame]
sewardjc97096c2004-06-30 09:28:04 +00001
2/*---------------------------------------------------------------*/
3/*--- ---*/
4/*--- This file (test_main.c) is ---*/
5/*--- Copyright (c) 2004 OpenWorks LLP. All rights reserved. ---*/
6/*--- ---*/
7/*---------------------------------------------------------------*/
8
9#include <stdio.h>
10#include <stdlib.h>
11
12#include "basictypes.h"
13#include "ir_defs.h"
sewardj2cd80dc2004-07-02 15:20:40 +000014#include "host_regs.h"
15#include "x86h_defs.h"
sewardjc97096c2004-06-30 09:28:04 +000016
17
18/*---------------------------------------------------------------*/
19/*--- Test ---*/
20/*---------------------------------------------------------------*/
21
22/* HACK */
23extern
sewardj2cd80dc2004-07-02 15:20:40 +000024HInstrArray* /* not really, but for the time being ... */
sewardj194d54a2004-07-03 19:08:18 +000025 iselBB_X86Instr ( IRBB* bb );
sewardj0ec33252004-07-03 13:30:00 +000026
sewardjc97096c2004-06-30 09:28:04 +000027
28int main ( void )
29{
sewardj2cd80dc2004-07-02 15:20:40 +000030 HInstrArray* vcode;
31 IRBB* bb;
32 IRTypeEnv* env = newIRTypeEnv();
sewardjc97096c2004-06-30 09:28:04 +000033
sewardj12952ef2004-07-03 14:52:19 +000034 IRTemp t0 = 0;
sewardjc97096c2004-06-30 09:28:04 +000035 IRTemp t1 = 1;
36 IRTemp t2 = 2;
37
sewardj12952ef2004-07-03 14:52:19 +000038 addToIRTypeEnv ( env, t0, Ity_I32 );
sewardjc97096c2004-06-30 09:28:04 +000039 addToIRTypeEnv ( env, t1, Ity_I32 );
40 addToIRTypeEnv ( env, t2, Ity_I32 );
41
sewardj12952ef2004-07-03 14:52:19 +000042 IRStmt* s10 = IRStmt_Tmp(t0, IRExpr_Const(IRConst_U32(0x2000)));
43 IRStmt* s11 = IRStmt_Tmp(t1, IRExpr_Const(IRConst_U32(0x2001)));
44 IRStmt* s12 = IRStmt_Tmp(t2, IRExpr_Const(IRConst_U32(0x2002)));
sewardj0ec33252004-07-03 13:30:00 +000045
sewardjc97096c2004-06-30 09:28:04 +000046 IRStmt* s1 = IRStmt_Put(8,4, IRExpr_Const(IRConst_U32(99)) );
sewardj12952ef2004-07-03 14:52:19 +000047#if 0
sewardjc97096c2004-06-30 09:28:04 +000048 IRStmt* s2 = IRStmt_Put(7,4, IRExpr_Binop(Iop_Add32,
49 IRExpr_Tmp(t1),
50 IRExpr_Const(IRConst_U32(55))));
sewardj12952ef2004-07-03 14:52:19 +000051#endif
52
53 IRStmt* s2 = IRStmt_Put(9,4,
54 IRExpr_Binop(Iop_Shl32,
55 IRExpr_Tmp(t0),
56 IRExpr_Binop(Iop_Add32,
57 IRExpr_Tmp(t1),
58 IRExpr_Tmp(t2))));
59
60
sewardj0ec33252004-07-03 13:30:00 +000061 s10->link = s11;
sewardj12952ef2004-07-03 14:52:19 +000062 s11->link = s12;
63 s12->link = s1;
sewardjc97096c2004-06-30 09:28:04 +000064 s1->link = s2;
65
sewardj0ec33252004-07-03 13:30:00 +000066 bb = mk_IRBB(env, s10, IRNext_UJump(IRConst_U32(-65565)));
sewardjc97096c2004-06-30 09:28:04 +000067
68 printf("bb is ...\n");
69 ppIRBB(stdout, bb);
70 printf("\n");
71
sewardj3b9d65e2004-07-03 19:52:16 +000072 if (0)
sewardj194d54a2004-07-03 19:08:18 +000073 vcode = iselBB_X86Instr(bb);
sewardj12952ef2004-07-03 14:52:19 +000074 else
sewardj2cd80dc2004-07-02 15:20:40 +000075 {
sewardj0ec33252004-07-03 13:30:00 +000076 Int i;
77 HReg vr0 = mkHReg(0, HRcInt, True);
78 HReg vr1 = mkHReg(1, HRcInt, True);
79 HReg vr2 = mkHReg(2, HRcInt, True);
80 HReg vr3 = mkHReg(3, HRcInt, True);
81 HReg eax = hregX86_EAX();
82 HReg ebx = hregX86_EBX();
83 HReg ecx = hregX86_ECX();
84 HReg edx = hregX86_EDX();
85 HReg ebp = hregX86_EBP();
86 vcode = newHInstrArray();
sewardj3b9d65e2004-07-03 19:52:16 +000087 vcode->n_vregs = 4;
sewardj0ec33252004-07-03 13:30:00 +000088
89 addHInstr(vcode, X86Instr_Alu32R(Xalu_MOV,
90 X86RMI_Imm(0x10001), vr0));
91 addHInstr(vcode, X86Instr_Alu32R(Xalu_MOV,
92 X86RMI_Imm(0x10101), vr1));
93 addHInstr(vcode, X86Instr_Alu32R(Xalu_MOV,
94 X86RMI_Imm(0x10201), vr2));
95 addHInstr(vcode, X86Instr_Alu32R(Xalu_MOV,
96 X86RMI_Imm(0x10301), vr3));
97
98 addHInstr(vcode, X86Instr_Alu32R(Xalu_MOV,
99 X86RMI_Imm(0x99999), eax));
100 addHInstr(vcode, X86Instr_Alu32R(Xalu_MOV,
101 X86RMI_Imm(0x99999), edx));
102
103 addHInstr(vcode, X86Instr_Alu32M(Xalu_MOV,
104 X86RI_Reg(vr0),
105 X86AMode_IR(0x100, ebp)));
106 addHInstr(vcode, X86Instr_Alu32M(Xalu_MOV,
107 X86RI_Reg(vr1),
108 X86AMode_IR(0x101, ebp)));
109 addHInstr(vcode, X86Instr_Alu32M(Xalu_MOV,
110 X86RI_Reg(vr2),
111 X86AMode_IR(0x101, ebp)));
112 addHInstr(vcode, X86Instr_Alu32M(Xalu_MOV,
113 X86RI_Reg(vr3),
114 X86AMode_IR(0x101, ebp)));
115 printf("\nBefore\n");
116 for (i = 0; i < vcode->arr_used; i++) {
117 ppX86Instr(stdout, vcode->arr[i]);
118 printf("\n");
119 }
120 printf("\n");
121 }
122
123 {
124 Int i;
sewardj2cd80dc2004-07-02 15:20:40 +0000125 HInstrArray* rcode;
126 HReg rregs_to_use[4];
127 rregs_to_use[0] = hregX86_EAX();
128 rregs_to_use[1] = hregX86_EBX();
129 rregs_to_use[2] = hregX86_ECX();
130 rregs_to_use[3] = hregX86_EDX();
sewardjc97096c2004-06-30 09:28:04 +0000131
sewardj2cd80dc2004-07-02 15:20:40 +0000132 rcode =
sewardj194d54a2004-07-03 19:08:18 +0000133 doRegisterAllocation(vcode,
sewardj3b9d65e2004-07-03 19:52:16 +0000134 rregs_to_use, 3, /* rregs */
sewardj12952ef2004-07-03 14:52:19 +0000135 isMove_X86Instr,
sewardj2cd80dc2004-07-02 15:20:40 +0000136 getRegUsage_X86Instr,
137 mapRegs_X86Instr,
sewardj0ec33252004-07-03 13:30:00 +0000138 genSpill_X86,
139 genReload_X86
sewardj2cd80dc2004-07-02 15:20:40 +0000140 );
141
sewardj0ec33252004-07-03 13:30:00 +0000142 printf("\nAfter\n");
143 for (i = 0; i < rcode->arr_used; i++) {
144 ppX86Instr(stdout, rcode->arr[i]);
145 printf("\n");
sewardj2cd80dc2004-07-02 15:20:40 +0000146 }
sewardj0ec33252004-07-03 13:30:00 +0000147 printf("\n");
148 }
149
sewardjc97096c2004-06-30 09:28:04 +0000150 return 0;
151}