SYSTEM.GET Auto-increment Problem

Locked
gray
Posts: 170
Joined: Tue Feb 12, 2019 2:59 am
Location: Mauritius

SYSTEM.GET Auto-increment Problem

Post by gray » Mon Jun 17, 2024 11:19 am

Test code (Astrobe for Cortex-M0 v9.2.1):

Code: Select all

MODULE M;
  IMPORT SYSTEM;
  TYPE R = RECORD a0: INTEGER END;
  VAR rm: R;
  
  PROCEDURE p1;
    VAR ch: CHAR;
  BEGIN
    SYSTEM.GET(rm.a0, ch, 1)
  END p1;
END M.
Partial assembly code:

Code: Select all

    SYSTEM.GET(rm.a0, ch, 1);
.   140    08CH  0480EH          ldr      r0,[pc,#56] -> 200
.   142    08EH  06800H          ldr      r0,[r0]
.   144    090H  07801H          ldrb     r1,[r0]
.   146    092H  03001H          adds     r0,#1
.   148    094H  0AA00H          add      r2,sp,#0
.   150    096H  07011H          strb     r1,[r2]
.   152    098H  06000H          str      r0,[r0]     <==
The incremented address (r0) does not get stored correctly. SYSTEM.PUT has the same problem.

These related cases work properly, also for SYSTEM.PUT:

Code: Select all

MODULE M;
  IMPORT SYSTEM;
  TYPE R = RECORD a0: INTEGER END;
  VAR a0: INTEGER;
  
  PROCEDURE p2;
    VAR ch: CHAR; b0: INTEGER; rl: R;
  BEGIN
    SYSTEM.GET(rl.a0, ch, 1);
    SYSTEM.GET(a0, ch, 1);
    SYSTEM.GET(b0, ch, 1)
  END p2;
END M.

Code: Select all

    SYSTEM.GET(rl.a0, ch, 1);
.   154    09AH  09802H          ldr      r0,[sp,#8]
.   156    09CH  07801H          ldrb     r1,[r0]
.   158    09EH  03001H          adds     r0,#1
.   160    0A0H  0AA00H          add      r2,sp,#0
.   162    0A2H  07011H          strb     r1,[r2]
.   164    0A4H  09002H          str      r0,[sp,#8]
    SYSTEM.GET(a0, ch, 1);
.   166    0A6H  04809H          ldr      r0,[pc,#36] -> 204
.   168    0A8H  06800H          ldr      r0,[r0]
.   170    0AAH  07801H          ldrb     r1,[r0]
.   172    0ACH  03001H          adds     r0,#1
.   174    0AEH  0AA00H          add      r2,sp,#0
.   176    0B0H  07011H          strb     r1,[r2]
.   178    0B2H  04906H          ldr      r1,[pc,#24] -> 204
.   180    0B4H  06008H          str      r0,[r1]
    SYSTEM.GET(b0, ch, 1)
.   182    0B6H  09801H          ldr      r0,[sp,#4]
.   184    0B8H  07801H          ldrb     r1,[r0]
.   186    0BAH  03001H          adds     r0,#1
.   188    0BCH  0AA00H          add      r2,sp,#0
.   190    0BEH  07011H          strb     r1,[r2]
.   192    0C0H  09001H          str      r0,[sp,#4]

cfbsoftware
Site Admin
Posts: 545
Joined: Fri Dec 31, 2010 12:30 pm
Contact:

Re: SYSTEM.GET Auto-increment Problem

Post by cfbsoftware » Tue Jun 18, 2024 2:36 am

Thank you for your report and the implied workarounds. The problem will be addressed in the release following v9.2.1.

Locked