mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-15 20:30:26 +02:00
* fix for bug0211 for i386
This commit is contained in:
parent
1cf84431d8
commit
c18fdf95f3
@ -618,8 +618,12 @@ implementation
|
||||
LOC_REGISTER :
|
||||
begin
|
||||
secondpass(p^.left);
|
||||
p^.location.register:=p^.left^.location.register;
|
||||
exprasmlist^.concat(new(pai386,op_const_reg(A_XOR,opsize,1,p^.location.register)));
|
||||
{p^.location.register:=p^.left^.location.register;
|
||||
exprasmlist^.concat(new(pai386,op_const_reg(A_XOR,opsize,1,p^.location.register)));}
|
||||
p^.location.loc:=LOC_FLAGS;
|
||||
p^.location.resflags:=F_E;
|
||||
exprasmlist^.concat(new(pai386,op_reg_reg(A_TEST,opsize,p^.left^.location.register,p^.left^.location.register)));
|
||||
ungetregister(p^.left^.location.register);
|
||||
end;
|
||||
LOC_CREGISTER :
|
||||
begin
|
||||
@ -628,7 +632,10 @@ implementation
|
||||
p^.location.loc:=LOC_REGISTER;
|
||||
p^.location.register:=def_getreg(p^.resulttype);
|
||||
emit_reg_reg(A_MOV,opsize,p^.left^.location.register,p^.location.register);
|
||||
exprasmlist^.concat(new(pai386,op_const_reg(A_XOR,opsize,1,p^.location.register)));
|
||||
exprasmlist^.concat(new(pai386,op_reg_reg(A_TEST,opsize,p^.location.register,p^.location.register)));
|
||||
ungetregister(p^.location.register);
|
||||
p^.location.loc:=LOC_FLAGS;
|
||||
p^.location.resflags:=F_E;
|
||||
end;
|
||||
LOC_REFERENCE,
|
||||
LOC_MEM :
|
||||
@ -639,12 +646,12 @@ implementation
|
||||
del_reference(p^.left^.location.reference);
|
||||
{ this was placed before del_ref => internaalerror(10) }
|
||||
p^.location.register:=def_getreg(p^.resulttype);
|
||||
if p^.left^.location.loc=LOC_CREGISTER then
|
||||
emit_reg_reg(A_MOV,opsize,p^.left^.location.register,p^.location.register)
|
||||
else
|
||||
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,opsize,
|
||||
newreference(p^.left^.location.reference),p^.location.register)));
|
||||
exprasmlist^.concat(new(pai386,op_const_reg(A_XOR,opsize,1,p^.location.register)));
|
||||
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,opsize,
|
||||
newreference(p^.left^.location.reference),p^.location.register)));
|
||||
exprasmlist^.concat(new(pai386,op_reg_reg(A_TEST,opsize,p^.location.register,p^.location.register)));
|
||||
ungetregister(p^.location.register);
|
||||
p^.location.loc:=LOC_FLAGS;
|
||||
p^.location.resflags:=F_E;
|
||||
end;
|
||||
end;
|
||||
end
|
||||
@ -755,7 +762,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.17 1999-01-21 22:10:41 peter
|
||||
Revision 1.18 1999-02-03 10:11:12 pierre
|
||||
* fix for bug0211 for i386
|
||||
|
||||
Revision 1.17 1999/01/21 22:10:41 peter
|
||||
* fixed array of const
|
||||
* generic platform independent high() support
|
||||
|
||||
|
@ -316,6 +316,10 @@ implementation
|
||||
if is_boolean(p^.resulttype) then
|
||||
begin
|
||||
p^.registers32:=p^.left^.registers32;
|
||||
{$ifdef i386}
|
||||
if p^.left^.location.loc<>LOC_JUMP then
|
||||
p^.location.loc:=LOC_FLAGS;
|
||||
{$endif def i386}
|
||||
if (p^.location.loc in [LOC_REFERENCE,LOC_MEM,LOC_CREGISTER]) then
|
||||
begin
|
||||
p^.location.loc:=LOC_REGISTER;
|
||||
@ -369,7 +373,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.10 1998-12-11 16:50:24 florian
|
||||
Revision 1.11 1999-02-03 10:11:11 pierre
|
||||
* fix for bug0211 for i386
|
||||
|
||||
Revision 1.10 1998/12/11 16:50:24 florian
|
||||
+ typed const int64 and qword
|
||||
+ unary minus-operator q1:=-q2;
|
||||
+ not-operator
|
||||
|
Loading…
Reference in New Issue
Block a user