Subversion Repositories Kolibri OS

Rev

Rev 9847 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9847 Rev 9893
Line 1... Line 1...
1
(*
1
(*
2
    BSD 2-Clause License
2
    BSD 2-Clause License
Line 3... Line 3...
3
 
3
 
4
    Copyright (c) 2018-2022, Anton Krotov
4
    Copyright (c) 2018-2023, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 39... Line 39...
39
    sysMOVE*   = 27;  stLENGTH*  = 28;  stMIN*    = 29;  stMAX*    = 30;
39
    sysMOVE*   = 27;  stLENGTH*  = 28;  stMIN*    = 29;  stMAX*    = 30;
40
    sysSADR*   = 31;  sysTYPEID* = 32;  sysCOPY*  = 33;  sysINF*   = 34;
40
    sysSADR*   = 31;  sysTYPEID* = 32;  sysCOPY*  = 33;  sysINF*   = 34;
41
    sysPUT8*   = 35;  sysPUT16*  = 36;  stCOPY*   = 37;  stWCHR*   = 38;
41
    sysPUT8*   = 35;  sysPUT16*  = 36;  stCOPY*   = 37;  stWCHR*   = 38;
42
    sysWSADR*  = 39;  sysPUT32*  = 40;  (*sysNOP*   = 41;  sysEINT*  = 42;
42
    sysWSADR*  = 39;  sysPUT32*  = 40;  (*sysNOP*   = 41;  sysEINT*  = 42;
43
    sysDINT*   = 43;*)sysGET8*   = 44;  sysGET16* = 45;  sysGET32* = 46;
43
    sysDINT*   = 43;*)sysGET8*   = 44;  sysGET16* = 45;  sysGET32* = 46;
-
 
44
    sysVAL* = 47;
Line 44... Line 45...
44
 
45
 
45
    default32* =  2;  _default32* = default32 + 1;
46
    default32* =  2;  _default32* = default32 + 1;
46
    stdcall*   =  4;  _stdcall*   = stdcall + 1;
47
    stdcall*   =  4;  _stdcall*   = stdcall + 1;
47
    cdecl*     =  6;  _cdecl*     = cdecl + 1;
48
    cdecl*     =  6;  _cdecl*     = cdecl + 1;
Line 237... Line 238...
237
END NewIdent;
238
END NewIdent;
Line 238... Line 239...
238
 
239
 
239
 
240
 
240
PROCEDURE getOffset* (varIdent: IDENT): INTEGER;
241
PROCEDURE getOffset* (varIdent: IDENT): INTEGER;
Line 241... Line 242...
241
VAR
242
VAR
242
    size: INTEGER;
243
    size, glob_align: INTEGER;
243
 
244
 
244
BEGIN
245
BEGIN
-
 
246
    IF varIdent.offset = -1 THEN
-
 
247
        size := varIdent._type.size;
-
 
248
        IF varIdent.global THEN
-
 
249
            IF TARGETS.WinLin THEN
-
 
250
                glob_align := 16
245
    IF varIdent.offset = -1 THEN
251
            ELSE
246
        size := varIdent._type.size;
252
                glob_align := varIdent._type.align
247
        IF varIdent.global THEN
253
            END;
248
            IF UTILS.Align(program.bss, varIdent._type.align) THEN
254
            IF UTILS.Align(program.bss, glob_align) THEN
249
                IF UTILS.maxint - program.bss >= size THEN
255
                IF UTILS.maxint - program.bss >= size THEN
250
                    varIdent.offset := program.bss;
256
                    varIdent.offset := program.bss;
Line 1107... Line 1113...
1107
    EnterProc(unit, "get8",   idSYSPROC, sysGET8);
1113
    EnterProc(unit, "get8",   idSYSPROC, sysGET8);
1108
    EnterProc(unit, "put",    idSYSPROC, sysPUT);
1114
    EnterProc(unit, "put",    idSYSPROC, sysPUT);
1109
    EnterProc(unit, "put8",   idSYSPROC, sysPUT8);
1115
    EnterProc(unit, "put8",   idSYSPROC, sysPUT8);
1110
    EnterProc(unit, "code",   idSYSPROC, sysCODE);
1116
    EnterProc(unit, "code",   idSYSPROC, sysCODE);
1111
    EnterProc(unit, "move",   idSYSPROC, sysMOVE);
1117
    EnterProc(unit, "move",   idSYSPROC, sysMOVE);
-
 
1118
    EnterProc(unit, "val",    idSYSPROC, sysVAL);
1112
           (*
1119
           (*
1113
    IF program.target.sys = mConst.Target_iMSP430 THEN
1120
    IF program.target.sys = mConst.Target_iMSP430 THEN
1114
        EnterProc(unit, "nop",  idSYSPROC, sysNOP);
1121
        EnterProc(unit, "nop",  idSYSPROC, sysNOP);
1115
        EnterProc(unit, "eint", idSYSPROC, sysEINT);
1122
        EnterProc(unit, "eint", idSYSPROC, sysEINT);
1116
        EnterProc(unit, "dint", idSYSPROC, sysDINT)
1123
        EnterProc(unit, "dint", idSYSPROC, sysDINT)
Line 1254... Line 1261...
1254
        program.stTypes.tCARD32.align := 4
1261
        program.stTypes.tCARD32.align := 4
1255
    END;
1262
    END;
Line 1256... Line 1263...
1256
 
1263
 
1257
    IF TARGETS.RealSize # 0 THEN
1264
    IF TARGETS.RealSize # 0 THEN
-
 
1265
        program.stTypes.tREAL := enterType(tREAL, TARGETS.RealSize, 0, NIL);
-
 
1266
        IF TARGETS.OS = TARGETS.osLINUX32 THEN
-
 
1267
            program.stTypes.tREAL.align := 4
1258
        program.stTypes.tREAL := enterType(tREAL, TARGETS.RealSize, 0, NIL);
1268
        ELSE
-
 
1269
            program.stTypes.tREAL.align := TARGETS.RealSize
1259
        program.stTypes.tREAL.align := TARGETS.RealSize
1270
        END
Line 1260... Line 1271...
1260
    END;
1271
    END;
1261
 
1272
 
1262
    program.stTypes.tSTRING := enterType(tSTRING, TARGETS.WordSize, 0, NIL);
1273
    program.stTypes.tSTRING := enterType(tSTRING, TARGETS.WordSize, 0, NIL);