52
52
cutils,verbose,globals,
53
symconst,aasmbase,aasmtai,defutil,
54
aasmbase,aasmtai,defutil,
54
55
cgbase,pass_1,pass_2,
110
111
secondpass(left);
111
112
location_reset(location,LOC_MMXREGISTER,OS_NO);
112
hreg:=cg.getmmxregister(exprasmlist,OS_M64);
113
hreg:=tcgx86(cg).getmmxregister(exprasmlist);
113
114
emit_reg_reg(A_PXOR,S_NO,hreg,hreg);
114
115
case left.location.loc of
119
120
LOC_CMMXREGISTER:
121
location.register:=cg.getmmxregister(exprasmlist,OS_M64);
122
location.register:=tcgx86(cg).getmmxregister(exprasmlist);
122
123
emit_reg_reg(A_MOVQ,S_NO,left.location.register,location.register);
127
reference_release(exprasmlist,left.location.reference);
128
location.register:=cg.getmmxregister(exprasmlist,OS_M64);
128
location.register:=tcgx86(cg).getmmxregister(exprasmlist);
129
129
emit_ref_reg(A_MOVQ,S_NO,left.location.reference,location.register);
154
154
emit_reg_reg(op,S_NO,location.register,hreg);
155
cg.ungetregister(exprasmlist,hreg);
156
155
emit_reg_reg(A_MOVQ,S_NO,hreg,location.register);
158
157
{$endif SUPPORT_MMX}
172
171
location_reset(location,LOC_MMREGISTER,def_cgsize(resulttype.def));
174
173
{ make life of register allocator easier }
175
location.register:=cg.getmmregister(exprasmlist,OS_M128);
174
location.register:=cg.getmmregister(exprasmlist,def_cgsize(resulttype.def));
176
175
cg.a_loadmm_reg_reg(exprasmlist,def_cgsize(resulttype.def),def_cgsize(resulttype.def),left.location.register,location.register,mms_movescalar);
178
reg:=cg.getmmregister(exprasmlist,OS_M128);
177
reg:=cg.getmmregister(exprasmlist,def_cgsize(resulttype.def));
180
179
objectlibrary.getdatalabel(l1);
181
180
consts.concat(Tai_label.Create(l1));
294
293
location_copy(location,left.location);
295
294
LOC_CMMXREGISTER:
297
location.register:=cg.getmmxregister(exprasmlist,OS_M64);
296
location.register:=tcgx86(cg).getmmxregister(exprasmlist);
298
297
emit_reg_reg(A_MOVQ,S_NO,left.location.register,location.register);
303
location_release(exprasmlist,left.location);
304
location.register:=cg.getmmxregister(exprasmlist,OS_M64);
302
location.register:=tcgx86(cg).getmmxregister(exprasmlist);
305
303
emit_ref_reg(A_MOVQ,S_NO,left.location.reference,location.register);
309
hreg:=cg.getmmxregister(exprasmlist,OS_M64);
307
hreg:=tcgx86(cg).getmmxregister(exprasmlist);
310
308
emit_reg_reg(A_MOVD,S_NO,r,hreg);
311
cg.ungetregister(exprasmlist,r);
313
emit_reg_reg(A_PXOR,S_D,hreg,location.register);
310
emit_reg_reg(A_PXOR,S_NO,hreg,location.register);
315
emit_const_reg(A_PSLLQ,S_NO,32,hreg);
312
emit_const_reg(A_PSLLQ,S_B,32,hreg);
316
313
{ higher 32 bit }
317
cg.ungetregister(exprasmlist,hreg);
318
emit_reg_reg(A_PXOR,S_D,hreg,location.register);
314
emit_reg_reg(A_PXOR,S_NO,hreg,location.register);
320
316
{$endif SUPPORT_MMX}
325
$Log: nx86mat.pas,v $
326
Revision 1.10 2005/02/14 17:13:10 peter