Here is output from the 2.4.5 Compiler and the 2.62 compiler. of the following program compiled the same way.
It has always been possible to eliminate runtime checking when incrementing a byte/word in this way (if one wants the byte to roll over).
This is not possible with the 2.6.2 compiler. Is there a reason for this.
Carsten
program test_arm9;
Var
b:byte;
begin
b:=byte(succ(b));
end.Free Pascal Compiler version 2.4.5 [2012/06/19] for arm # [6] b:=byte(succ(b));
ldr r0,.Lj5
ldrb r0,[r0]
add r0,r0,#1
and r0,r0,#255
ldr r1,.Lj5
strb r0,[r1]
.stabn 68,0,7,.Ll3 - main
Free Pascal Compiler version 2.6.2 [2013/07/16] for arm # [6] b:=byte(succ(b));
ldr r0,.Lj5
ldrb r0,[r0]
adds r1,r0,#1
bcc .Lj6
bl FPC_OVERFLOW
.Lj6:
mov r0,r1
add r0,r0,#0
cmp r0,#255
bls .Lj7
bl FPC_RANGEERROR
.Lj7:
and r0,r1,#255
ldr r1,.Lj5
strb r0,[r1]
.stabn 68,0,7,_$TEST_ARM9$_Ll3 - main
