|
@@ -742,10 +742,16 @@ implementation
|
|
in_succ_x:
|
|
in_succ_x:
|
|
begin
|
|
begin
|
|
secondpass(p^.left);
|
|
secondpass(p^.left);
|
|
- if p^.inlinenumber=in_pred_x then
|
|
|
|
- asmop:=A_DEC
|
|
|
|
|
|
+ if not (cs_check_overflow in aktlocalswitches) then
|
|
|
|
+ if p^.inlinenumber=in_pred_x then
|
|
|
|
+ asmop:=A_DEC
|
|
|
|
+ else
|
|
|
|
+ asmop:=A_INC
|
|
else
|
|
else
|
|
- asmop:=A_INC;
|
|
|
|
|
|
+ if p^.inlinenumber=in_pred_x then
|
|
|
|
+ asmop:=A_SUB
|
|
|
|
+ else
|
|
|
|
+ asmop:=A_ADD;
|
|
case p^.resulttype^.size of
|
|
case p^.resulttype^.size of
|
|
4 : opsize:=S_L;
|
|
4 : opsize:=S_L;
|
|
2 : opsize:=S_W;
|
|
2 : opsize:=S_W;
|
|
@@ -776,8 +782,13 @@ implementation
|
|
end;
|
|
end;
|
|
end
|
|
end
|
|
else p^.location.register:=p^.left^.location.register;
|
|
else p^.location.register:=p^.left^.location.register;
|
|
- exprasmlist^.concat(new(pai386,op_reg(asmop,opsize,
|
|
|
|
- p^.location.register)));
|
|
|
|
|
|
+
|
|
|
|
+ if not (cs_check_overflow in aktlocalswitches) then
|
|
|
|
+ exprasmlist^.concat(new(pai386,op_reg(asmop,opsize,
|
|
|
|
+ p^.location.register)))
|
|
|
|
+ else
|
|
|
|
+ exprasmlist^.concat(new(pai386,op_const_reg(asmop,opsize,1,
|
|
|
|
+ p^.location.register)));
|
|
emitoverflowcheck(p);
|
|
emitoverflowcheck(p);
|
|
emitrangecheck(p,p^.resulttype);
|
|
emitrangecheck(p,p^.resulttype);
|
|
end;
|
|
end;
|
|
@@ -1013,7 +1024,10 @@ implementation
|
|
end.
|
|
end.
|
|
{
|
|
{
|
|
$Log$
|
|
$Log$
|
|
- Revision 1.25 1999-02-05 10:56:19 florian
|
|
|
|
|
|
+ Revision 1.26 1999-02-15 11:40:21 pierre
|
|
|
|
+ * pred/succ with overflow check must use ADD DEC !!
|
|
|
|
+
|
|
|
|
+ Revision 1.25 1999/02/05 10:56:19 florian
|
|
* in some cases a writeln of temp. ansistrings cause a memory leak, fixed
|
|
* in some cases a writeln of temp. ansistrings cause a memory leak, fixed
|
|
|
|
|
|
Revision 1.24 1999/01/21 22:10:39 peter
|
|
Revision 1.24 1999/01/21 22:10:39 peter
|